Repository navigation
v4.5.0
4.5.0 - 2026-09-22
Highlights: Prevent snapshot data loss, crashes, and stuck desktop mutations; restore reliable Chrome connections; and ship smaller architecture-specific CLI downloads with automatic Homebrew selection.
- Reject zero and negative snapshot retention hours before cleanup can remove any data. Thanks @SebTardif! #751.
- Avoid stack overflow when normalizing deeply nested OpenAI model prefixes while preserving generation settings. Thanks @SebTardif! #752.
- Validate menu-bar window-list status and counts before allocating buffers or consuming results, preventing negative-count crashes. Thanks @SebTardif! #753.
- Reject overflowing scroll amounts before focus or input instead of trapping in tick arithmetic; preserve signed and zero amounts.
- Bound desktop mutation lock acquisition and reserve concurrent mutation IDs before waiting, preventing hangs and orphaned barriers. Thanks @SebTardif! #758.
- Preserve valid long input delays and prevent overflow in typing and scrolling waits. Thanks @SebTardif! #746, #747.
- Connect to approval-mode Chrome with one persistent WebSocket for verification and page operations; preserve the approval window, explain HTTP discovery 404s, and refuse silent reconnection or endpoint redirects. Thanks @steipete for the report!
- Fix CLI browser page actions refusing after a successful connection by keeping scoped-session epochs out of root Bridge requests.
- Fix foreground browser commands being blocked by an untrusted historical daemon; retain host and receipt checks, allow explicitly selected browser-capable GUI hosts, and distinguish Bridge authentication failures from Chrome approval failures. #739.
- Accept IPv6 loopback browser endpoints and reject TCP ports outside 1–65535 before discovery or receipt validation.
- Preserve snapshot lookup failures during clicks instead of misreporting timeouts and other errors as stale snapshots. Thanks @SebTardif! #756.
- Reject empty MCP Accessibility results for an explicitly requested window while preserving empty app and frontmost inspections. Thanks @SebTardif! #755.
- Let automatic screenshots use the proven classic path on an explicitly selected Bridge host when another process owns ScreenCaptureKit; keep explicit modern capture strict.
- Stop Inspector screen-change notifications when monitoring ends or its controller is released, and prevent duplicate observer registration. Thanks @SebTardif! #754.
- Add smaller arm64 and x86_64 CLI release archives alongside the universal archive, with matching Swift runtime libraries and checksums.
- Use architecture-specific macOS CLI archives for Homebrew when a release provides the complete verified pair. Thanks @vincentkoc! #766.
- Read embedded source stamps from single-architecture CLI binaries as well as universal builds, retaining cross-slice consistency checks.
- Avoid rewriting temporary screenshots during MCP image resizing while preserving validated, atomic final output.
- Skip unused local service initialization when snapshot commands target an explicit Bridge socket.
- Reduce JSON CLI startup work by avoiding duplicate command-signature reflection.
- Reduce MCP outcome validation overhead by encoding typed metadata directly, retaining canonical result and retry-safety checks.
- Skip formatting metadata for disabled CLI log messages.
- Reduce capture postprocessing by drawing contact-sheet cells directly and converting screenshots to JPEG without an intermediate TIFF.
- Refresh CI and the verified qualification runtime to Node 26.9.0, pnpm to 11.27.1, Swift Configuration to 1.2.1, KeyboardShortcuts to 3.1.0, and Sparkle to 2.10.0 for current macOS compatibility fixes.
Verification
- Source commit:
a1d48b28a3717b16fa5940151de01858714411f6 - Release plan SHA-256:
c352b3dee11293dcc8c07547e886bc9622ab6029c9ad4a5586662818d97a4b9f - Checksums SHA-256:
f82f89b1d91e68afd1a75bf3ff292487c3a9b0de6760a3529bcb9a856f196cbc - npm version:
4.5.0 - npm tarball: https://registry.npmjs.org/@steipete/peekaboo/-/peekaboo-4.5.0.tgz
- npm integrity:
sha512-Et065sF0Xe5Vykkg4Fg9OuYx9WF0o95KVdQiuK5tkmhAiTejEyOY1XCN8pRToBz3tZfS8QSo8jBDPQrAbu8etQ== - npm published:
2026-09-22T16:00:42.654Z
Proof
Peekaboo 4.5.0 release proof
Source: a1d48b28a3717b16fa5940151de01858714411f6.
Release metadata: #770.
Publication-guard repair: #771.
Exact-source validation required for publication
- macOS CI: https://github.com/openclaw/Peekaboo/actions/runs/35743505641
- CodeQL: https://github.com/openclaw/Peekaboo/actions/runs/35743505534
- Supplemental release validation (explicit expected-source dispatch): https://github.com/openclaw/Peekaboo/actions/runs/35743567836
- Documentation deployment: https://github.com/openclaw/Peekaboo/actions/runs/35743568356
Publication confirmation is held until these exact-source runs succeed. The native driver independently reruns complete publication preflight and requires frozen source/helper identity, Foundation signing, Apple notarization, and complete artifact verification. The release-plan receipt records successful preflight and publication eligibility.
Completed preparation and repair proof
- Release metadata and the final repair each passed independent Codex P0–P2 review with no actionable findings.
- Version surfaces agree on 4.5.0. Dated changelogs and tracked release notes preserve every original entry and contributor credit.
- Formatting, lint (four existing warnings; no serious violations), docs lint, documentation site build, CLI build, and deterministic preparation dry run passed.
- The initial complete native publication preflight passed: 86 Foundation tests and 1,995 CLI tests across four targets, plus the full script/artifact, browser, consumer, and background-certification gates. The corrected source repeats all of these gates.
- Metadata PR macOS CI: https://github.com/openclaw/Peekaboo/actions/runs/35720072372 — success.
- Metadata PR CodeQL: https://github.com/openclaw/Peekaboo/actions/runs/35720072379 — success.
- Repair PR macOS CI: https://github.com/openclaw/Peekaboo/actions/runs/35737125285 — success.
- Repair PR CodeQL: https://github.com/openclaw/Peekaboo/actions/runs/35737125328 — success.
The first release attempt stopped before any public action because archive verification reused a clean-checkout stamping check after generating appcast.xml. The repair uses the existing frozen release-state contract: exact source commit, exact generated-feed hash, and refusal of every unrelated tracked, untracked, or submodule change. npm archives now use the same source binding.
The behavioral regression reproduced that failure before the fix, then passed for universal, arm64, x86_64, and npm archives while rejecting changed feed bytes, unrelated source edits, wrong embedded stamps, and mismatched HEAD state. Source-provenance, release-driver, signing-policy, and shell syntax checks passed. Read-only application of the corrected final-verification stage to the preserved signed/notarized artifact set also passed all CLI, npm, app ZIP, DMG, checksum, and Sparkle checks, including Intel execution under Rosetta. That initial artifact set remains unpublished; the driver rebuilds from the corrected source above.
Toolchain and coverage limits
Native publication: Xcode 27.2 (27B5019j), Apple Swift 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1), macOS SDK 27.2, Node 26.9.0, and pnpm 11.27.1. Xcode selection is task-local; global selection is unchanged. Native build/test/sign commands run at priority 19 with two build workers where supported.
Hosted Xcode 26.x runs provide additional compatibility evidence and do not replace native publication gates. Initial hosted evidence recorded Xcode 26.6, Swift 6.3.3, and matching source/dependency-lock receipts across all 12 supplemental packages.
Native metadata fixtures explicitly skip positive ZIP, four DMG, and five portability cases where persistent com.apple.provenance prevents the required clean fixture. The installed signed 4.2.2 fixture is unavailable. No ready task-owned isolated desktop was available for live desktop/provider testing; no live proof is claimed, and operator saved state was not used as a substitute. Built-in skips and synthetic certification are not live coverage. Shipped artifacts remain subject to the full signature, notarization, archive, runtime, and public-channel verification gates.