Skip to content

v4.9.8

Latest

Choose a tag to compare

@github-actions github-actions released this 05 Nov 22:30
· 3 commits to main since this release
v4.9.8
70dbc41

4.9.8 - 2026-11-05

Highlights: Select files in Open panels with dialog file and stop typing filenames into Search; keep exact-window clicks and window focus working when another running app shares the target's name; find exact windows that an app exposes only through its focused or main window; make window focus fall back to Accessibility when macOS declines activation; and start MCP and Agent runtimes when another process owns the capture lane without a Bridge.

  • Select files in Open panels with dialog file, using --path <file> or --path <dir> --name <file>: the full path goes through Go to Folder and the selection is verified before confirming, and a missing file is refused before any input. Open panels have no filename field, so this could not work before. Thanks @realchrisbarnes for the report! #1158.
  • Refuse filename entry into Search, Filter, Tags, or Comments controls in file dialogs, with an actionable error when no safe filename field is available. Thanks @goutamadwant! #1159, refs #1158.
  • Keep exact-window clicks and window focus working when another running app shares the target's name, instead of refusing with an unknown focused window or "Multiple apps match". Focused-window lookups now use the exact process and report only the window Accessibility says is focused, so a click refuses instead of trusting a ranked guess, and its refusal keeps the lookup error. Thanks @Amogusto! #1161.
  • Make window focus fall back to an Accessibility activation request when macOS declines the native one, as it can for apps launched from a shell, instead of timing out. Exact focus is still verified afterward. Refs #1161.
  • Find exact windows that an app exposes only through its focused or main window, such as Figma when AXWindows comes back empty, while retaining exact window-ID and owner checks. Thanks @YarikMix! #1154.
  • Start MCP and Agent runtimes when another live Peekaboo process owns the ScreenCaptureKit lane without a reachable Bridge socket, instead of exiting 1 before the JSON-RPC handshake. Capture-capable tools keep the CAPTURE_FAILED refusal for the session while noncapture tools remain usable. Thanks @chenyuhao0628! #1146, fixes #1145.
  • Clarify exact-window target-changed errors with unavailable identity versus changed components and whether validation failed before the operation, after capture, or after the operation. #1151.
  • Wait 250ms instead of 150ms before restoring the previous clipboard after a temporary paste, and document that restoration is time-based: an app that reads the clipboard later than the restore delay can paste the previous contents, so raise --restore-delay (MCP restore_delay_ms) for slow receivers. #1140, refs #1111.
  • Keep duration labels inside the unit they claim: 59.95s now reads 1m 0s instead of 60.0s, 0.9995s reads 1.0s instead of 1000ms, and non-finite or out-of-range durations read "an unknown duration" instead of trapping. Thanks @rudycelekli! #1149.
  • Say that no windows are available when a window index is requested from an app without windows, instead of Available windows: 0--1. Thanks @rudycelekli! #1150.
  • Docs site: render Markdown images and task-list checkboxes, restore the missing smart-select metadata table cells, keep URL schemes inside highlighted code strings, point source links at the repository, and show read-when hints without YAML quotes. Thanks @rudycelekli! #1141, #1142, #1143, #1144, #1147, #1148.
  • Update Swift Log to 1.16.2 for in-place metadata writes and Swift Configuration to 1.4.0, preserving the Swift 6.2 and macOS baselines.
  • Run main CodeQL analysis on the existing weekly schedule instead of every push, preserving PR scans and independent manual runs.

Verification

Run: https://github.com/openclaw/Peekaboo/actions/runs/42116177681

Verified on xcode-27: arm64, x86_64 under Rosetta, and an independent arm64 runtime audit.

Toolchain and notarization submissions:

