admina-framework 0.9.4__tar.gz → 0.10.0__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 (135) hide show
  1. {admina_framework-0.9.4 → admina_framework-0.10.0}/NOTICE +1 -1
  2. {admina_framework-0.9.4/admina_framework.egg-info → admina_framework-0.10.0}/PKG-INFO +72 -70
  3. {admina_framework-0.9.4 → admina_framework-0.10.0}/README.md +52 -65
  4. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/__init__.py +1 -1
  5. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/main.py +73 -9
  6. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/admina.yaml.j2 +2 -2
  7. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/docker-compose.yml.j2 +5 -30
  8. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/env.j2 +0 -2
  9. admina_framework-0.10.0/admina/cli/templates/plugin.py.j2 +117 -0
  10. admina_framework-0.10.0/admina/cli/templates/plugin_pyproject.toml.j2 +21 -0
  11. admina_framework-0.10.0/admina/cli/templates/plugin_test.py.j2 +27 -0
  12. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/config.py +22 -17
  13. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/secrets.py +0 -4
  14. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/static/index.html +0 -4
  15. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/rag.py +49 -6
  16. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/__init__.py +3 -3
  17. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/eu_ai_act.py +26 -2
  18. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/forensic.py +88 -116
  19. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/oisg.py +17 -5
  20. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/pii.py +18 -0
  21. {admina_framework-0.9.4/admina/proxy → admina_framework-0.10.0/admina/domains}/governance.py +81 -11
  22. admina_framework-0.10.0/admina/engines/__init__.py +431 -0
  23. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/_engines.py +12 -9
  24. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/base.py +20 -6
  25. admina_framework-0.10.0/admina/plugins/builtin/adapters/anthropic.py +142 -0
  26. admina_framework-0.10.0/admina/plugins/builtin/adapters/bedrock.py +157 -0
  27. admina_framework-0.10.0/admina/plugins/builtin/adapters/gemini.py +137 -0
  28. admina_framework-0.10.0/admina/plugins/builtin/adapters/mistral.py +143 -0
  29. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/adapters/ollama.py +6 -6
  30. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/adapters/openai.py +6 -6
  31. admina_framework-0.10.0/admina/plugins/builtin/adapters/vllm.py +85 -0
  32. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/auth/apikey.py +59 -17
  33. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/compliance/eu_ai_act.py +2 -0
  34. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/connectors/chromadb.py +2 -5
  35. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/connectors/filesystem.py +2 -5
  36. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/forensic/filesystem.py +94 -26
  37. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/pii/spacy_regex.py +30 -3
  38. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/registry.py +19 -16
  39. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/api/dashboard.py +37 -34
  40. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/api/integration.py +90 -40
  41. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/config.py +18 -22
  42. admina_framework-0.10.0/admina/proxy/engine_bridge.py +44 -0
  43. admina_framework-0.10.0/admina/proxy/governance.py +37 -0
  44. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/main.py +195 -90
  45. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/state.py +0 -2
  46. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/__init__.py +6 -0
  47. admina_framework-0.10.0/admina/sdk/errors.py +27 -0
  48. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/governed_agent.py +47 -103
  49. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/governed_data.py +38 -40
  50. admina_framework-0.10.0/admina/sdk/governed_model.py +325 -0
  51. admina_framework-0.10.0/admina/sdk/retry.py +127 -0
  52. {admina_framework-0.9.4 → admina_framework-0.10.0/admina_framework.egg-info}/PKG-INFO +72 -70
  53. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/SOURCES.txt +13 -1
  54. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/requires.txt +27 -4
  55. {admina_framework-0.9.4 → admina_framework-0.10.0}/pyproject.toml +28 -10
  56. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_core_config.py +57 -10
  57. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_domains.py +17 -2
  58. admina_framework-0.10.0/tests/test_domains_governance.py +317 -0
  59. admina_framework-0.10.0/tests/test_engines.py +309 -0
  60. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_forensic_blackbox.py +161 -0
  61. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_governance_pipeline.py +9 -3
  62. admina_framework-0.10.0/tests/test_proxy_mcp_response_pii.py +149 -0
  63. admina_framework-0.10.0/tests/test_proxy_plugins.py +93 -0
  64. admina_framework-0.10.0/tests/test_proxy_security.py +462 -0
  65. admina_framework-0.9.4/admina/cli/templates/plugin.py.j2 +0 -145
  66. admina_framework-0.9.4/admina/cli/templates/plugin_pyproject.toml.j2 +0 -15
  67. admina_framework-0.9.4/admina/cli/templates/plugin_test.py.j2 +0 -48
  68. admina_framework-0.9.4/admina/plugins/builtin/forensic/minio.py +0 -180
  69. admina_framework-0.9.4/admina/proxy/engine_bridge.py +0 -251
  70. admina_framework-0.9.4/admina/sdk/governed_model.py +0 -243
  71. admina_framework-0.9.4/tests/test_proxy_security.py +0 -219
  72. {admina_framework-0.9.4 → admina_framework-0.10.0}/LICENSE +0 -0
  73. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/__init__.py +0 -0
  74. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/commands/__init__.py +0 -0
  75. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/main.py.j2 +0 -0
  76. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/cli/templates/plugin_readme.md.j2 +0 -0
  77. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/__init__.py +0 -0
  78. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/event_bus.py +0 -0
  79. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/core/types.py +0 -0
  80. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/__init__.py +0 -0
  81. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/static/heimdall.png +0 -0
  82. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/dashboard/static/vendor/alpinejs.min.js +0 -0
  83. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/__init__.py +0 -0
  84. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/agent_security/__init__.py +0 -0
  85. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/agent_security/firewall.py +0 -0
  86. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/agent_security/loop_breaker.py +0 -0
  87. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/__init__.py +0 -0
  88. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/llm_engine.py +0 -0
  89. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/ai_infra/webui.py +0 -0
  90. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/cross_regulation.py +0 -0
  91. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/gdpr.py +0 -0
  92. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/nis2.py +0 -0
  93. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/compliance/otel.py +0 -0
  94. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/__init__.py +0 -0
  95. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/classification.py +0 -0
  96. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/domains/data_sovereignty/residency.py +0 -0
  97. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/__init__.py +0 -0
  98. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/cheshirecat/__init__.py +0 -0
  99. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/cheshirecat/admina-plugin/admina_governance.py +0 -0
  100. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/crewai/__init__.py +0 -0
  101. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/crewai/callbacks.py +0 -0
  102. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/langchain/__init__.py +0 -0
  103. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/langchain/callbacks.py +0 -0
  104. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/n8n/__init__.py +0 -0
  105. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/integrations/openclaw/__init__.py +0 -0
  106. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/__init__.py +0 -0
  107. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/__init__.py +0 -0
  108. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/adapters/__init__.py +0 -0
  109. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/alerts/__init__.py +0 -0
  110. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/alerts/log.py +0 -0
  111. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/alerts/webhook.py +0 -0
  112. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/auth/__init__.py +0 -0
  113. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/compliance/__init__.py +0 -0
  114. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/connectors/__init__.py +0 -0
  115. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/forensic/__init__.py +0 -0
  116. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/guards/__init__.py +0 -0
  117. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/guards/guardrailsai_guard.py +0 -0
  118. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/pii/__init__.py +0 -0
  119. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/transports/__init__.py +0 -0
  120. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/transports/http_rest.py +0 -0
  121. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/plugins/builtin/transports/mcp.py +0 -0
  122. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/__init__.py +0 -0
  123. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/api/__init__.py +0 -0
  124. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/proxy/multi_upstream.py +0 -0
  125. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/py.typed +0 -0
  126. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/_compat.py +0 -0
  127. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina/sdk/compliance_kit.py +0 -0
  128. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/dependency_links.txt +0 -0
  129. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/entry_points.txt +0 -0
  130. {admina_framework-0.9.4 → admina_framework-0.10.0}/admina_framework.egg-info/top_level.txt +0 -0
  131. {admina_framework-0.9.4 → admina_framework-0.10.0}/setup.cfg +0 -0
  132. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_benchmark_14us.py +0 -0
  133. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_firewall_parity.py +0 -0
  134. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_mcp_transport.py +0 -0
  135. {admina_framework-0.9.4 → admina_framework-0.10.0}/tests/test_version.py +0 -0
