summaryrefslogtreecommitdiffhomepage
path: root/packages/kernel/src/host
diff options
context:
space:
mode:
Diffstat (limited to 'packages/kernel/src/host')
-rw-r--r--packages/kernel/src/host/host.test.ts50
-rw-r--r--packages/kernel/src/host/host.ts6
2 files changed, 56 insertions, 0 deletions
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<string, ToolContract> | 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<string, ProviderContract> | 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);