Self-Service API für AI-, Web- und Agent-Governance.
Drei Edge Functions auf EU-Infrastruktur, eine Browser-Extension und ein zero-dep TypeScript-SDK. Alles, was Du brauchst, um Runtime-Events Deiner AI-Systeme, Websites und Agents in eine auditierbare Compliance-Spur zu verwandeln.
Quickstart
- Melde Dich auf /welcome an und wähle Deinen Tenant.
- Lege auf /governance ein erstes Asset an (z. B. Deinen Chatbot) und eine Policy(z. B. „Block customer_data to OpenAI ohne TIA").
- Erstelle auf /governance/keys einen Ingest-Key. Der Token erscheint genau einmal — sicher speichern.
- Sende den ersten Event via curl oder SDK (siehe unten). Policy-Decision + Auto-Evidence landen direkt im Dashboard.
POST /functions/v1/governance-ingest
Body (Single)
{
"event": {
"event_type": "agent.runtime.call",
"event_source": "agent_runtime",
"title": "Customer Support Copilot called OpenAI",
"summary": "Support ticket processed via gpt-4o-mini.",
"risk_level": "high",
"vendor": "OpenAI",
"model_name": "gpt-4o-mini",
"data_types": ["customer_message", "email"],
"asset_id": "asset-uuid-optional",
"payload": { "request_id": "req_8f2a" }
},
"evidence": [
{
"evidence_type": "log",
"title": "Redacted prompt + response",
"content_hash": "sha256:0c7a…"
}
]
}Body (Batch)
{
"events": [
{ "event": { /* ... */ }, "evidence": [ /* ... */ ] },
{ "event": { /* ... */ } }
]
}Response
{
"ok": true,
"event_ids": ["evt-uuid-1", "evt-uuid-2"],
"evidence_ids": ["ev-uuid-1"],
"policy_decisions": [
{
"event_id": "evt-uuid-1",
"policy_id": "policy-uuid",
"action": "block"
}
]
}Allowed enums
Curl Example
curl -X POST https://ebljyceifhnlzhjfyxup.supabase.co/functions/v1/governance-ingest \
-H "Authorization: Bearer rsd_gov_…" \
-H "Content-Type: application/json" \
-d '{
"event": {
"event_type": "test",
"event_source": "manual",
"title": "hello"
}
}'Policy Language
Policies werden serverseitig vor dem Insert evaluiert. Trifft eine Policy auf das Event zu, überschreibt die Engine policy_id und policy_action auf dem Event und erstellt automatisch eine policy_snapshot Evidence. Strengste Aktion gewinnt:block > require_approval > warn > log > allow.
Condition Format
JSON-Objekt; Top-Level-Keys sind AND-verknüpft. Strings/Booleans matchen per Equality, Arrays per At-least-one-Overlap.
// Block alle Calls an US-only-Vendor ohne TIA
{
"vendor": "OpenAI",
"data_types": ["customer_data", "employee_data"]
}
// Trigger nur für high-risk AI-Act-Assets
{ "ai_act_class": "high" }
// Mehrere Vendors gleichzeitig erlaubt
{ "vendor": ["OpenAI", "Anthropic"] }Erlaubte Keys
Error Codes
| HTTP | Code | Bedeutung |
|---|---|---|
| 400 | BAD_REQUEST | JSON ungültig oder Pflichtfeld fehlt |
| 400 | BATCH_TOO_LARGE | > 50 Events in einem Request |
| 401 | UNAUTHORIZED | Fehlender / ungültiger / widerrufener Bearer-Token |
| 403 | FORBIDDEN | Operation nur für Owner/Admin des Tenants |
| 403 | CROSS_TENANT | asset_id / policy_id gehört zu anderem Tenant |
| 404 | NOT_FOUND | asset_id / policy_id existiert nicht |
| 500 | INSERT_FAILED | DB-Constraint-Violation (siehe message) |
POST /functions/v1/governance-keys
Owner/Admin-only. Token erscheint genau einmal beim create — Server speichert nur den sha256-Hash.
UI-Variante: /governance/keys.
POST /functions/v1/governance-resources
Owner/Admin-only. Create + State-Toggle für Assets und Policies. Reads laufen direkt gegen Supabase mit Tenant-RLS (Membership-gated).
UI-Variante: /governance.
Browser Extension
Manifest V3 Chrome-Extension im Repo unter extension-governance/. Erfasst Tracker-Insertions, AI-Vendor-Calls (OpenAI · Anthropic · Google · Mistral · Cohere · Together · Perplexity · DeepSeek), sowie Cookies-vor-Consent und sendet sie an die Ingest-API.
Install
# 1. Repo klonen + Extension-Verzeichnis öffnen git clone https://github.com/realsyncdynamics-spec/RealSyncDynamics.AI cd RealSyncDynamics.AI/extension-governance # 2. Chrome → chrome://extensions # → Developer mode aktivieren # → "Load unpacked" → extension-governance/ wählen # 3. Popup öffnen, Ingest-URL + Token eintragen, "Speichern".
TypeScript SDK
Zero-dep TS-Client. Im Repo unter src/features/governance/ingestClient.ts. Browser- und Node-tauglich, kein Bundler-Setup nötig.
import { IngestClient } from './ingestClient';
const client = new IngestClient({
url: 'https://ebljyceifhnlzhjfyxup.supabase.co/functions/v1/governance-ingest',
token: process.env.RSD_GOV_TOKEN!,
});
const res = await client.send({
event_type: 'agent.runtime.call',
event_source: 'sdk',
title: 'Outbound model call',
risk_level: 'medium',
vendor: 'OpenAI',
data_types: ['prompt_text'],
});
if (!res.ok) {
console.error('ingest failed', res.error);
} else {
console.log('matched policy:', res.policy_decisions[0]?.action);
}