diff --git a/apps/server/src/server.ts b/apps/server/src/server.ts index 959cad396ac22..3e6f8805ea77f 100644 --- a/apps/server/src/server.ts +++ b/apps/server/src/server.ts @@ -492,7 +492,9 @@ const layerCheckpointStore = CheckpointStore.layer.pipe(Layer.provide(layerVcsDr const layerPortScanner = PortScanner.layer.pipe(Layer.provide(ProcessRunner.layer)); -const layerTerminal = TerminalManager.layer.pipe( +const layerTerminal = TerminalManager.layer( + ProviderInstanceRegistryHydration.deriveProviderInstanceConfigMap, +).pipe( Layer.provide(layerPtyAdapter), Layer.provide(layerPortScanner), Layer.provide(layerNativeTelemetry), diff --git a/apps/server/src/serverSettings.test.ts b/apps/server/src/serverSettings.test.ts index e733a7ab8cf88..3ca2d29da7c81 100644 --- a/apps/server/src/serverSettings.test.ts +++ b/apps/server/src/serverSettings.test.ts @@ -1,3 +1,4 @@ +import { deriveProviderInstanceConfigMap } from "./provider/ProviderInstanceRegistryHydration.ts"; import * as NodeCrypto from "@effect/platform-node/NodeCrypto"; import * as NodeServices from "@effect/platform-node/NodeServices"; import { @@ -2074,6 +2075,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("server settings" }); const environment = yield* resolveProviderInstanceTerminalEnvironment({ + deriveProviderInstanceConfigMap, serverSettings, path, rawProviderInstanceId: instanceId, diff --git a/apps/server/src/terminal/Manager.test.ts b/apps/server/src/terminal/Manager.test.ts index 6c147c2a944e9..eb7bc2dee2343 100644 --- a/apps/server/src/terminal/Manager.test.ts +++ b/apps/server/src/terminal/Manager.test.ts @@ -1,3 +1,4 @@ +import { deriveProviderInstanceConfigMap } from "../provider/ProviderInstanceRegistryHydration.ts"; import * as NodeCrypto from "@effect/platform-node/NodeCrypto"; import * as NodeServices from "@effect/platform-node/NodeServices"; import { assert, it } from "@effect/vitest"; @@ -2054,6 +2055,7 @@ it.layer( const path = yield* Path.Path; const serverSettings = yield* ServerSettings.ServerSettingsService; const environment = yield* TerminalManager.resolveProviderInstanceTerminalEnvironment({ + deriveProviderInstanceConfigMap, serverSettings, path, rawProviderInstanceId: "configured_home", diff --git a/apps/server/src/terminal/Manager.ts b/apps/server/src/terminal/Manager.ts index 7cecd01db7603..48409c9139725 100644 --- a/apps/server/src/terminal/Manager.ts +++ b/apps/server/src/terminal/Manager.ts @@ -67,7 +67,7 @@ import * as ServerConfig from "../config.ts"; import { mergeProviderInstanceEnvironment } from "@t3tools/provider-core/server/instanceEnvironment"; import { resolveCodexHomeLayout } from "../provider/Drivers/CodexHomeLayout.ts"; import { makeClaudeEnvironment } from "../provider/Drivers/ClaudeHome.ts"; -import { deriveProviderInstanceConfigMap } from "../provider/ProviderInstanceRegistryHydration.ts"; +import type { deriveProviderInstanceConfigMap } from "../provider/ProviderInstanceRegistryHydration.ts"; import * as ServerSettings from "../serverSettings.ts"; import { increment, terminalSessionsTotal } from "../observability/Metrics.ts"; import { expandHomeVariable } from "@t3tools/provider-core/server/pathExpansion"; @@ -1451,6 +1451,7 @@ interface TerminalManagerOptions { export const resolveProviderInstanceTerminalEnvironment = Effect.fn( "terminal.resolveProviderInstanceTerminalEnvironment", )(function* (input: { + readonly deriveProviderInstanceConfigMap: typeof deriveProviderInstanceConfigMap; readonly serverSettings: ServerSettings.ServerSettingsService["Service"]; readonly path: Path.Path; readonly rawProviderInstanceId: string; @@ -1460,7 +1461,7 @@ export const resolveProviderInstanceTerminalEnvironment = Effect.fn( const settings = yield* input.serverSettings.getSettings.pipe( Effect.mapError((cause) => new TerminalProviderEnvironmentError({ providerInstanceId, cause })), ); - const instance = deriveProviderInstanceConfigMap(settings)[providerInstanceId]; + const instance = input.deriveProviderInstanceConfigMap(settings)[providerInstanceId]; if (instance === undefined) { return yield* new TerminalProviderInstanceNotFoundError({ providerInstanceId }); } @@ -1490,7 +1491,9 @@ export const resolveProviderInstanceTerminalEnvironment = Effect.fn( }); /** @public */ -export const make = Effect.fn("TerminalManager.make")(function* () { +export const make = Effect.fn("TerminalManager.make")(function* ( + deriveConfigMap: typeof deriveProviderInstanceConfigMap, +) { const { terminalLogsDir, providerStatusCacheDir, baseDir } = yield* ServerConfig.ServerConfig; const ptyAdapter = yield* PtyAdapter.PtyAdapter; const portDiscovery = yield* PortScanner.PortDiscovery; @@ -1501,6 +1504,7 @@ export const make = Effect.fn("TerminalManager.make")(function* () { "terminal.resolveProviderInstanceEnvironment", )((rawProviderInstanceId: string, env: Record | undefined) => resolveProviderInstanceTerminalEnvironment({ + deriveProviderInstanceConfigMap: deriveConfigMap, serverSettings, path, rawProviderInstanceId, @@ -3509,4 +3513,5 @@ export const makeWithOptions = Effect.fn("TerminalManager.makeWithOptions")(func }); }); -export const layer = Layer.effect(TerminalManager, make()).pipe(Layer.provide(ProcessRunner.layer)); +export const layer = (deriveConfigMap: typeof deriveProviderInstanceConfigMap) => + Layer.effect(TerminalManager, make(deriveConfigMap)).pipe(Layer.provide(ProcessRunner.layer));