admina-framework 0.9.4__tar.gz → 0.9.5__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.4/admina_framework.egg-info → admina_framework-0.9.5}/PKG-INFO +31 -66
  2. {admina_framework-0.9.4 → admina_framework-0.9.5}/README.md +30 -64
  3. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/__init__.py +1 -1
  4. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/main.py +6 -7
  5. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/admina.yaml.j2 +2 -2
  6. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/docker-compose.yml.j2 +2 -27
  7. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/env.j2 +0 -2
  8. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/core/config.py +5 -15
  9. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/core/secrets.py +0 -4
  10. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/dashboard/static/index.html +0 -4
  11. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/__init__.py +3 -3
  12. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/forensic.py +12 -89
  13. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/base.py +4 -2
  14. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/api/dashboard.py +9 -21
  15. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/api/integration.py +1 -1
  16. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/config.py +14 -22
  17. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/main.py +5 -25
  18. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/state.py +0 -2
  19. {admina_framework-0.9.4 → admina_framework-0.9.5/admina_framework.egg-info}/PKG-INFO +31 -66
  20. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina_framework.egg-info/SOURCES.txt +0 -1
  21. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina_framework.egg-info/requires.txt +0 -1
  22. {admina_framework-0.9.4 → admina_framework-0.9.5}/pyproject.toml +13 -6
  23. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_core_config.py +1 -1
  24. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_proxy_security.py +0 -9
  25. admina_framework-0.9.4/admina/plugins/builtin/forensic/minio.py +0 -180
  26. {admina_framework-0.9.4 → admina_framework-0.9.5}/LICENSE +0 -0
  27. {admina_framework-0.9.4 → admina_framework-0.9.5}/NOTICE +0 -0
  28. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/__init__.py +0 -0
  29. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/commands/__init__.py +0 -0
  30. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/main.py.j2 +0 -0
  31. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/plugin.py.j2 +0 -0
  32. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/plugin_pyproject.toml.j2 +0 -0
  33. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/plugin_readme.md.j2 +0 -0
  34. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/cli/templates/plugin_test.py.j2 +0 -0
  35. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/core/__init__.py +0 -0
  36. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/core/event_bus.py +0 -0
  37. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/core/types.py +0 -0
  38. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/dashboard/__init__.py +0 -0
  39. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/dashboard/static/heimdall.png +0 -0
  40. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/dashboard/static/vendor/alpinejs.min.js +0 -0
  41. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/__init__.py +0 -0
  42. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/agent_security/__init__.py +0 -0
  43. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/agent_security/firewall.py +0 -0
  44. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/agent_security/loop_breaker.py +0 -0
  45. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/ai_infra/__init__.py +0 -0
  46. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/ai_infra/llm_engine.py +0 -0
  47. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/ai_infra/rag.py +0 -0
  48. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/ai_infra/webui.py +0 -0
  49. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/cross_regulation.py +0 -0
  50. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/eu_ai_act.py +0 -0
  51. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/gdpr.py +0 -0
  52. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/nis2.py +0 -0
  53. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/oisg.py +0 -0
  54. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/compliance/otel.py +0 -0
  55. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/data_sovereignty/__init__.py +0 -0
  56. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/data_sovereignty/classification.py +0 -0
  57. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/data_sovereignty/pii.py +0 -0
  58. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/domains/data_sovereignty/residency.py +0 -0
  59. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/__init__.py +0 -0
  60. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/_engines.py +0 -0
  61. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/cheshirecat/__init__.py +0 -0
  62. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/cheshirecat/admina-plugin/admina_governance.py +0 -0
  63. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/crewai/__init__.py +0 -0
  64. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/crewai/callbacks.py +0 -0
  65. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/langchain/__init__.py +0 -0
  66. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/langchain/callbacks.py +0 -0
  67. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/n8n/__init__.py +0 -0
  68. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/integrations/openclaw/__init__.py +0 -0
  69. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/__init__.py +0 -0
  70. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/__init__.py +0 -0
  71. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/adapters/__init__.py +0 -0
  72. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/adapters/ollama.py +0 -0
  73. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/adapters/openai.py +0 -0
  74. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/alerts/__init__.py +0 -0
  75. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/alerts/log.py +0 -0
  76. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/alerts/webhook.py +0 -0
  77. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/auth/__init__.py +0 -0
  78. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/auth/apikey.py +0 -0
  79. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/compliance/__init__.py +0 -0
  80. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/compliance/eu_ai_act.py +0 -0
  81. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/connectors/__init__.py +0 -0
  82. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/connectors/chromadb.py +0 -0
  83. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/connectors/filesystem.py +0 -0
  84. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/forensic/__init__.py +0 -0
  85. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/forensic/filesystem.py +0 -0
  86. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/guards/__init__.py +0 -0
  87. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/guards/guardrailsai_guard.py +0 -0
  88. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/pii/__init__.py +0 -0
  89. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/pii/spacy_regex.py +0 -0
  90. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/transports/__init__.py +0 -0
  91. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/transports/http_rest.py +0 -0
  92. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/builtin/transports/mcp.py +0 -0
  93. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/plugins/registry.py +0 -0
  94. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/__init__.py +0 -0
  95. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/api/__init__.py +0 -0
  96. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/engine_bridge.py +0 -0
  97. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/governance.py +0 -0
  98. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/proxy/multi_upstream.py +0 -0
  99. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/py.typed +0 -0
  100. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/sdk/__init__.py +0 -0
  101. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/sdk/_compat.py +0 -0
  102. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/sdk/compliance_kit.py +0 -0
  103. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/sdk/governed_agent.py +0 -0
  104. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/sdk/governed_data.py +0 -0
  105. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina/sdk/governed_model.py +0 -0
  106. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina_framework.egg-info/dependency_links.txt +0 -0
  107. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina_framework.egg-info/entry_points.txt +0 -0
  108. {admina_framework-0.9.4 → admina_framework-0.9.5}/admina_framework.egg-info/top_level.txt +0 -0
  109. {admina_framework-0.9.4 → admina_framework-0.9.5}/setup.cfg +0 -0
  110. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_benchmark_14us.py +0 -0
  111. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_domains.py +0 -0
  112. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_firewall_parity.py +0 -0
  113. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_forensic_blackbox.py +0 -0
  114. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_governance_pipeline.py +0 -0
  115. {admina_framework-0.9.4 → admina_framework-0.9.5}/tests/test_mcp_transport.py +0 -0
  116. {admina_framework-0.9.4 → admina_framework-0.9.5}/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.4
