agent-os-kernel 1.1.0__py3-none-any.whl → 1.3.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 (1051) hide show
  1. agent_os/__init__.py +66 -4
  2. agent_os/agents_compat.py +286 -0
  3. agent_os/base_agent.py +308 -0
  4. agent_os/cli.py +1079 -19
  5. agent_os/integrations/__init__.py +37 -2
  6. agent_os/integrations/openai_adapter.py +502 -0
  7. agent_os/integrations/semantic_kernel_adapter.py +569 -0
  8. agent_os/stateless.py +349 -0
  9. agent_os_kernel-1.3.0.dist-info/METADATA +676 -0
  10. agent_os_kernel-1.3.0.dist-info/RECORD +1053 -0
  11. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/entry_points.txt +0 -1
  12. modules/amb/.github/workflows/ci.yml +102 -0
  13. modules/amb/.github/workflows/publish.yml +146 -0
  14. modules/amb/.gitignore +134 -0
  15. modules/amb/CHANGELOG.md +118 -0
  16. modules/amb/CONTRIBUTING.md +141 -0
  17. modules/amb/LICENSE +21 -0
  18. modules/amb/README.md +188 -0
  19. modules/amb/amb_core/__init__.py +175 -0
  20. modules/amb/amb_core/adapters/__init__.py +55 -0
  21. modules/amb/amb_core/adapters/aws_sqs_broker.py +374 -0
  22. modules/amb/amb_core/adapters/azure_servicebus_broker.py +338 -0
  23. modules/amb/amb_core/adapters/kafka_broker.py +258 -0
  24. modules/amb/amb_core/adapters/nats_broker.py +283 -0
  25. modules/amb/amb_core/adapters/rabbitmq_broker.py +233 -0
  26. modules/amb/amb_core/adapters/redis_broker.py +260 -0
  27. modules/amb/amb_core/broker.py +143 -0
  28. modules/amb/amb_core/bus.py +479 -0
  29. modules/amb/amb_core/cloudevents.py +507 -0
  30. modules/amb/amb_core/dlq.py +343 -0
  31. modules/amb/amb_core/hf_utils.py +534 -0
  32. modules/amb/amb_core/memory_broker.py +408 -0
  33. modules/amb/amb_core/models.py +139 -0
  34. modules/amb/amb_core/persistence.py +527 -0
  35. modules/amb/amb_core/schema.py +292 -0
  36. modules/amb/amb_core/tracing.py +356 -0
  37. modules/amb/examples/advanced_features.py +223 -0
  38. modules/amb/examples/backpressure_demo.py +225 -0
  39. modules/amb/examples/basic_usage.py +117 -0
  40. modules/amb/examples/tracing_demo.py +104 -0
  41. modules/amb/experiments/README.md +52 -0
  42. modules/amb/experiments/reproduce_results.py +467 -0
  43. modules/amb/experiments/results.json +324 -0
  44. modules/amb/paper/README.md +40 -0
  45. modules/amb/paper/paper.tex +365 -0
  46. modules/amb/paper/whitepaper.md +377 -0
  47. modules/amb/pyproject.toml +117 -0
  48. modules/amb/tests/__init__.py +1 -0
  49. modules/amb/tests/test_backpressure_priority.py +280 -0
  50. modules/amb/tests/test_bus.py +198 -0
  51. modules/amb/tests/test_cloudevents.py +443 -0
  52. modules/amb/tests/test_features.py +531 -0
  53. modules/amb/tests/test_models.py +74 -0
  54. modules/amb/tests/test_tracing.py +254 -0
  55. modules/atr/.github/workflows/ci.yml +101 -0
  56. modules/atr/.github/workflows/publish.yml +140 -0
  57. modules/atr/.gitignore +134 -0
  58. modules/atr/.pre-commit-config.yaml +37 -0
  59. modules/atr/CHANGELOG.md +39 -0
  60. modules/atr/CONTRIBUTING.md +96 -0
  61. modules/atr/IMPLEMENTATION_SUMMARY.md +143 -0
  62. modules/atr/README.md +180 -0
  63. modules/atr/atr/__init__.py +638 -0
  64. modules/atr/atr/access.py +346 -0
  65. modules/atr/atr/composition.py +643 -0
  66. modules/atr/atr/decorator.py +355 -0
  67. modules/atr/atr/executor.py +382 -0
  68. modules/atr/atr/health.py +555 -0
  69. modules/atr/atr/hf_utils.py +447 -0
  70. modules/atr/atr/injection.py +420 -0
  71. modules/atr/atr/metrics.py +438 -0
  72. modules/atr/atr/policies.py +401 -0
  73. modules/atr/atr/py.typed +2 -0
  74. modules/atr/atr/registry.py +450 -0
  75. modules/atr/atr/schema.py +478 -0
  76. modules/atr/atr/tools/safe/__init__.py +73 -0
  77. modules/atr/atr/tools/safe/calculator.py +380 -0
  78. modules/atr/atr/tools/safe/datetime_tool.py +441 -0
  79. modules/atr/atr/tools/safe/file_reader.py +400 -0
  80. modules/atr/atr/tools/safe/http_client.py +314 -0
  81. modules/atr/atr/tools/safe/json_parser.py +372 -0
  82. modules/atr/atr/tools/safe/text_tool.py +526 -0
  83. modules/atr/atr/tools/safe/toolkit.py +173 -0
  84. modules/atr/docs/PYPI_SETUP.md +113 -0
  85. modules/atr/examples/README.md +27 -0
  86. modules/atr/examples/demo.py +144 -0
  87. modules/atr/examples/sandbox_demo.py +218 -0
  88. modules/atr/experiments/README.md +69 -0
  89. modules/atr/experiments/reproduce_results.py +509 -0
  90. modules/atr/experiments/results/.gitkeep +0 -0
  91. modules/atr/experiments/results/results_20260123_140334.json +71 -0
  92. modules/atr/paper/README.md +36 -0
  93. modules/atr/paper/figures/.gitkeep +0 -0
  94. modules/atr/paper/references.bib +84 -0
  95. modules/atr/paper/structure.tex +293 -0
  96. modules/atr/paper/whitepaper.md +234 -0
  97. modules/atr/pyproject.toml +148 -0
  98. modules/atr/requirements.txt +1 -0
  99. modules/atr/setup.py +30 -0
  100. modules/atr/tests/__init__.py +1 -0
  101. modules/atr/tests/test_decorator.py +317 -0
  102. modules/atr/tests/test_executor.py +245 -0
  103. modules/atr/tests/test_integration_executor.py +184 -0
  104. modules/atr/tests/test_registry.py +312 -0
  105. modules/atr/tests/test_schema.py +182 -0
  106. modules/atr/tests/test_v2_features.py +708 -0
  107. modules/caas/.dockerignore +63 -0
  108. modules/caas/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  109. modules/caas/.github/ISSUE_TEMPLATE/custom.md +10 -0
  110. modules/caas/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  111. modules/caas/.github/workflows/ci.yml +100 -0
  112. modules/caas/.github/workflows/lint.yml +39 -0
  113. modules/caas/.github/workflows/publish-pypi.yml +124 -0
  114. modules/caas/.gitignore +73 -0
  115. modules/caas/.pre-commit-config.yaml +33 -0
  116. modules/caas/CHANGELOG.md +58 -0
  117. modules/caas/CONTRIBUTING.md +346 -0
  118. modules/caas/Dockerfile +41 -0
  119. modules/caas/LICENSE +21 -0
  120. modules/caas/MANIFEST.in +11 -0
  121. modules/caas/README.md +158 -0
  122. modules/caas/benchmarks/README.md +255 -0
  123. modules/caas/benchmarks/create_hf_dataset.py +502 -0
  124. modules/caas/benchmarks/data/sample_corpus/README.md +86 -0
  125. modules/caas/benchmarks/data/sample_corpus/auth_module.py +211 -0
  126. modules/caas/benchmarks/data/sample_corpus/contribution_guide.md +185 -0
  127. modules/caas/benchmarks/data/sample_corpus/remote_work_policy.html +57 -0
  128. modules/caas/benchmarks/hf_dataset/README.md +214 -0
  129. modules/caas/benchmarks/hf_dataset/caas_benchmark_corpus.py +73 -0
  130. modules/caas/benchmarks/hf_dataset/corpus_preview.json +193 -0
  131. modules/caas/benchmarks/results/README.md +66 -0
  132. modules/caas/benchmarks/results/evaluation_2026-01-20.json +121 -0
  133. modules/caas/benchmarks/run_evaluation.py +561 -0
  134. modules/caas/benchmarks/statistical_tests.py +289 -0
  135. modules/caas/benchmarks/verify_sample_corpus.py +83 -0
  136. modules/caas/docker-compose.yml +38 -0
  137. modules/caas/docs/CONTEXT_TRIAD.md +462 -0
  138. modules/caas/docs/CONTRIBUTING.md +346 -0
  139. modules/caas/docs/ETHICS_AND_LIMITATIONS.md +336 -0
  140. modules/caas/docs/HEURISTIC_ROUTER.md +442 -0
  141. modules/caas/docs/IMPLEMENTATION_SUMMARY.md +363 -0
  142. modules/caas/docs/IMPLEMENTATION_SUMMARY_CONTEXT_TRIAD.md +277 -0
  143. modules/caas/docs/IMPLEMENTATION_SUMMARY_HEURISTIC_ROUTER.md +231 -0
  144. modules/caas/docs/IMPLEMENTATION_SUMMARY_METADATA_INJECTION.md +258 -0
  145. modules/caas/docs/IMPLEMENTATION_SUMMARY_PRAGMATIC_TRUTH.md +212 -0
  146. modules/caas/docs/IMPLEMENTATION_SUMMARY_TRUST_GATEWAY.md +319 -0
  147. modules/caas/docs/LAYER_1_PRIMITIVE.md +202 -0
  148. modules/caas/docs/METADATA_INJECTION.md +404 -0
  149. modules/caas/docs/PRAGMATIC_TRUTH.md +431 -0
  150. modules/caas/docs/RELATED_WORK.md +312 -0
  151. modules/caas/docs/RELEASE_CHECKLIST.md +219 -0
  152. modules/caas/docs/RELEASE_GUIDE.md +285 -0
  153. modules/caas/docs/REPRODUCIBILITY.md +386 -0
  154. modules/caas/docs/SLIDING_WINDOW.md +387 -0
  155. modules/caas/docs/STRUCTURE_AWARE_INDEXING.md +158 -0
  156. modules/caas/docs/TESTING.md +259 -0
  157. modules/caas/docs/THREAT_MODEL.md +247 -0
  158. modules/caas/docs/TRUST_GATEWAY.md +575 -0
  159. modules/caas/docs/VFS.md +298 -0
  160. modules/caas/examples/agents/enterprise_security_agent.py +414 -0
  161. modules/caas/examples/agents/intelligent_document_analyzer.py +380 -0
  162. modules/caas/examples/demos/demo.py +309 -0
  163. modules/caas/examples/demos/demo_context_triad.py +225 -0
  164. modules/caas/examples/demos/demo_conversation_manager.py +285 -0
  165. modules/caas/examples/demos/demo_heuristic_router.py +133 -0
  166. modules/caas/examples/demos/demo_metadata_injection.py +198 -0
  167. modules/caas/examples/demos/demo_pragmatic_truth.py +303 -0
  168. modules/caas/examples/demos/demo_structure_aware.py +140 -0
  169. modules/caas/examples/demos/demo_time_decay.py +247 -0
  170. modules/caas/examples/demos/demo_trust_gateway.py +383 -0
  171. modules/caas/examples/multi_agent/README.md +159 -0
  172. modules/caas/examples/multi_agent/research_team.py +369 -0
  173. modules/caas/examples/multi_agent/vfs_collaboration.py +393 -0
  174. modules/caas/examples/usage/auth_module.py +142 -0
  175. modules/caas/examples/usage/usage_example.py +173 -0
  176. modules/caas/experiments/README.md +42 -0
  177. modules/caas/experiments/reproduce_results.py +462 -0
  178. modules/caas/paper/ARXIV_METADATA.md +145 -0
  179. modules/caas/paper/ARXIV_README.md +47 -0
  180. modules/caas/paper/CHECKLIST.md +103 -0
  181. modules/caas/paper/GITHUB_RELEASE_NOTES.md +105 -0
  182. modules/caas/paper/README.md +71 -0
  183. modules/caas/paper/abstract.md +24 -0
  184. modules/caas/paper/arxiv_submission.tar +0 -0
  185. modules/caas/paper/arxiv_submission.zip +0 -0
  186. modules/caas/paper/build_pdf.py +355 -0
  187. modules/caas/paper/experiments.md +149 -0
  188. modules/caas/paper/figures/.gitkeep +0 -0
  189. modules/caas/paper/figures/README.md +237 -0
  190. modules/caas/paper/figures/fig1_system_architecture.png +0 -0
  191. modules/caas/paper/figures/fig1_system_architecture.svg +198 -0
  192. modules/caas/paper/figures/fig2_context_triad.png +0 -0
  193. modules/caas/paper/figures/fig2_context_triad.svg +105 -0
  194. modules/caas/paper/figures/fig3_ablation_results.png +0 -0
  195. modules/caas/paper/figures/fig3_ablation_results.svg +113 -0
  196. modules/caas/paper/figures/fig4_routing_latency.png +0 -0
  197. modules/caas/paper/figures/fig4_routing_latency.svg +97 -0
  198. modules/caas/paper/intro.md +103 -0
  199. modules/caas/paper/latex/figures/fig1_system_architecture.png +0 -0
  200. modules/caas/paper/latex/figures/fig2_context_triad.png +0 -0
  201. modules/caas/paper/latex/figures/fig3_ablation_results.png +0 -0
  202. modules/caas/paper/latex/figures/fig4_routing_latency.png +0 -0
  203. modules/caas/paper/latex/main.tex +468 -0
  204. modules/caas/paper/latex/references.bib +140 -0
  205. modules/caas/paper/method.md +350 -0
  206. modules/caas/paper/outline.md +123 -0
  207. modules/caas/paper/related_work.md +101 -0
  208. modules/caas/paper/tables/.gitkeep +0 -0
  209. modules/caas/paper/tables/results_tables.md +50 -0
  210. modules/caas/pyproject.toml +172 -0
  211. modules/caas/requirements.txt +11 -0
  212. modules/caas/src/caas/__init__.py +232 -0
  213. modules/caas/src/caas/api/__init__.py +7 -0
  214. modules/caas/src/caas/api/server.py +1326 -0
  215. modules/caas/src/caas/caching.py +832 -0
  216. modules/caas/src/caas/cli.py +208 -0
  217. modules/caas/src/caas/conversation.py +221 -0
  218. modules/caas/src/caas/decay.py +118 -0
  219. modules/caas/src/caas/detection/__init__.py +7 -0
  220. modules/caas/src/caas/detection/detector.py +236 -0
  221. modules/caas/src/caas/enrichment.py +127 -0
  222. modules/caas/src/caas/gateway/__init__.py +24 -0
  223. modules/caas/src/caas/gateway/trust_gateway.py +471 -0
  224. modules/caas/src/caas/hf_utils.py +477 -0
  225. modules/caas/src/caas/ingestion/__init__.py +21 -0
  226. modules/caas/src/caas/ingestion/processors.py +251 -0
  227. modules/caas/src/caas/ingestion/structure_parser.py +185 -0
  228. modules/caas/src/caas/models.py +354 -0
  229. modules/caas/src/caas/pragmatic_truth.py +441 -0
  230. modules/caas/src/caas/routing/__init__.py +8 -0
  231. modules/caas/src/caas/routing/heuristic_router.py +242 -0
  232. modules/caas/src/caas/storage/__init__.py +7 -0
  233. modules/caas/src/caas/storage/store.py +450 -0
  234. modules/caas/src/caas/triad.py +472 -0
  235. modules/caas/src/caas/tuning/__init__.py +7 -0
  236. modules/caas/src/caas/tuning/tuner.py +322 -0
  237. modules/caas/src/caas/vfs/__init__.py +12 -0
  238. modules/caas/src/caas/vfs/filesystem.py +450 -0
  239. modules/caas/tests/__init__.py +3 -0
  240. modules/caas/tests/conftest.py +8 -0
  241. modules/caas/tests/test_caching.py +628 -0
  242. modules/caas/tests/test_context_triad.py +385 -0
  243. modules/caas/tests/test_conversation_manager.py +289 -0
  244. modules/caas/tests/test_functionality.py +215 -0
  245. modules/caas/tests/test_heuristic_router.py +370 -0
  246. modules/caas/tests/test_metadata_injection.py +328 -0
  247. modules/caas/tests/test_pragmatic_truth.py +322 -0
  248. modules/caas/tests/test_structure_aware_indexing.py +283 -0
  249. modules/caas/tests/test_time_decay.py +268 -0
  250. modules/caas/tests/test_trust_gateway.py +445 -0
  251. modules/caas/tests/test_vfs.py +298 -0
  252. modules/cmvk/.github/FUNDING.yml +9 -0
  253. modules/cmvk/.github/dependabot.yml +54 -0
  254. modules/cmvk/.github/workflows/ci.yml +205 -0
  255. modules/cmvk/.github/workflows/publish.yml +143 -0
  256. modules/cmvk/.gitignore +147 -0
  257. modules/cmvk/.pre-commit-config.yaml +58 -0
  258. modules/cmvk/CHANGELOG.md +146 -0
  259. modules/cmvk/CITATION.cff +48 -0
  260. modules/cmvk/CONTRIBUTING.md +229 -0
  261. modules/cmvk/Dockerfile +87 -0
  262. modules/cmvk/HF_MODEL_CARD.md +185 -0
  263. modules/cmvk/LICENSE +21 -0
  264. modules/cmvk/README.md +149 -0
  265. modules/cmvk/SECURITY.md +114 -0
  266. modules/cmvk/config/prompts/generator_v1.txt +23 -0
  267. modules/cmvk/config/prompts/verifier_hostile.txt +32 -0
  268. modules/cmvk/config/settings.yaml +40 -0
  269. modules/cmvk/coverage_html/.gitignore +2 -0
  270. modules/cmvk/coverage_html/class_index.html +658 -0
  271. modules/cmvk/coverage_html/coverage_html_cb_188fc9a4.js +735 -0
  272. modules/cmvk/coverage_html/favicon_32_cb_c827f16f.png +0 -0
  273. modules/cmvk/coverage_html/function_index.html +1978 -0
  274. modules/cmvk/coverage_html/index.html +255 -0
  275. modules/cmvk/coverage_html/keybd_closed_cb_900cfef5.png +0 -0
  276. modules/cmvk/coverage_html/status.json +1 -0
  277. modules/cmvk/coverage_html/style_cb_5c747636.css +389 -0
  278. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38___init___py.html +315 -0
  279. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_audit_py.html +499 -0
  280. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_benchmarks_py.html +575 -0
  281. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_constitutional_py.html +1001 -0
  282. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_hf_utils_py.html +398 -0
  283. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_metrics_py.html +570 -0
  284. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_profiles_py.html +397 -0
  285. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_types_py.html +109 -0
  286. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_verification_py.html +1053 -0
  287. modules/cmvk/docs/DIAGRAMS.md +325 -0
  288. modules/cmvk/docs/architecture.md +345 -0
  289. modules/cmvk/docs/features.md +308 -0
  290. modules/cmvk/docs/getting_started.md +279 -0
  291. modules/cmvk/docs/innovation_layer.md +377 -0
  292. modules/cmvk/docs/safety.md +281 -0
  293. modules/cmvk/docs/traceability.md +150 -0
  294. modules/cmvk/examples/basic_example.py +62 -0
  295. modules/cmvk/examples/demo_complete_pipeline.py +209 -0
  296. modules/cmvk/examples/demo_innovation_layer.py +197 -0
  297. modules/cmvk/examples/example.py +112 -0
  298. modules/cmvk/examples/model_diversity_comparison.py +110 -0
  299. modules/cmvk/examples/real_api_integration.py +121 -0
  300. modules/cmvk/examples/test_full_pipeline.py +303 -0
  301. modules/cmvk/experiments/FEATURE_2_LATERAL_THINKING.md +187 -0
  302. modules/cmvk/experiments/README.md +216 -0
  303. modules/cmvk/experiments/ablation_runner.py +666 -0
  304. modules/cmvk/experiments/baseline_runner.py +158 -0
  305. modules/cmvk/experiments/blind_spot_benchmark.py +364 -0
  306. modules/cmvk/experiments/datasets/README.md +85 -0
  307. modules/cmvk/experiments/datasets/humaneval_50.json +352 -0
  308. modules/cmvk/experiments/datasets/humaneval_full.json +1150 -0
  309. modules/cmvk/experiments/datasets/humaneval_sample.json +32 -0
  310. modules/cmvk/experiments/datasets/sabotage.json +262 -0
  311. modules/cmvk/experiments/datasets/sample.json +40 -0
  312. modules/cmvk/experiments/demo_with_traces.py +110 -0
  313. modules/cmvk/experiments/efficiency_curve.py +259 -0
  314. modules/cmvk/experiments/experiment_runner.py +243 -0
  315. modules/cmvk/experiments/paper_data_generator.py +183 -0
  316. modules/cmvk/experiments/reproduce_results.py +407 -0
  317. modules/cmvk/experiments/reproducible_runner.py +352 -0
  318. modules/cmvk/experiments/sabotage_stress_test.py +311 -0
  319. modules/cmvk/experiments/test_lateral_thinking.py +116 -0
  320. modules/cmvk/experiments/test_prosecutor.py +41 -0
  321. modules/cmvk/experiments/visualize_results.py +735 -0
  322. modules/cmvk/logs/traces/demo_HumanEval_0_20260121-204900.json +36 -0
  323. modules/cmvk/notebooks/analysis.ipynb +124 -0
  324. modules/cmvk/paper/PAPER.md +561 -0
  325. modules/cmvk/paper/arxiv_checklist.md +230 -0
  326. modules/cmvk/paper/cmvk_neurips.aux +77 -0
  327. modules/cmvk/paper/cmvk_neurips.bbl +81 -0
  328. modules/cmvk/paper/cmvk_neurips.blg +48 -0
  329. modules/cmvk/paper/cmvk_neurips.out +16 -0
  330. modules/cmvk/paper/cmvk_neurips.pdf +0 -0
  331. modules/cmvk/paper/cmvk_neurips.tex +309 -0
  332. modules/cmvk/paper/figures/ablation.png +0 -0
  333. modules/cmvk/paper/figures/ablation.svg +39 -0
  334. modules/cmvk/paper/figures/architecture.png +0 -0
  335. modules/cmvk/paper/figures/architecture.svg +115 -0
  336. modules/cmvk/paper/figures/results_bar.png +0 -0
  337. modules/cmvk/paper/figures/results_bar.svg +70 -0
  338. modules/cmvk/paper/generate_figures.py +383 -0
  339. modules/cmvk/paper/neurips_2024.sty +101 -0
  340. modules/cmvk/paper/references.bib +98 -0
  341. modules/cmvk/paper/structure.tex +200 -0
  342. modules/cmvk/pyproject.toml +189 -0
  343. modules/cmvk/requirements-dev.txt +19 -0
  344. modules/cmvk/requirements.txt +14 -0
  345. modules/cmvk/src/cmvk/__init__.py +216 -0
  346. modules/cmvk/src/cmvk/audit.py +400 -0
  347. modules/cmvk/src/cmvk/benchmarks.py +476 -0
  348. modules/cmvk/src/cmvk/constitutional.py +902 -0
  349. modules/cmvk/src/cmvk/hf_utils.py +299 -0
  350. modules/cmvk/src/cmvk/metrics.py +471 -0
  351. modules/cmvk/src/cmvk/profiles.py +298 -0
  352. modules/cmvk/src/cmvk/py.typed +0 -0
  353. modules/cmvk/src/cmvk/types.py +10 -0
  354. modules/cmvk/src/cmvk/verification.py +954 -0
  355. modules/cmvk/src/cross_model_verification_kernel/__init__.py +91 -0
  356. modules/cmvk/src/cross_model_verification_kernel/__main__.py +10 -0
  357. modules/cmvk/src/cross_model_verification_kernel/agents/__init__.py +16 -0
  358. modules/cmvk/src/cross_model_verification_kernel/agents/base_agent.py +142 -0
  359. modules/cmvk/src/cross_model_verification_kernel/agents/generator_openai.py +223 -0
  360. modules/cmvk/src/cross_model_verification_kernel/agents/verifier_anthropic.py +448 -0
  361. modules/cmvk/src/cross_model_verification_kernel/agents/verifier_gemini.py +481 -0
  362. modules/cmvk/src/cross_model_verification_kernel/cli.py +570 -0
  363. modules/cmvk/src/cross_model_verification_kernel/core/__init__.py +26 -0
  364. modules/cmvk/src/cross_model_verification_kernel/core/graph_memory.py +308 -0
  365. modules/cmvk/src/cross_model_verification_kernel/core/kernel.py +413 -0
  366. modules/cmvk/src/cross_model_verification_kernel/core/trace_logger.py +75 -0
  367. modules/cmvk/src/cross_model_verification_kernel/core/types.py +121 -0
  368. modules/cmvk/src/cross_model_verification_kernel/datasets/__init__.py +20 -0
  369. modules/cmvk/src/cross_model_verification_kernel/datasets/humaneval_loader.py +271 -0
  370. modules/cmvk/src/cross_model_verification_kernel/generator.py +118 -0
  371. modules/cmvk/src/cross_model_verification_kernel/kernel.py +292 -0
  372. modules/cmvk/src/cross_model_verification_kernel/models.py +111 -0
  373. modules/cmvk/src/cross_model_verification_kernel/py.typed +1 -0
  374. modules/cmvk/src/cross_model_verification_kernel/simple_kernel.py +185 -0
  375. modules/cmvk/src/cross_model_verification_kernel/tools/__init__.py +94 -0
  376. modules/cmvk/src/cross_model_verification_kernel/tools/huggingface_upload.py +394 -0
  377. modules/cmvk/src/cross_model_verification_kernel/tools/sandbox.py +159 -0
  378. modules/cmvk/src/cross_model_verification_kernel/tools/statistics.py +468 -0
  379. modules/cmvk/src/cross_model_verification_kernel/tools/visualizer.py +312 -0
  380. modules/cmvk/src/cross_model_verification_kernel/tools/web_search.py +86 -0
  381. modules/cmvk/src/cross_model_verification_kernel/verifier.py +257 -0
  382. modules/cmvk/tests/__init__.py +3 -0
  383. modules/cmvk/tests/conftest.py +61 -0
  384. modules/cmvk/tests/integration/__init__.py +1 -0
  385. modules/cmvk/tests/integration/test_anthropic_verifier.py +269 -0
  386. modules/cmvk/tests/integration/test_integration.py +53 -0
  387. modules/cmvk/tests/integration/test_lateral_thinking_integration.py +199 -0
  388. modules/cmvk/tests/integration/test_lateral_thinking_witness.py +208 -0
  389. modules/cmvk/tests/integration/test_prosecutor_mode.py +131 -0
  390. modules/cmvk/tests/test_constitutional.py +611 -0
  391. modules/cmvk/tests/test_enhanced_features.py +603 -0
  392. modules/cmvk/tests/test_verification.py +255 -0
  393. modules/cmvk/tests/unit/__init__.py +1 -0
  394. modules/cmvk/tests/unit/test_agents.py +64 -0
  395. modules/cmvk/tests/unit/test_cli.py +224 -0
  396. modules/cmvk/tests/unit/test_core.py +126 -0
  397. modules/cmvk/tests/unit/test_humaneval_loader.py +197 -0
  398. modules/cmvk/tests/unit/test_kernel.py +255 -0
  399. modules/cmvk/tests/unit/test_reproducibility.py +160 -0
  400. modules/cmvk/tests/unit/test_trace_logger.py +115 -0
  401. modules/cmvk/tests/unit/test_visualizer.py +218 -0
  402. modules/control-plane/.github/ISSUE_TEMPLATE/bug_report.yml +82 -0
  403. modules/control-plane/.github/ISSUE_TEMPLATE/config.yml +11 -0
  404. modules/control-plane/.github/ISSUE_TEMPLATE/feature_request.yml +104 -0
  405. modules/control-plane/.github/ISSUE_TEMPLATE/question.yml +70 -0
  406. modules/control-plane/.github/ISSUE_TEMPLATE/security_vulnerability.yml +84 -0
  407. modules/control-plane/.github/discussions.yml +73 -0
  408. modules/control-plane/.github/pull_request_template.md +82 -0
  409. modules/control-plane/.github/workflows/publish.yml +146 -0
  410. modules/control-plane/.github/workflows/release.yml +39 -0
  411. modules/control-plane/.github/workflows/tests.yml +58 -0
  412. modules/control-plane/.gitignore +55 -0
  413. modules/control-plane/CHANGELOG.md +203 -0
  414. modules/control-plane/CONTRIBUTING.md +311 -0
  415. modules/control-plane/CONTRIBUTORS.md +88 -0
  416. modules/control-plane/Dockerfile +82 -0
  417. modules/control-plane/LICENSE +21 -0
  418. modules/control-plane/MANIFEST.in +17 -0
  419. modules/control-plane/README.md +1264 -0
  420. modules/control-plane/ROADMAP.md +228 -0
  421. modules/control-plane/SECURITY.md +210 -0
  422. modules/control-plane/SUPPORT.md +106 -0
  423. modules/control-plane/acp-cli.py +212 -0
  424. modules/control-plane/benchmark/README.md +257 -0
  425. modules/control-plane/benchmark/__init__.py +19 -0
  426. modules/control-plane/benchmark/red_team_dataset.py +517 -0
  427. modules/control-plane/benchmark.py +563 -0
  428. modules/control-plane/build_and_publish.sh +130 -0
  429. modules/control-plane/docker-compose.yml +74 -0
  430. modules/control-plane/docs/ABLATION_STUDIES.md +528 -0
  431. modules/control-plane/docs/ADAPTER_GUIDE.md +544 -0
  432. modules/control-plane/docs/ADVANCED_FEATURES.md +543 -0
  433. modules/control-plane/docs/AIOS_COMPARISON.md +296 -0
  434. modules/control-plane/docs/BIBLIOGRAPHY.md +367 -0
  435. modules/control-plane/docs/CASE_STUDIES.md +645 -0
  436. modules/control-plane/docs/DOCKER_DEPLOYMENT.md +184 -0
  437. modules/control-plane/docs/ECOSYSTEM_STATUS.md +98 -0
  438. modules/control-plane/docs/HF_MODEL_CARD.md +168 -0
  439. modules/control-plane/docs/KERNEL_V1_RELEASE.md +454 -0
  440. modules/control-plane/docs/LAYER3_FRAMEWORK.md +227 -0
  441. modules/control-plane/docs/LIMITATIONS.md +523 -0
  442. modules/control-plane/docs/PYPI_PUBLISHING.md +195 -0
  443. modules/control-plane/docs/README.md +58 -0
  444. modules/control-plane/docs/RELATED_WORK.md +319 -0
  445. modules/control-plane/docs/RELEASE_v1.1.0.md +252 -0
  446. modules/control-plane/docs/REPRODUCIBILITY.md +540 -0
  447. modules/control-plane/docs/RESEARCH_FOUNDATION.md +197 -0
  448. modules/control-plane/docs/api/CORE.md +270 -0
  449. modules/control-plane/docs/architecture/architecture.md +120 -0
  450. modules/control-plane/docs/community/ANNOUNCEMENT_TEMPLATES.md +52 -0
  451. modules/control-plane/docs/guides/IMPLEMENTATION.md +225 -0
  452. modules/control-plane/docs/guides/PHILOSOPHY.md +354 -0
  453. modules/control-plane/docs/guides/QUICKSTART.md +217 -0
  454. modules/control-plane/examples/README.md +138 -0
  455. modules/control-plane/examples/a2a_demo.py +410 -0
  456. modules/control-plane/examples/adapter_demo.py +347 -0
  457. modules/control-plane/examples/advanced_features.py +403 -0
  458. modules/control-plane/examples/basic_usage.py +261 -0
  459. modules/control-plane/examples/benchmark_demo.py +186 -0
  460. modules/control-plane/examples/compliance_demo.py +333 -0
  461. modules/control-plane/examples/configuration.py +265 -0
  462. modules/control-plane/examples/getting_started.py +178 -0
  463. modules/control-plane/examples/hibernation_and_time_travel_demo.py +406 -0
  464. modules/control-plane/examples/interactive_tutorial.ipynb +497 -0
  465. modules/control-plane/examples/kernel_interceptor_demo.py +202 -0
  466. modules/control-plane/examples/kernel_v1_demo.py +273 -0
  467. modules/control-plane/examples/langchain_demo.py +281 -0
  468. modules/control-plane/examples/lifecycle_demo.py +724 -0
  469. modules/control-plane/examples/mcp_demo.py +378 -0
  470. modules/control-plane/examples/ml_safety_demo.py +157 -0
  471. modules/control-plane/examples/multimodal_demo.py +347 -0
  472. modules/control-plane/examples/observability_demo.py +370 -0
  473. modules/control-plane/examples/use_cases.py +336 -0
  474. modules/control-plane/experiments/long_horizon_purge.py +235 -0
  475. modules/control-plane/experiments/multi_agent_rag.py +165 -0
  476. modules/control-plane/experiments/reproduce_results.py +667 -0
  477. modules/control-plane/paper/ARXIV_SUBMISSION_INFO.txt +122 -0
  478. modules/control-plane/paper/ETHICS_STATEMENT.md +248 -0
  479. modules/control-plane/paper/PAPER_CHECKLIST.md +72 -0
  480. modules/control-plane/paper/Paper.pdf +0 -0
  481. modules/control-plane/paper/README.md +71 -0
  482. modules/control-plane/paper/appendix.md +152 -0
  483. modules/control-plane/paper/architecture.md +15 -0
  484. modules/control-plane/paper/arxiv/figures/ablation_chart.png +0 -0
  485. modules/control-plane/paper/arxiv/figures/architecture.png +0 -0
  486. modules/control-plane/paper/arxiv/figures/constraint_graphs.png +0 -0
  487. modules/control-plane/paper/arxiv/figures/results_chart.png +0 -0
  488. modules/control-plane/paper/arxiv/main.aux +97 -0
  489. modules/control-plane/paper/arxiv/main.bbl +112 -0
  490. modules/control-plane/paper/arxiv/main.blg +48 -0
  491. modules/control-plane/paper/arxiv/main.out +33 -0
  492. modules/control-plane/paper/arxiv/main.pdf +0 -0
  493. modules/control-plane/paper/arxiv/main.tex +479 -0
  494. modules/control-plane/paper/arxiv/references.bib +234 -0
  495. modules/control-plane/paper/arxiv_submission.tar +0 -0
  496. modules/control-plane/paper/arxiv_submission.zip +0 -0
  497. modules/control-plane/paper/build.sh +68 -0
  498. modules/control-plane/paper/figures/README.md +47 -0
  499. modules/control-plane/paper/figures/ablation_chart.pdf +0 -0
  500. modules/control-plane/paper/figures/ablation_chart.png +0 -0
  501. modules/control-plane/paper/figures/architecture.pdf +0 -0
  502. modules/control-plane/paper/figures/architecture.png +0 -0
  503. modules/control-plane/paper/figures/constraint_graphs.pdf +0 -0
  504. modules/control-plane/paper/figures/constraint_graphs.png +0 -0
  505. modules/control-plane/paper/figures/generate_figures.py +252 -0
  506. modules/control-plane/paper/figures/results_chart.pdf +0 -0
  507. modules/control-plane/paper/figures/results_chart.png +0 -0
  508. modules/control-plane/paper/main.md +273 -0
  509. modules/control-plane/paper/main.tex +214 -0
  510. modules/control-plane/paper/main_arxiv.aux +53 -0
  511. modules/control-plane/paper/main_arxiv.out +17 -0
  512. modules/control-plane/paper/main_arxiv.pdf +0 -0
  513. modules/control-plane/paper/main_arxiv.tex +264 -0
  514. modules/control-plane/paper/references.bib +234 -0
  515. modules/control-plane/pyproject.toml +124 -0
  516. modules/control-plane/reproducibility/ABLATIONS.md +136 -0
  517. modules/control-plane/reproducibility/README.md +288 -0
  518. modules/control-plane/reproducibility/commands.md +467 -0
  519. modules/control-plane/reproducibility/docker_config/Dockerfile +39 -0
  520. modules/control-plane/reproducibility/experiment_configs/purge_config.json +46 -0
  521. modules/control-plane/reproducibility/experiment_configs/rag_config.json +36 -0
  522. modules/control-plane/reproducibility/hardware_specs.md +317 -0
  523. modules/control-plane/reproducibility/requirements_frozen.txt +0 -0
  524. modules/control-plane/reproducibility/run_all_experiments.sh +45 -0
  525. modules/control-plane/reproducibility/seeds.json +106 -0
  526. modules/control-plane/scripts/prepare_pypi.py +46 -0
  527. modules/control-plane/scripts/prepare_release.py +176 -0
  528. modules/control-plane/scripts/upload_dataset_to_hf.py +316 -0
  529. modules/control-plane/setup.py +69 -0
  530. modules/control-plane/src/agent_control_plane/__init__.py +639 -0
  531. modules/control-plane/src/agent_control_plane/a2a_adapter.py +541 -0
  532. modules/control-plane/src/agent_control_plane/adapter.py +415 -0
  533. modules/control-plane/src/agent_control_plane/agent_hibernation.py +364 -0
  534. modules/control-plane/src/agent_control_plane/agent_kernel.py +464 -0
  535. modules/control-plane/src/agent_control_plane/compliance.py +718 -0
  536. modules/control-plane/src/agent_control_plane/constraint_graphs.py +475 -0
  537. modules/control-plane/src/agent_control_plane/control_plane.py +848 -0
  538. modules/control-plane/src/agent_control_plane/example_executors.py +193 -0
  539. modules/control-plane/src/agent_control_plane/execution_engine.py +229 -0
  540. modules/control-plane/src/agent_control_plane/flight_recorder.py +600 -0
  541. modules/control-plane/src/agent_control_plane/governance_layer.py +432 -0
  542. modules/control-plane/src/agent_control_plane/hf_utils.py +561 -0
  543. modules/control-plane/src/agent_control_plane/interfaces/__init__.py +53 -0
  544. modules/control-plane/src/agent_control_plane/interfaces/kernel_interface.py +359 -0
  545. modules/control-plane/src/agent_control_plane/interfaces/plugin_interface.py +495 -0
  546. modules/control-plane/src/agent_control_plane/interfaces/protocol_interfaces.py +385 -0
  547. modules/control-plane/src/agent_control_plane/kernel_space.py +707 -0
  548. modules/control-plane/src/agent_control_plane/langchain_adapter.py +422 -0
  549. modules/control-plane/src/agent_control_plane/lifecycle.py +3111 -0
  550. modules/control-plane/src/agent_control_plane/mcp_adapter.py +517 -0
  551. modules/control-plane/src/agent_control_plane/ml_safety.py +560 -0
  552. modules/control-plane/src/agent_control_plane/multimodal.py +724 -0
  553. modules/control-plane/src/agent_control_plane/mute_agent.py +419 -0
  554. modules/control-plane/src/agent_control_plane/observability.py +785 -0
  555. modules/control-plane/src/agent_control_plane/orchestrator.py +480 -0
  556. modules/control-plane/src/agent_control_plane/plugin_registry.py +748 -0
  557. modules/control-plane/src/agent_control_plane/policy_engine.py +525 -0
  558. modules/control-plane/src/agent_control_plane/shadow_mode.py +307 -0
  559. modules/control-plane/src/agent_control_plane/signals.py +491 -0
  560. modules/control-plane/src/agent_control_plane/supervisor_agents.py +427 -0
  561. modules/control-plane/src/agent_control_plane/time_travel_debugger.py +554 -0
  562. modules/control-plane/src/agent_control_plane/tool_registry.py +350 -0
  563. modules/control-plane/src/agent_control_plane/vfs.py +695 -0
  564. modules/control-plane/tests/README.md +33 -0
  565. modules/control-plane/tests/test_a2a_adapter.py +336 -0
  566. modules/control-plane/tests/test_adapter.py +422 -0
  567. modules/control-plane/tests/test_advanced_features.py +389 -0
  568. modules/control-plane/tests/test_benchmark.py +223 -0
  569. modules/control-plane/tests/test_compliance.py +214 -0
  570. modules/control-plane/tests/test_control_plane.py +295 -0
  571. modules/control-plane/tests/test_hibernation.py +274 -0
  572. modules/control-plane/tests/test_kernel_interception.py +284 -0
  573. modules/control-plane/tests/test_langchain_adapter.py +258 -0
  574. modules/control-plane/tests/test_lifecycle.py +1174 -0
  575. modules/control-plane/tests/test_mcp_adapter.py +293 -0
  576. modules/control-plane/tests/test_ml_safety.py +142 -0
  577. modules/control-plane/tests/test_multimodal.py +317 -0
  578. modules/control-plane/tests/test_new_features.py +435 -0
  579. modules/control-plane/tests/test_observability.py +338 -0
  580. modules/control-plane/tests/test_time_travel.py +387 -0
  581. modules/emk/.github/workflows/ci.yml +105 -0
  582. modules/emk/.github/workflows/publish.yml +144 -0
  583. modules/emk/.gitignore +74 -0
  584. modules/emk/CHANGELOG.md +41 -0
  585. modules/emk/CONTRIBUTING.md +295 -0
  586. modules/emk/IMPLEMENTATION.md +174 -0
  587. modules/emk/LICENSE +21 -0
  588. modules/emk/MANIFEST.in +8 -0
  589. modules/emk/README.md +135 -0
  590. modules/emk/RELEASE_NOTES.md +82 -0
  591. modules/emk/SECURITY.md +52 -0
  592. modules/emk/codecov.yml +39 -0
  593. modules/emk/docs/MEMORY_MANAGEMENT.md +285 -0
  594. modules/emk/emk/__init__.py +106 -0
  595. modules/emk/emk/hf_utils.py +419 -0
  596. modules/emk/emk/indexer.py +144 -0
  597. modules/emk/emk/py.typed +0 -0
  598. modules/emk/emk/schema.py +204 -0
  599. modules/emk/emk/sleep_cycle.py +345 -0
  600. modules/emk/emk/store.py +479 -0
  601. modules/emk/examples/basic_usage.py +123 -0
  602. modules/emk/examples/memory_features_demo.py +154 -0
  603. modules/emk/experiments/README.md +59 -0
  604. modules/emk/experiments/reproduce_results.py +461 -0
  605. modules/emk/experiments/results.json +61 -0
  606. modules/emk/paper/structure.tex +192 -0
  607. modules/emk/paper/whitepaper.md +273 -0
  608. modules/emk/pyproject.toml +91 -0
  609. modules/emk/setup.py +5 -0
  610. modules/emk/tests/test_file_adapter.py +195 -0
  611. modules/emk/tests/test_indexer.py +174 -0
  612. modules/emk/tests/test_init.py +55 -0
  613. modules/emk/tests/test_negative_memory.py +83 -0
  614. modules/emk/tests/test_schema.py +150 -0
  615. modules/emk/tests/test_semantic_rules.py +175 -0
  616. modules/emk/tests/test_sleep_cycle.py +335 -0
  617. modules/emk/tests/test_store_anti_patterns.py +239 -0
  618. modules/iatp/.github/workflows/docker-build.yml +124 -0
  619. modules/iatp/.github/workflows/publish.yml +174 -0
  620. modules/iatp/.github/workflows/python-package.yml +121 -0
  621. modules/iatp/.gitignore +67 -0
  622. modules/iatp/.pre-commit-config.yaml +64 -0
  623. modules/iatp/CHANGELOG.md +120 -0
  624. modules/iatp/Dockerfile +91 -0
  625. modules/iatp/IMPLEMENTATION_SUMMARY.md +218 -0
  626. modules/iatp/MANIFEST.in +9 -0
  627. modules/iatp/README.md +180 -0
  628. modules/iatp/docker/Dockerfile.agent +27 -0
  629. modules/iatp/docker/Dockerfile.sidecar-python +86 -0
  630. modules/iatp/docker/README.md +258 -0
  631. modules/iatp/docker-compose.yml +194 -0
  632. modules/iatp/docs/ARCHITECTURE.md +243 -0
  633. modules/iatp/docs/CLI_GUIDE.md +220 -0
  634. modules/iatp/docs/DEPLOYMENT.md +304 -0
  635. modules/iatp/examples/README.md +132 -0
  636. modules/iatp/examples/backend_agent.py +39 -0
  637. modules/iatp/examples/client.py +168 -0
  638. modules/iatp/examples/demo_attestation_reputation.py +274 -0
  639. modules/iatp/examples/demo_client.py +240 -0
  640. modules/iatp/examples/demo_rbac.py +143 -0
  641. modules/iatp/examples/integration_demo.py +245 -0
  642. modules/iatp/examples/manifests/coder_agent.json +20 -0
  643. modules/iatp/examples/manifests/reviewer_agent.json +19 -0
  644. modules/iatp/examples/manifests/secure_bank.json +14 -0
  645. modules/iatp/examples/manifests/standard_agent.json +14 -0
  646. modules/iatp/examples/manifests/untrusted_honeypot.json +14 -0
  647. modules/iatp/examples/run_secure_bank_sidecar.py +85 -0
  648. modules/iatp/examples/run_sidecar.py +105 -0
  649. modules/iatp/examples/run_untrusted_sidecar.py +77 -0
  650. modules/iatp/examples/secure_bank_agent.py +138 -0
  651. modules/iatp/examples/test_untrusted.py +82 -0
  652. modules/iatp/examples/untrusted_agent.py +119 -0
  653. modules/iatp/experiments/README.md +58 -0
  654. modules/iatp/experiments/cascading_hallucination/README.md +149 -0
  655. modules/iatp/experiments/cascading_hallucination/agent_a_user.py +41 -0
  656. modules/iatp/experiments/cascading_hallucination/agent_b_summarizer.py +54 -0
  657. modules/iatp/experiments/cascading_hallucination/agent_c_database.py +47 -0
  658. modules/iatp/experiments/cascading_hallucination/proof_of_concept.py +290 -0
  659. modules/iatp/experiments/cascading_hallucination/run_experiment.py +226 -0
  660. modules/iatp/experiments/cascading_hallucination/sidecar_c.py +61 -0
  661. modules/iatp/experiments/reproduce_results.py +574 -0
  662. modules/iatp/experiments/results.json +2336 -0
  663. modules/iatp/iatp/__init__.py +164 -0
  664. modules/iatp/iatp/attestation.py +401 -0
  665. modules/iatp/iatp/cli.py +253 -0
  666. modules/iatp/iatp/hf_utils.py +469 -0
  667. modules/iatp/iatp/ipc_pipes.py +578 -0
  668. modules/iatp/iatp/main.py +410 -0
  669. modules/iatp/iatp/models/__init__.py +445 -0
  670. modules/iatp/iatp/policy_engine.py +335 -0
  671. modules/iatp/iatp/py.typed +2 -0
  672. modules/iatp/iatp/recovery.py +319 -0
  673. modules/iatp/iatp/security/__init__.py +268 -0
  674. modules/iatp/iatp/sidecar/__init__.py +517 -0
  675. modules/iatp/iatp/telemetry/__init__.py +162 -0
  676. modules/iatp/iatp/tests/__init__.py +1 -0
  677. modules/iatp/iatp/tests/test_attestation.py +368 -0
  678. modules/iatp/iatp/tests/test_cli.py +129 -0
  679. modules/iatp/iatp/tests/test_models.py +128 -0
  680. modules/iatp/iatp/tests/test_policy_engine.py +345 -0
  681. modules/iatp/iatp/tests/test_recovery.py +279 -0
  682. modules/iatp/iatp/tests/test_security.py +220 -0
  683. modules/iatp/iatp/tests/test_sidecar.py +165 -0
  684. modules/iatp/iatp/tests/test_telemetry.py +173 -0
  685. modules/iatp/paper/BLOG.md +307 -0
  686. modules/iatp/paper/PAPER.md +236 -0
  687. modules/iatp/paper/RFC_SUBMISSION.md +299 -0
  688. modules/iatp/paper/whitepaper.md +369 -0
  689. modules/iatp/proto/README.md +200 -0
  690. modules/iatp/proto/generate_stubs.py +81 -0
  691. modules/iatp/proto/iatp.proto +552 -0
  692. modules/iatp/pyproject.toml +180 -0
  693. modules/iatp/requirements-dev.txt +2 -0
  694. modules/iatp/requirements.txt +6 -0
  695. modules/iatp/setup.py +60 -0
  696. modules/iatp/sidecar/README.md +487 -0
  697. modules/iatp/sidecar/go/Dockerfile +32 -0
  698. modules/iatp/sidecar/go/README.md +237 -0
  699. modules/iatp/sidecar/go/go.mod +8 -0
  700. modules/iatp/sidecar/go/main.go +488 -0
  701. modules/iatp/spec/001-handshake.md +436 -0
  702. modules/iatp/spec/002-reversibility.md +394 -0
  703. modules/iatp/spec/schema/capability_manifest.json +266 -0
  704. modules/iatp/test_integration.py +310 -0
  705. modules/mcp-kernel-server/README.md +261 -0
  706. modules/mcp-kernel-server/pyproject.toml +60 -0
  707. modules/mcp-kernel-server/src/mcp_kernel_server/__init__.py +26 -0
  708. modules/mcp-kernel-server/src/mcp_kernel_server/cli.py +229 -0
  709. modules/mcp-kernel-server/src/mcp_kernel_server/resources.py +215 -0
  710. modules/mcp-kernel-server/src/mcp_kernel_server/server.py +562 -0
  711. modules/mcp-kernel-server/src/mcp_kernel_server/tools.py +1172 -0
  712. modules/mute-agent/.github/workflows/safety_check.yml +45 -0
  713. modules/mute-agent/.gitignore +53 -0
  714. modules/mute-agent/ARCHITECTURE.md +531 -0
  715. modules/mute-agent/BENCHMARK_GUIDE.md +384 -0
  716. modules/mute-agent/COMPLETION_SUMMARY.md +293 -0
  717. modules/mute-agent/EXPERIMENT_SUMMARY.md +318 -0
  718. modules/mute-agent/IMPLEMENTATION_SUMMARY.md +212 -0
  719. modules/mute-agent/LICENSE +21 -0
  720. modules/mute-agent/PHASE3_SUMMARY.md +297 -0
  721. modules/mute-agent/README.md +360 -0
  722. modules/mute-agent/STEEL_MAN_RESULTS.md +353 -0
  723. modules/mute-agent/USAGE.md +505 -0
  724. modules/mute-agent/V2_IMPLEMENTATION_SUMMARY.md +253 -0
  725. modules/mute-agent/V2_STEEL_MAN_IMPLEMENTATION.md +274 -0
  726. modules/mute-agent/VERIFICATION_REPORT.md +435 -0
  727. modules/mute-agent/charts/cost_comparison.png +0 -0
  728. modules/mute-agent/charts/cost_vs_ambiguity.png +0 -0
  729. modules/mute-agent/charts/metrics_comparison.png +0 -0
  730. modules/mute-agent/charts/scenario_breakdown.png +0 -0
  731. modules/mute-agent/charts/trace_attack_blocked.html +140 -0
  732. modules/mute-agent/charts/trace_attack_blocked.png +0 -0
  733. modules/mute-agent/charts/trace_failure.html +140 -0
  734. modules/mute-agent/charts/trace_failure.png +0 -0
  735. modules/mute-agent/charts/trace_success.html +140 -0
  736. modules/mute-agent/charts/trace_success.png +0 -0
  737. modules/mute-agent/examples/__init__.py +1 -0
  738. modules/mute-agent/examples/advanced_example.py +384 -0
  739. modules/mute-agent/examples/graph_debugger_demo.py +241 -0
  740. modules/mute-agent/examples/listener_example.py +297 -0
  741. modules/mute-agent/examples/simple_example.py +242 -0
  742. modules/mute-agent/examples/steel_man_demo.py +297 -0
  743. modules/mute-agent/experiments/README.md +135 -0
  744. modules/mute-agent/experiments/__init__.py +3 -0
  745. modules/mute-agent/experiments/agent_comparison.csv +6 -0
  746. modules/mute-agent/experiments/agent_comparison_50runs.csv +6 -0
  747. modules/mute-agent/experiments/ambiguity_test.py +335 -0
  748. modules/mute-agent/experiments/ambiguity_test_results.csv +31 -0
  749. modules/mute-agent/experiments/ambiguity_test_results_50runs.csv +51 -0
  750. modules/mute-agent/experiments/baseline_agent.py +189 -0
  751. modules/mute-agent/experiments/benchmark.py +402 -0
  752. modules/mute-agent/experiments/demo.py +172 -0
  753. modules/mute-agent/experiments/generate_cost_curve.py +474 -0
  754. modules/mute-agent/experiments/jailbreak_test.py +137 -0
  755. modules/mute-agent/experiments/latent_state_scenario.py +361 -0
  756. modules/mute-agent/experiments/mute_agent_experiment.py +349 -0
  757. modules/mute-agent/experiments/run_extended_experiment.py +40 -0
  758. modules/mute-agent/experiments/run_v2_experiments.py +266 -0
  759. modules/mute-agent/experiments/run_v2_experiments_auto.py +247 -0
  760. modules/mute-agent/experiments/v2_scenarios/README.md +214 -0
  761. modules/mute-agent/experiments/v2_scenarios/__init__.py +4 -0
  762. modules/mute-agent/experiments/v2_scenarios/scenario_1_deep_dependency.py +325 -0
  763. modules/mute-agent/experiments/v2_scenarios/scenario_2_adversarial.py +328 -0
  764. modules/mute-agent/experiments/v2_scenarios/scenario_3_false_positive.py +303 -0
  765. modules/mute-agent/experiments/v2_scenarios/scenario_4_performance.py +319 -0
  766. modules/mute-agent/experiments/visualize.py +400 -0
  767. modules/mute-agent/mute_agent/__init__.py +66 -0
  768. modules/mute-agent/mute_agent/core/__init__.py +1 -0
  769. modules/mute-agent/mute_agent/core/execution_agent.py +164 -0
  770. modules/mute-agent/mute_agent/core/handshake_protocol.py +199 -0
  771. modules/mute-agent/mute_agent/core/reasoning_agent.py +236 -0
  772. modules/mute-agent/mute_agent/knowledge_graph/__init__.py +1 -0
  773. modules/mute-agent/mute_agent/knowledge_graph/graph_elements.py +63 -0
  774. modules/mute-agent/mute_agent/knowledge_graph/multidimensional_graph.py +168 -0
  775. modules/mute-agent/mute_agent/knowledge_graph/subgraph.py +222 -0
  776. modules/mute-agent/mute_agent/listener/__init__.py +41 -0
  777. modules/mute-agent/mute_agent/listener/adapters/__init__.py +29 -0
  778. modules/mute-agent/mute_agent/listener/adapters/base_adapter.py +187 -0
  779. modules/mute-agent/mute_agent/listener/adapters/caas_adapter.py +342 -0
  780. modules/mute-agent/mute_agent/listener/adapters/control_plane_adapter.py +434 -0
  781. modules/mute-agent/mute_agent/listener/adapters/iatp_adapter.py +330 -0
  782. modules/mute-agent/mute_agent/listener/adapters/scak_adapter.py +249 -0
  783. modules/mute-agent/mute_agent/listener/listener.py +608 -0
  784. modules/mute-agent/mute_agent/listener/state_observer.py +434 -0
  785. modules/mute-agent/mute_agent/listener/threshold_config.py +311 -0
  786. modules/mute-agent/mute_agent/super_system/__init__.py +1 -0
  787. modules/mute-agent/mute_agent/super_system/router.py +202 -0
  788. modules/mute-agent/mute_agent/visualization/__init__.py +8 -0
  789. modules/mute-agent/mute_agent/visualization/graph_debugger.py +495 -0
  790. modules/mute-agent/requirements-dev.txt +6 -0
  791. modules/mute-agent/requirements.txt +9 -0
  792. modules/mute-agent/setup.py +64 -0
  793. modules/mute-agent/src/__init__.py +0 -0
  794. modules/mute-agent/src/agents/__init__.py +0 -0
  795. modules/mute-agent/src/agents/baseline_agent.py +524 -0
  796. modules/mute-agent/src/agents/interactive_agent.py +113 -0
  797. modules/mute-agent/src/agents/mute_agent.py +622 -0
  798. modules/mute-agent/src/benchmarks/__init__.py +0 -0
  799. modules/mute-agent/src/benchmarks/evaluator.py +481 -0
  800. modules/mute-agent/src/benchmarks/scenarios.json +985 -0
  801. modules/mute-agent/src/core/__init__.py +0 -0
  802. modules/mute-agent/src/core/mock_state.py +320 -0
  803. modules/mute-agent/src/core/tools.py +441 -0
  804. modules/nexus/__init__.py +49 -0
  805. modules/nexus/arbiter.py +357 -0
  806. modules/nexus/client.py +464 -0
  807. modules/nexus/dmz.py +417 -0
  808. modules/nexus/escrow.py +428 -0
  809. modules/nexus/exceptions.py +284 -0
  810. modules/nexus/registry.py +391 -0
  811. modules/nexus/reputation.py +423 -0
  812. modules/nexus/schemas/__init__.py +49 -0
  813. modules/nexus/schemas/compliance.py +274 -0
  814. modules/nexus/schemas/escrow.py +249 -0
  815. modules/nexus/schemas/manifest.py +223 -0
  816. modules/nexus/schemas/receipt.py +206 -0
  817. modules/observability/README.md +192 -0
  818. modules/observability/alertmanager/alertmanager.yml +116 -0
  819. modules/observability/alerts/agent-os-alerts.yaml +197 -0
  820. modules/observability/docker-compose.yml +128 -0
  821. modules/observability/grafana/dashboards/agent-os-amb.json +448 -0
  822. modules/observability/grafana/dashboards/agent-os-cmvk.json +441 -0
  823. modules/observability/grafana/dashboards/agent-os-overview.json +268 -0
  824. modules/observability/grafana/dashboards/agent-os-performance.json +15 -0
  825. modules/observability/grafana/dashboards/agent-os-safety.json +50 -0
  826. modules/observability/grafana/provisioning/dashboards/dashboards.yml +15 -0
  827. modules/observability/grafana/provisioning/datasources/datasources.yml +33 -0
  828. modules/observability/otel/otel-collector-config.yml +61 -0
  829. modules/observability/prometheus/prometheus.yml +63 -0
  830. modules/observability/pyproject.toml +53 -0
  831. modules/observability/scripts/export_dashboards.py +55 -0
  832. modules/observability/src/agent_os_observability/__init__.py +25 -0
  833. modules/observability/src/agent_os_observability/dashboards.py +896 -0
  834. modules/observability/src/agent_os_observability/metrics.py +396 -0
  835. modules/observability/src/agent_os_observability/server.py +221 -0
  836. modules/observability/src/agent_os_observability/tracer.py +226 -0
  837. modules/primitives/.gitignore +8 -0
  838. modules/primitives/README.md +62 -0
  839. modules/primitives/agent_primitives/__init__.py +22 -0
  840. modules/primitives/agent_primitives/failures.py +82 -0
  841. modules/primitives/agent_primitives/py.typed +0 -0
  842. modules/primitives/pyproject.toml +68 -0
  843. modules/scak/.github/copilot-instructions.md +396 -0
  844. modules/scak/.github/workflows/release.yml +117 -0
  845. modules/scak/.gitignore +32 -0
  846. modules/scak/CHANGELOG.md +173 -0
  847. modules/scak/CITATION.cff +62 -0
  848. modules/scak/CONTRIBUTING.md +429 -0
  849. modules/scak/Dockerfile +58 -0
  850. modules/scak/ENTERPRISE_FEATURES.md +518 -0
  851. modules/scak/IMPLEMENTATION_SUMMARY.md +206 -0
  852. modules/scak/LIMITATIONS.md +565 -0
  853. modules/scak/MANIFEST.in +16 -0
  854. modules/scak/NOVELTY.md +535 -0
  855. modules/scak/README.md +928 -0
  856. modules/scak/RESEARCH.md +670 -0
  857. modules/scak/agent_kernel/__init__.py +66 -0
  858. modules/scak/agent_kernel/analyzer.py +432 -0
  859. modules/scak/agent_kernel/auditor.py +31 -0
  860. modules/scak/agent_kernel/completeness_auditor.py +234 -0
  861. modules/scak/agent_kernel/detector.py +200 -0
  862. modules/scak/agent_kernel/kernel.py +741 -0
  863. modules/scak/agent_kernel/memory_manager.py +82 -0
  864. modules/scak/agent_kernel/models.py +372 -0
  865. modules/scak/agent_kernel/nudge_mechanism.py +260 -0
  866. modules/scak/agent_kernel/outcome_analyzer.py +335 -0
  867. modules/scak/agent_kernel/patcher.py +579 -0
  868. modules/scak/agent_kernel/semantic_analyzer.py +313 -0
  869. modules/scak/agent_kernel/semantic_purge.py +346 -0
  870. modules/scak/agent_kernel/simulator.py +447 -0
  871. modules/scak/agent_kernel/teacher.py +82 -0
  872. modules/scak/agent_kernel/triage.py +149 -0
  873. modules/scak/build_and_publish.ps1 +74 -0
  874. modules/scak/build_and_publish.sh +74 -0
  875. modules/scak/cli.py +471 -0
  876. modules/scak/dashboard.py +462 -0
  877. modules/scak/datasets/DATASET_CARD.md +219 -0
  878. modules/scak/datasets/README.md +143 -0
  879. modules/scak/datasets/gaia_vague_queries/vague_queries.json +262 -0
  880. modules/scak/datasets/hf_upload/README.md +219 -0
  881. modules/scak/datasets/hf_upload/scak_gaia_laziness.jsonl +50 -0
  882. modules/scak/datasets/prepare_hf_datasets.py +145 -0
  883. modules/scak/datasets/red_team/jailbreak_patterns.json +202 -0
  884. modules/scak/docker-compose.yml +99 -0
  885. modules/scak/docs/Adaptive-Memory-Hierarchy.md +319 -0
  886. modules/scak/docs/Data-Contracts-and-Schemas.md +285 -0
  887. modules/scak/docs/Dual-Loop-Architecture.md +344 -0
  888. modules/scak/docs/Enhanced-Features.md +612 -0
  889. modules/scak/docs/LANGCHAIN_INTEGRATION.md +572 -0
  890. modules/scak/docs/README.md +128 -0
  891. modules/scak/docs/Reference-Implementations.md +163 -0
  892. modules/scak/docs/SCAK_V2.md +374 -0
  893. modules/scak/docs/Three-Failure-Types.md +178 -0
  894. modules/scak/examples/basic_example.py +155 -0
  895. modules/scak/examples/circuit_breaker_lazy_eval_demo.py +243 -0
  896. modules/scak/examples/langchain_integration_example.py +339 -0
  897. modules/scak/examples/layer4_demo.py +243 -0
  898. modules/scak/examples/production_features_demo.py +353 -0
  899. modules/scak/examples/quick_demo.py +79 -0
  900. modules/scak/examples/scak_v2_demo.py +252 -0
  901. modules/scak/experiments/README.md +438 -0
  902. modules/scak/experiments/ablation_studies/README.md +192 -0
  903. modules/scak/experiments/ablation_studies/ablation_no_audit.py +116 -0
  904. modules/scak/experiments/ablation_studies/ablation_no_purge.py +133 -0
  905. modules/scak/experiments/chaos_engineering/README.md +332 -0
  906. modules/scak/experiments/context_efficiency_test.py +328 -0
  907. modules/scak/experiments/gaia_benchmark/README.md +208 -0
  908. modules/scak/experiments/laziness_benchmark.py +179 -0
  909. modules/scak/experiments/long_horizon_task_experiment.py +252 -0
  910. modules/scak/experiments/multi_agent_rag_experiment.py +284 -0
  911. modules/scak/experiments/results/ablation_table.md +12 -0
  912. modules/scak/experiments/results/long_horizon.json +36 -0
  913. modules/scak/experiments/results/multi_agent_rag.json +66 -0
  914. modules/scak/experiments/run_comprehensive_ablations.py +332 -0
  915. modules/scak/experiments/test_auditor_patcher_integration.py +251 -0
  916. modules/scak/notebooks/getting_started.ipynb +33 -0
  917. modules/scak/paper/ARXIV_SUBMISSION_METADATA.txt +109 -0
  918. modules/scak/paper/PAPER_CHECKLIST.md +304 -0
  919. modules/scak/paper/Paper.pdf +0 -0
  920. modules/scak/paper/README.md +113 -0
  921. modules/scak/paper/appendix.md +351 -0
  922. modules/scak/paper/arxiv/bibliography.bib +284 -0
  923. modules/scak/paper/arxiv/fig1_ooda_architecture.pdf +0 -0
  924. modules/scak/paper/arxiv/fig2_memory_hierarchy.pdf +0 -0
  925. modules/scak/paper/arxiv/fig3_gaia_results.pdf +0 -0
  926. modules/scak/paper/arxiv/fig4_ablation_heatmap.pdf +0 -0
  927. modules/scak/paper/arxiv/fig5_context_reduction.pdf +0 -0
  928. modules/scak/paper/arxiv/fig6_mttr_boxplot.pdf +0 -0
  929. modules/scak/paper/arxiv/main.aux +103 -0
  930. modules/scak/paper/arxiv/main.bbl +113 -0
  931. modules/scak/paper/arxiv/main.blg +55 -0
  932. modules/scak/paper/arxiv/main.out +31 -0
  933. modules/scak/paper/arxiv/main.pdf +0 -0
  934. modules/scak/paper/arxiv/main.tex +482 -0
  935. modules/scak/paper/arxiv_submission/bibliography.bib +284 -0
  936. modules/scak/paper/arxiv_submission/fig1_ooda_architecture.pdf +0 -0
  937. modules/scak/paper/arxiv_submission/fig2_memory_hierarchy.pdf +0 -0
  938. modules/scak/paper/arxiv_submission/fig3_gaia_results.pdf +0 -0
  939. modules/scak/paper/arxiv_submission/fig4_ablation_heatmap.pdf +0 -0
  940. modules/scak/paper/arxiv_submission/fig5_context_reduction.pdf +0 -0
  941. modules/scak/paper/arxiv_submission/fig6_mttr_boxplot.pdf +0 -0
  942. modules/scak/paper/arxiv_submission/main.aux +103 -0
  943. modules/scak/paper/arxiv_submission/main.bbl +113 -0
  944. modules/scak/paper/arxiv_submission/main.blg +55 -0
  945. modules/scak/paper/arxiv_submission/main.out +31 -0
  946. modules/scak/paper/arxiv_submission/main.pdf +0 -0
  947. modules/scak/paper/arxiv_submission/main.tex +482 -0
  948. modules/scak/paper/arxiv_submission.tar.gz +0 -0
  949. modules/scak/paper/bibliography.bib +284 -0
  950. modules/scak/paper/build.sh +55 -0
  951. modules/scak/paper/figures/README.md +32 -0
  952. modules/scak/paper/figures/fig1_ooda_architecture.md +75 -0
  953. modules/scak/paper/figures/fig1_ooda_architecture.pdf +0 -0
  954. modules/scak/paper/figures/fig1_ooda_architecture.png +0 -0
  955. modules/scak/paper/figures/fig2_memory_hierarchy.md +83 -0
  956. modules/scak/paper/figures/fig2_memory_hierarchy.pdf +0 -0
  957. modules/scak/paper/figures/fig2_memory_hierarchy.png +0 -0
  958. modules/scak/paper/figures/fig3_gaia_results.md +64 -0
  959. modules/scak/paper/figures/fig3_gaia_results.pdf +0 -0
  960. modules/scak/paper/figures/fig3_gaia_results.png +0 -0
  961. modules/scak/paper/figures/fig4_ablation_heatmap.md +64 -0
  962. modules/scak/paper/figures/fig4_ablation_heatmap.pdf +0 -0
  963. modules/scak/paper/figures/fig4_ablation_heatmap.png +0 -0
  964. modules/scak/paper/figures/fig5_context_reduction.md +71 -0
  965. modules/scak/paper/figures/fig5_context_reduction.pdf +0 -0
  966. modules/scak/paper/figures/fig5_context_reduction.png +0 -0
  967. modules/scak/paper/figures/fig6_mttr_boxplot.md +80 -0
  968. modules/scak/paper/figures/fig6_mttr_boxplot.pdf +0 -0
  969. modules/scak/paper/figures/fig6_mttr_boxplot.png +0 -0
  970. modules/scak/paper/figures/generate_figures.py +463 -0
  971. modules/scak/paper/main.aux +103 -0
  972. modules/scak/paper/main.bbl +113 -0
  973. modules/scak/paper/main.blg +55 -0
  974. modules/scak/paper/main.md +192 -0
  975. modules/scak/paper/main.out +31 -0
  976. modules/scak/paper/main.pdf +0 -0
  977. modules/scak/paper/main.tex +482 -0
  978. modules/scak/reproducibility/ABLATIONS.md +225 -0
  979. modules/scak/reproducibility/Dockerfile.reproducibility +34 -0
  980. modules/scak/reproducibility/README.md +421 -0
  981. modules/scak/reproducibility/requirements-pinned.txt +32 -0
  982. modules/scak/reproducibility/run_all_experiments.py +395 -0
  983. modules/scak/reproducibility/seed_control.py +53 -0
  984. modules/scak/reproducibility/statistical_analysis.py +302 -0
  985. modules/scak/requirements.txt +50 -0
  986. modules/scak/setup.py +93 -0
  987. modules/scak/src/__init__.py +124 -0
  988. modules/scak/src/agents/__init__.py +13 -0
  989. modules/scak/src/agents/conflict_resolution.py +732 -0
  990. modules/scak/src/agents/orchestrator.py +761 -0
  991. modules/scak/src/agents/pubsub.py +484 -0
  992. modules/scak/src/agents/shadow_teacher.py +344 -0
  993. modules/scak/src/agents/swarm.py +661 -0
  994. modules/scak/src/agents/worker.py +357 -0
  995. modules/scak/src/integrations/__init__.py +81 -0
  996. modules/scak/src/integrations/cmvk_adapter.py +430 -0
  997. modules/scak/src/integrations/control_plane_adapter.py +601 -0
  998. modules/scak/src/integrations/langchain_integration.py +902 -0
  999. modules/scak/src/interfaces/__init__.py +59 -0
  1000. modules/scak/src/interfaces/llm_clients.py +505 -0
  1001. modules/scak/src/interfaces/openapi_tools.py +611 -0
  1002. modules/scak/src/interfaces/plugin_system.py +605 -0
  1003. modules/scak/src/interfaces/protocols.py +365 -0
  1004. modules/scak/src/interfaces/telemetry.py +464 -0
  1005. modules/scak/src/interfaces/tool_registry.py +547 -0
  1006. modules/scak/src/kernel/__init__.py +100 -0
  1007. modules/scak/src/kernel/auditor.py +305 -0
  1008. modules/scak/src/kernel/circuit_breaker.py +398 -0
  1009. modules/scak/src/kernel/core.py +724 -0
  1010. modules/scak/src/kernel/distributed.py +667 -0
  1011. modules/scak/src/kernel/evolution.py +455 -0
  1012. modules/scak/src/kernel/failover.py +621 -0
  1013. modules/scak/src/kernel/governance.py +710 -0
  1014. modules/scak/src/kernel/governance_v2.py +603 -0
  1015. modules/scak/src/kernel/lazy_evaluator.py +514 -0
  1016. modules/scak/src/kernel/load_testing.py +633 -0
  1017. modules/scak/src/kernel/memory.py +945 -0
  1018. modules/scak/src/kernel/patcher.py +581 -0
  1019. modules/scak/src/kernel/rubric.py +419 -0
  1020. modules/scak/src/kernel/schemas.py +390 -0
  1021. modules/scak/src/kernel/skill_mapper.py +309 -0
  1022. modules/scak/src/kernel/triage.py +149 -0
  1023. modules/scak/src/mocks/__init__.py +99 -0
  1024. modules/scak/tests/__init__.py +1 -0
  1025. modules/scak/tests/test_circuit_breaker.py +403 -0
  1026. modules/scak/tests/test_conflict_resolution.py +287 -0
  1027. modules/scak/tests/test_dual_loop.py +463 -0
  1028. modules/scak/tests/test_enhanced_features.py +421 -0
  1029. modules/scak/tests/test_failover_and_load.py +438 -0
  1030. modules/scak/tests/test_governance.py +185 -0
  1031. modules/scak/tests/test_kernel.py +359 -0
  1032. modules/scak/tests/test_langchain_integration.py +451 -0
  1033. modules/scak/tests/test_lazy_evaluator.py +465 -0
  1034. modules/scak/tests/test_llm_clients.py +122 -0
  1035. modules/scak/tests/test_memory_controller.py +528 -0
  1036. modules/scak/tests/test_orchestrator.py +181 -0
  1037. modules/scak/tests/test_phase3_integration.py +265 -0
  1038. modules/scak/tests/test_pubsub_swarm.py +203 -0
  1039. modules/scak/tests/test_reference_implementations.py +240 -0
  1040. modules/scak/tests/test_rubric.py +363 -0
  1041. modules/scak/tests/test_scak_v2.py +651 -0
  1042. modules/scak/tests/test_skill_mapper.py +217 -0
  1043. modules/scak/tests/test_specific_failures.py +393 -0
  1044. modules/scak/tests/test_tool_registry.py +264 -0
  1045. modules/scak/tests/test_tools_and_plugins.py +303 -0
  1046. modules/scak/tests/test_triage.py +596 -0
  1047. modules/scak/tests/test_write_through.py +319 -0
  1048. agent_os_kernel-1.1.0.dist-info/METADATA +0 -400
  1049. agent_os_kernel-1.1.0.dist-info/RECORD +0 -12
  1050. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/WHEEL +0 -0
  1051. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1172 @@
