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.
29 lines
1.2 KiB
TypeScript
29 lines
1.2 KiB
TypeScript
// 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);
|