openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
119 lines (118 loc) • 4.95 kB
JavaScript
import { t as definePluginEntry } from "../../plugin-entry-C7DUzV0e.js";
import { i as PASSTHROUGH_GEMINI_REPLAY_HOOKS } from "../../provider-model-shared-D-lyTLvb.js";
import { t as createProviderApiKeyAuthMethod } from "../../provider-api-key-auth-VMMQYUA9.js";
import "../../provider-auth-api-key-nSdfYNnB.js";
import { n as applyOpencodeGoConfig, t as OPENCODE_GO_DEFAULT_MODEL_REF } from "../../onboard-bKzahWhQ.js";
import "../../api-DjyDMdtB.js";
import { t as opencodeGoMediaUnderstandingProvider } from "../../media-understanding-provider-K5iM-a7x.js";
import { a as normalizeOpencodeGoBaseUrl, i as listOpencodeGoModelCatalogEntries, n as buildStaticOpencodeGoProviderConfig, o as normalizeOpencodeGoResolvedModel, s as resolveOpencodeGoModel, t as buildOpencodeGoLiveProviderConfig } from "../../provider-catalog-D7v8k73t.js";
import { r as createOpencodeGoWrapper } from "../../stream-B_jtRbDF.js";
//#region extensions/opencode-go/index.ts
const PROVIDER_ID = "opencode-go";
const OPENCODE_SHARED_PROFILE_IDS = ["opencode:default", "opencode-go:default"];
const OPENCODE_SHARED_HINT = "Shared API key for Zen + Go catalogs";
const OPENCODE_SHARED_WIZARD_GROUP = {
groupId: "opencode",
groupLabel: "OpenCode",
groupHint: OPENCODE_SHARED_HINT
};
function hasCatalogAuth(auth) {
return Boolean(auth.apiKey || auth.discoveryApiKey);
}
function resolveOpencodeGoCatalogAuth(resolveProviderApiKey) {
const opencodeGoAuth = resolveProviderApiKey(PROVIDER_ID);
if (hasCatalogAuth(opencodeGoAuth)) return opencodeGoAuth;
const sharedOpencodeAuth = resolveProviderApiKey("opencode");
return hasCatalogAuth(sharedOpencodeAuth) ? sharedOpencodeAuth : void 0;
}
var opencode_go_default = definePluginEntry({
id: PROVIDER_ID,
name: "OpenCode Go Provider",
description: "Bundled OpenCode Go provider plugin",
register(api) {
api.registerProvider({
id: PROVIDER_ID,
label: "OpenCode Go",
docsPath: "/providers/models",
envVars: ["OPENCODE_API_KEY", "OPENCODE_ZEN_API_KEY"],
auth: [createProviderApiKeyAuthMethod({
providerId: PROVIDER_ID,
methodId: "api-key",
label: "OpenCode Go catalog",
hint: OPENCODE_SHARED_HINT,
optionKey: "opencodeGoApiKey",
flagName: "--opencode-go-api-key",
envVar: "OPENCODE_API_KEY",
promptMessage: "Enter OpenCode API key",
profileIds: [...OPENCODE_SHARED_PROFILE_IDS],
defaultModel: OPENCODE_GO_DEFAULT_MODEL_REF,
applyConfig: (cfg) => applyOpencodeGoConfig(cfg),
expectedProviders: ["opencode", "opencode-go"],
noteMessage: [
"OpenCode uses one API key across the Zen and Go catalogs.",
"Go focuses on Kimi, GLM, and MiniMax coding models.",
"Get your API key at: https://opencode.ai/auth"
].join("\n"),
noteTitle: "OpenCode",
wizard: {
choiceId: "opencode-go",
choiceLabel: "OpenCode Go catalog",
...OPENCODE_SHARED_WIZARD_GROUP
}
})],
normalizeConfig: ({ providerConfig }) => {
const normalizedBaseUrl = normalizeOpencodeGoBaseUrl({
api: providerConfig.api,
baseUrl: providerConfig.baseUrl
});
return normalizedBaseUrl && normalizedBaseUrl !== providerConfig.baseUrl ? {
...providerConfig,
baseUrl: normalizedBaseUrl
} : void 0;
},
normalizeResolvedModel: ({ model }) => {
const normalizedBaseUrl = normalizeOpencodeGoBaseUrl({
api: model.api,
baseUrl: model.baseUrl
});
const baseUrlNormalized = normalizedBaseUrl && normalizedBaseUrl !== model.baseUrl ? {
...model,
baseUrl: normalizedBaseUrl
} : model;
const modelNormalized = normalizeOpencodeGoResolvedModel(baseUrlNormalized);
if (modelNormalized) return modelNormalized;
return baseUrlNormalized !== model ? baseUrlNormalized : void 0;
},
normalizeTransport: ({ api: apiLocal, baseUrl }) => {
const normalizedBaseUrl = normalizeOpencodeGoBaseUrl({
api: apiLocal,
baseUrl
});
return normalizedBaseUrl && normalizedBaseUrl !== baseUrl ? {
api: apiLocal,
baseUrl: normalizedBaseUrl
} : void 0;
},
resolveDynamicModel: ({ modelId }) => resolveOpencodeGoModel(modelId),
catalog: {
order: "simple",
run: async (ctx) => {
const auth = resolveOpencodeGoCatalogAuth(ctx.resolveProviderApiKey);
if (!auth) return null;
if (!auth.discoveryApiKey) return { provider: buildStaticOpencodeGoProviderConfig(auth.apiKey) };
return { provider: await buildOpencodeGoLiveProviderConfig({
apiKey: auth.apiKey ?? auth.discoveryApiKey,
discoveryApiKey: auth.discoveryApiKey
}) };
}
},
augmentModelCatalog: () => listOpencodeGoModelCatalogEntries(),
...PASSTHROUGH_GEMINI_REPLAY_HOOKS,
wrapStreamFn: (ctx) => createOpencodeGoWrapper(ctx.streamFn, ctx.thinkingLevel),
isModernModelRef: () => true
});
api.registerMediaUnderstandingProvider(opencodeGoMediaUnderstandingProvider);
}
});
//#endregion
export { opencode_go_default as default };