1
+ """
2
+ MCP Tools for Agent OS Kernel.
3
+
4
+ Exposes CMVK, IATP, code safety, and governed execution as MCP-compatible tools.
5
+ """
6
+
7
+ from dataclasses import dataclass, field
8
+ from typing import Any, Optional, List
9
+ from datetime import datetime
10
+ import hashlib
11
+ import json
12
+ import re
13
+
14
+
15
+ @dataclass
16
+ class ToolResult:
17
+ """Standard result from MCP tool execution."""
18
+ success: bool
19
+ data: Any
20
+ error: Optional[str] = None
21
+ metadata: dict = field(default_factory=dict)
22
+
23
+
24
+ class VerifyCodeSafetyTool:
25
+ """
26
+ Code Safety Verification as MCP Tool.
27
+
28
+ Checks if code is safe to execute by running it through
29
+ the Agent OS policy engine. This is the primary integration
30
+ point for Claude Desktop to verify generated code.
31
+ """
32
+
33
+ name = "verify_code_safety"
34
+ description = "Check if code is safe to execute before running it"
35
+
36
+ input_schema = {
37
+ "type": "object",
38
+ "properties": {
39
+ "code": {
40
+ "type": "string",
41
+ "description": "The code to verify"
42
+ },
43
+ "language": {
44
+ "type": "string",
45
+ "description": "Programming language (e.g., 'python', 'javascript', 'sql')"
46
+ },
47
+ "context": {
48
+ "type": "object",
49
+ "description": "Additional context (file path, project type, etc.)"
50
+ }
51
+ },
52
+ "required": ["code", "language"]
53
+ }
54
+
55
+ # Policy rules for code safety
56
+ SAFETY_RULES = [
57
+ # SQL Destructive Operations
58
+ {
59
+ "name": "drop_table",
60
+ "pattern": r"DROP\s+(TABLE|DATABASE|SCHEMA|INDEX)\s+",
61
+ "severity": "critical",
62
+ "message": "Destructive SQL: DROP operation detected",
63
+ "alternative": "Consider using soft delete or archiving instead of DROP"
64
+ },
65
+ {
66
+ "name": "delete_all",
67
+ "pattern": r"DELETE\s+FROM\s+\w+\s*(;|$|WHERE\s+1\s*=\s*1)",
68
+ "severity": "critical",
69
+ "message": "Destructive SQL: DELETE without proper WHERE clause",
70
+ "alternative": "Add a specific WHERE clause to limit deletion"
71
+ },
72
+ {
73
+ "name": "truncate_table",
74
+ "pattern": r"TRUNCATE\s+TABLE\s+",
75
+ "severity": "critical",
76
+ "message": "Destructive SQL: TRUNCATE operation detected",
77
+ "alternative": "Consider archiving data before truncating"
78
+ },
79
+ # File Operations
80
+ {
81
+ "name": "rm_rf",
82
+ "pattern": r"rm\s+(-rf|-fr|--recursive\s+--force)\s+",
83
+ "severity": "critical",
84
+ "message": "Destructive operation: rm -rf detected",
85
+ "alternative": "Use safer alternatives like trash-cli or move to backup first"
86
+ },
87
+ {
88
+ "name": "rm_root",
89
+ "pattern": r"rm\s+.*\s+(\/|~|\$HOME)",
90
+ "severity": "critical",
91
+ "message": "Destructive operation: Deleting from root or home directory"
92
+ },
93
+ {
94
+ "name": "shutil_rmtree",
95
+ "pattern": r"shutil\s*\.\s*rmtree\s*\(",
96
+ "severity": "high",
97
+ "message": "Recursive directory deletion (shutil.rmtree)",
98
+ "alternative": "Consider using send2trash for safer deletion"
99
+ },
100
+ # Secrets
101
+ {
102
+ "name": "hardcoded_api_key",
103
+ "pattern": r"(api[_-]?key|apikey|api[_-]?secret)\s*[=:]\s*[\"'][a-zA-Z0-9_-]{20,}[\"']",
104
+ "severity": "critical",
105
+ "message": "Hardcoded API key detected",
106
+ "alternative": "Use environment variables: os.environ['API_KEY'] or process.env.API_KEY"
107
+ },
108
+ {
109
+ "name": "hardcoded_password",
110
+ "pattern": r"(password|passwd|pwd)\s*[=:]\s*[\"'][^\"']+[\"']",
111
+ "severity": "critical",
112
+ "message": "Hardcoded password detected",
113
+ "alternative": "Use environment variables or a secrets manager"
114
+ },
115
+ {
116
+ "name": "aws_key",
117
+ "pattern": r"AKIA[0-9A-Z]{16}",
118
+ "severity": "critical",
119
+ "message": "AWS Access Key ID detected in code"
120
+ },
121
+ {
122
+ "name": "private_key",
123
+ "pattern": r"-----BEGIN\s+(RSA|DSA|EC|OPENSSH)\s+PRIVATE\s+KEY-----",
124
+ "severity": "critical",
125
+ "message": "Private key detected in code"
126
+ },
127
+ {
128
+ "name": "github_token",
129
+ "pattern": r"gh[pousr]_[A-Za-z0-9_]{36,}",
130
+ "severity": "critical",
131
+ "message": "GitHub token detected in code"
132
+ },
133
+ # Privilege Escalation
134
+ {
135
+ "name": "sudo",
136
+ "pattern": r"\bsudo\s+",
137
+ "severity": "high",
138
+ "message": "Privilege escalation: sudo command detected",
139
+ "alternative": "Avoid sudo in scripts - run with appropriate permissions"
140
+ },
141
+ {
142
+ "name": "chmod_777",
143
+ "pattern": r"chmod\s+777\s+",
144
+ "severity": "high",
145
+ "message": "Insecure permissions: chmod 777 detected",
146
+ "alternative": "Use more restrictive permissions: chmod 755 or chmod 644"
147
+ },
148
+ {
149
+ "name": "setuid_root",
150
+ "pattern": r"os\s*\.\s*set(e)?uid\s*\(\s*0\s*\)",
151
+ "severity": "critical",
152
+ "message": "Setting UID to root (0) detected"
153
+ },
154
+ # Code Execution
155
+ {
156
+ "name": "eval",
157
+ "pattern": r"\beval\s*\(",
158
+ "severity": "high",
159
+ "message": "Dynamic code execution: eval() detected",
160
+ "alternative": "Use JSON.parse() for data or ast.literal_eval() for Python"
161
+ },
162
+ {
163
+ "name": "exec",
164
+ "pattern": r"\bexec\s*\(",
165
+ "severity": "high",
166
+ "message": "Dynamic code execution: exec() detected",
167
+ "alternative": "Consider safer alternatives to dynamic execution"
168
+ },
169
+ # System Destructive
170
+ {
171
+ "name": "fork_bomb",
172
+ "pattern": r":\s*\(\)\s*\{\s*:\s*\|\s*:\s*&\s*\}\s*;",
173
+ "severity": "critical",
174
+ "message": "Fork bomb detected - would crash system"
175
+ },
176
+ {
177
+ "name": "dd_disk",
178
+ "pattern": r"dd\s+if=.*\s+of=\/dev\/(sd[a-z]|nvme|hd[a-z])",
179
+ "severity": "critical",
180
+ "message": "Direct disk write operation (dd) - could corrupt disk"
181
+ },
182
+ {
183
+ "name": "format_drive",
184
+ "pattern": r"format\s+[a-z]:",
185
+ "severity": "critical",
186
+ "message": "Drive format command detected"
187
+ }
188
+ ]
189
+
190
+ def __init__(self, config: Optional[dict] = None):
191
+ self.config = config or {}
192
+ # Compile regex patterns
193
+ self._compiled_rules = [
194
+ {**rule, "compiled": re.compile(rule["pattern"], re.IGNORECASE)}
195
+ for rule in self.SAFETY_RULES
196
+ ]
197
+
198
+ async def execute(self, arguments: dict) -> ToolResult:
199
+ """Verify code safety."""
200
+ code = arguments.get("code", "")
201
+ language = arguments.get("language", "unknown")
202
+ context = arguments.get("context", {})
203
+
204
+ violations = []
205
+ warnings = []
206
+
207
+ # Check each rule
208
+ for rule in self._compiled_rules:
209
+ if rule["compiled"].search(code):
210
+ violation = {
211
+ "rule": rule["name"],
212
+ "severity": rule["severity"],
213
+ "message": rule["message"]
214
+ }
215
+ if "alternative" in rule:
216
+ violation["alternative"] = rule["alternative"]
217
+
218
+ if rule["severity"] in ("critical", "high"):
219
+ violations.append(violation)
220
+ else:
221
+ warnings.append(violation)
222
+
223
+ # Determine overall safety
224
+ is_safe = len(violations) == 0
225
+
226
+ # Build result
227
+ result = {
228
+ "safe": is_safe,
229
+ "violations": violations,
230
+ "warnings": warnings,
231
+ "language": language,
232
+ "code_length": len(code),
233
+ "rules_checked": len(self._compiled_rules)
234
+ }
235
+
236
+ # Add alternative if blocked
237
+ if not is_safe and violations:
238
+ primary_violation = violations[0]
239
+ if "alternative" in primary_violation:
240
+ result["alternative"] = primary_violation["alternative"]
241
+ result["blocked_reason"] = primary_violation["message"]
242
+
243
+ return ToolResult(
244
+ success=True,
245
+ data=result,
246
+ error=None if is_safe else f"BLOCKED: {violations[0]['message']}",
247
+ metadata={
248
+ "tool": self.name,
249
+ "timestamp": datetime.utcnow().isoformat(),
250
+ "language": language
251
+ }
252
+ )
253
+
254
+
255
+ class CMVKVerifyTool:
256
+ """
257
+ Cross-Model Verification Kernel as MCP Tool.
258
+
259
+ Verifies claims across multiple models to detect hallucinations
260
+ and blind spots through structured disagreement.
261
+ """
262
+
263
+ name = "cmvk_verify"
264
+ description = "Verify a claim across multiple AI models to detect hallucinations"
265
+
266
+ input_schema = {
267
+ "type": "object",
268
+ "properties": {
269
+ "claim": {
270
+ "type": "string",
271
+ "description": "The claim or statement to verify"
272
+ },
273
+ "context": {
274
+ "type": "string",
275
+ "description": "Optional context for the claim"
276
+ },
277
+ "models": {
278
+ "type": "array",
279
+ "items": {"type": "string"},
280
+ "description": "Models to use for verification (default: all configured)"
281
+ },
282
+ "threshold": {
283
+ "type": "number",
284
+ "description": "Agreement threshold (0-1, default: 0.85)"
285
+ }
286
+ },
287
+ "required": ["claim"]
288
+ }
289
+
290
+ def __init__(self, config: Optional[dict] = None):
291
+ self.config = config or {}
292
+ self.default_threshold = self.config.get("threshold", 0.85)
293
+
294
+ async def execute(self, arguments: dict) -> ToolResult:
295
+ """Execute cross-model verification."""
296
+ claim = arguments.get("claim", "")
297
+ context = arguments.get("context", "")
298
+ threshold = arguments.get("threshold", self.default_threshold)
299
+
300
+ # Simulate CMVK verification (in production, calls actual models)
301
+ # This is a stateless operation - no session state maintained
302
+ verification_result = await self._verify_claim(claim, context, threshold)
303
+
304
+ return ToolResult(
305
+ success=True,
306
+ data=verification_result,
307
+ metadata={
308
+ "tool": self.name,
309
+ "timestamp": datetime.utcnow().isoformat(),
310
+ "threshold_used": threshold
311
+ }
312
+ )
313
+
314
+ async def _verify_claim(self, claim: str, context: str, threshold: float) -> dict:
315
+ """
316
+ Perform cross-model verification using drift-based consensus.
317
+
318
+ Algorithm:
319
+ 1. Query each model with the claim
320
+ 2. Calculate pairwise drift between responses
321
+ 3. If max drift > threshold, flag disagreement
322
+ 4. Return consensus response with confidence score
323
+
324
+ In production, this calls actual LLM APIs.
325
+ This implementation provides the interface and algorithm structure.
326
+ """
327
+ import hashlib
328
+
329
+ # Models to verify against
330
+ models = ["gpt-4", "claude-sonnet-4", "gemini-pro"]
331
+
332
+ # In production: Call each model API
333
+ # responses = [await call_model(m, claim) for m in models]
334
+
335
+ # For demo: Generate deterministic mock responses
336
+ claim_hash = int(hashlib.md5(claim.encode()).hexdigest()[:8], 16)
337
+
338
+ # Simulate model responses (in production, actual API calls)
339
+ responses = []
340
+ for i, model in enumerate(models):
341
+ response_hash = (claim_hash + i * 12345) % 1000000
342
+ responses.append({
343
+ "model": model,
344
+ "response": f"Response from {model}",
345
+ "latency_ms": 500 + (response_hash % 500)
346
+ })
347
+
348
+ # Calculate pairwise drift scores
349
+ # Drift = 0.0 (identical) to 1.0 (completely different)
350
+ drift_scores = []
351
+ for i in range(len(responses)):
352
+ for j in range(i + 1, len(responses)):
353
+ # In production: Use embedding similarity or semantic comparison
354
+ # drift = cosine_distance(embed(r_i), embed(r_j))
355
+ # For demo: deterministic based on hash
356
+ pair_hash = (claim_hash + i * 100 + j * 10) % 100
357
+ drift = pair_hash / 100 * 0.3 # 0.0 to 0.3 range
358
+ drift_scores.append({
359
+ "pair": (responses[i]["model"], responses[j]["model"]),
360
+ "drift": round(drift, 3)
361
+ })
362
+
363
+ max_drift = max(d["drift"] for d in drift_scores) if drift_scores else 0.0
364
+ avg_drift = sum(d["drift"] for d in drift_scores) / len(drift_scores) if drift_scores else 0.0
365
+
366
+ # Drift-based decision
367
+ # High drift = disagreement = low confidence
368
+ disagreement_threshold = 1.0 - threshold # threshold is agreement, so invert
369
+ disagreement_detected = max_drift > disagreement_threshold
370
+
371
+ confidence = 1.0 - avg_drift
372
+ verified = not disagreement_detected and confidence >= threshold
373
+
374
+ return {
375
+ "verified": verified,
376
+ "confidence": round(confidence, 3),
377
+ "drift_score": round(max_drift, 3),
378
+ "avg_drift": round(avg_drift, 3),
379
+ "models_checked": models,
380
+ "drift_details": drift_scores,
381
+ "disagreement_detected": disagreement_detected,
382
+ "consensus_method": "drift_threshold",
383
+ "threshold_used": threshold,
384
+ "interpretation": self._interpret_result(verified, confidence, max_drift)
385
+ }
386
+
387
+ def _interpret_result(self, verified: bool, confidence: float, max_drift: float) -> str:
388
+ """Generate human-readable interpretation of verification result."""
389
+ if verified and confidence > 0.9:
390
+ return "Strong consensus across all models. High confidence in claim validity."
391
+ elif verified and confidence > 0.7:
392
+ return "Models agree with moderate confidence. Claim appears valid."
393
+ elif not verified and max_drift > 0.25:
394
+ return "Significant disagreement between models. Claim requires manual review."
395
+ else:
396
+ return "Weak consensus. Consider additional verification."
397
+
398
+
399
+ class KernelExecuteTool:
400
+ """
401
+ Governed Execution through Agent OS Kernel.
402
+
403
+ Executes actions with policy enforcement, signal handling,
404
+ and audit logging. Stateless - all context in request.
405
+ """
406
+
407
+ name = "kernel_execute"
408
+ description = "Execute an action through the Agent OS kernel with policy enforcement"
409
+
410
+ input_schema = {
411
+ "type": "object",
412
+ "properties": {
413
+ "action": {
414
+ "type": "string",
415
+ "description": "The action to execute (e.g., 'database_query', 'file_write')"
416
+ },
417
+ "params": {
418
+ "type": "object",
419
+ "description": "Parameters for the action"
420
+ },
421
+ "agent_id": {
422
+ "type": "string",
423
+ "description": "ID of the agent making the request"
424
+ },
425
+ "policies": {
426
+ "type": "array",
427
+ "items": {"type": "string"},
428
+ "description": "Policy names to enforce (e.g., ['read_only', 'no_pii'])"
429
+ },
430
+ "context": {
431
+ "type": "object",
432
+ "description": "Execution context (history, state, etc.)"
433
+ }
434
+ },
435
+ "required": ["action", "agent_id"]
436
+ }
437
+
438
+ # Action policies (in production, loaded from config)
439
+ DEFAULT_POLICIES = {
440
+ "database_query": {"allowed_modes": ["read_only", "read_write"]},
441
+ "file_write": {"requires_approval": True, "allowed_paths": ["/tmp", "/data"]},
442
+ "api_call": {"rate_limit": 100, "allowed_domains": ["*"]},
443
+ "send_email": {"requires_approval": True},
444
+ }
445
+
446
+ def __init__(self, config: Optional[dict] = None):
447
+ self.config = config or {}
448
+ self.policy_mode = self.config.get("policy_mode", "strict")
449
+
450
+ async def execute(self, arguments: dict) -> ToolResult:
451
+ """Execute action with kernel governance."""
452
+ action = arguments.get("action", "")
453
+ params = arguments.get("params", {})
454
+ agent_id = arguments.get("agent_id", "unknown")
455
+ policies = arguments.get("policies", [])
456
+ context = arguments.get("context", {})
457
+
458
+ # Policy check (stateless - all info in request)
459
+ policy_result = self._check_policies(action, params, policies)
460
+
461
+ if not policy_result["allowed"]:
462
+ return ToolResult(
463
+ success=False,
464
+ data=None,
465
+ error=f"SIGKILL: Policy violation - {policy_result['reason']}",
466
+ metadata={
467
+ "tool": self.name,
468
+ "agent_id": agent_id,
469
+ "action": action,
470
+ "signal": "SIGKILL",
471
+ "violation": policy_result["reason"],
472
+ "timestamp": datetime.utcnow().isoformat()
473
+ }
474
+ )
475
+
476
+ # Execute action (in production, dispatches to actual handlers)
477
+ execution_result = await self._execute_action(action, params, context)
478
+
479
+ return ToolResult(
480
+ success=True,
481
+ data=execution_result,
482
+ metadata={
483
+ "tool": self.name,
484
+ "agent_id": agent_id,
485
+ "action": action,
486
+ "policies_applied": policies,
487
+ "timestamp": datetime.utcnow().isoformat()
488
+ }
489
+ )
490
+
491
+ def _check_policies(self, action: str, params: dict, policies: list) -> dict:
492
+ """Check if action is allowed under given policies."""
493
+ action_policy = self.DEFAULT_POLICIES.get(action, {})
494
+
495
+ # Check read_only policy
496
+ if "read_only" in policies:
497
+ if action in ["file_write", "send_email"]:
498
+ return {"allowed": False, "reason": f"Action '{action}' blocked by read_only policy"}
499
+ if action == "database_query" and params.get("query", "").upper().startswith(("INSERT", "UPDATE", "DELETE")):
500
+ return {"allowed": False, "reason": "Write query blocked by read_only policy"}
501
+
502
+ # Check requires_approval
503
+ if action_policy.get("requires_approval") and not params.get("approved"):
504
+ return {"allowed": False, "reason": f"Action '{action}' requires approval"}
505
+
506
+ # Check no_pii policy
507
+ if "no_pii" in policies:
508
+ pii_keywords = ["ssn", "social_security", "credit_card", "password"]
509
+ params_str = json.dumps(params).lower()
510
+ for keyword in pii_keywords:
511
+ if keyword in params_str:
512
+ return {"allowed": False, "reason": f"PII detected ({keyword}) - blocked by no_pii policy"}
513
+
514
+ return {"allowed": True, "reason": None}
515
+
516
+ async def _execute_action(self, action: str, params: dict, context: dict) -> dict:
517
+ """Execute the action (stub - real implementation dispatches to handlers)."""
518
+ return {
519
+ "status": "executed",
520
+ "action": action,
521
+ "result": f"Action '{action}' executed successfully",
522
+ "params_received": list(params.keys())
523
+ }
524
+
525
+
526
+ class IATPSignTool:
527
+ """
528
+ Inter-Agent Trust Protocol signing as MCP Tool.
529
+
530
+ Signs agent outputs with cryptographic attestation for
531
+ trust propagation across agent networks.
532
+ """
533
+
534
+ name = "iatp_sign"
535
+ description = "Sign content with cryptographic trust attestation for inter-agent communication"
536
+
537
+ input_schema = {
538
+ "type": "object",
539
+ "properties": {
540
+ "content": {
541
+ "type": "string",
542
+ "description": "Content to sign"
543
+ },
544
+ "agent_id": {
545
+ "type": "string",
546
+ "description": "ID of the signing agent"
547
+ },
548
+ "capabilities": {
549
+ "type": "array",
550
+ "items": {"type": "string"},
551
+ "description": "Capabilities being attested (e.g., ['reversible', 'idempotent'])"
552
+ },
553
+ "metadata": {
554
+ "type": "object",
555
+ "description": "Additional metadata to include in signature"
556
+ }
557
+ },
558
+ "required": ["content", "agent_id"]
559
+ }
560
+
561
+ def __init__(self, config: Optional[dict] = None):
562
+ self.config = config or {}
563
+
564
+ async def execute(self, arguments: dict) -> ToolResult:
565
+ """Sign content with IATP attestation."""
566
+ content = arguments.get("content", "")
567
+ agent_id = arguments.get("agent_id", "")
568
+ capabilities = arguments.get("capabilities", [])
569
+ metadata = arguments.get("metadata", {})
570
+
571
+ # Generate signature
572
+ signature = self._generate_signature(content, agent_id, capabilities)
573
+
574
+ return ToolResult(
575
+ success=True,
576
+ data={
577
+ "signature": signature,
578
+ "agent_id": agent_id,
579
+ "capabilities": capabilities,
580
+ "content_hash": hashlib.sha256(content.encode()).hexdigest()[:16],
581
+ "timestamp": datetime.utcnow().isoformat(),
582
+ "protocol_version": "iatp-1.0"
583
+ },
584
+ metadata={
585
+ "tool": self.name,
586
+ "timestamp": datetime.utcnow().isoformat()
587
+ }
588
+ )
589
+
590
+ def _generate_signature(self, content: str, agent_id: str, capabilities: list) -> str:
591
+ """Generate IATP signature (simplified - production uses proper crypto)."""
592
+ payload = f"{content}|{agent_id}|{','.join(sorted(capabilities))}"
593
+ return hashlib.sha256(payload.encode()).hexdigest()
594
+
595
+
596
+ class IATPVerifyTool:
597
+ """
598
+ IATP Trust Verification as MCP Tool.
599
+
600
+ Verifies trust relationship with a remote agent, checking:
601
+ - Capability manifest
602
+ - Attestation signature
603
+ - Trust level requirements
604
+ - Policy compatibility
605
+ """
606
+
607
+ name = "iatp_verify"
608
+ description = "Verify trust relationship with another agent before communication"
609
+
610
+ input_schema = {
611
+ "type": "object",
612
+ "properties": {
613
+ "remote_agent_id": {
614
+ "type": "string",
615
+ "description": "ID of the agent to verify"
616
+ },
617
+ "required_trust_level": {
618
+ "type": "string",
619
+ "enum": ["verified_partner", "trusted", "standard", "any"],
620
+ "description": "Minimum required trust level (default: standard)"
621
+ },
622
+ "required_scopes": {
623
+ "type": "array",
624
+ "items": {"type": "string"},
625
+ "description": "Required capability scopes (e.g., ['repo:read'])"
626
+ },
627
+ "data_classification": {
628
+ "type": "string",
629
+ "enum": ["public", "internal", "confidential", "pii"],
630
+ "description": "Classification of data being shared"
631
+ }
632
+ },
633
+ "required": ["remote_agent_id"]
634
+ }
635
+
636
+ # Trust level scores
637
+ TRUST_SCORES = {
638
+ "verified_partner": 10,
639
+ "trusted": 7,
640
+ "standard": 5,
641
+ "unknown": 2,
642
+ "untrusted": 0
643
+ }
644
+
645
+ # Minimum scores required
646
+ MIN_SCORES = {
647
+ "verified_partner": 10,
648
+ "trusted": 7,
649
+ "standard": 5,
650
+ "any": 0
651
+ }
652
+
653
+ def __init__(self, config: Optional[dict] = None):
654
+ self.config = config or {}
655
+ # Agent registry (in production, fetched from network)
656
+ self.agent_registry = self.config.get("agent_registry", {})
657
+
658
+ async def execute(self, arguments: dict) -> ToolResult:
659
+ """Verify trust with remote agent."""
660
+ remote_agent_id = arguments.get("remote_agent_id", "")
661
+ required_level = arguments.get("required_trust_level", "standard")
662
+ required_scopes = arguments.get("required_scopes", [])
663
+ data_classification = arguments.get("data_classification", "internal")
664
+
665
+ # Fetch manifest (simulated - real impl fetches from /.well-known/agent-manifest)
666
+ manifest = await self._fetch_manifest(remote_agent_id)
667
+
668
+ if manifest is None:
669
+ return ToolResult(
670
+ success=False,
671
+ data=None,
672
+ error=f"Could not fetch manifest for agent '{remote_agent_id}'"
673
+ )
674
+
675
+ # Calculate trust score
676
+ trust_score = self._calculate_trust_score(manifest)
677
+ min_required = self.MIN_SCORES.get(required_level, 5)
678
+
679
+ # Check trust level
680
+ if trust_score < min_required:
681
+ return ToolResult(
682
+ success=False,
683
+ data={
684
+ "verified": False,
685
+ "trust_score": trust_score,
686
+ "required_score": min_required,
687
+ "manifest": manifest
688
+ },
689
+ error=f"Trust score {trust_score} below required {min_required}"
690
+ )
691
+
692
+ # Check required scopes
693
+ agent_scopes = manifest.get("scopes", [])
694
+ missing_scopes = [s for s in required_scopes if s not in agent_scopes]
695
+ if missing_scopes:
696
+ return ToolResult(
697
+ success=False,
698
+ data={
699
+ "verified": False,
700
+ "trust_score": trust_score,
701
+ "missing_scopes": missing_scopes
702
+ },
703
+ error=f"Agent missing required scopes: {missing_scopes}"
704
+ )
705
+
706
+ # Check PII restrictions
707
+ if data_classification == "pii":
708
+ retention = manifest.get("privacy", {}).get("retention_policy", "permanent")
709
+ if retention != "ephemeral":
710
+ return ToolResult(
711
+ success=False,
712
+ data={
713
+ "verified": False,
714
+ "trust_score": trust_score,
715
+ "reason": "PII requires ephemeral retention"
716
+ },
717
+ error="Cannot share PII with non-ephemeral agent"
718
+ )
719
+
720
+ # Verification passed
721
+ return ToolResult(
722
+ success=True,
723
+ data={
724
+ "verified": True,
725
+ "remote_agent_id": remote_agent_id,
726
+ "trust_score": trust_score,
727
+ "trust_level": manifest.get("trust_level", "unknown"),
728
+ "scopes": agent_scopes,
729
+ "attestation_valid": True,
730
+ "policy_compatible": True
731
+ },
732
+ metadata={
733
+ "tool": self.name,
734
+ "timestamp": datetime.utcnow().isoformat()
735
+ }
736
+ )
737
+
738
+ async def _fetch_manifest(self, agent_id: str) -> Optional[dict]:
739
+ """Fetch manifest from agent (simulated)."""
740
+ # In production, this would HTTP GET /.well-known/agent-manifest
741
+ if agent_id in self.agent_registry:
742
+ return self.agent_registry[agent_id]
743
+
744
+ # Return simulated manifest for demo
745
+ return {
746
+ "agent_id": agent_id,
747
+ "trust_level": "standard",
748
+ "scopes": ["data:read", "data:write"],
749
+ "capabilities": {
750
+ "idempotency": True,
751
+ "max_concurrency": 10
752
+ },
753
+ "reversibility": {
754
+ "level": "full",
755
+ "undo_window_seconds": 3600
756
+ },
757
+ "privacy": {
758
+ "retention_policy": "ephemeral",
759
+ "human_in_loop": False,
760
+ "training_consent": False
761
+ }
762
+ }
763
+
764
+ def _calculate_trust_score(self, manifest: dict) -> int:
765
+ """Calculate trust score from manifest."""
766
+ base = self.TRUST_SCORES.get(manifest.get("trust_level", "unknown"), 2)
767
+
768
+ # Modifiers
769
+ reversibility = manifest.get("reversibility", {}).get("level", "none")
770
+ if reversibility != "none":
771
+ base += 2
772
+
773
+ privacy = manifest.get("privacy", {})
774
+ retention = privacy.get("retention_policy", "permanent")
775
+ if retention == "ephemeral":
776
+ base += 1
777
+ elif retention in ("permanent", "forever"):
778
+ base -= 1
779
+
780
+ if privacy.get("human_in_loop", False):
781
+ base -= 2
782
+
783
+ if privacy.get("training_consent", False):
784
+ base -= 1
785
+
786
+ return max(0, min(10, base))
787
+
788
+
789
+ class IATPReputationTool:
790
+ """
791
+ IATP Reputation Query/Slash as MCP Tool.
792
+
793
+ Query or modify agent reputation in the network.
794
+ """
795
+
796
+ name = "iatp_reputation"
797
+ description = "Query or slash agent reputation in the IATP network"
798
+
799
+ input_schema = {
800
+ "type": "object",
801
+ "properties": {
802
+ "action": {
803
+ "type": "string",
804
+ "enum": ["query", "slash"],
805
+ "description": "Action to perform"
806
+ },
807
+ "agent_id": {
808
+ "type": "string",
809
+ "description": "Agent ID to query/slash"
810
+ },
811
+ "slash_reason": {
812
+ "type": "string",
813
+ "description": "Reason for slashing (required if action=slash)"
814
+ },
815
+ "slash_severity": {
816
+ "type": "string",
817
+ "enum": ["critical", "high", "medium", "low"],
818
+ "description": "Severity of violation (required if action=slash)"
819
+ },
820
+ "evidence": {
821
+ "type": "object",
822
+ "description": "Evidence for the slash (e.g., CMVK drift score)"
823
+ }
824
+ },
825
+ "required": ["action", "agent_id"]
826
+ }
827
+
828
+ # Severity penalties
829
+ SLASH_PENALTIES = {
830
+ "critical": 2.0,
831
+ "high": 1.0,
832
+ "medium": 0.5,
833
+ "low": 0.25
834
+ }
835
+
836
+ def __init__(self, config: Optional[dict] = None):
837
+ self.config = config or {}
838
+ # In-memory reputation store (production uses distributed store)
839
+ self._reputation: dict = {}
840
+
841
+ async def execute(self, arguments: dict) -> ToolResult:
842
+ """Execute reputation action."""
843
+ action = arguments.get("action", "query")
844
+ agent_id = arguments.get("agent_id", "")
845
+
846
+ if action == "query":
847
+ return await self._query_reputation(agent_id)
848
+ elif action == "slash":
849
+ reason = arguments.get("slash_reason", "unknown")
850
+ severity = arguments.get("slash_severity", "medium")
851
+ evidence = arguments.get("evidence", {})
852
+ return await self._slash_reputation(agent_id, reason, severity, evidence)
853
+ else:
854
+ return ToolResult(
855
+ success=False,
856
+ data=None,
857
+ error=f"Unknown action: {action}"
858
+ )
859
+
860
+ async def _query_reputation(self, agent_id: str) -> ToolResult:
861
+ """Query agent reputation."""
862
+ score = self._reputation.get(agent_id, 5.0) # Default to 5.0
863
+
864
+ # Determine trust level from score
865
+ if score >= 8.0:
866
+ level = "verified_partner"
867
+ elif score >= 6.0:
868
+ level = "trusted"
869
+ elif score >= 4.0:
870
+ level = "standard"
871
+ elif score >= 2.0:
872
+ level = "unknown"
873
+ else:
874
+ level = "untrusted"
875
+
876
+ return ToolResult(
877
+ success=True,
878
+ data={
879
+ "agent_id": agent_id,
880
+ "reputation_score": round(score, 2),
881
+ "trust_level": level,
882
+ "history_count": 0 # Would track actual history
883
+ }
884
+ )
885
+
886
+ async def _slash_reputation(
887
+ self, agent_id: str, reason: str, severity: str, evidence: dict
888
+ ) -> ToolResult:
889
+ """Slash agent reputation."""
890
+ current = self._reputation.get(agent_id, 5.0)
891
+ penalty = self.SLASH_PENALTIES.get(severity, 0.5)
892
+ new_score = max(0.0, current - penalty)
893
+
894
+ self._reputation[agent_id] = new_score
895
+
896
+ return ToolResult(
897
+ success=True,
898
+ data={
899
+ "agent_id": agent_id,
900
+ "previous_score": round(current, 2),
901
+ "new_score": round(new_score, 2),
902
+ "penalty_applied": penalty,
903
+ "reason": reason,
904
+ "severity": severity,
905
+ "evidence": evidence
906
+ },
907
+ metadata={
908
+ "tool": self.name,
909
+ "action": "slash",
910
+ "timestamp": datetime.utcnow().isoformat()
911
+ }
912
+ )
913
+
914
+
915
+ class CMVKReviewCodeTool:
916
+ """
917
+ CMVK Code Review as MCP Tool.
918
+
919
+ Performs multi-model code review for security, bugs, and best practices.
920
+ This is optimized for code analysis rather than general claim verification.
921
+ """
922
+
923
+ name = "cmvk_review"
924
+ description = "Multi-model code review for security, bugs, and best practices"
925
+
926
+ input_schema = {
927
+ "type": "object",
928
+ "properties": {
929
+ "code": {
930
+ "type": "string",
931
+ "description": "The code to review"
932
+ },
933
+ "language": {
934
+ "type": "string",
935
+ "description": "Programming language"
936
+ },
937
+ "models": {
938
+ "type": "array",
939
+ "items": {"type": "string"},
940
+ "description": "Models to use for review (default: ['gpt-4', 'claude-sonnet-4', 'gemini-pro'])"
941
+ },
942
+ "focus": {
943
+ "type": "array",
944
+ "items": {"type": "string"},
945
+ "description": "Areas to focus on: 'security', 'bugs', 'performance', 'style'"
946
+ }
947
+ },
948
+ "required": ["code"]
949
+ }
950
+
951
+ def __init__(self, config: Optional[dict] = None):
952
+ self.config = config or {}
953
+
954
+ async def execute(self, arguments: dict) -> ToolResult:
955
+ """Execute code review."""
956
+ code = arguments.get("code", "")
957
+ language = arguments.get("language", "unknown")
958
+ models = arguments.get("models", ["gpt-4", "claude-sonnet-4", "gemini-pro"])
959
+ focus = arguments.get("focus", ["security", "bugs"])
960
+
961
+ # Perform static analysis first
962
+ issues = self._static_analysis(code, language, focus)
963
+
964
+ # Generate mock multi-model reviews (production calls real APIs)
965
+ model_results = []
966
+ for model in models:
967
+ # Vary results per model to simulate disagreement
968
+ model_issues = [i for i in issues if hash(model + i["issue"]) % 3 != 0]
969
+ passed = len(model_issues) == 0
970
+
971
+ model_results.append({
972
+ "model": model,
973
+ "passed": passed,
974
+ "issues": model_issues,
975
+ "summary": "No issues found" if passed else f"Found {len(model_issues)} issue(s)"
976
+ })
977
+
978
+ # Calculate consensus
979
+ passed_count = sum(1 for m in model_results if m["passed"])
980
+ consensus = passed_count / len(models) if models else 1.0
981
+
982
+ # Build recommendations
983
+ all_issues = []
984
+ for m in model_results:
985
+ for issue in m.get("issues", []):
986
+ if issue not in all_issues:
987
+ all_issues.append(issue)
988
+
989
+ recommendation = ""
990
+ if all_issues:
991
+ recommendation = "Based on multi-model review:\n"
992
+ for i, issue in enumerate(all_issues[:5], 1): # Top 5 issues
993
+ recommendation += f"{i}. {issue['issue']}: {issue.get('fix', 'Review needed')}\n"
994
+
995
+ return ToolResult(
996
+ success=True,
997
+ data={
998
+ "consensus": round(consensus, 2),
999
+ "reviews": model_results,
1000
+ "issues": all_issues,
1001
+ "recommendation": recommendation,
1002
+ "models_used": models,
1003
+ "language": language,
1004
+ "focus_areas": focus
1005
+ },
1006
+ metadata={
1007
+ "tool": self.name,
1008
+ "timestamp": datetime.utcnow().isoformat()
1009
+ }
1010
+ )
1011
+
1012
+ def _static_analysis(self, code: str, language: str, focus: List[str]) -> List[dict]:
1013
+ """Perform basic static analysis."""
1014
+ issues = []
1015
+
1016
+ if "security" in focus:
1017
+ # SQL injection
1018
+ if re.search(r'\+\s*["\'][^"\']*\+', code) and re.search(r'SELECT|INSERT|UPDATE|DELETE', code, re.I):
1019
+ issues.append({
1020
+ "category": "security",
1021
+ "severity": "high",
1022
+ "issue": "Potential SQL injection via string concatenation",
1023
+ "fix": "Use parameterized queries or an ORM"
1024
+ })
1025
+
1026
+ # eval usage
1027
+ if re.search(r'\beval\s*\(', code):
1028
+ issues.append({
1029
+ "category": "security",
1030
+ "severity": "high",
1031
+ "issue": "eval() usage is dangerous",
1032
+ "fix": "Use JSON.parse() or ast.literal_eval() for data parsing"
1033
+ })
1034
+
1035
+ # innerHTML
1036
+ if re.search(r'\.innerHTML\s*=', code):
1037
+ issues.append({
1038
+ "category": "security",
1039
+ "severity": "medium",
1040
+ "issue": "innerHTML assignment may lead to XSS",
1041
+ "fix": "Use textContent or a sanitization library"
1042
+ })
1043
+
1044
+ if "bugs" in focus:
1045
+ # Missing error handling
1046
+ if re.search(r'await\s+\w+', code) and not re.search(r'try\s*{', code):
1047
+ issues.append({
1048
+ "category": "bugs",
1049
+ "severity": "medium",
1050
+ "issue": "Async operation without error handling",
1051
+ "fix": "Wrap in try-catch block"
1052
+ })
1053
+
1054
+ # Division by zero potential
1055
+ if re.search(r'/\s*\w+', code) and not re.search(r'if.*[!=]=\s*0', code):
1056
+ issues.append({
1057
+ "category": "bugs",
1058
+ "severity": "low",
1059
+ "issue": "Potential division by zero",
1060
+ "fix": "Add zero check before division"
1061
+ })
1062
+
1063
+ if "performance" in focus:
1064
+ # Synchronous file operations
1065
+ if re.search(r'Sync\s*\(', code):
1066
+ issues.append({
1067
+ "category": "performance",
1068
+ "severity": "medium",
1069
+ "issue": "Synchronous file operation",
1070
+ "fix": "Use async alternatives to avoid blocking"
1071
+ })
1072
+
1073
+ # N+1 query pattern
1074
+ if re.search(r'for.*await.*query', code, re.I):
1075
+ issues.append({
1076
+ "category": "performance",
1077
+ "severity": "high",
1078
+ "issue": "Potential N+1 query pattern",
1079
+ "fix": "Use batch queries or eager loading"
1080
+ })
1081
+
1082
+ return issues
1083
+
1084
+
1085
+ class GetAuditLogTool:
1086
+ """
1087
+ Audit Log Retrieval as MCP Tool.
1088
+
1089
+ Retrieves the Agent OS audit trail for compliance and debugging.
1090
+ """
1091
+
1092
+ name = "get_audit_log"
1093
+ description = "Retrieve Agent OS audit trail"
1094
+
1095
+ input_schema = {
1096
+ "type": "object",
1097
+ "properties": {
1098
+ "limit": {
1099
+ "type": "number",
1100
+ "description": "Maximum number of entries to return (default: 20)"
1101
+ },
1102
+ "filter": {
1103
+ "type": "object",
1104
+ "description": "Filter criteria",
1105
+ "properties": {
1106
+ "agent_id": {"type": "string"},
1107
+ "type": {
1108
+ "type": "string",
1109
+ "enum": ["blocked", "allowed", "cmvk_review", "all"]
1110
+ },
1111
+ "since": {"type": "string", "description": "ISO timestamp"}
1112
+ }
1113
+ }
1114
+ }
1115
+ }
1116
+
1117
+ # In-memory audit log (production uses external store)
1118
+ _audit_log: List[dict] = []
1119
+
1120
+ def __init__(self, config: Optional[dict] = None):
1121
+ self.config = config or {}
1122
+
1123
+ @classmethod
1124
+ def log_entry(cls, entry: dict):
1125
+ """Add entry to audit log."""
1126
+ entry["timestamp"] = datetime.utcnow().isoformat()
1127
+ cls._audit_log.insert(0, entry)
1128
+ # Keep last 1000 entries
1129
+ if len(cls._audit_log) > 1000:
1130
+ cls._audit_log = cls._audit_log[:1000]
1131
+
1132
+ async def execute(self, arguments: dict) -> ToolResult:
1133
+ """Retrieve audit log entries."""
1134
+ limit = arguments.get("limit", 20)
1135
+ filter_criteria = arguments.get("filter", {})
1136
+
1137
+ # Filter entries
1138
+ entries = self._audit_log.copy()
1139
+
1140
+ if filter_criteria.get("agent_id"):
1141
+ entries = [e for e in entries if e.get("agent_id") == filter_criteria["agent_id"]]
1142
+
1143
+ if filter_criteria.get("type") and filter_criteria["type"] != "all":
1144
+ entries = [e for e in entries if e.get("type") == filter_criteria["type"]]
1145
+
1146
+ if filter_criteria.get("since"):
1147
+ since = filter_criteria["since"]
1148
+ entries = [e for e in entries if e.get("timestamp", "") >= since]
1149
+
1150
+ # Apply limit
1151
+ entries = entries[:limit]
1152
+
1153
+ # Calculate stats
1154
+ blocked_count = sum(1 for e in self._audit_log if e.get("type") == "blocked")
1155
+ total_count = len(self._audit_log)
1156
+
1157
+ return ToolResult(
1158
+ success=True,
1159
+ data={
1160
+ "logs": entries,
1161
+ "returned": len(entries),
1162
+ "total": total_count,
1163
+ "stats": {
1164
+ "blocked_total": blocked_count,
1165
+ "allowed_total": total_count - blocked_count
1166
+ }
1167
+ },
1168
+ metadata={
1169
+ "tool": self.name,
1170
+ "timestamp": datetime.utcnow().isoformat()
1171
+ }
1172
+ )