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
emk/store.py ADDED
@@ -0,0 +1,281 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ # Public Preview — basic context/memory management
4
+ """
5
+ Store — Abstract interfaces and mutable file-based implementation for episodic memory.
6
+ """
7
+
8
+ from abc import ABC, abstractmethod
9
+ from typing import List, Optional, Dict, Any
10
+ from pathlib import Path
11
+ import json
12
+ import numpy as np
13
+
14
+ from emk.schema import Episode
15
+
16
+
17
+ class VectorStoreAdapter(ABC):
18
+ """Abstract interface for vector store implementations."""
19
+
20
+ @abstractmethod
21
+ def store(self, episode: Episode, embedding: Optional[np.ndarray] = None) -> str:
22
+ """Store an episode. Returns the episode_id."""
23
+ pass
24
+
25
+ @abstractmethod
26
+ def retrieve(
27
+ self,
28
+ query_embedding: Optional[np.ndarray] = None,
29
+ filters: Optional[Dict[str, Any]] = None,
30
+ limit: int = 10,
31
+ ) -> List[Episode]:
32
+ """Retrieve episodes, optionally filtered."""
33
+ pass
34
+
35
+ @abstractmethod
36
+ def get_by_id(self, episode_id: str) -> Optional[Episode]:
37
+ """Retrieve a specific episode by ID."""
38
+ pass
39
+
40
+ def update(self, episode_id: str, episode: Episode) -> bool:
41
+ """Update an existing episode. Returns True if found and updated."""
42
+ raise NotImplementedError
43
+
44
+ def delete(self, episode_id: str) -> bool:
45
+ """Delete an episode by ID. Returns True if found and deleted."""
46
+ raise NotImplementedError
47
+
48
+ def retrieve_failures(
49
+ self,
50
+ query_embedding: Optional[np.ndarray] = None,
51
+ filters: Optional[Dict[str, Any]] = None,
52
+ limit: int = 10,
53
+ ) -> List[Episode]:
54
+ """Retrieve episodes marked as failures."""
55
+ failure_filters = filters.copy() if filters else {}
56
+ failure_filters["is_failure"] = True
57
+ return self.retrieve(query_embedding=query_embedding, filters=failure_filters, limit=limit)
58
+
59
+ def retrieve_successes(
60
+ self,
61
+ query_embedding: Optional[np.ndarray] = None,
62
+ filters: Optional[Dict[str, Any]] = None,
63
+ limit: int = 10,
64
+ ) -> List[Episode]:
65
+ """Retrieve episodes that are NOT failures."""
66
+ batch_size = min(limit * 3, 1000)
67
+ all_episodes = self.retrieve(query_embedding=query_embedding, filters=filters, limit=batch_size)
68
+ return [ep for ep in all_episodes if not ep.is_failure()][:limit]
69
+
70
+ def retrieve_with_anti_patterns(
71
+ self,
72
+ query_embedding: Optional[np.ndarray] = None,
73
+ filters: Optional[Dict[str, Any]] = None,
74
+ limit: int = 10,
75
+ include_failures: bool = True,
76
+ ) -> Dict[str, List[Episode]]:
77
+ """Retrieve both successes and failures."""
78
+ result: Dict[str, List[Episode]] = {"successes": [], "failures": []}
79
+ result["successes"] = self.retrieve_successes(query_embedding=query_embedding, filters=filters, limit=limit)
80
+ if include_failures:
81
+ result["failures"] = self.retrieve_failures(query_embedding=query_embedding, filters=filters, limit=limit)
82
+ return result
83
+
84
+
85
+ class FileAdapter(VectorStoreAdapter):
86
+ """
87
+ Mutable JSONL-based file storage adapter.
88
+
89
+ Supports store, retrieve, get_by_id, update and delete.
90
+ """
91
+
92
+ def __init__(self, filepath: str = "episodes.jsonl"):
93
+ self.filepath = Path(filepath)
94
+ self.filepath.parent.mkdir(parents=True, exist_ok=True)
95
+ if not self.filepath.exists():
96
+ self.filepath.touch()
97
+
98
+ # -- helpers -----------------------------------------------------------
99
+
100
+ def _read_all(self) -> List[Episode]:
101
+ episodes: List[Episode] = []
102
+ if not self.filepath.exists() or self.filepath.stat().st_size == 0:
103
+ return episodes
104
+ with open(self.filepath, "r") as f:
105
+ for line in f:
106
+ line = line.strip()
107
+ if not line:
108
+ continue
109
+ try:
110
+ episodes.append(Episode.from_json(line))
111
+ except Exception:
112
+ continue
113
+ return episodes
114
+
115
+ def _write_all(self, episodes: List[Episode]) -> None:
116
+ with open(self.filepath, "w") as f:
117
+ for ep in episodes:
118
+ f.write(ep.to_json() + "\n")
119
+
120
+ # -- core API ----------------------------------------------------------
121
+
122
+ def store(self, episode: Episode, embedding: Optional[np.ndarray] = None) -> str:
123
+ with open(self.filepath, "a") as f:
124
+ f.write(episode.to_json() + "\n")
125
+ return episode.episode_id
126
+
127
+ def retrieve(
128
+ self,
129
+ query_embedding: Optional[np.ndarray] = None,
130
+ filters: Optional[Dict[str, Any]] = None,
131
+ limit: int = 10,
132
+ ) -> List[Episode]:
133
+ episodes = self._read_all()
134
+ if filters:
135
+ episodes = [
136
+ ep for ep in episodes
137
+ if all(ep.metadata.get(k) == v for k, v in filters.items())
138
+ ]
139
+ episodes.reverse()
140
+ return episodes[:limit]
141
+
142
+ def get_by_id(self, episode_id: str) -> Optional[Episode]:
143
+ for ep in self._read_all():
144
+ if ep.episode_id == episode_id:
145
+ return ep
146
+ return None
147
+
148
+ def update(self, episode_id: str, episode: Episode) -> bool:
149
+ """Replace the episode with the given ID."""
150
+ episodes = self._read_all()
151
+ for i, ep in enumerate(episodes):
152
+ if ep.episode_id == episode_id:
153
+ episodes[i] = episode
154
+ self._write_all(episodes)
155
+ return True
156
+ return False
157
+
158
+ def delete(self, episode_id: str) -> bool:
159
+ """Remove the episode with the given ID."""
160
+ episodes = self._read_all()
161
+ new_episodes = [ep for ep in episodes if ep.episode_id != episode_id]
162
+ if len(new_episodes) == len(episodes):
163
+ return False
164
+ self._write_all(new_episodes)
165
+ return True
166
+
167
+
168
+ try:
169
+ import chromadb
170
+ from chromadb.config import Settings
171
+
172
+ class ChromaDBAdapter(VectorStoreAdapter):
173
+ """
174
+ ChromaDB-based vector storage adapter.
175
+
176
+ Uses ChromaDB for vector similarity search and efficient retrieval
177
+ of episodes based on embeddings.
178
+ """
179
+
180
+ def __init__(
181
+ self,
182
+ collection_name: str = "episodes",
183
+ persist_directory: str = "./chroma_data",
184
+ ):
185
+ self.client = chromadb.Client(Settings(
186
+ persist_directory=persist_directory,
187
+ anonymized_telemetry=False,
188
+ ))
189
+ self.collection = self.client.get_or_create_collection(
190
+ name=collection_name,
191
+ metadata={"description": "Episodic memory storage"},
192
+ )
193
+
194
+ def store(self, episode: Episode, embedding: Optional[np.ndarray] = None) -> str:
195
+ if embedding is None:
196
+ text = f"{episode.goal} {episode.action} {episode.result} {episode.reflection}"
197
+ else:
198
+ text = None
199
+
200
+ self.collection.add(
201
+ ids=[episode.episode_id],
202
+ documents=[text] if text else None,
203
+ embeddings=[embedding.tolist()] if embedding is not None else None,
204
+ metadatas=[{
205
+ "goal": episode.goal,
206
+ "action": episode.action,
207
+ "result": episode.result,
208
+ "reflection": episode.reflection,
209
+ "timestamp": episode.timestamp.isoformat(),
210
+ **episode.metadata,
211
+ }],
212
+ )
213
+ return episode.episode_id
214
+
215
+ def retrieve(
216
+ self,
217
+ query_embedding: Optional[np.ndarray] = None,
218
+ filters: Optional[Dict[str, Any]] = None,
219
+ limit: int = 10,
220
+ ) -> List[Episode]:
221
+ if query_embedding is not None:
222
+ results = self.collection.query(
223
+ query_embeddings=[query_embedding.tolist()],
224
+ n_results=limit,
225
+ where=filters,
226
+ )
227
+ else:
228
+ results = self.collection.get(limit=limit, where=filters)
229
+
230
+ episodes = []
231
+ if 'metadatas' in results and results['metadatas']:
232
+ if isinstance(results['metadatas'][0], list) if results['metadatas'] else False:
233
+ metadatas = results['metadatas'][0]
234
+ else:
235
+ metadatas = results['metadatas']
236
+ else:
237
+ metadatas = []
238
+
239
+ for metadata in metadatas:
240
+ episode_metadata = {
241
+ k: v for k, v in metadata.items()
242
+ if k not in ('goal', 'action', 'result', 'reflection', 'timestamp')
243
+ }
244
+ try:
245
+ episode = Episode(
246
+ goal=metadata.get("goal", ""),
247
+ action=metadata.get("action", ""),
248
+ result=metadata.get("result", ""),
249
+ reflection=metadata.get("reflection", ""),
250
+ timestamp=metadata.get("timestamp", None),
251
+ metadata=episode_metadata,
252
+ )
253
+ episodes.append(episode)
254
+ except Exception:
255
+ continue
256
+ return episodes
257
+
258
+ def get_by_id(self, episode_id: str) -> Optional[Episode]:
259
+ try:
260
+ results = self.collection.get(ids=[episode_id])
261
+ if not results['ids']:
262
+ return None
263
+ metadata = results['metadatas'][0]
264
+ episode_metadata = {
265
+ k: v for k, v in metadata.items()
266
+ if k not in ('goal', 'action', 'result', 'reflection', 'timestamp')
267
+ }
268
+ return Episode(
269
+ goal=metadata.get("goal", ""),
270
+ action=metadata.get("action", ""),
271
+ result=metadata.get("result", ""),
272
+ reflection=metadata.get("reflection", ""),
273
+ timestamp=metadata.get("timestamp", None),
274
+ metadata=episode_metadata,
275
+ )
276
+ except Exception:
277
+ return None
278
+
279
+ except ImportError:
280
+ # ChromaDB not installed — adapter will not be available
281
+ pass
iatp/__init__.py ADDED
@@ -0,0 +1,166 @@
1
+ # Copyright (c) Microsoft Corporation.
2
+ # Licensed under the MIT License.
3
+ """
4
+ Inter-Agent Trust Protocol (IATP).
5
+
6
+ A sidecar-based service mesh for preventing cascading hallucinations
7
+ in autonomous agent networks. IATP provides the missing "governance layer"
8
+ for multi-agent LLM systems.
9
+
10
+ Core Features:
11
+ - **Discovery**: Capability manifest exchange via `/.well-known/agent-manifest`
12
+ - **Trust**: Dynamic trust scoring and security validation
13
+ - **Reversibility**: Enforced transaction rollback requirements
14
+ - **Privacy**: Data retention and handling policy enforcement
15
+ - **Telemetry**: Distributed tracing via Flight Recorder
16
+
17
+ Quick Start:
18
+ >>> from iatp import CapabilityManifest, TrustLevel, SidecarProxy
19
+ >>> manifest = CapabilityManifest(
20
+ ... agent_id="my-agent",
21
+ ... trust_level=TrustLevel.TRUSTED,
22
+ ... capabilities=AgentCapabilities(reversibility=ReversibilityLevel.FULL),
23
+ ... privacy_contract=PrivacyContract(retention=RetentionPolicy.EPHEMERAL),
24
+ ... )
25
+ >>> print(f"Trust Score: {manifest.calculate_trust_score()}/10")
26
+
27
+ CLI Usage:
28
+ .. code-block:: bash
29
+
30
+ # Verify a manifest
31
+ iatp verify manifest.json
32
+
33
+ # Run the sidecar
34
+ uvicorn iatp.main:app --host 0.0.0.0 --port 8081
35
+
36
+ Docker:
37
+ .. code-block:: bash
38
+
39
+ docker run -p 8081:8081 -e IATP_AGENT_URL=http://my-agent:8000 iatp-sidecar
40
+
41
+ For more information, see:
42
+ - Documentation: https://github.com/microsoft/agent-governance-toolkit
43
+ - Paper: paper/whitepaper.md
44
+
45
+ Example:
46
+ Basic trust score calculation::
47
+
48
+ from iatp import (
49
+ CapabilityManifest,
50
+ AgentCapabilities,
51
+ PrivacyContract,
52
+ TrustLevel,
53
+ ReversibilityLevel,
54
+ RetentionPolicy,
55
+ )
56
+
57
+ manifest = CapabilityManifest(
58
+ agent_id="secure-bank-agent",
59
+ trust_level=TrustLevel.VERIFIED_PARTNER,
60
+ capabilities=AgentCapabilities(
61
+ reversibility=ReversibilityLevel.FULL,
62
+ idempotency=True,
63
+ ),
64
+ privacy_contract=PrivacyContract(
65
+ retention=RetentionPolicy.EPHEMERAL,
66
+ ),
67
+ )
68
+
69
+ score = manifest.calculate_trust_score()
70
+ print(f"Trust Score: {score}/10") # Output: Trust Score: 10/10
71
+ """
72
+
73
+ from __future__ import annotations
74
+
75
+ __version__ = "3.1.0"
76
+ __author__ = "Microsoft Corporation"
77
+ __license__ = "MIT"
78
+
79
+ # Core Models
80
+ # Attestation & Reputation
81
+ from iatp.attestation import AttestationValidator, ReputationManager
82
+ from iatp.models import (
83
+ AgentCapabilities,
84
+ AttestationRecord,
85
+ CapabilityManifest,
86
+ PrivacyContract,
87
+ QuarantineSession,
88
+ ReputationEvent,
89
+ ReputationScore,
90
+ RetentionPolicy,
91
+ ReversibilityLevel,
92
+ TracingContext,
93
+ TrustLevel,
94
+ )
95
+
96
+ # Engines
97
+ from iatp.policy_engine import IATPPolicyEngine
98
+ from iatp.recovery import IATPRecoveryEngine
99
+
100
+ # Security & Privacy
101
+ from iatp.security import PrivacyScrubber, SecurityValidator
102
+
103
+ # Sidecar Components
104
+ from iatp.sidecar import SidecarProxy, create_sidecar
105
+
106
+ # Telemetry & Tracing
107
+ from iatp.telemetry import FlightRecorder, TraceIDGenerator
108
+
109
+ # IPC Pipes - Typed inter-agent communication (v0.4.0)
110
+ from iatp.ipc_pipes import (
111
+ TypedPipe,
112
+ PipeMessage,
113
+ PipeConfig,
114
+ PipeState,
115
+ PolicyCheckPipe,
116
+ Pipeline,
117
+ AgentPipelineStage,
118
+ create_pipeline,
119
+ pipe_agents,
120
+ )
121
+
122
+ # Public API exports - controls what is visible via `from iatp import *`
123
+ __all__ = [
124
+ # Package metadata
125
+ "__version__",
126
+ "__author__",
127
+ "__license__",
128
+ # Models - Core data structures for capability manifests
129
+ "CapabilityManifest",
130
+ "AgentCapabilities",
131
+ "PrivacyContract",
132
+ "TrustLevel",
133
+ "ReversibilityLevel",
134
+ "RetentionPolicy",
135
+ "QuarantineSession",
136
+ "TracingContext",
137
+ "AttestationRecord",
138
+ "ReputationScore",
139
+ "ReputationEvent",
140
+ # Sidecar - The proxy that wraps agents
141
+ "SidecarProxy",
142
+ "create_sidecar",
143
+ # Security - Validation and privacy enforcement
144
+ "SecurityValidator",
145
+ "PrivacyScrubber",
146
+ # Attestation & Reputation
147
+ "AttestationValidator",
148
+ "ReputationManager",
149
+ # Telemetry - Distributed tracing and audit logging
150
+ "FlightRecorder",
151
+ "TraceIDGenerator",
152
+ # Policy Engine - Rule-based policy evaluation
153
+ "IATPPolicyEngine",
154
+ # Recovery Engine - Compensating transaction support (scak integration)
155
+ "IATPRecoveryEngine",
156
+ # IPC Pipes - Typed inter-agent communication (v0.4.0)
157
+ "TypedPipe",
158
+ "PipeMessage",
159
+ "PipeConfig",
160
+ "PipeState",
161
+ "PolicyCheckPipe",
162
+ "Pipeline",
163
+ "AgentPipelineStage",
164
+ "create_pipeline",
165
+ "pipe_agents",
166
+ ]