Files
OpenHands/scripts
56fc790076 ci: detect drift between TS ACP_PROVIDERS mirror and SDK source (#630)
Closes #587.

PR #416 introduced src/constants/acp-providers.ts as a hand-kept
TypeScript mirror of the Python registry in
openhands-sdk/openhands/sdk/settings/acp_providers.py
(OpenHands/software-agent-sdk). Drift between the two is hazardous:
during PR #416's E2E we briefly shipped
["npx","-y","@openai/codex","acp"], which is not a valid ACP server,
and the agent-server deadlocked on the handshake instead of failing
loudly.

This commit adds the minimum infrastructure to catch that class of
drift before it lands:

- scripts/check-acp-providers-sync.mjs fetches the SDK file (from a
  configurable ref, default `main`), parses both registries with a
  string-aware brace matcher, and diffs them on the three fields
  canvas mirrors: key, display_name, default_command. The richer SDK
  record (api_key_env_var, session mode, agent_name_patterns, etc.)
  is intentionally not compared because canvas does not mirror it.
  --sdk-file lets the script run offline against a local SDK
  checkout for development.
- .github/workflows/acp-providers-sync.yml runs the check on PRs
  touching the mirror or the script, on push to main, on a daily
  cron (to catch SDK-side drift that did not ping us), via
  workflow_dispatch, and via repository_dispatch (so the SDK repo
  can trigger us when it changes acp_providers.py — payload key
  `sdk_ref`).

Co-authored-by: Debug Agent <debug@example.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:46:01 +02:00
..