Skip to content

Commit 94bcdd9

Browse files
committed
Extract shared makePendingProviderSnapshot helper to deduplicate pending provider factories
1 parent 7f6ff53 commit 94bcdd9

File tree

3 files changed

+63
-74
lines changed

3 files changed

+63
-74
lines changed

apps/server/src/provider/Layers/ClaudeProvider.ts

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
detailFromResult,
2222
extractAuthBoolean,
2323
isCommandMissingCause,
24+
makePendingProviderSnapshot,
2425
parseGenericCliVersion,
2526
providerModelsFromSettings,
2627
spawnAndCollect,
@@ -663,45 +664,15 @@ export const checkClaudeProviderStatus = Effect.fn("checkClaudeProviderStatus")(
663664
});
664665
});
665666

666-
const makePendingClaudeProvider = (claudeSettings: ClaudeSettings): ServerProvider => {
667-
const checkedAt = new Date().toISOString();
668-
const models = providerModelsFromSettings(
669-
BUILT_IN_MODELS,
670-
PROVIDER,
671-
claudeSettings.customModels,
672-
DEFAULT_CLAUDE_MODEL_CAPABILITIES,
673-
);
674-
675-
if (!claudeSettings.enabled) {
676-
return buildServerProvider({
677-
provider: PROVIDER,
678-
enabled: false,
679-
checkedAt,
680-
models,
681-
probe: {
682-
installed: false,
683-
version: null,
684-
status: "warning",
685-
auth: { status: "unknown" },
686-
message: "Claude is disabled in T3 Code settings.",
687-
},
688-
});
689-
}
690-
691-
return buildServerProvider({
667+
const makePendingClaudeProvider = (claudeSettings: ClaudeSettings): ServerProvider =>
668+
makePendingProviderSnapshot({
692669
provider: PROVIDER,
693-
enabled: true,
694-
checkedAt,
695-
models,
696-
probe: {
697-
installed: false,
698-
version: null,
699-
status: "warning",
700-
auth: { status: "unknown" },
701-
message: "Claude provider status has not been checked in this session yet.",
702-
},
670+
displayName: "Claude",
671+
builtInModels: BUILT_IN_MODELS,
672+
customModels: claudeSettings.customModels,
673+
defaultCapabilities: DEFAULT_CLAUDE_MODEL_CAPABILITIES,
674+
enabled: claudeSettings.enabled,
703675
});
704-
};
705676

706677
export const ClaudeProviderLive = Layer.effect(
707678
ClaudeProvider,

apps/server/src/provider/Layers/CodexProvider.ts

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
detailFromResult,
2929
extractAuthBoolean,
3030
isCommandMissingCause,
31+
makePendingProviderSnapshot,
3132
parseGenericCliVersion,
3233
providerModelsFromSettings,
3334
spawnAndCollect,
@@ -552,45 +553,15 @@ export const checkCodexProviderStatus = Effect.fn("checkCodexProviderStatus")(fu
552553
});
553554
});
554555

555-
const makePendingCodexProvider = (codexSettings: CodexSettings): ServerProvider => {
556-
const checkedAt = new Date().toISOString();
557-
const models = providerModelsFromSettings(
558-
BUILT_IN_MODELS,
559-
PROVIDER,
560-
codexSettings.customModels,
561-
DEFAULT_CODEX_MODEL_CAPABILITIES,
562-
);
563-
564-
if (!codexSettings.enabled) {
565-
return buildServerProvider({
566-
provider: PROVIDER,
567-
enabled: false,
568-
checkedAt,
569-
models,
570-
probe: {
571-
installed: false,
572-
version: null,
573-
status: "warning",
574-
auth: { status: "unknown" },
575-
message: "Codex is disabled in T3 Code settings.",
576-
},
577-
});
578-
}
579-
580-
return buildServerProvider({
556+
const makePendingCodexProvider = (codexSettings: CodexSettings): ServerProvider =>
557+
makePendingProviderSnapshot({
581558
provider: PROVIDER,
582-
enabled: true,
583-
checkedAt,
584-
models,
585-
probe: {
586-
installed: false,
587-
version: null,
588-
status: "warning",
589-
auth: { status: "unknown" },
590-
message: "Codex provider status has not been checked in this session yet.",
591-
},
559+
displayName: "Codex",
560+
builtInModels: BUILT_IN_MODELS,
561+
customModels: codexSettings.customModels,
562+
defaultCapabilities: DEFAULT_CODEX_MODEL_CAPABILITIES,
563+
enabled: codexSettings.enabled,
592564
});
593-
};
594565

595566
export const CodexProviderLive = Layer.effect(
596567
CodexProvider,

apps/server/src/provider/providerSnapshot.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,53 @@ export function buildServerProvider(input: {
151151
};
152152
}
153153

154+
export function makePendingProviderSnapshot(input: {
155+
provider: ServerProvider["provider"];
156+
displayName: string;
157+
builtInModels: ReadonlyArray<ServerProviderModel>;
158+
customModels: ReadonlyArray<string>;
159+
defaultCapabilities: ModelCapabilities;
160+
enabled: boolean;
161+
}): ServerProvider {
162+
const checkedAt = new Date().toISOString();
163+
const models = providerModelsFromSettings(
164+
input.builtInModels,
165+
input.provider,
166+
input.customModels,
167+
input.defaultCapabilities,
168+
);
169+
170+
if (!input.enabled) {
171+
return buildServerProvider({
172+
provider: input.provider,
173+
enabled: false,
174+
checkedAt,
175+
models,
176+
probe: {
177+
installed: false,
178+
version: null,
179+
status: "warning",
180+
auth: { status: "unknown" },
181+
message: `${input.displayName} is disabled in T3 Code settings.`,
182+
},
183+
});
184+
}
185+
186+
return buildServerProvider({
187+
provider: input.provider,
188+
enabled: true,
189+
checkedAt,
190+
models,
191+
probe: {
192+
installed: false,
193+
version: null,
194+
status: "warning",
195+
auth: { status: "unknown" },
196+
message: `${input.displayName} provider status has not been checked in this session yet.`,
197+
},
198+
});
199+
}
200+
154201
export const collectStreamAsString = <E>(
155202
stream: Stream.Stream<Uint8Array, E>,
156203
): Effect.Effect<string, E> =>

0 commit comments

Comments
 (0)