d303e18d09
capture() read any non-None pid/window_id as a request for exact-window targeting. Several providers emit every declared schema property on every tool call, zero-filling unused optional integers, so those calls arrive as pid=0, window_id=0. The exact-target branch was then entered, the caller's app= was discarded, _positive_int(0) returned None for both ids, and the capture failed with a message pointing at pid/window_id. For that class of model capture(app=...) and frontmost capture never worked at all. Normalize non-positive ids to None before the branch decision so dispatch falls through to app/frontmost discovery. Malformed non-numeric ids are deliberately not treated as placeholders: they still reach the existing validation error instead of being silently ignored. Fixes #81333