"""Canonical capability registry for OpsBridge. Every operation that can be invoked via CLI, MCP, or Skill must be listed here. The cross-mode test suite uses this registry to enforce test coverage parity. """ from __future__ import annotations from dataclasses import dataclass ACCESS_MODES = frozenset({"cli", "mcp", "skill"}) @dataclass(frozen=True) class Capability: name: str description: str required_access_modes: frozenset[str] CAPABILITIES: list[Capability] = [ Capability( name="bridge_up", description="Start one or all tunnels", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="bridge_down", description="Stop one or all tunnels", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="bridge_restart", description="Restart one or all tunnels", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="bridge_status", description="Show tunnel status", required_access_modes=frozenset({"cli", "mcp", "skill"}), ), Capability( name="bridge_logs", description="Tail tunnel audit log", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="catalog_list_targets", description="List catalog targets", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="catalog_show_target", description="Show target metadata", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="catalog_list_domains", description="List catalog domains", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="catalog_validate", description="Validate catalog consistency", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="catalog_show_bridge", description="Show bridge metadata", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="bridge_check", description="End-to-end tunnel diagnostics via SSH: SSH PID alive + remote port listening", required_access_modes=frozenset({"cli", "mcp"}), ), Capability( name="bridge_cert_status", description="Show certificate status for tunnels using cert_command mode", required_access_modes=frozenset({"cli"}), ), ] CAPABILITIES_BY_NAME: dict[str, Capability] = {c.name: c for c in CAPABILITIES}