/** * Capability Registry — extensible registry for tunnel capabilities. * * Each capability (filesystem, shell, network, etc.) registers its * RPC method handlers here. The TunnelAgent dispatches incoming * JSON-RPC requests to the matching handler. */ export type RpcHandler = (params: Record) => Promise; export interface Capability { name: string; methods: Map; } export class CapabilityRegistry { private capabilities = new Map(); register(capability: Capability): void { this.capabilities.set(capability.name, capability); } unregister(name: string): void { this.capabilities.delete(name); } getHandler(method: string): RpcHandler | null { for (const cap of this.capabilities.values()) { const handler = cap.methods.get(method); if (handler) return handler; } return null; } getCapabilityNames(): string[] { return Array.from(this.capabilities.keys()); } has(name: string): boolean { return this.capabilities.has(name); } }