fix: harden OpenCode ACP bind dispatch

This commit is contained in:
Peter Steinberger
2026-04-25 13:38:00 +01:00
parent 42514156e0
commit dd78b7f773
19 changed files with 348 additions and 31 deletions

View File

@@ -26,6 +26,7 @@ const DEFAULT_RESOURCE_LIMITS = {
"live:claude": 4,
"live:codex": 4,
"live:gemini": 4,
"live:opencode": 4,
npm: 10,
service: 7,
};
@@ -69,6 +70,9 @@ function liveProviderResource(provider) {
if (provider === "google-gemini-cli" || provider === "gemini") {
return "live:gemini";
}
if (provider === "opencode") {
return "live:opencode";
}
if (provider === "openai") {
return "live:openai";
}
@@ -321,6 +325,17 @@ const exclusiveLanes = [
weight: 3,
},
),
liveLane(
"live-acp-bind-opencode",
"OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:live-acp-bind:opencode",
{
cacheKey: "acp-bind-opencode",
provider: "opencode",
resources: ["npm"],
timeoutMs: LIVE_ACP_TIMEOUT_MS,
weight: 3,
},
),
];
const tailLanes = exclusiveLanes;

View File

@@ -31,8 +31,9 @@ openclaw_live_acp_bind_resolve_auth_provider() {
claude) printf '%s\n' "claude-cli" ;;
codex) printf '%s\n' "codex-cli" ;;
gemini) printf '%s\n' "google-gemini-cli" ;;
opencode) printf '%s\n' "opencode" ;;
*)
echo "Unsupported OPENCLAW_LIVE_ACP_BIND agent: ${1:-} (expected claude, codex, or gemini)" >&2
echo "Unsupported OPENCLAW_LIVE_ACP_BIND agent: ${1:-} (expected claude, codex, gemini, or opencode)" >&2
return 1
;;
esac
@@ -43,6 +44,7 @@ openclaw_live_acp_bind_resolve_agent_command() {
claude) printf '%s' "${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND_CLAUDE:-${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND:-}}" ;;
codex) printf '%s' "${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND_CODEX:-${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND:-}}" ;;
gemini) printf '%s' "${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND_GEMINI:-${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND:-}}" ;;
opencode) printf '%s' "${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND_OPENCODE:-${OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND:-}}" ;;
*) return 1 ;;
esac
}
@@ -157,6 +159,14 @@ WRAP
npm install -g @google/gemini-cli
fi
;;
opencode)
if [ ! -x "$NPM_CONFIG_PREFIX/bin/opencode" ]; then
npm install -g opencode-ai
fi
export OPENCODE_CONFIG_CONTENT="$(
node -e 'process.stdout.write(JSON.stringify({model: process.env.OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL || "opencode/kimi-k2.6"}))'
)"
;;
*)
echo "Unsupported OPENCLAW_LIVE_ACP_BIND_AGENT: $agent" >&2
exit 1
@@ -187,7 +197,7 @@ for token in "${ACP_AGENT_TOKENS[@]}"; do
done
if ((${#ACP_AGENTS[@]} == 0)); then
echo "No ACP bind agents selected. Use OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini." >&2
echo "No ACP bind agents selected. Use OPENCLAW_LIVE_ACP_BIND_AGENTS=claude,codex,gemini,opencode." >&2
exit 1
fi
@@ -274,6 +284,9 @@ for ACP_AGENT in "${ACP_AGENTS[@]}"; do
-e GEMINI_API_KEY \
-e GOOGLE_API_KEY \
-e OPENAI_API_KEY \
-e OPENCODE_API_KEY \
-e OPENCODE_ZEN_API_KEY \
-e OPENCODE_CONFIG_CONTENT \
-e COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
-e HOME=/home/node \
-e NODE_OPTIONS=--disable-warning=ExperimentalWarning \
@@ -286,6 +299,7 @@ for ACP_AGENT in "${ACP_AGENTS[@]}"; do
-e OPENCLAW_LIVE_TEST=1 \
-e OPENCLAW_LIVE_ACP_BIND=1 \
-e OPENCLAW_LIVE_ACP_BIND_AGENT="$ACP_AGENT" \
-e OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL="${OPENCLAW_LIVE_ACP_BIND_OPENCODE_MODEL:-opencode/kimi-k2.6}" \
-e OPENCLAW_LIVE_ACP_BIND_AGENT_COMMAND="$AGENT_COMMAND")
openclaw_live_append_array DOCKER_RUN_ARGS DOCKER_HOME_MOUNT
DOCKER_RUN_ARGS+=(\