Releases: jmagly/carbonyl-agent
Releases · jmagly/carbonyl-agent
carbonyl-agent 2026.5.3
Cookie/token import from host browsers, plus three-mode QA-runner documentation.
Added
carbonyl-agent cookies {import,list,revoke}— import authenticated session cookies from a host browser (Chrome / Chromium / Brave / Edge / Firefox) into a carbonyl session's user-data-dir. Per-domain authorization prompt on every import, sensitive-domain denylist (banks, SSO providers, payment processors, primary email) that requires--allow-sensitiveAND typing the domain to confirm, libsecret-backed Chromium decrypt, copy-then-read of the source SQLite (tolerates an open source browser), mode0600on every file written, audit log at~/.local/share/carbonyl-agent/cookie-imports.logthat records cookie names but never values. Optional[cookies]extra shipscryptography>=42+secretstorage>=3.3; Firefox import works on stdlib alone. (#122)docker/qa-runner/README.mdrefactor — documents three first-class runtime modes (bare metal / Docker / VM) with a capability matrix per mode and a chooser pointing trusted-input workloads at theagentic-sandboxbrowser-qaloadout. (#120, #121)
Changed
.gitea/workflows/ci.ymltypecheck and test jobs now install the[cookies]extra socryptography+secretstoragestubs are resolvable and the Chromium-decrypt test path runs under all three Python versions.
Closed
- #121 — systemd-udevd Xorg binding inside Docker documented as a known Docker-mode constraint; the VM-mode path covers the trusted-input workload.
- #122 — cookie/token import feature with per-domain authorization gate.
carbonyl-agent 2026.5.2
Runtime pin bump for the M148 release cut on roctinam/carbonyl.
Changed
.carbonyl-runtime-versionpinned to8f070d2720157bd0, the M148 (148.0.7778.167) baseline shipped in carbonyl runtime v0.2.0-alpha.5.carbonyl-agent install(default--tag) and the qa-runner Docker image now consume the M148 runtime tarball. Triggers automatic qa-runner image rebuild via.gitea/workflows/build-qa-runner.yml. (roctinam/carbonyl#70)
carbonyl-agent 2026.5.1
Maintenance release. Real-browser fingerprint refresh (Chrome 147 → 148, Firefox 150 desktop preset wired from a captured ClientHello), airgap install support, audit-log rotation, and the GitHub-first release pipeline that ships this tag.
Added
- Airgap install via
carbonyl-agent install --from-file <tarball>and--dry-runfor offline / sandboxed hosts that can't reach Gitea release assets directly. (#95, #117) - Size-based rotation for the egress audit log at
~/.local/state/carbonyl-agent/egress-audit.log— caps file size and rotates to numbered backups so long-running daemons don't accumulate unbounded audit history. (#93, #116) - TestPyPI dry-run workflow (
.github/workflows/release-testpypi.yml) — manualworkflow_dispatchpublish to TestPyPI for first-of-a-line release verification, mirroring the production release build pipeline. (#12 follow-up, #112) scripts/check-build-env.shpreflight that surfaces missing Rust prerequisites (clang, cmake, libclang-dev, libssl-dev, pkg-config, python3-dev) before they manifest as opaque BoringSSL/boring-sys2 build failures. Documented in README. (#109)- PyPI classifiers (Programming Language, Topic, Operating System, etc.) and a runtime compatibility matrix in the install docs covering supported Linux distributions and arch triples. (#90, #92)
- Firefox 150.0.3 desktop preset (
FIREFOX_150_DESKTOP) incarbonyl-wreqpopulated from a real-browser ClientHello capture (1874 bytes, SHA-2563416dc48ef…). Wired throughpreset_forand exercised by the legacy andvia_registryLayer-2 conformance paths. The h2 SETTINGS for Firefox are sourced from the persona spec backstop until a Firefox-trusted cert path lands. (#102) carbonyl-wreqChromium-family chained issue (#118) and HITL-deferred capture tracker (#119) filed for the next iteration of the wreq-util replacement track.
Changed
- Persona corpus refreshed from Chrome 147 to Chrome 148 across
carbonyl-fingerprinttemplate registry and conformance fixtures. Existing personas validated against the 148 baseline. (#114 + corpus refresh) - Real Chrome 148 h2 SETTINGS recaptured against the current Chrome network stack. The new capture no longer advertises
MAX_CONCURRENT_STREAMS(setting 3) —CHROME_148_DESKTOPdrops it to match observed wire bytes, eliminating a Layer-2 mismatch. (#110, #114) - pdoc documentation bundle cleaned (no warnings) and CI now fails on pdoc warnings to keep the bundle clean going forward. (#96, #115)
.github/workflows/release.ymlis now Phase-1-ready: GitHub release ships frombuilddirectly; PyPI publish is gated behind theENABLE_PYPI_PUBLISHrepo variable. Flip the variable totrueafter #12's PyPI/TestPyPI trusted-publisher setup is complete to enable Phase 2 (strict PyPI gate before GitHub release).
Fixed
- Removed stale "TODO; see entry point" comments referring to Rule H (HKDF-Expand deterministic noise-seed derivation) — Rule H is implemented in
seed::derive_canvas_noise/seed::derive_audio_noise. Added Rule H to the enforced-rules list and dropped it from the "deliberately not implemented" set. (#91) - Rust-crates CI (
check.yml) checkout step onpull_requestevents: Gitea setsGITHUB_REF_NAMEto the PR number (e.g.109), not a branch name. Replacedgit clone --branch ${GITHUB_REF_NAME}with explicit fetch-by-SHA so the workflow works on both push and pull_request events. (#107, #108, #111) - Documented Rust toolchain prerequisites in the contributor-onboarding section of the README; the build-env preflight script (above) shifts these failures left from "opaque link error after 4 minutes of compilation" to "explicit missing-package report in 2 seconds." (#109)
Known issues
wreq-util(transitive dep ofcarbonyl-wreq) remains licensed GPL-3.0; the wreq feature is dev-only and the GPL crate is not redistributed in the wheel. Replacement track continues via in-house preset registry (#99, #100). Iteration B closed with Chrome 148 + Firefox 150 captured (#102); mobile-chrome / safari-macos / safari-ios captures deferred as HITL-blocked on physical devices (#119); Chromium-family variants (Brave, Chromium, Edge, Opera, Vivaldi, Arc) scoped for the next iteration (#118).- PyPI publish remains skipped (Phase 1 of the release pipeline) — releases ship as GitHub releases at https://github.com/jmagly/carbonyl-agent/releases until #12's PyPI / TestPyPI trusted-publisher setup is completed on the web UI. The release pipeline is wired and one repo-variable flip away from full PyPI publishing.