3
+ Version: 0.9.5
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>
@@ -40,7 +40,6 @@ Requires-Dist: pydantic-settings<3,>=2.3; extra == "proxy"
40
40
  Requires-Dist: python-dotenv<2,>=1.0; extra == "proxy"
41
41
  Requires-Dist: redis<6,>=5.0; extra == "proxy"
42
42
  Requires-Dist: boto3<2,>=1.34; extra == "proxy"
43
- Requires-Dist: minio<8,>=7.2; extra == "proxy"
44
43
  Requires-Dist: clickhouse-connect<1,>=0.7; extra == "proxy"
45
44
  Requires-Dist: typer<1,>=0.9; extra == "proxy"
46
45
  Requires-Dist: numpy<2,>=1.24; extra == "proxy"
@@ -60,7 +59,7 @@ Dynamic: license-file
60
59
 
61
60
  <!--
62
61
  <p align="center">
63
- <img src="resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
62
+ <img src="https://raw.githubusercontent.com/admina-org/admina/main/resources/banner.png" alt="Admina — Governed AI by Default" width="100%">
64
63
  </p>
65
64
  -->
66
65
 
@@ -71,9 +70,9 @@ Dynamic: license-file
71
70
 
72
71
  <p align="center">
73
72
  <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>
73
+ &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
74
  &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">
75
+ &nbsp;<img src="https://img.shields.io/github/last-commit/admina-org/admina?style=flat-square" alt="Last commit">
77
76
  </p>
78
77
 
