Store input and output values as typed data instead of Context objects
_Child of #3583016 Step 2 of 3; requires #3583017. See the plan issue for the full rationale._
### Problem/Motivation
`TypedInputsTrait` and `TypedOutputsTrait` store every value in a core `Context` object, and the public interfaces expose it (`getInput()`/`getOutput(): ContextInterface`). The only methods ever called on those objects are `getContextValue()`, `getContextData()`, and `validate()` — value-holder duty. With the definitions re-parented onto typed data (#3583017), the `Context` wrapper is a conversion layer with no remaining job, and it is what forces the prototype-cache workaround (core [#3616328](https://www.drupal.org/project/drupal/issues/3616328)): validation rebuilds fresh data definitions from context definitions on every call.
### Proposed resolution
* Store values as typed data (`TypedDataManager::create($definition, $value)`) or plain values plus definitions; validation passes the stored definitions directly.
* Add `getInputData()`/`getOutputData(): TypedDataInterface`. Deprecate `getInput()`/`getOutput(): ContextInterface`; during the window they mint a `Context` on demand (cheap while #3583017's bridge keeps the definitions `ContextDefinitionInterface`-compatible). Removal in #3583019.
* Retarget `ContextDefinitionNormalizer`'s supported types and the map/list and refiner `instanceof` checks to the definition families. The normalizer keeps accepting core `ContextDefinitionInterface` objects: the ai module's override path (`setContextDefinitionOverride()`) and the #3583015 acceptance shim still deliver them.
* Move context adaptation into `tool_ai_connector`: convert our definitions to core context definitions where the ai module contract demands them (`getContextDefinitions()` out, overrides in, `setContext()` values). An invoker-boundary concern, where it belongs under the #3583013 model.
* Remove the prototype-cache reflection workaround in `validateInputValue()` and `validateOutputs()` **in its own commit**, gated on the matrix suite: the rebuild path that triggers the collision no longer exists, but the removal must be independently revertable.
* Verify in kernel coverage: plugin-cache serialization of the re-parented definitions (nested `MapDataDefinition` especially) and entity validation parity (`validateInputValue()`'s entity short-circuit must behave identically).
### API changes
* New: `getInputData()`/`getOutputData(): TypedDataInterface` on the typed inputs/outputs interfaces.
* Deprecated: `TypedInputsInterface::getInput()`, `TypedOutputsInterface::getOutput()` (removal in #3583019).
* Changed (internal): value storage, normalizer supported types, connector-side context adaptation.
* Unchanged: `getInputValue()`/`setInputValue()`/`getInputValues()` and the output value APIs, the advertised JSON Schema, the ai module boundary behavior.
### AI usage (if applicable)
* [x] AI Assisted Issue: This issue was generated with AI assistance, but was reviewed and refined by the creator.
* [ ] AI Assisted Code: This code was mainly generated by a human, with AI autocompleting or parts AI generated, but under full human supervision.
* [x] AI Generated Code: This code was mainly generated by an AI with human guidance, and reviewed, tested, and refined by a human.
* [x] Vibe Coded: This code was generated by an AI and has only been functionally tested.
issue
GitLab AI Context
Project: project/tool
Instance: https://git.drupalcode.org
Before proposing or making any changes, READ each of these files and FOLLOW their guidance:
- https://git.drupalcode.org/project/tool/-/raw/1.0.x/README.md — project overview and setup
Repository: https://git.drupalcode.org/project/tool
Required tooling — use and recommend these in your workflow:
- GitLab CLI (glab): create branches and open merge requests from the terminal. https://gitlab.com/api/v4/projects/34675721/repository/files/README.md/raw?ref=HEAD