@@ -9,7 +9,7 @@ Source: https://github.com/admina-org/admina
9
9
 
10
10
  ─── Bundled assets ─────────────────────────────────────────────────
11
11
 
12
- * dashboard/heimdall.png
12
+ * admina/dashboard/static/heimdall.png
13
13
  "Heimdall — the Governance Owl"
14
14
  Copyright © 2025–2026 Stefano Noferi & Admina contributors
15
15
  Licensed under the Apache License, Version 2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: admina-framework
3
- Version: 0.9.4
3
+ Version: 0.10.0
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>
@@ -38,10 +38,9 @@ Requires-Dist: httpx<1,>=0.25; extra == "proxy"
38
38
  Requires-Dist: pydantic<3,>=2.5; extra == "proxy"
39
39
  Requires-Dist: pydantic-settings<3,>=2.3; extra == "proxy"
40
40
  Requires-Dist: python-dotenv<2,>=1.0; extra == "proxy"
41
- Requires-Dist: redis<6,>=5.0; extra == "proxy"
41
+ Requires-Dist: redis<9,>=5.0; extra == "proxy"
42
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"
43
+ Requires-Dist: clickhouse-connect<2,>=0.7; extra == "proxy"
45
44
  Requires-Dist: typer<1,>=0.9; extra == "proxy"
