admina-framework 0.9.3__tar.gz → 0.9.4__tar.gz

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.
Files changed (116) hide show
  1. {admina_framework-0.9.3/admina_framework.egg-info → admina_framework-0.9.4}/PKG-INFO +293 -139
  2. {admina_framework-0.9.3 → admina_framework-0.9.4}/README.md +290 -138
  3. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/__init__.py +1 -1
  4. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/forensic.py +108 -4
  5. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/engine_bridge.py +5 -60
  6. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/sdk/governed_model.py +3 -1
  7. {admina_framework-0.9.3 → admina_framework-0.9.4/admina_framework.egg-info}/PKG-INFO +293 -139
  8. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina_framework.egg-info/SOURCES.txt +2 -0
  9. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina_framework.egg-info/requires.txt +3 -0
  10. {admina_framework-0.9.3 → admina_framework-0.9.4}/pyproject.toml +34 -2
  11. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_benchmark_14us.py +9 -0
  12. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_domains.py +3 -26
  13. admina_framework-0.9.4/tests/test_firewall_parity.py +176 -0
  14. admina_framework-0.9.4/tests/test_forensic_blackbox.py +266 -0
  15. {admina_framework-0.9.3 → admina_framework-0.9.4}/LICENSE +0 -0
  16. {admina_framework-0.9.3 → admina_framework-0.9.4}/NOTICE +0 -0
  17. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/__init__.py +0 -0
  18. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/commands/__init__.py +0 -0
  19. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/main.py +0 -0
  20. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/admina.yaml.j2 +0 -0
  21. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/docker-compose.yml.j2 +0 -0
  22. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/env.j2 +0 -0
  23. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/main.py.j2 +0 -0
  24. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/plugin.py.j2 +0 -0
  25. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/plugin_pyproject.toml.j2 +0 -0
  26. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/plugin_readme.md.j2 +0 -0
  27. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/cli/templates/plugin_test.py.j2 +0 -0
  28. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/core/__init__.py +0 -0
  29. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/core/config.py +0 -0
  30. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/core/event_bus.py +0 -0
  31. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/core/secrets.py +0 -0
  32. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/core/types.py +0 -0
  33. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/dashboard/__init__.py +0 -0
  34. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/dashboard/static/heimdall.png +0 -0
  35. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/dashboard/static/index.html +0 -0
  36. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/dashboard/static/vendor/alpinejs.min.js +0 -0
  37. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/__init__.py +0 -0
  38. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/agent_security/__init__.py +0 -0
  39. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/agent_security/firewall.py +0 -0
  40. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/agent_security/loop_breaker.py +0 -0
  41. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/ai_infra/__init__.py +0 -0
  42. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/ai_infra/llm_engine.py +0 -0
  43. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/ai_infra/rag.py +0 -0
  44. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/ai_infra/webui.py +0 -0
  45. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/__init__.py +0 -0
  46. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/cross_regulation.py +0 -0
  47. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/eu_ai_act.py +0 -0
  48. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/gdpr.py +0 -0
  49. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/nis2.py +0 -0
  50. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/oisg.py +0 -0
  51. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/compliance/otel.py +0 -0
  52. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/data_sovereignty/__init__.py +0 -0
  53. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/data_sovereignty/classification.py +0 -0
  54. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/data_sovereignty/pii.py +0 -0
  55. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/domains/data_sovereignty/residency.py +0 -0
  56. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/__init__.py +0 -0
  57. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/_engines.py +0 -0
  58. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/cheshirecat/__init__.py +0 -0
  59. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/cheshirecat/admina-plugin/admina_governance.py +0 -0
  60. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/crewai/__init__.py +0 -0
  61. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/crewai/callbacks.py +0 -0
  62. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/langchain/__init__.py +0 -0
  63. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/langchain/callbacks.py +0 -0
  64. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/n8n/__init__.py +0 -0
  65. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/integrations/openclaw/__init__.py +0 -0
  66. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/__init__.py +0 -0
  67. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/base.py +0 -0
  68. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/__init__.py +0 -0
  69. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/adapters/__init__.py +0 -0
  70. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/adapters/ollama.py +0 -0
  71. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/adapters/openai.py +0 -0
  72. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/alerts/__init__.py +0 -0
  73. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/alerts/log.py +0 -0
  74. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/alerts/webhook.py +0 -0
  75. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/auth/__init__.py +0 -0
  76. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/auth/apikey.py +0 -0
  77. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/compliance/__init__.py +0 -0
  78. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/compliance/eu_ai_act.py +0 -0
  79. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/connectors/__init__.py +0 -0
  80. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/connectors/chromadb.py +0 -0
  81. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/connectors/filesystem.py +0 -0
  82. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/forensic/__init__.py +0 -0
  83. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/forensic/filesystem.py +0 -0
  84. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/forensic/minio.py +0 -0
  85. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/guards/__init__.py +0 -0
  86. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/guards/guardrailsai_guard.py +0 -0
  87. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/pii/__init__.py +0 -0
  88. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/pii/spacy_regex.py +0 -0
  89. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/transports/__init__.py +0 -0
  90. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/transports/http_rest.py +0 -0
  91. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/builtin/transports/mcp.py +0 -0
  92. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/plugins/registry.py +0 -0
  93. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/__init__.py +0 -0
  94. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/api/__init__.py +0 -0
  95. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/api/dashboard.py +0 -0
  96. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/api/integration.py +0 -0
  97. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/config.py +0 -0
  98. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/governance.py +0 -0
  99. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/main.py +0 -0
  100. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/multi_upstream.py +0 -0
  101. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/proxy/state.py +0 -0
  102. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/py.typed +0 -0
  103. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/sdk/__init__.py +0 -0
  104. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/sdk/_compat.py +0 -0
  105. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/sdk/compliance_kit.py +0 -0
  106. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/sdk/governed_agent.py +0 -0
  107. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina/sdk/governed_data.py +0 -0
  108. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina_framework.egg-info/dependency_links.txt +0 -0
  109. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina_framework.egg-info/entry_points.txt +0 -0
  110. {admina_framework-0.9.3 → admina_framework-0.9.4}/admina_framework.egg-info/top_level.txt +0 -0
  111. {admina_framework-0.9.3 → admina_framework-0.9.4}/setup.cfg +0 -0
  112. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_core_config.py +0 -0
  113. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_governance_pipeline.py +0 -0
  114. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_mcp_transport.py +0 -0
  115. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_proxy_security.py +0 -0
  116. {admina_framework-0.9.3 → admina_framework-0.9.4}/tests/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: admina-framework
