Make public RPC contract probe provider-agnostic

This commit is contained in:
Haitao Pan 2026-04-20 14:10:10 +08:00
parent f09985122c
commit 729da27179

View File

@ -74,6 +74,29 @@ capabilities_json="$(
-H "Authorization: Bearer ${AUTH_TOKEN}"
)"
mapfile -t provider_ids < <(
RESPONSE_JSON="${capabilities_json}" python3 - <<'PY'
import json
import os
payload = json.loads(os.environ["RESPONSE_JSON"])
result = payload.get("result")
if not isinstance(result, dict):
raise SystemExit("bridge capabilities response missing result payload")
provider_catalog = result.get("providerCatalog")
if not isinstance(provider_catalog, list):
raise SystemExit("providerCatalog is missing or invalid")
for item in provider_catalog:
if isinstance(item, dict) and item.get("providerId"):
print(item["providerId"])
if not any(isinstance(item, dict) and item.get("providerId") for item in provider_catalog):
raise SystemExit("providerCatalog did not include any provider ids")
PY
)
RESPONSE_JSON="${capabilities_json}" python3 - <<'PY'
import json
import os
@ -125,13 +148,23 @@ if gateway.get("targets") != ["gateway"]:
raise SystemExit(f"expected gateway targets ['gateway'], got {gateway!r}")
PY
session_start_json="$(
json_rpc_with_retry \
'{"jsonrpc":"2.0","id":"task-1","method":"session.start","params":{"sessionId":"public-contract-smoke","threadId":"public-contract-smoke","taskPrompt":"Reply with exactly pong","workingDirectory":"/tmp","routing":{"routingMode":"explicit","explicitExecutionTarget":"singleAgent","explicitProviderId":"opencode"}}}' \
-H "Authorization: Bearer ${AUTH_TOKEN}"
)"
session_start_success=0
session_start_error=""
matched_provider_id=""
RESPONSE_JSON="${session_start_json}" python3 - <<'PY'
for provider_id in "${provider_ids[@]}"; do
session_start_json="$(
json_rpc_with_retry \
"{\"jsonrpc\":\"2.0\",\"id\":\"task-1\",\"method\":\"session.start\",\"params\":{\"sessionId\":\"public-contract-smoke\",\"threadId\":\"public-contract-smoke\",\"taskPrompt\":\"Reply with exactly pong\",\"workingDirectory\":\"/tmp\",\"routing\":{\"routingMode\":\"explicit\",\"explicitExecutionTarget\":\"singleAgent\",\"explicitProviderId\":\"${provider_id}\"}}}" \
-H "Authorization: Bearer ${AUTH_TOKEN}" 2>/tmp/xworkmate-bridge-public-contract-session-start.err || true
)"
if [[ -z "${session_start_json}" ]]; then
session_start_error="$(cat /tmp/xworkmate-bridge-public-contract-session-start.err)"
continue
fi
if RESPONSE_JSON="${session_start_json}" SELECTED_PROVIDER_ID="${provider_id}" python3 - <<'PY'
import json
import os
@ -146,12 +179,29 @@ if not isinstance(result, dict):
if result.get("success") is not True:
raise SystemExit(f"session.start did not succeed: {result!r}")
if result.get("provider") != "opencode":
raise SystemExit(f"expected provider 'opencode', got {result!r}")
provider = str(result.get("provider", "")).strip()
if provider != os.environ["SELECTED_PROVIDER_ID"]:
raise SystemExit(f"expected provider {os.environ['SELECTED_PROVIDER_ID']!r}, got {result!r}")
output = str(result.get("output", "")).strip().lower()
if output != "pong":
raise SystemExit(f"expected output 'pong', got {result!r}")
PY
then
session_start_success=1
matched_provider_id="${provider_id}"
break
fi
printf 'public bridge RPC contract verified via %s\n' "${resolved_base_url}"
session_start_error="$(cat /tmp/xworkmate-bridge-public-contract-session-start.err)"
done
if [[ "${session_start_success}" -ne 1 ]]; then
echo "session.start failed for all providers in providerCatalog" >&2
if [[ -n "${session_start_error}" ]]; then
echo "${session_start_error}" >&2
fi
exit 1
fi
printf 'public bridge RPC contract verified via %s using provider %s\n' "${resolved_base_url}" "${matched_provider_id}"