feat(provider-adapter): implement multi-provider abstraction layer (Phase 1)
Add provider types, registry, capabilities, and message adapter registry. Rename sdk-messages→claude-messages, agent-runner→claude-runner, ClaudeSession→AgentSession. Update Rust AgentQueryOptions with provider and provider_config fields. Capability-driven AgentPane rendering.
This commit is contained in:
parent
d8d7ad16f3
commit
1efcb13869
27 changed files with 276 additions and 49 deletions
29
v2/src/lib/adapters/message-adapters.ts
Normal file
29
v2/src/lib/adapters/message-adapters.ts
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// Message Adapter Registry — routes raw provider messages to the correct parser
|
||||
// Each provider registers its own adapter; the dispatcher calls adaptMessage()
|
||||
|
||||
import type { AgentMessage } from './claude-messages';
|
||||
import type { ProviderId } from '../providers/types';
|
||||
import { adaptSDKMessage } from './claude-messages';
|
||||
|
||||
/** Function signature for a provider message adapter */
|
||||
export type MessageAdapter = (raw: Record<string, unknown>) => AgentMessage[];
|
||||
|
||||
const adapters = new Map<ProviderId, MessageAdapter>();
|
||||
|
||||
/** Register a message adapter for a provider */
|
||||
export function registerMessageAdapter(providerId: ProviderId, adapter: MessageAdapter): void {
|
||||
adapters.set(providerId, adapter);
|
||||
}
|
||||
|
||||
/** Adapt a raw message using the appropriate provider adapter */
|
||||
export function adaptMessage(providerId: ProviderId, raw: Record<string, unknown>): AgentMessage[] {
|
||||
const adapter = adapters.get(providerId);
|
||||
if (!adapter) {
|
||||
console.warn(`No message adapter for provider: ${providerId}, falling back to claude`);
|
||||
return adaptSDKMessage(raw);
|
||||
}
|
||||
return adapter(raw);
|
||||
}
|
||||
|
||||
// Register Claude adapter by default
|
||||
registerMessageAdapter('claude', adaptSDKMessage);
|
||||
Loading…
Add table
Add a link
Reference in a new issue