3
- Version: 0.9.3
3
+ Version: 0.9.4
4
4
  Summary: Admina — governed AI development framework
5
5
  Author-email: Stefano Noferi <info@admina.org>
6
6
  Maintainer-email: Stefano Noferi <info@admina.org>
@@ -52,43 +52,109 @@ Requires-Dist: opentelemetry-api<2,>=1.20; extra == "telemetry"
52
52
  Requires-Dist: opentelemetry-sdk<2,>=1.20; extra == "telemetry"
53
53
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2,>=1.20; extra == "telemetry"
54
54
  Requires-Dist: opentelemetry-instrumentation-fastapi<1,>=0.40b0; extra == "telemetry"
55
+ Provides-Extra: rust
56
+ Requires-Dist: admina-core<0.10,>=0.9.3; extra == "rust"
55
57
  Provides-Extra: full
56
58
  Requires-Dist: admina-framework[nlp,proxy,telemetry]; extra == "full"
57
59
  Dynamic: license-file
58
60
 
59
- # Admina — Governed AI Development Framework
61
+ <!--
62
+ <p align="center">
63
+ <img src="resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
64
+ </p>
65
+ -->
60
66
 
61
- **Install once, get governed AI. The open framework for building AI applications that are governed by design.**
67
+ <p align="center">
68
+ <strong>Install once, get governed AI.</strong><br>
69
+ <em>PII redacted · Injections blocked · Loops broken · Actions audited · EU AI Act tracked</em>
70
+ </p>
62
71
 
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.
72
+ <p align="center">
73
+ <a href="https://pypi.org/project/admina-framework/"><img src="https://img.shields.io/pypi/v/admina-framework?style=flat-square&color=32CD32" alt="PyPI version"></a>
74
+ &nbsp;<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
75
+ &nbsp;<img src="https://img.shields.io/badge/python-3.11%2B-32CD32?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
76
+ &nbsp;<img src="https://img.shields.io/badge/platform-Linux%20%7C%20macOS-6C757D?style=flat-square" alt="Platform">
77
+ </p>
64
78
 
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.
79
+ <p align="center">
80
+ <a href="https://github.com/admina-org/admina/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/admina-org/admina/ci.yml?style=flat-square&label=CI&logo=githubactions&logoColor=white" alt="CI"></a>
81
+ &nbsp;<a href="https://github.com/admina-org/admina/actions/workflows/release.yml"><img src="https://img.shields.io/github/actions/workflow/status/admina-org/admina/release.yml?style=flat-square&label=release" alt="Release"></a>
82
+ &nbsp;<a href="https://github.com/admina-org/admina/actions/workflows/security.yml"><img src="https://img.shields.io/github/actions/workflow/status/admina-org/admina/security.yml?style=flat-square&label=security%20scan&logo=shield&logoColor=white" alt="Security scan"></a>
83
+ &nbsp;<a href="https://pypi.org/project/admina-framework/"><img src="https://img.shields.io/pypi/dm/admina-framework?style=flat-square&label=downloads" alt="PyPI downloads"></a>
84
+ </p>
85
+
86
+ <p align="center">
87
+ <a href="https://deepwiki.com/admina-org/admina"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
88
+ &nbsp;<a href="https://github.com/admina-org/admina/discussions"><img src="https://img.shields.io/github/discussions/admina-org/admina?style=flat-square&logo=github" alt="Discussions"></a>
89
+ &nbsp;<a href="https://admina.org/docs"><img src="https://img.shields.io/badge/docs-admina.org-blue?style=flat-square" alt="Docs"></a>
90
+ </p>
91
+
92
+ <p align="center">
93
+ <a href="#quick-start"><img src="https://img.shields.io/badge/⚡%20Quick%20Start-2%20min-32CD32?style=for-the-badge" alt="Quick Start" height="40"></a>
94
+ &nbsp;<a href="#see-it-in-action"><img src="https://img.shields.io/badge/▶%20Live%20Demo-Dashboard-3B82F6?style=for-the-badge" alt="Live Demo" height="40"></a>
95
+ &nbsp;<a href="https://admina.org/docs"><img src="https://img.shields.io/badge/📖%20Read%20the%20Docs-admina.org-6C757D?style=for-the-badge" alt="Docs" height="40"></a>
96
+ &nbsp;<a href="https://deepwiki.com/admina-org/admina"><img src="https://img.shields.io/badge/🤖%20Ask%20DeepWiki-AI%20wiki-7C3AED?style=for-the-badge" alt="DeepWiki" height="40"></a>
97
+ </p>
98
+
99
+ <p align="center">
100
+ <a href="https://github.com/admina-org/admina/stargazers"><img src="https://img.shields.io/github/stars/admina-org/admina?style=social" alt="Stars"></a>
101
+ &nbsp;<a href="https://github.com/admina-org/admina/network/members"><img src="https://img.shields.io/github/forks/admina-org/admina?style=social" alt="Forks"></a>
102
+ &nbsp;<a href="https://github.com/admina-org/admina/graphs/contributors"><img src="https://img.shields.io/github/contributors/admina-org/admina?style=flat-square&label=contributors" alt="Contributors"></a>
103
+ &nbsp;<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
104
+ </p>
105
+
106
+ ---
82
107
 