79
78
  <p align="center">
@@ -85,7 +84,6 @@ Dynamic: license-file
85
84
 
86
85
  <p align="center">
87
86
  <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
87
  &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
88
  </p>
91
89
 
@@ -96,13 +94,6 @@ Dynamic: license-file
96
94
  &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
95
  </p>
98
96
 
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
97
  ---
107
98
 
108
99
  ## See it in action
@@ -110,13 +101,13 @@ Dynamic: license-file
110
101
  **Scaffold a project and boot the governed proxy + dashboard — no Docker:**
111
102
 
112
103
  <p align="center">
113
- <img src="resources/admina-init-dev.gif" alt="admina init → admina dev → Ready on localhost:3000" width="900">
104
+ <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
105
  </p>
115
106
 
116
107
  **Wrap any model in a few lines — PII is stripped before the model ever sees it:**
117
108
 
118
109
  <p align="center">
119
- <img src="resources/sdk-3lines.gif" alt="GovernedModel redacts PERSON, EMAIL and credit card before the LLM call" width="900">
110
+ <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
111
  </p>
121
112
 
122
113
  **The governance dashboard, before and after simulated traffic — Admina Score 40 → 60:**
@@ -124,11 +115,11 @@ Dynamic: license-file
124
115
  <table>
125
116
  <tr>
126
117
  <td align="center" width="50%">
127
- <img src="resources/dashboard-firstuser.png" alt="Dashboard at first boot — score 40/100" width="100%"><br>
118
+ <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
119
  <em>First boot — Admina Score <strong>40/100</strong></em>
129
120
  </td>
130
121
  <td align="center" width="50%">
131
- <img src="resources/dashboard-traffic.png" alt="Dashboard after simulated traffic — score 60/100" width="100%"><br>
122
+ <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
123
  <em>After <code>python scripts/simulate.py</code> — <strong>60/100</strong></em>
133
124
  </td>
134
125
  </tr>
@@ -306,7 +297,7 @@ from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
306
297
  | Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
307
298
  | Compliance Template | EU AI Act |
308
299
  | Transport Adapter | MCP, HTTP REST |
309
- | Forensic Store | Filesystem, S3-compatible (boto3), MinIO (legacy) |
300
+ | Forensic Store | Filesystem, S3-compatible (boto3 — AWS S3, MinIO, R2, …) |
310
301
  | Auth Provider | API Key |
311
302
  | PII Engine | spaCy + Regex |
312
303
  | Alert Channel | Log, Webhook |
@@ -322,7 +313,7 @@ admina plugin create my-domain # Scaffold a new plugin
322
313
  ```bash
323
314
  admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
324
315
  admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
325
- admina dev --stack # Docker stack: + redis + clickhouse + minio + grafana
316
+ admina dev --stack # Docker stack: + redis + clickhouse + grafana
326
317
  admina dev --with-llm # --stack + ollama + chromadb + open-webui
327
318
  admina plugin list # List all registered plugins
328
319
  admina plugin install X # Install a plugin from path or registry
@@ -341,7 +332,7 @@ Real-time governance dashboard on port 3000:
341
332
  - **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
342
333
  - **Live Feed** — streaming governance events via WebSocket
343
334
  - **Compliance Gaps** — EU AI Act gap analysis with article-level detail
344
- - **Infrastructure Health** — proxy, Redis, MinIO, ClickHouse, OTEL status
335
+ - **Infrastructure Health** — proxy, Redis, forensic store, ClickHouse, OTEL status
345
336
 
346
337
  API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
347
338
 
@@ -353,7 +344,7 @@ Admina uses `admina.yaml` as the primary config file (with `.env` fallback for b
353
344
  cp admina.yaml.example admina.yaml # Copy and customize
354
345
  ```
355
346
 
356
- See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
347
+ 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
348
 
358
349
  <a id="compliance-scope"></a>
359
350
 
@@ -376,7 +367,7 @@ See [`admina.yaml.example`](admina.yaml.example) for all options including domai
376
367
  > 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
377
368
  > 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