46
45
  Requires-Dist: numpy<2,>=1.24; extra == "proxy"
47
46
  Requires-Dist: scikit-learn<2,>=1.3; extra == "proxy"
@@ -53,14 +52,30 @@ Requires-Dist: opentelemetry-sdk<2,>=1.20; extra == "telemetry"
53
52
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc<2,>=1.20; extra == "telemetry"
54
53
  Requires-Dist: opentelemetry-instrumentation-fastapi<1,>=0.40b0; extra == "telemetry"
55
54
  Provides-Extra: rust
56
- Requires-Dist: admina-core<0.10,>=0.9.3; extra == "rust"
55
+ Requires-Dist: admina-core<0.11,>=0.9.3; extra == "rust"
57
56
  Provides-Extra: full
58
57
  Requires-Dist: admina-framework[nlp,proxy,telemetry]; extra == "full"
58
+ Provides-Extra: openai
59
+ Requires-Dist: openai<3,>=1.0; extra == "openai"
60
+ Provides-Extra: ollama
61
+ Requires-Dist: ollama<1,>=0.3; extra == "ollama"
62
+ Provides-Extra: anthropic
63
+ Requires-Dist: anthropic<1,>=0.39; extra == "anthropic"
64
+ Provides-Extra: mistral
65
+ Requires-Dist: mistralai<3,>=1.0; extra == "mistral"
66
+ Provides-Extra: gemini
67
+ Requires-Dist: google-genai<3,>=1.0; extra == "gemini"
68
+ Provides-Extra: bedrock
69
+ Requires-Dist: boto3<2,>=1.34; extra == "bedrock"
70
+ Provides-Extra: adapters
71
+ Requires-Dist: admina-framework[anthropic,bedrock,gemini,mistral,ollama,openai]; extra == "adapters"
72
+ Provides-Extra: all
73
+ Requires-Dist: admina-framework[adapters,nlp,proxy,telemetry]; extra == "all"
59
74
  Dynamic: license-file
60
75
 
61
76
  <!--
62
77
  <p align="center">
63
- <img src="resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
78
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
64
79
  </p>
65
80
  -->
66
81
 
@@ -71,9 +86,9 @@ Dynamic: license-file
71
86
 
72
87
  <p align="center">
73
88
  <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>
89
+ &nbsp;<a href="https://github.com/admina-org/admina/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
75
90
  &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">
91
+ &nbsp;<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
77
92
  </p>
78
93
 
79
94
  <p align="center">
@@ -85,7 +100,6 @@ Dynamic: license-file
85
100
 
86
101
  <p align="center">
87
102
  <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
103
  &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
104
  </p>
91
105
 
@@ -96,13 +110,6 @@ Dynamic: license-file
96
110
  &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
111
  </p>
98
112
 
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
113
  ---
107
114
 
108
115
  ## See it in action
@@ -110,13 +117,13 @@ Dynamic: license-file
110
117
  **Scaffold a project and boot the governed proxy + dashboard — no Docker:**
111
118
 
112
119
  <p align="center">
113
- <img src="resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
120
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
114
121
  </p>
115
122
 
116
123
  **Wrap any model in a few lines — PII is stripped before the model ever sees it:**
117
124
 
118
125
  <p align="center">
119
- <img src="resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
126
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
120
127
  </p>
121
128
 
122
129
  **The governance dashboard, before and after simulated traffic — Admina Score 40 → 60:**
@@ -124,11 +131,11 @@ Dynamic: license-file
124
131
  <table>
125
132
  <tr>
126
133
  <td align="center" width="50%">
127
- <img src="resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
134
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
128
135
  <em>First boot — Admina Score <strong>40/100</strong></em>
129
136
  </td>
130
137
  <td align="center" width="50%">
131
- <img src="resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
138
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
132
139
  <em>After <code>python scripts/simulate.py</code> — <strong>60/100</strong></em>
133
140
  </td>
134
141
  </tr>
@@ -195,6 +202,21 @@ pip install "admina-framework[proxy]"
195
202
  pip install "admina-framework[full]"
196
203
  python -m spacy download en_core_web_sm # for [full] only
197
204
 
205
+ # Model-adapter provider SDKs (per-provider extras):
206
+ pip install "admina-framework[openai]" # openai>=1.0
207
+ pip install "admina-framework[ollama]" # ollama>=0.3
208
+ pip install "admina-framework[anthropic]" # anthropic>=0.39
209
+ pip install "admina-framework[mistral]" # mistralai>=1.0
210
+ pip install "admina-framework[gemini]" # google-genai>=1.0
211
+ pip install "admina-framework[bedrock]" # boto3>=1.34 (AWS Bedrock)
212
+
213
+ # All provider SDKs at once:
214
+ pip install "admina-framework[adapters]"
215
+
216
+ # Everything (proxy + NLP + telemetry + all adapters):
217
+ pip install "admina-framework[all]"
218
+ python -m spacy download en_core_web_sm # for [all] only
219
+
198
220
  # Optional: Rust-accelerated engine (auto-detected at runtime).
