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
nexus/exceptions.py ADDED
@@ -0,0 +1,286 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Nexus Exceptions
5
+
6
+ Custom exceptions for the Nexus Trust Exchange.
7
+ These exceptions drive the viral loop by directing unverified agents to register.
8
+ """
9
+
10
+ from typing import Optional
11
+
12
+
13
+ class NexusError(Exception):
14
+ """Base exception for all Nexus errors."""
15
+
16
+ def __init__(self, message: str, code: Optional[str] = None):
17
+ self.message = message
18
+ self.code = code or "NEXUS_ERROR"
19
+ super().__init__(f"[{self.code}] {message}")
20
+
21
+
22
+ class IATPUnverifiedPeerException(NexusError):
23
+ """
24
+ Raised when a peer agent is not registered on Nexus.
25
+
26
+ This is THE viral mechanism - the error message includes a registration URL,
27
+ driving unverified agents to register on Nexus to communicate.
28
+ """
29
+
30
+ REGISTRATION_BASE_URL = "https://nexus.agent-os.dev/register"
31
+
32
+ def __init__(self, peer_id: str, peer_address: Optional[str] = None):
33
+ self.peer_id = peer_id
34
+ self.peer_address = peer_address
35
+ self.registration_url = f"{self.REGISTRATION_BASE_URL}?agent={peer_id}"
36
+
37
+ message = (
38
+ f"Agent identity unknown: '{peer_id}' is not registered on Nexus. "
39
+ f"To establish an IATP handshake, the agent must register at: {self.registration_url}"
40
+ )
41
+ super().__init__(message, code="IATP_UNVERIFIED_PEER")
42
+
43
+ def to_iatp_error(self) -> dict:
44
+ """Convert to IATP error response format."""
45
+ return {
46
+ "error": "IATP_UNVERIFIED_PEER",
47
+ "message": self.message,
48
+ "peer_id": self.peer_id,
49
+ "registration_url": self.registration_url,
50
+ "action_required": "Register the agent on Nexus to enable communication",
51
+ }
52
+
53
+
54
+ class IATPInsufficientTrustException(NexusError):
55
+ """
56
+ Raised when a peer's trust score is below the required threshold.
57
+
58
+ Drives agents to improve their reputation through successful task completion.
59
+ """
60
+
61
+ def __init__(
62
+ self,
63
+ peer_did: str,
64
+ current_score: int,
65
+ required_score: int,
66
+ improvement_url: Optional[str] = None
67
+ ):
68
+ self.peer_did = peer_did
69
+ self.current_score = current_score
70
+ self.required_score = required_score
71
+ self.improvement_url = improvement_url or f"https://nexus.agent-os.dev/reputation/{peer_did}"
72
+ self.score_gap = required_score - current_score
73
+
74
+ message = (
75
+ f"Insufficient trust score for agent '{peer_did}': "
76
+ f"current={current_score}, required={required_score} (gap: {self.score_gap}). "
77
+ f"Improve reputation at: {self.improvement_url}"
78
+ )
79
+ super().__init__(message, code="IATP_INSUFFICIENT_TRUST")
80
+
81
+ def to_iatp_error(self) -> dict:
82
+ """Convert to IATP error response format."""
83
+ return {
84
+ "error": "IATP_INSUFFICIENT_TRUST",
85
+ "message": self.message,
86
+ "peer_did": self.peer_did,
87
+ "current_score": self.current_score,
88
+ "required_score": self.required_score,
89
+ "score_gap": self.score_gap,
90
+ "improvement_url": self.improvement_url,
91
+ "action_required": "Complete tasks successfully to improve reputation",
92
+ }
93
+
94
+
95
+ class IATPAttestationExpiredException(NexusError):
96
+ """Raised when a peer's attestation has expired."""
97
+
98
+ def __init__(self, peer_did: str, expired_at: str):
99
+ self.peer_did = peer_did
100
+ self.expired_at = expired_at
101
+
102
+ message = (
103
+ f"Attestation expired for agent '{peer_did}' at {expired_at}. "
104
+ f"Agent must renew attestation with Control Plane."
105
+ )
106
+ super().__init__(message, code="IATP_ATTESTATION_EXPIRED")
107
+
108
+
109
+ class IATPPolicyViolationException(NexusError):
110
+ """Raised when a peer's policies don't meet requirements."""
111
+
112
+ def __init__(self, peer_did: str, violation: str, required_policy: str):
113
+ self.peer_did = peer_did
114
+ self.violation = violation
115
+ self.required_policy = required_policy
116
+
117
+ message = (
118
+ f"Policy violation for agent '{peer_did}': {violation}. "
119
+ f"Required policy: {required_policy}"
120
+ )
121
+ super().__init__(message, code="IATP_POLICY_VIOLATION")
122
+
123
+
124
+ class EscrowError(NexusError):
125
+ """Base exception for escrow-related errors."""
126
+
127
+ def __init__(self, message: str, escrow_id: Optional[str] = None):
128
+ self.escrow_id = escrow_id
129
+ super().__init__(message, code="ESCROW_ERROR")
130
+
131
+
132
+ class EscrowNotFoundError(EscrowError):
133
+ """Raised when an escrow cannot be found."""
134
+
135
+ def __init__(self, escrow_id: str):
136
+ super().__init__(f"Escrow not found: {escrow_id}", escrow_id=escrow_id)
137
+ self.code = "ESCROW_NOT_FOUND"
138
+
139
+
140
+ class EscrowExpiredError(EscrowError):
141
+ """Raised when attempting to operate on an expired escrow."""
142
+
143
+ def __init__(self, escrow_id: str, expired_at: str):
144
+ self.expired_at = expired_at
145
+ super().__init__(
146
+ f"Escrow {escrow_id} expired at {expired_at}",
147
+ escrow_id=escrow_id
148
+ )
149
+ self.code = "ESCROW_EXPIRED"
150
+
151
+
152
+ class EscrowAlreadyResolvedError(EscrowError):
153
+ """Raised when attempting to modify an already-resolved escrow."""
154
+
155
+ def __init__(self, escrow_id: str, resolution_status: str):
156
+ self.resolution_status = resolution_status
157
+ super().__init__(
158
+ f"Escrow {escrow_id} already resolved with status: {resolution_status}",
159
+ escrow_id=escrow_id
160
+ )
161
+ self.code = "ESCROW_ALREADY_RESOLVED"
162
+
163
+
164
+ class InsufficientCreditsError(EscrowError):
165
+ """Raised when an agent doesn't have enough credits for escrow."""
166
+
167
+ def __init__(self, agent_did: str, required: int, available: int):
168
+ self.agent_did = agent_did
169
+ self.required = required
170
+ self.available = available
171
+ super().__init__(
172
+ f"Agent {agent_did} has insufficient credits: required={required}, available={available}"
173
+ )
174
+ self.code = "INSUFFICIENT_CREDITS"
175
+
176
+
177
+ class DisputeError(NexusError):
178
+ """Base exception for dispute-related errors."""
179
+
180
+ def __init__(self, message: str, dispute_id: Optional[str] = None):
181
+ self.dispute_id = dispute_id
182
+ super().__init__(message, code="DISPUTE_ERROR")
183
+
184
+
185
+ class DisputeNotFoundError(DisputeError):
186
+ """Raised when a dispute cannot be found."""
187
+
188
+ def __init__(self, dispute_id: str):
189
+ super().__init__(f"Dispute not found: {dispute_id}", dispute_id=dispute_id)
190
+ self.code = "DISPUTE_NOT_FOUND"
191
+
192
+
193
+ class DisputeAlreadyResolvedError(DisputeError):
194
+ """Raised when attempting to modify a resolved dispute."""
195
+
196
+ def __init__(self, dispute_id: str):
197
+ super().__init__(
198
+ f"Dispute {dispute_id} has already been resolved",
199
+ dispute_id=dispute_id
200
+ )
201
+ self.code = "DISPUTE_ALREADY_RESOLVED"
202
+
203
+
204
+ class DisputeEvidenceError(DisputeError):
205
+ """Raised when there's an issue with dispute evidence."""
206
+
207
+ def __init__(self, dispute_id: str, issue: str):
208
+ self.issue = issue
209
+ super().__init__(
210
+ f"Evidence issue for dispute {dispute_id}: {issue}",
211
+ dispute_id=dispute_id
212
+ )
213
+ self.code = "DISPUTE_EVIDENCE_ERROR"
214
+
215
+
216
+ class RegistryError(NexusError):
217
+ """Base exception for registry-related errors."""
218
+
219
+ def __init__(self, message: str, agent_did: Optional[str] = None):
220
+ self.agent_did = agent_did
221
+ super().__init__(message, code="REGISTRY_ERROR")
222
+
223
+
224
+ class AgentAlreadyRegisteredError(RegistryError):
225
+ """Raised when attempting to register an already-registered agent."""
226
+
227
+ def __init__(self, agent_did: str):
228
+ super().__init__(
229
+ f"Agent already registered: {agent_did}",
230
+ agent_did=agent_did
231
+ )
232
+ self.code = "AGENT_ALREADY_REGISTERED"
233
+
234
+
235
+ class AgentNotFoundError(RegistryError):
236
+ """Raised when an agent cannot be found in the registry."""
237
+
238
+ def __init__(self, agent_did: str):
239
+ super().__init__(
240
+ f"Agent not found in registry: {agent_did}",
241
+ agent_did=agent_did
242
+ )
243
+ self.code = "AGENT_NOT_FOUND"
244
+
245
+
246
+ class InvalidManifestError(RegistryError):
247
+ """Raised when an agent manifest is invalid."""
248
+
249
+ def __init__(self, agent_did: str, validation_errors: list[str]):
250
+ self.validation_errors = validation_errors
251
+ super().__init__(
252
+ f"Invalid manifest for {agent_did}: {', '.join(validation_errors)}",
253
+ agent_did=agent_did
254
+ )
255
+ self.code = "INVALID_MANIFEST"
256
+
257
+
258
+ class DMZError(NexusError):
259
+ """Base exception for DMZ protocol errors."""
260
+
261
+ def __init__(self, message: str):
262
+ super().__init__(message, code="DMZ_ERROR")
263
+
264
+
265
+ class PolicyNotSignedError(DMZError):
266
+ """Raised when data handling policy hasn't been signed."""
267
+
268
+ def __init__(self, agent_did: str, policy_hash: str):
269
+ self.agent_did = agent_did
270
+ self.policy_hash = policy_hash
271
+ super().__init__(
272
+ f"Agent {agent_did} has not signed policy {policy_hash}"
273
+ )
274
+ self.code = "POLICY_NOT_SIGNED"
275
+
276
+
277
+ class DataClassificationError(DMZError):
278
+ """Raised when data classification prevents operation."""
279
+
280
+ def __init__(self, classification: str, reason: str):
281
+ self.classification = classification
282
+ self.reason = reason
283
+ super().__init__(
284
+ f"Data classification '{classification}' blocked: {reason}"
285
+ )
286
+ self.code = "DATA_CLASSIFICATION_ERROR"
nexus/pyproject.toml ADDED
@@ -0,0 +1,36 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "nexus_trust_exchange"
7
+ version = "3.1.0"
8
+ description = "Agent Trust Exchange - viral registry and communication board for AI agents (RESEARCH PROTOTYPE)"
9
+ readme = "README.md"
10
+ license = {text = "MIT"}
11
+ requires-python = ">=3.9"
12
+ authors = [
13
+ { name = "Microsoft Corporation", email = "agentgovtoolkit@microsoft.com" },
14
+ ]
15
+ keywords = ["ai", "agents", "trust", "exchange", "registry"]
16
+ classifiers = [
17
+ "Development Status :: 2 - Pre-Alpha",
18
+ "Intended Audience :: Science/Research",
19
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
20
+ "Programming Language :: Python :: 3",
21
+ ]
22
+
23
+ dependencies = [
24
+ "pydantic>=2.4.0,<3.0",
25
+ "pyyaml>=6.0.0,<7.0",
26
+ "structlog>=24.1.0,<25.0",
27
+ "aiohttp>=3.13.3,<4.0",
28
+ "inter-agent-trust-protocol>=0.4.0,<1.0",
29
+ ]
30
+
31
+ [project.urls]
32
+ Homepage = "https://github.com/microsoft/agent-governance-toolkit"
33
+ Repository = "https://github.com/microsoft/agent-governance-toolkit/tree/main/modules/nexus"
34
+
35
+ [tool.hatch.build.targets.wheel]
36
+ packages = ["."]