authorgravatar for me@t3.ggTheo Browne <me@t3.gg> 2026-08-25 00:11:27-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-08-25 00:11:27-07:00
log43f723f807e8cc05d7fcd36ee7c3e57c9b3c4980
tree5716f5c5f7c2cf1d21f673ccf0bed2e023fb3c2a
parente6d487e4f5d3cd049dbb373c7ca74192302443ae
signature Signed by PGP key B5690EEEBB952194

fix(server): stop probing Cursor until enabled (#8175)


3 files changed, 19 insertions(+), 8 deletions(-)

apps/server/src/provider/Layers/ProviderRegistry.test.ts+1-4
......@@ -1660,7 +1660,7 @@ it.layer(Layer.mergeAll(NodeServices.layer, ServerSettingsModule.layerTest(), Te
16601660 );
16611661
16621662 it.effect(
1663 "keeps cursor disabled and skips probing when the provider setting is disabled",
1663 "keeps Cursor disabled and skips provider probing when settings use their defaults",
16641664 () =>
16651665 Effect.gen(function* () {
16661666 const serverSettings = yield* makeMutableServerSettingsService(
......@@ -1670,9 +1670,6 @@ it.layer(Layer.mergeAll(NodeServices.layer, ServerSettingsModule.layerTest(), Te
16701670 codex: {
16711671 enabled: false,
16721672 },
1673 cursor: {
1674 enabled: false,
1675 },
16761673 grok: {
16771674 enabled: false,
16781675 },
packages/contracts/src/settings.test.ts+16-2
......@@ -200,19 +200,33 @@ describe("provider enabled defaults", () => {
200200 const decoded = decodeServerSettings({});
201201 expect(decoded.providers.codex.enabled).toBe(true);
202202 expect(decoded.providers.claudeAgent.enabled).toBe(true);
203 expect(decoded.providers.cursor.enabled).toBe(true);
203 expect(decoded.providers.cursor.enabled).toBe(false);
204204 expect(decoded.providers.grok.enabled).toBe(false);
205205 expect(decoded.providers.opencode.enabled).toBe(false);
206206 });
207207
208208 it("derives per-driver defaults from the settings schemas", () => {
209209 expect(defaultEnabledForDriver(ProviderDriverKind.make("codex"))).toBe(true);
210 expect(defaultEnabledForDriver(ProviderDriverKind.make("cursor"))).toBe(true);
210 expect(defaultEnabledForDriver(ProviderDriverKind.make("cursor"))).toBe(false);
211211 expect(defaultEnabledForDriver(ProviderDriverKind.make("grok"))).toBe(false);
212212 // Unknown fork drivers stay enabled; their own build decides otherwise.
213213 expect(defaultEnabledForDriver(ProviderDriverKind.make("ollama"))).toBe(true);
214214 });
215215
216 it("keeps Cursor enabled when an existing user explicitly opted in", () => {
217 const cursor = ProviderDriverKind.make("cursor");
218 const cursorId = ProviderInstanceId.make("cursor");
219 const decoded = decodeServerSettings({
220 providers: { cursor: { enabled: true } },
221 providerInstances: {
222 [cursorId]: { driver: cursor, enabled: true, config: {} },
223 },
224 });
225
226 expect(decoded.providers.cursor.enabled).toBe(true);
227 expect(resolveProviderInstanceEnabled(decoded.providerInstances[cursorId]!)).toBe(true);
228 });
229
216230 it("resolves instance enabled state with explicit false winning", () => {
217231 const grok = ProviderDriverKind.make("grok");
218232 const codex = ProviderDriverKind.make("codex");
packages/contracts/src/settings.ts+2-2
......@@ -419,9 +419,9 @@ export type ClaudeSettings = typeof ClaudeSettings.Type;
419419
420420export const CursorSettings = makeProviderSettingsSchema(
421421 {
422 // Enabled by default alongside Codex and Claude Agent.
422 // Off by default like Grok and OpenCode. Users opt in from Settings.
423423 enabled: Schema.Boolean.pipe(
424 Schema.withDecodingDefault(Effect.succeed(true)),
424 Schema.withDecodingDefault(Effect.succeed(false)),
425425 Schema.annotateKey({ providerSettingsForm: { hidden: true } }),
426426 ),
427427 binaryPath: makeBinaryPathSetting("cursor-agent").pipe(