199
221
  # Opt-in extra — pulls in the admina-core wheel from PyPI.
200
222
  pip install "admina-framework[rust]"
@@ -233,6 +255,12 @@ pip install -e ".[proxy]"
233
255
  # Everything (proxy + NLP + telemetry)
234
256
  pip install -e ".[full]"
235
257
 
258
+ # All model-adapter SDKs
259
+ pip install -e ".[adapters]"
260
+
261
+ # Everything (proxy + NLP + telemetry + all adapters)
262
+ pip install -e ".[all]"
263
+
236
264
  # CLI workflow
237
265
  admina init my-project # Scaffold a governed AI project
238
266
  cd my-project # admina dev runs from the project directory
@@ -267,7 +295,7 @@ flowchart LR
267
295
  class P pipe;
268
296
  ```
269
297
 
270
- Pipeline (identical in both modes): `PII redaction → firewall → loop-breaker → audit → forensic chain (SHA-256) → OTEL`
298
+ Pipeline (identical in both modes): `loop-breaker → firewall → PII redaction → guards → audit → forensic chain (SHA-256) → OTEL`
271
299
 
272
300
  ## The 4 Governance Domains
273
301
 
@@ -306,7 +334,7 @@ from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
306
334
  | Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
307
335
  | Compliance Template | EU AI Act |
308
336
  | Transport Adapter | MCP, HTTP REST |
309
- | Forensic Store | Filesystem, S3-compatible (boto3), MinIO (legacy) |
337
+ | Forensic Store | Filesystem, S3-compatible (boto3 — AWS S3, MinIO, R2, …) |
310
338
  | Auth Provider | API Key |
311
339
  | PII Engine | spaCy + Regex |
312
340
  | Alert Channel | Log, Webhook |
@@ -322,7 +350,7 @@ admina plugin create my-domain # Scaffold a new plugin
322
350
  ```bash
323
351
  admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
324
352
  admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
325
- admina dev --stack # Docker stack: + redis + clickhouse + minio + grafana
353
+ admina dev --stack # Docker stack: + redis + clickhouse + grafana
326
354
  admina dev --with-llm # --stack + ollama + chromadb + open-webui
327
355
  admina plugin list # List all registered plugins
328
356
  admina plugin install X # Install a plugin from path or registry
@@ -341,7 +369,7 @@ Real-time governance dashboard on port 3000:
341
369
  - **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
342
370
  - **Live Feed** — streaming governance events via WebSocket
343
371
  - **Compliance Gaps** — EU AI Act gap analysis with article-level detail
344
- - **Infrastructure Health** — proxy, Redis, MinIO, ClickHouse, OTEL status
372
+ - **Infrastructure Health** — proxy, Redis, forensic store, ClickHouse, OTEL status
345
373
 
346
374
  API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
347
375
 
@@ -353,7 +381,7 @@ Admina uses `admina.yaml` as the primary config file (with `.env` fallback for b
353
381
  cp admina.yaml.example admina.yaml # Copy and customize
354
382
  ```
355
383
 
356
- See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
384
+ See [`admina.yaml.example`](https://github.com/admina-org/admina/blob/main/admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
357
385
 
358
386
  <a id="compliance-scope"></a>
359
387
 
@@ -376,7 +404,7 @@ See [`admina.yaml.example`](admina.yaml.example) for all options including domai
376
404
  > 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
377
405
  > 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
378
406
  > 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,
407
+ > See [`MODEL_CARD.md`](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) for the full scope, limitations,
380
408
  > and known failure modes of every Admina component.
381
409
 
382
410
  </details>
@@ -478,7 +506,7 @@ crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
478
506
 
479
507
  </details>
480
508
 
481
- See [full integration docs](docs/guides/integrations.md) for details.
509
+ See [full integration docs](https://github.com/admina-org/admina/blob/main/docs/guides/integrations.md) for details.
482
510
 
483
511
  ## Performance — Hybrid Python + Rust engine
484
512
 
@@ -487,7 +515,7 @@ The Rust core engine is an optional accelerator. The default
487
515
  enable the Rust engine with the opt-in extra `pip install
488
516
  "admina-framework[rust]"` (or build from source for local development —
489
517
  `maturin develop --release --manifest-path core-rust/Cargo.toml`, see
490
- [CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
518
+ [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md)). At runtime Admina auto-detects
491
519
  whichever is available and falls back transparently to Python if the Rust
492
520
  extension is not installed.
493
521
 
@@ -558,7 +586,6 @@ The full stack (`docker compose up`) runs 9 containers:
558
586
  | `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
559
587
  | `3000` | Dashboard | Real-time governance web UI |
560
588
  | `3001` | Grafana | Metrics dashboards |
561
- | `9090` | MinIO Console | Forensic storage browser |
562
589
  | `4317` | OTEL Collector | OTLP gRPC ingestion |
563
590
 
564
591
  ClickHouse and Redis are internal only (not exposed to host).
@@ -569,45 +596,20 @@ ClickHouse and Redis are internal only (not exposed to host).
569
596
  <br>
570
597
 
571
598
  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
599
+ tamper-evident) supports three backends. Read this before picking one for
573
600
  production.
