BTerminal/v2/src/lib/adapters/message-adapters.ts
Hibryda 1efcb13869 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.
2026-03-11 02:08:45 +01:00

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);