agent-os-kernel 1.1.0__py3-none-any.whl → 1.2.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.2.0.dist-info/METADATA +676 -0
  10. agent_os_kernel-1.2.0.dist-info/RECORD +1053 -0
  11. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.2.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.2.0.dist-info}/WHEEL +0 -0
  1051. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.2.0.dist-info}/licenses/LICENSE +0 -0
agent_os/cli.py CHANGED
@@ -2,43 +2,1103 @@
2
2
  Agent OS CLI - Command line interface for Agent OS
3
3
 
4
4
  Usage:
5
- agentctl status # Check installation status
6
- agentctl kernel start # Start kernel (future)
7
- agentctl agent list # List agents (future)
5
+ agentos init [--template TEMPLATE] Initialize .agents/ directory
6
+ agentos secure [--policy POLICY] Enable kernel governance
7
+ agentos audit [--format FORMAT] Audit agent security
8
+ agentos status Show kernel status
9
+ agentos check <file> Check file for safety violations
10
+ agentos review <file> [--cmvk] Multi-model code review
11
+ agentos validate [files] Validate policy YAML files
12
+ agentos install-hooks Install git pre-commit hooks
8
13
  """
9
14
 
10
15
  import argparse
16
+ import json
17
+ import os
18
+ import re
19
+ import subprocess
11
20
  import sys
21
+ from pathlib import Path
22
+ from typing import Optional, List, Dict, Tuple
23
+
24
+
25
+ # ============================================================================
26
+ # Terminal Colors & Formatting
27
+ # ============================================================================
28
+
29
+ class Colors:
30
+ """ANSI color codes for terminal output."""
31
+ RED = '\033[91m'
32
+ GREEN = '\033[92m'
33
+ YELLOW = '\033[93m'
34
+ BLUE = '\033[94m'
35
+ MAGENTA = '\033[95m'
36
+ CYAN = '\033[96m'
37
+ WHITE = '\033[97m'
38
+ BOLD = '\033[1m'
39
+ DIM = '\033[2m'
40
+ RESET = '\033[0m'
41
+
42
+ @classmethod
43
+ def disable(cls):
44
+ """Disable colors (for CI/non-TTY environments)."""
45
+ cls.RED = cls.GREEN = cls.YELLOW = cls.BLUE = ''
46
+ cls.MAGENTA = cls.CYAN = cls.WHITE = cls.BOLD = cls.DIM = cls.RESET = ''
47
+
48
+
49
+ def supports_color():
50
+ """Check if terminal supports colors."""
51
+ if os.environ.get('NO_COLOR') or os.environ.get('CI'):
52
+ return False
53
+ return sys.stdout.isatty()
54
+
55
+
56
+ if not supports_color():
57
+ Colors.disable()
58
+
59
+
60
+ # ============================================================================
61
+ # Policy Engine (Local Code Analysis)
62
+ # ============================================================================
63
+
64
+ class PolicyViolation:
65
+ """Represents a policy violation found in code."""
66
+ def __init__(self, line: int, code: str, violation: str, policy: str,
67
+ severity: str = 'high', suggestion: str = None):
68
+ self.line = line
69
+ self.code = code
70
+ self.violation = violation
71
+ self.policy = policy
72
+ self.severity = severity
73
+ self.suggestion = suggestion
74
+
75
+
76
+ class PolicyChecker:
77
+ """Local-first code policy checker."""
78
+
79
+ def __init__(self):
80
+ self.rules = self._load_default_rules()
81
+
82
+ def _load_default_rules(self) -> List[Dict]:
83
+ """Load default safety rules."""
84
+ return [
85
+ # Destructive SQL
86
+ {
87
+ 'name': 'block-destructive-sql',
88
+ 'pattern': r'\bDROP\s+(TABLE|DATABASE|SCHEMA|INDEX)\s+',
89
+ 'message': 'Destructive SQL: DROP operation detected',
90
+ 'severity': 'critical',
91
+ 'suggestion': '-- Consider using soft delete or archiving instead',
92
+ 'languages': ['sql', 'python', 'javascript', 'typescript', 'php', 'ruby', 'java']
93
+ },
94
+ {
95
+ 'name': 'block-destructive-sql',
96
+ 'pattern': r'\bDELETE\s+FROM\s+\w+\s*(;|$|WHERE\s+1\s*=\s*1)',
97
+ 'message': 'Destructive SQL: DELETE without proper WHERE clause',
98
+ 'severity': 'critical',
99
+ 'suggestion': '-- Add a specific WHERE clause to limit deletion',
100
+ 'languages': ['sql', 'python', 'javascript', 'typescript', 'php', 'ruby', 'java']
101
+ },
102
+ {
103
+ 'name': 'block-destructive-sql',
104
+ 'pattern': r'\bTRUNCATE\s+TABLE\s+',
105
+ 'message': 'Destructive SQL: TRUNCATE operation detected',
106
+ 'severity': 'critical',
107
+ 'suggestion': '-- Consider archiving data before truncating',
108
+ 'languages': ['sql', 'python', 'javascript', 'typescript', 'php', 'ruby', 'java']
109
+ },
110
+ # File deletion
111
+ {
112
+ 'name': 'block-file-deletes',
113
+ 'pattern': r'\brm\s+(-rf|-fr|--recursive\s+--force)\s+',
114
+ 'message': 'Destructive operation: Recursive force delete (rm -rf)',
115
+ 'severity': 'critical',
116
+ 'suggestion': '# Use safer alternatives like trash-cli or move to backup',
117
+ 'languages': ['bash', 'shell', 'sh', 'zsh']
118
+ },
119
+ {
120
+ 'name': 'block-file-deletes',
121
+ 'pattern': r'\bshutil\s*\.\s*rmtree\s*\(',
122
+ 'message': 'Recursive directory deletion (shutil.rmtree)',
123
+ 'severity': 'high',
124
+ 'suggestion': '# Consider using send2trash for safer deletion',
125
+ 'languages': ['python']
126
+ },
127
+ {
128
+ 'name': 'block-file-deletes',
129
+ 'pattern': r'\bos\s*\.\s*(remove|unlink|rmdir)\s*\(',
130
+ 'message': 'File/directory deletion operation detected',
131
+ 'severity': 'medium',
132
+ 'languages': ['python']
133
+ },
134
+ # Secret exposure
135
+ {
136
+ 'name': 'block-secret-exposure',
137
+ 'pattern': r'(api[_-]?key|apikey|api[_-]?secret)\s*[=:]\s*["\'][a-zA-Z0-9_-]{20,}["\']',
138
+ 'message': 'Hardcoded API key detected',
139
+ 'severity': 'critical',
140
+ 'suggestion': '# Use environment variables: os.environ["API_KEY"]',
141
+ 'languages': None # All languages
142
+ },
143
+ {
144
+ 'name': 'block-secret-exposure',
145
+ 'pattern': r'(password|passwd|pwd)\s*[=:]\s*["\'][^"\']+["\']',
146
+ 'message': 'Hardcoded password detected',
147
+ 'severity': 'critical',
148
+ 'suggestion': '# Use environment variables or a secrets manager',
149
+ 'languages': None
150
+ },
151
+ {
152
+ 'name': 'block-secret-exposure',
153
+ 'pattern': r'AKIA[0-9A-Z]{16}',
154
+ 'message': 'AWS Access Key ID detected in code',
155
+ 'severity': 'critical',
156
+ 'languages': None
157
+ },
158
+ {
159
+ 'name': 'block-secret-exposure',
160
+ 'pattern': r'-----BEGIN\s+(RSA|DSA|EC|OPENSSH)\s+PRIVATE\s+KEY-----',
161
+ 'message': 'Private key detected in code',
162
+ 'severity': 'critical',
163
+ 'languages': None
164
+ },
165
+ {
166
+ 'name': 'block-secret-exposure',
167
+ 'pattern': r'gh[pousr]_[A-Za-z0-9_]{36,}',
168
+ 'message': 'GitHub token detected in code',
169
+ 'severity': 'critical',
170
+ 'languages': None
171
+ },
172
+ # Privilege escalation
173
+ {
174
+ 'name': 'block-privilege-escalation',
175
+ 'pattern': r'\bsudo\s+',
176
+ 'message': 'Privilege escalation: sudo command detected',
177
+ 'severity': 'high',
178
+ 'suggestion': '# Avoid sudo in scripts - run with appropriate permissions',
179
+ 'languages': ['bash', 'shell', 'sh', 'zsh']
180
+ },
181
+ {
182
+ 'name': 'block-privilege-escalation',
183
+ 'pattern': r'\bchmod\s+777\s+',
184
+ 'message': 'Insecure permissions: chmod 777 detected',
185
+ 'severity': 'high',
186
+ 'suggestion': '# Use more restrictive permissions: chmod 755 or chmod 644',
187
+ 'languages': ['bash', 'shell', 'sh', 'zsh']
188
+ },
189
+ # Code injection
190
+ {
191
+ 'name': 'block-arbitrary-exec',
192
+ 'pattern': r'\beval\s*\(',
193
+ 'message': 'Code injection risk: eval() usage detected',
194
+ 'severity': 'high',
195
+ 'suggestion': '# Remove eval() and use safer alternatives',
196
+ 'languages': ['python', 'javascript', 'typescript', 'php', 'ruby']
197
+ },
198
+ {
199
+ 'name': 'block-arbitrary-exec',
200
+ 'pattern': r'\bos\s*\.\s*system\s*\([^)]*(\+|%|\.format|f["\'])',
201
+ 'message': 'Command injection risk: os.system with dynamic input',
202
+ 'severity': 'critical',
203
+ 'suggestion': '# Use subprocess with shell=False and proper argument handling',
204
+ 'languages': ['python']
205
+ },
206
+ {
207
+ 'name': 'block-arbitrary-exec',
208
+ 'pattern': r'\bexec\s*\(',
209
+ 'message': 'Code injection risk: exec() usage detected',
210
+ 'severity': 'high',
211
+ 'suggestion': '# Remove exec() and use safer alternatives',
212
+ 'languages': ['python']
213
+ },
214
+ # SQL injection
215
+ {
216
+ 'name': 'block-sql-injection',
217
+ 'pattern': r'["\']\s*\+\s*[^"\']+\s*\+\s*["\'].*(?:SELECT|INSERT|UPDATE|DELETE)',
218
+ 'message': 'SQL injection risk: String concatenation in SQL query',
219
+ 'severity': 'high',
220
+ 'suggestion': '# Use parameterized queries instead',
221
+ 'languages': ['python', 'javascript', 'typescript', 'php', 'ruby', 'java']
222
+ },
223
+ # XSS
224
+ {
225
+ 'name': 'block-xss',
226
+ 'pattern': r'\.innerHTML\s*=',
227
+ 'message': 'XSS risk: innerHTML assignment detected',
228
+ 'severity': 'medium',
229
+ 'suggestion': '// Use textContent or a sanitization library',
230
+ 'languages': ['javascript', 'typescript']
231
+ },
232
+ ]
233
+
234
+ def _get_language(self, filepath: str) -> str:
235
+ """Detect language from file extension."""
236
+ ext_map = {
237
+ '.py': 'python',
238
+ '.js': 'javascript',
239
+ '.ts': 'typescript',
240
+ '.jsx': 'javascript',
241
+ '.tsx': 'typescript',
242
+ '.sql': 'sql',
243
+ '.sh': 'shell',
244
+ '.bash': 'bash',
245
+ '.zsh': 'zsh',
246
+ '.php': 'php',
247
+ '.rb': 'ruby',
248
+ '.java': 'java',
249
+ '.cs': 'csharp',
250
+ '.go': 'go',
251
+ }
252
+ ext = Path(filepath).suffix.lower()
253
+ return ext_map.get(ext, 'unknown')
254
+
255
+ def check_file(self, filepath: str) -> List[PolicyViolation]:
256
+ """Check a file for policy violations."""
257
+ path = Path(filepath)
258
+ if not path.exists():
259
+ raise FileNotFoundError(f"File not found: {filepath}")
260
+
261
+ language = self._get_language(filepath)
262
+ content = path.read_text(encoding='utf-8', errors='ignore')
263
+ lines = content.split('\n')
264
+
265
+ violations = []
266
+
267
+ for rule in self.rules:
268
+ # Check language filter
269
+ if rule['languages'] and language not in rule['languages']:
270
+ continue
271
+
272
+ pattern = re.compile(rule['pattern'], re.IGNORECASE)
273
+
274
+ for i, line in enumerate(lines, 1):
275
+ if pattern.search(line):
276
+ violations.append(PolicyViolation(
277
+ line=i,
278
+ code=line.strip(),
279
+ violation=rule['message'],
280
+ policy=rule['name'],
281
+ severity=rule['severity'],
282
+ suggestion=rule.get('suggestion')
283
+ ))
284
+
285
+ return violations
286
+
287
+ def check_staged_files(self) -> Dict[str, List[PolicyViolation]]:
288
+ """Check all staged git files for violations."""
289
+ try:
290
+ result = subprocess.run(
291
+ ['git', 'diff', '--cached', '--name-only'],
292
+ capture_output=True, text=True, check=True
293
+ )
294
+ files = [f for f in result.stdout.strip().split('\n') if f]
295
+ except subprocess.CalledProcessError:
296
+ return {}
297
+
298
+ all_violations = {}
299
+ for filepath in files:
300
+ if Path(filepath).exists():
301
+ violations = self.check_file(filepath)
302
+ if violations:
303
+ all_violations[filepath] = violations
304
+
305
+ return all_violations
306
+
307
+
308
+ def cmd_init(args):
309
+ """Initialize .agents/ directory with Agent OS support."""
310
+ root = Path(args.path or ".")
311
+ agents_dir = root / ".agents"
312
+
313
+ if agents_dir.exists() and not args.force:
314
+ print(f"Error: {agents_dir} already exists. Use --force to overwrite.")
315
+ return 1
316
+
317
+ agents_dir.mkdir(parents=True, exist_ok=True)
318
+
319
+ # Create agents.md (OpenAI/Anthropic standard)
320
+ agents_md = agents_dir / "agents.md"
321
+ agents_md.write_text("""# Agent Configuration
322
+
323
+ You are an AI agent governed by Agent OS kernel.
324
+
325
+ ## Capabilities
326
+
327
+ You can:
328
+ - Query databases (read-only by default)
329
+ - Call approved APIs
330
+ - Generate reports
331
+
332
+ ## Constraints
333
+
334
+ You must:
335
+ - Follow all policies in security.md
336
+ - Request approval for write operations
337
+ - Log all actions to the flight recorder
338
+
339
+ ## Context
340
+
341
+ This agent is part of the Agent OS ecosystem.
342
+ For more information: https://github.com/imran-siddique/agent-os
343
+ """)
344
+
345
+ # Create security.md (Agent OS extension)
346
+ security_md = agents_dir / "security.md"
347
+ policy_template = args.template or "strict"
348
+
349
+ policies = {
350
+ "strict": {
351
+ "mode": "strict",
352
+ "signals": ["SIGSTOP", "SIGKILL", "SIGINT"],
353
+ "rules": [
354
+ {"action": "database_query", "mode": "read_only"},
355
+ {"action": "file_write", "requires_approval": True},
356
+ {"action": "api_call", "rate_limit": "100/hour"},
357
+ {"action": "send_email", "requires_approval": True},
358
+ ]
359
+ },
360
+ "permissive": {
361
+ "mode": "permissive",
362
+ "signals": ["SIGSTOP", "SIGKILL"],
363
+ "rules": [
364
+ {"action": "*", "effect": "allow"},
365
+ ]
366
+ },
367
+ "audit": {
368
+ "mode": "audit",
369
+ "signals": ["SIGSTOP"],
370
+ "rules": [
371
+ {"action": "*", "effect": "allow", "log": True},
372
+ ]
373
+ }
374
+ }
375
+
376
+ policy = policies.get(policy_template, policies["strict"])
377
+
378
+ security_content = f"""# Agent OS Security Configuration
379
+
380
+ kernel:
381
+ version: "1.0"
382
+ mode: {policy["mode"]}
383
+
384
+ signals:
385
+ """
386
+ for s in policy["signals"]:
387
+ security_content += f" - {s}\n"
388
+
389
+ security_content += "\npolicies:\n"
390
+ for r in policy["rules"]:
391
+ security_content += f' - action: {r["action"]}\n'
392
+ if "mode" in r:
393
+ security_content += f' mode: {r["mode"]}\n'
394
+ if r.get("requires_approval"):
395
+ security_content += f' requires_approval: true\n'
396
+ if "rate_limit" in r:
397
+ security_content += f' rate_limit: "{r["rate_limit"]}"\n'
398
+ if "effect" in r:
399
+ security_content += f' effect: {r["effect"]}\n'
400
+
401
+ security_content += """
402
+ observability:
403
+ metrics: true
404
+ traces: true
405
+ flight_recorder: true
406
+
407
+ # For more options, see:
408
+ # https://github.com/imran-siddique/agent-os/blob/main/docs/security-spec.md
409
+ """
410
+
411
+ security_md.write_text(security_content)
412
+
413
+ print(f"Initialized Agent OS in {agents_dir}")
414
+ print(f" - agents.md: Agent instructions (OpenAI/Anthropic standard)")
415
+ print(f" - security.md: Kernel policies (Agent OS extension)")
416
+ print(f" - Template: {policy_template}")
417
+ print()
418
+ print("Next steps:")
419
+ print(" 1. Edit .agents/agents.md with your agent's capabilities")
420
+ print(" 2. Customize .agents/security.md policies")
421
+ print(" 3. Run: agentos secure --verify")
422
+
423
+ return 0
424
+
425
+
426
+ def cmd_secure(args):
427
+ """Enable kernel governance for the current directory."""
428
+ root = Path(args.path or ".")
429
+ agents_dir = root / ".agents"
430
+
431
+ if not agents_dir.exists():
432
+ print(f"Error: No .agents/ directory found. Run 'agentos init' first.")
433
+ return 1
434
+
435
+ security_md = agents_dir / "security.md"
436
+ if not security_md.exists():
437
+ print(f"Error: No security.md found. Run 'agentos init' first.")
438
+ return 1
439
+
440
+ print(f"Securing agents in {root}...")
441
+ print()
442
+
443
+ content = security_md.read_text()
444
+
445
+ checks = [
446
+ ("kernel version", "version:" in content),
447
+ ("signals defined", "signals:" in content),
448
+ ("policies defined", "policies:" in content),
449
+ ]
450
+
451
+ all_passed = True
452
+ for check_name, passed in checks:
453
+ status = "[PASS]" if passed else "[FAIL]"
454
+ print(f" {status} {check_name}")
455
+ if not passed:
456
+ all_passed = False
457
+
458
+ print()
459
+
460
+ if all_passed:
461
+ print("Security configuration valid.")
462
+ print()
463
+ print("Kernel governance enabled. Your agents will now:")
464
+ print(" - Enforce policies on every action")
465
+ print(" - Respond to POSIX-style signals")
466
+ print(" - Log all operations to flight recorder")
467
+ return 0
468
+ else:
469
+ print("Security configuration invalid. Please fix the issues above.")
470
+ return 1
471
+
472
+
473
+ def cmd_audit(args):
474
+ """Audit agent security configuration."""
475
+ root = Path(args.path or ".")
476
+ agents_dir = root / ".agents"
477
+
478
+ if not agents_dir.exists():
479
+ print(f"No .agents/ directory found in {root}")
480
+ return 1
481
+
482
+ print(f"Auditing {root}...")
483
+ print()
484
+
485
+ files = {
486
+ "agents.md": agents_dir / "agents.md",
487
+ "security.md": agents_dir / "security.md",
488
+ }
489
+
490
+ findings = []
491
+
492
+ for name, path in files.items():
493
+ if path.exists():
494
+ print(f" [OK] {name}")
495
+ else:
496
+ print(f" [MISSING] {name}")
497
+ findings.append(f"Missing {name}")
498
+
499
+ print()
500
+
501
+ security_md = files["security.md"]
502
+ if security_md.exists():
503
+ content = security_md.read_text()
504
+
505
+ dangerous = [
506
+ ("effect: allow", "Permissive allow - consider adding constraints"),
507
+ ]
508
+
509
+ for pattern, warning in dangerous:
510
+ if pattern in content and "action: *" in content:
511
+ findings.append(f"Warning: {warning}")
512
+
513
+ required = ["kernel:", "signals:", "policies:"]
514
+ for section in required:
515
+ if section not in content:
516
+ findings.append(f"Missing required section: {section}")
517
+
518
+ if findings:
519
+ print("Findings:")
520
+ for f in findings:
521
+ print(f" - {f}")
522
+ else:
523
+ print("No issues found.")
524
+
525
+ print()
526
+
527
+ if args.format == "json":
528
+ result = {
529
+ "path": str(root),
530
+ "files": {name: path.exists() for name, path in files.items()},
531
+ "findings": findings,
532
+ "passed": len(findings) == 0
533
+ }
534
+ print(json.dumps(result, indent=2))
535
+
536
+ return 0 if len(findings) == 0 else 1
537
+
538
+
539
+ # ============================================================================
540
+ # New Commands: check, review, install-hooks
541
+ # ============================================================================
542
+
543
+ def cmd_check(args):
544
+ """Check file(s) for safety violations."""
545
+ checker = PolicyChecker()
546
+
547
+ # Handle --staged flag
548
+ if args.staged:
549
+ all_violations = checker.check_staged_files()
550
+ if not all_violations:
551
+ print(f"{Colors.GREEN}✓{Colors.RESET} No violations in staged files")
552
+ return 0
553
+
554
+ total = sum(len(v) for v in all_violations.values())
555
+ print(f"{Colors.RED}⚠️ {total} violation(s) found in staged files:{Colors.RESET}")
556
+ print()
557
+
558
+ for filepath, violations in all_violations.items():
559
+ print(f"{Colors.BOLD}{filepath}{Colors.RESET}")
560
+ _print_violations(violations, args)
561
+
562
+ return 1
563
+
564
+ # Check specified files
565
+ if not args.files:
566
+ print("Usage: agentos check <file> [file2 ...]")
567
+ print(" agentos check --staged")
568
+ return 1
569
+
570
+ exit_code = 0
571
+ for filepath in args.files:
572
+ try:
573
+ violations = checker.check_file(filepath)
574
+
575
+ if not violations:
576
+ print(f"{Colors.GREEN}✓{Colors.RESET} {filepath}: No violations")
577
+ continue
578
+
579
+ print(f"{Colors.RED}⚠️ {len(violations)} violation(s) found in {filepath}:{Colors.RESET}")
580
+ print()
581
+ _print_violations(violations, args)
582
+ exit_code = 1
583
+
584
+ except FileNotFoundError as e:
585
+ print(f"{Colors.RED}Error:{Colors.RESET} {e}")
586
+ exit_code = 1
587
+
588
+ # JSON output for CI
589
+ if args.format == 'json':
590
+ _output_json(args.files, checker)
591
+
592
+ return exit_code
593
+
594
+
595
+ def _print_violations(violations: List[PolicyViolation], args):
596
+ """Print violations in formatted output."""
597
+ for v in violations:
598
+ severity_color = {
599
+ 'critical': Colors.RED,
600
+ 'high': Colors.RED,
601
+ 'medium': Colors.YELLOW,
602
+ 'low': Colors.CYAN,
603
+ }.get(v.severity, Colors.WHITE)
604
+
605
+ print(f" {Colors.DIM}Line {v.line}:{Colors.RESET} {v.code[:60]}{'...' if len(v.code) > 60 else ''}")
606
+ print(f" {severity_color}Violation:{Colors.RESET} {v.violation}")
607
+ print(f" {Colors.DIM}Policy:{Colors.RESET} {v.policy}")
608
+ if v.suggestion and not args.ci:
609
+ print(f" {Colors.GREEN}Suggestion:{Colors.RESET} {v.suggestion}")
610
+ print()
611
+
612
+
613
+ def _output_json(files: List[str], checker: PolicyChecker):
614
+ """Output violations as JSON."""
615
+ results = {
616
+ 'violations': [],
617
+ 'summary': {
618
+ 'total': 0,
619
+ 'critical': 0,
620
+ 'high': 0,
621
+ 'medium': 0,
622
+ 'low': 0,
623
+ }
624
+ }
625
+
626
+ for filepath in files:
627
+ try:
628
+ violations = checker.check_file(filepath)
629
+ for v in violations:
630
+ results['violations'].append({
631
+ 'file': filepath,
632
+ 'line': v.line,
633
+ 'code': v.code,
634
+ 'violation': v.violation,
635
+ 'policy': v.policy,
636
+ 'severity': v.severity,
637
+ })
638
+ results['summary']['total'] += 1
639
+ results['summary'][v.severity] += 1
640
+ except FileNotFoundError:
641
+ pass
642
+
643
+ print(json.dumps(results, indent=2))
644
+
645
+
646
+ def cmd_review(args):
647
+ """Multi-model code review with CMVK."""
648
+ filepath = args.file
649
+
650
+ if not Path(filepath).exists():
651
+ print(f"{Colors.RED}Error:{Colors.RESET} File not found: {filepath}")
652
+ return 1
653
+
654
+ print(f"{Colors.BLUE}🔍 Reviewing {filepath} with CMVK...{Colors.RESET}")
655
+ print()
656
+
657
+ # First, run local policy check
658
+ checker = PolicyChecker()
659
+ violations = checker.check_file(filepath)
660
+
661
+ if violations:
662
+ print(f"{Colors.YELLOW}Local Policy Check:{Colors.RESET}")
663
+ print(f" {Colors.RED}⚠️ {len(violations)} violation(s) found{Colors.RESET}")
664
+ for v in violations[:3]: # Show first 3
665
+ print(f" Line {v.line}: {v.violation}")
666
+ if len(violations) > 3:
667
+ print(f" ... and {len(violations) - 3} more")
668
+ print()
669
+
670
+ # CMVK multi-model review (simulated for now)
671
+ if args.cmvk:
672
+ models = args.models.split(',') if args.models else ['gpt-4', 'claude-sonnet-4', 'gemini-pro']
673
+
674
+ print(f"{Colors.BLUE}Multi-Model Review ({len(models)} models):{Colors.RESET}")
675
+ print()
676
+
677
+ # Read file content for analysis
678
+ content = Path(filepath).read_text(encoding='utf-8', errors='ignore')
679
+
680
+ # Simulate model responses based on content analysis
681
+ model_results = _simulate_cmvk_review(content, models)
682
+
683
+ passed = 0
684
+ for model, result in model_results.items():
685
+ if result['passed']:
686
+ print(f" {Colors.GREEN}✅{Colors.RESET} {model}: {result['summary']}")
687
+ passed += 1
688
+ else:
689
+ print(f" {Colors.YELLOW}⚠️{Colors.RESET} {model}: {result['summary']}")
690
+
691
+ print()
692
+ consensus = (passed / len(models)) * 100
693
+ consensus_color = Colors.GREEN if consensus >= 80 else Colors.YELLOW if consensus >= 50 else Colors.RED
694
+ print(f"Consensus: {consensus_color}{consensus:.0f}%{Colors.RESET}")
695
+
696
+ if model_results:
697
+ issues = []
698
+ for m, r in model_results.items():
699
+ issues.extend(r.get('issues', []))
700
+
701
+ if issues:
702
+ print()
703
+ print(f"{Colors.YELLOW}Issues Found:{Colors.RESET}")
704
+ for issue in set(issues):
705
+ print(f" - {issue}")
706
+
707
+ print()
708
+
709
+ if args.format == 'json':
710
+ print(json.dumps({
711
+ 'file': filepath,
712
+ 'consensus': consensus / 100,
713
+ 'model_results': model_results,
714
+ 'local_violations': len(violations)
715
+ }, indent=2))
716
+
717
+ return 0 if consensus >= 80 else 1
718
+
719
+ return 0 if not violations else 1
720
+
721
+
722
+ def _simulate_cmvk_review(content: str, models: List[str]) -> Dict:
723
+ """Simulate CMVK multi-model review (mock for demo)."""
724
+ import random
725
+
726
+ # Detect potential issues
727
+ issues = []
728
+
729
+ if 'await' in content and 'try' not in content:
730
+ issues.append('Missing error handling for async operations')
731
+
732
+ if re.search(r'["\']\s*\+\s*\w+\s*\+\s*["\']', content):
733
+ issues.append('String concatenation in potential SQL/command')
734
+
735
+ if 'req.body' in content or 'req.params' in content:
736
+ if 'validate' not in content.lower() and 'sanitize' not in content.lower():
737
+ issues.append('User input without validation')
738
+
739
+ if 'Sync(' in content:
740
+ issues.append('Synchronous file operations detected')
741
+
742
+ results = {}
743
+ for model in models:
744
+ # Vary responses slightly per model
745
+ model_issues = [i for i in issues if random.random() > 0.3]
746
+ passed = len(model_issues) == 0
747
+
748
+ results[model] = {
749
+ 'passed': passed,
750
+ 'summary': 'No issues' if passed else f'{len(model_issues)} potential issue(s)',
751
+ 'issues': model_issues,
752
+ 'confidence': 0.85 + random.random() * 0.1 if passed else 0.6 + random.random() * 0.2
753
+ }
754
+
755
+ return results
756
+
757
+
758
+ def cmd_install_hooks(args):
759
+ """Install git pre-commit hooks for Agent OS."""
760
+ git_dir = Path('.git')
761
+
762
+ if not git_dir.exists():
763
+ print(f"{Colors.RED}Error:{Colors.RESET} Not a git repository. Run 'git init' first.")
764
+ return 1
765
+
766
+ hooks_dir = git_dir / 'hooks'
767
+ hooks_dir.mkdir(exist_ok=True)
768
+
769
+ pre_commit = hooks_dir / 'pre-commit'
770
+
771
+ # Check if hook already exists
772
+ if pre_commit.exists() and not args.force:
773
+ print(f"{Colors.YELLOW}Warning:{Colors.RESET} pre-commit hook already exists.")
774
+ print("Use --force to overwrite, or --append to add Agent OS check.")
775
+
776
+ if args.append:
777
+ # Append to existing hook
778
+ existing = pre_commit.read_text()
779
+ if 'agentos check' in existing:
780
+ print(f"{Colors.GREEN}✓{Colors.RESET} Agent OS check already in pre-commit hook")
781
+ return 0
782
+
783
+ new_content = existing.rstrip() + '\n\n' + _get_hook_content()
784
+ pre_commit.write_text(new_content)
785
+ print(f"{Colors.GREEN}✓{Colors.RESET} Appended Agent OS check to pre-commit hook")
786
+ return 0
787
+
788
+ return 1
789
+
790
+ # Create new hook
791
+ hook_content = f"""#!/bin/bash
792
+ # Agent OS Pre-Commit Hook
793
+ # Blocks commits with safety violations
794
+
795
+ {_get_hook_content()}
796
+ """
797
+
798
+ pre_commit.write_text(hook_content)
799
+
800
+ # Make executable (Unix)
801
+ if os.name != 'nt':
802
+ os.chmod(pre_commit, 0o755)
803
+
804
+ print(f"{Colors.GREEN}✓{Colors.RESET} Installed pre-commit hook: {pre_commit}")
805
+ print()
806
+ print("Agent OS will now check staged files before each commit.")
807
+ print("Commits with safety violations will be blocked.")
808
+ print()
809
+ print(f"{Colors.DIM}To bypass (not recommended): git commit --no-verify{Colors.RESET}")
810
+
811
+ return 0
812
+
813
+
814
+ def _get_hook_content() -> str:
815
+ """Get the Agent OS hook content."""
816
+ return """# Agent OS Safety Check
817
+ echo "🛡️ Agent OS: Checking staged files..."
818
+
819
+ agentos check --staged --ci
820
+ RESULT=$?
821
+
822
+ if [ $RESULT -ne 0 ]; then
823
+ echo ""
824
+ echo "❌ Agent OS blocked commit (safety violations found)"
825
+ echo ""
826
+ echo "Options:"
827
+ echo " 1. Fix the violations and try again"
828
+ echo " 2. Run 'agentos check --staged' to see details"
829
+ echo " 3. Use 'git commit --no-verify' to bypass (not recommended)"
830
+ exit 1
831
+ fi
832
+
833
+ echo "✓ Agent OS: All checks passed"
834
+ """
835
+
836
+
837
+ def cmd_status(args):
838
+ """Show kernel status."""
839
+ print("Agent OS Kernel Status")
840
+ print("=" * 40)
841
+ print()
842
+
843
+ try:
844
+ import agent_os
845
+ print(f" Version: {agent_os.__version__}")
846
+ print(f" Status: Installed")
847
+ except ImportError:
848
+ print(f" Status: Not installed")
849
+ print()
850
+ print("Install with: pip install agent-os-kernel")
851
+ return 1
852
+
853
+ print()
854
+
855
+ root = Path(".")
856
+ agents_dir = root / ".agents"
857
+
858
+ if agents_dir.exists():
859
+ print(f" Project: {root.absolute()}")
860
+ print(f" Agents: Configured (.agents/ found)")
861
+ else:
862
+ print(f" Project: {root.absolute()}")
863
+ print(f" Agents: Not configured")
864
+ print()
865
+ print("Initialize with: agentos init")
866
+
867
+ print()
868
+
869
+ print("Packages:")
870
+ try:
871
+ from agent_os import AVAILABLE_PACKAGES
872
+ for pkg, available in AVAILABLE_PACKAGES.items():
873
+ status = "installed" if available else "not installed"
874
+ print(f" - {pkg}: {status}")
875
+ except:
876
+ print(" Unable to check packages")
877
+
878
+ return 0
879
+
880
+
881
+ def cmd_validate(args):
882
+ """Validate policy YAML files."""
883
+ import yaml
884
+
885
+ print(f"\n{Colors.BOLD}🔍 Validating Policy Files{Colors.RESET}\n")
886
+
887
+ # Find files to validate
888
+ files_to_check = []
889
+ if args.files:
890
+ files_to_check = [Path(f) for f in args.files]
891
+ else:
892
+ # Default: check .agents/*.yaml
893
+ agents_dir = Path(".agents")
894
+ if agents_dir.exists():
895
+ files_to_check = list(agents_dir.glob("*.yaml")) + list(agents_dir.glob("*.yml"))
896
+ if not files_to_check:
897
+ print(f"{Colors.YELLOW}No policy files found.{Colors.RESET}")
898
+ print(f"Run 'agentos init' to create default policies, or specify files to validate.")
899
+ return 0
900
+
901
+ # Required fields for policy files
902
+ REQUIRED_FIELDS = ['version', 'name']
903
+ OPTIONAL_FIELDS = ['description', 'rules', 'constraints', 'signals', 'allowed_actions', 'blocked_actions']
904
+ VALID_RULE_TYPES = ['allow', 'deny', 'audit', 'require']
905
+
906
+ errors = []
907
+ warnings = []
908
+ valid_count = 0
909
+
910
+ for filepath in files_to_check:
911
+ if not filepath.exists():
912
+ errors.append(f"{filepath}: File not found")
913
+ continue
914
+
915
+ print(f" Checking {filepath}...", end=" ")
916
+
917
+ try:
918
+ with open(filepath) as f:
919
+ content = yaml.safe_load(f)
920
+
921
+ if content is None:
922
+ errors.append(f"{filepath}: Empty file")
923
+ print(f"{Colors.RED}EMPTY{Colors.RESET}")
924
+ continue
925
+
926
+ file_errors = []
927
+ file_warnings = []
928
+
929
+ # Check required fields
930
+ for field in REQUIRED_FIELDS:
931
+ if field not in content:
932
+ file_errors.append(f"Missing required field: '{field}'")
933
+
934
+ # Validate version format
935
+ if 'version' in content:
936
+ version = str(content['version'])
937
+ if not re.match(r'^\d+(\.\d+)*$', version):
938
+ file_warnings.append(f"Version '{version}' should be numeric (e.g., '1.0')")
939
+
940
+ # Validate rules if present
941
+ if 'rules' in content:
942
+ rules = content['rules']
943
+ if not isinstance(rules, list):
944
+ file_errors.append("'rules' must be a list")
945
+ else:
946
+ for i, rule in enumerate(rules):
947
+ if not isinstance(rule, dict):
948
+ file_errors.append(f"Rule {i+1}: must be a dict")
949
+ elif 'type' in rule and rule['type'] not in VALID_RULE_TYPES:
950
+ file_warnings.append(f"Rule {i+1}: unknown type '{rule['type']}'")
951
+
952
+ # Strict mode: warn about unknown fields
953
+ if args.strict:
954
+ known_fields = REQUIRED_FIELDS + OPTIONAL_FIELDS
955
+ for field in content.keys():
956
+ if field not in known_fields:
957
+ file_warnings.append(f"Unknown field: '{field}'")
958
+
959
+ if file_errors:
960
+ errors.extend([f"{filepath}: {e}" for e in file_errors])
961
+ print(f"{Colors.RED}INVALID{Colors.RESET}")
962
+ elif file_warnings:
963
+ warnings.extend([f"{filepath}: {w}" for w in file_warnings])
964
+ print(f"{Colors.YELLOW}OK (warnings){Colors.RESET}")
965
+ valid_count += 1
966
+ else:
967
+ print(f"{Colors.GREEN}OK{Colors.RESET}")
968
+ valid_count += 1
969
+
970
+ except yaml.YAMLError as e:
971
+ errors.append(f"{filepath}: Invalid YAML - {e}")
972
+ print(f"{Colors.RED}PARSE ERROR{Colors.RESET}")
973
+ except Exception as e:
974
+ errors.append(f"{filepath}: {e}")
975
+ print(f"{Colors.RED}ERROR{Colors.RESET}")
976
+
977
+ print()
978
+
979
+ # Print summary
980
+ if warnings:
981
+ print(f"{Colors.YELLOW}Warnings:{Colors.RESET}")
982
+ for w in warnings:
983
+ print(f" ⚠️ {w}")
984
+ print()
985
+
986
+ if errors:
987
+ print(f"{Colors.RED}Errors:{Colors.RESET}")
988
+ for e in errors:
989
+ print(f" ❌ {e}")
990
+ print()
991
+ print(f"{Colors.RED}Validation failed.{Colors.RESET} {valid_count}/{len(files_to_check)} files valid.")
992
+ return 1
993
+
994
+ print(f"{Colors.GREEN}✓ All {valid_count} policy file(s) valid.{Colors.RESET}")
995
+ return 0
12
996
 
13
997
 
14
998
  def main():
15
- """Main entry point for Agent OS CLI."""
999
+ """Main entry point."""
16
1000
  parser = argparse.ArgumentParser(
17
- prog="agentctl",
18
- description="Agent OS - A Safety-First Kernel for Autonomous AI Agents",
1001
+ prog="agentos",
1002
+ description="Agent OS CLI - Kernel-level governance for AI agents",
1003
+ formatter_class=argparse.RawDescriptionHelpFormatter,
1004
+ epilog="""
1005
+ Examples:
1006
+ agentos check src/app.py Check file for safety violations
1007
+ agentos check --staged Check staged git files
1008
+ agentos review src/app.py --cmvk Multi-model code review
1009
+ agentos validate Validate policy YAML files
1010
+ agentos install-hooks Install git pre-commit hook
1011
+ agentos init Initialize Agent OS in project
1012
+
1013
+ Documentation: https://github.com/imran-siddique/agent-os
1014
+ """
1015
+ )
1016
+ parser.add_argument(
1017
+ "--version", "-v",
1018
+ action="store_true",
1019
+ help="Show version"
19
1020
  )
20
1021
 
21
1022
  subparsers = parser.add_subparsers(dest="command", help="Commands")
22
1023
 
23
- # Status command
24
- status_parser = subparsers.add_parser("status", help="Check installation status")
1024
+ # init command
1025
+ init_parser = subparsers.add_parser("init", help="Initialize .agents/ directory")
1026
+ init_parser.add_argument("--path", "-p", help="Path to initialize (default: current)")
1027
+ init_parser.add_argument("--template", "-t", choices=["strict", "permissive", "audit"],
1028
+ default="strict", help="Policy template")
1029
+ init_parser.add_argument("--force", "-f", action="store_true", help="Overwrite existing")
1030
+
1031
+ # secure command
1032
+ secure_parser = subparsers.add_parser("secure", help="Enable kernel governance")
1033
+ secure_parser.add_argument("--path", "-p", help="Path to secure (default: current)")
1034
+ secure_parser.add_argument("--verify", action="store_true", help="Verify only")
1035
+
1036
+ # audit command
1037
+ audit_parser = subparsers.add_parser("audit", help="Audit security configuration")
1038
+ audit_parser.add_argument("--path", "-p", help="Path to audit (default: current)")
1039
+ audit_parser.add_argument("--format", "-f", choices=["text", "json"], default="text")
1040
+
1041
+ # status command
1042
+ subparsers.add_parser("status", help="Show kernel status")
1043
+
1044
+ # check command (NEW)
1045
+ check_parser = subparsers.add_parser("check", help="Check file(s) for safety violations")
1046
+ check_parser.add_argument("files", nargs="*", help="Files to check")
1047
+ check_parser.add_argument("--staged", action="store_true", help="Check staged git files")
1048
+ check_parser.add_argument("--ci", action="store_true", help="CI mode (no colors, machine output)")
1049
+ check_parser.add_argument("--format", choices=["text", "json"], default="text", help="Output format")
25
1050
 
26
- # Version command
27
- version_parser = subparsers.add_parser("version", help="Show version")
1051
+ # review command (NEW)
1052
+ review_parser = subparsers.add_parser("review", help="Multi-model code review")
1053
+ review_parser.add_argument("file", help="File to review")
1054
+ review_parser.add_argument("--cmvk", action="store_true", help="Use CMVK multi-model review")
1055
+ review_parser.add_argument("--models", help="Comma-separated list of models (default: gpt-4,claude-sonnet-4,gemini-pro)")
1056
+ review_parser.add_argument("--format", choices=["text", "json"], default="text", help="Output format")
1057
+
1058
+ # install-hooks command (NEW)
1059
+ hooks_parser = subparsers.add_parser("install-hooks", help="Install git pre-commit hooks")
1060
+ hooks_parser.add_argument("--force", action="store_true", help="Overwrite existing hook")
1061
+ hooks_parser.add_argument("--append", action="store_true", help="Append to existing hook")
1062
+
1063
+ # validate command (policy YAML validation)
1064
+ validate_parser = subparsers.add_parser("validate", help="Validate policy YAML files")
1065
+ validate_parser.add_argument("files", nargs="*", help="Policy files to validate (default: .agents/*.yaml)")
1066
+ validate_parser.add_argument("--strict", action="store_true", help="Strict validation mode")
28
1067
 
29
- # Parse args
30
1068
  args = parser.parse_args()
31
1069
 
32
- if args.command == "status":
33
- from agent_os import check_installation
34
- check_installation()
35
- elif args.command == "version":
36
- from agent_os import __version__
37
- print(f"Agent OS v{__version__}")
1070
+ # Handle CI mode
1071
+ if hasattr(args, 'ci') and args.ci:
1072
+ Colors.disable()
1073
+
1074
+ if args.version:
1075
+ try:
1076
+ from agent_os import __version__
1077
+ print(f"agentos {__version__}")
1078
+ except:
1079
+ print("agentos (version unknown)")
1080
+ return 0
1081
+
1082
+ if args.command == "init":
1083
+ return cmd_init(args)
1084
+ elif args.command == "secure":
1085
+ return cmd_secure(args)
1086
+ elif args.command == "audit":
1087
+ return cmd_audit(args)
1088
+ elif args.command == "status":
1089
+ return cmd_status(args)
1090
+ elif args.command == "check":
1091
+ return cmd_check(args)
1092
+ elif args.command == "review":
1093
+ return cmd_review(args)
1094
+ elif args.command == "install-hooks":
1095
+ return cmd_install_hooks(args)
1096
+ elif args.command == "validate":
1097
+ return cmd_validate(args)
38
1098
  else:
39
1099
  parser.print_help()
40
- sys.exit(1)
1100
+ return 0
41
1101
 
42
1102
 
43
1103
  if __name__ == "__main__":
44
- main()
1104
+ sys.exit(main())