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:
Hibryda 2026-03-11 02:08:45 +01:00
parent d8d7ad16f3
commit 1efcb13869
27 changed files with 276 additions and 49 deletions

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