agent_os_kernel 3.1.0__py3-none-any.whl
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.
- agent_control_plane/__init__.py +662 -0
- agent_control_plane/a2a_adapter.py +543 -0
- agent_control_plane/adapter.py +417 -0
- agent_control_plane/agent_hibernation.py +394 -0
- agent_control_plane/agent_kernel.py +470 -0
- agent_control_plane/compliance.py +720 -0
- agent_control_plane/constraint_graphs.py +478 -0
- agent_control_plane/control_plane.py +854 -0
- agent_control_plane/example_executors.py +195 -0
- agent_control_plane/execution_engine.py +231 -0
- agent_control_plane/flight_recorder.py +846 -0
- agent_control_plane/governance_layer.py +435 -0
- agent_control_plane/hf_utils.py +563 -0
- agent_control_plane/interfaces/__init__.py +55 -0
- agent_control_plane/interfaces/kernel_interface.py +361 -0
- agent_control_plane/interfaces/plugin_interface.py +497 -0
- agent_control_plane/interfaces/protocol_interfaces.py +387 -0
- agent_control_plane/kernel_space.py +1009 -0
- agent_control_plane/langchain_adapter.py +424 -0
- agent_control_plane/lifecycle.py +3113 -0
- agent_control_plane/mcp_adapter.py +653 -0
- agent_control_plane/ml_safety.py +563 -0
- agent_control_plane/multimodal.py +727 -0
- agent_control_plane/mute_agent.py +422 -0
- agent_control_plane/observability.py +787 -0
- agent_control_plane/orchestrator.py +482 -0
- agent_control_plane/plugin_registry.py +750 -0
- agent_control_plane/policy_engine.py +954 -0
- agent_control_plane/process_isolation.py +777 -0
- agent_control_plane/shadow_mode.py +310 -0
- agent_control_plane/signals.py +493 -0
- agent_control_plane/supervisor_agents.py +430 -0
- agent_control_plane/time_travel_debugger.py +557 -0
- agent_control_plane/tool_registry.py +452 -0
- agent_control_plane/vfs.py +697 -0
- agent_kernel/__init__.py +69 -0
- agent_kernel/analyzer.py +435 -0
- agent_kernel/auditor.py +36 -0
- agent_kernel/completeness_auditor.py +237 -0
- agent_kernel/detector.py +203 -0
- agent_kernel/kernel.py +744 -0
- agent_kernel/memory_manager.py +85 -0
- agent_kernel/models.py +374 -0
- agent_kernel/nudge_mechanism.py +263 -0
- agent_kernel/outcome_analyzer.py +338 -0
- agent_kernel/patcher.py +582 -0
- agent_kernel/semantic_analyzer.py +316 -0
- agent_kernel/semantic_purge.py +349 -0
- agent_kernel/simulator.py +449 -0
- agent_kernel/teacher.py +85 -0
- agent_kernel/triage.py +152 -0
- agent_os/__init__.py +409 -0
- agent_os/_adversarial_impl.py +200 -0
- agent_os/_circuit_breaker_impl.py +232 -0
- agent_os/_mcp_metrics.py +193 -0
- agent_os/adversarial.py +20 -0
- agent_os/agents_compat.py +490 -0
- agent_os/audit_logger.py +135 -0
- agent_os/base_agent.py +651 -0
- agent_os/circuit_breaker.py +34 -0
- agent_os/cli/__init__.py +659 -0
- agent_os/cli/cmd_audit.py +128 -0
- agent_os/cli/cmd_init.py +152 -0
- agent_os/cli/cmd_policy.py +41 -0
- agent_os/cli/cmd_policy_gen.py +180 -0
- agent_os/cli/cmd_validate.py +258 -0
- agent_os/cli/mcp_scan.py +265 -0
- agent_os/cli/output.py +192 -0
- agent_os/cli/policy_checker.py +330 -0
- agent_os/compat.py +74 -0
- agent_os/constraint_graph.py +234 -0
- agent_os/content_governance.py +140 -0
- agent_os/context_budget.py +305 -0
- agent_os/credential_redactor.py +224 -0
- agent_os/diff_policy.py +89 -0
- agent_os/egress_policy.py +159 -0
- agent_os/escalation.py +276 -0
- agent_os/event_bus.py +124 -0
- agent_os/exceptions.py +180 -0
- agent_os/execution_context_policy.py +141 -0
- agent_os/github_enterprise.py +96 -0
- agent_os/health.py +20 -0
- agent_os/integrations/__init__.py +279 -0
- agent_os/integrations/a2a_adapter.py +279 -0
- agent_os/integrations/agent_lightning/__init__.py +30 -0
- agent_os/integrations/anthropic_adapter.py +420 -0
- agent_os/integrations/autogen_adapter.py +620 -0
- agent_os/integrations/base.py +1137 -0
- agent_os/integrations/compat.py +229 -0
- agent_os/integrations/config.py +98 -0
- agent_os/integrations/conversation_guardian.py +957 -0
- agent_os/integrations/crewai_adapter.py +467 -0
- agent_os/integrations/drift_detector.py +425 -0
- agent_os/integrations/dry_run.py +124 -0
- agent_os/integrations/escalation.py +582 -0
- agent_os/integrations/gemini_adapter.py +364 -0
- agent_os/integrations/google_adk_adapter.py +633 -0
- agent_os/integrations/guardrails_adapter.py +394 -0
- agent_os/integrations/health.py +197 -0
- agent_os/integrations/langchain_adapter.py +654 -0
- agent_os/integrations/llamafirewall.py +343 -0
- agent_os/integrations/llamaindex_adapter.py +188 -0
- agent_os/integrations/logging.py +191 -0
- agent_os/integrations/maf_adapter.py +631 -0
- agent_os/integrations/mistral_adapter.py +365 -0
- agent_os/integrations/openai_adapter.py +816 -0
- agent_os/integrations/openai_agents_sdk.py +406 -0
- agent_os/integrations/policy_compose.py +171 -0
- agent_os/integrations/profiling.py +144 -0
- agent_os/integrations/pydantic_ai_adapter.py +420 -0
- agent_os/integrations/rate_limiter.py +130 -0
- agent_os/integrations/rbac.py +143 -0
- agent_os/integrations/registry.py +113 -0
- agent_os/integrations/scope_guard.py +303 -0
- agent_os/integrations/semantic_kernel_adapter.py +769 -0
- agent_os/integrations/smolagents_adapter.py +629 -0
- agent_os/integrations/templates.py +178 -0
- agent_os/integrations/token_budget.py +134 -0
- agent_os/integrations/tool_aliases.py +190 -0
- agent_os/integrations/webhooks.py +177 -0
- agent_os/lite.py +208 -0
- agent_os/mcp_gateway.py +385 -0
- agent_os/mcp_message_signer.py +273 -0
- agent_os/mcp_protocols.py +161 -0
- agent_os/mcp_response_scanner.py +232 -0
- agent_os/mcp_security.py +924 -0
- agent_os/mcp_session_auth.py +231 -0
- agent_os/mcp_sliding_rate_limiter.py +184 -0
- agent_os/memory_guard.py +409 -0
- agent_os/metrics.py +134 -0
- agent_os/mute.py +428 -0
- agent_os/mute_agent.py +209 -0
- agent_os/policies/__init__.py +77 -0
- agent_os/policies/async_evaluator.py +275 -0
- agent_os/policies/backends.py +670 -0
- agent_os/policies/bridge.py +169 -0
- agent_os/policies/budget.py +85 -0
- agent_os/policies/cli.py +294 -0
- agent_os/policies/conflict_resolution.py +270 -0
- agent_os/policies/data_classification.py +252 -0
- agent_os/policies/evaluator.py +239 -0
- agent_os/policies/policy_schema.json +228 -0
- agent_os/policies/rate_limiting.py +145 -0
- agent_os/policies/schema.py +115 -0
- agent_os/policies/shared.py +331 -0
- agent_os/prompt_injection.py +694 -0
- agent_os/providers.py +182 -0
- agent_os/py.typed +0 -0
- agent_os/retry.py +81 -0
- agent_os/reversibility.py +251 -0
- agent_os/sandbox.py +432 -0
- agent_os/sandbox_provider.py +140 -0
- agent_os/secure_codegen.py +525 -0
- agent_os/security_skills.py +538 -0
- agent_os/semantic_policy.py +422 -0
- agent_os/server/__init__.py +15 -0
- agent_os/server/__main__.py +25 -0
- agent_os/server/app.py +277 -0
- agent_os/server/models.py +104 -0
- agent_os/shift_left_metrics.py +130 -0
- agent_os/stateless.py +742 -0
- agent_os/supervisor.py +148 -0
- agent_os/task_outcome.py +148 -0
- agent_os/transparency.py +181 -0
- agent_os/trust_root.py +128 -0
- agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
- agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
- agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
- agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
- agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
- agent_os_observability/__init__.py +27 -0
- agent_os_observability/dashboards.py +898 -0
- agent_os_observability/metrics.py +398 -0
- agent_os_observability/server.py +223 -0
- agent_os_observability/tracer.py +232 -0
- agent_primitives/__init__.py +24 -0
- agent_primitives/failures.py +84 -0
- agent_primitives/py.typed +0 -0
- amb_core/__init__.py +177 -0
- amb_core/adapters/__init__.py +57 -0
- amb_core/adapters/aws_sqs_broker.py +376 -0
- amb_core/adapters/azure_servicebus_broker.py +340 -0
- amb_core/adapters/kafka_broker.py +260 -0
- amb_core/adapters/nats_broker.py +285 -0
- amb_core/adapters/rabbitmq_broker.py +235 -0
- amb_core/adapters/redis_broker.py +262 -0
- amb_core/broker.py +145 -0
- amb_core/bus.py +481 -0
- amb_core/cloudevents.py +509 -0
- amb_core/dlq.py +345 -0
- amb_core/hf_utils.py +536 -0
- amb_core/memory_broker.py +410 -0
- amb_core/models.py +141 -0
- amb_core/persistence.py +529 -0
- amb_core/schema.py +294 -0
- amb_core/tracing.py +358 -0
- atr/__init__.py +640 -0
- atr/access.py +348 -0
- atr/composition.py +645 -0
- atr/decorator.py +357 -0
- atr/executor.py +384 -0
- atr/health.py +557 -0
- atr/hf_utils.py +449 -0
- atr/injection.py +422 -0
- atr/metrics.py +440 -0
- atr/policies.py +403 -0
- atr/py.typed +2 -0
- atr/registry.py +452 -0
- atr/schema.py +480 -0
- atr/tools/safe/__init__.py +75 -0
- atr/tools/safe/calculator.py +467 -0
- atr/tools/safe/datetime_tool.py +443 -0
- atr/tools/safe/file_reader.py +402 -0
- atr/tools/safe/http_client.py +316 -0
- atr/tools/safe/json_parser.py +374 -0
- atr/tools/safe/text_tool.py +537 -0
- atr/tools/safe/toolkit.py +175 -0
- caas/__init__.py +162 -0
- caas/api/__init__.py +7 -0
- caas/api/server.py +1328 -0
- caas/caching.py +834 -0
- caas/cli.py +210 -0
- caas/conversation.py +223 -0
- caas/decay.py +72 -0
- caas/detection/__init__.py +9 -0
- caas/detection/detector.py +238 -0
- caas/enrichment.py +130 -0
- caas/gateway/__init__.py +27 -0
- caas/gateway/trust_gateway.py +474 -0
- caas/hf_utils.py +479 -0
- caas/ingestion/__init__.py +23 -0
- caas/ingestion/processors.py +253 -0
- caas/ingestion/structure_parser.py +188 -0
- caas/models.py +356 -0
- caas/pragmatic_truth.py +444 -0
- caas/routing/__init__.py +10 -0
- caas/routing/heuristic_router.py +58 -0
- caas/storage/__init__.py +9 -0
- caas/storage/store.py +389 -0
- caas/triad.py +213 -0
- caas/tuning/__init__.py +9 -0
- caas/tuning/tuner.py +329 -0
- caas/vfs/__init__.py +14 -0
- caas/vfs/filesystem.py +452 -0
- cmvk/__init__.py +218 -0
- cmvk/audit.py +402 -0
- cmvk/benchmarks.py +478 -0
- cmvk/constitutional.py +904 -0
- cmvk/hf_utils.py +301 -0
- cmvk/metrics.py +473 -0
- cmvk/profiles.py +300 -0
- cmvk/py.typed +0 -0
- cmvk/types.py +12 -0
- cmvk/verification.py +956 -0
- emk/__init__.py +89 -0
- emk/causal.py +352 -0
- emk/hf_utils.py +421 -0
- emk/indexer.py +83 -0
- emk/py.typed +0 -0
- emk/schema.py +204 -0
- emk/sleep_cycle.py +347 -0
- emk/store.py +281 -0
- iatp/__init__.py +166 -0
- iatp/attestation.py +461 -0
- iatp/cli.py +317 -0
- iatp/hf_utils.py +472 -0
- iatp/ipc_pipes.py +580 -0
- iatp/main.py +412 -0
- iatp/models/__init__.py +447 -0
- iatp/policy_engine.py +337 -0
- iatp/py.typed +2 -0
- iatp/recovery.py +321 -0
- iatp/security/__init__.py +270 -0
- iatp/sidecar/__init__.py +519 -0
- iatp/telemetry/__init__.py +164 -0
- iatp/tests/__init__.py +1 -0
- iatp/tests/test_attestation.py +370 -0
- iatp/tests/test_cli.py +131 -0
- iatp/tests/test_ed25519_attestation.py +211 -0
- iatp/tests/test_models.py +130 -0
- iatp/tests/test_policy_engine.py +347 -0
- iatp/tests/test_recovery.py +281 -0
- iatp/tests/test_security.py +222 -0
- iatp/tests/test_sidecar.py +167 -0
- iatp/tests/test_telemetry.py +175 -0
- mcp_kernel_server/__init__.py +28 -0
- mcp_kernel_server/cli.py +274 -0
- mcp_kernel_server/resources.py +217 -0
- mcp_kernel_server/server.py +564 -0
- mcp_kernel_server/tools.py +1174 -0
- mute_agent/__init__.py +68 -0
- mute_agent/core/__init__.py +1 -0
- mute_agent/core/execution_agent.py +166 -0
- mute_agent/core/handshake_protocol.py +201 -0
- mute_agent/core/reasoning_agent.py +238 -0
- mute_agent/knowledge_graph/__init__.py +1 -0
- mute_agent/knowledge_graph/graph_elements.py +65 -0
- mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
- mute_agent/knowledge_graph/subgraph.py +224 -0
- mute_agent/listener/__init__.py +43 -0
- mute_agent/listener/adapters/__init__.py +31 -0
- mute_agent/listener/adapters/base_adapter.py +189 -0
- mute_agent/listener/adapters/caas_adapter.py +344 -0
- mute_agent/listener/adapters/control_plane_adapter.py +436 -0
- mute_agent/listener/adapters/iatp_adapter.py +332 -0
- mute_agent/listener/adapters/scak_adapter.py +251 -0
- mute_agent/listener/listener.py +610 -0
- mute_agent/listener/state_observer.py +436 -0
- mute_agent/listener/threshold_config.py +313 -0
- mute_agent/super_system/__init__.py +1 -0
- mute_agent/super_system/router.py +204 -0
- mute_agent/visualization/__init__.py +10 -0
- mute_agent/visualization/graph_debugger.py +502 -0
- nexus/README.md +60 -0
- nexus/__init__.py +51 -0
- nexus/arbiter.py +359 -0
- nexus/client.py +466 -0
- nexus/dmz.py +444 -0
- nexus/escrow.py +430 -0
- nexus/exceptions.py +286 -0
- nexus/pyproject.toml +36 -0
- nexus/registry.py +393 -0
- nexus/reputation.py +425 -0
- nexus/schemas/__init__.py +51 -0
- nexus/schemas/compliance.py +276 -0
- nexus/schemas/escrow.py +251 -0
- nexus/schemas/manifest.py +225 -0
- nexus/schemas/receipt.py +208 -0
- nexus/tests/__init__.py +0 -0
- nexus/tests/conftest.py +146 -0
- nexus/tests/test_arbiter.py +192 -0
- nexus/tests/test_dmz.py +194 -0
- nexus/tests/test_escrow.py +276 -0
- nexus/tests/test_exceptions.py +225 -0
- nexus/tests/test_registry.py +232 -0
- nexus/tests/test_reputation.py +328 -0
- nexus/tests/test_schemas.py +295 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""Execution-context-aware policy enforcement.
|
|
4
|
+
|
|
5
|
+
Policies behave differently depending on where they run:
|
|
6
|
+
- inner_loop (IDE/CLI): advisory, blocks only critical violations
|
|
7
|
+
- ci_cd (pipeline): enforces anti-patterns, warns on advisory
|
|
8
|
+
- autonomous (agent runtime): strictest, blocks everything non-compliant
|
|
9
|
+
"""
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from dataclasses import dataclass, field
|
|
13
|
+
from enum import Enum
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ExecutionContext(str, Enum):
|
|
18
|
+
"""Execution environment where policy is evaluated."""
|
|
19
|
+
|
|
20
|
+
INNER_LOOP = "inner_loop" # IDE, CLI, local dev
|
|
21
|
+
CI_CD = "ci_cd" # Pipeline, PR checks
|
|
22
|
+
AUTONOMOUS = "autonomous" # Agent runtime, production
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class EnforcementLevel(str, Enum):
|
|
26
|
+
"""How strictly a policy violation is handled."""
|
|
27
|
+
|
|
28
|
+
BLOCK = "block"
|
|
29
|
+
WARN = "warn"
|
|
30
|
+
AUDIT = "audit" # log only, no user-visible output
|
|
31
|
+
SKIP = "skip"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@dataclass
|
|
35
|
+
class ContextualPolicyRule:
|
|
36
|
+
"""A policy rule with per-context enforcement levels."""
|
|
37
|
+
|
|
38
|
+
name: str
|
|
39
|
+
category: str = ""
|
|
40
|
+
description: str = ""
|
|
41
|
+
default_level: EnforcementLevel = EnforcementLevel.WARN
|
|
42
|
+
context_overrides: dict[ExecutionContext, EnforcementLevel] = field(
|
|
43
|
+
default_factory=dict,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
def effective_level(self, context: ExecutionContext) -> EnforcementLevel:
|
|
47
|
+
return self.context_overrides.get(context, self.default_level)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@dataclass
|
|
51
|
+
class PolicyViolation:
|
|
52
|
+
"""A detected policy violation with context-aware severity."""
|
|
53
|
+
|
|
54
|
+
rule_name: str
|
|
55
|
+
message: str
|
|
56
|
+
level: EnforcementLevel
|
|
57
|
+
context: ExecutionContext
|
|
58
|
+
location: str = ""
|
|
59
|
+
suggestion: str = ""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ContextualPolicyEngine:
|
|
63
|
+
"""Policy engine that adjusts enforcement based on execution context."""
|
|
64
|
+
|
|
65
|
+
def __init__(
|
|
66
|
+
self, context: ExecutionContext = ExecutionContext.CI_CD,
|
|
67
|
+
) -> None:
|
|
68
|
+
self._context = context
|
|
69
|
+
self._rules: list[ContextualPolicyRule] = []
|
|
70
|
+
self._violations: list[PolicyViolation] = []
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def context(self) -> ExecutionContext:
|
|
74
|
+
return self._context
|
|
75
|
+
|
|
76
|
+
def add_rule(self, rule: ContextualPolicyRule) -> None:
|
|
77
|
+
self._rules.append(rule)
|
|
78
|
+
|
|
79
|
+
def load_rules(self, rules: list[dict[str, Any]]) -> None:
|
|
80
|
+
for r in rules:
|
|
81
|
+
overrides: dict[ExecutionContext, EnforcementLevel] = {}
|
|
82
|
+
for ctx_name, level_name in r.get("context_overrides", {}).items():
|
|
83
|
+
overrides[ExecutionContext(ctx_name)] = EnforcementLevel(level_name)
|
|
84
|
+
self._rules.append(
|
|
85
|
+
ContextualPolicyRule(
|
|
86
|
+
name=r["name"],
|
|
87
|
+
category=r.get("category", ""),
|
|
88
|
+
description=r.get("description", ""),
|
|
89
|
+
default_level=EnforcementLevel(
|
|
90
|
+
r.get("default_level", "warn"),
|
|
91
|
+
),
|
|
92
|
+
context_overrides=overrides,
|
|
93
|
+
),
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
def evaluate(
|
|
97
|
+
self,
|
|
98
|
+
rule_name: str,
|
|
99
|
+
message: str,
|
|
100
|
+
location: str = "",
|
|
101
|
+
suggestion: str = "",
|
|
102
|
+
) -> PolicyViolation | None:
|
|
103
|
+
rule = next((r for r in self._rules if r.name == rule_name), None)
|
|
104
|
+
if rule is None:
|
|
105
|
+
return None
|
|
106
|
+
level = rule.effective_level(self._context)
|
|
107
|
+
if level == EnforcementLevel.SKIP:
|
|
108
|
+
return None
|
|
109
|
+
violation = PolicyViolation(
|
|
110
|
+
rule_name=rule_name,
|
|
111
|
+
message=message,
|
|
112
|
+
level=level,
|
|
113
|
+
context=self._context,
|
|
114
|
+
location=location,
|
|
115
|
+
suggestion=suggestion,
|
|
116
|
+
)
|
|
117
|
+
self._violations.append(violation)
|
|
118
|
+
return violation
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def blocking_violations(self) -> list[PolicyViolation]:
|
|
122
|
+
return [v for v in self._violations if v.level == EnforcementLevel.BLOCK]
|
|
123
|
+
|
|
124
|
+
@property
|
|
125
|
+
def warnings(self) -> list[PolicyViolation]:
|
|
126
|
+
return [v for v in self._violations if v.level == EnforcementLevel.WARN]
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def has_blocking(self) -> bool:
|
|
130
|
+
return len(self.blocking_violations) > 0
|
|
131
|
+
|
|
132
|
+
def summary(self) -> dict[str, Any]:
|
|
133
|
+
return {
|
|
134
|
+
"context": self._context.value,
|
|
135
|
+
"total_violations": len(self._violations),
|
|
136
|
+
"blocking": len(self.blocking_violations),
|
|
137
|
+
"warnings": len(self.warnings),
|
|
138
|
+
"audit_only": len(
|
|
139
|
+
[v for v in self._violations if v.level == EnforcementLevel.AUDIT],
|
|
140
|
+
),
|
|
141
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""GitHub Enterprise managed policy and ruleset integration.
|
|
4
|
+
|
|
5
|
+
Provides integration points for GitHub Enterprise features:
|
|
6
|
+
- Repository rulesets for governance enforcement
|
|
7
|
+
- Custom properties for repo governance tier tagging
|
|
8
|
+
- Enterprise-level policy templates
|
|
9
|
+
"""
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
from dataclasses import dataclass, field
|
|
12
|
+
from enum import Enum
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class GovernanceTier(str, Enum):
|
|
17
|
+
"""Repository governance tier assigned via GitHub custom properties."""
|
|
18
|
+
UNCLASSIFIED = "unclassified"
|
|
19
|
+
BASIC = "basic"
|
|
20
|
+
STANDARD = "standard"
|
|
21
|
+
ELEVATED = "elevated"
|
|
22
|
+
CRITICAL = "critical"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class RulesetConfig:
|
|
27
|
+
"""Configuration for a GitHub repository ruleset."""
|
|
28
|
+
name: str
|
|
29
|
+
enforcement: str = "active" # active, evaluate, disabled
|
|
30
|
+
target: str = "branch" # branch, tag, push
|
|
31
|
+
conditions: dict[str, Any] = field(default_factory=dict)
|
|
32
|
+
rules: list[dict[str, Any]] = field(default_factory=list)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class EnterpriseGovernancePolicy:
|
|
37
|
+
"""Enterprise-level governance policy template.
|
|
38
|
+
|
|
39
|
+
Defines rulesets and custom properties that should be applied
|
|
40
|
+
to repositories based on their governance tier.
|
|
41
|
+
"""
|
|
42
|
+
name: str
|
|
43
|
+
description: str = ""
|
|
44
|
+
applicable_tiers: list[GovernanceTier] = field(default_factory=list)
|
|
45
|
+
rulesets: list[RulesetConfig] = field(default_factory=list)
|
|
46
|
+
required_custom_properties: dict[str, str] = field(default_factory=dict)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class EnterpriseGovernanceManager:
|
|
50
|
+
"""Manages GitHub Enterprise governance policies and rulesets.
|
|
51
|
+
|
|
52
|
+
Maps governance tiers to repository rulesets and enforces
|
|
53
|
+
enterprise-level policy templates across org repos.
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
def __init__(self) -> None:
|
|
57
|
+
self._policies: list[EnterpriseGovernancePolicy] = []
|
|
58
|
+
self._repo_tiers: dict[str, GovernanceTier] = {}
|
|
59
|
+
|
|
60
|
+
def add_policy(self, policy: EnterpriseGovernancePolicy) -> None:
|
|
61
|
+
self._policies.append(policy)
|
|
62
|
+
|
|
63
|
+
def set_repo_tier(self, repo: str, tier: GovernanceTier) -> None:
|
|
64
|
+
self._repo_tiers[repo] = tier
|
|
65
|
+
|
|
66
|
+
def get_repo_tier(self, repo: str) -> GovernanceTier:
|
|
67
|
+
return self._repo_tiers.get(repo, GovernanceTier.UNCLASSIFIED)
|
|
68
|
+
|
|
69
|
+
def get_applicable_policies(self, repo: str) -> list[EnterpriseGovernancePolicy]:
|
|
70
|
+
"""Get all policies applicable to a repo based on its tier."""
|
|
71
|
+
tier = self.get_repo_tier(repo)
|
|
72
|
+
return [p for p in self._policies if tier in p.applicable_tiers]
|
|
73
|
+
|
|
74
|
+
def get_required_rulesets(self, repo: str) -> list[RulesetConfig]:
|
|
75
|
+
"""Get all rulesets that should be applied to a repo."""
|
|
76
|
+
rulesets = []
|
|
77
|
+
for policy in self.get_applicable_policies(repo):
|
|
78
|
+
rulesets.extend(policy.rulesets)
|
|
79
|
+
return rulesets
|
|
80
|
+
|
|
81
|
+
def audit_repo_compliance(self, repo: str, active_rulesets: list[str]) -> dict[str, Any]:
|
|
82
|
+
"""Audit a repo's compliance with its governance tier requirements."""
|
|
83
|
+
required = self.get_required_rulesets(repo)
|
|
84
|
+
required_names = {r.name for r in required}
|
|
85
|
+
active_set = set(active_rulesets)
|
|
86
|
+
missing = required_names - active_set
|
|
87
|
+
extra = active_set - required_names
|
|
88
|
+
return {
|
|
89
|
+
"repo": repo,
|
|
90
|
+
"tier": self.get_repo_tier(repo).value,
|
|
91
|
+
"compliant": len(missing) == 0,
|
|
92
|
+
"required_rulesets": sorted(required_names),
|
|
93
|
+
"active_rulesets": sorted(active_set),
|
|
94
|
+
"missing_rulesets": sorted(missing),
|
|
95
|
+
"extra_rulesets": sorted(extra),
|
|
96
|
+
}
|
agent_os/health.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""Convenience re-export of health check components.
|
|
4
|
+
|
|
5
|
+
Canonical implementation lives in ``agent_os.integrations.health``.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from agent_os.integrations.health import ( # noqa: F401
|
|
9
|
+
ComponentHealth,
|
|
10
|
+
HealthChecker,
|
|
11
|
+
HealthReport,
|
|
12
|
+
HealthStatus,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"ComponentHealth",
|
|
17
|
+
"HealthChecker",
|
|
18
|
+
"HealthReport",
|
|
19
|
+
"HealthStatus",
|
|
20
|
+
]
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Copyright (c) Microsoft Corporation.
|
|
2
|
+
# Licensed under the MIT License.
|
|
3
|
+
"""
|
|
4
|
+
Agent OS Integrations
|
|
5
|
+
|
|
6
|
+
Adapters to wrap existing agent frameworks with Agent OS governance.
|
|
7
|
+
|
|
8
|
+
Supported Frameworks:
|
|
9
|
+
- LangChain: Chains, Agents, Runnables
|
|
10
|
+
- LlamaIndex: Query Engines, Chat Engines, Agents
|
|
11
|
+
- CrewAI: Crews and Agents
|
|
12
|
+
- AutoGen: Multi-agent conversations
|
|
13
|
+
- OpenAI Assistants: Assistants API with tools
|
|
14
|
+
- Anthropic Claude: Messages API with tool use
|
|
15
|
+
- Google Gemini: GenerativeModel with function calling
|
|
16
|
+
- Mistral AI: Chat API with tool calls
|
|
17
|
+
- Semantic Kernel: Microsoft's AI orchestration framework
|
|
18
|
+
- PydanticAI: Model-agnostic agents with tool governance
|
|
19
|
+
|
|
20
|
+
Usage:
|
|
21
|
+
# LangChain
|
|
22
|
+
from agent_os.integrations import LangChainKernel
|
|
23
|
+
kernel = LangChainKernel()
|
|
24
|
+
governed_chain = kernel.wrap(my_chain)
|
|
25
|
+
|
|
26
|
+
# LlamaIndex
|
|
27
|
+
from agent_os.integrations import LlamaIndexKernel
|
|
28
|
+
kernel = LlamaIndexKernel()
|
|
29
|
+
governed_engine = kernel.wrap(my_query_engine)
|
|
30
|
+
|
|
31
|
+
# OpenAI Assistants
|
|
32
|
+
from agent_os.integrations import OpenAIKernel
|
|
33
|
+
kernel = OpenAIKernel()
|
|
34
|
+
governed = kernel.wrap(assistant, client)
|
|
35
|
+
|
|
36
|
+
# Semantic Kernel
|
|
37
|
+
from agent_os.integrations import SemanticKernelWrapper
|
|
38
|
+
governed = SemanticKernelWrapper().wrap(sk_kernel)
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
from agent_os.exceptions import (
|
|
42
|
+
AdapterNotFoundError,
|
|
43
|
+
AdapterTimeoutError,
|
|
44
|
+
AgentOSError,
|
|
45
|
+
BudgetError,
|
|
46
|
+
BudgetExceededError,
|
|
47
|
+
BudgetWarningError,
|
|
48
|
+
ConfigurationError,
|
|
49
|
+
CredentialExpiredError,
|
|
50
|
+
IdentityError,
|
|
51
|
+
IdentityVerificationError,
|
|
52
|
+
IntegrationError,
|
|
53
|
+
InvalidPolicyError,
|
|
54
|
+
MissingConfigError,
|
|
55
|
+
PolicyDeniedError,
|
|
56
|
+
PolicyError,
|
|
57
|
+
PolicyTimeoutError,
|
|
58
|
+
PolicyViolationError,
|
|
59
|
+
RateLimitError,
|
|
60
|
+
)
|
|
61
|
+
from agent_os.integrations.a2a_adapter import A2AEvaluation, A2AGovernanceAdapter, A2APolicy
|
|
62
|
+
from agent_os.integrations.anthropic_adapter import AnthropicKernel, GovernedAnthropicClient
|
|
63
|
+
from agent_os.integrations.autogen_adapter import AutoGenKernel
|
|
64
|
+
from agent_os.integrations.crewai_adapter import CrewAIKernel
|
|
65
|
+
from agent_os.integrations.gemini_adapter import GeminiKernel, GovernedGeminiModel
|
|
66
|
+
from agent_os.integrations.google_adk_adapter import GoogleADKKernel
|
|
67
|
+
from agent_os.integrations.guardrails_adapter import GuardrailsKernel
|
|
68
|
+
from agent_os.integrations.langchain_adapter import LangChainKernel
|
|
69
|
+
try:
|
|
70
|
+
from agent_os.integrations.maf_adapter import (
|
|
71
|
+
AuditTrailMiddleware as MAFAuditTrailMiddleware,
|
|
72
|
+
CapabilityGuardMiddleware as MAFCapabilityGuardMiddleware,
|
|
73
|
+
GovernancePolicyMiddleware as MAFGovernancePolicyMiddleware,
|
|
74
|
+
RogueDetectionMiddleware as MAFRogueDetectionMiddleware,
|
|
75
|
+
create_governance_middleware as maf_create_governance_middleware,
|
|
76
|
+
)
|
|
77
|
+
except ImportError: # agent_framework is an optional dependency
|
|
78
|
+
pass
|
|
79
|
+
from agent_os.integrations.llamafirewall import (
|
|
80
|
+
FirewallMode,
|
|
81
|
+
FirewallResult,
|
|
82
|
+
FirewallVerdict,
|
|
83
|
+
LlamaFirewallAdapter,
|
|
84
|
+
)
|
|
85
|
+
from agent_os.integrations.llamaindex_adapter import LlamaIndexKernel
|
|
86
|
+
from agent_os.integrations.mistral_adapter import GovernedMistralClient, MistralKernel
|
|
87
|
+
from agent_os.integrations.openai_adapter import GovernedAssistant, OpenAIKernel
|
|
88
|
+
from agent_os.integrations.pydantic_ai_adapter import PydanticAIKernel
|
|
89
|
+
from agent_os.integrations.semantic_kernel_adapter import (
|
|
90
|
+
GovernedSemanticKernel,
|
|
91
|
+
SemanticKernelWrapper,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
from .base import (
|
|
95
|
+
AsyncGovernedWrapper,
|
|
96
|
+
BaseIntegration,
|
|
97
|
+
BoundedSemaphore,
|
|
98
|
+
CompositeInterceptor,
|
|
99
|
+
ContentHashInterceptor,
|
|
100
|
+
DriftResult,
|
|
101
|
+
GovernancePolicy,
|
|
102
|
+
PolicyInterceptor,
|
|
103
|
+
ToolCallInterceptor,
|
|
104
|
+
ToolCallRequest,
|
|
105
|
+
ToolCallResult,
|
|
106
|
+
)
|
|
107
|
+
from .config import AgentOSConfig, get_config, reset_config
|
|
108
|
+
from .conversation_guardian import (
|
|
109
|
+
AlertAction,
|
|
110
|
+
AlertSeverity,
|
|
111
|
+
ConversationAlert,
|
|
112
|
+
ConversationGuardian,
|
|
113
|
+
ConversationGuardianConfig,
|
|
114
|
+
EscalationClassifier,
|
|
115
|
+
FeedbackLoopBreaker,
|
|
116
|
+
OffensiveIntentDetector,
|
|
117
|
+
)
|
|
118
|
+
from .dry_run import DryRunCollector, DryRunDecision, DryRunPolicy, DryRunResult
|
|
119
|
+
from .escalation import (
|
|
120
|
+
ApprovalBackend,
|
|
121
|
+
DefaultTimeoutAction,
|
|
122
|
+
EscalationDecision,
|
|
123
|
+
EscalationHandler,
|
|
124
|
+
EscalationPolicy,
|
|
125
|
+
EscalationRequest,
|
|
126
|
+
EscalationResult,
|
|
127
|
+
InMemoryApprovalQueue,
|
|
128
|
+
QuorumConfig,
|
|
129
|
+
WebhookApprovalBackend,
|
|
130
|
+
)
|
|
131
|
+
from .compat import CompatReport, check_compatibility, doctor, warn_on_import
|
|
132
|
+
from .health import ComponentHealth, HealthChecker, HealthReport, HealthStatus
|
|
133
|
+
from .logging import GovernanceLogger, JSONFormatter, get_logger
|
|
134
|
+
from .policy_compose import PolicyHierarchy, compose_policies, override_policy
|
|
135
|
+
from .rate_limiter import RateLimiter, RateLimitStatus
|
|
136
|
+
from .templates import PolicyTemplates
|
|
137
|
+
from .token_budget import TokenBudgetStatus, TokenBudgetTracker
|
|
138
|
+
from .tool_aliases import ToolAliasRegistry
|
|
139
|
+
from .webhooks import DeliveryRecord, WebhookConfig, WebhookEvent, WebhookNotifier
|
|
140
|
+
|
|
141
|
+
__all__ = [
|
|
142
|
+
# Base
|
|
143
|
+
"AsyncGovernedWrapper",
|
|
144
|
+
"BaseIntegration",
|
|
145
|
+
"DriftResult",
|
|
146
|
+
"GovernancePolicy",
|
|
147
|
+
# Tool Call Interceptor (vendor-neutral)
|
|
148
|
+
"ToolCallInterceptor",
|
|
149
|
+
"ToolCallRequest",
|
|
150
|
+
"ToolCallResult",
|
|
151
|
+
"PolicyInterceptor",
|
|
152
|
+
"CompositeInterceptor",
|
|
153
|
+
# Backpressure / Concurrency
|
|
154
|
+
"BoundedSemaphore",
|
|
155
|
+
# LangChain
|
|
156
|
+
"LangChainKernel",
|
|
157
|
+
# LlamaIndex
|
|
158
|
+
"LlamaIndexKernel",
|
|
159
|
+
# CrewAI
|
|
160
|
+
"CrewAIKernel",
|
|
161
|
+
# AutoGen
|
|
162
|
+
"AutoGenKernel",
|
|
163
|
+
# OpenAI Assistants
|
|
164
|
+
"OpenAIKernel",
|
|
165
|
+
"GovernedAssistant",
|
|
166
|
+
# Anthropic Claude
|
|
167
|
+
"AnthropicKernel",
|
|
168
|
+
"GovernedAnthropicClient",
|
|
169
|
+
# Google Gemini
|
|
170
|
+
"GeminiKernel",
|
|
171
|
+
"GovernedGeminiModel",
|
|
172
|
+
# Mistral AI
|
|
173
|
+
"MistralKernel",
|
|
174
|
+
"GovernedMistralClient",
|
|
175
|
+
# Semantic Kernel
|
|
176
|
+
"SemanticKernelWrapper",
|
|
177
|
+
"GovernedSemanticKernel",
|
|
178
|
+
# Guardrails
|
|
179
|
+
"GuardrailsKernel",
|
|
180
|
+
# Google ADK
|
|
181
|
+
"GoogleADKKernel",
|
|
182
|
+
# A2A (Agent-to-Agent)
|
|
183
|
+
"A2AGovernanceAdapter",
|
|
184
|
+
"A2APolicy",
|
|
185
|
+
"A2AEvaluation",
|
|
186
|
+
# A2A Conversation Guardian
|
|
187
|
+
"ConversationGuardian",
|
|
188
|
+
"ConversationGuardianConfig",
|
|
189
|
+
"ConversationAlert",
|
|
190
|
+
"AlertAction",
|
|
191
|
+
"AlertSeverity",
|
|
192
|
+
"EscalationClassifier",
|
|
193
|
+
"FeedbackLoopBreaker",
|
|
194
|
+
"OffensiveIntentDetector",
|
|
195
|
+
# PydanticAI
|
|
196
|
+
"PydanticAIKernel",
|
|
197
|
+
# Microsoft Agent Framework (MAF)
|
|
198
|
+
"MAFGovernancePolicyMiddleware",
|
|
199
|
+
"MAFCapabilityGuardMiddleware",
|
|
200
|
+
"MAFAuditTrailMiddleware",
|
|
201
|
+
"MAFRogueDetectionMiddleware",
|
|
202
|
+
"maf_create_governance_middleware",
|
|
203
|
+
# LlamaFirewall
|
|
204
|
+
"LlamaFirewallAdapter",
|
|
205
|
+
"FirewallMode",
|
|
206
|
+
"FirewallVerdict",
|
|
207
|
+
"FirewallResult",
|
|
208
|
+
# Token Budget Tracking
|
|
209
|
+
"TokenBudgetTracker",
|
|
210
|
+
"TokenBudgetStatus",
|
|
211
|
+
# Dry Run
|
|
212
|
+
"DryRunPolicy",
|
|
213
|
+
"DryRunResult",
|
|
214
|
+
"DryRunDecision",
|
|
215
|
+
"DryRunCollector",
|
|
216
|
+
# Escalation (Human-in-the-Loop)
|
|
217
|
+
"EscalationPolicy",
|
|
218
|
+
"EscalationHandler",
|
|
219
|
+
"EscalationRequest",
|
|
220
|
+
"EscalationResult",
|
|
221
|
+
"EscalationDecision",
|
|
222
|
+
"DefaultTimeoutAction",
|
|
223
|
+
"ApprovalBackend",
|
|
224
|
+
"InMemoryApprovalQueue",
|
|
225
|
+
"WebhookApprovalBackend",
|
|
226
|
+
# Version Compatibility
|
|
227
|
+
"doctor",
|
|
228
|
+
"check_compatibility",
|
|
229
|
+
"CompatReport",
|
|
230
|
+
"warn_on_import",
|
|
231
|
+
# Tool Aliases
|
|
232
|
+
"ToolAliasRegistry",
|
|
233
|
+
# Rate Limiting
|
|
234
|
+
"RateLimiter",
|
|
235
|
+
"RateLimitStatus",
|
|
236
|
+
# Policy Templates
|
|
237
|
+
"PolicyTemplates",
|
|
238
|
+
# Webhooks
|
|
239
|
+
"WebhookConfig",
|
|
240
|
+
"WebhookEvent",
|
|
241
|
+
"WebhookNotifier",
|
|
242
|
+
"DeliveryRecord",
|
|
243
|
+
# Policy Composition
|
|
244
|
+
"compose_policies",
|
|
245
|
+
"PolicyHierarchy",
|
|
246
|
+
"override_policy",
|
|
247
|
+
# Exceptions
|
|
248
|
+
"AgentOSError",
|
|
249
|
+
"PolicyError",
|
|
250
|
+
"PolicyViolationError",
|
|
251
|
+
"PolicyDeniedError",
|
|
252
|
+
"PolicyTimeoutError",
|
|
253
|
+
"BudgetError",
|
|
254
|
+
"BudgetExceededError",
|
|
255
|
+
"BudgetWarningError",
|
|
256
|
+
"IdentityError",
|
|
257
|
+
"IdentityVerificationError",
|
|
258
|
+
"CredentialExpiredError",
|
|
259
|
+
"IntegrationError",
|
|
260
|
+
"AdapterNotFoundError",
|
|
261
|
+
"AdapterTimeoutError",
|
|
262
|
+
"ConfigurationError",
|
|
263
|
+
"InvalidPolicyError",
|
|
264
|
+
"MissingConfigError",
|
|
265
|
+
"RateLimitError",
|
|
266
|
+
# Health Checks
|
|
267
|
+
"HealthChecker",
|
|
268
|
+
"HealthReport",
|
|
269
|
+
"HealthStatus",
|
|
270
|
+
"ComponentHealth",
|
|
271
|
+
# Structured Logging
|
|
272
|
+
"GovernanceLogger",
|
|
273
|
+
"JSONFormatter",
|
|
274
|
+
"get_logger",
|
|
275
|
+
# Environment Configuration
|
|
276
|
+
"AgentOSConfig",
|
|
277
|
+
"get_config",
|
|
278
|
+
"reset_config",
|
|
279
|
+
]
|