All notable changes to cmdc_gateway are documented in this file.
[0.3.0] - 2026-05-16
Minor release — A2A Protocol Task endpoints + Gateway-level Guardrails
- alignment with cmdc 0.3.0 core. No breaking changes against v0.2.x.
Added — A2A Protocol Task Endpoints (Phase 11C / ADP Ch.15)
Implement A2A (Agent-to-Agent) JSON-RPC 2.0 Task protocol, making CMDC Gateway a first-class A2A-compliant Agent runtime callable from any ADK / LangGraph / CrewAI / external Agent that speaks A2A.
POST /v1/a2a/tasks/send— synchronous JSON-RPC Task invocation; idempotent ontaskId; returns final Task result map; goes through Auth → RateLimit → Guardrails Plug chainPOST /v1/a2a/tasks/sendSubscribe— SSE streaming variant emittingTaskStatusUpdateEvent/TaskArtifactUpdateEventwith heartbeatsCMDCGateway.A2A— new module: JSON-RPC handler + Task lifecycle (handle_send / start_subscribe); maps A2A Task semantics onto existing Session APICMDCGateway.SSEHandler.stream_a2a/3— A2A-flavored SSE stream that translates CMDC events to A2A Task lifecycle event schema
Added — Gateway Guardrails (Phase 11C / ADP Ch.18)
CMDCGateway.Plugs.Guardrails— HTTP-layer input/output filter: denylist keywords, max prompt size, sensitive content rejection; mounted in the Router Plug chain after Auth + RateLimit, before dispatch; pluggable via application config
Added — A2A Client SDK Examples
Three runnable client samples proving external A2A agents can call this gateway end-to-end (discover → send → subscribe):
examples/a2a/curl_examples.sh— raw HTTP / SSE walkthroughexamples/a2a/elixir_send.exs— Mix-runnable Elixir Req clientexamples/a2a/node_send.mjs— Node.js fetch-based clientexamples/a2a/README.md— quickstart with environment setup
Added — Performance Baselines
benchmark/event_translator.exs— Benchee suite forCMDC.Event.t()→ A2ATaskStatusUpdateEventtranslation throughput:benchee ~> 1.3added as:dev / :testdependency
Changed — Dependency Upgrade
{:cmdc, "~> 0.3"}— pick up all 13 RFC items from cmdc 0.3.0 core (most notably::tool_execution_metricsevent,:after_turnPlugin hook, batchattach_tools/2, error-tuple public API #B21)
Quality
mix credo --strict— 0 issues (clean)- All A2A endpoints covered by
test/cmdc_gateway/a2a_test.exs - Existing 107 tests + new A2A coverage all green
[0.2.0] - 2026-04-24
Added — A2A Inter-Agent Communication(ADP Ch15)
CMDCGateway.AgentCard— 生成 A2A 兼容的 Agent Card JSON(capabilities + endpoints)GET /.well-known/agent.json— 免认证暴露 Agent Card,供其他 A2A Agent 发现
Added — Guardrails & Safety Control Plane(ADP Ch18 + CMDC v0.2 RFC)
POST /v1/sessions/:id/switch_model— 运行时切模型(RFC C8,async 202)POST /v1/sessions/:id/attach_tool— 运行时加载工具(RFC C9)DELETE /v1/sessions/:id/tools/:name— 运行时卸载工具(RFC C9)POST /v1/sessions/:id/steer— 中段注入指令(Phase 10A)POST /v1/sessions/:id/abort— 结构化 abort,支持 reason/kill_tools(RFC B6,async 202)GET /v1/sessions/:id/status— 扩展 session status(pending + queue_sizes,RFC C11)POST /v1/sessions新增 userData + promptMode 透传(RFC A1 / Phase 10B)
Fixed — Meter 自动订阅修复(P0)
Meter.init/1启动时EventBus.subscribe_all/0全局订阅- 自动
record_token_usage/2on{:agent_end, _, %CMDC.TokenUsage{}}事件 (支持 cached/reasoning/cost_usd 细粒度字段) - 移除对
{:prompt_received}的订阅,避免与 Router 手动record_prompt/1重复计数
Changed — EventTranslator 白名单扩容
- 新增 7 种事件翻译:
model_switched、tool_attached、tool_detached、tool_call_unknown、memory_flushed、plugin_event、steering
Changed — 依赖与质量
{:cmdc, "~> 0.2"}依赖升级- 新增
excoveralls开发依赖 - Router 的
CMDC.steer/2返回值修正(移除永不匹配的:ok子句) switch_model/abort改为 202 Accepted +async: true(cast 语义)- 代码质量 lift:
mix credo --strict零 issue(修with/else单子句 +try/rescue显式 + cyclomatic complexity + alias 字母序)
Stats
- 107 个单元 + 集成测试,全部通过(其中 13 个 v0.2 新端点测试)
mix compile --warnings-as-errors通过mix credo --strict0 issue
[0.1.0] - 2026-04-08
Added
CMDCGateway.Router— Plug/Cowboy HTTP 路由,13 个 REST 端点CMDCGateway.SessionStore— ETS Session 注册表,含 tenant_id/api_key 多租户字段CMDCGateway.RateLimiter— per-api-key 令牌桶限流CMDCGateway.Plugs.Auth— API Key 认证中间件(X-API-Key / Bearer Token)CMDCGateway.Plugs.RateLimitPlug— 限流 Plug,返回标准 429 + Retry-AfterCMDCGateway.Meter— per-api-key 用量计量(prompt 次数 + token 统计)CMDCGateway.EventTranslator— 内部 CMDC 事件 → 对外 JSON schema(15 种事件)CMDCGateway.SSEHandler— Server-Sent Events 流式推送 + 30 秒心跳CMDCGateway.WSHandler— Cowboy WebSocket 双向通信(事件推送 + 控制消息)CMDCGateway.CallbackTool— HTTP 回调工具动态注册与代理执行GET /healthz健康检查端点(无需认证)- 84 个单元测试 + 集成测试,全部通过