Files
Filip131311 d01793dba4 feat(tools): push-notification — simulated APNS push to the iOS simulator
New iOS-simulator-only tool that delivers a push via `xcrun simctl push`,
streaming the payload over stdin (no temp files). Accepts either
title/body/subtitle/badge/sound convenience fields (built into a proper APNS
envelope) or a raw `payload` object for full control (silent pushes, custom
data keys).

- Pre-validates what simctl rejects cryptically: missing `aps` key, >4096
  bytes, payload+convenience-field conflicts — mapped to HTTP 400 via
  InvalidToolInputError with a granular IOS_PUSH_PAYLOAD_INVALID code.
- get_app_container install probe turns a missing app into an actionable
  error (definitive-false only; inconclusive probes fall through so simctl
  reports the real cause, e.g. the boot-device hint on a shutdown sim).
- stdin 'error' listener guards the EPIPE race when simctl exits before
  reading the payload — without it a failed push could crash the tool-server.
- Registered in setup-registry with a through-the-registry unit test (guards
  against the implemented-but-unregistered class of bug), added to the MCP
  auto-screenshot list (2 s delay for the banner animation).
- New argent-push-notifications skill + rules routing entry documenting the
  permission prerequisite and the push → await banner → tap workflow;
  cross-referenced from the settings-permissions notifications row.

Live-verified on an iOS 26.5 simulator (banner render, badge, tap-to-open
via the notification path, silent push, all error paths) both from the
workspace build and from the npm-packed artifact.
2026-07-29 12:48:26 +02:00
..