1314a539c2
One renderer coordinator owns every right-click and replaces the native Electron menus. Menus are assembled from what the click landed on: - Links and images get open/copy/save sections; chat links add the reach-aware resolved-URL copy on remote gateways. - Editables get spell-check suggestions (async-appended when Chromium's facts arrive from main), cut/copy/paste, and select all. Cut and copy need a selection; paste needs a non-empty clipboard; select all needs field content. The verbs show their accelerators instead of icons and dispatch a frame after the menu closes, so the radix focus trap cannot steal the target. Select all runs renderer-side, scoped to the field, because main's selectAll acts on the focused frame and could grab the transcript. - Terminals answer through registered xterm handles; the read-only agent terminal hides paste. - The in-app browser guest builds the same menus from the webview tag's context-menu event: Chromium's editFlags gate the edit verbs, spell-check rides the event, and Inspect element closes every menu. Coordinates arrive as window-relative device pixels, so the handler divides by the window zoom factor; guest edit commands focus the webview first, because they act on the focused webContents. - Bare app chrome falls back to the window verbs. Labels come from the locale files in all five languages. Main keeps thin IPC verbs: edit commands, copy-image-at-gesture, spell-check actions, and dictionary-add for guests (the tag has no session API). The e2e spec exercises the real focus trap; it is blocked today by the gateway-checking stall that also fails e2e/chat.spec.ts.