admina-framework 0.9.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- admina/__init__.py +34 -0
- admina/cli/__init__.py +14 -0
- admina/cli/commands/__init__.py +14 -0
- admina/cli/main.py +1522 -0
- admina/cli/templates/admina.yaml.j2 +77 -0
- admina/cli/templates/docker-compose.yml.j2 +254 -0
- admina/cli/templates/env.j2 +10 -0
- admina/cli/templates/main.py.j2 +95 -0
- admina/cli/templates/plugin.py.j2 +145 -0
- admina/cli/templates/plugin_pyproject.toml.j2 +15 -0
- admina/cli/templates/plugin_readme.md.j2 +27 -0
- admina/cli/templates/plugin_test.py.j2 +48 -0
- admina/core/__init__.py +14 -0
- admina/core/config.py +497 -0
- admina/core/event_bus.py +112 -0
- admina/core/secrets.py +257 -0
- admina/core/types.py +146 -0
- admina/dashboard/__init__.py +8 -0
- admina/dashboard/static/heimdall.png +0 -0
- admina/dashboard/static/index.html +1045 -0
- admina/dashboard/static/vendor/alpinejs.min.js +5 -0
- admina/domains/__init__.py +14 -0
- admina/domains/agent_security/__init__.py +41 -0
- admina/domains/agent_security/firewall.py +634 -0
- admina/domains/agent_security/loop_breaker.py +176 -0
- admina/domains/ai_infra/__init__.py +79 -0
- admina/domains/ai_infra/llm_engine.py +477 -0
- admina/domains/ai_infra/rag.py +817 -0
- admina/domains/ai_infra/webui.py +292 -0
- admina/domains/compliance/__init__.py +109 -0
- admina/domains/compliance/cross_regulation.py +314 -0
- admina/domains/compliance/eu_ai_act.py +367 -0
- admina/domains/compliance/forensic.py +380 -0
- admina/domains/compliance/gdpr.py +331 -0
- admina/domains/compliance/nis2.py +258 -0
- admina/domains/compliance/oisg.py +658 -0
- admina/domains/compliance/otel.py +101 -0
- admina/domains/data_sovereignty/__init__.py +42 -0
- admina/domains/data_sovereignty/classification.py +102 -0
- admina/domains/data_sovereignty/pii.py +260 -0
- admina/domains/data_sovereignty/residency.py +121 -0
- admina/integrations/__init__.py +14 -0
- admina/integrations/_engines.py +63 -0
- admina/integrations/cheshirecat/__init__.py +13 -0
- admina/integrations/cheshirecat/admina-plugin/admina_governance.py +207 -0
- admina/integrations/crewai/__init__.py +13 -0
- admina/integrations/crewai/callbacks.py +347 -0
- admina/integrations/langchain/__init__.py +13 -0
- admina/integrations/langchain/callbacks.py +341 -0
- admina/integrations/n8n/__init__.py +14 -0
- admina/integrations/openclaw/__init__.py +14 -0
- admina/plugins/__init__.py +49 -0
- admina/plugins/base.py +633 -0
- admina/plugins/builtin/__init__.py +14 -0
- admina/plugins/builtin/adapters/__init__.py +14 -0
- admina/plugins/builtin/adapters/ollama.py +120 -0
- admina/plugins/builtin/adapters/openai.py +138 -0
- admina/plugins/builtin/alerts/__init__.py +14 -0
- admina/plugins/builtin/alerts/log.py +66 -0
- admina/plugins/builtin/alerts/webhook.py +102 -0
- admina/plugins/builtin/auth/__init__.py +14 -0
- admina/plugins/builtin/auth/apikey.py +138 -0
- admina/plugins/builtin/compliance/__init__.py +14 -0
- admina/plugins/builtin/compliance/eu_ai_act.py +202 -0
- admina/plugins/builtin/connectors/__init__.py +14 -0
- admina/plugins/builtin/connectors/chromadb.py +137 -0
- admina/plugins/builtin/connectors/filesystem.py +111 -0
- admina/plugins/builtin/forensic/__init__.py +14 -0
- admina/plugins/builtin/forensic/filesystem.py +163 -0
- admina/plugins/builtin/forensic/minio.py +180 -0
- admina/plugins/builtin/guards/__init__.py +0 -0
- admina/plugins/builtin/guards/guardrailsai_guard.py +172 -0
- admina/plugins/builtin/pii/__init__.py +14 -0
- admina/plugins/builtin/pii/spacy_regex.py +160 -0
- admina/plugins/builtin/transports/__init__.py +14 -0
- admina/plugins/builtin/transports/http_rest.py +97 -0
- admina/plugins/builtin/transports/mcp.py +173 -0
- admina/plugins/registry.py +356 -0
- admina/proxy/__init__.py +15 -0
- admina/proxy/api/__init__.py +17 -0
- admina/proxy/api/dashboard.py +925 -0
- admina/proxy/api/integration.py +153 -0
- admina/proxy/config.py +214 -0
- admina/proxy/engine_bridge.py +306 -0
- admina/proxy/governance.py +232 -0
- admina/proxy/main.py +1484 -0
- admina/proxy/multi_upstream.py +156 -0
- admina/proxy/state.py +97 -0
- admina/py.typed +0 -0
- admina/sdk/__init__.py +34 -0
- admina/sdk/_compat.py +43 -0
- admina/sdk/compliance_kit.py +359 -0
- admina/sdk/governed_agent.py +391 -0
- admina/sdk/governed_data.py +434 -0
- admina/sdk/governed_model.py +241 -0
- admina_framework-0.9.0.dist-info/METADATA +575 -0
- admina_framework-0.9.0.dist-info/RECORD +102 -0
- admina_framework-0.9.0.dist-info/WHEEL +5 -0
- admina_framework-0.9.0.dist-info/entry_points.txt +2 -0
- admina_framework-0.9.0.dist-info/licenses/LICENSE +191 -0
- admina_framework-0.9.0.dist-info/licenses/NOTICE +16 -0
- admina_framework-0.9.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,575 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: admina-framework
|
|
3
|
+
Version: 0.9.0
|
|
4
|
+
Summary: Admina — governed AI development framework
|
|
5
|
+
Author-email: Stefano Noferi <info@admina.org>
|
|
6
|
+
Maintainer-email: Stefano Noferi <info@admina.org>
|
|
7
|
+
License-Expression: Apache-2.0
|
|
8
|
+
Project-URL: Homepage, https://admina.org
|
|
9
|
+
Project-URL: Repository, https://github.com/admina-org/admina
|
|
10
|
+
Project-URL: Documentation, https://github.com/admina-org/admina#readme
|
|
11
|
+
Project-URL: Issues, https://github.com/admina-org/admina/issues
|
|
12
|
+
Project-URL: Changelog, https://github.com/admina-org/admina/blob/main/CHANGELOG.md
|
|
13
|
+
Project-URL: Security, https://github.com/admina-org/admina/blob/main/SECURITY.md
|
|
14
|
+
Keywords: ai,governance,compliance,eu-ai-act,pii,llm,mcp,proxy,agent-security,injection-firewall,sdk
|
|
15
|
+
Classifier: Development Status :: 4 - Beta
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Rust
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Topic :: Security
|
|
25
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
26
|
+
Requires-Python: >=3.11
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
License-File: NOTICE
|
|
30
|
+
Requires-Dist: pyyaml<7,>=6.0
|
|
31
|
+
Requires-Dist: click<9,>=8.1
|
|
32
|
+
Requires-Dist: jinja2<4,>=3.1
|
|
33
|
+
Requires-Dist: cryptography<48,>=41.0
|
|
34
|
+
Provides-Extra: proxy
|
|
35
|
+
Requires-Dist: fastapi<1,>=0.104; extra == "proxy"
|
|
36
|
+
Requires-Dist: uvicorn[standard]<1,>=0.24; extra == "proxy"
|
|
37
|
+
Requires-Dist: httpx<1,>=0.25; extra == "proxy"
|
|
38
|
+
Requires-Dist: pydantic<3,>=2.5; extra == "proxy"
|
|
39
|
+
Requires-Dist: pydantic-settings<3,>=2.3; extra == "proxy"
|
|
40
|
+
Requires-Dist: python-dotenv<2,>=1.0; extra == "proxy"
|
|
41
|
+
Requires-Dist: redis<6,>=5.0; extra == "proxy"
|
|
42
|
+
Requires-Dist: boto3<2,>=1.34; extra == "proxy"
|
|
43
|
+
Requires-Dist: minio<8,>=7.2; extra == "proxy"
|
|
44
|
+
Requires-Dist: clickhouse-connect<1,>=0.7; extra == "proxy"
|
|
45
|
+
Requires-Dist: typer<1,>=0.9; extra == "proxy"
|
|
46
|
+
Provides-Extra: nlp
|
|
47
|
+
Requires-Dist: spacy<4,>=3.8; extra == "nlp"
|
|
48
|
+
Requires-Dist: scikit-learn<2,>=1.3; extra == "nlp"
|
|
49
|
+
Requires-Dist: numpy<2,>=1.24; extra == "nlp"
|
|
50
|
+
Provides-Extra: telemetry
|
|
51
|
+
Requires-Dist: opentelemetry-api<2,>=1.20; extra == "telemetry"
|
|
52
|
+
Requires-Dist: opentelemetry-sdk<2,>=1.20; extra == "telemetry"
|
|
53
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2,>=1.20; extra == "telemetry"
|
|
54
|
+
Requires-Dist: opentelemetry-instrumentation-fastapi<1,>=0.40b0; extra == "telemetry"
|
|
55
|
+
Provides-Extra: full
|
|
56
|
+
Requires-Dist: admina-framework[nlp,proxy,telemetry]; extra == "full"
|
|
57
|
+
Dynamic: license-file
|
|
58
|
+
|
|
59
|
+
# Admina — Governed AI Development Framework
|
|
60
|
+
|
|
61
|
+
**Install once, get governed AI. The open framework for building AI applications that are governed by design.**
|
|
62
|
+
|
|
63
|
+
Admina gives you an SDK, a transparent proxy, a plugin system, a CLI, and a dashboard — all in one install. Every AI interaction is governed: PII redacted, injections blocked, loops broken, actions audited, EU AI Act compliance tracked. Works in-process (SDK) and over the network (proxy). Zero code changes to add governance to existing applications.
|
|
64
|
+
|
|
65
|
+
> ⚖️ **Compliance disclaimer.** Admina is a self-assessment and
|
|
66
|
+
> defense-in-depth tool. The EU AI Act gap-analysis and risk
|
|
67
|
+
> classification features are **decision-support aids, not legal
|
|
68
|
+
> advice**. They do not replace the conformity assessment required
|
|
69
|
+
> under EU AI Act Art. 43 for high-risk systems, nor the involvement
|
|
70
|
+
> of a notified body where the regulation requires one.
|
|
71
|
+
>
|
|
72
|
+
> **EU AI Act timeline (after the Omnibus VII agreement of 7 May 2026):**
|
|
73
|
+
> Art. 5 prohibitions in force since 2 February 2025; GPAI obligations
|
|
74
|
+
> in force since 2 August 2025; Art. 50 transparency for synthetic
|
|
75
|
+
> content and the new NCII / synthetic-CSAM prohibition apply from
|
|
76
|
+
> 2 December 2026; **Annex III high-risk obligations from 2 December
|
|
77
|
+
> 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
|
|
78
|
+
> 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
|
|
79
|
+
> ships with Admina as `admina.domains.compliance.eu_ai_act.EU_AI_ACT_DEADLINES`.
|
|
80
|
+
> See [`MODEL_CARD.md`](MODEL_CARD.md) for the full scope, limitations,
|
|
81
|
+
> and known failure modes of every Admina component.
|
|
82
|
+
|
|
83
|
+
[](https://pypi.org/project/admina-framework/)
|
|
84
|
+
[](https://pypi.org/project/admina-framework/)
|
|
85
|
+
[](LICENSE)
|
|
86
|
+
[](https://python.org)
|
|
87
|
+
[](core-rust/)
|
|
88
|
+
[](https://github.com/admina-org/admina/actions/workflows/ci.yml)
|
|
89
|
+
[](https://admina.org/docs)
|
|
90
|
+
[](CHANGELOG.md)
|
|
91
|
+
[](CONTRIBUTING.md#supported-platforms)
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
|
|
95
|
+
from admina.plugins.builtin.adapters.ollama import OllamaAdapter
|
|
96
|
+
from admina.plugins.builtin.connectors.chromadb import ChromaDBConnector
|
|
97
|
+
|
|
98
|
+
# Every call is governed: PII redacted, injections blocked, audited
|
|
99
|
+
adapter = OllamaAdapter(host="http://localhost:11434")
|
|
100
|
+
model = GovernedModel(model_name="llama3.1:8b", adapter=adapter)
|
|
101
|
+
response = await model.ask("Summarize this document")
|
|
102
|
+
|
|
103
|
+
# Data governance: residency enforcement, PII classification
|
|
104
|
+
connector = ChromaDBConnector(host="localhost", port=8000)
|
|
105
|
+
data = GovernedData(connector=connector, residency_zone="eu")
|
|
106
|
+
await data.ingest(documents)
|
|
107
|
+
|
|
108
|
+
# Agent governance: validate every tool call before execution
|
|
109
|
+
async def my_upstream(method, params, **kw): ... # your MCP/HTTP client
|
|
110
|
+
agent = GovernedAgent(upstream=my_upstream)
|
|
111
|
+
result = await agent.call("tools/call", {"name": "read_file", "arguments": {}})
|
|
112
|
+
|
|
113
|
+
# Compliance: EU AI Act gap analysis and risk classification
|
|
114
|
+
kit = ComplianceKit()
|
|
115
|
+
report = kit.gap_analysis(risk_category="high", current_compliance={...})
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Quick Start
|
|
119
|
+
|
|
120
|
+
### Install from PyPI
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# SDK only (lightweight, pure Python)
|
|
124
|
+
pip install admina-framework
|
|
125
|
+
|
|
126
|
+
# Proxy + infrastructure deps
|
|
127
|
+
pip install "admina-framework[proxy]"
|
|
128
|
+
|
|
129
|
+
# Everything (proxy + NLP + telemetry)
|
|
130
|
+
pip install "admina-framework[full]"
|
|
131
|
+
|
|
132
|
+
# After [nlp] / [full] install: download the spaCy NER model
|
|
133
|
+
python -m spacy download en_core_web_sm
|
|
134
|
+
|
|
135
|
+
# Optional: Rust-accelerated engine (auto-detected at runtime)
|
|
136
|
+
pip install admina-core
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
> The PyPI distribution name is `admina-framework`; the Python import
|
|
140
|
+
> name is `admina` (e.g. `from admina import GovernedModel`). This is
|
|
141
|
+
> a normal Python pattern — same as `python-dateutil` → `import dateutil`.
|
|
142
|
+
|
|
143
|
+
> The Rust engine is an optional accelerator. `pip install admina-framework`
|
|
144
|
+
> ships only the pure-Python implementation; Admina auto-detects the
|
|
145
|
+
> Rust engine at runtime and falls back to the Python implementation
|
|
146
|
+
> if it's not installed.
|
|
147
|
+
|
|
148
|
+
### Or install from source
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
git clone https://github.com/admina-org/admina.git
|
|
152
|
+
cd admina
|
|
153
|
+
|
|
154
|
+
# Option 1: SDK only (lightweight)
|
|
155
|
+
pip install -e .
|
|
156
|
+
python -c "from admina import GovernedModel; print('SDK ready')"
|
|
157
|
+
|
|
158
|
+
# Note: To use the OllamaAdapter, install Ollama (https://ollama.ai)
|
|
159
|
+
# and pull a model first: ollama pull llama3.1:8b
|
|
160
|
+
|
|
161
|
+
# Option 2: Proxy + infra deps
|
|
162
|
+
pip install -e ".[proxy]"
|
|
163
|
+
|
|
164
|
+
# Option 3: Everything (proxy + NLP + telemetry)
|
|
165
|
+
pip install -e ".[full]"
|
|
166
|
+
|
|
167
|
+
# Option 4: Full stack (proxy + dashboard + infra via Docker)
|
|
168
|
+
./scripts/bootstrap-secrets.sh # Auto-generate .env with random credentials
|
|
169
|
+
docker compose up --build # Credentials printed at bootstrap
|
|
170
|
+
|
|
171
|
+
# Option 5: CLI
|
|
172
|
+
pip install -e .
|
|
173
|
+
admina init my-project # Scaffold a governed AI project
|
|
174
|
+
cd my-project # admina dev runs from the project directory
|
|
175
|
+
admina dev # Start local dev stack
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Dashboard: [http://localhost:3000](http://localhost:3000) | API docs: [http://localhost:8080/docs](http://localhost:8080/docs)
|
|
179
|
+
|
|
180
|
+
## Architecture
|
|
181
|
+
|
|
182
|
+
Admina is organized into 4 governance domains:
|
|
183
|
+
|
|
184
|
+
| Domain | What it governs | Key features |
|
|
185
|
+
|--------|----------------|--------------|
|
|
186
|
+
| **Data Sovereignty** | Where data lives and how it's protected | PII redaction (spaCy + regex), residency zones, data classification |
|
|
187
|
+
| **AI Infrastructure** | LLM and RAG stack | Ollama backend, ChromaDB vectors, Open WebUI, GPU auto-detect |
|
|
188
|
+
| **Agent Security** | What agents can do | Injection firewall (Rust), loop breaker, proxy governance |
|
|
189
|
+
| **Compliance** | Regulatory obligations | EU AI Act (Art. 6-15), forensic black box (SHA-256 chain), OTEL |
|
|
190
|
+
|
|
191
|
+
Every governance feature works in **dual mode** — both via SDK (in-process) and proxy (network):
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
SDK Mode: Proxy Mode:
|
|
195
|
+
your code AI Agent
|
|
196
|
+
| |
|
|
197
|
+
GovernedModel.ask() POST /mcp
|
|
198
|
+
| |
|
|
199
|
+
[governance pipeline] [governance pipeline]
|
|
200
|
+
| |
|
|
201
|
+
Ollama / OpenAI MCP Server / LLM
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## The 4 Governance Domains
|
|
205
|
+
|
|
206
|
+
| Domain | Capabilities | Engine |
|
|
207
|
+
|--------|-------------|--------|
|
|
208
|
+
| **Agent Security** | Anti-injection firewall (15 regex + heuristic scoring), loop breaker (TF-IDF cosine similarity) | Rust + Python |
|
|
209
|
+
| **Data Sovereignty** | PII redaction (email, SSN, credit cards, IBAN, phone, IP), residency enforcement, data classification | Rust + spaCy NER |
|
|
210
|
+
| **Compliance** | EU AI Act risk classification (Art. 6) and gap analysis (Art. 9-15), forensic black box (SHA-256 hash chain), OTEL native spans | Rust + Python |
|
|
211
|
+
| **AI Infrastructure** | LLM engine (Ollama, OpenAI), RAG pipeline (ChromaDB), Open WebUI | Python |
|
|
212
|
+
|
|
213
|
+
All governance domains operate **bidirectionally** — scanning both outbound requests and inbound responses.
|
|
214
|
+
|
|
215
|
+
## SDK
|
|
216
|
+
|
|
217
|
+
Four governed primitives, each with async + sync interfaces:
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
| Primitive | Purpose | Governance applied |
|
|
224
|
+
|-----------|---------|-------------------|
|
|
225
|
+
| `GovernedModel` | LLM calls (Ollama, OpenAI) | PII redaction on prompts and responses, event audit |
|
|
226
|
+
| `GovernedData` | Data ingestion and queries | PII classification, residency enforcement, access audit |
|
|
227
|
+
| `GovernedAgent` | MCP/A2A agent calls | Firewall, PII, loop breaker — full proxy pipeline in-process |
|
|
228
|
+
| `ComplianceKit` | Regulatory compliance | EU AI Act risk classification, gap analysis, report generation |
|
|
229
|
+
|
|
230
|
+
## Plugin System
|
|
231
|
+
|
|
232
|
+
9 plugin interfaces, auto-discovered from `plugins/builtin/` or installed via CLI:
|
|
233
|
+
|
|
234
|
+
| Interface | Builtin implementations |
|
|
235
|
+
|-----------|------------------------|
|
|
236
|
+
| Model Adapter | Ollama, OpenAI |
|
|
237
|
+
| Data Connector | ChromaDB, Filesystem |
|
|
238
|
+
| Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
|
|
239
|
+
| Compliance Template | EU AI Act |
|
|
240
|
+
| Transport Adapter | MCP, HTTP REST |
|
|
241
|
+
| Forensic Store | Filesystem, S3-compatible (boto3), MinIO (legacy) |
|
|
242
|
+
| Auth Provider | API Key |
|
|
243
|
+
| PII Engine | spaCy + Regex |
|
|
244
|
+
| Alert Channel | Log, Webhook |
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
admina plugin list # List registered plugins
|
|
248
|
+
admina plugin install ./my-plugin # Install a custom plugin
|
|
249
|
+
admina plugin create my-domain # Scaffold a new plugin
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## CLI
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
|
|
256
|
+
admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
|
|
257
|
+
admina dev --stack # Docker stack: + redis + clickhouse + minio + grafana
|
|
258
|
+
admina dev --with-llm # --stack + ollama + chromadb + open-webui
|
|
259
|
+
admina plugin list # List all registered plugins
|
|
260
|
+
admina plugin install X # Install a plugin from path or registry
|
|
261
|
+
admina plugin create X # Scaffold a new plugin from template
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
`admina dev` defaults to a **single-process local mode** with zero Docker
|
|
265
|
+
dependency: one uvicorn serves the proxy API and the dashboard SPA on the
|
|
266
|
+
same port. Use `--stack` for the production-like Docker compose, or
|
|
267
|
+
`--with-llm` to also boot local LLM services.
|
|
268
|
+
|
|
269
|
+
## Forensic backend — choose deliberately
|
|
270
|
+
|
|
271
|
+
The forensic blackbox (the SHA-256 hash chain that makes the audit trail
|
|
272
|
+
tamper-evident) supports four backends. Read this before picking one for
|
|
273
|
+
production.
|
|
274
|
+
|
|
275
|
+
| Backend | License | When to use | Caveats |
|
|
276
|
+
|---------|---------|-------------|---------|
|
|
277
|
+
| **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
|
|
278
|
+
| **`filesystem`** | n/a | Single-host on-prem, air-gapped, smaller deployments | Persistence depends on the host filesystem; not ideal for HA. Requires `FORENSIC_BASE_DIR`. |
|
|
279
|
+
| **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2). Recommended new default. |
|
|
280
|
+
| **`minio`** *(legacy)* | see below ⚠️ | Backwards compatibility with existing MinIO clusters | Two distinct concerns; read the disclaimer. |
|
|
281
|
+
|
|
282
|
+
> ⚠️ **MinIO disclaimer — what users of Admina need to know.**
|
|
283
|
+
>
|
|
284
|
+
> MinIO has two separate licensing/maintenance issues that can affect
|
|
285
|
+
> downstream users of Admina, even though Admina itself is Apache 2.0:
|
|
286
|
+
>
|
|
287
|
+
> 1. **MinIO Server is AGPLv3.** If you deploy MinIO Server as part of a
|
|
288
|
+
> network-accessible service (e.g. a SaaS that exposes Admina's
|
|
289
|
+
> dashboard or API to the public Internet), AGPLv3's network clause
|
|
290
|
+
> can be read to require you to publish the source code of the
|
|
291
|
+
> *combined* application that interacts with MinIO over the network.
|
|
292
|
+
> The MinIO commercial license removes this obligation, but is paid.
|
|
293
|
+
> This is **not** an Admina obligation — Apache 2.0 is permissive —
|
|
294
|
+
> but it is an obligation MinIO Server itself imposes on whoever
|
|
295
|
+
> runs it.
|
|
296
|
+
> 2. **The MinIO Python SDK has been archived.** No more security
|
|
297
|
+
> patches, no support for new Python releases. Continuing to depend
|
|
298
|
+
> on it is a supply-chain risk.
|
|
299
|
+
>
|
|
300
|
+
> **Recommendation:** for new deployments, use `FORENSIC_BACKEND=s3`.
|
|
301
|
+
> The `boto3` client is Apache 2.0 and works against any S3-compatible
|
|
302
|
+
> service. Two open-source FOSS-friendly options that don't trigger the
|
|
303
|
+
> AGPL network clause for typical Admina deployments:
|
|
304
|
+
> - **SeaweedFS** (Apache 2.0, S3 gateway, lightweight, single binary)
|
|
305
|
+
> - **Garage** (AGPLv3, but as a backend — Garage's AGPL applies to
|
|
306
|
+
> Garage itself, not to applications that connect to it via S3 API)
|
|
307
|
+
>
|
|
308
|
+
> Existing MinIO deployments keep working through `FORENSIC_BACKEND=minio`,
|
|
309
|
+
> but plan a migration. The `minio` backend will be removed in a future
|
|
310
|
+
> release.
|
|
311
|
+
|
|
312
|
+
## Dashboard
|
|
313
|
+
|
|
314
|
+
Real-time governance dashboard on port 3000:
|
|
315
|
+
|
|
316
|
+
- **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
|
|
317
|
+
- **Live Feed** — streaming governance events via WebSocket
|
|
318
|
+
- **Compliance Gaps** — EU AI Act gap analysis with article-level detail
|
|
319
|
+
- **Infrastructure Health** — proxy, Redis, MinIO, ClickHouse, OTEL status
|
|
320
|
+
|
|
321
|
+
API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
|
|
322
|
+
|
|
323
|
+
## Configuration
|
|
324
|
+
|
|
325
|
+
Admina uses `admina.yaml` as the primary config file (with `.env` fallback for backward compatibility):
|
|
326
|
+
|
|
327
|
+
```bash
|
|
328
|
+
cp admina.yaml.example admina.yaml # Copy and customize
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
|
|
332
|
+
|
|
333
|
+
### Environment variables (Docker / .env)
|
|
334
|
+
|
|
335
|
+
| Variable | Default | Description |
|
|
336
|
+
|----------|---------|-------------|
|
|
337
|
+
| `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
|
|
338
|
+
| `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
|
|
339
|
+
| `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
|
|
340
|
+
| `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
|
|
341
|
+
| `LOG_LEVEL` | `INFO` | Logging verbosity |
|
|
342
|
+
|
|
343
|
+
## Integrations
|
|
344
|
+
|
|
345
|
+
### GuardrailsAI
|
|
346
|
+
|
|
347
|
+
ML-based content validation (toxic language, jailbreak, bias, PII via Presidio) as a governance domain plugin:
|
|
348
|
+
|
|
349
|
+
```bash
|
|
350
|
+
# Upstream guardrails-ai is currently in PyPI quarantine. Install it
|
|
351
|
+
# manually from your local mirror or wheel cache; once available, the
|
|
352
|
+
# plugin in admina/plugins/builtin/guards/guardrailsai_guard.py will
|
|
353
|
+
# detect it automatically.
|
|
354
|
+
pip install <your-guardrails-ai-wheel>
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Enable in `admina.yaml` under `agent_security.domains.guardrailsai`. All inference runs locally by default — no data leaves the deployment perimeter.
|
|
358
|
+
|
|
359
|
+
### OpenClaw
|
|
360
|
+
|
|
361
|
+
Govern OpenClaw agent actions through the Admina proxy. Every tool call, shell command, and API request is validated before execution:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
cd integrations/openclaw/admina-governance
|
|
365
|
+
chmod +x setup.sh && ./setup.sh
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
The skill uses `POST /api/v1/validate` (pre-action) and `POST /api/v1/audit` (post-action) endpoints.
|
|
369
|
+
|
|
370
|
+
### n8n
|
|
371
|
+
|
|
372
|
+
Community nodes for n8n workflow automation:
|
|
373
|
+
|
|
374
|
+
| Node | Purpose |
|
|
375
|
+
|------|---------|
|
|
376
|
+
| **Admina Govern** | Inline governance check — validates workflow data, blocks injections, redacts PII |
|
|
377
|
+
| **Admina Audit** | Logs workflow events to forensic black box with EU AI Act risk classification |
|
|
378
|
+
| **Admina Dashboard** | Trigger node — fires on governance events via WebSocket |
|
|
379
|
+
|
|
380
|
+
Install: `npm install n8n-nodes-admina` in your n8n instance.
|
|
381
|
+
|
|
382
|
+
### Cheshire Cat AI
|
|
383
|
+
|
|
384
|
+
Govern all Cheshire Cat interactions via three Python hooks (`agent_fast_reply`, `before_cat_sends_message`, `before_cat_recalls_memories`):
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
cd integrations/cheshirecat/admina-plugin
|
|
388
|
+
./setup.sh # Start Admina sidecar
|
|
389
|
+
# Copy plugin into Cheshire Cat plugins/ directory
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### LangChain
|
|
393
|
+
|
|
394
|
+
Drop-in callback handler — governs every LLM call and tool invocation in-process:
|
|
395
|
+
|
|
396
|
+
```python
|
|
397
|
+
from admina.integrations.langchain.callbacks import AdminaCallbackHandler
|
|
398
|
+
|
|
399
|
+
handler = AdminaCallbackHandler()
|
|
400
|
+
llm = ChatOpenAI(callbacks=[handler])
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### CrewAI
|
|
404
|
+
|
|
405
|
+
Step and task callbacks for multi-agent governance:
|
|
406
|
+
|
|
407
|
+
```python
|
|
408
|
+
from admina.integrations.crewai.callbacks import admina_step_callback, admina_task_callback
|
|
409
|
+
|
|
410
|
+
agent = Agent(role="Researcher", step_callback=admina_step_callback)
|
|
411
|
+
crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
See [full integration docs](docs/guides/integrations.md) for details.
|
|
415
|
+
|
|
416
|
+
## Hybrid Python + Rust Engine
|
|
417
|
+
|
|
418
|
+
The Rust core engine is an optional accelerator. `pip install admina-framework`
|
|
419
|
+
ships only the pure-Python implementation; to enable the Rust engine
|
|
420
|
+
build `admina_core` separately (`maturin develop --release
|
|
421
|
+
--manifest-path core-rust/Cargo.toml`, see [CONTRIBUTING.md](CONTRIBUTING.md)).
|
|
422
|
+
At runtime Admina auto-detects whichever is available and falls back
|
|
423
|
+
transparently to Python if the Rust extension is not installed.
|
|
424
|
+
|
|
425
|
+
Measured numbers below assume the Rust engine is loaded:
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
Component Rust (median) P95 P99
|
|
429
|
+
----------------- ------------- --------- ---------
|
|
430
|
+
Firewall (regex) 2.08us 2.33us 2.50us
|
|
431
|
+
PII Scanner 0.62us 0.67us 0.71us
|
|
432
|
+
Loop Breaker 2.38us 2.67us 2.75us
|
|
433
|
+
Hash Chain 1.00us 1.12us 1.25us
|
|
434
|
+
----------------- ------------- --------- ---------
|
|
435
|
+
4-Domain pipeline 6.25us 7.04us 7.29us
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
<details>
|
|
439
|
+
<summary>Rust vs Python comparison (click to expand)</summary>
|
|
440
|
+
|
|
441
|
+
```
|
|
442
|
+
Component Python (median) Rust (median) Speedup
|
|
443
|
+
----------------- --------------- ------------- --------
|
|
444
|
+
Firewall 7.79us 2.08us 3.7x
|
|
445
|
+
PII (regex-only) 8.21us 0.62us 13.2x
|
|
446
|
+
PII (with spaCy) 1 992us 0.62us 3 213x
|
|
447
|
+
Loop (sklearn) 505us 2.38us 212x
|
|
448
|
+
----------------- --------------- ------------- --------
|
|
449
|
+
Full pipeline 2 261us 5.21us 434x
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
</details>
|
|
453
|
+
|
|
454
|
+
## Traffic Simulator
|
|
455
|
+
|
|
456
|
+
Generate realistic governance traffic to test and demo the platform:
|
|
457
|
+
|
|
458
|
+
```bash
|
|
459
|
+
# Start the proxy
|
|
460
|
+
docker compose up -d
|
|
461
|
+
|
|
462
|
+
# Default: 60s at 2 req/s
|
|
463
|
+
python scripts/simulate.py
|
|
464
|
+
|
|
465
|
+
# Intense: 5 minutes at 10 req/s
|
|
466
|
+
python scripts/simulate.py --duration 300 --rate 10
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
Generates a weighted mix of: clean MCP requests, injection attempts, PII content, loop triggers, REST validate/audit calls, EU AI Act classifications, and dashboard reads. Colored terminal output with per-event action and summary counters.
|
|
470
|
+
|
|
471
|
+
## Project Structure
|
|
472
|
+
|
|
473
|
+
```
|
|
474
|
+
admina/
|
|
475
|
+
+-- admina/ SDK package (GovernedModel, GovernedData, GovernedAgent, ComplianceKit)
|
|
476
|
+
| +-- plugins/ Plugin base classes + registry
|
|
477
|
+
+-- domains/ 4 governance domains
|
|
478
|
+
| +-- data_sovereignty/ PII, residency, classification
|
|
479
|
+
| +-- ai_infra/ LLM engine, RAG pipeline, Web UI
|
|
480
|
+
| +-- agent_security/ Firewall, loop breaker, proxy
|
|
481
|
+
| +-- compliance/ EU AI Act, forensic, OTEL
|
|
482
|
+
+-- plugins/builtin/ Reference plugin implementations
|
|
483
|
+
| +-- adapters/ Ollama, OpenAI
|
|
484
|
+
| +-- connectors/ ChromaDB, Filesystem
|
|
485
|
+
| +-- domains/ GuardrailsAI
|
|
486
|
+
| +-- compliance/ EU AI Act template
|
|
487
|
+
| +-- transports/ MCP, HTTP REST
|
|
488
|
+
| +-- forensic/ MinIO, Filesystem
|
|
489
|
+
| +-- auth/ API Key
|
|
490
|
+
| +-- pii/ spaCy + Regex
|
|
491
|
+
| +-- alerts/ Log, Webhook
|
|
492
|
+
+-- proxy/ FastAPI proxy + Rust engine bridge
|
|
493
|
+
| +-- api/ Dashboard + integration REST endpoints
|
|
494
|
+
+-- cli/ CLI commands (init, dev, plugin)
|
|
495
|
+
+-- core/ Config, types, event bus
|
|
496
|
+
+-- core-rust/ Rust governance engines (PyO3)
|
|
497
|
+
+-- dashboard/ Real-time governance web UI
|
|
498
|
+
+-- integrations/
|
|
499
|
+
| +-- openclaw/ OpenClaw governance skill
|
|
500
|
+
| +-- n8n/ n8n community nodes
|
|
501
|
+
+-- tests/ 800+ tests (pytest)
|
|
502
|
+
+-- docker-compose.yml Full stack deployment (9 containers)
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
## API
|
|
506
|
+
|
|
507
|
+
```bash
|
|
508
|
+
# Health check (always public)
|
|
509
|
+
curl http://localhost:8080/health
|
|
510
|
+
|
|
511
|
+
# Governance stats
|
|
512
|
+
curl http://localhost:8080/api/stats -H "X-API-Key: $ADMINA_API_KEY"
|
|
513
|
+
|
|
514
|
+
# Proxy an MCP call (all governance domains applied)
|
|
515
|
+
curl -X POST http://localhost:8080/mcp \
|
|
516
|
+
-H "Content-Type: application/json" \
|
|
517
|
+
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{...}}'
|
|
518
|
+
|
|
519
|
+
# Validate content (REST API for integrations)
|
|
520
|
+
curl -X POST http://localhost:8080/api/v1/validate \
|
|
521
|
+
-H "Content-Type: application/json" \
|
|
522
|
+
-d '{"content": "Check this text for governance issues"}'
|
|
523
|
+
|
|
524
|
+
# Audit an action (forensic logging)
|
|
525
|
+
curl -X POST http://localhost:8080/api/v1/audit \
|
|
526
|
+
-H "Content-Type: application/json" \
|
|
527
|
+
-d '{"event": {"action": "llm_call", "status": "success"}}'
|
|
528
|
+
|
|
529
|
+
# EU AI Act risk classification
|
|
530
|
+
curl -X POST http://localhost:8080/api/compliance/classify \
|
|
531
|
+
-H "Content-Type: application/json" \
|
|
532
|
+
-d '{"description":"AI credit scoring","use_case":"lending","data_types":["financial"]}'
|
|
533
|
+
|
|
534
|
+
# Dashboard governance score
|
|
535
|
+
curl http://localhost:8080/api/dashboard/score
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
## Infrastructure & Services
|
|
539
|
+
|
|
540
|
+
The full stack (`docker compose up`) runs 9 containers:
|
|
541
|
+
|
|
542
|
+
| Port | Service | Description |
|
|
543
|
+
|------|---------|-------------|
|
|
544
|
+
| `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
|
|
545
|
+
| `3000` | Dashboard | Real-time governance web UI |
|
|
546
|
+
| `3001` | Grafana | Metrics dashboards |
|
|
547
|
+
| `9090` | MinIO Console | Forensic storage browser |
|
|
548
|
+
| `4317` | OTEL Collector | OTLP gRPC ingestion |
|
|
549
|
+
|
|
550
|
+
ClickHouse and Redis are internal only (not exposed to host).
|
|
551
|
+
|
|
552
|
+
## Project documents
|
|
553
|
+
|
|
554
|
+
- [CONTRIBUTING.md](CONTRIBUTING.md) — development setup, testing, and pull request workflow
|
|
555
|
+
- [MODEL_CARD.md](MODEL_CARD.md) — transparency artifact for every Admina governance component (intended use, scope, limitations, known failure modes), aligned with EU AI Act Art. 13 and NIST AI RMF
|
|
556
|
+
- [ROADMAP.md](ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
|
|
557
|
+
- [CHANGELOG.md](CHANGELOG.md) — release notes
|
|
558
|
+
- [SECURITY.md](SECURITY.md) — coordinated disclosure policy
|
|
559
|
+
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
|
|
560
|
+
|
|
561
|
+
Admina is Apache 2.0. Contributions are welcome.
|
|
562
|
+
|
|
563
|
+
## License
|
|
564
|
+
|
|
565
|
+
Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
|
|
566
|
+
|
|
567
|
+
Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
|
|
568
|
+
|
|
569
|
+
---
|
|
570
|
+
|
|
571
|
+
<p align="center">
|
|
572
|
+
<img src="https://admina.org/admina-heimdall-the-governance-owl.png" alt="Heimdall — the Governance Owl" width="80" /><br/>
|
|
573
|
+
<em>Heimdall — the Governance Owl</em><br/><br/>
|
|
574
|
+
<strong>admina.org</strong> · Created by Stefano Noferi · Pisa, Italy
|
|
575
|
+
</p>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
admina/__init__.py,sha256=zgqAKo06cFkYLaOlzKZDuDd6_XL6AYHeDeAqYsgMt-Y,1038
|
|
2
|
+
admina/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
admina/cli/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
4
|
+
admina/cli/main.py,sha256=01GE__NcYktINn1CvdzUEfZZhwM1wxpTOMkCpqxp0HU,51853
|
|
5
|
+
admina/cli/commands/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
6
|
+
admina/cli/templates/admina.yaml.j2,sha256=sSUrySnbze7_GMtTaN47Cy429bDt3_XpNHO9uniaKSo,1601
|
|
7
|
+
admina/cli/templates/docker-compose.yml.j2,sha256=XDgmhYGx-DO3bVlmsG-6eAAOoyxyYdH7cm5nDdbkk3o,7728
|
|
8
|
+
admina/cli/templates/env.j2,sha256=E2Xcoe6V6-pI1x-JPiFfRjDqhB5SraN59ExqzUG1F5k,285
|
|
9
|
+
admina/cli/templates/main.py.j2,sha256=DEcxkUTE-sj6r4UF0nmXZaTCDTJk4kT9ZPkMSJnANrw,3330
|
|
10
|
+
admina/cli/templates/plugin.py.j2,sha256=pXOPsjH20VJ8tmm-vcLuKAhzJs18DBctB34Ie9HSUpo,5250
|
|
11
|
+
admina/cli/templates/plugin_pyproject.toml.j2,sha256=7VDmvJTa1b78kS5y8tv10BviySZbwRnie2LQng3x1uM,350
|
|
12
|
+
admina/cli/templates/plugin_readme.md.j2,sha256=4x-M-q2WC26mNFaUfa9Sqp2JtVESr1L-sLXPKxA9ZJQ,337
|
|
13
|
+
admina/cli/templates/plugin_test.py.j2,sha256=gIwDmuFOihf7oxLIhAYt66soskP3ItZh7i6XskuAoMk,1581
|
|
14
|
+
admina/core/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
15
|
+
admina/core/config.py,sha256=6tdYBuQDDuPvSav1sPj_K-SVsDZO_NE_SZ-aMJGDbGE,15547
|
|
16
|
+
admina/core/event_bus.py,sha256=tvNagefrKI-vgPD4dj_Quzz3bFcKfEEXBEfInzDGrRg,3810
|
|
17
|
+
admina/core/secrets.py,sha256=AiGhydwGuWBq8wliuMZgE24fdyDzcBs8nWr1tDFnqaQ,9155
|
|
18
|
+
admina/core/types.py,sha256=ywe--Xj3i7ev-5G2Y3LtznhL7HvwfB9UwEqnolRFK1s,4431
|
|
19
|
+
admina/dashboard/__init__.py,sha256=MPJURW2eIHULmz7xxOk5lT49w80NjzCU4hq5-h7hqqE,332
|
|
20
|
+
admina/dashboard/static/heimdall.png,sha256=0eoSHBV1YAu3JxgVuR63zYSG8HLHOZExloeEu0YG5pQ,421783
|
|
21
|
+
admina/dashboard/static/index.html,sha256=l26hqcLD2PAoG59LNS9szWOloQPOobNL9W65aYLCW9k,52134
|
|
22
|
+
admina/dashboard/static/vendor/alpinejs.min.js,sha256=tgDjY9mdlURNtUrL-y3v_smueSqpmgkim82geOW1VkM,44758
|
|
23
|
+
admina/domains/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
24
|
+
admina/domains/agent_security/__init__.py,sha256=_x8VhK9mGrJsS6SLjEsVPYVD3WPr_gsVXurZX7MoQqU,1437
|
|
25
|
+
admina/domains/agent_security/firewall.py,sha256=3m674SS2r_rRGtDStOMwsMs46ntvyvwYQelA5QAlts4,23733
|
|
26
|
+
admina/domains/agent_security/loop_breaker.py,sha256=xAJRLQ1QwHWH2ZFxCxKpcgq4ed1FRIO5ubnhqERo3pc,6482
|
|
27
|
+
admina/domains/ai_infra/__init__.py,sha256=aRrrpZnHQbH8mA8T-eGFBcT2AXms6dg8H8dP8wyFnVI,1793
|
|
28
|
+
admina/domains/ai_infra/llm_engine.py,sha256=ARJ1CDJ8HwIBheT5kGAwciXEhDb1m8wuv3er-30hpJE,15296
|
|
29
|
+
admina/domains/ai_infra/rag.py,sha256=cyuRPJwZVpV064fa-HqucAdepk3GHAAIL4EOGhIJnbQ,26610
|
|
30
|
+
admina/domains/ai_infra/webui.py,sha256=B8cZJk99hw9yphAeZ2mHgdlljQcKvQX34O_K_SUNgPQ,9731
|
|
31
|
+
admina/domains/compliance/__init__.py,sha256=hAfBmxlv3RmsiMLVq5Ha7t0kwz65HzIRwslOEpmUet0,3292
|
|
32
|
+
admina/domains/compliance/cross_regulation.py,sha256=oBhkQ48oO9vRbqbj7fLa7xDP9VAOcrhTMTyFVxUFmWw,11971
|
|
33
|
+
admina/domains/compliance/eu_ai_act.py,sha256=3qmCsiYB088_8iLMfL_c3imWLQKFfA7o3L5K6EJ5Wrs,13433
|
|
34
|
+
admina/domains/compliance/forensic.py,sha256=-NXLyEOUHaPU_5HhqLC11oVXKOPirJRgAltS3cewAas,15699
|
|
35
|
+
admina/domains/compliance/gdpr.py,sha256=dHZ2zHVxuIKvVMd3cTUOEmf8NcNqBK8b4i6fyMRk-SA,12471
|
|
36
|
+
admina/domains/compliance/nis2.py,sha256=GBIBAuMk8GWNtzdHUsqY_HCXxZv-XS_gqOSd6-89F38,9555
|
|
37
|
+
admina/domains/compliance/oisg.py,sha256=BfKEIdTVnJs9CwyZ1ixn_XDpqAVF75M5Woh7UG2hYPE,21799
|
|
38
|
+
admina/domains/compliance/otel.py,sha256=Xykos-gd-UKgSWJhI1f2zPErjy9F7YyZ8saRaVnfO70,3719
|
|
39
|
+
admina/domains/data_sovereignty/__init__.py,sha256=-FlrmIhJCWyZV1MgGEdsiXvz8OsI9KLshKcvuD4V14c,1527
|
|
40
|
+
admina/domains/data_sovereignty/classification.py,sha256=HzKGRVyY35C1Rhlpg_xTCRnMrFya-TdeM9fgqX4fvgY,3408
|
|
41
|
+
admina/domains/data_sovereignty/pii.py,sha256=10kpXncjEt046EEXwUmyUijNm-NY2svZdt2Wpz8FfBg,10322
|
|
42
|
+
admina/domains/data_sovereignty/residency.py,sha256=sJe5eFmDrLC38wcyZAA5IPjnMPzjjyW24fnWR4knTM0,3998
|
|
43
|
+
admina/integrations/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
44
|
+
admina/integrations/_engines.py,sha256=8M03Ml8RIcD34S7nYOWgMa4ycxUxCfu-Jp9cG3vtTT0,1912
|
|
45
|
+
admina/integrations/cheshirecat/__init__.py,sha256=plfElOZSwS_udaeU_kpsf3Q6pkl1Rsc8l0y1cBEsdS0,610
|
|
46
|
+
admina/integrations/cheshirecat/admina-plugin/admina_governance.py,sha256=sJ2kLZ97hvaPXcWgsxymVxUakdTmyJDxB9Sr54g3qgI,6967
|
|
47
|
+
admina/integrations/crewai/__init__.py,sha256=plfElOZSwS_udaeU_kpsf3Q6pkl1Rsc8l0y1cBEsdS0,610
|
|
48
|
+
admina/integrations/crewai/callbacks.py,sha256=IcAr-ZGb55dsTs-jiIphFnNNArPFzVBbOsvqIos-Cds,11011
|
|
49
|
+
admina/integrations/langchain/__init__.py,sha256=plfElOZSwS_udaeU_kpsf3Q6pkl1Rsc8l0y1cBEsdS0,610
|
|
50
|
+
admina/integrations/langchain/callbacks.py,sha256=rNatIShLzJsoDIwwzmmUNNrTnDV-b_NKd2Zxh-_VHq0,11435
|
|
51
|
+
admina/integrations/n8n/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
52
|
+
admina/integrations/openclaw/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
53
|
+
admina/plugins/__init__.py,sha256=wZt7kaNCvvyby7Di54ye6cLjQHkZpr-qoNoUr6GygR8,1441
|
|
54
|
+
admina/plugins/base.py,sha256=RYKYYBCx5B6JaHXzMzMJcXOyxx-_0fRjBJrF-O6TDkg,20309
|
|
55
|
+
admina/plugins/registry.py,sha256=8e7DeRZEfh_RtuSfz02pnFh8bdfNGKYG7ZREMXgrXQw,12951
|
|
56
|
+
admina/plugins/builtin/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
57
|
+
admina/plugins/builtin/adapters/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
58
|
+
admina/plugins/builtin/adapters/ollama.py,sha256=3VvVs8ZY1rMJtHSYitZo0e6rIC1ZJMLBah4RqTJ-S1g,4200
|
|
59
|
+
admina/plugins/builtin/adapters/openai.py,sha256=3N9I4fV77u1TU6TMe0hcctyfQ3IlN7ok5b7jS-vSpF4,4942
|
|
60
|
+
admina/plugins/builtin/alerts/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
61
|
+
admina/plugins/builtin/alerts/log.py,sha256=sHPLKm6cqlJvo85OxXWKtpXFNURvP6CDY0Q-0fzxRi4,1939
|
|
62
|
+
admina/plugins/builtin/alerts/webhook.py,sha256=2uvuiY-yig-SM5tuhhgb1-AwGy3i8AIDcyRDZ1kZha8,3556
|
|
63
|
+
admina/plugins/builtin/auth/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
64
|
+
admina/plugins/builtin/auth/apikey.py,sha256=-O1-Aoqtvo8UBAUUHjnDWd5OpjolSdoOC1SU9ztVHDE,4934
|
|
65
|
+
admina/plugins/builtin/compliance/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
66
|
+
admina/plugins/builtin/compliance/eu_ai_act.py,sha256=kxDNVrb6KlL2OlfJL5dakwTdtGF9xfeXeqstSgqylCs,6326
|
|
67
|
+
admina/plugins/builtin/connectors/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
68
|
+
admina/plugins/builtin/connectors/chromadb.py,sha256=yDzXfLqt5uH7CY7f44k6ZsKcUu6-wEWy4x7JdPBBstc,4679
|
|
69
|
+
admina/plugins/builtin/connectors/filesystem.py,sha256=C_1R7y8GoWuv8UQ86xDpQZeTV1ZnB1-JEUr8vovo0ug,3498
|
|
70
|
+
admina/plugins/builtin/forensic/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
71
|
+
admina/plugins/builtin/forensic/filesystem.py,sha256=KR8Y0SXrtbDKZZizk-1HhUoBT3RTkd7pxWisCPD_sF4,5690
|
|
72
|
+
admina/plugins/builtin/forensic/minio.py,sha256=Q4Hvzrh-thyBSE34Qzq80QoMkHrNZuavZJN6PqECOcI,6021
|
|
73
|
+
admina/plugins/builtin/guards/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
+
admina/plugins/builtin/guards/guardrailsai_guard.py,sha256=gwsuvD11QU78P6fITCb0BVISXaifPvrfLkNXghHjMYg,6361
|
|
75
|
+
admina/plugins/builtin/pii/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
76
|
+
admina/plugins/builtin/pii/spacy_regex.py,sha256=zLnWCgw5WpRfPBmPk8PHFRMrP15qTSI1hJh9CRH5ve0,5422
|
|
77
|
+
admina/plugins/builtin/transports/__init__.py,sha256=zPw-YCDoFboSrXedS07rXp6Bzv20VHzhuZOf2kq0gsE,611
|
|
78
|
+
admina/plugins/builtin/transports/http_rest.py,sha256=OnIDDKRKWZXN6ixh9FxvftyiE1j7UK2GL2vOIUBu37A,3274
|
|
79
|
+
admina/plugins/builtin/transports/mcp.py,sha256=TB_X-yEVKmCKYFLJ8v5pufKp2LiuCB9m0PN68NcVtBA,5297
|
|
80
|
+
admina/proxy/__init__.py,sha256=VTZK_hqAR0Xkjm4i5VcXAEHMMCsZouZL5ywkr_uBJTI,637
|
|
81
|
+
admina/proxy/config.py,sha256=Q-q5QL27lokIh2sQhMLau8E8fOA5Eoj4KpVPwl5tGnA,8670
|
|
82
|
+
admina/proxy/engine_bridge.py,sha256=gMmz_iOuclKEMdl1-411KG2D0bM9yJiDEhk1fLQQnQY,10063
|
|
83
|
+
admina/proxy/governance.py,sha256=092-KHvmQ1Bo3_Wauk_wbMnkkynFnHAOlBXC_odJjSw,8233
|
|
84
|
+
admina/proxy/main.py,sha256=S_lpeKGelr2GoFWPT23VJcljAzgK80_qvcrshfPfCw4,58046
|
|
85
|
+
admina/proxy/multi_upstream.py,sha256=BeDjubYAt-_FBacCOFKWBpIiWn5bYxzUOoH5Vg0XMHc,5620
|
|
86
|
+
admina/proxy/state.py,sha256=bM2I2eg4GlrjtPxh8Yip60_8ThH3PieN5NByEbC3WF0,3418
|
|
87
|
+
admina/proxy/api/__init__.py,sha256=iUfA2ZbFFqFm5OtBqP4KLOAcYVXyNtJXddm0GQ029Yo,723
|
|
88
|
+
admina/proxy/api/dashboard.py,sha256=jIXUjCHp3XvZHdGH1BIRNcSxc6NhwIxSZmBYAfpgz5c,38775
|
|
89
|
+
admina/proxy/api/integration.py,sha256=XgGKxW3GdPPHjvo4Jqy4Upxi47CWINrpBG-AhDVJ0A4,5052
|
|
90
|
+
admina/sdk/__init__.py,sha256=nSsohr6iPt5iw3bEkm735UxQph3GfE_mVoV6JIcZX-Y,1093
|
|
91
|
+
admina/sdk/_compat.py,sha256=5_M9gSpEHKdX-hfTV1wBMqg5jDiAr_RNMBFQ8vMWhVw,1472
|
|
92
|
+
admina/sdk/compliance_kit.py,sha256=4OfR8miYh9-n5_yraj6X9k6lh9FGf9aZganFiQxig9Q,11780
|
|
93
|
+
admina/sdk/governed_agent.py,sha256=AoL8oBeGEiwAt0jc-u-BRcHKr8CJpDjfnPY7AO_WpCM,12373
|
|
94
|
+
admina/sdk/governed_data.py,sha256=3ZwgE6si0czfFvSW8yzEITHsjzxK95ho5x-zUdc56xg,14533
|
|
95
|
+
admina/sdk/governed_model.py,sha256=4l5IuuQwbqfNFBbfCVra1k_YMLjoSpsNfe9fhMB-VKs,8051
|
|
96
|
+
admina_framework-0.9.0.dist-info/licenses/LICENSE,sha256=89WG7dTGIbOGDHpfhHBV90HTgc6Og03pCsbhmnAttyc,10798
|
|
97
|
+
admina_framework-0.9.0.dist-info/licenses/NOTICE,sha256=49HL9ZdvC0wJlwS2hI0zLrLNfqjWVGPoKzm99xN1LOU,631
|
|
98
|
+
admina_framework-0.9.0.dist-info/METADATA,sha256=9hzgO7z5DystSZdevJvCpLALEHzuOdej5P4r90YZml8,24916
|
|
99
|
+
admina_framework-0.9.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
100
|
+
admina_framework-0.9.0.dist-info/entry_points.txt,sha256=Sf1t52Q-gi1LvznRHag4oYdFOWOlLv3H_ywHC-O0vv4,47
|
|
101
|
+
admina_framework-0.9.0.dist-info/top_level.txt,sha256=Ome4T3fbY7vR9rof7oSNpag8IDD3hU1pb7KJmycNTc8,7
|
|
102
|
+
admina_framework-0.9.0.dist-info/RECORD,,
|