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