feat(vocero): add linked content and TALKFIRST greetings (#2)

Opening a report or podcast link now establishes an authenticated starting reference for the conversation. Users can select other accessible content or compare reports while retaining the original link, and TALKFIRST greetings can name the verified report or podcast.

Release notes:

- Added authenticated report and episode link resolution with bounded lookups and unavailable-content handling
- Added explicit conversation selection without restricting searches or changing the reference during comparisons
- Added contextual TALKFIRST greetings through both voice-proxy and HTTP reasoning paths
- Preserved backend permission checks, conversation isolation, cancellation, and the existing speech protocol

Reviewed-on: AquaPortal/s2s#2
This commit is contained in:
2026-10-08 09:34:16 -04:00
parent 96895996d9
commit 4b0108ecf0
21 changed files with 946 additions and 66 deletions
+13
View File
@@ -7,6 +7,19 @@ in the server's [context services](../../vocero-api/vocero_api/services/context.
[context.ts](../../vocero-frontend/src/lib/context.ts), and the
[WebSocket client](../../vocero-frontend/src/realtime/client.ts).
## Authenticated MCP context
When `S2S_MCP_URL` is configured, the browser submits the page's `report_id` and
`episode_id` during conversation creation. The server resolves them through the
authenticated MCP client and keeps compact verified references separately from
the current conversational selection. No legacy profile or episode preload is
used. TALKFIRST can mention the verified title after this preparation finishes.
The link never restricts searches or access to other permitted content.
See [tool calling](tool-calling.md#authenticated-aquaportal-mcp) for selection,
authorization, timeout, and missing-content behavior. The controls and public
episode fetch below describe the legacy path used when MCP is disabled.
## Independent controls
`S2S_INJECT_PROFILE` defaults to false and gates server loading of caller,