fix(voice): make viewport escalation diagnostics truthful and paired

Review follow-up for #835. What is captured, sent and kept is unchanged.

- Log nothing for tool results other than get_entity_context, so other
  tools stop spending the shared debug-log budget.
- Give every decision and outcome the same contextId and image kind, so
  overlapping requests pair up.
- Log why a crop decision did not send (stale, off ground, off screen,
  expired, pose changed, already requested) instead of leaving a lone
  "pointer-ground-crop" that reads as sent.
- Split capture-invalidated into session-reset, superseded, channel-lost
  and frame-stale.
- Close the pair with "error" when a step throws, then rethrow.
- Document the events in CURRENT-STATE and reword the changelog fragment.
This commit is contained in:
manjunath22466 committed 2026-11-06 22:37:41 +05:30
1 parent 15bda43a1e
commit 27823d7d05
4 files changed
+386 -46

No files matched your search

@@ -1,5 +1,7 @@
- Voice viewport escalation now emits compact reason-code diagnostics without
recording tool payloads. The policy still prefers structured entity identity,
preserves the live point-and-ask crop added in #837, and does not add image
requests, change image retention or automatically widen visual scope.
This follows asturksever's #835 review; credit the #837 pointer-crop authors.
- The voice debug log now says why OpenAI Realtime did or did not get a
viewport screenshot or pointer crop. Each entity-context answer logs a
reason-coded decision and, when an image was due, one outcome under the same
id, so a crop that was dropped because the pointer went stale or the camera
moved is no longer counted as sent. What is captured, sent and kept is
unchanged, and no image data or user text is logged (kvnloo, manjunath22466,
#835).