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.
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/PKG-INFO +31 -6
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/README.md +29 -5
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/README_FR.md +29 -5
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/llm_provider_registry.py +71 -2
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/cli/main.py +1 -1
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/mcp_server.py +1 -1
- agentic_ops-0.1.2/docs/PYPI_RELEASE_AND_DISTRIBUTION_GUIDE.md +228 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/pyproject.toml +3 -2
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/uv.lock +152 -12
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.env.example +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.github/workflows/ci.yml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.github/workflows/publish.yml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/.gitignore +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/CAC_TAILSCALE_PULL_CONNECTOR.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/DOCKER_SANDBOX_VALIDATION.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/Dockerfile +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/Dockerfile.hf +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/GENESIS.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/INTEGRATION_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/LICENSE +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/cac_pull_collector.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/datadog_adapter.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/kubernetes_adapter.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/llm_protocol.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/protocol.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/registry_adapter.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/runbook_rag.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/adapters/slack_adapter.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/cli/compile_taxonomy.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/cli/trust_ledger.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/__init__.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/approvals.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/approvers.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/circuit_breaker.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/contracts.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/crypto.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/distributed.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/evidence.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/executor.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/facts.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/governance_schemas.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/idempotency.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/infra_specialist.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/model_specialist.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/orchestrator.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/policy.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/policy_engine.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/prompt_guard.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/remediation_agent.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/specialist.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/state.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/core/telemetry.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/approval_sweeper.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/grafana_webhook.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/slack_verify.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/entrypoints/slack_webhook.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0001.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0002.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0003.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0004.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-0005.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-CHAOS-31c6e006.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-CHAOS-5950095d.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/EP-CHAOS-d6c18601.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/evidence_store/_index.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/action_catalog.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/approvers.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/autonomy_policy.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/risk_register.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/governance/shadow_policy.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/knowledge_base/runbooks/DATA-042.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/knowledge_base/runbooks/INFRA-001.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/action.schema.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/diagnosis.schema.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/evidence.schema.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/schemas/risk.schema.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/__init__.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/base.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/data.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/github.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/infra.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/model.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/agentic_ops/tools/observability.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docker-compose.yml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/HISTORICAL_AUDIT_AND_REMEDIATION.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MAS_AGENT_ROUTING_AND_DEFAULTS_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MAS_FALLBACK_ARCHITECTURE_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MCP_SERVER_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MONOREPO_DECOUPLING_AND_REGRESSION_AUDIT.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/MULTI_LLM_ROLE_SPECIALIZATION_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/OPENROUTER_FREE_MODELS_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/PRESENTATION_SLIDES.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/SLACK_HITL_INTEGRATION_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/TARGET_OUTAGE_AND_RESILIENCE_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/WORM_TRUST_LEDGER_GUIDE.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/liora_datascientest_logo.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/01_docker_agentic_platform_welcome.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/02_docker_kits_catalog.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/03_docker_sandbox_running.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/04_demo_agentic_ops_execution.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/05_hardware_telemetry_amd_epyc.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/06_slack_security_rejection_401.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/07_adversarial_security_tests_passed.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/08_mlops_scenarios_zero_forbidden.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/09_governance_fsm_grand_chelem.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/11_tailscale_up_daemon_success.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/12_tailscale_status_mesh_nodes.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/13_tailscale_netcheck_derp_seattle.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/14_tailscaled_proxy_loop_diagnostic.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/15_tailscaled_derp10_clean_connected.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/screenshots/cognitive_web_console_live.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_01_flux_agentic_ops.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_02_signal_brut_diagnostic.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_03_ia_propose_code_autorise.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_04_humain_decide_registre_prouve.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_05_production_live_mode_degrade.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/assets/slides/slide_06_demonstration_live_console_glass_box.png +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/fiche_soutenance_jury_sre.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/mlops_failure_modes_taxonomy.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/docs/mlops_simulation_scenarios_registry.md +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/Chart.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/templates/deployment.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/templates/rbac.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/templates/serviceaccount.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/helm/agentic-ops/values.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/librechat.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/reports/scenarios.json +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/scripts/demo_agentic_ops.sh +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/scripts/entrypoint.sh +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/start_sandbox.sh +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adapters/__init__.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adapters/test_cac_pull_collector.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adapters/test_llm_provider_registry.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adversarial/test_evidence_integrity.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adversarial/test_idempotency_and_rate.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/adversarial/test_prompt_hygiene.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/conftest.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/entrypoints/test_chat_endpoint.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/entrypoints/test_mcp_server.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/integration/test_model_registry.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/integration/test_registry_e2e.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/known_gaps.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/__init__.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/conftest.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/test_known_gaps.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/test_loading.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/policy/test_policy_engine.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/__init__.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/adapter.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/conftest.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/adversarial/sc_101_log_injection.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/adversarial/sc_102_param_injection.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/adversarial/sc_103_poisoned_runbook.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_001_data_ingestion_drop.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_003_rollback_trap.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_004_infra_red_herring.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/data/sc_005_real_infra_failure.yaml +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/loader.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/runner.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/schema.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/stubs.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/scenarios/test_scenarios.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/security/test_executor.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/test_fsm_orchestrator.py +0 -0
- {agentic_ops-0.1.0 → agentic_ops-0.1.2}/tests/test_grafana_webhook.py +0 -0
- {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.
|
|
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
|
+
[](https://pypi.org/project/agentic-ops/)
|
|
34
|
+
[](https://pypi.org/project/agentic-ops/)
|
|
32
35
|
[](https://m8ven.ai/mcp/nolll77-agentic-ops-1ogfsr?s=readme)
|
|
33
36
|

|
|
34
37
|

|
|
@@ -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 &
|
|
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
|
-
|
|
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
|
|
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
|
+
[](https://pypi.org/project/agentic-ops/)
|
|
4
|
+
[](https://pypi.org/project/agentic-ops/)
|
|
3
5
|
[](https://m8ven.ai/mcp/nolll77-agentic-ops-1ogfsr?s=readme)
|
|
4
6
|

|
|
5
7
|

|
|
@@ -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 &
|
|
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
|
-
|
|
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
|
|
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
|
+
[](https://pypi.org/project/agentic-ops/)
|
|
4
|
+
[](https://pypi.org/project/agentic-ops/)
|
|
3
5
|
[](https://m8ven.ai/mcp/nolll77-agentic-ops-1ogfsr?s=readme)
|
|
4
6
|

|
|
5
7
|

|
|
@@ -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 &
|
|
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
|
|
1423
|
-
|
|
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
|
|
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":
|
|
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":
|
|
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.
|
|
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.
|
|
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.
|
|
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]
|