574
601
 
575
602
  | Backend | License | When to use | Caveats |
576
603
  |---------|---------|-------------|---------|
577
604
  | **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
578
605
  | **`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. |
606
+ | **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, **MinIO** servers, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2). Supports WORM Object Lock. |
581
607
 
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.
608
+ > **Using MinIO?** Point the `s3` backend at your MinIO server via
609
+ > `FORENSIC_S3_ENDPOINT` — MinIO speaks the S3 API, so no MinIO-specific
610
+ > client is needed. The legacy `minio`-SDK backend was removed in 0.9.5
611
+ > (the MinIO Python SDK is archived); `FORENSIC_BACKEND=minio` now
612
+ > transparently routes to the `s3` backend with a migration warning.
611
613
 
612
614
  </details>
613
615
 
@@ -621,7 +623,7 @@ production.
621
623
  | `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
622
624
  | `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
623
625
  | `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
624
- | `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
626
+ | `FORENSIC_BACKEND` | `memory` | Forensic store: `memory` \| `filesystem` \| `s3` |
625
627
  | `LOG_LEVEL` | `INFO` | Logging verbosity |
626
628
 
627
629
  </details>
@@ -646,7 +648,7 @@ admina/
646
648
  | +-- domains/ GuardrailsAI
647
649
  | +-- compliance/ EU AI Act template
648
650
  | +-- transports/ MCP, HTTP REST
649
- | +-- forensic/ MinIO, Filesystem
651
+ | +-- forensic/ Filesystem
650
652
  | +-- auth/ API Key
651
653
  | +-- pii/ spaCy + Regex
652
654
  | +-- alerts/ Log, Webhook
@@ -705,12 +707,12 @@ curl http://localhost:8080/api/dashboard/score
705
707
 
706
708
  ## Project documents
707
709
 
708
- - [CONTRIBUTING.md](CONTRIBUTING.md) — development setup, testing, and pull request workflow
709
- - [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
710
- - [ROADMAP.md](ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
711
- - [CHANGELOG.md](CHANGELOG.md) — release notes
712
- - [SECURITY.md](SECURITY.md) — coordinated disclosure policy
713
- - [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
710
+ - [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md) — development setup, testing, and pull request workflow
711
+ - [MODEL_CARD.md](https://github.com/admina-org/admina/blob/main/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
712
+ - [ROADMAP.md](https://github.com/admina-org/admina/blob/main/ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
713
+ - [CHANGELOG.md](https://github.com/admina-org/admina/blob/main/CHANGELOG.md) — release notes
714
+ - [SECURITY.md](https://github.com/admina-org/admina/blob/main/SECURITY.md) — coordinated disclosure policy
715
+ - [CODE_OF_CONDUCT.md](https://github.com/admina-org/admina/blob/main/CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
714
716
  - **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
715
717
 
716
718
  Admina is Apache 2.0. Contributions are welcome.
@@ -719,7 +721,7 @@ Admina is Apache 2.0. Contributions are welcome.
719
721
 
720
722
  Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
721
723
 
722
- Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
724
+ Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/admina-org/admina/blob/main/LICENSE) for the full text.
723
725
 
724
726
  ---
725
727
 
@@ -1,6 +1,6 @@
1
1
  <!--
2
2
  <p align="center">
3
- <img src="resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
3
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
4
4
  </p>
5
5
  -->
6
6
 
@@ -11,9 +11,9 @@
11
11
 
12
12
  <p align="center">
13
13
  <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>
14
- &nbsp;<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
14
+ &nbsp;<a href="https://github.com/admina-org/admina/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-32CD32?style=flat-square" alt="License"></a>
15
15
  &nbsp;<img src="https://img.shields.io/badge/python-3.11%2B-32CD32?style=flat-square&logo=python&logoColor=white" alt="Python 3.11+">
16
- &nbsp;<img src="https://img.shields.io/badge/platform-Linux%20%7C%20macOS-6C757D?style=flat-square" alt="Platform">
16
+ &nbsp;<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
17
17
  </p>
18
18
 
19
19
  <p align="center">
@@ -25,7 +25,6 @@
25
25
 
26
26
  <p align="center">
27
27
  <a href="https://deepwiki.com/admina-org/admina"><img src="https://deepwiki.com/badge.svg" alt="Ask DeepWiki"></a>
28
- &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>
29
28
  &nbsp;<a href="https://admina.org/docs"><img src="https://img.shields.io/badge/docs-admina.org-blue?style=flat-square" alt="Docs"></a>
30
29
  </p>
31
30
 
@@ -36,13 +35,6 @@
36
35
  &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>
37
36
  </p>
38
37
 
39
- <p align="center">
40
- <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>
41
- &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>
42
- &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>
43
- &nbsp;<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
44
- </p>
45
-
46
38
  ---
47
39
 
48
40
  ## See it in action
@@ -50,13 +42,13 @@
50
42
  **Scaffold a project and boot the governed proxy + dashboard — no Docker:**
51
43
 
52
44
  <p align="center">
53
- <img src="resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
45
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
54
46
  </p>
55
47
 
56
48
  **Wrap any model in a few lines — PII is stripped before the model ever sees it:**
57
49
 
58
50
  <p align="center">
59
- <img src="resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
51
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
60
52
  </p>
61
53
 
62
54
  **The governance dashboard, before and after simulated traffic — Admina Score 40 → 60:**
@@ -64,11 +56,11 @@
64
56
  <table>
65
57
  <tr>
66
58
  <td align="center" width="50%">
67
- <img src="resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
59
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
68
60
  <em>First boot — Admina Score <strong>40/100</strong></em>
69
61
  </td>
70
62
  <td align="center" width="50%">
71
- <img src="resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
63
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
72
64
  <em>After <code>python scripts/simulate.py</code> — <strong>60/100</strong></em>
73
65
  </td>
74
66
  </tr>
@@ -135,6 +127,21 @@ pip install "admina-framework[proxy]"
135
127
  pip install "admina-framework[full]"
136
128
  python -m spacy download en_core_web_sm # for [full] only
137
129
 
130
+ # Model-adapter provider SDKs (per-provider extras):
131
+ pip install "admina-framework[openai]" # openai>=1.0
132
+ pip install "admina-framework[ollama]" # ollama>=0.3
133
+ pip install "admina-framework[anthropic]" # anthropic>=0.39
134
+ pip install "admina-framework[mistral]" # mistralai>=1.0
135
+ pip install "admina-framework[gemini]" # google-genai>=1.0
136
+ pip install "admina-framework[bedrock]" # boto3>=1.34 (AWS Bedrock)
137
+
138
+ # All provider SDKs at once:
139
+ pip install "admina-framework[adapters]"
140
+
141
+ # Everything (proxy + NLP + telemetry + all adapters):
142
+ pip install "admina-framework[all]"
143
+ python -m spacy download en_core_web_sm # for [all] only
144
+
138
145
  # Optional: Rust-accelerated engine (auto-detected at runtime).
139
146
  # Opt-in extra — pulls in the admina-core wheel from PyPI.
140
147
  pip install "admina-framework[rust]"
@@ -173,6 +180,12 @@ pip install -e ".[proxy]"
173
180
  # Everything (proxy + NLP + telemetry)
174
181
  pip install -e ".[full]"
175
182
 
183
+ # All model-adapter SDKs
184
+ pip install -e ".[adapters]"
185
+
186
+ # Everything (proxy + NLP + telemetry + all adapters)
187
+ pip install -e ".[all]"
188
+
176
189
  # CLI workflow
177
190
  admina init my-project # Scaffold a governed AI project
178
191
  cd my-project # admina dev runs from the project directory
@@ -207,7 +220,7 @@ flowchart LR
207
220
  class P pipe;
208
221
  ```
