From e56b591d56ea3f3007c612da2f0fe2004d696f45 Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Thu, 4 Jun 2026 23:55:29 +0900 Subject: fix(kernel): expose getProviders/getTools on HostAPI (CR-2) + runTurn uses input tabId/turnId (CR-3); simplify orchestrator wiring (167 tests) --- packages/kernel/src/host/host.test.ts | 50 +++++++++++++++++++++++++++++++++++ packages/kernel/src/host/host.ts | 6 +++++ 2 files changed, 56 insertions(+) (limited to 'packages/kernel/src/host') diff --git a/packages/kernel/src/host/host.test.ts b/packages/kernel/src/host/host.test.ts index 862854e..f7b7eba 100644 --- a/packages/kernel/src/host/host.test.ts +++ b/packages/kernel/src/host/host.test.ts @@ -584,6 +584,56 @@ describe("createHost", () => { }); }); + describe("HostAPI registry access", () => { + it("getTools returns registered tools via HostAPI", async () => { + const tool = createFakeTool("read-file"); + let capturedTools: ReadonlyMap | undefined; + + const producer = createExtension("tools-fs", { + activate: (host) => { + host.defineTool(tool); + }, + }); + const consumer = createExtension("consumer", { + dependsOn: ["tools-fs"], + activate: (host) => { + capturedTools = host.getTools(); + }, + }); + + const host = createHost([producer, consumer], deps); + await host.activate(); + + expect(capturedTools).toBeDefined(); + expect(capturedTools?.size).toBe(1); + expect(capturedTools?.get("read-file")).toBe(tool); + }); + + it("getProviders returns registered providers via HostAPI", async () => { + const provider = createFakeProvider("anthropic"); + let capturedProviders: ReadonlyMap | undefined; + + const producer = createExtension("provider-anthropic", { + activate: (host) => { + host.defineProvider(provider); + }, + }); + const consumer = createExtension("consumer", { + dependsOn: ["provider-anthropic"], + activate: (host) => { + capturedProviders = host.getProviders(); + }, + }); + + const host = createHost([producer, consumer], deps); + await host.activate(); + + expect(capturedProviders).toBeDefined(); + expect(capturedProviders?.size).toBe(1); + expect(capturedProviders?.get("anthropic")).toBe(provider); + }); + }); + describe("DAG errors", () => { it("throws on missing dependency", () => { const ext = createExtension("a", { dependsOn: ["missing"] }); diff --git a/packages/kernel/src/host/host.ts b/packages/kernel/src/host/host.ts index 4ffef20..e0ca5d5 100644 --- a/packages/kernel/src/host/host.ts +++ b/packages/kernel/src/host/host.ts @@ -126,6 +126,12 @@ export function createHost(extensions: readonly Extension[], deps: HostDeps): Ho permissions: deps.permissions, events: deps.events, logger: deps.logger, + getProviders() { + return providers; + }, + getTools() { + return tools; + }, scheduler: { register(job: ScheduledJob) { scheduledJobs.push(job); -- cgit v1.2.3