From 56973e0ca4dbe502730b75916120c7d1dfd44d61 Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Wed, 12 Aug 2026 22:55:32 -0400 Subject: [PATCH] fix(core): reject inherited workspace providers (#42227) --- packages/core/src/workspace/driver.ts | 2 +- packages/core/test/workspace.test.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/core/src/workspace/driver.ts b/packages/core/src/workspace/driver.ts index dd8ac1b4cce..4c080859066 100644 --- a/packages/core/src/workspace/driver.ts +++ b/packages/core/src/workspace/driver.ts @@ -55,7 +55,7 @@ export class RegistryService extends Context.Service( export const registry = (drivers: Readonly>): Registry => ({ get: (provider) => { - const driver = drivers[provider] + const driver = Object.hasOwn(drivers, provider) ? drivers[provider] : undefined return driver ? Effect.succeed(driver) : Effect.fail(new ProviderNotFound({ provider })) }, }) diff --git a/packages/core/test/workspace.test.ts b/packages/core/test/workspace.test.ts index 262212e9c7c..de3dfe8e389 100644 --- a/packages/core/test/workspace.test.ts +++ b/packages/core/test/workspace.test.ts @@ -48,6 +48,18 @@ beforeEach(() => { failConnect = false }) +it.effect("rejects unregistered workspace providers", () => + Effect.gen(function* () { + const registry = WorkspaceDriver.registry({ fake: driver }) + + for (const provider of ["missing", "constructor", "toString", "__proto__"]) { + expect(yield* registry.get(provider).pipe(Effect.flip)).toEqual( + new WorkspaceDriver.ProviderNotFound({ provider }), + ) + } + }), +) + it.effect("persists the workspace lifecycle and reconnects after idle suspension", () => Effect.gen(function* () { const workspace = yield* Workspace.Service