mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-24 16:12:23 +03:00
Cherry-picked the value commit (55da60f5) onto the current tip, dropping the stale base-red sync commits. Focused tests: opencode-v2-config-11070 + merge-provider-guard + config-dir-single-source 12/12; mutation coverage gate no-drift (new test registered in tap.testFiles by the PR itself). Fixes #11070 — setup-opencode now emits both V1 and V2 blocks. Thank you @rqzbeh!
This commit is contained in:
@@ -84,11 +84,29 @@ export const buildOpenCodeProviderConfig = ({
|
||||
};
|
||||
};
|
||||
|
||||
export const buildOpenCodeV2ProviderConfig = (
|
||||
input: OpenCodeConfigInput
|
||||
): Record<string, any> => {
|
||||
const v1Config = buildOpenCodeProviderConfig(input);
|
||||
return {
|
||||
name: v1Config.name,
|
||||
package: "@opencode-ai/ai/providers/openai-compatible",
|
||||
settings: {
|
||||
baseURL: v1Config.options.baseURL,
|
||||
apiKey: v1Config.options.apiKey,
|
||||
},
|
||||
models: v1Config.models,
|
||||
};
|
||||
};
|
||||
|
||||
export const buildOpenCodeConfigDocument = (input: OpenCodeConfigInput) => ({
|
||||
$schema: "https://opencode.ai/config.json",
|
||||
provider: {
|
||||
omniroute: buildOpenCodeProviderConfig(input),
|
||||
},
|
||||
providers: {
|
||||
omniroute: buildOpenCodeV2ProviderConfig(input),
|
||||
},
|
||||
});
|
||||
|
||||
export const mergeOpenCodeConfig = (
|
||||
@@ -100,18 +118,18 @@ export const mergeOpenCodeConfig = (
|
||||
? existingConfig
|
||||
: {};
|
||||
|
||||
// Same guard as the root above, one level down. Spreading a non-object here
|
||||
// does not throw, it splays the value into index keys: an existing
|
||||
// `"provider": ["a", "b"]` merged to `{"0": "a", "1": "b", omniroute: ... }`
|
||||
// and a string was exploded one character per key. mergeOpenCodeConfigText
|
||||
// refuses the same input outright, so the two disagreed on what to do with a
|
||||
// malformed config.
|
||||
const existingProvider = (safeConfig as Record<string, unknown>).provider;
|
||||
const safeProvider =
|
||||
existingProvider && typeof existingProvider === "object" && !Array.isArray(existingProvider)
|
||||
? (existingProvider as Record<string, unknown>)
|
||||
: {};
|
||||
|
||||
const existingProviders = (safeConfig as Record<string, unknown>).providers;
|
||||
const safeProviders =
|
||||
existingProviders && typeof existingProviders === "object" && !Array.isArray(existingProviders)
|
||||
? (existingProviders as Record<string, unknown>)
|
||||
: {};
|
||||
|
||||
return {
|
||||
...safeConfig,
|
||||
$schema: safeConfig.$schema || "https://opencode.ai/config.json",
|
||||
@@ -119,6 +137,10 @@ export const mergeOpenCodeConfig = (
|
||||
...safeProvider,
|
||||
omniroute: buildOpenCodeProviderConfig(input),
|
||||
},
|
||||
providers: {
|
||||
...safeProviders,
|
||||
omniroute: buildOpenCodeV2ProviderConfig(input),
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
@@ -127,6 +149,7 @@ export const mergeOpenCodeConfigText = (
|
||||
input: OpenCodeConfigInput
|
||||
) => {
|
||||
const providerConfig = buildOpenCodeProviderConfig(input);
|
||||
const v2ProviderConfig = buildOpenCodeV2ProviderConfig(input);
|
||||
const content = typeof existingText === "string" ? existingText : "";
|
||||
const trimmedContent = content.trim();
|
||||
|
||||
@@ -161,6 +184,11 @@ export const mergeOpenCodeConfigText = (
|
||||
const providerEdits = modify(nextText, ["provider", "omniroute"], providerConfig, {
|
||||
formattingOptions: { insertSpaces: true, tabSize: 2 },
|
||||
});
|
||||
nextText = applyEdits(nextText, providerEdits);
|
||||
|
||||
return applyEdits(nextText, providerEdits);
|
||||
const v2ProviderEdits = modify(nextText, ["providers", "omniroute"], v2ProviderConfig, {
|
||||
formattingOptions: { insertSpaces: true, tabSize: 2 },
|
||||
});
|
||||
|
||||
return applyEdits(nextText, v2ProviderEdits);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user