agentic-ops 0.1.0__tar.gz → 0.1.2__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 (166) hide show
  1. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/PKG-INFO +31 -6
  2. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/README.md +29 -5
  3. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/README_FR.md +29 -5
  4. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/llm_provider_registry.py +71 -2
  5. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/cli/main.py +1 -1
  6. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/mcp_server.py +1 -1
  7. agentic_ops-0.1.2/docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md +228 -0
  8. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/pyproject.toml +3 -2
  9. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/uv.lock +152 -12
  10. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.env.example +0 -0
  11. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.github/workflows/ci.yml +0 -0
  12. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.github/workflows/publish.yml +0 -0
  13. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.gitignore +0 -0
  14. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/CAC_TAILSCALE_PULL_CONNECTOR.md +0 -0
  15. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/DOCKER_SANDBOX_VALIDATION.md +0 -0
  16. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/Dockerfile +0 -0
  17. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/Dockerfile.hf +0 -0
  18. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/GENESIS.md +0 -0
  19. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/INTEGRATION_GUIDE.md +0 -0
  20. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/LICENSE +0 -0
  21. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/cac_pull_collector.py +0 -0
  22. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/datadog_adapter.py +0 -0
  23. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/kubernetes_adapter.py +0 -0
  24. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/llm_protocol.py +0 -0
  25. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/protocol.py +0 -0
  26. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/registry_adapter.py +0 -0
  27. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/runbook_rag.py +0 -0
  28. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/slack_adapter.py +0 -0
  29. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/cli/compile_taxonomy.py +0 -0
  30. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/cli/trust_ledger.py +0 -0
  31. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/__init__.py +0 -0
  32. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/approvals.py +0 -0
  33. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/approvers.py +0 -0
  34. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/circuit_breaker.py +0 -0
  35. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/contracts.py +0 -0
  36. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/crypto.py +0 -0
  37. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/distributed.py +0 -0
  38. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/evidence.py +0 -0
  39. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/executor.py +0 -0
  40. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/facts.py +0 -0
  41. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/governance_schemas.py +0 -0
  42. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/idempotency.py +0 -0
  43. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/infra_specialist.py +0 -0
  44. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/model_specialist.py +0 -0
  45. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/orchestrator.py +0 -0
  46. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/policy.py +0 -0
  47. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/policy_engine.py +0 -0
  48. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/prompt_guard.py +0 -0
  49. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/remediation_agent.py +0 -0
  50. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/specialist.py +0 -0
  51. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/state.py +0 -0
  52. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/telemetry.py +0 -0
  53. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/approval_sweeper.py +0 -0
  54. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/grafana_webhook.py +0 -0
  55. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/slack_verify.py +0 -0
  56. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/slack_webhook.py +0 -0
  57. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0001.json +0 -0
  58. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0002.json +0 -0
  59. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0003.json +0 -0
  60. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0004.json +0 -0
  61. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0005.json +0 -0
  62. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-CHAOS-31c6e006.json +0 -0
  63. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-CHAOS-5950095d.json +0 -0
  64. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-CHAOS-d6c18601.json +0 -0
  65. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/_index.json +0 -0
  66. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/action_catalog.yaml +0 -0
  67. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/approvers.yaml +0 -0
  68. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/autonomy_policy.yaml +0 -0
  69. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/risk_register.yaml +0 -0
  70. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/shadow_policy.yaml +0 -0
  71. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/knowledge_base/runbooks/DATA-042.md +0 -0
  72. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/knowledge_base/runbooks/INFRA-001.md +0 -0
  73. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/action.schema.json +0 -0
  74. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/diagnosis.schema.json +0 -0
  75. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/evidence.schema.json +0 -0
  76. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/risk.schema.json +0 -0
  77. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/__init__.py +0 -0
  78. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/base.py +0 -0
  79. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/data.py +0 -0
  80. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/github.py +0 -0
  81. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/infra.py +0 -0
  82. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/model.py +0 -0
  83. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/observability.py +0 -0
  84. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docker-compose.yml +0 -0
  85. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/HISTORICAL_AUDIT_AND_REMEDIATION.md +0 -0
  86. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md +0 -0
  87. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MAS_FALLBACK_ARCHITECTURE_GUIDE.md +0 -0
  88. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MCP_SERVER_GUIDE.md +0 -0
  89. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MONOREPO_DECOUPLING_AND_REGRESSION_AUDIT.md +0 -0
  90. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MULTI_LLM_ROLE_SPECIALIZATION_GUIDE.md +0 -0
  91. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/OPENROUTER_FREE_MODELS_GUIDE.md +0 -0
  92. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/PRESENTATION_SLIDES.md +0 -0
  93. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/SLACK_HITL_INTEGRATION_GUIDE.md +0 -0
  94. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/TARGET_OUTAGE_AND_RESILIENCE_GUIDE.md +0 -0
  95. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/WORM_TRUST_LEDGER_GUIDE.md +0 -0
  96. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/liora_datascientest_logo.png +0 -0
  97. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/01_docker_agentic_platform_welcome.png +0 -0
  98. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/02_docker_kits_catalog.png +0 -0
  99. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/03_docker_sandbox_running.png +0 -0
  100. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/04_demo_agentic_ops_execution.png +0 -0
  101. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/05_hardware_telemetry_amd_epyc.png +0 -0
  102. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/06_slack_security_rejection_401.png +0 -0
  103. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/07_adversarial_security_tests_passed.png +0 -0
  104. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/08_mlops_scenarios_zero_forbidden.png +0 -0
  105. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/09_governance_fsm_grand_chelem.png +0 -0
  106. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/11_tailscale_up_daemon_success.png +0 -0
  107. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/12_tailscale_status_mesh_nodes.png +0 -0
  108. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/13_tailscale_netcheck_derp_seattle.png +0 -0
  109. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/14_tailscaled_proxy_loop_diagnostic.png +0 -0
  110. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/15_tailscaled_derp10_clean_connected.png +0 -0
  111. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/cognitive_web_console_live.png +0 -0
  112. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_01_flux_agentic_ops.png +0 -0
  113. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_02_signal_brut_diagnostic.png +0 -0
  114. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_03_ia_propose_code_autorise.png +0 -0
  115. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_04_humain_decide_registre_prouve.png +0 -0
  116. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_05_production_live_mode_degrade.png +0 -0
  117. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_06_demonstration_live_console_glass_box.png +0 -0
  118. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/fiche_soutenance_jury_sre.md +0 -0
  119. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/mlops_failure_modes_taxonomy.md +0 -0
  120. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/mlops_simulation_scenarios_registry.md +0 -0
  121. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/Chart.yaml +0 -0
  122. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/templates/deployment.yaml +0 -0
  123. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/templates/rbac.yaml +0 -0
  124. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/templates/serviceaccount.yaml +0 -0
  125. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/values.yaml +0 -0
  126. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/librechat.yaml +0 -0
  127. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/reports/scenarios.json +0 -0
  128. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/scripts/demo_agentic_ops.sh +0 -0
  129. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/scripts/entrypoint.sh +0 -0
  130. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/start_sandbox.sh +0 -0
  131. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adapters/__init__.py +0 -0
  132. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adapters/test_cac_pull_collector.py +0 -0
  133. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adapters/test_llm_provider_registry.py +0 -0
  134. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adversarial/test_evidence_integrity.py +0 -0
  135. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adversarial/test_idempotency_and_rate.py +0 -0
  136. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adversarial/test_prompt_hygiene.py +0 -0
  137. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/conftest.py +0 -0
  138. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/entrypoints/test_chat_endpoint.py +0 -0
  139. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/entrypoints/test_mcp_server.py +0 -0
  140. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/integration/test_model_registry.py +0 -0
  141. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/integration/test_registry_e2e.py +0 -0
  142. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/known_gaps.yaml +0 -0
  143. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/__init__.py +0 -0
  144. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/conftest.py +0 -0
  145. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/test_known_gaps.py +0 -0
  146. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/test_loading.py +0 -0
  147. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/test_policy_engine.py +0 -0
  148. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/__init__.py +0 -0
  149. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/adapter.py +0 -0
  150. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/conftest.py +0 -0
  151. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/adversarial/sc_101_log_injection.yaml +0 -0
  152. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/adversarial/sc_102_param_injection.yaml +0 -0
  153. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/adversarial/sc_103_poisoned_runbook.yaml +0 -0
  154. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_001_data_ingestion_drop.yaml +0 -0
  155. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_003_rollback_trap.yaml +0 -0
  156. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_004_infra_red_herring.yaml +0 -0
  157. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_005_real_infra_failure.yaml +0 -0
  158. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/loader.py +0 -0
  159. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/runner.py +0 -0
  160. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/schema.py +0 -0
  161. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/stubs.py +0 -0
  162. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/test_scenarios.py +0 -0
  163. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/security/test_executor.py +0 -0
  164. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/test_fsm_orchestrator.py +0 -0
  165. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/test_grafana_webhook.py +0 -0
  166. {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/test_tools_security.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentic-ops
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: A generic, plug-and-play Agentic Control Plane for MLOps Governance
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -12,6 +12,7 @@ Requires-Dist: hypothesis>=6.0.0
12
12
  Requires-Dist: instructor>=1.0.0
13
13
  Requires-Dist: kubernetes>=29.0.0
14
14
  Requires-Dist: litellm>=1.0.0
15
+ Requires-Dist: mcp>=2.3.0
15
16
  Requires-Dist: prefect>=2.0.0
16
17
  Requires-Dist: prometheus-client>=0.20.0
17
18
  Requires-Dist: pydantic>=2.0.0
@@ -29,6 +30,8 @@ Description-Content-Type: text/markdown
29
30
 
30
31
  # Agentic-Ops Control Plane
31
32
 
33
+ [![PyPI - Version](https://img.shields.io/pypi/v/agentic-ops?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/agentic-ops/)
34
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/agentic-ops)](https://pypi.org/project/agentic-ops/)
32
35
  [![M8ven Trust](https://m8ven.ai/badge/mcp/nolll77-agentic-ops-1ogfsr?v=ccffd1d26d212de101328dba6fea5547)](https://m8ven.ai/mcp/nolll77-agentic-ops-1ogfsr?s=readme)
33
36
  ![Status](https://img.shields.io/badge/Status-Production%20Hardened-success)
34
37
  ![Security](https://img.shields.io/badge/Security-Red%20Teamed-critical)
@@ -60,6 +63,7 @@ To demonstrate this platform-agnostic design in real production conditions, `Age
60
63
  1. **Live Serverless Auto-Wake Production Instance (`Render` + `Tailscale` + `cron-job.org`)**:
61
64
  - **Live Control Plane Status**: **[`https://agentic-ops-5ebv.onrender.com/`](https://agentic-ops-5ebv.onrender.com/)**
62
65
  - **Live Interactive SRE Web Console (`/console`)**: **[`https://agentic-ops-5ebv.onrender.com/console`](https://agentic-ops-5ebv.onrender.com/console)**
66
+ - **Live Interactive Web Chat Copilot (`/chat`)**: **[`https://agentic-ops-5ebv.onrender.com/chat`](https://agentic-ops-5ebv.onrender.com/chat)**
63
67
  - **Live `MCP` (`Model Context Protocol`) Manifest (`/mcp/manifest`)**: **[`https://agentic-ops-5ebv.onrender.com/mcp/manifest`](https://agentic-ops-5ebv.onrender.com/mcp/manifest)** *(Full guide: **[`docs/MCP_SERVER_GUIDE.md`](docs/MCP_SERVER_GUIDE.md)**)*
64
68
  - **Live Tailscale Mesh Status (`100.85.198.81`)**: **[`https://agentic-ops-5ebv.onrender.com/api/tailscale/status`](https://agentic-ops-5ebv.onrender.com/api/tailscale/status)**
65
69
  - **Live Read-Only Pull Snapshot (`jakatt/cac_mlops`)**: **[`https://agentic-ops-5ebv.onrender.com/api/cac/snapshot`](https://agentic-ops-5ebv.onrender.com/api/cac/snapshot)**
@@ -402,6 +406,7 @@ To allow `Agentic-Ops` to run continuously on a free-tier PaaS (`Render`, `Huggi
402
406
  | :--- | :--- | :--- | :--- |
403
407
  | **Root Auto-Wake & Daemon Status** | **[`https://agentic-ops-5ebv.onrender.com/`](https://agentic-ops-5ebv.onrender.com/)** | `GET` | **Primary Auto-Wake URL**. Visiting this URL in a browser or calling it via `fetch()` from an external frontend (`Vercel`) wakes the container automatically if asleep and returns the live status of local `Redis` (`127.0.0.1:6379`) and `Tailscale SOCKS5` (`127.0.0.1:1055`). |
404
408
  | **Interactive SRE Web Terminal (`/console`)** | **[`https://agentic-ops-5ebv.onrender.com/console`](https://agentic-ops-5ebv.onrender.com/console)** | `GET` | **Zero-Cost SSH Shell Replacement**. Dark-mode browser terminal providing 1-click execution of `pytest` suites, `trust_ledger list`, `tailscale status` (with automatic PII redaction), `tailscale netcheck`, and `redis-cli PING`. |
409
+ | **Interactive SRE Web Chat Copilot (`/chat`)** | **[`https://agentic-ops-5ebv.onrender.com/chat`](https://agentic-ops-5ebv.onrender.com/chat)** | `GET` | **Natural Language SRE Copilot**. Dark-mode conversational UI to query telemetry, models drift, WORM ledger security, and MAS topology via `POST /api/chat`. |
405
410
  | **Interactive `Swagger UI` API Console (`/docs`)** | **[`https://agentic-ops-5ebv.onrender.com/docs`](https://agentic-ops-5ebv.onrender.com/docs)** | `GET` | Interactive `OpenAPI` interface (`Try it out` -> `Execute`) for all endpoints and diagnostic commands. |
406
411
  | **Whitelisted Diagnostic Runner** | **[`https://agentic-ops-5ebv.onrender.com/api/diagnostics/pytest_cac_connector`](https://agentic-ops-5ebv.onrender.com/api/diagnostics/pytest_cac_connector)** | `GET` | Executes a whitelisted diagnostic command inside the container (`pytest_cac_connector`, `pytest_security`, `pytest_all`, `trust_ledger_list`, `tailscale_status`, `tailscale_netcheck`, `tailscale_logs`, `redis_ping`, `system_info`). |
407
412
  | **Keep-Alive Liveness Probe** | **[`https://agentic-ops-5ebv.onrender.com/healthz`](https://agentic-ops-5ebv.onrender.com/healthz)** | `GET` | Lightweight health check returning `{"status": "ok"}`. Polled every `10 minutes` by `cron-job.org` to prevent the `15-minute` free-tier inactivity spin-down. |
@@ -1437,7 +1442,25 @@ Applying the repository's **Radical Honesty** rule, `Agentic-Ops` intentionally
1437
1442
 
1438
1443
  ---
1439
1444
 
1440
- ## Installation & E2E Validation Tests
1445
+ ## Installation & Quickstart
1446
+
1447
+ ### Option A: Install from PyPI (Recommended for Production & Clusters)
1448
+
1449
+ ```bash
1450
+ # Standard installation via pip
1451
+ pip install agentic-ops
1452
+
1453
+ # Or using uv (ultra-fast dependency resolver)
1454
+ uv pip install agentic-ops
1455
+
1456
+ # Start the full Control Plane (FastAPI REST API, SRE Console /console, Chat /chat, MCP Server /sse)
1457
+ agentic-start --port 8000 --host 0.0.0.0
1458
+
1459
+ # Run SRE Trust Ledger diagnostics
1460
+ agentic-ops audit
1461
+ ```
1462
+
1463
+ ### Option B: Local Source Development & Full Test Suite
1441
1464
 
1442
1465
  ```bash
1443
1466
  # 1. Environment setup
@@ -1445,13 +1468,13 @@ git clone https://github.com/nolll77/agentic-ops.git
1445
1468
  cd agentic-ops-core
1446
1469
  uv venv .venv
1447
1470
  source .venv/bin/activate
1448
- uv pip install -e .
1471
+ uv pip install -e ".[dev]"
1449
1472
  uv pip install 'httpx[socks]'
1450
1473
 
1451
- # 2. Run the E2E Security, Scenarios, CAC Connector & MCP Gateway Test Suite
1452
- PYTHONPATH=. pytest tests/ -v
1474
+ # 2. Run the E2E Security, Scenarios, CAC Connector & MCP Gateway Test Suite (127 tests)
1475
+ pytest tests/ -v
1453
1476
  # > Verifies WORM immutability, Fail-Closed governance,
1454
- # > non-bypassable Orchestrator state transitions, 13 CacPullCollector tests, and 12 MCP Gateway tests.
1477
+ # > non-bypassable Orchestrator state transitions, 13 CacPullCollector tests, and 24 MCP Gateway tests.
1455
1478
 
1456
1479
  # 3. Launch the Trust Ledger Audit CLI or the STDIO MCP Server
1457
1480
  python -m agentic_ops.cli.trust_ledger list
@@ -1484,6 +1507,8 @@ python -m agentic_ops.entrypoints.mcp_server
1484
1507
  Exhaustive architectural breakdown of the 5 cascading resilience and safety fallback layers in `Agentic-Ops`: Cognitive Multi-LLM failover, FinOps Circuit Breaker, Specialist routing fallback, Policy Engine fail-closed enforcement, and Remote VPS/Tailscale partition locks. Includes complete code mapping keys, trigger conditions, fallback states, and the **Provider Independence & Disaster Recovery Strategy** detailing the 4 lines of defense (zero-code env switches, 100% sovereign off-cloud Ollama over Tailscale, granular per-role splitting, and deterministic 0-token safety net) if OpenRouter cuts access or changes policies.
1485
1508
  11. **[Multi-Agent System (MAS) Agent Selection & Default Routing Architecture (`docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md`)](docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md)**:
1486
1509
  In-depth guide to the 5 specialized agent roles (`DataSpecialist`, `ModelSpecialist`, `InfraSpecialist`, `RemediationAgent`, `WebChatCopilot`), taxonomic routing logic in `_get_specialist()`, anti-bias judicial separation between investigation and remediation, and the rationale behind `DataSpecialist` as the universal platform default. Includes the exhaustive breakdown of non-cognitive components operating with **zero LLMs (0-token, pure deterministic Python)** under the Zero-Trust security model, as well as the interactive **Live MAS Topology & Agent Inspector** embedded directly in both the Web Console (`/console`) and Web Chat (`/chat`) backed by `GET /api/mas/topology`.
1510
+ 12. **[PyPI Release & Distribution Engineering Guide (`docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md`)](docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md)**:
1511
+ Comprehensive guide to public package distribution on PyPI: software supply chain security, zero-static-secrets architecture using OpenID Connect (OIDC Trusted Publishing), SLSA provenance attestations, installation and CLI consumption options, and release lifecycle runbooks for maintainers.
1487
1512
 
1488
1513
 
1489
1514
 
@@ -1,5 +1,7 @@
1
1
  # Agentic-Ops Control Plane
2
2
 
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/agentic-ops?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/agentic-ops/)
4
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/agentic-ops)](https://pypi.org/project/agentic-ops/)
3
5
  [![M8ven Trust](https://m8ven.ai/badge/mcp/nolll77-agentic-ops-1ogfsr?v=ccffd1d26d212de101328dba6fea5547)](https://m8ven.ai/mcp/nolll77-agentic-ops-1ogfsr?s=readme)
4
6
  ![Status](https://img.shields.io/badge/Status-Production%20Hardened-success)
5
7
  ![Security](https://img.shields.io/badge/Security-Red%20Teamed-critical)
@@ -31,6 +33,7 @@ To demonstrate this platform-agnostic design in real production conditions, `Age
31
33
  1. **Live Serverless Auto-Wake Production Instance (`Render` + `Tailscale` + `cron-job.org`)**:
32
34
  - **Live Control Plane Status**: **[`https://agentic-ops-5ebv.onrender.com/`](https://agentic-ops-5ebv.onrender.com/)**
33
35
  - **Live Interactive SRE Web Console (`/console`)**: **[`https://agentic-ops-5ebv.onrender.com/console`](https://agentic-ops-5ebv.onrender.com/console)**
36
+ - **Live Interactive Web Chat Copilot (`/chat`)**: **[`https://agentic-ops-5ebv.onrender.com/chat`](https://agentic-ops-5ebv.onrender.com/chat)**
34
37
  - **Live `MCP` (`Model Context Protocol`) Manifest (`/mcp/manifest`)**: **[`https://agentic-ops-5ebv.onrender.com/mcp/manifest`](https://agentic-ops-5ebv.onrender.com/mcp/manifest)** *(Full guide: **[`docs/MCP_SERVER_GUIDE.md`](docs/MCP_SERVER_GUIDE.md)**)*
35
38
  - **Live Tailscale Mesh Status (`100.85.198.81`)**: **[`https://agentic-ops-5ebv.onrender.com/api/tailscale/status`](https://agentic-ops-5ebv.onrender.com/api/tailscale/status)**
36
39
  - **Live Read-Only Pull Snapshot (`jakatt/cac_mlops`)**: **[`https://agentic-ops-5ebv.onrender.com/api/cac/snapshot`](https://agentic-ops-5ebv.onrender.com/api/cac/snapshot)**
@@ -373,6 +376,7 @@ To allow `Agentic-Ops` to run continuously on a free-tier PaaS (`Render`, `Huggi
373
376
  | :--- | :--- | :--- | :--- |
374
377
  | **Root Auto-Wake & Daemon Status** | **[`https://agentic-ops-5ebv.onrender.com/`](https://agentic-ops-5ebv.onrender.com/)** | `GET` | **Primary Auto-Wake URL**. Visiting this URL in a browser or calling it via `fetch()` from an external frontend (`Vercel`) wakes the container automatically if asleep and returns the live status of local `Redis` (`127.0.0.1:6379`) and `Tailscale SOCKS5` (`127.0.0.1:1055`). |
375
378
  | **Interactive SRE Web Terminal (`/console`)** | **[`https://agentic-ops-5ebv.onrender.com/console`](https://agentic-ops-5ebv.onrender.com/console)** | `GET` | **Zero-Cost SSH Shell Replacement**. Dark-mode browser terminal providing 1-click execution of `pytest` suites, `trust_ledger list`, `tailscale status` (with automatic PII redaction), `tailscale netcheck`, and `redis-cli PING`. |
379
+ | **Interactive SRE Web Chat Copilot (`/chat`)** | **[`https://agentic-ops-5ebv.onrender.com/chat`](https://agentic-ops-5ebv.onrender.com/chat)** | `GET` | **Natural Language SRE Copilot**. Dark-mode conversational UI to query telemetry, models drift, WORM ledger security, and MAS topology via `POST /api/chat`. |
376
380
  | **Interactive `Swagger UI` API Console (`/docs`)** | **[`https://agentic-ops-5ebv.onrender.com/docs`](https://agentic-ops-5ebv.onrender.com/docs)** | `GET` | Interactive `OpenAPI` interface (`Try it out` -> `Execute`) for all endpoints and diagnostic commands. |
377
381
  | **Whitelisted Diagnostic Runner** | **[`https://agentic-ops-5ebv.onrender.com/api/diagnostics/pytest_cac_connector`](https://agentic-ops-5ebv.onrender.com/api/diagnostics/pytest_cac_connector)** | `GET` | Executes a whitelisted diagnostic command inside the container (`pytest_cac_connector`, `pytest_security`, `pytest_all`, `trust_ledger_list`, `tailscale_status`, `tailscale_netcheck`, `tailscale_logs`, `redis_ping`, `system_info`). |
378
382
  | **Keep-Alive Liveness Probe** | **[`https://agentic-ops-5ebv.onrender.com/healthz`](https://agentic-ops-5ebv.onrender.com/healthz)** | `GET` | Lightweight health check returning `{"status": "ok"}`. Polled every `10 minutes` by `cron-job.org` to prevent the `15-minute` free-tier inactivity spin-down. |
@@ -1408,7 +1412,25 @@ Applying the repository's **Radical Honesty** rule, `Agentic-Ops` intentionally
1408
1412
 
1409
1413
  ---
1410
1414
 
1411
- ## Installation & E2E Validation Tests
1415
+ ## Installation & Quickstart
1416
+
1417
+ ### Option A: Install from PyPI (Recommended for Production & Clusters)
1418
+
1419
+ ```bash
1420
+ # Standard installation via pip
1421
+ pip install agentic-ops
1422
+
1423
+ # Or using uv (ultra-fast dependency resolver)
1424
+ uv pip install agentic-ops
1425
+
1426
+ # Start the full Control Plane (FastAPI REST API, SRE Console /console, Chat /chat, MCP Server /sse)
1427
+ agentic-start --port 8000 --host 0.0.0.0
1428
+
1429
+ # Run SRE Trust Ledger diagnostics
1430
+ agentic-ops audit
1431
+ ```
1432
+
1433
+ ### Option B: Local Source Development & Full Test Suite
1412
1434
 
1413
1435
  ```bash
1414
1436
  # 1. Environment setup
@@ -1416,13 +1438,13 @@ git clone https://github.com/nolll77/agentic-ops.git
1416
1438
  cd agentic-ops-core
1417
1439
  uv venv .venv
1418
1440
  source .venv/bin/activate
1419
- uv pip install -e .
1441
+ uv pip install -e ".[dev]"
1420
1442
  uv pip install 'httpx[socks]'
1421
1443
 
1422
- # 2. Run the E2E Security, Scenarios, CAC Connector & MCP Gateway Test Suite
1423
- PYTHONPATH=. pytest tests/ -v
1444
+ # 2. Run the E2E Security, Scenarios, CAC Connector & MCP Gateway Test Suite (127 tests)
1445
+ pytest tests/ -v
1424
1446
  # > Verifies WORM immutability, Fail-Closed governance,
1425
- # > non-bypassable Orchestrator state transitions, 13 CacPullCollector tests, and 12 MCP Gateway tests.
1447
+ # > non-bypassable Orchestrator state transitions, 13 CacPullCollector tests, and 24 MCP Gateway tests.
1426
1448
 
1427
1449
  # 3. Launch the Trust Ledger Audit CLI or the STDIO MCP Server
1428
1450
  python -m agentic_ops.cli.trust_ledger list
@@ -1455,6 +1477,8 @@ python -m agentic_ops.entrypoints.mcp_server
1455
1477
  Exhaustive architectural breakdown of the 5 cascading resilience and safety fallback layers in `Agentic-Ops`: Cognitive Multi-LLM failover, FinOps Circuit Breaker, Specialist routing fallback, Policy Engine fail-closed enforcement, and Remote VPS/Tailscale partition locks. Includes complete code mapping keys, trigger conditions, fallback states, and the **Provider Independence & Disaster Recovery Strategy** detailing the 4 lines of defense (zero-code env switches, 100% sovereign off-cloud Ollama over Tailscale, granular per-role splitting, and deterministic 0-token safety net) if OpenRouter cuts access or changes policies.
1456
1478
  11. **[Multi-Agent System (MAS) Agent Selection & Default Routing Architecture (`docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md`)](docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md)**:
1457
1479
  In-depth guide to the 5 specialized agent roles (`DataSpecialist`, `ModelSpecialist`, `InfraSpecialist`, `RemediationAgent`, `WebChatCopilot`), taxonomic routing logic in `_get_specialist()`, anti-bias judicial separation between investigation and remediation, and the rationale behind `DataSpecialist` as the universal platform default. Includes the exhaustive breakdown of non-cognitive components operating with **zero LLMs (0-token, pure deterministic Python)** under the Zero-Trust security model, as well as the interactive **Live MAS Topology & Agent Inspector** embedded directly in both the Web Console (`/console`) and Web Chat (`/chat`) backed by `GET /api/mas/topology`.
1480
+ 12. **[PyPI Release & Distribution Engineering Guide (`docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md`)](docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md)**:
1481
+ Comprehensive guide to public package distribution on PyPI: software supply chain security, zero-static-secrets architecture using OpenID Connect (OIDC Trusted Publishing), SLSA provenance attestations, installation and CLI consumption options, and release lifecycle runbooks for maintainers.
1458
1482
 
1459
1483
 
1460
1484
 
@@ -1,5 +1,7 @@
1
1
  # Agentic-Ops Control Plane
2
2
 
3
+ [![PyPI - Version](https://img.shields.io/pypi/v/agentic-ops?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/agentic-ops/)
4
+ [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/agentic-ops)](https://pypi.org/project/agentic-ops/)
3
5
  [![M8ven Trust](https://m8ven.ai/badge/mcp/nolll77-agentic-ops-1ogfsr?v=ccffd1d26d212de101328dba6fea5547)](https://m8ven.ai/mcp/nolll77-agentic-ops-1ogfsr?s=readme)
4
6
  ![Status](https://img.shields.io/badge/Status-Production%20Hardened-success)
5
7
  ![Security](https://img.shields.io/badge/Security-Red%20Teamed-critical)
@@ -31,6 +33,7 @@ Pour démontrer concrètement cette architecture agnostique en conditions réell
31
33
  1. **Instance de Production Serverless Auto-Wake en Ligne (`Render` + `Tailscale` + `cron-job.org`)** :
32
34
  - **Statut du Control Plane en direct** : **[`https://agentic-ops-5ebv.onrender.com/`](https://agentic-ops-5ebv.onrender.com/)**
33
35
  - **Terminal Web SRE Interactif (`/console`)** : **[`https://agentic-ops-5ebv.onrender.com/console`](https://agentic-ops-5ebv.onrender.com/console)**
36
+ - **Copilote Web Chat SRE en direct (`/chat`)** : **[`https://agentic-ops-5ebv.onrender.com/chat`](https://agentic-ops-5ebv.onrender.com/chat)**
34
37
  - **Manifeste `MCP` (`Model Context Protocol`) en direct (`/mcp/manifest`)** : **[`https://agentic-ops-5ebv.onrender.com/mcp/manifest`](https://agentic-ops-5ebv.onrender.com/mcp/manifest)** *(Guide complet : **[`docs/MCP_SERVER_GUIDE.md`](docs/MCP_SERVER_GUIDE.md)**)*
35
38
  - **Statut du Tunnel Maillé Tailscale (`100.85.198.81`)** : **[`https://agentic-ops-5ebv.onrender.com/api/tailscale/status`](https://agentic-ops-5ebv.onrender.com/api/tailscale/status)**
36
39
  - **Collecte Pull Lecture Seule en direct (`jakatt/cac_mlops`)** : **[`https://agentic-ops-5ebv.onrender.com/api/cac/snapshot`](https://agentic-ops-5ebv.onrender.com/api/cac/snapshot)**
@@ -373,6 +376,7 @@ Pour permettre à `Agentic-Ops` de tourner en continu sur un PaaS gratuit (`Rend
373
376
  | :--- | :--- | :--- | :--- |
374
377
  | **Route Racine Auto-Wake & Statut des Démons** | **[`https://agentic-ops-5ebv.onrender.com/`](https://agentic-ops-5ebv.onrender.com/)** | `GET` | **URL Principale d'Auto-Wake**. Visiter cette URL dans un navigateur ou l'appeler via `fetch()` depuis un frontend externe (`Vercel`) réveille automatiquement le conteneur s'il est en veille et renvoie l'état en direct de `Redis` (`127.0.0.1:6379`) et du proxy `Tailscale SOCKS5` (`127.0.0.1:1055`). |
375
378
  | **Terminal Web SRE Interactif (`/console`)** | **[`https://agentic-ops-5ebv.onrender.com/console`](https://agentic-ops-5ebv.onrender.com/console)** | `GET` | **Remplacement Gratuit du Shell SSH**. Terminal web Dark-Mode permettant d'exécuter en 1 clic les suites `pytest`, `trust_ledger list`, `tailscale status` (avec anonymisation PII automatique), `tailscale netcheck` et `redis-cli PING`. |
379
+ | **Copilote Web Chat SRE en direct (`/chat`)** | **[`https://agentic-ops-5ebv.onrender.com/chat`](https://agentic-ops-5ebv.onrender.com/chat)** | `GET` | **Copilote SRE en Langage Naturel**. Interface conversationnelle Dark-Mode pour interroger la télémétrie, la dérive des modèles, la sécurité du ledger WORM et la topologie MAS via `POST /api/chat`. |
376
380
  | **Console API Interactive `Swagger UI` (`/docs`)** | **[`https://agentic-ops-5ebv.onrender.com/docs`](https://agentic-ops-5ebv.onrender.com/docs)** | `GET` | Interface `OpenAPI` interactive (`Try it out` -> `Execute`) pour tester toutes les routes et commandes de diagnostic. |
377
381
  | **Exécuteur de Commandes de Diagnostic** | **[`https://agentic-ops-5ebv.onrender.com/api/diagnostics/pytest_cac_connector`](https://agentic-ops-5ebv.onrender.com/api/diagnostics/pytest_cac_connector)** | `GET` | Exécute une commande de diagnostic autorisée dans le conteneur (`pytest_cac_connector`, `pytest_security`, `pytest_all`, `trust_ledger_list`, `tailscale_status`, `tailscale_netcheck`, `tailscale_logs`, `redis_ping`, `system_info`). |
378
382
  | **Sonde de Vie `Keep-Alive` (`Liveness Probe`)** | **[`https://agentic-ops-5ebv.onrender.com/healthz`](https://agentic-ops-5ebv.onrender.com/healthz)** | `GET` | Route ultra-légère renvoyant `{"status": "ok"}`. Interrogée toutes les `10 minutes` par `cron-job.org` pour empêcher la mise en veille au bout de `15 minutes` d'inactivité du plan gratuit. |
@@ -1408,7 +1412,25 @@ En application stricte de la règle d'**Honnêteté Radicale** du projet, `Agent
1408
1412
 
1409
1413
  ---
1410
1414
 
1411
- ## Installation & Tests (E2E Validation)
1415
+ ## Installation & Prise en Main Rapide
1416
+
1417
+ ### Option A : Installation depuis PyPI (Recommandé pour la Production & Clusters)
1418
+
1419
+ ```bash
1420
+ # Installation standard via pip
1421
+ pip install agentic-ops
1422
+
1423
+ # Ou via uv (gestionnaire de paquets ultra-rapide)
1424
+ uv pip install agentic-ops
1425
+
1426
+ # Démarrer le Control Plane complet (API REST FastAPI, Console SRE /console, Chat /chat, Serveur MCP /sse)
1427
+ agentic-start --port 8000 --host 0.0.0.0
1428
+
1429
+ # Exécuter l'audit d'intégrité du Trust Ledger
1430
+ agentic-ops audit
1431
+ ```
1432
+
1433
+ ### Option B : Développement Local depuis les Sources & Suite de Tests Complète
1412
1434
 
1413
1435
  ```bash
1414
1436
  # 1. Préparation de l'environnement
@@ -1416,13 +1438,13 @@ git clone https://github.com/nolll77/agentic-ops.git
1416
1438
  cd agentic-ops-core
1417
1439
  uv venv .venv
1418
1440
  source .venv/bin/activate
1419
- uv pip install -e .
1441
+ uv pip install -e ".[dev]"
1420
1442
  uv pip install 'httpx[socks]'
1421
1443
 
1422
- # 2. Exécuter l'Intégration Continue E2E (Sécurité, Scénarios, Connecteur CAC & Passerelle MCP)
1423
- PYTHONPATH=. pytest tests/ -v
1444
+ # 2. Exécuter la suite complète de 127 tests (Sécurité, Scénarios, Connecteur CAC & Passerelle MCP)
1445
+ pytest tests/ -v
1424
1446
  # > Vérifie l'immutabilité WORM, le Fail-Closed de la Gouvernance,
1425
- # > l'incapacité de contournement de l'Orchestrateur, les 13 tests de CacPullCollector et les 12 tests MCP.
1447
+ # > l'incapacité de contournement de l'Orchestrateur, les 13 tests de CacPullCollector et les 24 tests MCP.
1426
1448
 
1427
1449
  # 3. Lancer la TUI d'Audit du Trust Ledger ou le Serveur MCP STDIO
1428
1450
  python -m agentic_ops.cli.trust_ledger list
@@ -1455,6 +1477,8 @@ python -m agentic_ops.entrypoints.mcp_server
1455
1477
  Dissection architecturale exhaustive des 5 niveaux de repli (fallbacks) en cascade garantissant la résilience et la sécurité du Control Plane : Bascule cognitive multi-LLM, Circuit Breaker FinOps, Aiguillage des Spécialistes, Fail-Closed du Moteur de Règles et Verrouillage Réseau VPS/Tailscale. Inclut toutes les clés de mapping de configuration, déclencheurs, états de repli, ainsi que la **Stratégie d'Indépendance Fournisseur & Plan de Continuité** détaillant la défense en 4 lignes (bascule zero-code d'env var, sanctuaire souverain 100% hors-cloud via Ollama/Tailscale, isolation fine par agent, et filet de sécurité déterministe à 0-token) en cas de coupure des accès ou changement de politique d'OpenRouter.
1456
1478
  11. **[Architecture de Sélection des Agents & Routage par Défaut du MAS (`docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md`)](docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md)** :
1457
1479
  Guide exhaustif sur les 5 rôles d'agents spécialisés (`DataSpecialist`, `ModelSpecialist`, `InfraSpecialist`, `RemediationAgent`, `WebChatCopilot`), la logique de routage taxonomique dans `_get_specialist()`, la séparation judiciaire anti-biais entre diagnostic et remédiation, et les justifications opérationnelles établissant `DataSpecialist` comme repli universel de la plateforme. Inclut la dissection architecturale des composants non-cognitifs (`CircuitBreakerFallback`, `ActionExecutor`, `CacPullCollector`, `SlackWebhookAgent`, 8 `AgentTools` et `MCPServerGateway`) fonctionnant avec **zéro LLM (0-token, Python déterministe pur)** selon le modèle de sécurité Zero-Trust, ainsi que l'encart d'inspection interactif **Topologie MAS & LLMs Live** intégré nativement dans la Console Web (`/console`) et le Chat Web (`/chat`) alimenté par l'endpoint `GET /api/mas/topology`.
1480
+ 12. **[Guide d'Ingénierie de Distribution PyPI & Release (`docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md`)](docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md)** :
1481
+ Guide exhaustif sur la distribution publique du package sur PyPI : sécurisation de la chaîne d'approvisionnement logicielle, architecture sans secret statique via OpenID Connect (OIDC Trusted Publishing), attestations numériques SLSA, modes d'installation et d'exécution CLI, et runbooks de release pour les mainteneurs.
1458
1482
 
1459
1483
 
1460
1484
 
@@ -495,16 +495,85 @@ class LLMProviderRegistry:
495
495
  "latency_ms": latency_ms,
496
496
  }
497
497
  except Exception as exc:
498
+ t_elapsed = round((time.monotonic() - t0) * 1000, 1)
499
+ offline_answer = _get_offline_sre_answer(message)
500
+ if offline_answer:
501
+ return {
502
+ "status": "ok",
503
+ "answer": offline_answer,
504
+ "action_type": "KNOWLEDGE_LOOKUP",
505
+ "confidence_score": 1.0,
506
+ "rationale": "Réponse déterministe servie depuis la base de connaissances SRE intégrée (mode dégradé Zero-Token).",
507
+ "provider": "agentic_ops_builtin",
508
+ "model": "deterministic_sre_knowledge_base",
509
+ "latency_ms": t_elapsed,
510
+ }
511
+
512
+ key_env = os.environ.get("OPENROUTER_API_KEY", "")
513
+ key_hint = "" if key_env else " (La variable OPENROUTER_API_KEY est absente de l'environnement)."
498
514
  return {
499
515
  "status": "error",
500
516
  "error": str(exc),
501
- "answer": f"Erreur de communication avec le fournisseur LLM ({exc}).",
517
+ "answer": (
518
+ f"Incident Fournisseur LLM : {exc}.{key_hint} "
519
+ "Vérifiez vos clés d'API (OPENROUTER_API_KEY, etc.) ou posez une question sur les concepts clés du Control Plane "
520
+ "(Circuit Breaker, WORM Ledger, Slack HITL, Dérive Evidently, Fail-Closed)."
521
+ ),
502
522
  "provider": os.environ.get("LLM_PROVIDER", "openrouter"),
503
523
  "model": os.environ.get("LLM_MODEL", "unknown"),
504
- "latency_ms": None,
524
+ "latency_ms": t_elapsed,
505
525
  }
506
526
 
507
527
 
528
+ def _get_offline_sre_answer(message: str) -> str | None:
529
+ msg = message.lower()
530
+ if any(k in msg for k in ["circuit breaker", "saturation", "quota", "coupe-circuit"]):
531
+ return (
532
+ "**[Mode Dégradé SRE — Base Déterministe In-Memory]**\n\n"
533
+ "Le **Circuit Breaker** (FinOps & SecOps) protège le cluster contre les tempêtes de requêtes, "
534
+ "les boucles infinies d'agents et l'explosion des coûts d'API LLM :\n\n"
535
+ "• **Seuil de déclenchement** : au-delà de 50 requêtes/heure ou en cas de défaillances 5xx en chaîne, "
536
+ "le coupe-circuit bascule immédiatement en état `TRIPPED`.\n"
537
+ "• **Gouvernance Fail-Closed** : dès l'activation du coupe-circuit, tout appel vers les modèles probabilistes "
538
+ "est coupé. Le système injecte le diagnostic figé `CIRCUIT_BREAKER_FALLBACK` et restreint les actions possibles "
539
+ "à l'opération non-mutante `CREATE_ISSUE` (ouverture d'un ticket GitHub d'alerte, 0 token consommé, 0 mutation en production)."
540
+ )
541
+ if any(k in msg for k in ["worm", "trust ledger", "ledger", "immuab", "tamper", "audit trail"]):
542
+ return (
543
+ "**[Mode Dégradé SRE — Base Déterministe In-Memory]**\n\n"
544
+ "Le **WORM Trust Ledger** (*Write Once, Read Many*) garantit l'immuabilité cryptographique et la non-répudiation "
545
+ "de chaque intervention autonome sur le cluster MLOps :\n\n"
546
+ "• **Chaînage cryptographique** : chaque épisode résolu est scellé par double signature `SHA-256` et `HMAC-SHA512` "
547
+ "enchaînée sur l'état du bloc précédent (arbre de Merkle).\n"
548
+ "• **Traçabilité forensique** : le registre consigne l'empreinte exacte du signal d'alerte, les faits système observés, "
549
+ "le diagnostic de l'agent, l'approbation humaine Slack et la commande exécutée.\n"
550
+ "• **Détection d'altération** : la commande `agentic-ops audit` recalcule l'intégrité de la chaîne. Toute modification "
551
+ "post-mortem ou suppression d'entrée déclenche immédiatement une alerte de falsification (*Tampering Alert*)."
552
+ )
553
+ if any(k in msg for k in ["drift", "evidently", "dérive"]):
554
+ return (
555
+ "**[Mode Dégradé SRE — Base Déterministe In-Memory]**\n\n"
556
+ "La surveillance du **Data Drift** et du **Model Staleness** est opérée en continu via les connecteurs Evidently et Pandera :\n\n"
557
+ "• **Détection statistique** : calcul des distances de Wasserstein et tests de Kolmogorov-Smirnov sur les distributions d'entrées.\n"
558
+ "• **Routage spécialisé** : toute dérive avérée est acheminée vers le `DataSpecialist` pour discriminer une dérive ponctuelle de covariables d'une dérive de concept réelle exigeant un réentraînement."
559
+ )
560
+ if any(k in msg for k in ["slack", "hitl", "approbation", "quorum"]):
561
+ return (
562
+ "**[Mode Dégradé SRE — Base Déterministe In-Memory]**\n\n"
563
+ "Le protocole **Slack HITL** (*Human-in-the-Loop*) constitue le garde-fou obligatoire pour toute action à impact matériel (*Mutating Actions*) :\n\n"
564
+ "• **Sécurité cryptographique** : chaque interaction est validée par signature `HMAC-SHA256` (`X-Slack-Signature`) et fenêtre anti-rejeu (< 300s).\n"
565
+ "• **Concurrence distribuée** : les approbations concurrentes sont arbitrées par verrou atomique `SQLite BEGIN IMMEDIATE` pour éliminer tout risque de double exécution (Race Condition)."
566
+ )
567
+ if any(k in msg for k in ["fail-closed", "zero-trust", "politique", "policy"]):
568
+ return (
569
+ "**[Mode Dégradé SRE — Base Déterministe In-Memory]**\n\n"
570
+ "Le principe **Fail-Closed** stipule qu'en l'absence de règle explicite autorisant une action (`ALLOW`), "
571
+ "ou lors d'une défaillance réseau / partition Tailscale, le `PolicyEngine` applique par défaut le statut `DENY`.\n\n"
572
+ "Aucune action mutante ne peut être exécutée sans autorisation déterministe préalable."
573
+ )
574
+ return None
575
+
576
+
508
577
  def _set_env_if_missing(key: str, value: str) -> None:
509
578
  if key not in os.environ and value:
510
579
  os.environ[key] = value
@@ -18,7 +18,7 @@ from agentic_ops.adapters.cac_pull_collector import CacPullCollector
18
18
  app = FastAPI(
19
19
  title="Agentic-Ops Control Plane",
20
20
  description="Deterministic SRE & MLOps Governance Control Plane (Auto-Wake Ready + Web Console + MCP Gateway)",
21
- version="0.1.0",
21
+ version="0.1.2",
22
22
  )
23
23
 
24
24
  # CORS enabled so a Vercel frontend or external dashboard can wake the container via fetch()
@@ -59,7 +59,7 @@ SCENARIOS_DATA_DIR = REPO_ROOT / "tests" / "scenarios" / "data"
59
59
  MCP_PROTOCOL_VERSION = "2024-11-05"
60
60
  SERVER_INFO = {
61
61
  "name": "agentic-ops-mcp-gateway",
62
- "version": "0.1.0",
62
+ "version": "0.1.2",
63
63
  "description": (
64
64
  "Deterministic MLOps & SRE Governance Control Plane MCP Server "
65
65
  "(8 Tools, 5 Knowledge Resources, 20 Starter Prompts)"
@@ -0,0 +1,228 @@
1
+ # Guide d'Ingénierie : Distribution PyPI, OIDC Trusted Publishing & Release Engineering
2
+
3
+ Ce document formalise l'architecture de distribution publique du package `agentic-ops`, la chaîne de sécurité logicielle OIDC (*OpenID Connect Trusted Publishing*) et les runbooks de publication pour les mainteneurs et exploitants.
4
+
5
+ ```text
6
+ +--------------------------------------------------------------------------------------------------+
7
+ | AGENTIC-OPS — CHAÎNE D'APPROVISIONNEMENT LOGICIELLE & DISTRIBUTION PYPI (OIDC / SLSA) |
8
+ +--------------------------------------------------------------------------------------------------+
9
+ | |
10
+ | [Developpeur / Maintainer] |
11
+ | │ |
12
+ | ├──► 1. Bump version `pyproject.toml` |
13
+ | ├──► 2. Synchronisation `uv lock` |
14
+ | └──► 3. Git Tag / Workflow Dispatch (`origin/main`) |
15
+ | │ |
16
+ | ▼ |
17
+ | [GitHub Actions Runner (ubuntu-latest)] |
18
+ | │ |
19
+ | ├──► `actions/checkout@v4` |
20
+ | ├──► `astral-sh/setup-uv@v5` (Installation ultra-rapide) |
21
+ | ├──► `uv build` ──► Generation des artefacts purs : |
22
+ | │ ├── `dist/agentic_ops-X.Y.Z.tar.gz` (sdist) |
23
+ | │ └── `dist/agentic_ops-X.Y.Z-py3-none-any.whl` (wheel) |
24
+ | │ |
25
+ | ├──► Demande de JIT Token OIDC (Permission `id-token: write`) |
26
+ | │ │ |
27
+ | │ ▼ |
28
+ | │ [GitHub OIDC Provider] |
29
+ | │ │ |
30
+ | │ ├── JWT éphémère (claims: repo, workflow, environment `pypi`) |
31
+ | │ ▼ |
32
+ | │ [PyPI Trusted Publisher Engine] |
33
+ | │ │ |
34
+ | │ ├── Validation cryptographique des claims (sans mot de passe ni API token) |
35
+ | │ └── Délivrance d'un token PyPI éphémère à portée restreinte (< 15 min) |
36
+ | │ |
37
+ | └──► `pypa/gh-action-pypi-publish@release/v1` |
38
+ | │ |
39
+ | ├── Upload sdist & wheel |
40
+ | └── Signature & Attestation numérique SLSA de provenance |
41
+ | |
42
+ | ▼ |
43
+ | [Registre Officiel PyPI : https://pypi.org/project/agentic-ops/] |
44
+ | │ |
45
+ | ▼ |
46
+ | [Utilisateurs Finaux / Clusters MLOps Mondiaux] |
47
+ | │ |
48
+ | ├──► `pip install agentic-ops` |
49
+ | └──► `agentic-start --port 8000` |
50
+ | |
51
+ +--------------------------------------------------------------------------------------------------+
52
+ ```
53
+
54
+ ---
55
+
56
+ ## 1. Identité & Disponibilité du Package
57
+
58
+ * **Nom Officiel** : `agentic-ops`
59
+ * **URL du Registre** : [https://pypi.org/project/agentic-ops/](https://pypi.org/project/agentic-ops/)
60
+ * **Version Active** : `0.1.2`
61
+ * **Licence** : `MIT`
62
+ * **Régistre Simple (Index)** : `https://pypi.org/simple/agentic-ops/`
63
+ * **Compatibilité Runtimes** : `Python >= 3.10` (testé et validé unitairement sur 3.10, 3.11, 3.12).
64
+ * **Empreinte** : Package agnostique pur Python (`py3-none-any.whl`), sans dépendance binaire compilée C/Rust non-portable.
65
+
66
+ ---
67
+
68
+ ## 2. Modes d'Installation & Consommation
69
+
70
+ ### A. Installation via Gestionnaires de Paquets Standards
71
+
72
+ Tout utilisateur ou pipeline CI/CD peut installer la distribution officielle :
73
+
74
+ ```bash
75
+ # Via pip standard
76
+ pip install agentic-ops
77
+
78
+ # Via uv (recommandé pour les déploiements rapides)
79
+ uv pip install agentic-ops
80
+
81
+ # Via poetry
82
+ poetry add agentic-ops
83
+ ```
84
+
85
+ ### B. Point d'Entrée CLI (Console & Serveur SRE)
86
+
87
+ Le package enregistre automatiquement l'exécutable système `agentic-ops` et l'alias de démarrage :
88
+
89
+ ```bash
90
+ # Lancement de la plateforme complète (FastAPI, Console /console, Chat /chat, MCP /sse)
91
+ agentic-start --port 8000 --host 0.0.0.0
92
+
93
+ # Inspection des vitaux et de l'intégrité du Ledger WORM
94
+ agentic-ops audit
95
+ ```
96
+
97
+ ### C. Importation Modulaire en Bibliothèque Python
98
+
99
+ ```python
100
+ from agentic_ops.adapters.llm_provider_registry import LLMProviderRegistry
101
+ from agentic_ops.core.orchestrator import Orchestrator
102
+ from agentic_ops.core.remediation_agent import RemediationAgent
103
+
104
+ # Résolution automatique de la topologie multi-LLM par rôle
105
+ remediation_adapter = LLMProviderRegistry.build_adapter_for_role("remediation")
106
+ orchestrator = Orchestrator(llm=remediation_adapter)
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 3. Sécurité de la Chaîne d'Approvisionnement (Trusted Publishing / OIDC)
112
+
113
+ ### A. Problématique des Secrets Statiques
114
+
115
+ Historiquement, la publication de packages Python reposait sur des tokens d'API longue durée stockés dans les variables `ACTIONS_SECRETS` de GitHub. Ces secrets présentaient des risques majeurs :
116
+ 1. **Fuite accidentelle** lors de l'exécution d'actions tierces ou de modifications de logs.
117
+ 2. **Absence d'expiration** facilitant l'injection de dépendances corrompues (*Software Supply Chain Attack*).
118
+ 3. **Périmètre excessif** accordant des droits d'écriture sur l'ensemble des dépôts du compte mainteneur.
119
+
120
+ ### B. Standard OIDC (OpenID Connect)
121
+
122
+ `agentic-ops` implémente le standard moderne **Trusted Publishing** promu par la *Python Software Foundation* (PSF) :
123
+ * Aucun mot de passe ni token statique n'est configuré dans GitHub Secrets.
124
+ * Lors de chaque exécution du workflow `.github/workflows/publish.yml`, GitHub Actions génère un jeton cryptographique OIDC signé (`id-token: write`).
125
+ * PyPI valide l'empreinte cryptographique émise par GitHub, certifiant que l'appel provient exclusivement :
126
+ * Du dépôt : `nolll77/agentic-ops`
127
+ * Du workflow : `.github/workflows/publish.yml`
128
+ * De l'environnement : `pypi`
129
+ * PyPI délivre un token éphémère d'une durée de vie inférieure à 15 minutes, restreint au téléversement de la version courante.
130
+ * Des attestations numériques de provenance SLSA (*Supply-chain Levels for Software Artifacts*) sont automatiquement générées et associées à la release.
131
+
132
+ ---
133
+
134
+ ## 4. Spécification du Workflow CI/CD (`publish.yml`)
135
+
136
+ Le workflow de déploiement continu est défini dans [`.github/workflows/publish.yml`](file:///Users/nolll/Documents/car_acc/agentic-ops-core/.github/workflows/publish.yml) :
137
+
138
+ ```yaml
139
+ name: Publish to PyPI
140
+
141
+ on:
142
+ release:
143
+ types: [published]
144
+ workflow_dispatch:
145
+
146
+ jobs:
147
+ pypi-publish:
148
+ name: Upload release to PyPI
149
+ runs-on: ubuntu-latest
150
+ environment:
151
+ name: pypi
152
+ url: https://pypi.org/p/agentic-ops
153
+ permissions:
154
+ id-token: write # Requis pour l'échange de jeton OIDC avec PyPI
155
+ contents: read
156
+
157
+ steps:
158
+ - uses: actions/checkout@v4
159
+
160
+ - name: Install uv
161
+ uses: astral-sh/setup-uv@v5
162
+
163
+ - name: Set up Python
164
+ uses: actions/setup-python@v5
165
+ with:
166
+ python-version: "3.11"
167
+
168
+ - name: Build package
169
+ run: |
170
+ uv build
171
+
172
+ - name: Publish package distributions to PyPI
173
+ uses: pypa/gh-action-pypi-publish@release/v1
174
+ ```
175
+
176
+ ---
177
+
178
+ ## 5. Runbook Opérationnel : Publier une Nouvelle Version
179
+
180
+ Pour incrémenter et publier une nouvelle version d'`agentic-ops` (ex: `0.1.1` ou `0.2.0`) :
181
+
182
+ 1. **Incrémenter la version dans `pyproject.toml`** :
183
+ ```toml
184
+ [project]
185
+ name = "agentic-ops"
186
+ version = "0.1.1"
187
+ ```
188
+
189
+ 2. **Mettre à jour le fichier de verrouillage** :
190
+ ```bash
191
+ uv lock
192
+ ```
193
+
194
+ 3. **Valider localement le build et la suite de tests** :
195
+ ```bash
196
+ pytest tests/
197
+ uv build
198
+ ```
199
+
200
+ 4. **Commiter et pousser vers GitHub** :
201
+ ```bash
202
+ git add pyproject.toml uv.lock
203
+ git commit -m "chore(release): bump version to 0.1.1"
204
+ git push origin main
205
+ ```
206
+
207
+ 5. **Déclencher le déploiement PyPI** :
208
+ * **Option 1 (Automatique via GitHub Release)** : Créer une Release GitHub avec le tag `v0.1.1`.
209
+ * **Option 2 (Manuelle via CLI)** :
210
+ ```bash
211
+ gh workflow run publish.yml
212
+ ```
213
+
214
+ 6. **Vérification post-déploiement** :
215
+ ```bash
216
+ python3 -m pip index versions agentic-ops
217
+ ```
218
+
219
+ ---
220
+
221
+ ## 6. Matrice d'Honnêteté Radicale : Théorie vs. Réalité du Projet
222
+
223
+ | Dimension | Théorie Idéale MLOps | Réalité de Déploiement `agentic-ops` | Justification SRE & Arbitrage |
224
+ | :--- | :--- | :--- | :--- |
225
+ | **Authentification PyPI** | OIDC Trusted Publishing certifié sans secret | **100% Conforme** (OIDC GitHub/PyPI actif) | Élimine les failles de fuite de tokens statiques dans GitHub Secrets. |
226
+ | **Génération de Build** | Compilation conteneurisée hermétique multi-arch | `uv build` local et runner standard `ubuntu-latest` | Suffisant et ultra-véloce car le package est un wheel pur Python (`none-any`). |
227
+ | **Déclenchement Release** | Tag sémantique `vX.Y.Z` déclenchant une pipeline CD | Supporte à la fois `release: [published]` et `workflow_dispatch` | Permet le déploiement sur événement officiel ou à la demande par le mainteneur. |
228
+ | **Vérification d'Index** | Monitoring temps réel des miroirs mondiaux pip | Test direct HTTP sur l'API JSON PyPI et commande `pip index` | Retour d'état immédiat sous 30 secondes sans complexité superflue. |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "agentic-ops"
3
- version = "0.1.0"
3
+ version = "0.1.2"
4
4
  description = "A generic, plug-and-play Agentic Control Plane for MLOps Governance"
5
5
  readme = "README.md"
6
6
  license = { text = "MIT" }
@@ -20,7 +20,8 @@ dependencies = [
20
20
  "pytest>=8.0.0",
21
21
  "pytest-mock>=3.12.0",
22
22
  "hypothesis>=6.0.0",
23
- "fakeredis>=2.20.0"
23
+ "fakeredis>=2.20.0",
24
+ "mcp>=2.3.0",
24
25
  ]
25
26
 
26
27
  [project.optional-dependencies]