From 7078ae28d248f6c7b7ec64cee152d3aef534ed1a Mon Sep 17 00:00:00 2001 From: Adamulek123 Date: Tue, 10 Nov 2026 14:24:04 +0100 Subject: [PATCH 1/2] perf(server): avoid loading provider drivers for terminal imports --- apps/server/src/server.ts | 4 +++- apps/server/src/serverSettings.test.ts | 24 ++++++++++++++++++++++++ apps/server/src/terminal/Manager.test.ts | 2 ++ apps/server/src/terminal/Manager.ts | 13 +++++++++---- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/apps/server/src/server.ts b/apps/server/src/server.ts index 47190f60dcf51..477969638e9f6 100644 --- a/apps/server/src/server.ts +++ b/apps/server/src/server.ts @@ -489,7 +489,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 347b43dd6f44c..d82453a6f7bdc 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 { @@ -2063,6 +2064,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("server settings" }); const environment = yield* resolveProviderInstanceTerminalEnvironment({ + deriveProviderInstanceConfigMap, serverSettings, path, rawProviderInstanceId: instanceId, @@ -2074,6 +2076,28 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("server settings" assert.match(environment.CODEX_HOME ?? "", /[\\/][.]codex-terminal$/); assert.notInclude(persisted, "sk-terminal-secret"); assert.include(persisted, '"valueRedacted": true'); + + yield* serverSettings.updateSettings({ + providerInstances: { + [instanceId]: { + driver: ProviderDriverKind.make("codex"), + environment: [ + { name: "OPENROUTER_API_KEY", value: "refreshed-secret", sensitive: true }, + ], + config: { homePath: "~/.codex-refreshed" }, + }, + }, + }); + const refreshed = yield* resolveProviderInstanceTerminalEnvironment({ + deriveProviderInstanceConfigMap, + serverSettings, + path, + rawProviderInstanceId: instanceId, + env: { TERMINAL_OVERRIDE: "terminal" }, + }); + assert.equal(refreshed.OPENROUTER_API_KEY, "refreshed-secret"); + assert.equal(refreshed.TERMINAL_OVERRIDE, "terminal"); + assert.match(refreshed.CODEX_HOME ?? "", /[\\/][.]codex-refreshed$/); }).pipe(Effect.provide(layerServerSettings())), ); it.effect("rolls back provider secret changes when the settings file commit fails", () => diff --git a/apps/server/src/terminal/Manager.test.ts b/apps/server/src/terminal/Manager.test.ts index ed4645b18becf..1ab862d445af8 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"; @@ -1993,6 +1994,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 e2061df592d00..e2d6966144a57 100644 --- a/apps/server/src/terminal/Manager.ts +++ b/apps/server/src/terminal/Manager.ts @@ -66,7 +66,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 { expandHomePath } from "@t3tools/provider-core/server/pathExpansion"; @@ -1439,6 +1439,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; @@ -1448,7 +1449,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 }); } @@ -1478,7 +1479,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; @@ -1489,6 +1492,7 @@ export const make = Effect.fn("TerminalManager.make")(function* () { "terminal.resolveProviderInstanceEnvironment", )((rawProviderInstanceId: string, env: Record | undefined) => resolveProviderInstanceTerminalEnvironment({ + deriveProviderInstanceConfigMap: deriveConfigMap, serverSettings, path, rawProviderInstanceId, @@ -3497,4 +3501,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)); From 71c919cac2c991294f9a652f7863f8be4b2c59a3 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 12 Nov 2026 20:07:17 +0000 Subject: [PATCH 2/2] test(server): drop settings-refresh case unrelated to the terminal import boundary AI-assisted; verified with the tests and tools listed above. Co-Authored-By: Claude Opus 5.5 --- apps/server/src/serverSettings.test.ts | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/apps/server/src/serverSettings.test.ts b/apps/server/src/serverSettings.test.ts index 464493ceb1d24..3ca2d29da7c81 100644 --- a/apps/server/src/serverSettings.test.ts +++ b/apps/server/src/serverSettings.test.ts @@ -2087,28 +2087,6 @@ it.layer(Layer.mergeAll(NodeServices.layer, NodeCrypto.layer))("server settings" assert.match(environment.CODEX_HOME ?? "", /[\\/][.]codex-terminal$/); assert.notInclude(persisted, "sk-terminal-secret"); assert.include(persisted, '"valueRedacted": true'); - - yield* serverSettings.updateSettings({ - providerInstances: { - [instanceId]: { - driver: ProviderDriverKind.make("codex"), - environment: [ - { name: "OPENROUTER_API_KEY", value: "refreshed-secret", sensitive: true }, - ], - config: { homePath: "~/.codex-refreshed" }, - }, - }, - }); - const refreshed = yield* resolveProviderInstanceTerminalEnvironment({ - deriveProviderInstanceConfigMap, - serverSettings, - path, - rawProviderInstanceId: instanceId, - env: { TERMINAL_OVERRIDE: "terminal" }, - }); - assert.equal(refreshed.OPENROUTER_API_KEY, "refreshed-secret"); - assert.equal(refreshed.TERMINAL_OVERRIDE, "terminal"); - assert.match(refreshed.CODEX_HOME ?? "", /[\\/][.]codex-refreshed$/); }).pipe(Effect.provide(layerServerSettings())), ); it.effect("rolls back provider secret changes when the settings file commit fails", () =>