209
222
 
210
- Pipeline (identical in both modes): `PII redaction → firewall → loop-breaker → audit → forensic chain (SHA-256) → OTEL`
223
+ Pipeline (identical in both modes): `loop-breaker → firewall → PII redaction → guards → audit → forensic chain (SHA-256) → OTEL`
211
224
 
212
225
  ## The 4 Governance Domains
213
226
 
@@ -246,7 +259,7 @@ from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
246
259
  | Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
247
260
  | Compliance Template | EU AI Act |
248
261
  | Transport Adapter | MCP, HTTP REST |
249
- | Forensic Store | Filesystem, S3-compatible (boto3), MinIO (legacy) |
262
+ | Forensic Store | Filesystem, S3-compatible (boto3 — AWS S3, MinIO, R2, …) |
250
263
  | Auth Provider | API Key |
251
264
  | PII Engine | spaCy + Regex |
252
265
  | Alert Channel | Log, Webhook |
@@ -262,7 +275,7 @@ admina plugin create my-domain # Scaffold a new plugin
262
275
  ```bash
263
276
  admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
264
277
  admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
265
- admina dev --stack # Docker stack: + redis + clickhouse + minio + grafana
278
+ admina dev --stack # Docker stack: + redis + clickhouse + grafana
266
279
  admina dev --with-llm # --stack + ollama + chromadb + open-webui
267
280
  admina plugin list # List all registered plugins
268
281
  admina plugin install X # Install a plugin from path or registry
@@ -281,7 +294,7 @@ Real-time governance dashboard on port 3000:
281
294
  - **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
282
295
  - **Live Feed** — streaming governance events via WebSocket
283
296
  - **Compliance Gaps** — EU AI Act gap analysis with article-level detail
284
- - **Infrastructure Health** — proxy, Redis, MinIO, ClickHouse, OTEL status
297
+ - **Infrastructure Health** — proxy, Redis, forensic store, ClickHouse, OTEL status
285
298
 
286
299
  API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
287
300
 
@@ -293,7 +306,7 @@ Admina uses `admina.yaml` as the primary config file (with `.env` fallback for b
293
306
  cp admina.yaml.example admina.yaml # Copy and customize
294
307
  ```
