Repository navigation
Commit feca8cb
authored
fix(apple): refuse captures whose window or panel identity is unknown (#3761)
* fix(macos): refuse an app screenshot whose front window is not shareable
ADR 0031 decides that a native macOS app screenshot captures only the
app's front window through ScreenCaptureKit (#3188). When the front
window's WindowServer ID was missing from the shareable candidates, the
helper captured the app's largest window instead, so the image could
show a window the user was not looking at.
The helper now selects the front window by ID or refuses with a typed
reason: `window-not-found` when the app has no on-screen window,
`front-window-not-shareable` when ScreenCaptureKit does not offer the
front window. The shared outcomes fixture pins both reasons for Swift
and TypeScript, and the host adds a hint for each.
Evidence: the audit at bd4fd68 (AppWindowScreenshot.swift:21);
re-verified on 4c1c786. Part of #3744.
* fix(apple): refuse a foldable capture when CoreDevice names no panel
ADR 0025 decides that only CoreDevice facts identify a panel: the sole
lit panel, otherwise the `primary` panel, and never array position.
When no panel reported `primary` and power did not decide one lit
panel, the inventory captured the first lit or first integrated panel
in list order.
That inventory now names no panel, and capture-target resolution
refuses with COMMAND_FAILED, reason `capture-panel-unidentified`, and a
hint. The sole-lit-panel path and the primary-panel path are unchanged.
The foldable help topic states the refusal.
Evidence: the audit at bd4fd68 (display-inventory.ts:261);
re-verified on 4c1c786. Part of #3744.
* fix(macos): skip invisible windows when selecting a screenshot
Choose the first on-screen normal-layer app window with positive alpha and nonempty bounds. Keep interaction window selection unchanged and refuse if an eligible front window is absent from ScreenCaptureKit.
Review: #3761 (comment)
* fix(macos): clarify screenshot capture exclusion hint
Review: #3761 (comment)
* docs(foldable): clarify primary panel capture ambiguity
Review: #3761 (comment)
* fix(macos): share front-window eligibility across capture and actions
* docs(macos): define the native front-window target
* fix(macos): distinguish windows excluded from screen capture
* refactor(macos): centralize front window selection
Share the on-screen window-list query while preserving nil versus empty point refusals. Pin layer-8 alert exclusion at the shared selection boundary.
Review: #3761 (comment)
* docs(capture): clarify alert exclusion and refusal remedy
* fix(macos): distinguish unreadable window lists from missing windows
Refuse screenshot and scroll with window-list-unreadable when the shared window-list read fails, and preserve a retry hint through the host helper client.
Review: #3761 (comment)
* refactor(apple): move macOS refusal hints into the helper
The helper owns each refusal's reason and remedy, so its details
envelope carries the hint and the TypeScript client needs no lookup
table, wrapper, or special case. Collapse the one-case WindowListRefusal
enum and the screenshot Result mapping into the throw sites that already
own them, and keep the front-window selection as one plain function.
Press, fill, and their window fallback use the non-throwing path;
requireAppWindowPoint has already refused an unreadable list there.
The front-window help sentence states the layer-0 rule and the alert
exclusion once.1 parent cf42352 commit feca8cb
10 files changed
Lines changed: 443 additions & 53 deletions
File tree
- apple/macos-helper
- Sources/AgentDeviceMacOSHelper
- Tests/AgentDeviceMacOSHelperTests
- packages/platform-apple/src
- core
- __tests__
- os/macos
- src/commands
- capture
- system
- website/docs/docs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
14 | 14 | | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
27 | 22 | | |
28 | 23 | | |
29 | 24 | | |
| |||
52 | 47 | | |
53 | 48 | | |
54 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
55 | 102 | | |
56 | 103 | | |
57 | 104 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
206 | 206 | | |
207 | 207 | | |
208 | 208 | | |
209 | | - | |
| 209 | + | |
210 | 210 | | |
211 | 211 | | |
212 | 212 | | |
| |||
306 | 306 | | |
307 | 307 | | |
308 | 308 | | |
309 | | - | |
310 | | - | |
311 | | - | |
312 | | - | |
| 309 | + | |
313 | 310 | | |
314 | 311 | | |
315 | 312 | | |
| |||
363 | 360 | | |
364 | 361 | | |
365 | 362 | | |
366 | | - | |
| 363 | + | |
| 364 | + | |
367 | 365 | | |
368 | 366 | | |
369 | 367 | | |
370 | 368 | | |
371 | 369 | | |
372 | | - | |
| 370 | + | |
373 | 371 | | |
374 | 372 | | |
375 | 373 | | |
| |||
482 | 480 | | |
483 | 481 | | |
484 | 482 | | |
485 | | - | |
| 483 | + | |
486 | 484 | | |
487 | 485 | | |
| 486 | + | |
488 | 487 | | |
489 | 488 | | |
490 | | - | |
491 | | - | |
492 | | - | |
493 | | - | |
494 | | - | |
495 | | - | |
496 | | - | |
497 | | - | |
498 | | - | |
499 | | - | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
500 | 495 | | |
501 | | - | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
502 | 499 | | |
503 | 500 | | |
504 | | - | |
| 501 | + | |
| 502 | + | |
505 | 503 | | |
506 | 504 | | |
507 | 505 | | |
508 | | - | |
| 506 | + | |
| 507 | + | |
509 | 508 | | |
510 | 509 | | |
511 | 510 | | |
512 | | - | |
513 | | - | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
514 | 530 | | |
515 | 531 | | |
516 | | - | |
517 | | - | |
| 532 | + | |
| 533 | + | |
518 | 534 | | |
519 | 535 | | |
520 | 536 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
0 commit comments