diff --git a/apps/server/src/serverSettings.test.ts b/apps/server/src/serverSettings.test.ts index ef8b4d6afae79..7616325d62e9d 100644 --- a/apps/server/src/serverSettings.test.ts +++ b/apps/server/src/serverSettings.test.ts @@ -990,6 +990,31 @@ it.layer(NodeServices.layer)("server settings", (it) => { }).pipe(Effect.provide(layerServerSettings())), ); + it.effect("reads provider history only when legacy provider settings need migrating", () => + Effect.gen(function* () { + const serverConfig = yield* ServerConfig.ServerConfig; + const fileSystem = yield* FileSystem.FileSystem; + const serverSettings = yield* ServerSettingsModule.ServerSettingsService; + const sql = yield* SqlClient.SqlClient; + yield* sql`DROP TABLE provider_session_runtime`; + yield* fileSystem.writeFileString( + serverConfig.settingsPath, + JSON.stringify({ providers: { grok: { binaryPath: "/opt/grok" } } }), + ); + + const error = yield* Effect.flip(serverSettings.getSettings); + assert.equal(error.operation, "read-provider-history"); + + yield* fileSystem.writeFileString( + serverConfig.settingsPath, + JSON.stringify({ addProjectBaseDirectory: "~/Development" }), + ); + + const settings = yield* serverSettings.getSettings; + assert.equal(settings.addProjectBaseDirectory, "~/Development"); + }).pipe(Effect.provide(layerServerSettings())), + ); + it.effect("migrates legacy providers from an invalid file without rewriting it", () => Effect.gen(function* () { const serverConfig = yield* ServerConfig.ServerConfig; diff --git a/apps/server/src/serverSettings.ts b/apps/server/src/serverSettings.ts index 67a1c3c3414f3..151647aa72bdc 100644 --- a/apps/server/src/serverSettings.ts +++ b/apps/server/src/serverSettings.ts @@ -737,7 +737,7 @@ const make = Effect.gen(function* () { // A file that failed to decode must stay on disk for the user to repair. const settingsFileTrusted = Option.isNone(parseFailure); - const providerHistory = yield* sql<{ + const readProviderHistory = sql<{ readonly providerName: string; readonly providerInstanceId: string | null; }>` @@ -791,7 +791,7 @@ const make = Effect.gen(function* () { const loaded = foldProviderInstanceEnabledFlags( legacyProviders === undefined ? settings - : migrateLegacyProviderSettings(settings, legacyProviders, providerHistory), + : migrateLegacyProviderSettings(settings, legacyProviders, yield* readProviderHistory), ); const folded = settingsFileTrusted ? foldLegacyProjectSettings(loaded, legacyProjectRows)