From 3cf6db82c1c8a20a67511b1bdf96b2ff47601fc1 Mon Sep 17 00:00:00 2001 From: Dotta Date: Tue, 11 Aug 2026 18:26:48 +0000 Subject: [PATCH] fix(runner): restore capability issue thread imports Co-Authored-By: Paperclip --- .../capability-issue-thread-server.mjs | 33 +++++++++++++++++-- .../src/live/clean-room-server.test.ts | 20 ++++++++++- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/packages/paperclip-runner/scripts/capability-issue-thread-server.mjs b/packages/paperclip-runner/scripts/capability-issue-thread-server.mjs index 3c2242dc493..d93d20369c6 100644 --- a/packages/paperclip-runner/scripts/capability-issue-thread-server.mjs +++ b/packages/paperclip-runner/scripts/capability-issue-thread-server.mjs @@ -112,8 +112,35 @@ function capabilityCookie(request, surface, value, maxAgeSeconds = CAPABILITY_MA }; SameSite=Strict`; } -async function loadRunner() { - return import(new URL("../dist/index.js", import.meta.url).href); +async function importDistRunnerModule(relativePath) { + return import(new URL(`../dist/${relativePath}`, import.meta.url).href); +} + +export async function loadCapabilityIssueThreadRunner(importModule = importDistRunnerModule) { + const [cleanRoom, liveSession, turnStream, issueThread, fixtureState, liveConsole] = + await Promise.all([ + importModule("live/clean-room.js"), + importModule("live/live-session.js"), + importModule("live/turn-stream.js"), + importModule("issue-thread/index.js"), + importModule("mock-core/capability-control-plane-types.js"), + importModule("mock-core/live-console-demo-server.js"), + ]); + + // This package-owned server intentionally depends on private demo/live modules. + // Keep that dependency explicit instead of widening the package's public root. + return { + CAPABILITY_TURN_STREAM_HEADERS: turnStream.CAPABILITY_TURN_STREAM_HEADERS, + CAPABILITY_TURN_STREAM_SCHEMA: turnStream.CAPABILITY_TURN_STREAM_SCHEMA, + CapabilityLiveSessionService: liveSession.CapabilityLiveSessionService, + InMemoryCapabilityLiveSessionStore: liveSession.InMemoryCapabilityLiveSessionStore, + assertLiveConsoleLoopbackBindHost: liveConsole.assertLiveConsoleLoopbackBindHost, + createCapabilityCleanRoomSessionInput: cleanRoom.createCapabilityCleanRoomSessionInput, + createCapabilityFixtureState: fixtureState.createCapabilityFixtureState, + encodeCapabilityTurnStreamFrame: turnStream.encodeCapabilityTurnStreamFrame, + projectCapabilityIssueThread: issueThread.projectCapabilityIssueThread, + toCapabilityPublicThreadView: issueThread.toCapabilityPublicThreadView, + }; } function scratchRoot() { @@ -174,7 +201,7 @@ class RouteError extends Error { } export function createCapabilityIssueThreadMiddleware(options = {}) { - const load = options.loadRunner ?? loadRunner; + const load = options.loadRunner ?? loadCapabilityIssueThreadRunner; const workingDirectoryRoot = options.scratchRoot ?? scratchRoot(); let bootstrap = null; let bindHost = options.bindHost ?? "127.0.0.1"; diff --git a/packages/paperclip-runner/src/live/clean-room-server.test.ts b/packages/paperclip-runner/src/live/clean-room-server.test.ts index af43cf21a95..982ee748e16 100644 --- a/packages/paperclip-runner/src/live/clean-room-server.test.ts +++ b/packages/paperclip-runner/src/live/clean-room-server.test.ts @@ -475,11 +475,29 @@ let scratchParent: string; let scratchRoot: string; const requestedUrls: string[] = []; +const sourceRunnerModuleLoaders: Record Promise> = { + "live/clean-room.js": async () => await import("./clean-room.js"), + "live/live-session.js": async () => await import("./live-session.js"), + "live/turn-stream.js": async () => await import("./turn-stream.js"), + "issue-thread/index.js": async () => await import("../issue-thread/index.js"), + "mock-core/capability-control-plane-types.js": async () => + await import("../mock-core/capability-control-plane-types.js"), + "mock-core/live-console-demo-server.js": async () => + await import("../mock-core/live-console-demo-server.js"), +}; + +async function loadSourceRunnerModule(relativePath: string): Promise { + const load = sourceRunnerModuleLoaders[relativePath]; + if (load === undefined) throw new Error(`Unexpected runner module: ${relativePath}`); + return await load(); +} + async function createMiddleware(state: FakeProviderState, root: string) { const module = await import("../../scripts/capability-issue-thread-server.mjs"); return module.createCapabilityIssueThreadMiddleware({ bindHost: "127.0.0.1", - loadRunner: async () => await import("../index.js"), + loadRunner: async () => + await module.loadCapabilityIssueThreadRunner(loadSourceRunnerModule), scratchRoot: root, transportFactory: fakeTransportFactory(state), });