Skip to content

v10.5.0

Choose a tag to compare

@doronz88 doronz88 released this 08 Aug 12:43
· 239 commits to master since this release
36da440

Highlights

⚠️ Machine-readable output contract (breaking changes)

JSON output now follows a documented contract — see the new Machine-readable output guide. Three changes are breaking:

  • Binary values in JSON output are now single-key {"$hex": "..."} objects instead of the string "<hexdigits>" — unambiguous and mechanically decodable (bytes.fromhex).
  • Timestamps in JSON output are ISO 8601.
  • Data moved from stderr to stdout: processes pgrep now prints a [{"pid", "name"}] JSON list, and the dict-record streams (developer dvt energy/notifications/graphics, diagnostics battery monitor, notification observe/observe-all) emit NDJSON — one JSON object per line — instead of Python dict reprs via the logger.
pymobiledevice3 diagnostics battery monitor | jq .CurrentCapacity

✨ NDJSON --format json for human-rendered streams

Streams with a real text rendering keep it as the default and gain --format json: developer dvt oslog, developer dvt netstat, developer accessibility notifications and crash watch, joining the existing syslog live. In JSON mode stdout is pure NDJSON with stable record shapes:

pymobiledevice3 crash watch --format json | jq .name

🐛 Correct help and suggestions for collapsed command groups

Single-command groups (btlogger, pcap, power-assertion, version) now show up in the top-level help under their real invocation name, and "did you mean" no longer advertises phantom paths such as btlogger capture or pcap pcap.

📚 Device-operator skill: output contract and full CLI routing

The agent skill now points at the machine-readable output conventions, routes the cryptex group (DDI install on iOS 26+), and a new CI drift test guarantees every top-level CLI group stays routed in the task map.

What's Changed

Full Changelog: v10.4.1...v10.5.0