RagTool::execute() should expose structured per-result data and check entity access
## Problem/Motivation
`RagTool::execute()` (`src/Plugin/AiFunctionCall/RagTool.php`) only ever hands the LLM a single flattened text string built from the search results. None of the per-result data survives the call: not which entity a chunk came from, not its score, not the raw chunk text.
`getStructuredOutput()` returns `results` from `$this->results`, but `execute()` builds its output into a local `$end_results` array and never assigns anything to `$this->results`. It is always `[]`.
This blocks consumers who want the *retrieved sources themselves*, not just the LLM's answer, from delegating retrieval to this tool. [#3610874](https://www.drupal.org/project/ai_answers/issues/3610874) (`ai_answers`, migrating off the deprecated `ai_assistant_api` onto `ai_agents`) is one such consumer: it renders a client-facing reference list (entity URL, rendered preview, score) per source alongside the generated answer, and currently does its own Search API retrieval for exactly this reason. Moving that retrieval onto `ai_search:rag_search` as a real tool call, the intended shape once `ai_agents` streaming support lands, is a straight regression as things stand: there'd be no way to recover which entities backed the answer.
(Entity access is already enforced independently of this: `SearchApiAiSearchBackend::doSearch()` defaults `search_api_bypass_access` to `FALSE` and calls `checkEntityAccess()` per result before `RagTool` ever sees it, so that part isn't a gap here.)
## Proposed resolution
Populate `$this->results` in `execute()` with one entry per surviving result: entity type, entity id, langcode, score, and chunk text, parsed from the same `drupal_entity_id` format `SearchApiAiSearchBackend::checkEntityAccess()` and `ai_answers`'s `AnswerService::loadResultEntity()` already parse (`prefix:entity_type/id:langcode`).
## Remaining tasks
- Populate `$this->results` in `execute()`.
- Test coverage for the structured output round-trip and the `drupal_entity_id` parsing.
## User interface changes
None.
## API changes
`getStructuredOutput()`'s `results` key changes from always-`[]` to populated. That's additive, not a break, since nothing currently reads a non-empty value from it.
## Data model changes
None.
issue