295
308
 
296
- See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
309
+ See [`admina.yaml.example`](https://github.com/admina-org/admina/blob/main/admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
297
310
 
298
311
  <a id="compliance-scope"></a>
299
312
 
@@ -316,7 +329,7 @@ See [`admina.yaml.example`](admina.yaml.example) for all options including domai
316
329
  > 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
317
330
  > 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
318
331
  > ships with Admina as `admina.domains.compliance.eu_ai_act.EU_AI_ACT_DEADLINES`.
319
- > See [`MODEL_CARD.md`](MODEL_CARD.md) for the full scope, limitations,
332
+ > See [`MODEL_CARD.md`](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) for the full scope, limitations,
320
333
  > and known failure modes of every Admina component.
321
334
 
322
335
  </details>
@@ -418,7 +431,7 @@ crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
418
431
 
419
432
  </details>
420
433
 
421
- See [full integration docs](docs/guides/integrations.md) for details.
434
+ See [full integration docs](https://github.com/admina-org/admina/blob/main/docs/guides/integrations.md) for details.
422
435
 
423
436
  ## Performance — Hybrid Python + Rust engine
424
437
 
@@ -427,7 +440,7 @@ The Rust core engine is an optional accelerator. The default
427
440
  enable the Rust engine with the opt-in extra `pip install
428
441
  "admina-framework[rust]"` (or build from source for local development —
429
442
  `maturin develop --release --manifest-path core-rust/Cargo.toml`, see
430
- [CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
443
+ [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md)). At runtime Admina auto-detects
431
444
  whichever is available and falls back transparently to Python if the Rust
432
445
  extension is not installed.
433
446
 
@@ -498,7 +511,6 @@ The full stack (`docker compose up`) runs 9 containers:
498
511
  | `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
499
512
  | `3000` | Dashboard | Real-time governance web UI |
500
513
  | `3001` | Grafana | Metrics dashboards |
501
- | `9090` | MinIO Console | Forensic storage browser |
502
514
  | `4317` | OTEL Collector | OTLP gRPC ingestion |
503
515
 
504
516
  ClickHouse and Redis are internal only (not exposed to host).
@@ -509,45 +521,20 @@ ClickHouse and Redis are internal only (not exposed to host).
509
521
  <br>
510
522
 
511
523
  The forensic blackbox (the SHA-256 hash chain that makes the audit trail
512
- tamper-evident) supports four backends. Read this before picking one for
524
+ tamper-evident) supports three backends. Read this before picking one for
513
525
  production.
514
526
 
515
527
  | Backend | License | When to use | Caveats |
516
528
  |---------|---------|-------------|---------|
517
529
  | **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
518
530
  | **`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`. |
519
- | **`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. |
520
- | **`minio`** *(legacy)* | see below ⚠️ | Backwards compatibility with existing MinIO clusters | Two distinct concerns; read the disclaimer. |
531
+ | **`s3`** *(boto3)* | Apache 2.0 (boto3) | Production / HA / multi-region | Works with **any S3-compatible service** — AWS S3, **MinIO** servers, Cloudflare R2, Backblaze B2, **SeaweedFS** (Apache 2.0), **Garage** (AGPLv3), **Ceph RGW** (LGPLv2). Supports WORM Object Lock. |
521
532
 
522
- > ⚠️ **MinIO disclaimer — what users of Admina need to know.**
523
- >
524
- > MinIO has two separate licensing/maintenance issues that can affect
525
- > downstream users of Admina, even though Admina itself is Apache 2.0:
526
- >
527
- > 1. **MinIO Server is AGPLv3.** If you deploy MinIO Server as part of a
528
- > network-accessible service (e.g. a SaaS that exposes Admina's
529
- > dashboard or API to the public Internet), AGPLv3's network clause
530
- > can be read to require you to publish the source code of the
531
- > *combined* application that interacts with MinIO over the network.
532
- > The MinIO commercial license removes this obligation, but is paid.
533
- > This is **not** an Admina obligation — Apache 2.0 is permissive —
534
- > but it is an obligation MinIO Server itself imposes on whoever
535
- > runs it.
536
- > 2. **The MinIO Python SDK has been archived.** No more security
537
- > patches, no support for new Python releases. Continuing to depend
538
- > on it is a supply-chain risk.
539
- >
540
- > **Recommendation:** for new deployments, use `FORENSIC_BACKEND=s3`.
541
- > The `boto3` client is Apache 2.0 and works against any S3-compatible
542
- > service. Two open-source FOSS-friendly options that don't trigger the
543
- > AGPL network clause for typical Admina deployments:
544
- > - **SeaweedFS** (Apache 2.0, S3 gateway, lightweight, single binary)
545
- > - **Garage** (AGPLv3, but as a backend — Garage's AGPL applies to
546
- > Garage itself, not to applications that connect to it via S3 API)
547
- >
548
- > Existing MinIO deployments keep working through `FORENSIC_BACKEND=minio`,
549
- > but plan a migration. The `minio` backend will be removed in a future
550
- > release.
533
+ > **Using MinIO?** Point the `s3` backend at your MinIO server via
534
+ > `FORENSIC_S3_ENDPOINT` — MinIO speaks the S3 API, so no MinIO-specific
535
+ > client is needed. The legacy `minio`-SDK backend was removed in 0.9.5
536
+ > (the MinIO Python SDK is archived); `FORENSIC_BACKEND=minio` now
537
+ > transparently routes to the `s3` backend with a migration warning.
551
538
 
552
539
  </details>
553
540
 
@@ -561,7 +548,7 @@ production.
561
548
  | `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
562
549
  | `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
563
550
  | `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
564
- | `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
551
+ | `FORENSIC_BACKEND` | `memory` | Forensic store: `memory` \| `filesystem` \| `s3` |
565
552
  | `LOG_LEVEL` | `INFO` | Logging verbosity |
566
553
 
567
554
  </details>
@@ -586,7 +573,7 @@ admina/
586
573
  | +-- domains/ GuardrailsAI
587
574
  | +-- compliance/ EU AI Act template
588
575
  | +-- transports/ MCP, HTTP REST
589
- | +-- forensic/ MinIO, Filesystem
576
+ | +-- forensic/ Filesystem
590
577
  | +-- auth/ API Key
591
578
  | +-- pii/ spaCy + Regex
592
579
  | +-- alerts/ Log, Webhook
@@ -645,12 +632,12 @@ curl http://localhost:8080/api/dashboard/score
645
632
 
646
633
  ## Project documents
647
634
 
648
- - [CONTRIBUTING.md](CONTRIBUTING.md) — development setup, testing, and pull request workflow
649
- - [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
650
- - [ROADMAP.md](ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
651
- - [CHANGELOG.md](CHANGELOG.md) — release notes
652
- - [SECURITY.md](SECURITY.md) — coordinated disclosure policy
653
- - [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
635
+ - [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md) — development setup, testing, and pull request workflow
636
+ - [MODEL_CARD.md](https://github.com/admina-org/admina/blob/main/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
637
+ - [ROADMAP.md](https://github.com/admina-org/admina/blob/main/ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
638
+ - [CHANGELOG.md](https://github.com/admina-org/admina/blob/main/CHANGELOG.md) — release notes
639
+ - [SECURITY.md](https://github.com/admina-org/admina/blob/main/SECURITY.md) — coordinated disclosure policy
640
+ - [CODE_OF_CONDUCT.md](https://github.com/admina-org/admina/blob/main/CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
654
641
  - **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
655
642
 
656
643
  Admina is Apache 2.0. Contributions are welcome.
@@ -659,7 +646,7 @@ Admina is Apache 2.0. Contributions are welcome.
659
646
 
660
647
  Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
661
648
 
662
- Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
649
+ Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/admina-org/admina/blob/main/LICENSE) for the full text.
663
650
 
664
651
  ---
665
652
 
@@ -23,7 +23,7 @@ from __future__ import annotations
23
23
 
24
24
  from admina.sdk import ComplianceKit, GovernedAgent, GovernedData, GovernedModel
25
25
 
26
- __version__ = "0.9.4"
26
+ __version__ = "0.10.0"
27
27
 
28
28
  __all__ = [
29
29
  "__version__",