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.
Files changed (337) hide show
  1. agent_control_plane/__init__.py +662 -0
  2. agent_control_plane/a2a_adapter.py +543 -0
  3. agent_control_plane/adapter.py +417 -0
  4. agent_control_plane/agent_hibernation.py +394 -0
  5. agent_control_plane/agent_kernel.py +470 -0
  6. agent_control_plane/compliance.py +720 -0
  7. agent_control_plane/constraint_graphs.py +478 -0
  8. agent_control_plane/control_plane.py +854 -0
  9. agent_control_plane/example_executors.py +195 -0
  10. agent_control_plane/execution_engine.py +231 -0
  11. agent_control_plane/flight_recorder.py +846 -0
  12. agent_control_plane/governance_layer.py +435 -0
  13. agent_control_plane/hf_utils.py +563 -0
  14. agent_control_plane/interfaces/__init__.py +55 -0
  15. agent_control_plane/interfaces/kernel_interface.py +361 -0
  16. agent_control_plane/interfaces/plugin_interface.py +497 -0
  17. agent_control_plane/interfaces/protocol_interfaces.py +387 -0
  18. agent_control_plane/kernel_space.py +1009 -0
  19. agent_control_plane/langchain_adapter.py +424 -0
  20. agent_control_plane/lifecycle.py +3113 -0
  21. agent_control_plane/mcp_adapter.py +653 -0
  22. agent_control_plane/ml_safety.py +563 -0
  23. agent_control_plane/multimodal.py +727 -0
  24. agent_control_plane/mute_agent.py +422 -0
  25. agent_control_plane/observability.py +787 -0
  26. agent_control_plane/orchestrator.py +482 -0
  27. agent_control_plane/plugin_registry.py +750 -0
  28. agent_control_plane/policy_engine.py +954 -0
  29. agent_control_plane/process_isolation.py +777 -0
  30. agent_control_plane/shadow_mode.py +310 -0
  31. agent_control_plane/signals.py +493 -0
  32. agent_control_plane/supervisor_agents.py +430 -0
  33. agent_control_plane/time_travel_debugger.py +557 -0
  34. agent_control_plane/tool_registry.py +452 -0
  35. agent_control_plane/vfs.py +697 -0
  36. agent_kernel/__init__.py +69 -0
  37. agent_kernel/analyzer.py +435 -0
  38. agent_kernel/auditor.py +36 -0
  39. agent_kernel/completeness_auditor.py +237 -0
  40. agent_kernel/detector.py +203 -0
  41. agent_kernel/kernel.py +744 -0
  42. agent_kernel/memory_manager.py +85 -0
  43. agent_kernel/models.py +374 -0
  44. agent_kernel/nudge_mechanism.py +263 -0
  45. agent_kernel/outcome_analyzer.py +338 -0
  46. agent_kernel/patcher.py +582 -0
  47. agent_kernel/semantic_analyzer.py +316 -0
  48. agent_kernel/semantic_purge.py +349 -0
  49. agent_kernel/simulator.py +449 -0
  50. agent_kernel/teacher.py +85 -0
  51. agent_kernel/triage.py +152 -0
  52. agent_os/__init__.py +409 -0
  53. agent_os/_adversarial_impl.py +200 -0
  54. agent_os/_circuit_breaker_impl.py +232 -0
  55. agent_os/_mcp_metrics.py +193 -0
  56. agent_os/adversarial.py +20 -0
  57. agent_os/agents_compat.py +490 -0
  58. agent_os/audit_logger.py +135 -0
  59. agent_os/base_agent.py +651 -0
  60. agent_os/circuit_breaker.py +34 -0
  61. agent_os/cli/__init__.py +659 -0
  62. agent_os/cli/cmd_audit.py +128 -0
  63. agent_os/cli/cmd_init.py +152 -0
  64. agent_os/cli/cmd_policy.py +41 -0
  65. agent_os/cli/cmd_policy_gen.py +180 -0
  66. agent_os/cli/cmd_validate.py +258 -0
  67. agent_os/cli/mcp_scan.py +265 -0
  68. agent_os/cli/output.py +192 -0
  69. agent_os/cli/policy_checker.py +330 -0
  70. agent_os/compat.py +74 -0
  71. agent_os/constraint_graph.py +234 -0
  72. agent_os/content_governance.py +140 -0
  73. agent_os/context_budget.py +305 -0
  74. agent_os/credential_redactor.py +224 -0
  75. agent_os/diff_policy.py +89 -0
  76. agent_os/egress_policy.py +159 -0
  77. agent_os/escalation.py +276 -0
  78. agent_os/event_bus.py +124 -0
  79. agent_os/exceptions.py +180 -0
  80. agent_os/execution_context_policy.py +141 -0
  81. agent_os/github_enterprise.py +96 -0
  82. agent_os/health.py +20 -0
  83. agent_os/integrations/__init__.py +279 -0
  84. agent_os/integrations/a2a_adapter.py +279 -0
  85. agent_os/integrations/agent_lightning/__init__.py +30 -0
  86. agent_os/integrations/anthropic_adapter.py +420 -0
  87. agent_os/integrations/autogen_adapter.py +620 -0
  88. agent_os/integrations/base.py +1137 -0
  89. agent_os/integrations/compat.py +229 -0
  90. agent_os/integrations/config.py +98 -0
  91. agent_os/integrations/conversation_guardian.py +957 -0
  92. agent_os/integrations/crewai_adapter.py +467 -0
  93. agent_os/integrations/drift_detector.py +425 -0
  94. agent_os/integrations/dry_run.py +124 -0
  95. agent_os/integrations/escalation.py +582 -0
  96. agent_os/integrations/gemini_adapter.py +364 -0
  97. agent_os/integrations/google_adk_adapter.py +633 -0
  98. agent_os/integrations/guardrails_adapter.py +394 -0
  99. agent_os/integrations/health.py +197 -0
  100. agent_os/integrations/langchain_adapter.py +654 -0
  101. agent_os/integrations/llamafirewall.py +343 -0
  102. agent_os/integrations/llamaindex_adapter.py +188 -0
  103. agent_os/integrations/logging.py +191 -0
  104. agent_os/integrations/maf_adapter.py +631 -0
  105. agent_os/integrations/mistral_adapter.py +365 -0
  106. agent_os/integrations/openai_adapter.py +816 -0
  107. agent_os/integrations/openai_agents_sdk.py +406 -0
  108. agent_os/integrations/policy_compose.py +171 -0
  109. agent_os/integrations/profiling.py +144 -0
  110. agent_os/integrations/pydantic_ai_adapter.py +420 -0
  111. agent_os/integrations/rate_limiter.py +130 -0
  112. agent_os/integrations/rbac.py +143 -0
  113. agent_os/integrations/registry.py +113 -0
  114. agent_os/integrations/scope_guard.py +303 -0
  115. agent_os/integrations/semantic_kernel_adapter.py +769 -0
  116. agent_os/integrations/smolagents_adapter.py +629 -0
  117. agent_os/integrations/templates.py +178 -0
  118. agent_os/integrations/token_budget.py +134 -0
  119. agent_os/integrations/tool_aliases.py +190 -0
  120. agent_os/integrations/webhooks.py +177 -0
  121. agent_os/lite.py +208 -0
  122. agent_os/mcp_gateway.py +385 -0
  123. agent_os/mcp_message_signer.py +273 -0
  124. agent_os/mcp_protocols.py +161 -0
  125. agent_os/mcp_response_scanner.py +232 -0
  126. agent_os/mcp_security.py +924 -0
  127. agent_os/mcp_session_auth.py +231 -0
  128. agent_os/mcp_sliding_rate_limiter.py +184 -0
  129. agent_os/memory_guard.py +409 -0
  130. agent_os/metrics.py +134 -0
  131. agent_os/mute.py +428 -0
  132. agent_os/mute_agent.py +209 -0
  133. agent_os/policies/__init__.py +77 -0
  134. agent_os/policies/async_evaluator.py +275 -0
  135. agent_os/policies/backends.py +670 -0
  136. agent_os/policies/bridge.py +169 -0
  137. agent_os/policies/budget.py +85 -0
  138. agent_os/policies/cli.py +294 -0
  139. agent_os/policies/conflict_resolution.py +270 -0
  140. agent_os/policies/data_classification.py +252 -0
  141. agent_os/policies/evaluator.py +239 -0
  142. agent_os/policies/policy_schema.json +228 -0
  143. agent_os/policies/rate_limiting.py +145 -0
  144. agent_os/policies/schema.py +115 -0
  145. agent_os/policies/shared.py +331 -0
  146. agent_os/prompt_injection.py +694 -0
  147. agent_os/providers.py +182 -0
  148. agent_os/py.typed +0 -0
  149. agent_os/retry.py +81 -0
  150. agent_os/reversibility.py +251 -0
  151. agent_os/sandbox.py +432 -0
  152. agent_os/sandbox_provider.py +140 -0
  153. agent_os/secure_codegen.py +525 -0
  154. agent_os/security_skills.py +538 -0
  155. agent_os/semantic_policy.py +422 -0
  156. agent_os/server/__init__.py +15 -0
  157. agent_os/server/__main__.py +25 -0
  158. agent_os/server/app.py +277 -0
  159. agent_os/server/models.py +104 -0
  160. agent_os/shift_left_metrics.py +130 -0
  161. agent_os/stateless.py +742 -0
  162. agent_os/supervisor.py +148 -0
  163. agent_os/task_outcome.py +148 -0
  164. agent_os/transparency.py +181 -0
  165. agent_os/trust_root.py +128 -0
  166. agent_os_kernel-3.1.0.dist-info/METADATA +1269 -0
  167. agent_os_kernel-3.1.0.dist-info/RECORD +337 -0
  168. agent_os_kernel-3.1.0.dist-info/WHEEL +4 -0
  169. agent_os_kernel-3.1.0.dist-info/entry_points.txt +2 -0
  170. agent_os_kernel-3.1.0.dist-info/licenses/LICENSE +21 -0
  171. agent_os_observability/__init__.py +27 -0
  172. agent_os_observability/dashboards.py +898 -0
  173. agent_os_observability/metrics.py +398 -0
  174. agent_os_observability/server.py +223 -0
  175. agent_os_observability/tracer.py +232 -0
  176. agent_primitives/__init__.py +24 -0
  177. agent_primitives/failures.py +84 -0
  178. agent_primitives/py.typed +0 -0
  179. amb_core/__init__.py +177 -0
  180. amb_core/adapters/__init__.py +57 -0
  181. amb_core/adapters/aws_sqs_broker.py +376 -0
  182. amb_core/adapters/azure_servicebus_broker.py +340 -0
  183. amb_core/adapters/kafka_broker.py +260 -0
  184. amb_core/adapters/nats_broker.py +285 -0
  185. amb_core/adapters/rabbitmq_broker.py +235 -0
  186. amb_core/adapters/redis_broker.py +262 -0
  187. amb_core/broker.py +145 -0
  188. amb_core/bus.py +481 -0
  189. amb_core/cloudevents.py +509 -0
  190. amb_core/dlq.py +345 -0
  191. amb_core/hf_utils.py +536 -0
  192. amb_core/memory_broker.py +410 -0
  193. amb_core/models.py +141 -0
  194. amb_core/persistence.py +529 -0
  195. amb_core/schema.py +294 -0
  196. amb_core/tracing.py +358 -0
  197. atr/__init__.py +640 -0
  198. atr/access.py +348 -0
  199. atr/composition.py +645 -0
  200. atr/decorator.py +357 -0
  201. atr/executor.py +384 -0
  202. atr/health.py +557 -0
  203. atr/hf_utils.py +449 -0
  204. atr/injection.py +422 -0
  205. atr/metrics.py +440 -0
  206. atr/policies.py +403 -0
  207. atr/py.typed +2 -0
  208. atr/registry.py +452 -0
  209. atr/schema.py +480 -0
  210. atr/tools/safe/__init__.py +75 -0
  211. atr/tools/safe/calculator.py +467 -0
  212. atr/tools/safe/datetime_tool.py +443 -0
  213. atr/tools/safe/file_reader.py +402 -0
  214. atr/tools/safe/http_client.py +316 -0
  215. atr/tools/safe/json_parser.py +374 -0
  216. atr/tools/safe/text_tool.py +537 -0
  217. atr/tools/safe/toolkit.py +175 -0
  218. caas/__init__.py +162 -0
  219. caas/api/__init__.py +7 -0
  220. caas/api/server.py +1328 -0
  221. caas/caching.py +834 -0
  222. caas/cli.py +210 -0
  223. caas/conversation.py +223 -0
  224. caas/decay.py +72 -0
  225. caas/detection/__init__.py +9 -0
  226. caas/detection/detector.py +238 -0
  227. caas/enrichment.py +130 -0
  228. caas/gateway/__init__.py +27 -0
  229. caas/gateway/trust_gateway.py +474 -0
  230. caas/hf_utils.py +479 -0
  231. caas/ingestion/__init__.py +23 -0
  232. caas/ingestion/processors.py +253 -0
  233. caas/ingestion/structure_parser.py +188 -0
  234. caas/models.py +356 -0
  235. caas/pragmatic_truth.py +444 -0
  236. caas/routing/__init__.py +10 -0
  237. caas/routing/heuristic_router.py +58 -0
  238. caas/storage/__init__.py +9 -0
  239. caas/storage/store.py +389 -0
  240. caas/triad.py +213 -0
  241. caas/tuning/__init__.py +9 -0
  242. caas/tuning/tuner.py +329 -0
  243. caas/vfs/__init__.py +14 -0
  244. caas/vfs/filesystem.py +452 -0
  245. cmvk/__init__.py +218 -0
  246. cmvk/audit.py +402 -0
  247. cmvk/benchmarks.py +478 -0
  248. cmvk/constitutional.py +904 -0
  249. cmvk/hf_utils.py +301 -0
  250. cmvk/metrics.py +473 -0
  251. cmvk/profiles.py +300 -0
  252. cmvk/py.typed +0 -0
  253. cmvk/types.py +12 -0
  254. cmvk/verification.py +956 -0
  255. emk/__init__.py +89 -0
  256. emk/causal.py +352 -0
  257. emk/hf_utils.py +421 -0
  258. emk/indexer.py +83 -0
  259. emk/py.typed +0 -0
  260. emk/schema.py +204 -0
  261. emk/sleep_cycle.py +347 -0
  262. emk/store.py +281 -0
  263. iatp/__init__.py +166 -0
  264. iatp/attestation.py +461 -0
  265. iatp/cli.py +317 -0
  266. iatp/hf_utils.py +472 -0
  267. iatp/ipc_pipes.py +580 -0
  268. iatp/main.py +412 -0
  269. iatp/models/__init__.py +447 -0
  270. iatp/policy_engine.py +337 -0
  271. iatp/py.typed +2 -0
  272. iatp/recovery.py +321 -0
  273. iatp/security/__init__.py +270 -0
  274. iatp/sidecar/__init__.py +519 -0
  275. iatp/telemetry/__init__.py +164 -0
  276. iatp/tests/__init__.py +1 -0
  277. iatp/tests/test_attestation.py +370 -0
  278. iatp/tests/test_cli.py +131 -0
  279. iatp/tests/test_ed25519_attestation.py +211 -0
  280. iatp/tests/test_models.py +130 -0
  281. iatp/tests/test_policy_engine.py +347 -0
  282. iatp/tests/test_recovery.py +281 -0
  283. iatp/tests/test_security.py +222 -0
  284. iatp/tests/test_sidecar.py +167 -0
  285. iatp/tests/test_telemetry.py +175 -0
  286. mcp_kernel_server/__init__.py +28 -0
  287. mcp_kernel_server/cli.py +274 -0
  288. mcp_kernel_server/resources.py +217 -0
  289. mcp_kernel_server/server.py +564 -0
  290. mcp_kernel_server/tools.py +1174 -0
  291. mute_agent/__init__.py +68 -0
  292. mute_agent/core/__init__.py +1 -0
  293. mute_agent/core/execution_agent.py +166 -0
  294. mute_agent/core/handshake_protocol.py +201 -0
  295. mute_agent/core/reasoning_agent.py +238 -0
  296. mute_agent/knowledge_graph/__init__.py +1 -0
  297. mute_agent/knowledge_graph/graph_elements.py +65 -0
  298. mute_agent/knowledge_graph/multidimensional_graph.py +170 -0
  299. mute_agent/knowledge_graph/subgraph.py +224 -0
  300. mute_agent/listener/__init__.py +43 -0
  301. mute_agent/listener/adapters/__init__.py +31 -0
  302. mute_agent/listener/adapters/base_adapter.py +189 -0
  303. mute_agent/listener/adapters/caas_adapter.py +344 -0
  304. mute_agent/listener/adapters/control_plane_adapter.py +436 -0
  305. mute_agent/listener/adapters/iatp_adapter.py +332 -0
  306. mute_agent/listener/adapters/scak_adapter.py +251 -0
  307. mute_agent/listener/listener.py +610 -0
  308. mute_agent/listener/state_observer.py +436 -0
  309. mute_agent/listener/threshold_config.py +313 -0
  310. mute_agent/super_system/__init__.py +1 -0
  311. mute_agent/super_system/router.py +204 -0
  312. mute_agent/visualization/__init__.py +10 -0
  313. mute_agent/visualization/graph_debugger.py +502 -0
  314. nexus/README.md +60 -0
  315. nexus/__init__.py +51 -0
  316. nexus/arbiter.py +359 -0
  317. nexus/client.py +466 -0
  318. nexus/dmz.py +444 -0
  319. nexus/escrow.py +430 -0
  320. nexus/exceptions.py +286 -0
  321. nexus/pyproject.toml +36 -0
  322. nexus/registry.py +393 -0
  323. nexus/reputation.py +425 -0
  324. nexus/schemas/__init__.py +51 -0
  325. nexus/schemas/compliance.py +276 -0
  326. nexus/schemas/escrow.py +251 -0
  327. nexus/schemas/manifest.py +225 -0
  328. nexus/schemas/receipt.py +208 -0
  329. nexus/tests/__init__.py +0 -0
  330. nexus/tests/conftest.py +146 -0
  331. nexus/tests/test_arbiter.py +192 -0
  332. nexus/tests/test_dmz.py +194 -0
  333. nexus/tests/test_escrow.py +276 -0
  334. nexus/tests/test_exceptions.py +225 -0
  335. nexus/tests/test_registry.py +232 -0
  336. nexus/tests/test_reputation.py +328 -0
  337. nexus/tests/test_schemas.py +295 -0