83
- [![PyPI version](https://img.shields.io/pypi/v/admina-framework.svg)](https://pypi.org/project/admina-framework/)
84
- [![PyPI downloads](https://img.shields.io/pypi/dm/admina-framework.svg)](https://pypi.org/project/admina-framework/)
85
- [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
86
- [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://python.org)
87
- [![Rust](https://img.shields.io/badge/Rust-Engine-orange.svg)](core-rust/)
88
- [![CI](https://github.com/admina-org/admina/actions/workflows/ci.yml/badge.svg)](https://github.com/admina-org/admina/actions/workflows/ci.yml)
89
- [![Docs](https://img.shields.io/badge/docs-admina.org-blue.svg)](https://admina.org/docs)
90
- [![Version](https://img.shields.io/badge/version-0.9.0-blue.svg)](CHANGELOG.md)
91
- [![Platforms](https://img.shields.io/badge/platforms-Linux%20%7C%20macOS-lightgrey.svg)](CONTRIBUTING.md#supported-platforms)
108
+ ## See it in action
109
+
110
+ **Scaffold a project and boot the governed proxy + dashboard — no Docker:**
111
+
112
+ <p align="center">
113
+ <img src="resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
114
+ </p>
115
+
116
+ **Wrap any model in a few lines — PII is stripped before the model ever sees it:**
117
+
118
+ <p align="center">
119
+ <img src="resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
120
+ </p>
121
+
122
+ **The governance dashboard, before and after simulated traffic — Admina Score 40 → 60:**
123
+
124
+ <table>
125
+ <tr>
126
+ <td align="center" width="50%">
127
+ <img src="resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
128
+ <em>First boot — Admina Score <strong>40/100</strong></em>
129
+ </td>
130
+ <td align="center" width="50%">
131
+ <img src="resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
132
+ <em>After <code>python scripts/simulate.py</code> — <strong>60/100</strong></em>
133
+ </td>
134
+ </tr>
135
+ </table>
136
+
137
+ ---
138
+
139
+ ## Why Admina?
140
+
141
+ | | Plain LLM / RAG app | **With Admina** |
142
+ | :----------------------------- | :----------------------------------- | :----------------------------------------------------------------------- |
143
+ | PII in prompts/responses | leaks unless you build redaction | **Redacted by default** — email, SSN, IBAN, phone, IP, names |
144
+ | Prompt injections | reach the model | **Blocked at the proxy** — 15 regex + Rust heuristic scoring |
145
+ | Agent tool calls | unaudited | **Validated pre-action + logged post-action** (forensic chain) |
146
+ | Loop / runaway agents | burn tokens / budget | **Broken** — TF-IDF cosine similarity over the action stream |
147
+ | EU AI Act readiness | manual | **Gap analysis + risk classification** built-in |
148
+ | Audit trail | logs you hope nobody deletes | **SHA-256 hash chain** — tamper-evident by design |
149
+ | Adding governance to existing code | rewrite the call sites | **Zero code changes** via proxy, or 3 lines via SDK |
150
+ | Performance overhead | unknown | **~6 µs per pipeline** (Rust engine), in-process or networked |
151
+ | License | varies | **Apache 2.0**, open core |
152
+
153
+ > Admina is **decision-support and defense-in-depth**, not legal advice. See [Compliance scope](#compliance-scope) for the full disclaimer and limitations.
154
+
155
+ ---
156
+
157
+ ## 30-second example
92
158
 
93
159
  ```python
94
160
  from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
@@ -130,7 +196,8 @@ pip install "admina-framework[full]"
130
196
  python -m spacy download en_core_web_sm # for [full] only
131
197
 
132
198
  # Optional: Rust-accelerated engine (auto-detected at runtime).
133
- pip install admina-core
199
+ # Opt-in extra — pulls in the admina-core wheel from PyPI.
200
+ pip install "admina-framework[rust]"
134
201
 
135
202
  # Advanced: SDK only (no proxy, no dashboard, no `admina dev`).
136
203
  # Use this when embedding the SDK into another service and you don't
@@ -142,10 +209,17 @@ pip install admina-framework
142
209
  > name is `admina` (e.g. `from admina import GovernedModel`). This is
143
210
  > a normal Python pattern — same as `python-dateutil` → `import dateutil`.
144
211
 
145
- > The Rust engine is an optional accelerator. `pip install admina-framework`
146
- > ships only the pure-Python implementation; Admina auto-detects the
147
- > Rust engine at runtime and falls back to the Python implementation
148
- > if it's not installed.
212
+ > The Rust engine is an **optional, opt-in** accelerator. The default
213
+ > `pip install admina-framework` ships only the pure-Python implementation;
214
+ > `admina-framework[rust]` adds the `admina-core` wheel, which Admina
215
+ > auto-detects at runtime (falling back to pure Python if it's absent).
216
+ >
217
+ > The default is pure Python on purpose: the Python injection firewall
218
+ > currently has **broader detection coverage** than the Rust one (it adds
219
+ > obfuscation-normalisation — homoglyph, leetspeak, base64, ROT13 — and a
220
+ > wider multilingual pattern set). Enable `[rust]` when per-request latency
221
+ > matters more than that extra coverage. See
222
+ > [Performance](#performance--hybrid-python--rust-engine) for the trade-off.
149
223
 
150
224
  ### Or install from source
151
225
 
@@ -180,28 +254,21 @@ Dashboard: [http://localhost:3000](http://localhost:3000) | API docs: [http://lo
180
254
 
181
255
  ## Architecture
182
256
 
183
- Admina is organized into 4 governance domains:
184
-
185
- | Domain | What it governs | Key features |
186
- |--------|----------------|--------------|
187
- | **Data Sovereignty** | Where data lives and how it's protected | PII redaction (spaCy + regex), residency zones, data classification |
188
- | **AI Infrastructure** | LLM and RAG stack | Ollama backend, ChromaDB vectors, Open WebUI, GPU auto-detect |
189
- | **Agent Security** | What agents can do | Injection firewall (Rust), loop breaker, proxy governance |
190
- | **Compliance** | Regulatory obligations | EU AI Act (Art. 6-15), forensic black box (SHA-256 chain), OTEL |
191
-
192
- Every governance feature works in **dual mode** — both via SDK (in-process) and proxy (network):
193
-
194
- ```
195
- SDK Mode: Proxy Mode:
196
- your code AI Agent
197
- | |
198
- GovernedModel.ask() POST /mcp
199
- | |
200
- [governance pipeline] [governance pipeline]
201
- | |
202
- Ollama / OpenAI MCP Server / LLM
257
+ Admina runs in **dual mode** — in-process via SDK or networked via proxy — but both modes feed the **same governance pipeline**.
258
+
259
+ ```mermaid
260
+ flowchart LR
261
+ A1["your code → GovernedModel.ask()"] --> P
262
+ A2["AI agent → POST /mcp"] --> P
263
+ P["governance pipeline"]
264
+ P --> U1["Ollama / OpenAI"]
265
+ P --> U2["MCP server / LLM"]
266
+ classDef pipe fill:#0ea5e9,stroke:#0369a1,color:#fff;
267
+ class P pipe;
203
268
  ```
204
269
 
270
+ Pipeline (identical in both modes): `PII redaction → firewall → loop-breaker → audit → forensic chain (SHA-256) → OTEL`
271
+
205
272
  ## The 4 Governance Domains
206
273
 
207
274
  | Domain | Capabilities | Engine |
@@ -267,49 +334,6 @@ dependency: one uvicorn serves the proxy API and the dashboard SPA on the
267
334
  same port. Use `--stack` for the production-like Docker compose, or
268
335
  `--with-llm` to also boot local LLM services.
269
336
 
270
- ## Forensic backend — choose deliberately
271
-
272
- The forensic blackbox (the SHA-256 hash chain that makes the audit trail
273
- tamper-evident) supports four backends. Read this before picking one for
274
- production.
275
-
276
- | Backend | License | When to use | Caveats |
277
- |---------|---------|-------------|---------|
278
- | **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
279
- | **`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`. |
280
- | **`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. |
281
- | **`minio`** *(legacy)* | see below ⚠️ | Backwards compatibility with existing MinIO clusters | Two distinct concerns; read the disclaimer. |
282
-
283
- > ⚠️ **MinIO disclaimer — what users of Admina need to know.**
284
- >
285
- > MinIO has two separate licensing/maintenance issues that can affect
286
- > downstream users of Admina, even though Admina itself is Apache 2.0:
287
- >
288
- > 1. **MinIO Server is AGPLv3.** If you deploy MinIO Server as part of a
289
- > network-accessible service (e.g. a SaaS that exposes Admina's
290
- > dashboard or API to the public Internet), AGPLv3's network clause
291
- > can be read to require you to publish the source code of the
292
- > *combined* application that interacts with MinIO over the network.
293
- > The MinIO commercial license removes this obligation, but is paid.
294
- > This is **not** an Admina obligation — Apache 2.0 is permissive —
295
- > but it is an obligation MinIO Server itself imposes on whoever
296
- > runs it.
297
- > 2. **The MinIO Python SDK has been archived.** No more security
298
- > patches, no support for new Python releases. Continuing to depend
299
- > on it is a supply-chain risk.
300
- >
301
- > **Recommendation:** for new deployments, use `FORENSIC_BACKEND=s3`.
302
- > The `boto3` client is Apache 2.0 and works against any S3-compatible
303
- > service. Two open-source FOSS-friendly options that don't trigger the
304
- > AGPL network clause for typical Admina deployments:
305
- > - **SeaweedFS** (Apache 2.0, S3 gateway, lightweight, single binary)
306
- > - **Garage** (AGPLv3, but as a backend — Garage's AGPL applies to
307
- > Garage itself, not to applications that connect to it via S3 API)
308
- >
309
- > Existing MinIO deployments keep working through `FORENSIC_BACKEND=minio`,
310
- > but plan a migration. The `minio` backend will be removed in a future
311
- > release.
312
-
313
337
  ## Dashboard
314
338
 
315
339
  Real-time governance dashboard on port 3000:
@@ -331,19 +355,38 @@ cp admina.yaml.example admina.yaml # Copy and customize
331
355
 
332
356
  See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
333
357
 
334
- ### Environment variables (Docker / .env)
358
+ <a id="compliance-scope"></a>
335
359
 
336
- | Variable | Default | Description |
337
- |----------|---------|-------------|
338
- | `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
339
- | `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
340
- | `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
341
- | `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
342
- | `LOG_LEVEL` | `INFO` | Logging verbosity |
360
+ <details open>
361
+ <summary><strong>⚖️ Compliance scope &amp; legal disclaimer</strong> — what Admina does and does not do legally</summary>
362
+
363
+ <br>
364
+
365
+ > Admina is a self-assessment and defense-in-depth tool. The EU AI Act
366
+ > gap-analysis and risk classification features are **decision-support
367
+ > aids, not legal advice**. They do not replace the conformity assessment
368
+ > required under EU AI Act Art. 43 for high-risk systems, nor the
369
+ > involvement of a notified body where the regulation requires one.
370
+ >
371
+ > **EU AI Act timeline (after the Omnibus VII agreement of 7 May 2026):**
372
+ > Art. 5 prohibitions in force since 2 February 2025; GPAI obligations
373
+ > in force since 2 August 2025; Art. 50 transparency for synthetic
374
+ > content and the new NCII / synthetic-CSAM prohibition apply from
375
+ > 2 December 2026; **Annex III high-risk obligations from 2 December
376
+ > 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
377
+ > 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
378
+ > ships with Admina as `admina.domains.compliance.eu_ai_act.EU_AI_ACT_DEADLINES`.
379
+ > See [`MODEL_CARD.md`](MODEL_CARD.md) for the full scope, limitations,
380
+ > and known failure modes of every Admina component.
381
+
382
+ </details>
343
383
 
344
384
  ## Integrations
345
385
 
346
- ### GuardrailsAI
386
+ <details>
387
+ <summary><strong>GuardrailsAI</strong> — ML-based content validation as a governance plugin</summary>
388
+
389
+ <br>
347
390
 
348
391
  ML-based content validation (toxic language, jailbreak, bias, PII via Presidio) as a governance domain plugin:
349
392
 
@@ -357,7 +400,12 @@ pip install <your-guardrails-ai-wheel>
357
400
 
358
401
  Enable in `admina.yaml` under `agent_security.domains.guardrailsai`. All inference runs locally by default — no data leaves the deployment perimeter.
359
402
 
360
- ### OpenClaw
403
+ </details>
404
+
405
+ <details>
406
+ <summary><strong>OpenClaw</strong> — govern OpenClaw agent actions via pre/post-action hooks</summary>
407
+
408
+ <br>
361
409
 
362
410
  Govern OpenClaw agent actions through the Admina proxy. Every tool call, shell command, and API request is validated before execution:
363
411
 
@@ -368,9 +416,12 @@ chmod +x setup.sh && ./setup.sh
368
416
 
369
417
  The skill uses `POST /api/v1/validate` (pre-action) and `POST /api/v1/audit` (post-action) endpoints.
370
418
 
371
- ### n8n
419
+ </details>
372
420
 
373
- Community nodes for n8n workflow automation:
421
+ <details>
422
+ <summary><strong>n8n</strong> — community nodes for n8n workflow automation</summary>
423
+
424
+ <br>
374
425
 
375
426
  | Node | Purpose |
376
427
  |------|---------|
@@ -380,9 +431,14 @@ Community nodes for n8n workflow automation:
380
431
 
381
432
  Install: `npm install n8n-nodes-admina` in your n8n instance.
382
433
 
383
- ### Cheshire Cat AI
434
+ </details>
435
+
436
+ <details>
437
+ <summary><strong>Cheshire Cat AI</strong> — govern all Cheshire Cat interactions via Python hooks</summary>
384
438
 
385
- Govern all Cheshire Cat interactions via three Python hooks (`agent_fast_reply`, `before_cat_sends_message`, `before_cat_recalls_memories`):
439
+ <br>
440
+
441
+ Three Python hooks (`agent_fast_reply`, `before_cat_sends_message`, `before_cat_recalls_memories`):
386
442
 
387
443
  ```bash
388
444
  cd integrations/cheshirecat/admina-plugin
@@ -390,9 +446,14 @@ cd integrations/cheshirecat/admina-plugin
390
446
  # Copy plugin into Cheshire Cat plugins/ directory
391
447
  ```
392
448
 
393
- ### LangChain
449
+ </details>
394
450
 
395
- Drop-in callback handler — governs every LLM call and tool invocation in-process:
451
+ <details>
452
+ <summary><strong>LangChain</strong> — drop-in callback handler</summary>
453
+
454
+ <br>
455
+
456
+ Governs every LLM call and tool invocation in-process:
396
457
 
397
458
  ```python
398
459
  from admina.integrations.langchain.callbacks import AdminaCallbackHandler
@@ -401,9 +462,12 @@ handler = AdminaCallbackHandler()
401
462
  llm = ChatOpenAI(callbacks=[handler])
402
463
  ```
403
464
 
404
- ### CrewAI
465
+ </details>
405
466
 
406
- Step and task callbacks for multi-agent governance:
467
+ <details>
468
+ <summary><strong>CrewAI</strong> — step and task callbacks for multi-agent governance</summary>
469
+
470
+ <br>
407
471
 
408
472
  ```python
409
473
  from admina.integrations.crewai.callbacks import admina_step_callback, admina_task_callback
@@ -412,16 +476,32 @@ agent = Agent(role="Researcher", step_callback=admina_step_callback)
412
476
  crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
413
477
  ```
414
478
 
415
- See [full integration docs](docs/guides/integrations.md) for details.
479
+ </details>
416
480
 
417
- ## Hybrid Python + Rust Engine
481
+ See [full integration docs](docs/guides/integrations.md) for details.
418
482
 
419
- The Rust core engine is an optional accelerator. `pip install admina-framework`
420
- ships only the pure-Python implementation; to enable the Rust engine
421
- build `admina_core` separately (`maturin develop --release
422
- --manifest-path core-rust/Cargo.toml`, see [CONTRIBUTING.md](CONTRIBUTING.md)).
423
- At runtime Admina auto-detects whichever is available and falls back
424
- transparently to Python if the Rust extension is not installed.
483
+ ## Performance — Hybrid Python + Rust engine
484
+
485
+ The Rust core engine is an optional accelerator. The default
486
+ `pip install admina-framework` ships only the pure-Python implementation;
487
+ enable the Rust engine with the opt-in extra `pip install
488
+ "admina-framework[rust]"` (or build from source for local development —
489
+ `maturin develop --release --manifest-path core-rust/Cargo.toml`, see
490
+ [CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
491
+ whichever is available and falls back transparently to Python if the Rust
492
+ extension is not installed.
493
+
494
+ > **Detection trade-off (why Rust is opt-in, not the default).** The Rust
495
+ > firewall is faster but currently detects a narrower set of attacks than
496
+ > the pure-Python firewall. The Python engine normalises common evasions
497
+ > before matching (homoglyph, leetspeak, char-by-char hyphenation, base64,
498
+ > ROT13) and carries a wider multilingual pattern set; the Rust engine does
499
+ > not yet. On an internal 14-attack evasion corpus the Python firewall
500
+ > blocks all 14 while the Rust firewall blocks 7 (the plain-text and
501
+ > multilingual-keyword attacks), with no false positives on either side.
502
+ > Full Rust↔Python detection parity is tracked for 0.10. Until then, keep
503
+ > the default (pure Python) when detection breadth matters; opt into
504
+ > `[rust]` when latency dominates.
425
505
 
426
506
  Measured numbers below assume the Rust engine is loaded:
427
507
 
@@ -469,7 +549,87 @@ python scripts/simulate.py --duration 300 --rate 10
469
549
 
470
550
  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.
471
551
 
472
- ## Project Structure
552
+ ## Infrastructure & Services
553
+
554
+ The full stack (`docker compose up`) runs 9 containers:
555
+
556
+ | Port | Service | Description |
557
+ |------|---------|-------------|
558
+ | `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
559
+ | `3000` | Dashboard | Real-time governance web UI |
560
+ | `3001` | Grafana | Metrics dashboards |
561
+ | `9090` | MinIO Console | Forensic storage browser |
562
+ | `4317` | OTEL Collector | OTLP gRPC ingestion |
563
+
564
+ ClickHouse and Redis are internal only (not exposed to host).
565
+
566
+ <details>
567
+ <summary><strong>🗄️ Forensic backends (4 options) — choose deliberately</strong></summary>
568
+
569
+ <br>
570
+
571
+ The forensic blackbox (the SHA-256 hash chain that makes the audit trail
572
+ tamper-evident) supports four backends. Read this before picking one for
573
+ production.
574
+
575
+ | Backend | License | When to use | Caveats |
576
+ |---------|---------|-------------|---------|
577
+ | **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
578
+ | **`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`. |
579
+ | **`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. |
580
+ | **`minio`** *(legacy)* | see below ⚠️ | Backwards compatibility with existing MinIO clusters | Two distinct concerns; read the disclaimer. |
581
+
582
+ > ⚠️ **MinIO disclaimer — what users of Admina need to know.**
583
+ >
584
+ > MinIO has two separate licensing/maintenance issues that can affect
585
+ > downstream users of Admina, even though Admina itself is Apache 2.0:
586
+ >
587
+ > 1. **MinIO Server is AGPLv3.** If you deploy MinIO Server as part of a
588
+ > network-accessible service (e.g. a SaaS that exposes Admina's
589
+ > dashboard or API to the public Internet), AGPLv3's network clause
590
+ > can be read to require you to publish the source code of the
591
+ > *combined* application that interacts with MinIO over the network.
592
+ > The MinIO commercial license removes this obligation, but is paid.
593
+ > This is **not** an Admina obligation — Apache 2.0 is permissive —
594
+ > but it is an obligation MinIO Server itself imposes on whoever
595
+ > runs it.
596
+ > 2. **The MinIO Python SDK has been archived.** No more security
597
+ > patches, no support for new Python releases. Continuing to depend
598
+ > on it is a supply-chain risk.
599
+ >
600
+ > **Recommendation:** for new deployments, use `FORENSIC_BACKEND=s3`.
601
+ > The `boto3` client is Apache 2.0 and works against any S3-compatible
602
+ > service. Two open-source FOSS-friendly options that don't trigger the
603
+ > AGPL network clause for typical Admina deployments:
604
+ > - **SeaweedFS** (Apache 2.0, S3 gateway, lightweight, single binary)
605
+ > - **Garage** (AGPLv3, but as a backend — Garage's AGPL applies to
606
+ > Garage itself, not to applications that connect to it via S3 API)
607
+ >
608
+ > Existing MinIO deployments keep working through `FORENSIC_BACKEND=minio`,
609
+ > but plan a migration. The `minio` backend will be removed in a future
610
+ > release.
611
+
612
+ </details>
613
+
614
+ <details>
615
+ <summary><strong>⚙️ Environment variables (Docker / .env)</strong></summary>
616
+
617
+ <br>
618
+
619
+ | Variable | Default | Description |
620
+ |----------|---------|-------------|
621
+ | `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
622
+ | `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
623
+ | `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
624
+ | `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
625
+ | `LOG_LEVEL` | `INFO` | Logging verbosity |
626
+
627
+ </details>
628
+
629
+ <details>
630
+ <summary><strong>📁 Full project structure</strong></summary>
631
+
632
+ <br>
473
633
 
474
634
  ```
475
635
  admina/
@@ -503,7 +663,12 @@ admina/
503
663
  +-- docker-compose.yml Full stack deployment (9 containers)
504
664
  ```
505
665
 
506
- ## API
666
+ </details>
667
+
668
+ <details>
669
+ <summary><strong>🔌 API examples (curl)</strong></summary>
670
+
671
+ <br>
507
672
 
508
673
  ```bash
509
674
  # Health check (always public)
@@ -536,19 +701,7 @@ curl -X POST http://localhost:8080/api/compliance/classify \
536
701
  curl http://localhost:8080/api/dashboard/score
537
702
  ```
538
703
 
539
- ## Infrastructure & Services
540
-
541
- The full stack (`docker compose up`) runs 9 containers:
542
-
543
- | Port | Service | Description |
544
- |------|---------|-------------|
545
- | `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
546
- | `3000` | Dashboard | Real-time governance web UI |
547
- | `3001` | Grafana | Metrics dashboards |
548
- | `9090` | MinIO Console | Forensic storage browser |
549
- | `4317` | OTEL Collector | OTLP gRPC ingestion |
550
-
551
- ClickHouse and Redis are internal only (not exposed to host).
704
+ </details>
552
705
 
553
706
  ## Project documents
554
707
 
@@ -558,6 +711,7 @@ ClickHouse and Redis are internal only (not exposed to host).
558
711
  - [CHANGELOG.md](CHANGELOG.md) — release notes
559
712
  - [SECURITY.md](SECURITY.md) — coordinated disclosure policy
560
713
  - [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
714
+ - **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
561
715
 
562
716
  Admina is Apache 2.0. Contributions are welcome.
563
717