378
369
  > 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,
370
+ > See [`MODEL_CARD.md`](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) for the full scope, limitations,
380
371
  > and known failure modes of every Admina component.
381
372
 
382
373
  </details>
@@ -478,7 +469,7 @@ crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
478
469
 
479
470
  </details>
480
471
 
481
- See [full integration docs](docs/guides/integrations.md) for details.
472
+ See [full integration docs](https://github.com/admina-org/admina/blob/main/docs/guides/integrations.md) for details.
482
473
 
483
474
  ## Performance — Hybrid Python + Rust engine
484
475
 
@@ -487,7 +478,7 @@ The Rust core engine is an optional accelerator. The default
487
478
  enable the Rust engine with the opt-in extra `pip install
488
479
  "admina-framework[rust]"` (or build from source for local development —
489
480
  `maturin develop --release --manifest-path core-rust/Cargo.toml`, see
490
- [CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
481
+ [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md)). At runtime Admina auto-detects
491
482
  whichever is available and falls back transparently to Python if the Rust
492
483
  extension is not installed.
493
484
 
@@ -558,7 +549,6 @@ The full stack (`docker compose up`) runs 9 containers:
558
549
  | `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
559
550
  | `3000` | Dashboard | Real-time governance web UI |
560
551
  | `3001` | Grafana | Metrics dashboards |
561
- | `9090` | MinIO Console | Forensic storage browser |
562
552
  | `4317` | OTEL Collector | OTLP gRPC ingestion |
563
553
 
564
554
  ClickHouse and Redis are internal only (not exposed to host).
@@ -569,45 +559,20 @@ ClickHouse and Redis are internal only (not exposed to host).
569
559
  <br>
570
560
 
571
561
  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
562
+ tamper-evident) supports three backends. Read this before picking one for
573
563
  production.
574
564
 
575
565
  | Backend | License | When to use | Caveats |
576
566
  |---------|---------|-------------|---------|
577
567
  | **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
578
568
  | **`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. |
569
+ | **`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
570
 
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.
571
+ > **Using MinIO?** Point the `s3` backend at your MinIO server via
572
+ > `FORENSIC_S3_ENDPOINT` — MinIO speaks the S3 API, so no MinIO-specific
573
+ > client is needed. The legacy `minio`-SDK backend was removed in 0.9.5
574
+ > (the MinIO Python SDK is archived); `FORENSIC_BACKEND=minio` now
575
+ > transparently routes to the `s3` backend with a migration warning.
611
576
 
612
577
  </details>
613
578
 
@@ -621,7 +586,7 @@ production.
621
586
  | `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
622
587
  | `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
623
588
  | `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
624
- | `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
589
+ | `FORENSIC_BACKEND` | `memory` | Forensic store: `memory` \| `filesystem` \| `s3` |
625
590
  | `LOG_LEVEL` | `INFO` | Logging verbosity |
626
591
 
627
592
  </details>
@@ -646,7 +611,7 @@ admina/
646
611
  | +-- domains/ GuardrailsAI
647
612
  | +-- compliance/ EU AI Act template
648
613
  | +-- transports/ MCP, HTTP REST
649
- | +-- forensic/ MinIO, Filesystem
614
+ | +-- forensic/ Filesystem
650
615
  | +-- auth/ API Key
651
616
  | +-- pii/ spaCy + Regex
652
617
  | +-- alerts/ Log, Webhook
@@ -705,12 +670,12 @@ curl http://localhost:8080/api/dashboard/score
705
670
 
706
671
  ## Project documents
707
672
 
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
673
+ - [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md) — development setup, testing, and pull request workflow
674
+ - [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
675
+ - [ROADMAP.md](https://github.com/admina-org/admina/blob/main/ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
676
+ - [CHANGELOG.md](https://github.com/admina-org/admina/blob/main/CHANGELOG.md) — release notes
677
+ - [SECURITY.md](https://github.com/admina-org/admina/blob/main/SECURITY.md) — coordinated disclosure policy
678
+ - [CODE_OF_CONDUCT.md](https://github.com/admina-org/admina/blob/main/CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
714
679
  - **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
715
680
 
716
681
  Admina is Apache 2.0. Contributions are welcome.
@@ -719,7 +684,7 @@ Admina is Apache 2.0. Contributions are welcome.
719
684
 
720
685
  Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
721
686
 
722
- Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
687
+ Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/admina-org/admina/blob/main/LICENSE) for the full text.
723
688
 
724
689
  ---
725
690
 
@@ -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>
@@ -246,7 +238,7 @@ from admina import GovernedModel, GovernedData, GovernedAgent, ComplianceKit
246
238
  | Governance Domain | GuardrailsAI (toxic, jailbreak, bias, PII) |
247
239
  | Compliance Template | EU AI Act |
248
240
  | Transport Adapter | MCP, HTTP REST |
249
- | Forensic Store | Filesystem, S3-compatible (boto3), MinIO (legacy) |
241
+ | Forensic Store | Filesystem, S3-compatible (boto3 — AWS S3, MinIO, R2, …) |
250
242
  | Auth Provider | API Key |
251
243
  | PII Engine | spaCy + Regex |
252
244
  | Alert Channel | Log, Webhook |
@@ -262,7 +254,7 @@ admina plugin create my-domain # Scaffold a new plugin
262
254
  ```bash
263
255
  admina init my-project # Scaffold project with admina.yaml + docker-compose.yml
264
256
  admina dev # Local mode: proxy + dashboard on :3000 (no Docker)
265
- admina dev --stack # Docker stack: + redis + clickhouse + minio + grafana
257
+ admina dev --stack # Docker stack: + redis + clickhouse + grafana
266
258
  admina dev --with-llm # --stack + ollama + chromadb + open-webui
267
259
  admina plugin list # List all registered plugins
268
260
  admina plugin install X # Install a plugin from path or registry
@@ -281,7 +273,7 @@ Real-time governance dashboard on port 3000:
281
273
  - **Governance Score** — 0-100 composite metric (data residency, audit coverage, attack rate, forensic integrity, EU AI Act compliance)
282
274
  - **Live Feed** — streaming governance events via WebSocket
283
275
  - **Compliance Gaps** — EU AI Act gap analysis with article-level detail
284
- - **Infrastructure Health** — proxy, Redis, MinIO, ClickHouse, OTEL status
276
+ - **Infrastructure Health** — proxy, Redis, forensic store, ClickHouse, OTEL status
285
277
 
286
278
  API backend: `GET /api/dashboard/score`, `/feed`, `/compliance`, `/sovereignty`, `/infra`, `/models`
287
279
 
@@ -293,7 +285,7 @@ Admina uses `admina.yaml` as the primary config file (with `.env` fallback for b
293
285
  cp admina.yaml.example admina.yaml # Copy and customize
294
286
  ```
295
287
 
296
- See [`admina.yaml.example`](admina.yaml.example) for all options including domains, AI infra, plugins, dashboard, forensic storage, alert channels, and integrations.
288
+ 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
289
 
298
290
  <a id="compliance-scope"></a>
299
291
 
@@ -316,7 +308,7 @@ See [`admina.yaml.example`](admina.yaml.example) for all options including domai
316
308
  > 2027** (postponed from 2 Aug 2026); Annex I high-risk from 2 August
317
309
  > 2028 (postponed from 2 Aug 2027). The full machine-readable timeline
318
310
  > 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,
311
+ > See [`MODEL_CARD.md`](https://github.com/admina-org/admina/blob/main/MODEL_CARD.md) for the full scope, limitations,
320
312
  > and known failure modes of every Admina component.
321
313
 
322
314
  </details>
@@ -418,7 +410,7 @@ crew = Crew(agents=[agent], tasks=[task], task_callback=admina_task_callback)
418
410
 
419
411
  </details>
420
412
 
421
- See [full integration docs](docs/guides/integrations.md) for details.
413
+ See [full integration docs](https://github.com/admina-org/admina/blob/main/docs/guides/integrations.md) for details.
422
414
 
423
415
  ## Performance — Hybrid Python + Rust engine
424
416
 
@@ -427,7 +419,7 @@ The Rust core engine is an optional accelerator. The default
427
419
  enable the Rust engine with the opt-in extra `pip install
428
420
  "admina-framework[rust]"` (or build from source for local development —
429
421
  `maturin develop --release --manifest-path core-rust/Cargo.toml`, see
430
- [CONTRIBUTING.md](CONTRIBUTING.md)). At runtime Admina auto-detects
422
+ [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md)). At runtime Admina auto-detects
431
423
  whichever is available and falls back transparently to Python if the Rust
432
424
  extension is not installed.
433
425
 
@@ -498,7 +490,6 @@ The full stack (`docker compose up`) runs 9 containers:
498
490
  | `8080` | Proxy | MCP proxy + REST API + OpenAPI docs |
499
491
  | `3000` | Dashboard | Real-time governance web UI |
500
492
  | `3001` | Grafana | Metrics dashboards |
501
- | `9090` | MinIO Console | Forensic storage browser |
502
493
  | `4317` | OTEL Collector | OTLP gRPC ingestion |
503
494
 
504
495
  ClickHouse and Redis are internal only (not exposed to host).
@@ -509,45 +500,20 @@ ClickHouse and Redis are internal only (not exposed to host).
509
500
  <br>
510
501
 
511
502
  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
503
+ tamper-evident) supports three backends. Read this before picking one for
513
504
  production.
514
505
 
515
506
  | Backend | License | When to use | Caveats |
516
507
  |---------|---------|-------------|---------|
517
508
  | **`memory`** *(default)* | n/a | Local development, tests, demos | Records are LOST on restart — no audit persistence. Loud warning at startup. |
518
509
  | **`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. |
510
+ | **`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
511
 
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.
512
+ > **Using MinIO?** Point the `s3` backend at your MinIO server via
513
+ > `FORENSIC_S3_ENDPOINT` — MinIO speaks the S3 API, so no MinIO-specific
514
+ > client is needed. The legacy `minio`-SDK backend was removed in 0.9.5
515
+ > (the MinIO Python SDK is archived); `FORENSIC_BACKEND=minio` now
516
+ > transparently routes to the `s3` backend with a migration warning.
551
517
 
552
518
  </details>
553
519
 
@@ -561,7 +527,7 @@ production.
561
527
  | `ADMINA_API_KEY` | *(empty)* | API key for all endpoints |
562
528
  | `UPSTREAM_MCP_URL` | `http://localhost:9000` | Default upstream MCP server |
563
529
  | `REDIS_URL` | `redis://localhost:6379/0` | Session state + rate limiting |
564
- | `MINIO_SECRET_KEY` | *(required)* | MinIO secret key for forensic storage |
530
+ | `FORENSIC_BACKEND` | `memory` | Forensic store: `memory` \| `filesystem` \| `s3` |
565
531
  | `LOG_LEVEL` | `INFO` | Logging verbosity |
566
532
 
567
533
  </details>
@@ -586,7 +552,7 @@ admina/
586
552
  | +-- domains/ GuardrailsAI
587
553
  | +-- compliance/ EU AI Act template
588
554
  | +-- transports/ MCP, HTTP REST
589
- | +-- forensic/ MinIO, Filesystem
555
+ | +-- forensic/ Filesystem
590
556
  | +-- auth/ API Key
591
557
  | +-- pii/ spaCy + Regex
592
558
  | +-- alerts/ Log, Webhook
@@ -645,12 +611,12 @@ curl http://localhost:8080/api/dashboard/score
645
611
 
646
612
  ## Project documents
647
613
 
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
614
+ - [CONTRIBUTING.md](https://github.com/admina-org/admina/blob/main/CONTRIBUTING.md) — development setup, testing, and pull request workflow
615
+ - [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
616
+ - [ROADMAP.md](https://github.com/admina-org/admina/blob/main/ROADMAP.md) — planned milestones from 0.9.x to 1.0 and beyond
617
+ - [CHANGELOG.md](https://github.com/admina-org/admina/blob/main/CHANGELOG.md) — release notes
618
+ - [SECURITY.md](https://github.com/admina-org/admina/blob/main/SECURITY.md) — coordinated disclosure policy
619
+ - [CODE_OF_CONDUCT.md](https://github.com/admina-org/admina/blob/main/CODE_OF_CONDUCT.md) — Contributor Covenant 2.1
654
620
  - **Browse the AI-generated wiki** → [deepwiki.com/admina-org/admina](https://deepwiki.com/admina-org/admina)
655
621
 
656
622
  Admina is Apache 2.0. Contributions are welcome.
@@ -659,7 +625,7 @@ Admina is Apache 2.0. Contributions are welcome.
659
625
 
660
626
  Copyright © 2025–2026 [Stefano Noferi](https://github.com/stefanoferi) & Admina contributors
661
627
 
662
- Licensed under the Apache License, Version 2.0. See [LICENSE](LICENSE) for the full text.
628
+ Licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/admina-org/admina/blob/main/LICENSE) for the full text.
663
629
 
664
630
  ---
665
631
 
@@ -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.9.5"
27
27
 
28
28
  __all__ = [
29
29
  "__version__",
@@ -74,7 +74,7 @@ def _bootstrap_secrets(project_dir: Path, *, force: bool = False) -> dict[str, s
74
74
  click.echo()
75
75
  click.echo(f" API Key: {generated['ADMINA_API_KEY']}")
76
76
  click.echo(f" Password: {generated['ADMINA_DASHBOARD_PASSWORD']}")
77
- click.echo(" (dashboard, Grafana, MinIO, ClickHouse)")
77
+ click.echo(" (dashboard, Grafana, ClickHouse)")
78
78
  click.echo()
79
79
  click.echo(" Save these now — they will NOT be shown again.")
80
80
  click.echo(" View: admina password show")
@@ -298,7 +298,7 @@ def _format_next_steps(project_name: str) -> str:
298
298
  if docker_ok:
299
299
  lines.append(
300
300
  " admina dev --stack # full Docker stack "
301
- "(proxy + redis + clickhouse + minio + grafana)"
301
+ "(proxy + redis + clickhouse + grafana)"
302
302
  )
303
303
  else:
304
304
  lines.extend(
@@ -592,7 +592,6 @@ def _run_local(
592
592
  env.setdefault("OTEL_ENDPOINT", "")
593
593
  env.setdefault("REDIS_URL", "")
594
594
  env.setdefault("CLICKHOUSE_HOST", "")
595
- env.setdefault("MINIO_ENDPOINT", "")
596
595
  env.setdefault("UPSTREAM_MCP_URL", "")
597
596
  env.setdefault("LOG_LEVEL", "INFO")
598
597
 
@@ -751,7 +750,7 @@ def _run_compose(
751
750
  "--stack",
752
751
  is_flag=True,
753
752
  default=False,
754
- help="Run the full Docker stack (proxy + dashboard + redis + clickhouse + minio + otel + grafana).",
753
+ help="Run the full Docker stack (proxy + dashboard + redis + clickhouse + otel + grafana).",
755
754
  )
756
755
  @click.option(
757
756
  "--with-llm",
@@ -801,7 +800,7 @@ def dev(
801
800
  admina dev Local mode (default): one uvicorn process,
802
801
  dashboard served on the same port. No Docker.
803
802
  admina dev --stack Docker compose: proxy + dashboard + redis +
804
- clickhouse + minio + otel + grafana.
803
+ clickhouse + otel + grafana.
805
804
  admina dev --with-llm --stack plus local LLM services
806
805
  (ollama + chromadb + open-webui).
807
806
 
@@ -1125,7 +1124,7 @@ def doctor() -> None:
1125
1124
  ("httpx", "httpx"),
1126
1125
  ("pydantic", "pydantic"),
1127
1126
  ("redis", "redis"),
1128
- ("minio", "minio"),
1127
+ ("boto3", "boto3"),
1129
1128
  ("clickhouse_connect", "clickhouse-connect"),
1130
1129
  ("numpy", "numpy"),
1131
1130
  ("sklearn", "scikit-learn"),
@@ -1366,7 +1365,7 @@ def password_show() -> None:
1366
1365
  click.echo()
1367
1366
  click.echo(f" API Key: {data.get('ADMINA_API_KEY', '(not set)')}")
1368
1367
  click.echo(f" Password: {data.get('ADMINA_DASHBOARD_PASSWORD', '(not set)')}")
1369
- click.echo(" (shared across dashboard, Grafana, MinIO, ClickHouse)")
1368
+ click.echo(" (shared across dashboard, Grafana, ClickHouse)")
1370
1369
  click.echo()
1371
1370
 
1372
1371
 
@@ -56,7 +56,7 @@ domains:
56
56
  enabled: {{ domains.compliance | lower }}
57
57
  {% if domains.compliance %}
58
58
  forensic:
59
- storage: minio
59
+ storage: filesystem
60
60
  bucket: forensic-blackbox
61
61
  eu_ai_act:
62
62
  enabled: true
@@ -68,7 +68,7 @@ dashboard:
68
68
  enabled: true
69
69
  port: 3000
70
70
 
71
- forensic_store: minio
71
+ forensic_store: filesystem
72
72
  auth_provider: apikey
73
73
  pii_engine: spacy-regex
74
74
  alert_channels:
@@ -20,8 +20,8 @@ services:
20
20
  - CLICKHOUSE_HOST=clickhouse
21
21
  - CLICKHOUSE_PORT=8123
22
22
  - CLICKHOUSE_DB=admina
23
- - MINIO_ENDPOINT=minio:9000
24
- - MINIO_BUCKET=forensic-blackbox
23
+ - FORENSIC_BACKEND=filesystem
24
+ - FORENSIC_BASE_DIR=/app/.admina/forensic
25
25
  - OTEL_ENDPOINT=http://otel-collector:4317
26
26
  - LOG_LEVEL=INFO
27
27
  depends_on:
@@ -29,8 +29,6 @@ services:
29
29
  condition: service_healthy
30
30
  clickhouse:
31
31
  condition: service_healthy
32
- minio:
33
- condition: service_healthy
34
32
  healthcheck:
35
33
  test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
36
34
  interval: 10s
@@ -79,28 +77,6 @@ services:
79
77
  - admina
80
78
  {% endif %}
81
79
 
82
- # ── Storage: MinIO (Forensic Black Box) ─────────────────
83
- {% if domains.compliance %}
84
- minio:
85
- image: minio/minio:RELEASE.2024-11-07T00-52-20Z
86
- container_name: {{ project_name }}-minio
87
- command: server /data --console-address ":9090"
88
- ports:
89
- - "127.0.0.1:9090:9090"
90
- environment:
91
- - MINIO_ROOT_USER=${MINIO_ACCESS_KEY:-admina}
92
- - MINIO_ROOT_PASSWORD=${MINIO_SECRET_KEY:-changeme}
93
- volumes:
94
- - minio-data:/data
95
- healthcheck:
96
- test: ["CMD", "mc", "ready", "local"]
97
- interval: 5s
98
- timeout: 3s
99
- retries: 10
100
- networks:
101
- - admina
102
- {% endif %}
103
-
104
80
  # ── AI Infra: Ollama LLM ──────────────────────────────────
105
81
  {% if with_llm | default(true) and domains.ai_infra and ai_infra_llm_enabled | default(true) %}
106
82
  ollama:
@@ -243,7 +219,6 @@ volumes:
243
219
  {% endif %}
244
220
  {% if domains.compliance %}
245
221
  clickhouse-data:
246
- minio-data:
247
222
  grafana-data:
248
223
  {% elif not ((domains.ai_infra and ai_infra_llm_enabled | default(true)) or (domains.ai_infra and ai_infra_rag_enabled | default(true)) or (domains.ai_infra and ai_infra_webui_enabled | default(true))) %}
249
224
  {}