{
  "schemaVersion": 1,
  "repository": "openclaw/Peekaboo",
  "tag": "v4.9.8",
  "commit": "70dbc4183f390a5a72d5dc01d8a77eb672217070",
  "teamId": "FWJYW4S8P8",
  "authority": "Developer ID Application: OpenClaw Foundation (FWJYW4S8P8)",
  "toolchain": {
    "build": {
      "xcode": "Xcode 27.1\nBuild version 27A9275",
      "swift": "Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)\nTarget: arm64-apple-macosx27.0.0",
      "sdk": "27.0"
    },
    "sign": {
      "xcode": "Xcode 27.1\nBuild version 27A9275",
      "swift": "Apple Swift version 6.4 (swiftlang-6.4.0.34.1 clang-2100.3.34.1)\nTarget: arm64-apple-macosx27.0.0",
      "sdk": "27.0"
    }
  },
  "submissions": {
    "dmg": "63553cc2-2595-4808-9d43-a43213367f96",
    "app": "bc5beea1-f97a-4e50-acfc-e4b640d5342a",
    "cli": "fc0b529c-74e7-4380-895d-431be3ecea30"
  },
  "buildNumber": "4090899",
  "edSignature": "owrPIc/oz76hVIMc4PNEwuyUcA7sKgzThcVILcuRtSi5ZJvf6/GfLNH5E9gx7ixpjXWpVp6rE0hgW41wOhaXAQ==",
  "digests": {
    "peekaboo-macos-universal.tar.gz": "88823bb39e16c744c43ffd94c18c3773cd2f7c05bc7843e6e1e2e5da58b9ce76",
    "Peekaboo-4.9.8.dmg": "fcbba5643b425fc7cc337a2a94665480c4d3887f003c9813deb89e17dc34928c",
    "Peekaboo-4.9.8.app.zip": "1b824ec0fea11836a2394ab550bee4e9517b7dabda8ef93700ebeb4263a4a528",
    "peekaboo-macos-x86_64.tar.gz": "7792ac5f4cefbd4473c2766d4905ceb486df8da4aa270399cda214b0f4bed877",
    "peekaboo-macos-arm64.tar.gz": "5b82b246cd7b257b68d15e136a8234848a8e70a5999cdf5526993fb860685bfe"
  },
  "downloaderEntitlements": {
    "bundle": "Contents/Frameworks/Sparkle.framework/Versions/B/XPCServices/Downloader.xpc",
    "entitlements": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict/>\n</plist>\n"
  }
}

Checksums:

aa807c1f426ce2e6a12bf8edbce1e3666736102c07b201343c9269960d1c2827  ASSET-INVENTORY.json
1b824ec0fea11836a2394ab550bee4e9517b7dabda8ef93700ebeb4263a4a528  Peekaboo-4.9.8.app.zip
fcbba5643b425fc7cc337a2a94665480c4d3887f003c9813deb89e17dc34928c  Peekaboo-4.9.8.dmg
6cc71bf3639a7ee98d9017351a7a6fbea1b79d99bcea511ff3df6863b3dd06dc  RELEASE-NOTES.md
3debbce3203329687e4d6dd55d11453a04ac2f39cd06e55d0b44ec4c8f389521  SIGNING-MANIFEST.json
6a07729b7ad3004a7730d7ec1aac95d5a9c697efa0fa450e107c7b1a3207e2be  appcast-entry.json
16a04c20b8f6314acf71013897b76fff2695e664fe3de1889e7fd7701bd8c1b5  appcast.xml
5b82b246cd7b257b68d15e136a8234848a8e70a5999cdf5526993fb860685bfe  peekaboo-macos-arm64.tar.gz
88823bb39e16c744c43ffd94c18c3773cd2f7c05bc7843e6e1e2e5da58b9ce76  peekaboo-macos-universal.tar.gz
7792ac5f4cefbd4473c2766d4905ceb486df8da4aa270399cda214b0f4bed877  peekaboo-macos-x86_64.tar.gz
eec8b37b809d6155266846df6a6832d8cc6fdc526fb3bf73abc05818fe4974e8  steipete-peekaboo-4.9.8.tgz

npm