Add canvas artifact RPC foundation for A2UI

This commit is contained in:
William Valentin
2026-02-16 12:36:02 -08:00
parent fe8674e108
commit 8a0b4f3dbb
11 changed files with 497 additions and 3 deletions
+11
View File
@@ -7,6 +7,7 @@ import { SessionBridge } from './session-bridge.js';
import type { SessionBridgeConfig } from './session-bridge.js';
import { LaneQueue } from './lane-queue.js';
import type { LaneQueueConfig } from './lane-queue.js';
import { CanvasStore } from './canvas-store.js';
import { MetricsCollector } from './metrics.js';
import { authenticateRequest, authorizeNodeMethod } from './auth.js';
import type { AuthConfig } from './auth.js';
@@ -28,6 +29,7 @@ import {
createIntentHandlers,
createRoutingHandlers,
createHistoryHandlers,
createCanvasHandlers,
createNodeHandlers,
} from './handlers/index.js';
import { discoverServices } from './handlers/services.js';
@@ -133,6 +135,7 @@ export class GatewayServer {
private router: Router;
private sessionBridge: SessionBridge;
private laneQueue: LaneQueue;
private canvasStore: CanvasStore;
private metrics: MetricsCollector;
private discoveryHandle: GatewayDiscoveryHandle | null = null;
private connectionMap: Map<WebSocket, string> = new Map();
@@ -160,6 +163,7 @@ export class GatewayServer {
});
this.laneQueue = new LaneQueue(config.queue);
this.canvasStore = new CanvasStore();
this.metrics = new MetricsCollector({
getQueueDepth: () => this.laneQueue.totalPending(),
});
@@ -235,6 +239,10 @@ export class GatewayServer {
sessionManager: this.config.sessionManager,
});
const canvasHandlers = createCanvasHandlers({
store: this.canvasStore,
});
const toolHandlers = createToolHandlers({
toolRegistry: this.config.toolRegistry,
toolExecutor: this.config.toolExecutor,
@@ -365,6 +373,9 @@ export class GatewayServer {
for (const [method, handler] of Object.entries(historyHandlers)) {
this.router.register(method, handler);
}
for (const [method, handler] of Object.entries(canvasHandlers)) {
this.router.register(method, handler);
}
for (const [method, handler] of Object.entries(toolHandlers)) {
this.router.register(method, handler);
}