homebridge-agent-atv 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,9 +40,38 @@ function wantsFocus(body) {
40
40
  return false;
41
41
  return (0, validate_1.requiredBoolean)(body, 'focus');
42
42
  }
43
- /** `movedSince`: the action was meant to move the focus, so an older focus is not the answer. */
44
- async function withFocus(deps, device, wanted, movedSince) {
45
- return wanted ? { focus: await deps.screen.report(device, { settle: true, movedSince }) } : {};
43
+ /** Arrow keys move the focus within the screen: tvOS reports the move about 0.1 s after the key. */
44
+ const MOVE_WINDOW_MS = 350;
45
+ /** Other keys and launches may bring a new screen, focused later. */
46
+ const SCREEN_WINDOW_MS = 1000;
47
+ const ARROWS = new Set(['up', 'down', 'left', 'right']);
48
+ /** After the action: the move it caused, past the baseline; a plain read without one. */
49
+ async function withFocus(deps, device, wanted, settle) {
50
+ return wanted ? { focus: await deps.screen.report(device, settle) } : {};
51
+ }
52
+ const settleAfter = (moves, windowMs = SCREEN_WINDOW_MS) => moves === undefined ? undefined : { moves, windowMs };
53
+ /** A link may open in the app already in front, which then never changes: take that app after this long. */
54
+ const LINK_SAME_APP_MS = 3000;
55
+ /**
56
+ * Launches a link and waits for the app that opens it: one that was not in front before. When an app
57
+ * was already in front, after LINK_SAME_APP_MS the app in front is taken for the one that opened it.
58
+ */
59
+ async function openLink(deps, device, target, waitMs, signal, focusWanted, moves) {
60
+ const { devices, screen } = deps;
61
+ const before = waitMs > 0 ? await screen.appReport(device) : undefined;
62
+ const front = before?.available && before.kind === 'app' ? before.bundleId : undefined;
63
+ await devices.call(device, 'app.launch', { target });
64
+ let result = { foreground: false };
65
+ if (waitMs > 0) {
66
+ const another = (seen) => seen.kind === 'app' && seen.bundleId !== front;
67
+ result = await waitForeground(screen, device, another, 'agent-atv state app', front ? Math.min(waitMs, LINK_SAME_APP_MS) : waitMs, signal);
68
+ if (!result.foreground && front && result.seen?.kind === 'app')
69
+ result = { foreground: true, seen: result.seen };
70
+ }
71
+ const { foreground, seen, unknown } = result;
72
+ const focus = await withFocus(deps, device, focusWanted, settleAfter(moves));
73
+ const app = foreground && seen?.kind === 'app' ? { bundleId: seen.bundleId, name: seen.name } : null;
74
+ return { ok: true, app, foreground, ...(unknown ? { foregroundUnknown: unknown } : {}), ...focus, state: devices.pluginState(device) };
46
75
  }
47
76
  const MAX_WIDTH = { min: 160, max: 3840 };
48
77
  function screenshotOptions(body) {
@@ -106,7 +135,8 @@ const isPassing = (screen, device, report) => report.code === 'SCREEN_FAILED' ||
106
135
  * Reads the foreground app until `bundleId` is in front or `waitMs` passed. `true`/`false` once a
107
136
  * read answered; `null` with why when none did (screen reading off, not paired, not connected).
108
137
  */
109
- async function waitForeground(screen, device, bundleId, waitMs, signal) {
138
+ /** `wanted`: what in front ends the wait; `recheck`: how to check later without opening again. */
139
+ async function waitForeground(screen, device, wanted, recheck, waitMs, signal) {
110
140
  const deadline = Date.now() + waitMs;
111
141
  let seen;
112
142
  for (;;) {
@@ -115,12 +145,12 @@ async function waitForeground(screen, device, bundleId, waitMs, signal) {
115
145
  if (report.available) {
116
146
  const { available: _available, ...foreground } = report;
117
147
  seen = foreground;
118
- if (seen.kind === 'app' && seen.bundleId === bundleId)
148
+ if (wanted(seen))
119
149
  return { foreground: true, seen };
120
150
  }
121
151
  else if (seen === undefined && !isPassing(screen, device, report)) {
122
152
  // Opening again would relaunch the app: check it instead once the tunnel is up.
123
- const hint = report.code === 'SCREEN_UNAVAILABLE' ? `check in a few seconds with agent-atv wait --app ${bundleId}` : report.hint;
153
+ const hint = report.code === 'SCREEN_UNAVAILABLE' ? `check in a few seconds with ${recheck}` : report.hint;
124
154
  return { foreground: null, unknown: { code: report.code, reason: report.reason, hint } };
125
155
  }
126
156
  const now = Date.now();
@@ -229,7 +259,7 @@ function buildRoutes(deps) {
229
259
  path: '/v1/devices/:device/state',
230
260
  handler: async ({ params, query }) => {
231
261
  const device = devices.resolve(params.device);
232
- const focus = flag(query, 'focus') ? deps.screen.report(device, { settle: false }) : undefined;
262
+ const focus = flag(query, 'focus') ? deps.screen.report(device) : undefined;
233
263
  const app = flag(query, 'app') ? deps.screen.appReport(device) : undefined;
234
264
  if (flag(query, 'refresh') && device.connection === 'connected' && bridge.status === 'ready') {
235
265
  await devices.refreshState(device);
@@ -256,10 +286,14 @@ function buildRoutes(deps) {
256
286
  const { presses, intervalMs } = parseKeys(body);
257
287
  const focusWanted = wantsFocus(body);
258
288
  devices.requireConnected(device);
259
- const startedAt = Date.now();
289
+ // The worker reports focus moves only while it follows the focus: from before the keys.
290
+ let moves = focusWanted ? await deps.screen.follow(device) : undefined;
260
291
  for (const [index, press] of presses.entries()) {
261
292
  if (index > 0 && intervalMs > 0)
262
293
  await sleep(intervalMs);
294
+ // The report is about the last key: earlier moves must not stand for the screen it brings.
295
+ if (moves !== undefined && index > 0 && index === presses.length - 1)
296
+ moves = (await deps.screen.follow(device)) ?? moves;
263
297
  try {
264
298
  await devices.call(device, 'key', { key: press.key, action: press.action });
265
299
  }
@@ -271,7 +305,8 @@ function buildRoutes(deps) {
271
305
  });
272
306
  }
273
307
  }
274
- const focus = await withFocus(deps, device, focusWanted, startedAt);
308
+ const windowMs = ARROWS.has(presses.at(-1).key) ? MOVE_WINDOW_MS : SCREEN_WINDOW_MS;
309
+ const focus = await withFocus(deps, device, focusWanted, settleAfter(moves, windowMs));
275
310
  return { json: { ok: true, pressed: presses.length, ...focus, state: devices.pluginState(device) } };
276
311
  },
277
312
  },
@@ -292,11 +327,9 @@ function buildRoutes(deps) {
292
327
  const waitMs = (0, validate_1.optionalInteger)(body, 'waitMs', 0, 60_000) ?? 15_000;
293
328
  const focusWanted = wantsFocus(body);
294
329
  devices.requireConnected(device);
295
- const startedAt = Date.now();
330
+ const moves = focusWanted ? await deps.screen.follow(device) : undefined;
296
331
  if (target.includes('://')) {
297
- await devices.call(device, 'app.launch', { target });
298
- const focus = await withFocus(deps, device, focusWanted, startedAt);
299
- return { json: { ok: true, app: null, foreground: false, ...focus, state: devices.pluginState(device) } };
332
+ return { json: await openLink(deps, device, target, waitMs, signal, focusWanted, moves) };
300
333
  }
301
334
  let app;
302
335
  if (BUNDLE_ID.test(target)) {
@@ -307,8 +340,9 @@ function buildRoutes(deps) {
307
340
  app = resolveAppName(await devices.listApps(device, false), target);
308
341
  }
309
342
  await devices.call(device, 'app.launch', { target: app.bundleId });
310
- const { foreground, seen, unknown } = waitMs > 0 ? await waitForeground(deps.screen, device, app.bundleId, waitMs, signal) : { foreground: false };
311
- const focus = await withFocus(deps, device, focusWanted, startedAt);
343
+ const isApp = (seen) => seen.kind === 'app' && seen.bundleId === app.bundleId;
344
+ const { foreground, seen, unknown } = waitMs > 0 ? await waitForeground(deps.screen, device, isApp, `agent-atv wait --app ${app.bundleId}`, waitMs, signal) : { foreground: false };
345
+ const focus = await withFocus(deps, device, focusWanted, settleAfter(moves));
312
346
  const shown = foreground && seen?.kind === 'app' ? { bundleId: seen.bundleId, name: seen.name } : app;
313
347
  return {
314
348
  json: {
@@ -343,8 +377,11 @@ function buildRoutes(deps) {
343
377
  throw (0, errors_1.badRequest)('text', `text is required for op ${op}`);
344
378
  const focusWanted = wantsFocus(body);
345
379
  devices.requireConnected(device);
380
+ if (focusWanted)
381
+ await deps.screen.follow(device);
346
382
  const keyboard = await devices.call(device, `keyboard.${op}`, op === 'clear' ? {} : { text });
347
383
  devices.patchState(device, { keyboard: { focus: keyboard.focus, text: keyboard.text } });
384
+ // Typing does not move the focus: a plain read, of the element focused before.
348
385
  const focus = await withFocus(deps, device, focusWanted);
349
386
  return {
350
387
  json: { ok: true, keyboard: { focus: keyboard.focus, text: keyboard.text }, ...focus, state: devices.pluginState(device) },
@@ -413,6 +450,8 @@ function buildRoutes(deps) {
413
450
  let app;
414
451
  try {
415
452
  if (conditions.focus !== undefined) {
453
+ // Its polls keep the worker following.
454
+ await deps.screen.follow(device);
416
455
  read = await readFocus();
417
456
  stops.push(poll(FOCUS_POLL_MS, signal, async () => void (read = await readFocus().catch(() => read))));
418
457
  }
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/api/routes.ts"],"names":[],"mappings":"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"}
@@ -25,14 +25,13 @@ const TIMEOUTS = {
25
25
  };
26
26
  const DEFAULT_TIMEOUT_MS = 10 * SECOND;
27
27
  const READY_WAIT_MS = 20 * SECOND;
28
- /** The worker learns a focus move about 50 ms after the key; a focus read takes about 0.2 s on a Pi. */
29
- const SETTLE_MS = 300;
30
- const SETTLE_CAP_MS = 1000;
31
- /** A read that has to reopen the worker's accessibility session takes 0.4 to 0.6 s on a Pi. */
32
- const FIRST_READ_MS = 1000;
33
- /** Between settle reads that found the focus unknown or not moved yet. */
34
- const SETTLE_RETRY_MS = 100;
28
+ /** After the first move, the worker waits until none came for this long: a grid may scroll on. */
29
+ const SETTLE_QUIET_MS = 150;
30
+ /** Past the window: up to 1 s of moves still coming, 0.5 s for a layout confirmation, a 70 ms read. */
31
+ const SETTLE_READ_MS = 2000;
35
32
  const REPORT_READ_MS = 5000;
33
+ /** Opening the worker's accessibility session takes about 0.5 s on a Pi, plus up to 1 s after a close. */
34
+ const FOLLOW_MS = 2000;
36
35
  const IDENTIFIER = /^[A-Za-z0-9-]+$/;
37
36
  const SCRUBBED_ENV = new Set(['XDG_DATA_HOME', 'SUDO_USER', 'SUDO_UID', 'SUDO_GID']);
38
37
  const REASONS = {
@@ -42,8 +41,6 @@ const REASONS = {
42
41
  FOCUS_UNKNOWN: 'focus not known',
43
42
  DEVICE_OFF: 'Apple TV off',
44
43
  };
45
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
46
- const sameElement = (a, b) => JSON.stringify(a) === JSON.stringify(b);
47
44
  const isFocusUnknown = (error) => error instanceof errors_1.ApiError && error.code === 'FOCUS_UNKNOWN';
48
45
  exports.isFocusUnknown = isFocusUnknown;
49
46
  /** Screen reading (DESIGN.md §6): one long-lived screen worker per Apple TV, holding its tunnel. */
@@ -143,11 +140,12 @@ class ScreenService {
143
140
  const { element } = await this.read(device);
144
141
  return { focus: element, durationMs: Date.now() - started };
145
142
  }
146
- async read(device) {
143
+ async read(device, settle) {
147
144
  const sentAt = Date.now();
148
- const { focus, ageMs } = await this.request(device, 'focus');
145
+ const params = settle ? { afterMoves: settle.moves, waitMs: settle.windowMs, quietMs: SETTLE_QUIET_MS } : {};
146
+ const { focus, ageMs, moved } = await this.request(device, 'focus', params);
149
147
  // From the send time, the move can only come out earlier than it was: towards unknown.
150
- const read = { element: focus, movedAtMs: sentAt - ageMs };
148
+ const read = { element: focus, movedAtMs: sentAt - ageMs, ...(moved === undefined ? {} : { moved }) };
151
149
  if (!this.isCurrent(device, read)) {
152
150
  throw new errors_1.ApiError('FOCUS_UNKNOWN', `The app or playback on ${this.options.devices.displayName(device)} changed after the focus last moved`, {});
153
151
  }
@@ -160,18 +158,37 @@ class ScreenService {
160
158
  /**
161
159
  * The focused element, as a report that never throws. Only uses a tunnel that is already up, so
162
160
  * an unpaired or reconnecting screen costs the action nothing. With `settle` (after an action),
163
- * see settled(); `movedSince` then rejects a focus tvOS reported before the action.
161
+ * the worker answers the first move past the baseline once the focus stops moving, or the
162
+ * element still focused when none came within the window.
164
163
  */
165
- async report(device, { settle, movedSince }) {
164
+ async report(device, settle) {
166
165
  try {
167
166
  this.requireTunnel(device);
168
- const element = settle ? await this.settled(device, movedSince) : (await this.readWithin(device, REPORT_READ_MS)).element;
169
- return { available: true, element };
167
+ const ms = settle ? settle.windowMs + SETTLE_READ_MS : REPORT_READ_MS;
168
+ const { element, moved } = await this.within(device, this.read(device, settle), ms, 'focus');
169
+ return { available: true, element, ...(moved === undefined ? {} : { moved }) };
170
170
  }
171
171
  catch (error) {
172
172
  return this.unavailable(device, error, 'focus read failed');
173
173
  }
174
174
  }
175
+ /**
176
+ * Asks the worker to follow the focus (DESIGN.md §6.1), before an action whose move must be
177
+ * reported: it frames every focus move on the TV meanwhile, so only around agent actions.
178
+ * Answers the worker's move count, the baseline of the settled read after the action. Best
179
+ * effort, like report(): bounded, never throws, nothing without a tunnel already up.
180
+ */
181
+ async follow(device) {
182
+ try {
183
+ this.requireTunnel(device);
184
+ const { moves } = await this.within(device, this.request(device, 'follow'), FOLLOW_MS, 'follow');
185
+ return moves;
186
+ }
187
+ catch (error) {
188
+ this.options.log.debug(`${this.options.devices.displayName(device)}: cannot follow the focus: ${(0, logger_1.errorMessage)(error)}`);
189
+ return undefined;
190
+ }
191
+ }
175
192
  /** What tvOS shows; throws the screen errors, `SCREEN_UNAVAILABLE` for a read longer than `withinMs`. */
176
193
  async foreground(device, withinMs) {
177
194
  const read = this.request(device, 'foreground');
@@ -198,47 +215,6 @@ class ScreenService {
198
215
  const reason = apiError.code === 'SCREEN_FAILED' ? failed : (REASONS[apiError.code] ?? apiError.message);
199
216
  return { available: false, code: apiError.code, reason, hint: apiError.hint };
200
217
  }
201
- /**
202
- * Waits SETTLE_MS, then reads until two reads agree or SETTLE_CAP_MS passed. A read that finds
203
- * the focus unknown, or not moved since `movedSince`, is retried within that window and drops
204
- * the reads before it: they may show an earlier screen.
205
- */
206
- async settled(device, movedSince) {
207
- const deadline = Date.now() + SETTLE_CAP_MS;
208
- await sleep(SETTLE_MS);
209
- let last;
210
- let notKnown = new errors_1.ApiError('FOCUS_UNKNOWN', `${this.options.devices.displayName(device)} reported no focus move after the action`, {});
211
- for (let first = true; first || Date.now() < deadline; first = false) {
212
- let read;
213
- try {
214
- read = await this.readWithin(device, first ? Math.max(FIRST_READ_MS, deadline - Date.now()) : deadline - Date.now());
215
- }
216
- catch (error) {
217
- if (!(0, exports.isFocusUnknown)(error)) {
218
- if (first)
219
- throw error;
220
- break;
221
- }
222
- [notKnown, last] = [error, undefined];
223
- await sleep(SETTLE_RETRY_MS);
224
- continue;
225
- }
226
- if (movedSince !== undefined && read.movedAtMs < movedSince) {
227
- last = undefined;
228
- await sleep(SETTLE_RETRY_MS);
229
- continue;
230
- }
231
- if (last && sameElement(last.element, read.element))
232
- return read.element;
233
- last = read;
234
- }
235
- if (last)
236
- return last.element;
237
- throw notKnown;
238
- }
239
- readWithin(device, ms) {
240
- return this.within(device, this.read(device), ms, 'focus');
241
- }
242
218
  within(device, read, ms, what) {
243
219
  let timer;
244
220
  const timeout = new Promise((_resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/screen/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/screen/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "homebridge-agent-atv",
3
3
  "displayName": "Agent ATV",
4
- "version": "0.1.1",
4
+ "version": "0.2.0",
5
5
  "description": "Control an Apple TV from AI agents: an authenticated HTTP API (pyatv bridge), keyboard input, wait conditions, optional screen reading (focused element, screenshots), and a minimal HomeKit TV accessory.",
6
6
  "license": "MIT",
7
7
  "author": "AlexDemzz",
@@ -56,9 +56,16 @@ class FakeBackend:
56
56
  if not self._identifier:
57
57
  raise BridgeError("SCREEN_NOT_PAIRED", "No RemotePairing pair record for this Apple TV")
58
58
 
59
+ async def follow(self, params: Dict[str, Any]) -> Dict[str, Any]:
60
+ self._require_paired()
61
+ return {"moves": 0}
62
+
59
63
  async def focus(self, params: Dict[str, Any]) -> Dict[str, Any]:
60
64
  self._require_paired()
61
- return {"focus": dict(FAKE_FOCUS), "ageMs": 0}
65
+ result: Dict[str, Any] = {"focus": dict(FAKE_FOCUS), "ageMs": 0}
66
+ if params.get("afterMoves") is not None:
67
+ result["moved"] = True
68
+ return result
62
69
 
63
70
  async def foreground(self, params: Dict[str, Any]) -> Dict[str, Any]:
64
71
  self._require_paired()
@@ -17,7 +17,7 @@ from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple
17
17
 
18
18
  from agent_atv_bridge.errors import BridgeError
19
19
 
20
- from . import image
20
+ from . import image, inbound_queue
21
21
 
22
22
  _LOGGER = logging.getLogger("agent_atv_screen.pmd3")
23
23
 
@@ -36,9 +36,20 @@ SCREEN_CHANGE = "UIAccessibilityScreenChangedNotification"
36
36
  LAYOUT_CHANGE = "UIAccessibilityLayoutChangedNotification"
37
37
  # After a layout change the daemon names the element it still inspects, the focused one.
38
38
  PROPERTIES_CHANGED = "hostInspectorCurrentElementPropertiesChanged:"
39
+ # A settled read's defaults: how long to wait for a move past the baseline, then for no more moves.
40
+ SETTLE_WAIT_MS = 1000
41
+ SETTLE_QUIET_MS = 150
42
+ # Bounds how long a settled read waits for the focus to stop moving.
43
+ SETTLE_QUIET_CAP_S = 1.0
44
+ # The home screen confirms the focused element within a few ms of a layout change, 0.2 s after a move.
45
+ LAYOUT_CONFIRM_S = 0.5
39
46
  # Bounds the inspector reset of a session being dropped, often over a dead tunnel.
40
47
  INSPECTOR_RESET_S = 2.0
41
48
  NOT_FOLLOWED = "The focused element is not known yet: the Apple TV reports it only when the focus moves"
49
+ NOT_ARMED = (
50
+ "The focus is followed only during agent actions: move it with a direction key and settle"
51
+ " (agent-atv press down --settle)"
52
+ )
42
53
  SCREEN_CHANGED = "The screen changed after the focus last moved: the focused element is known again once it moves"
43
54
  LAYOUT_CHANGED = (
44
55
  "The screen's layout changed after the focus last moved: the focused element is known again once it moves"
@@ -61,8 +72,10 @@ class Timings:
61
72
  browse_s: float = 20.0
62
73
  pin_timeout_s: float = 120.0
63
74
  session_close_s: float = 1.0
64
- # The Apple TV ends a session lost with its tunnel 20 to 35 s later, untargeting the one that follows.
65
- retarget_s: float = 40.0
75
+ # How long the session may stay untargeted after the Apple TV ends one lost before it (§6.1 One target).
76
+ retarget_s: float = 30.0
77
+ # How long the focus stays followed after the last follow or focus request (§6.1 Focus following).
78
+ follow_idle_s: float = 15.0
66
79
 
67
80
 
68
81
  def _text(value: Any) -> Optional[str]:
@@ -230,6 +243,16 @@ class Pmd3Backend:
230
243
  self._unknown: Optional[str] = NOT_FOLLOWED
231
244
  self._focused: Any = None
232
245
  self._moved_at = 0.0
246
+ # Focus moves reported so far, the baseline an action's settled read waits past.
247
+ self._moves = 0
248
+ # Set, then replaced, on every focus move.
249
+ self._moved = asyncio.Event()
250
+ # Loop time until which an agent wants the focus followed, or None (§6.1 Focus following).
251
+ self._follow_until: Optional[float] = None
252
+ self._idle: Optional[asyncio.Task] = None
253
+ # Loop time of the last session close on the current tunnel, or None.
254
+ self._closed_at: Optional[float] = None
255
+ self._reset_failing = False
233
256
 
234
257
  # --- lifecycle -------------------------------------------------------------------------
235
258
 
@@ -245,6 +268,7 @@ class Pmd3Backend:
245
268
  self._ax_lock = asyncio.Lock()
246
269
  reader = self._pmd3.dtx_reader
247
270
  reader.MAX_BUFFERED_SIZE = max(reader.MAX_BUFFERED_SIZE, DTX_MAX_BUFFERED)
271
+ inbound_queue.install(self._pmd3.userspace_tunnel)
248
272
  # The stock no-root provider always starts with usbmux, which an Apple TV (Wi-Fi only) never reaches.
249
273
  self._pmd3.userspace_tunnel._create_no_root_tunnel_provider = self._provider
250
274
  self._pmd3.tunnel_service.input = self._read_pin
@@ -258,6 +282,9 @@ class Pmd3Backend:
258
282
  self._pairing = None
259
283
  if self._supervisor is not None:
260
284
  self._supervisor.cancel()
285
+ if self._idle is not None:
286
+ self._idle.cancel()
287
+ self._follow_until = None
261
288
  await self._drop_tunnel()
262
289
 
263
290
  def status(self) -> Dict[str, Any]:
@@ -298,6 +325,7 @@ class Pmd3Backend:
298
325
  try:
299
326
  await asyncio.wait_for(self._open(), self._timings.connect_timeout_s)
300
327
  attempt = 0
328
+ await self._reset_inspector(self._tunnel.rsd)
301
329
  await self._keep_following()
302
330
  self._set("connected")
303
331
  except asyncio.CancelledError:
@@ -319,8 +347,62 @@ class Pmd3Backend:
319
347
  await self._keep_following()
320
348
  await self._sleep(self._timings.health_s)
321
349
 
350
+ async def _reset_inspector(self, rsd: Any) -> None:
351
+ """Turns off what a killed worker may have left on: a frame on every focus move."""
352
+ ax = self._pmd3.accessibilityaudit.AccessibilityAudit(rsd)
353
+ try:
354
+ await asyncio.wait_for(ax.__aenter__(), self._timings.call_timeout_s)
355
+ try:
356
+ await asyncio.wait_for(self._reset(ax), INSPECTOR_RESET_S)
357
+ finally:
358
+ await self._close_quietly(ax)
359
+ self._session_ended()
360
+ except asyncio.CancelledError:
361
+ raise
362
+ except Exception as exc:
363
+ # Tried again on every new tunnel: only the first failure of a streak is news.
364
+ log = _LOGGER.debug if self._reset_failing else _LOGGER.info
365
+ log("Cannot reset the accessibility inspector (%s); the TV may frame each focus move until the next tunnel", _describe(exc))
366
+ self._reset_failing = True
367
+ return
368
+ self._reset_failing = False
369
+
370
+ @classmethod
371
+ async def _reset(cls, ax: Any) -> None:
372
+ await ax._invoke("deviceDidGetTargeted")
373
+ await cls._stop_following(ax)
374
+
375
+ def _session_ended(self) -> None:
376
+ self._session_closed = True
377
+ self._closed_at = asyncio.get_running_loop().time()
378
+
379
+ def _following(self) -> bool:
380
+ return self._follow_until is not None
381
+
382
+ def _keep_armed(self) -> None:
383
+ """Follows the focus for follow_idle_s more: the inspector frames every move meanwhile."""
384
+ self._follow_until = asyncio.get_running_loop().time() + self._timings.follow_idle_s
385
+ if self._idle is None or self._idle.done():
386
+ self._idle = asyncio.ensure_future(self._disarm_when_idle())
387
+
388
+ async def _disarm_when_idle(self) -> None:
389
+ assert self._focus_lock is not None and self._ax_lock is not None
390
+ loop = asyncio.get_running_loop()
391
+ while self._follow_until is not None:
392
+ if loop.time() < self._follow_until:
393
+ await asyncio.sleep(self._follow_until - loop.time())
394
+ continue
395
+ # After a read in progress, which may have asked for more.
396
+ async with self._focus_lock, self._ax_lock:
397
+ if self._follow_until is not None and loop.time() >= self._follow_until:
398
+ self._follow_until = None
399
+ _LOGGER.debug("No agent asked for the focus for %s s: not following it any more", self._timings.follow_idle_s)
400
+ await self._drop_accessibility()
401
+
322
402
  async def _keep_following(self) -> None:
323
- """Follows the focus from the tunnel's start, so moves made before the first read count."""
403
+ """Re-opens the session of an agent action, lost with its tunnel or ended by another inspector."""
404
+ if not self._following():
405
+ return
324
406
  try:
325
407
  await asyncio.wait_for(self._accessibility(self._tunnel.rsd), self._timings.call_timeout_s)
326
408
  except asyncio.CancelledError:
@@ -328,7 +410,7 @@ class Pmd3Backend:
328
410
  except Exception as exc:
329
411
  # Retried at every health check: only the first failure of a streak is news.
330
412
  log = _LOGGER.debug if self._follow_failing else _LOGGER.info
331
- log("Cannot follow the focus yet (%s); the next focus read retries", _describe(exc))
413
+ log("Cannot follow the focus yet (%s); retrying at the next health check", _describe(exc))
332
414
  self._follow_failing = True
333
415
  return
334
416
  if self._follow_failing:
@@ -361,6 +443,7 @@ class Pmd3Backend:
361
443
  await self._drop_accessibility()
362
444
  tunnel, self._tunnel = self._tunnel, None
363
445
  session_closed, self._session_closed = self._session_closed, False
446
+ self._closed_at = None
364
447
  if session_closed:
365
448
  self._lost_session_pending = True
366
449
  if tunnel is not None:
@@ -460,13 +543,69 @@ class Pmd3Backend:
460
543
 
461
544
  # --- requests --------------------------------------------------------------------------
462
545
 
546
+ async def follow(self, params: Dict[str, Any]) -> Dict[str, Any]:
547
+ self._keep_armed()
548
+ await self._with_rsd(self._accessibility)
549
+ return {"moves": self._moves}
550
+
463
551
  async def focus(self, params: Dict[str, Any]) -> Dict[str, Any]:
552
+ """The focused element. With `afterMoves` (the count `follow` answered before an action), it
553
+ first waits up to `waitMs` for a later move, then until no move came for `quietMs`, and says
554
+ whether the focus `moved`."""
464
555
  assert self._focus_lock is not None
465
- # Aged from the request's arrival, as the plugin dates it from the send; the read takes ~0.2 s.
556
+ # Aged from the request's arrival, as the plugin dates it from the send.
466
557
  received = asyncio.get_running_loop().time()
558
+ if self._following():
559
+ # An agent polling the focus, as wait --focus does, is still using it.
560
+ self._keep_armed()
561
+ after = params.get("afterMoves")
562
+ moved = None
563
+ if after is not None:
564
+ if not self._following():
565
+ raise _focus_unknown(NOT_ARMED)
566
+ wait_ms = params.get("waitMs")
567
+ quiet_ms = params.get("quietMs")
568
+ moved = await self._settle(
569
+ after,
570
+ (SETTLE_WAIT_MS if wait_ms is None else wait_ms) / 1000,
571
+ (SETTLE_QUIET_MS if quiet_ms is None else quiet_ms) / 1000,
572
+ )
467
573
  async with self._focus_lock:
468
574
  focus, moved_at = await self._with_rsd(self._read_focus)
469
- return {"focus": focus, "ageMs": round((received - moved_at) * 1000)}
575
+ result: Dict[str, Any] = {"focus": focus, "ageMs": round((received - moved_at) * 1000)}
576
+ if moved is not None:
577
+ result["moved"] = moved
578
+ return result
579
+
580
+ async def _settle(self, after: int, wait_s: float, quiet_s: float) -> bool:
581
+ """Whether a move past `after` came within `wait_s`; if so, returns once none came for `quiet_s`."""
582
+ loop = asyncio.get_running_loop()
583
+ deadline = loop.time() + wait_s
584
+ while self._moves <= after:
585
+ if not await self._next_move(deadline - loop.time()):
586
+ return False
587
+ # A grid that scrolls, or a row that loads, can move the focus again right after.
588
+ cap = loop.time() + SETTLE_QUIET_CAP_S
589
+ while await self._next_move(min(quiet_s, cap - loop.time())):
590
+ pass
591
+ confirm_by = loop.time() + LAYOUT_CONFIRM_S
592
+ while self._unknown == LAYOUT_CHANGED and loop.time() < confirm_by:
593
+ await asyncio.sleep(0.02)
594
+ return True
595
+
596
+ async def _next_move(self, timeout_s: float) -> bool:
597
+ if timeout_s <= 0:
598
+ return False
599
+ try:
600
+ await asyncio.wait_for(self._moved.wait(), timeout_s)
601
+ except asyncio.TimeoutError:
602
+ return False
603
+ return True
604
+
605
+ def _note_move(self) -> None:
606
+ self._moves += 1
607
+ moved, self._moved = self._moved, asyncio.Event()
608
+ moved.set()
470
609
 
471
610
  async def _accessibility(self, rsd: Any) -> Any:
472
611
  """One accessibility session per tunnel, following the focus from the moment it opens."""
@@ -478,6 +617,10 @@ class Pmd3Backend:
478
617
  if self._ax is not None and self._ax_rsd is rsd and self._follower is not None and not self._follower.done():
479
618
  return self._ax
480
619
  await self._drop_accessibility()
620
+ if self._closed_at is not None:
621
+ # The daemon learns of a session's end late, then untargets whichever session follows.
622
+ loop = asyncio.get_running_loop()
623
+ await asyncio.sleep(max(0.0, self._closed_at + self._timings.session_close_s - loop.time()))
481
624
  ax = self._pmd3.accessibilityaudit.AccessibilityAudit(rsd)
482
625
  await ax.__aenter__()
483
626
  self._ax, self._ax_rsd = ax, rsd
@@ -488,27 +631,27 @@ class Pmd3Backend:
488
631
  await self._drop_accessibility()
489
632
  raise
490
633
  self._follower = asyncio.ensure_future(self._follow_focus(ax))
491
- if self._lost_session_pending:
492
- self._retarget = asyncio.ensure_future(self._retarget_after_loss(ax))
634
+ self._retarget = asyncio.ensure_future(self._keep_targeted(ax))
493
635
  return ax
494
636
 
495
- async def _retarget_after_loss(self, ax: Any) -> None:
496
- """Follows the focus again once the Apple TV has ended any session lost before it: that end
497
- untargets the session, and targeting it again brings back notifications but not focus moves
498
- until the monitored type is set again."""
499
- await asyncio.sleep(self._timings.retarget_s)
500
- try:
501
- await asyncio.wait_for(self._target(ax), self._timings.call_timeout_s)
502
- except Exception as exc:
503
- _LOGGER.info("Targeting the accessibility session again failed (%s); focus reads may answer unknown until the next reconnect", _describe(exc))
504
- return
505
- _LOGGER.info(
506
- "A session lost earlier may have untargeted this one: targeted the accessibility session again;"
507
- " the focus is known again after the next move"
508
- )
509
- self._lost_session_pending = False
510
- # The Apple TV did not report the moves made while the session was untargeted.
511
- self._unknown, self._focused = NOT_FOLLOWED, None
637
+ async def _keep_targeted(self, ax: Any) -> None:
638
+ """The Apple TV ends a session lost before this one at no set time, untargeting this one with
639
+ no event to tell, and then highlights every focus move with nobody to clear it."""
640
+ failing = False
641
+ while True:
642
+ await asyncio.sleep(self._timings.retarget_s)
643
+ try:
644
+ await asyncio.wait_for(self._target(ax), self._timings.call_timeout_s)
645
+ except Exception as exc:
646
+ if not failing:
647
+ _LOGGER.info("Targeting the accessibility session again failed (%s); retrying", _describe(exc))
648
+ failing = True
649
+ continue
650
+ failing = False
651
+ if self._lost_session_pending:
652
+ self._lost_session_pending = False
653
+ # The Apple TV may not have reported the moves made while the session was untargeted.
654
+ self._unknown, self._focused = NOT_FOLLOWED, None
512
655
 
513
656
  @staticmethod
514
657
  async def _target(ax: Any) -> None:
@@ -525,17 +668,17 @@ class Pmd3Backend:
525
668
  self._unknown, self._focused = SCREEN_CHANGED, None
526
669
  elif event.name == NOTIFICATION and _first(event.data) == LAYOUT_CHANGE and self._unknown is None:
527
670
  self._unknown = LAYOUT_CHANGED
528
- elif (
529
- event.name == PROPERTIES_CHANGED
530
- and self._unknown == LAYOUT_CHANGED
531
- and _same_element(getattr(_first(event.data), "element", None), self._focused)
532
- ):
533
- # The move keeps its time.
534
- self._unknown = None
671
+ elif event.name == PROPERTIES_CHANGED:
672
+ if self._unknown == LAYOUT_CHANGED and _same_element(getattr(_first(event.data), "element", None), self._focused):
673
+ # The move keeps its time.
674
+ self._unknown = None
675
+ # The daemon highlights the element it names again.
676
+ await ax.set_show_visuals(False)
535
677
  elif event.name == FOCUS_CHANGED:
536
678
  self._focused = getattr(_first(event.data), "element", None)
537
679
  self._moved_at = asyncio.get_running_loop().time()
538
680
  self._unknown = None
681
+ self._note_move()
539
682
  # The daemon highlights each newly focused element, whatever it was told before.
540
683
  await ax.set_show_visuals(False)
541
684
  except asyncio.CancelledError:
@@ -562,7 +705,7 @@ class Pmd3Backend:
562
705
  except Exception:
563
706
  _LOGGER.debug("Resetting the accessibility inspector failed", exc_info=True)
564
707
  await self._close_quietly(ax)
565
- self._session_closed = True
708
+ self._session_ended()
566
709
 
567
710
  @staticmethod
568
711
  async def _stop_following(ax: Any) -> None:
@@ -576,6 +719,8 @@ class Pmd3Backend:
576
719
  only when the focus is still the one it read: a move reads the new element, a screen change
577
720
  makes it unknown.
578
721
  """
722
+ if not self._following():
723
+ raise _focus_unknown(NOT_ARMED)
579
724
  try:
580
725
  ax = await self._accessibility(rsd)
581
726
  while True:
@@ -584,7 +729,8 @@ class Pmd3Backend:
584
729
  element, moved_at = self._focused, self._moved_at
585
730
  if element is None:
586
731
  raise _focus_unknown("The Apple TV reported a focus move without an element")
587
- attributes = await ax.element_attributes(element.identifier, FOCUS_ATTRIBUTES)
732
+ values = await asyncio.gather(*(ax.element_attribute(element.identifier, name) for name in FOCUS_ATTRIBUTES))
733
+ attributes = dict(zip(FOCUS_ATTRIBUTES, values))
588
734
  if self._unknown is None and self._focused is element and self._moved_at == moved_at:
589
735
  break
590
736
  except BridgeError:
@@ -0,0 +1,96 @@
1
+ """Queues the userspace tunnel's inbound packets instead of dropping them (DESIGN.md §6.1 Tunnel).
2
+
3
+ Without root, Linux caps the tunnel's socketpair buffer far below a screenshot burst, and
4
+ UserspaceTun.write drops whatever does not fit, which stalls the capture on retransmissions. This
5
+ replaces write() with one that queues what does not fit and sends it, in order, once the socket is
6
+ writable again.
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import asyncio
12
+ import collections
13
+ import errno
14
+ import logging
15
+ from typing import Any, Deque, Optional
16
+
17
+ _LOGGER = logging.getLogger("agent_atv_screen.pmd3")
18
+
19
+ # Bounds the memory a stalled stack can pin; past it TCP recovers the drops.
20
+ MAX_QUEUED = 512
21
+ _QUEUE = "_agent_atv_queue"
22
+ _DROPPING = "_agent_atv_dropping"
23
+ _FULL = (errno.EAGAIN, errno.EWOULDBLOCK, errno.ENOBUFS)
24
+
25
+
26
+ def install(userspace_tunnel: Any) -> None:
27
+ tun_class = userspace_tunnel.UserspaceTun
28
+ if getattr(tun_class.write, "queues_inbound", False):
29
+ return
30
+ loopback, ethernet = userspace_tunnel.LOOPBACK_HEADER, userspace_tunnel._ETH_HDR_TO_STACK
31
+ stock_close = tun_class.close
32
+
33
+ def write(self: Any, data: bytes) -> None:
34
+ ipv6 = data[len(loopback) :] if data[: len(loopback)] == loopback else data
35
+ _send(self, ethernet + ipv6)
36
+
37
+ async def close(self: Any) -> None:
38
+ # The socketpair closes under the writer otherwise, and its descriptor gets reused.
39
+ # The stock close() sets _closed before it awaits, so no write() can queue again.
40
+ _discard(self)
41
+ await stock_close(self)
42
+
43
+ write.queues_inbound = True # type: ignore[attr-defined]
44
+ tun_class.write = write
45
+ tun_class.close = close
46
+
47
+
48
+ def _send(tun: Any, frame: bytes) -> None:
49
+ queue: Optional[Deque[bytes]] = getattr(tun, _QUEUE, None)
50
+ if queue:
51
+ if len(queue) < MAX_QUEUED:
52
+ queue.append(frame)
53
+ elif not getattr(tun, _DROPPING, False):
54
+ setattr(tun, _DROPPING, True)
55
+ _LOGGER.debug("The tunnel's inbound queue is full (%d packets); dropping until it drains", MAX_QUEUED)
56
+ return
57
+ try:
58
+ tun._peer.send(frame)
59
+ return
60
+ except OSError as exc:
61
+ if exc.errno not in _FULL:
62
+ _failed(tun, exc)
63
+ return
64
+ if tun._closed:
65
+ return
66
+ setattr(tun, _QUEUE, collections.deque((frame,)))
67
+ asyncio.get_running_loop().add_writer(tun._peer.fileno(), _flush, tun)
68
+
69
+
70
+ def _flush(tun: Any) -> None:
71
+ queue: Deque[bytes] = getattr(tun, _QUEUE)
72
+ while queue:
73
+ try:
74
+ tun._peer.send(queue[0])
75
+ except OSError as exc:
76
+ if exc.errno in _FULL:
77
+ return
78
+ _failed(tun, exc)
79
+ queue.popleft()
80
+ _discard(tun)
81
+
82
+
83
+ def _failed(tun: Any, exc: OSError) -> None:
84
+ # Like the stock write(): any other error (e.g. EMSGSIZE) drops the packet, logged once per tunnel.
85
+ if not tun._send_error_logged:
86
+ tun._send_error_logged = True
87
+ _LOGGER.debug("The userspace tunnel dropped a packet from the Apple TV: %s", exc)
88
+
89
+
90
+ def _discard(tun: Any) -> None:
91
+ if getattr(tun, _QUEUE, None) is None:
92
+ return
93
+ setattr(tun, _QUEUE, None)
94
+ setattr(tun, _DROPPING, False)
95
+ if tun._peer.fileno() >= 0:
96
+ asyncio.get_running_loop().remove_writer(tun._peer.fileno())
@@ -22,7 +22,12 @@ PIN = re.compile(r"\d{4,8}")
22
22
  _CHECKS: Dict[str, Dict[str, Callable[[Any], bool]]] = {
23
23
  "ping": {},
24
24
  "shutdown": {},
25
- "focus": {},
25
+ "follow": {},
26
+ "focus": {
27
+ "afterMoves": lambda v: v is None or (type(v) is int and v >= 0),
28
+ "waitMs": lambda v: v is None or (type(v) is int and 0 <= v <= 10_000),
29
+ "quietMs": lambda v: v is None or (type(v) is int and 0 <= v <= 1_000),
30
+ },
26
31
  "foreground": {},
27
32
  "screenshot": {
28
33
  "path": lambda v: isinstance(v, str) and os.path.isabs(v),