@@ -0,0 +1,232 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ OpenTelemetry Tracing for Agent OS Kernel.
5
+
6
+ Every kernel operation emits traces for debugging and compliance.
7
+ """
8
+
9
+ from opentelemetry import trace
10
+ from opentelemetry.sdk.trace import TracerProvider
11
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
12
+ from opentelemetry.sdk.resources import Resource
13
+ from opentelemetry.trace import Status, StatusCode
14
+ from functools import wraps
15
+ from typing import Any, Callable, Optional
16
+ import time
17
+
18
+
19
+ class KernelTracer:
20
+ """
21
+ OpenTelemetry tracer for Agent OS kernel.
22
+
23
+ Usage:
24
+ tracer = KernelTracer(service_name="agent-os")
25
+
26
+ # Trace an operation
27
+ with tracer.span("policy_check", {"agent_id": "001", "action": "query"}):
28
+ result = policy_engine.check(action)
29
+
30
+ # Or use decorator
31
+ @tracer.trace("execute_action")
32
+ async def execute(action, params):
33
+ ...
34
+ """
35
+
36
+ def __init__(
37
+ self,
38
+ service_name: str = "agent-os-kernel",
39
+ exporter=None,
40
+ attributes: Optional[dict] = None
41
+ ):
42
+ """
43
+ Initialize tracer.
44
+
45
+ Args:
46
+ service_name: Name of the service
47
+ exporter: OpenTelemetry exporter (default: console)
48
+ attributes: Additional resource attributes
49
+ """
50
+ resource_attrs = {
51
+ "service.name": service_name,
52
+ "service.version": "0.4.0",
53
+ "deployment.environment": "production"
54
+ }
55
+ if attributes:
56
+ resource_attrs.update(attributes)
57
+
58
+ resource = Resource.create(resource_attrs)
59
+ provider = TracerProvider(resource=resource)
60
+
61
+ if exporter:
62
+ provider.add_span_processor(BatchSpanProcessor(exporter))
63
+
64
+ trace.set_tracer_provider(provider)
65
+ self.tracer = trace.get_tracer(__name__)
66
+
67
+ def span(self, name: str, attributes: Optional[dict] = None):
68
+ """
69
+ Create a span context manager.
70
+
71
+ Usage:
72
+ with tracer.span("operation", {"key": "value"}):
73
+ do_work()
74
+ """
75
+ span = self.tracer.start_span(name)
76
+ if attributes:
77
+ for key, value in attributes.items():
78
+ span.set_attribute(key, value)
79
+ return SpanContext(span)
80
+
81
+ def trace(self, name: str, extract_attributes: Optional[Callable] = None):
82
+ """
83
+ Decorator to trace a function.
84
+
85
+ Usage:
86
+ @tracer.trace("my_function")
87
+ def my_function(x, y):
88
+ return x + y
89
+ """
90
+ def decorator(func):
91
+ @wraps(func)
92
+ async def async_wrapper(*args, **kwargs):
93
+ attrs = {}
94
+ if extract_attributes:
95
+ attrs = extract_attributes(*args, **kwargs)
96
+
97
+ with self.span(name, attrs) as span:
98
+ try:
99
+ result = await func(*args, **kwargs)
100
+ span.set_attribute("status", "success")
101
+ return result
102
+ except Exception as e:
103
+ span.record_exception(e)
104
+ span.set_status(Status(StatusCode.ERROR, str(e)))
105
+ raise
106
+
107
+ @wraps(func)
108
+ def sync_wrapper(*args, **kwargs):
109
+ attrs = {}
110
+ if extract_attributes:
111
+ attrs = extract_attributes(*args, **kwargs)
112
+
113
+ with self.span(name, attrs) as span:
114
+ try:
115
+ result = func(*args, **kwargs)
116
+ span.set_attribute("status", "success")
117
+ return result
118
+ except Exception as e:
119
+ span.record_exception(e)
120
+ span.set_status(Status(StatusCode.ERROR, str(e)))
121
+ raise
122
+
123
+ import asyncio
124
+ if asyncio.iscoroutinefunction(func):
125
+ return async_wrapper
126
+ return sync_wrapper
127
+
128
+ return decorator
129
+
130
+ # =========================================================================
131
+ # Pre-built Kernel Traces
132
+ # =========================================================================
133
+
134
+ def trace_policy_check(self, agent_id: str, action: str, policies: list):
135
+ """Start a policy check trace."""
136
+ return self.span("kernel.policy_check", {
137
+ "agent.id": agent_id,
138
+ "action": action,
139
+ "policies": ",".join(policies),
140
+ "kernel.component": "policy_engine"
141
+ })
142
+
143
+ def trace_execution(self, agent_id: str, action: str):
144
+ """Start an execution trace."""
145
+ return self.span("kernel.execute", {
146
+ "agent.id": agent_id,
147
+ "action": action,
148
+ "kernel.component": "dispatcher"
149
+ })
150
+
151
+ def trace_signal(self, agent_id: str, signal: str, reason: str):
152
+ """Start a signal trace."""
153
+ return self.span("kernel.signal", {
154
+ "agent.id": agent_id,
155
+ "signal": signal,
156
+ "reason": reason,
157
+ "kernel.component": "signal_dispatcher"
158
+ })
159
+
160
+ def trace_violation(self, agent_id: str, action: str, policy: str, reason: str):
161
+ """Start a violation trace."""
162
+ return self.span("kernel.violation", {
163
+ "agent.id": agent_id,
164
+ "action": action,
165
+ "policy": policy,
166
+ "violation.reason": reason,
167
+ "kernel.component": "policy_engine",
168
+ "severity": "high"
169
+ })
170
+
171
+
172
+ class SpanContext:
173
+ """Context manager for spans."""
174
+
175
+ def __init__(self, span):
176
+ self.span = span
177
+ self.start_time = None
178
+
179
+ def __enter__(self):
180
+ self.start_time = time.time()
181
+ return self
182
+
183
+ def __exit__(self, exc_type, exc_val, exc_tb):
184
+ duration = time.time() - self.start_time
185
+ self.span.set_attribute("duration_ms", duration * 1000)
186
+
187
+ if exc_type:
188
+ self.span.record_exception(exc_val)
189
+ self.span.set_status(Status(StatusCode.ERROR, str(exc_val)))
190
+ else:
191
+ self.span.set_status(Status(StatusCode.OK))
192
+
193
+ self.span.end()
194
+ return False
195
+
196
+ def set_attribute(self, key: str, value: Any):
197
+ """Set an attribute on the span."""
198
+ self.span.set_attribute(key, value)
199
+
200
+ def add_event(self, name: str, attributes: Optional[dict] = None):
201
+ """Add an event to the span."""
202
+ self.span.add_event(name, attributes or {})
203
+
204
+ def record_exception(self, exception: Exception):
205
+ """Record an exception."""
206
+ self.span.record_exception(exception)
207
+
208
+ def set_status(self, status):
209
+ """Set the span status."""
210
+ self.span.set_status(status)
211
+
212
+
213
+ def trace_operation(
214
+ tracer: KernelTracer,
215
+ name: str,
216
+ attributes: Optional[dict] = None
217
+ ):
218
+ """
219
+ Decorator to trace an operation.
220
+
221
+ Usage:
222
+ @trace_operation(tracer, "my_operation", {"key": "value"})
223
+ def my_function():
224
+ pass
225
+ """
226
+ def decorator(func):
227
+ @wraps(func)
228
+ def wrapper(*args, **kwargs):
229
+ with tracer.span(name, attributes):
230
+ return func(*args, **kwargs)
231
+ return wrapper
232
+ return decorator
@@ -0,0 +1,24 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Agent Primitives - Shared data models for Agent OS.
5
+
6
+ This is a Layer 1 primitive package providing foundational models
7
+ used across the Agent OS stack.
8
+ """
9
+
10
+ __version__ = "3.1.0"
11
+
12
+ from .failures import (
13
+ FailureType,
14
+ FailureSeverity,
15
+ FailureTrace,
16
+ AgentFailure,
17
+ )
18
+
19
+ __all__ = [
20
+ "FailureType",
21
+ "FailureSeverity",
22
+ "FailureTrace",
23
+ "AgentFailure",
24
+ ]
@@ -0,0 +1,84 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Failure models for Agent OS.
5
+
6
+ These are the foundational failure tracking primitives used across the stack.
7
+ Extracted to Layer 1 to allow proper dependency layering.
8
+ """
9
+
10
+ from typing import Dict, List, Optional, Any
11
+ from datetime import datetime
12
+ from enum import Enum
13
+ from pydantic import BaseModel, Field, ConfigDict
14
+
15
+
16
+ class FailureType(str, Enum):
17
+ """Types of agent failures."""
18
+ BLOCKED_BY_CONTROL_PLANE = "blocked_by_control_plane"
19
+ TIMEOUT = "timeout"
20
+ INVALID_ACTION = "invalid_action"
21
+ RESOURCE_EXHAUSTED = "resource_exhausted"
22
+ LOGIC_ERROR = "logic_error"
23
+ UNKNOWN = "unknown"
24
+
25
+
26
+ class FailureSeverity(str, Enum):
27
+ """Severity levels for failures."""
28
+ LOW = "low"
29
+ MEDIUM = "medium"
30
+ HIGH = "high"
31
+ CRITICAL = "critical"
32
+
33
+
34
+ class FailureTrace(BaseModel):
35
+ """Full trace of an agent failure including reasoning chain."""
36
+
37
+ user_prompt: str = Field(..., description="Original user prompt that led to failure")
38
+ chain_of_thought: List[str] = Field(default_factory=list, description="Agent's reasoning steps")
39
+ failed_action: Dict[str, Any] = Field(..., description="The action that failed")
40
+ error_details: str = Field(..., description="Detailed error information")
41
+ timestamp: datetime = Field(default_factory=datetime.utcnow)
42
+
43
+ model_config = ConfigDict(
44
+ json_schema_extra={
45
+ "example": {
46
+ "user_prompt": "Delete the recent user records",
47
+ "chain_of_thought": [
48
+ "User wants to delete records",
49
+ "I need to identify which records are 'recent'",
50
+ "I'll delete from users table"
51
+ ],
52
+ "failed_action": {
53
+ "action": "execute_sql",
54
+ "query": "DELETE FROM users WHERE created_at > '2024-01-01'"
55
+ },
56
+ "error_details": "Action blocked by control plane: Dangerous SQL query"
57
+ }
58
+ }
59
+ )
60
+
61
+
62
+ class AgentFailure(BaseModel):
63
+ """Represents a failure detected in an agent."""
64
+
65
+ agent_id: str = Field(..., description="Unique identifier for the agent")
66
+ failure_type: FailureType = Field(..., description="Type of failure")
67
+ severity: FailureSeverity = Field(default=FailureSeverity.MEDIUM)
68
+ timestamp: datetime = Field(default_factory=datetime.utcnow)
69
+ error_message: str = Field(..., description="Error message from the failure")
70
+ context: Dict[str, Any] = Field(default_factory=dict, description="Additional context")
71
+ stack_trace: Optional[str] = Field(None, description="Stack trace if available")
72
+ failure_trace: Optional[FailureTrace] = Field(None, description="Full failure trace if available")
73
+
74
+ model_config = ConfigDict(
75
+ json_schema_extra={
76
+ "example": {
77
+ "agent_id": "agent-123",
78
+ "failure_type": "blocked_by_control_plane",
79
+ "severity": "high",
80
+ "error_message": "Agent action blocked by control plane policy",
81
+ "context": {"action": "delete_file", "resource": "/etc/passwd"}
82
+ }
83
+ }
84
+ )
File without changes
amb_core/__init__.py ADDED
@@ -0,0 +1,177 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ AMB Core - A lightweight, broker-agnostic message bus for AI Agents.
5
+
6
+ AMB (Agent Message Bus) provides a decoupled communication layer that allows
7
+ AI agents to emit signals, broadcast intentions, and coordinate without tight
8
+ coupling between senders and receivers.
9
+
10
+ Key Features:
11
+ - Broker-agnostic: Works with Redis, RabbitMQ, Kafka, or in-memory
12
+ - Async-first: Built on asyncio/anyio for non-blocking operation
13
+ - Multiple patterns: Fire-and-forget, acknowledgment, request-response
14
+ - Type-safe: Full type hints with Pydantic validation
15
+
16
+ New in v0.2.0:
17
+ - Message persistence for replay capability (AMB-001)
18
+ - Dead Letter Queue for failed messages (AMB-002)
19
+ - Schema validation via SchemaRegistry (AMB-003)
20
+ - Distributed tracing support (AMB-004)
21
+ - Message prioritization (AMB-005)
22
+ - Message TTL/expiration (AMB-007)
23
+
24
+ Quick Start:
25
+ >>> import asyncio
26
+ >>> from amb_core import MessageBus, Message
27
+ >>>
28
+ >>> async def main():
29
+ ... async with MessageBus() as bus:
30
+ ... await bus.publish("agent.thoughts", {"thought": "Hello!"})
31
+ >>>
32
+ >>> asyncio.run(main())
33
+
34
+ Advanced Usage:
35
+ >>> from amb_core import MessageBus, SchemaRegistry, Priority
36
+ >>> from pydantic import BaseModel
37
+ >>>
38
+ >>> class FraudAlert(BaseModel):
39
+ ... transaction_id: str
40
+ ... risk_score: float
41
+ >>>
42
+ >>> schemas = SchemaRegistry()
43
+ >>> schemas.register("fraud.alerts", FraudAlert)
44
+ >>>
45
+ >>> async def main():
46
+ ... bus = MessageBus(
47
+ ... persistence=True,
48
+ ... schema_registry=schemas,
49
+ ... dlq_enabled=True
50
+ ... )
51
+ ... async with bus:
52
+ ... await bus.publish(
53
+ ... "fraud.alerts",
54
+ ... {"transaction_id": "tx123", "risk_score": 0.95},
55
+ ... priority=Priority.CRITICAL,
56
+ ... ttl_seconds=300
57
+ ... )
58
+
59
+ For more information, see: https://github.com/microsoft/agent-governance-toolkit
60
+ """
61
+
62
+ from __future__ import annotations
63
+
64
+ __version__ = "3.1.0"
65
+ __author__ = "Microsoft Corporation"
66
+ __license__ = "MIT"
67
+
68
+ # Core models
69
+ from amb_core.models import Message, MessagePriority, Priority, MessageStatus
70
+
71
+ # Main bus
72
+ from amb_core.bus import MessageBus
73
+
74
+ # Broker interface
75
+ from amb_core.broker import BrokerAdapter, MessageHandler
76
+ from amb_core.memory_broker import InMemoryBroker
77
+
78
+ # Schema validation (AMB-003)
79
+ from amb_core.schema import (
80
+ SchemaRegistry,
81
+ Schema,
82
+ PydanticSchema,
83
+ DictSchema,
84
+ CallableSchema,
85
+ SchemaValidationError,
86
+ )
87
+
88
+ # Dead Letter Queue (AMB-002)
89
+ from amb_core.dlq import (
90
+ DeadLetterQueue,
91
+ DLQEntry,
92
+ DLQReason,
93
+ DLQHandler,
94
+ )
95
+
96
+ # Persistence (AMB-001)
97
+ from amb_core.persistence import (
98
+ MessageStore,
99
+ InMemoryMessageStore,
100
+ FileMessageStore,
101
+ PersistedMessage,
102
+ MessageStatus as PersistenceMessageStatus,
103
+ )
104
+
105
+ # Tracing (AMB-004)
106
+ from amb_core.tracing import (
107
+ TraceContext,
108
+ TraceSpan,
109
+ get_current_trace,
110
+ inject_trace,
111
+ extract_trace,
112
+ )
113
+
114
+ # CloudEvents support (AMB-008)
115
+ from amb_core.cloudevents import (
116
+ CloudEvent,
117
+ CloudEventBatch,
118
+ to_cloudevent,
119
+ from_cloudevent,
120
+ to_http_headers,
121
+ from_http_headers,
122
+ topic_to_type,
123
+ type_to_topic,
124
+ CLOUDEVENTS_SPEC_VERSION,
125
+ CLOUDEVENTS_CONTENT_TYPE,
126
+ )
127
+
128
+ __all__ = [
129
+ # Version info
130
+ "__version__",
131
+ "__author__",
132
+ "__license__",
133
+ # Core classes
134
+ "Message",
135
+ "MessagePriority",
136
+ "Priority",
137
+ "MessageStatus",
138
+ "MessageBus",
139
+ # Broker interface
140
+ "BrokerAdapter",
141
+ "MessageHandler",
142
+ "InMemoryBroker",
143
+ # Schema validation
144
+ "SchemaRegistry",
145
+ "Schema",
146
+ "PydanticSchema",
147
+ "DictSchema",
148
+ "CallableSchema",
149
+ "SchemaValidationError",
150
+ # DLQ
151
+ "DeadLetterQueue",
152
+ "DLQEntry",
153
+ "DLQReason",
154
+ "DLQHandler",
155
+ # Persistence
156
+ "MessageStore",
157
+ "InMemoryMessageStore",
158
+ "FileMessageStore",
159
+ "PersistedMessage",
160
+ # Tracing
161
+ "TraceContext",
162
+ "TraceSpan",
163
+ "get_current_trace",
164
+ "inject_trace",
165
+ "extract_trace",
166
+ # CloudEvents
167
+ "CloudEvent",
168
+ "CloudEventBatch",
169
+ "to_cloudevent",
170
+ "from_cloudevent",
171
+ "to_http_headers",
172
+ "from_http_headers",
173
+ "topic_to_type",
174
+ "type_to_topic",
175
+ "CLOUDEVENTS_SPEC_VERSION",
176
+ "CLOUDEVENTS_CONTENT_TYPE",
177
+ ]
@@ -0,0 +1,57 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Broker adapters package for AMB.
5
+
6
+ This module provides optional adapters for different message brokers.
7
+ Each adapter requires its corresponding extra dependencies.
8
+
9
+ Available Adapters:
10
+ - RedisBroker: pip install amb-core[redis]
11
+ - RabbitMQBroker: pip install amb-core[rabbitmq]
12
+ - KafkaBroker: pip install amb-core[kafka]
13
+ - NATSBroker: pip install amb-core[nats]
14
+ - AzureServiceBusBroker: pip install amb-core[azure]
15
+ - AWSSQSBroker: pip install amb-core[aws]
16
+
17
+ Example:
18
+ >>> from amb_core.adapters.redis_broker import RedisBroker
19
+ >>> broker = RedisBroker(url="redis://localhost:6379/0")
20
+
21
+ >>> from amb_core.adapters.nats_broker import NATSBroker
22
+ >>> broker = NATSBroker(servers=["nats://localhost:4222"])
23
+ """
24
+
25
+ from typing import TYPE_CHECKING, List
26
+
27
+ __all__: List[str] = [
28
+ "RedisBroker",
29
+ "RabbitMQBroker",
30
+ "KafkaBroker",
31
+ "NATSBroker",
32
+ "AzureServiceBusBroker",
33
+ "AWSSQSBroker",
34
+ ]
35
+
36
+
37
+ def __getattr__(name: str):
38
+ """Lazy import adapters to avoid import errors when dependencies missing."""
39
+ if name == "RedisBroker":
40
+ from amb_core.adapters.redis_broker import RedisBroker
41
+ return RedisBroker
42
+ elif name == "RabbitMQBroker":
43
+ from amb_core.adapters.rabbitmq_broker import RabbitMQBroker
44
+ return RabbitMQBroker
45
+ elif name == "KafkaBroker":
46
+ from amb_core.adapters.kafka_broker import KafkaBroker
47
+ return KafkaBroker
48
+ elif name == "NATSBroker":
49
+ from amb_core.adapters.nats_broker import NATSBroker
50
+ return NATSBroker
51
+ elif name == "AzureServiceBusBroker":
52
+ from amb_core.adapters.azure_servicebus_broker import AzureServiceBusBroker
53
+ return AzureServiceBusBroker
54
+ elif name == "AWSSQSBroker":
55
+ from amb_core.adapters.aws_sqs_broker import AWSSQSBroker
56
+ return AWSSQSBroker
57
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")