(
server: RuntimeServer,
executor: RuntimeNodeAgentExecutor = createRuntimeNodeHarnessAgentExecutor(),
options: RuntimeNodeAgentModuleOptions = {}
)
| 640 | } |
| 641 | |
| 642 | export function registerRuntimeNodeAgentModule( |
| 643 | server: RuntimeServer, |
| 644 | executor: RuntimeNodeAgentExecutor = createRuntimeNodeHarnessAgentExecutor(), |
| 645 | options: RuntimeNodeAgentModuleOptions = {} |
| 646 | ): void { |
| 647 | const bridgeRegistry = options.bridgeRegistry ?? defaultServerProtocolBridgeRegistry |
| 648 | |
| 649 | server.registerNotification("agent/event") |
| 650 | server.registerNotification("agent/thread/started") |
| 651 | server.registerNotification("agent/thread/resumed") |
| 652 | server.registerNotification("agent/turn/started") |
| 653 | server.registerNotification("agent/turn/delta") |
| 654 | server.registerNotification("agent/turn/completed") |
| 655 | server.registerNotification("agent/turn/failed") |
| 656 | server.registerNotification("agent/approval/requested") |
| 657 | server.registerNotification("agent/goal/updated") |
| 658 | server.registerNotification("agent/goal/cleared") |
| 659 | server.registerAgentProviderResolver(() => [...executor.providers(), ...[...bridgeRegistry.bridges.values()].map(bridgeSummary)]) |
| 660 | |
| 661 | server.register("agent/provider/list", () => server.capabilities().agentProviders) |
| 662 | server.register("agent/provider/status", async (params) => { |
| 663 | const providerId = optionalString(asRecord(params).providerId) |
| 664 | const bridge = providerId ? bridgeRegistry.bridges.get(providerId) : undefined |
| 665 | if (bridge) { |
| 666 | return { |
| 667 | providerId, |
| 668 | connected: true, |
| 669 | state: "available", |
| 670 | capabilities: bridgeCapabilities(bridge), |
| 671 | detail: bridge.status ? await bridge.status() : undefined, |
| 672 | } |
| 673 | } |
| 674 | const status = await executor.status(providerId) |
| 675 | const providerKnown = providerId ? executor.providers().some((provider) => provider.providerId === providerId) : true |
| 676 | return { providerId: providerId ?? "all", connected: providerKnown && status !== null, state: providerKnown && status ? "available" : "unavailable", status: providerKnown ? status : null } |
| 677 | }) |
| 678 | server.register("agent/provider/read", (params) => { |
| 679 | const id = providerId(params) |
| 680 | return server.capabilities().agentProviders.find((provider) => provider.providerId === id) ?? null |
| 681 | }, providerParams) |
| 682 | server.register("agent/model/list", async (params) => { |
| 683 | const record = asRecord(params) |
| 684 | const id = optionalString(record.providerId) |
| 685 | const bridge = id ? bridgeRegistry.bridges.get(id) : undefined |
| 686 | if (bridge) { |
| 687 | if (!bridge.listModels) throw new RuntimeHandlerError("unsupported_capability", `Agent provider ${id} does not support model listing`) |
| 688 | return bridge.listModels({ providerId: bridge.providerId }) |
| 689 | } |
| 690 | return executor.models?.(id) ?? [] |
| 691 | }) |
| 692 | server.register("agent/serverProtocol/list", () => |
| 693 | [...bridgeRegistry.bridges.values()].map((bridge) => ({ |
| 694 | providerId: bridge.providerId, |
| 695 | label: bridge.label ?? bridge.providerId, |
| 696 | connected: true, |
| 697 | capabilities: bridgeCapabilities(bridge), |
| 698 | })) |
| 699 | ) |
no test coverage detected