75f467bae3
LLMClient.prepare(request) returned a PreparedRequest with target: unknown. Callers building debug UIs / request previews / plan rendering had to cast target to the adapter's native shape at every read. Adds PreparedRequestOf<Target> in schema and a generic Target = unknown parameter on LLMClient.prepare so callers can opt in to a typed view: const prepared = yield* client.prepare<OpenAIChatTarget>(request) prepared.target.model // typed prepared.target.messages // typed The runtime payload is unchanged — the adapter still emits target: unknown and the consumer asserts the shape they expect from the configured adapter. The cast lives at the public boundary in adapter.ts; everything else stays honest about runtime types. Existing callers without the type argument still get target: unknown and nothing breaks. Test in openai-chat.test.ts proves the narrowing at the type level.