Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/security-regression.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,11 @@ jobs:
run: sudo apt-get update -qq && sudo apt-get install -y -qq jq
- name: Install pytest
run: python3 -m pip install --quiet pytest
- name: Verify integration registry
# Catches registry.yaml drift vs SURFACES/BLOCKING enums and matrix sync
# (see TODO.md: verify_registry.sh in CI). Needs PyYAML for the YAML load path.
run: |
python3 -m pip install --quiet pyyaml
bash scripts/verify_registry.sh
- name: Run security regression suite
run: bash scripts/run_security_tests.sh
4 changes: 3 additions & 1 deletion AGENT_INTEGRATIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,11 @@ _Generated from `prismor/runtime/integrations/registry.yaml` — do not edit by
| CrewAI | framework | sdk | ✅ | `throw` |
| LangChain / LangGraph | framework | sdk | ✅ | `throw` |
| browser-use | framework | sdk | ✅ | `throw` |
| Vercel AI SDK | framework | http | ✅ | `throw` |
| HTTP Eval-Server (any language) | framework | http | ✅ | `client-side` |
| MCP Proxy (any MCP-speaking agent) | framework | mcp | 🟡 | `proxy-deny` |

Legend: ✅ shipped · 🟡 roadmap · — sweep-only / not applicable. Surfaces: `hook-config` (config-file hooks) · `sdk` (in-process adapter) · `mcp` (proxy) · `rules-only` (static guardrails).
Legend: ✅ shipped · 🟡 roadmap · — sweep-only / not applicable. Surfaces: `hook-config` (config-file hooks) · `sdk` (in-process adapter) · `mcp` (proxy) · `http` (eval-server sidecar) · `rules-only` (static guardrails).

<!-- END GENERATED: coverage-matrix -->

Expand Down
8 changes: 5 additions & 3 deletions prismor/runtime/integrations/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@

# Allowed enum values — kept in sync with registry.schema.json.
KINDS = frozenset({"coding-agent", "framework"})
SURFACES = frozenset({"hook-config", "sdk", "mcp", "rules-only"})
# http = language-agnostic eval-server / Vercel AI sidecar (POST /v1/evaluate)
SURFACES = frozenset({"hook-config", "sdk", "mcp", "rules-only", "http"})
STATUSES = frozenset({"shipped", "roadmap", "sweep-only"})
BLOCKING = frozenset({"exit-2", "json-permission", "throw", "proxy-deny", "none"})
# client-side = HTTP eval-server adapters that enforce in the caller (Node/Ruby/Java/Rust)
BLOCKING = frozenset({"exit-2", "json-permission", "throw", "proxy-deny", "none", "client-side"})


@dataclass(frozen=True)
Expand Down Expand Up @@ -85,7 +87,7 @@ def get(agent_id: str, path: Optional[Path] = None) -> Optional[Integration]:


def by_surface(surface: str, path: Optional[Path] = None) -> List[Integration]:
"""All integrations exposing ``surface`` (hook-config|sdk|mcp|rules-only)."""
"""All integrations exposing ``surface`` (hook-config|sdk|mcp|rules-only|http)."""
return [i for i in load_registry(path) if i.surface == surface]


Expand Down
4 changes: 2 additions & 2 deletions prismor/runtime/integrations/registry.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
"id": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
"name": { "type": "string" },
"kind": { "enum": ["coding-agent", "framework"] },
"surface": { "enum": ["hook-config", "sdk", "mcp", "rules-only"] },
"surface": { "enum": ["hook-config", "sdk", "mcp", "rules-only", "http"] },
"status": { "enum": ["shipped", "roadmap", "sweep-only"] },
"blocking": { "enum": ["exit-2", "json-permission", "throw", "proxy-deny", "none"] },
"blocking": { "enum": ["exit-2", "json-permission", "throw", "proxy-deny", "none", "client-side"] },
"events": { "type": "array", "items": { "type": "string" } },
"config_paths": {
"type": "object",
Expand Down
2 changes: 1 addition & 1 deletion scripts/gen_integration_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def render_matrix() -> str:
"",
"Legend: ✅ shipped · 🟡 roadmap · — sweep-only / not applicable. "
"Surfaces: `hook-config` (config-file hooks) · `sdk` (in-process adapter) · "
"`mcp` (proxy) · `rules-only` (static guardrails).",
"`mcp` (proxy) · `http` (eval-server sidecar) · `rules-only` (static guardrails).",
"",
_END,
]
Expand Down