feat: add ofcx-go code agent profile and Moon Bridge OpenCode route

- Add ofcx-go to backendProfiles allowlist in agentrun-dispatch.mjs
- Extend deepseek-proxy Moon Bridge config with opencode provider
- Add deepseek-v4-flash model and opencode route to Moon Bridge config
- Add OPENCODE_API_KEY env var injection from hwlab-v02-code-agent-provider Secret
- Support both deepseek and opencode providers in shared Moon Bridge instance
This commit is contained in:
Codex Agent
2026-06-07 20:15:05 +08:00
parent 28d363f8c9
commit c19b6ef529
2 changed files with 35 additions and 4 deletions
+1 -1
View File
@@ -97,7 +97,7 @@ export const AGENTRUN_REUSABLE_CREDENTIAL_ENV_NAMES = Object.freeze([
"UNIDESK_SSH_CLIENT_TOKEN"
]);
const backendProfiles = Object.freeze(["codex", "deepseek", "minimax-m3"]);
const backendProfiles = Object.freeze(["codex", "deepseek", "minimax-m3", "ofcx-go"]);
const providerSecretKeys = Object.freeze(["auth.json", "config.toml"]);
const reusableCredentialEnvNameSet = new Set(AGENTRUN_REUSABLE_CREDENTIAL_ENV_NAMES);
+34 -3
View File
@@ -4113,7 +4113,10 @@ function deepSeekProxyManifest({ profile = "dev", source, registryPrefix = defau
image: bridgeImage,
imagePullPolicy: "IfNotPresent",
command: ["/bin/sh", "-eu", "/scripts/render-config.sh"],
env: [{ name: "DEEPSEEK_API_KEY", valueFrom: { secretKeyRef: { name: secretNameForProfile("hwlab-code-agent-provider", profile), key: "openai-api-key", optional: true } } }],
env: [
{ name: "DEEPSEEK_API_KEY", valueFrom: { secretKeyRef: { name: secretNameForProfile("hwlab-code-agent-provider", profile), key: "openai-api-key", optional: true } } },
{ name: "OPENCODE_API_KEY", valueFrom: { secretKeyRef: { name: secretNameForProfile("hwlab-code-agent-provider", profile), key: "opencode-api-key", optional: true } } }
],
volumeMounts: [
{ name: "moonbridge-scripts", mountPath: "/scripts", readOnly: true },
{ name: "moonbridge-config", mountPath: "/config" }
@@ -4170,8 +4173,8 @@ function deepSeekProxyManifest({ profile = "dev", source, registryPrefix = defau
function moonBridgeConfigRenderScript() {
return `#!/bin/sh
if [ -z "\${DEEPSEEK_API_KEY:-}" ]; then
echo "DEEPSEEK_API_KEY is required" >&2
if [ -z "\${DEEPSEEK_API_KEY:-}" ] && [ -z "\${OPENCODE_API_KEY:-}" ]; then
echo "at least one of DEEPSEEK_API_KEY or OPENCODE_API_KEY is required" >&2
exit 1
fi
cat > /config/config.yml <<EOF
@@ -4228,6 +4231,22 @@ models:
extensions:
deepseek_v4:
enabled: true
deepseek-v4-flash:
context_window: 1000000
max_output_tokens: 384000
display_name: "DeepSeek V4 Flash via OpenCode Zen Go"
description: "DeepSeek V4 Flash through OpenCode Zen Go Chat Completions via Moon Bridge"
default_reasoning_level: "xhigh"
supported_reasoning_levels:
- effort: "high"
description: "High reasoning effort"
- effort: "xhigh"
description: "Maximum reasoning effort"
supports_reasoning_summaries: true
default_reasoning_summary: "auto"
extensions:
deepseek_v4:
enabled: true
providers:
deepseek:
base_url: "https://api.deepseek.com/anthropic"
@@ -4236,10 +4255,22 @@ providers:
user_agent: "moonbridge/1.0"
offers:
- model: ${deepSeekProfileModel}
opencode:
base_url: "https://opencode.ai/zen/go/v1"
api_key: "\${OPENCODE_API_KEY:-}"
protocol: "openai-chat"
user_agent: "moonbridge-ofcx-go/1.0"
web_search:
support: "disabled"
offers:
- model: deepseek-v4-flash
routes:
${deepSeekProfileModel}:
model: ${deepSeekProfileModel}
provider: deepseek
deepseek-v4-flash:
model: deepseek-v4-flash
provider: opencode
EOF
`;
}