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,447 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Core data models for the Inter-Agent Trust Protocol (IATP).
5
+
6
+ This module defines the Pydantic models used for capability manifests,
7
+ trust negotiation, and policy enforcement. These models form the
8
+ foundation of the IATP protocol.
9
+
10
+ Classes:
11
+ TrustLevel: Enumeration of agent trust levels.
12
+ ReversibilityLevel: Enumeration of transaction reversibility support.
13
+ RetentionPolicy: Enumeration of data retention policies.
14
+ PrivacyContract: Privacy and data handling policies.
15
+ AgentCapabilities: Capabilities advertised by an agent.
16
+ CapabilityManifest: The complete manifest exchanged during handshake.
17
+ QuarantineSession: Session info for quarantined requests.
18
+ TracingContext: Distributed tracing context.
19
+
20
+ Example:
21
+ Creating a capability manifest::
22
+
23
+ from iatp.models import (
24
+ CapabilityManifest,
25
+ AgentCapabilities,
26
+ PrivacyContract,
27
+ TrustLevel,
28
+ ReversibilityLevel,
29
+ RetentionPolicy,
30
+ )
31
+
32
+ manifest = CapabilityManifest(
33
+ agent_id="my-agent",
34
+ trust_level=TrustLevel.TRUSTED,
35
+ capabilities=AgentCapabilities(
36
+ reversibility=ReversibilityLevel.FULL,
37
+ idempotency=True,
38
+ ),
39
+ privacy_contract=PrivacyContract(
40
+ retention=RetentionPolicy.EPHEMERAL,
41
+ ),
42
+ )
43
+
44
+ print(f"Trust Score: {manifest.calculate_trust_score()}/10")
45
+ """
46
+
47
+ from __future__ import annotations
48
+
49
+ from enum import Enum
50
+ from typing import Any, Dict, List, Literal, Optional
51
+
52
+ from pydantic import BaseModel, Field
53
+
54
+ __all__ = [
55
+ "TrustLevel",
56
+ "ReversibilityLevel",
57
+ "RetentionPolicy",
58
+ "PrivacyContract",
59
+ "AgentCapabilities",
60
+ "CapabilityManifest",
61
+ "QuarantineSession",
62
+ "TracingContext",
63
+ "AttestationRecord",
64
+ "ReputationScore",
65
+ "ReputationEvent",
66
+ ]
67
+
68
+
69
+ class TrustLevel(str, Enum):
70
+ """Trust levels for agents."""
71
+ VERIFIED_PARTNER = "verified_partner"
72
+ TRUSTED = "trusted"
73
+ STANDARD = "standard"
74
+ UNKNOWN = "unknown"
75
+ UNTRUSTED = "untrusted"
76
+
77
+
78
+ class ReversibilityLevel(str, Enum):
79
+ """Reversibility support levels."""
80
+ FULL = "full" # Full rollback support
81
+ PARTIAL = "partial" # Limited rollback (e.g., with fees)
82
+ NONE = "none" # No rollback support
83
+
84
+
85
+ class RetentionPolicy(str, Enum):
86
+ """Data retention policies."""
87
+ EPHEMERAL = "ephemeral" # Data deleted after session
88
+ TEMPORARY = "temporary" # Data stored temporarily (e.g., 30 days)
89
+ PERMANENT = "permanent" # Data stored indefinitely
90
+ FOREVER = "forever" # Alias for permanent (for compatibility)
91
+
92
+
93
+ class PrivacyContract(BaseModel):
94
+ """Privacy contract specifying data handling policies."""
95
+ retention: RetentionPolicy = Field(
96
+ ...,
97
+ description="How long the agent stores data"
98
+ )
99
+ storage_location: Optional[str] = Field(
100
+ None,
101
+ description="Geographic location of data storage (e.g., 'us-west')"
102
+ )
103
+ human_review: bool = Field(
104
+ False,
105
+ description="Whether humans may review the data"
106
+ )
107
+ encryption_at_rest: bool = Field(
108
+ True,
109
+ description="Whether data is encrypted at rest"
110
+ )
111
+ encryption_in_transit: bool = Field(
112
+ True,
113
+ description="Whether data is encrypted in transit"
114
+ )
115
+
116
+
117
+ class AgentCapabilities(BaseModel):
118
+ """Capabilities advertised by an agent."""
119
+ idempotency: bool = Field(
120
+ False,
121
+ description="Whether duplicate requests are handled safely"
122
+ )
123
+ reversibility: ReversibilityLevel = Field(
124
+ ReversibilityLevel.NONE,
125
+ description="Level of transaction reversibility support"
126
+ )
127
+ undo_window: Optional[str] = Field(
128
+ None,
129
+ description="Time window for undo operations (e.g., '24h', '7d')"
130
+ )
131
+ sla_latency: Optional[str] = Field(
132
+ None,
133
+ description="Promised response latency (e.g., '2000ms', '5s')"
134
+ )
135
+ rate_limit: Optional[int] = Field(
136
+ None,
137
+ description="Maximum requests per minute"
138
+ )
139
+
140
+
141
+ class CapabilityManifest(BaseModel):
142
+ """
143
+ Capability manifest exchanged during handshake.
144
+ This is the core metadata that agents exchange.
145
+ """
146
+ agent_id: str = Field(
147
+ ...,
148
+ description="Unique identifier for the agent"
149
+ )
150
+ agent_version: Optional[str] = Field(
151
+ None,
152
+ description="Version of the agent"
153
+ )
154
+ trust_level: TrustLevel = Field(
155
+ TrustLevel.STANDARD,
156
+ description="Trust level of the agent"
157
+ )
158
+ capabilities: AgentCapabilities = Field(
159
+ ...,
160
+ description="Capabilities supported by the agent"
161
+ )
162
+ privacy_contract: PrivacyContract = Field(
163
+ ...,
164
+ description="Privacy policies of the agent"
165
+ )
166
+ scopes: List[str] = Field(
167
+ default_factory=list,
168
+ description="RBAC scopes defining agent permissions (e.g., 'repo:read', 'repo:write')"
169
+ )
170
+
171
+ def calculate_trust_score(self) -> int:
172
+ """
173
+ Calculate a trust score (0-10) based on capabilities and privacy.
174
+
175
+ The trust score helps clients make informed decisions about agent reliability.
176
+ Higher scores indicate more trustworthy agents with better security practices.
177
+
178
+ Scoring Criteria:
179
+ ----------------
180
+ Base Score: 5 (neutral)
181
+
182
+ Trust Level Adjustments:
183
+ - VERIFIED_PARTNER: +3 (well-known, vetted partner)
184
+ - TRUSTED: +2 (established trust relationship)
185
+ - STANDARD: 0 (no prior relationship)
186
+ - UNKNOWN: -2 (minimal information)
187
+ - UNTRUSTED: -5 (known issues or red flags)
188
+
189
+ Capability Bonuses:
190
+ - Idempotency support: +1 (safe retry behavior)
191
+ - Reversibility (full or partial): +1 (can undo actions)
192
+
193
+ Privacy Adjustments:
194
+ - Ephemeral retention: +2 (best privacy, data deleted after session)
195
+ - Permanent/forever retention: -2 (worst privacy, data kept indefinitely)
196
+ - No human review: +1 (automated processing only)
197
+
198
+ Score Ranges:
199
+ - 8-10: Highly trustworthy (verified partners with strong privacy)
200
+ - 5-7: Moderately trustworthy (standard agents with decent practices)
201
+ - 3-4: Low trust (some concerns, user should be cautious)
202
+ - 0-2: Very low trust (significant concerns, strong warnings needed)
203
+
204
+ Returns:
205
+ int: Trust score clamped to range [0, 10]
206
+ """
207
+ score = 5 # Start with neutral score
208
+
209
+ # Trust level adjustments
210
+ trust_scores = {
211
+ TrustLevel.VERIFIED_PARTNER: 3,
212
+ TrustLevel.TRUSTED: 2,
213
+ TrustLevel.STANDARD: 0,
214
+ TrustLevel.UNKNOWN: -2,
215
+ TrustLevel.UNTRUSTED: -5
216
+ }
217
+ score += trust_scores.get(self.trust_level, 0)
218
+
219
+ # Capability bonuses
220
+ if self.capabilities.idempotency:
221
+ score += 1
222
+ if self.capabilities.reversibility in [ReversibilityLevel.FULL, ReversibilityLevel.PARTIAL]:
223
+ score += 1
224
+
225
+ # Privacy bonuses
226
+ if self.privacy_contract.retention == RetentionPolicy.EPHEMERAL:
227
+ score += 2
228
+ elif self.privacy_contract.retention in [RetentionPolicy.PERMANENT, RetentionPolicy.FOREVER]:
229
+ score -= 2
230
+
231
+ if not self.privacy_contract.human_review:
232
+ score += 1
233
+
234
+ # Clamp to 0-10 range
235
+ return max(0, min(10, score))
236
+
237
+
238
+ class QuarantineSession(BaseModel):
239
+ """Session information for quarantined/untrusted requests."""
240
+ session_id: str
241
+ trace_id: str
242
+ warning_message: str
243
+ user_override: bool = False
244
+ timestamp: str
245
+ manifest: Optional[CapabilityManifest] = None
246
+
247
+
248
+ class TracingContext(BaseModel):
249
+ """Distributed tracing context."""
250
+ trace_id: str = Field(
251
+ ...,
252
+ description="Unique trace ID for the request"
253
+ )
254
+ parent_trace_id: Optional[str] = Field(
255
+ None,
256
+ description="Parent trace ID if this is part of a chain"
257
+ )
258
+ timestamp: str = Field(
259
+ ...,
260
+ description="ISO 8601 timestamp"
261
+ )
262
+ agent_id: str = Field(
263
+ ...,
264
+ description="ID of the agent processing this request"
265
+ )
266
+
267
+
268
+ class AttestationRecord(BaseModel):
269
+ """
270
+ Attestation record for agent codebase verification.
271
+
272
+ This provides verifiable proof that an agent is running the expected
273
+ codebase and configuration, signed by a trusted Control Plane.
274
+ """
275
+ agent_id: str = Field(
276
+ ...,
277
+ description="Unique identifier for the agent"
278
+ )
279
+ codebase_hash: str = Field(
280
+ ...,
281
+ description="SHA-256 hash of the agent's codebase"
282
+ )
283
+ config_hash: str = Field(
284
+ ...,
285
+ description="SHA-256 hash of the agent's configuration"
286
+ )
287
+ signature: str = Field(
288
+ ...,
289
+ description="Digital signature from Control Plane (base64 encoded)"
290
+ )
291
+ signing_key_id: str = Field(
292
+ ...,
293
+ description="Identifier for the public key used to verify signature"
294
+ )
295
+ timestamp: str = Field(
296
+ ...,
297
+ description="ISO 8601 timestamp when attestation was created"
298
+ )
299
+ expires_at: Optional[str] = Field(
300
+ None,
301
+ description="ISO 8601 timestamp when attestation expires"
302
+ )
303
+
304
+ def is_expired(self, current_time: str) -> bool:
305
+ """
306
+ Check if the attestation has expired.
307
+
308
+ Args:
309
+ current_time: Current time in ISO 8601 format
310
+
311
+ Returns:
312
+ True if expired, False otherwise
313
+ """
314
+ if not self.expires_at:
315
+ return False
316
+ return current_time > self.expires_at
317
+
318
+
319
+ class ReputationEvent(BaseModel):
320
+ """
321
+ Event that affects an agent's reputation score.
322
+
323
+ This tracks individual events that caused reputation changes,
324
+ such as hallucinations detected by cmvk or successful transactions.
325
+ """
326
+ event_id: str = Field(
327
+ ...,
328
+ description="Unique identifier for this event"
329
+ )
330
+ agent_id: str = Field(
331
+ ...,
332
+ description="Agent whose reputation is affected"
333
+ )
334
+ event_type: str = Field(
335
+ ...,
336
+ description="Type of event (e.g., 'hallucination', 'timeout', 'success')"
337
+ )
338
+ severity: str = Field(
339
+ ...,
340
+ description="Severity level: 'critical', 'high', 'medium', 'low'"
341
+ )
342
+ score_delta: float = Field(
343
+ ...,
344
+ description="Change in reputation score (negative for bad events)"
345
+ )
346
+ timestamp: str = Field(
347
+ ...,
348
+ description="ISO 8601 timestamp when event occurred"
349
+ )
350
+ trace_id: Optional[str] = Field(
351
+ None,
352
+ description="Associated trace ID if event was part of a request"
353
+ )
354
+ details: Optional[Dict[str, Any]] = Field(
355
+ None,
356
+ description="Additional context about the event"
357
+ )
358
+ detected_by: Optional[str] = Field(
359
+ None,
360
+ description="Component that detected the event (e.g., 'cmvk', 'iatp')"
361
+ )
362
+
363
+
364
+ class ReputationScore(BaseModel):
365
+ """
366
+ Network-wide reputation score for an agent.
367
+
368
+ This tracks an agent's reputation based on its behavior across
369
+ the network. Reputation can be slashed when misbehavior is detected.
370
+ """
371
+ agent_id: str = Field(
372
+ ...,
373
+ description="Agent identifier"
374
+ )
375
+ score: float = Field(
376
+ 5.0,
377
+ ge=0.0,
378
+ le=10.0,
379
+ description="Current reputation score (0.0 to 10.0)"
380
+ )
381
+ initial_score: float = Field(
382
+ 5.0,
383
+ description="Starting reputation score"
384
+ )
385
+ total_events: int = Field(
386
+ 0,
387
+ description="Total number of reputation events"
388
+ )
389
+ positive_events: int = Field(
390
+ 0,
391
+ description="Number of positive reputation events"
392
+ )
393
+ negative_events: int = Field(
394
+ 0,
395
+ description="Number of negative reputation events"
396
+ )
397
+ last_updated: str = Field(
398
+ ...,
399
+ description="ISO 8601 timestamp of last update"
400
+ )
401
+ recent_events: List[ReputationEvent] = Field(
402
+ default_factory=list,
403
+ description="Recent reputation events (up to 100)"
404
+ )
405
+
406
+ def apply_event(self, event: ReputationEvent) -> None:
407
+ """
408
+ Apply a reputation event to update the score.
409
+
410
+ Args:
411
+ event: The reputation event to apply
412
+ """
413
+ # Update score with clamping
414
+ self.score = max(0.0, min(10.0, self.score + event.score_delta))
415
+
416
+ # Update counters
417
+ self.total_events += 1
418
+ if event.score_delta > 0:
419
+ self.positive_events += 1
420
+ elif event.score_delta < 0:
421
+ self.negative_events += 1
422
+
423
+ # Add to recent events (keep last 100)
424
+ self.recent_events.append(event)
425
+ if len(self.recent_events) > 100:
426
+ self.recent_events = self.recent_events[-100:]
427
+
428
+ # Update timestamp
429
+ self.last_updated = event.timestamp
430
+
431
+ def get_trust_level(self) -> TrustLevel:
432
+ """
433
+ Convert reputation score to trust level.
434
+
435
+ Returns:
436
+ Appropriate TrustLevel based on current score
437
+ """
438
+ if self.score >= 8.0:
439
+ return TrustLevel.VERIFIED_PARTNER
440
+ elif self.score >= 6.0:
441
+ return TrustLevel.TRUSTED
442
+ elif self.score >= 4.0:
443
+ return TrustLevel.STANDARD
444
+ elif self.score >= 2.0:
445
+ return TrustLevel.UNKNOWN
446
+ else:
447
+ return TrustLevel.UNTRUSTED