agent-os-kernel 1.1.0__py3-none-any.whl → 1.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1051) hide show
  1. agent_os/__init__.py +66 -4
  2. agent_os/agents_compat.py +286 -0
  3. agent_os/base_agent.py +308 -0
  4. agent_os/cli.py +1079 -19
  5. agent_os/integrations/__init__.py +37 -2
  6. agent_os/integrations/openai_adapter.py +502 -0
  7. agent_os/integrations/semantic_kernel_adapter.py +569 -0
  8. agent_os/stateless.py +349 -0
  9. agent_os_kernel-1.3.0.dist-info/METADATA +676 -0
  10. agent_os_kernel-1.3.0.dist-info/RECORD +1053 -0
  11. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/entry_points.txt +0 -1
  12. modules/amb/.github/workflows/ci.yml +102 -0
  13. modules/amb/.github/workflows/publish.yml +146 -0
  14. modules/amb/.gitignore +134 -0
  15. modules/amb/CHANGELOG.md +118 -0
  16. modules/amb/CONTRIBUTING.md +141 -0
  17. modules/amb/LICENSE +21 -0
  18. modules/amb/README.md +188 -0
  19. modules/amb/amb_core/__init__.py +175 -0
  20. modules/amb/amb_core/adapters/__init__.py +55 -0
  21. modules/amb/amb_core/adapters/aws_sqs_broker.py +374 -0
  22. modules/amb/amb_core/adapters/azure_servicebus_broker.py +338 -0
  23. modules/amb/amb_core/adapters/kafka_broker.py +258 -0
  24. modules/amb/amb_core/adapters/nats_broker.py +283 -0
  25. modules/amb/amb_core/adapters/rabbitmq_broker.py +233 -0
  26. modules/amb/amb_core/adapters/redis_broker.py +260 -0
  27. modules/amb/amb_core/broker.py +143 -0
  28. modules/amb/amb_core/bus.py +479 -0
  29. modules/amb/amb_core/cloudevents.py +507 -0
  30. modules/amb/amb_core/dlq.py +343 -0
  31. modules/amb/amb_core/hf_utils.py +534 -0
  32. modules/amb/amb_core/memory_broker.py +408 -0
  33. modules/amb/amb_core/models.py +139 -0
  34. modules/amb/amb_core/persistence.py +527 -0
  35. modules/amb/amb_core/schema.py +292 -0
  36. modules/amb/amb_core/tracing.py +356 -0
  37. modules/amb/examples/advanced_features.py +223 -0
  38. modules/amb/examples/backpressure_demo.py +225 -0
  39. modules/amb/examples/basic_usage.py +117 -0
  40. modules/amb/examples/tracing_demo.py +104 -0
  41. modules/amb/experiments/README.md +52 -0
  42. modules/amb/experiments/reproduce_results.py +467 -0
  43. modules/amb/experiments/results.json +324 -0
  44. modules/amb/paper/README.md +40 -0
  45. modules/amb/paper/paper.tex +365 -0
  46. modules/amb/paper/whitepaper.md +377 -0
  47. modules/amb/pyproject.toml +117 -0
  48. modules/amb/tests/__init__.py +1 -0
  49. modules/amb/tests/test_backpressure_priority.py +280 -0
  50. modules/amb/tests/test_bus.py +198 -0
  51. modules/amb/tests/test_cloudevents.py +443 -0
  52. modules/amb/tests/test_features.py +531 -0
  53. modules/amb/tests/test_models.py +74 -0
  54. modules/amb/tests/test_tracing.py +254 -0
  55. modules/atr/.github/workflows/ci.yml +101 -0
  56. modules/atr/.github/workflows/publish.yml +140 -0
  57. modules/atr/.gitignore +134 -0
  58. modules/atr/.pre-commit-config.yaml +37 -0
  59. modules/atr/CHANGELOG.md +39 -0
  60. modules/atr/CONTRIBUTING.md +96 -0
  61. modules/atr/IMPLEMENTATION_SUMMARY.md +143 -0
  62. modules/atr/README.md +180 -0
  63. modules/atr/atr/__init__.py +638 -0
  64. modules/atr/atr/access.py +346 -0
  65. modules/atr/atr/composition.py +643 -0
  66. modules/atr/atr/decorator.py +355 -0
  67. modules/atr/atr/executor.py +382 -0
  68. modules/atr/atr/health.py +555 -0
  69. modules/atr/atr/hf_utils.py +447 -0
  70. modules/atr/atr/injection.py +420 -0
  71. modules/atr/atr/metrics.py +438 -0
  72. modules/atr/atr/policies.py +401 -0
  73. modules/atr/atr/py.typed +2 -0
  74. modules/atr/atr/registry.py +450 -0
  75. modules/atr/atr/schema.py +478 -0
  76. modules/atr/atr/tools/safe/__init__.py +73 -0
  77. modules/atr/atr/tools/safe/calculator.py +380 -0
  78. modules/atr/atr/tools/safe/datetime_tool.py +441 -0
  79. modules/atr/atr/tools/safe/file_reader.py +400 -0
  80. modules/atr/atr/tools/safe/http_client.py +314 -0
  81. modules/atr/atr/tools/safe/json_parser.py +372 -0
  82. modules/atr/atr/tools/safe/text_tool.py +526 -0
  83. modules/atr/atr/tools/safe/toolkit.py +173 -0
  84. modules/atr/docs/PYPI_SETUP.md +113 -0
  85. modules/atr/examples/README.md +27 -0
  86. modules/atr/examples/demo.py +144 -0
  87. modules/atr/examples/sandbox_demo.py +218 -0
  88. modules/atr/experiments/README.md +69 -0
  89. modules/atr/experiments/reproduce_results.py +509 -0
  90. modules/atr/experiments/results/.gitkeep +0 -0
  91. modules/atr/experiments/results/results_20260123_140334.json +71 -0
  92. modules/atr/paper/README.md +36 -0
  93. modules/atr/paper/figures/.gitkeep +0 -0
  94. modules/atr/paper/references.bib +84 -0
  95. modules/atr/paper/structure.tex +293 -0
  96. modules/atr/paper/whitepaper.md +234 -0
  97. modules/atr/pyproject.toml +148 -0
  98. modules/atr/requirements.txt +1 -0
  99. modules/atr/setup.py +30 -0
  100. modules/atr/tests/__init__.py +1 -0
  101. modules/atr/tests/test_decorator.py +317 -0
  102. modules/atr/tests/test_executor.py +245 -0
  103. modules/atr/tests/test_integration_executor.py +184 -0
  104. modules/atr/tests/test_registry.py +312 -0
  105. modules/atr/tests/test_schema.py +182 -0
  106. modules/atr/tests/test_v2_features.py +708 -0
  107. modules/caas/.dockerignore +63 -0
  108. modules/caas/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  109. modules/caas/.github/ISSUE_TEMPLATE/custom.md +10 -0
  110. modules/caas/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  111. modules/caas/.github/workflows/ci.yml +100 -0
  112. modules/caas/.github/workflows/lint.yml +39 -0
  113. modules/caas/.github/workflows/publish-pypi.yml +124 -0
  114. modules/caas/.gitignore +73 -0
  115. modules/caas/.pre-commit-config.yaml +33 -0
  116. modules/caas/CHANGELOG.md +58 -0
  117. modules/caas/CONTRIBUTING.md +346 -0
  118. modules/caas/Dockerfile +41 -0
  119. modules/caas/LICENSE +21 -0
  120. modules/caas/MANIFEST.in +11 -0
  121. modules/caas/README.md +158 -0
  122. modules/caas/benchmarks/README.md +255 -0
  123. modules/caas/benchmarks/create_hf_dataset.py +502 -0
  124. modules/caas/benchmarks/data/sample_corpus/README.md +86 -0
  125. modules/caas/benchmarks/data/sample_corpus/auth_module.py +211 -0
  126. modules/caas/benchmarks/data/sample_corpus/contribution_guide.md +185 -0
  127. modules/caas/benchmarks/data/sample_corpus/remote_work_policy.html +57 -0
  128. modules/caas/benchmarks/hf_dataset/README.md +214 -0
  129. modules/caas/benchmarks/hf_dataset/caas_benchmark_corpus.py +73 -0
  130. modules/caas/benchmarks/hf_dataset/corpus_preview.json +193 -0
  131. modules/caas/benchmarks/results/README.md +66 -0
  132. modules/caas/benchmarks/results/evaluation_2026-01-20.json +121 -0
  133. modules/caas/benchmarks/run_evaluation.py +561 -0
  134. modules/caas/benchmarks/statistical_tests.py +289 -0
  135. modules/caas/benchmarks/verify_sample_corpus.py +83 -0
  136. modules/caas/docker-compose.yml +38 -0
  137. modules/caas/docs/CONTEXT_TRIAD.md +462 -0
  138. modules/caas/docs/CONTRIBUTING.md +346 -0
  139. modules/caas/docs/ETHICS_AND_LIMITATIONS.md +336 -0
  140. modules/caas/docs/HEURISTIC_ROUTER.md +442 -0
  141. modules/caas/docs/IMPLEMENTATION_SUMMARY.md +363 -0
  142. modules/caas/docs/IMPLEMENTATION_SUMMARY_CONTEXT_TRIAD.md +277 -0
  143. modules/caas/docs/IMPLEMENTATION_SUMMARY_HEURISTIC_ROUTER.md +231 -0
  144. modules/caas/docs/IMPLEMENTATION_SUMMARY_METADATA_INJECTION.md +258 -0
  145. modules/caas/docs/IMPLEMENTATION_SUMMARY_PRAGMATIC_TRUTH.md +212 -0
  146. modules/caas/docs/IMPLEMENTATION_SUMMARY_TRUST_GATEWAY.md +319 -0
  147. modules/caas/docs/LAYER_1_PRIMITIVE.md +202 -0
  148. modules/caas/docs/METADATA_INJECTION.md +404 -0
  149. modules/caas/docs/PRAGMATIC_TRUTH.md +431 -0
  150. modules/caas/docs/RELATED_WORK.md +312 -0
  151. modules/caas/docs/RELEASE_CHECKLIST.md +219 -0
  152. modules/caas/docs/RELEASE_GUIDE.md +285 -0
  153. modules/caas/docs/REPRODUCIBILITY.md +386 -0
  154. modules/caas/docs/SLIDING_WINDOW.md +387 -0
  155. modules/caas/docs/STRUCTURE_AWARE_INDEXING.md +158 -0
  156. modules/caas/docs/TESTING.md +259 -0
  157. modules/caas/docs/THREAT_MODEL.md +247 -0
  158. modules/caas/docs/TRUST_GATEWAY.md +575 -0
  159. modules/caas/docs/VFS.md +298 -0
  160. modules/caas/examples/agents/enterprise_security_agent.py +414 -0
  161. modules/caas/examples/agents/intelligent_document_analyzer.py +380 -0
  162. modules/caas/examples/demos/demo.py +309 -0
  163. modules/caas/examples/demos/demo_context_triad.py +225 -0
  164. modules/caas/examples/demos/demo_conversation_manager.py +285 -0
  165. modules/caas/examples/demos/demo_heuristic_router.py +133 -0
  166. modules/caas/examples/demos/demo_metadata_injection.py +198 -0
  167. modules/caas/examples/demos/demo_pragmatic_truth.py +303 -0
  168. modules/caas/examples/demos/demo_structure_aware.py +140 -0
  169. modules/caas/examples/demos/demo_time_decay.py +247 -0
  170. modules/caas/examples/demos/demo_trust_gateway.py +383 -0
  171. modules/caas/examples/multi_agent/README.md +159 -0
  172. modules/caas/examples/multi_agent/research_team.py +369 -0
  173. modules/caas/examples/multi_agent/vfs_collaboration.py +393 -0
  174. modules/caas/examples/usage/auth_module.py +142 -0
  175. modules/caas/examples/usage/usage_example.py +173 -0
  176. modules/caas/experiments/README.md +42 -0
  177. modules/caas/experiments/reproduce_results.py +462 -0
  178. modules/caas/paper/ARXIV_METADATA.md +145 -0
  179. modules/caas/paper/ARXIV_README.md +47 -0
  180. modules/caas/paper/CHECKLIST.md +103 -0
  181. modules/caas/paper/GITHUB_RELEASE_NOTES.md +105 -0
  182. modules/caas/paper/README.md +71 -0
  183. modules/caas/paper/abstract.md +24 -0
  184. modules/caas/paper/arxiv_submission.tar +0 -0
  185. modules/caas/paper/arxiv_submission.zip +0 -0
  186. modules/caas/paper/build_pdf.py +355 -0
  187. modules/caas/paper/experiments.md +149 -0
  188. modules/caas/paper/figures/.gitkeep +0 -0
  189. modules/caas/paper/figures/README.md +237 -0
  190. modules/caas/paper/figures/fig1_system_architecture.png +0 -0
  191. modules/caas/paper/figures/fig1_system_architecture.svg +198 -0
  192. modules/caas/paper/figures/fig2_context_triad.png +0 -0
  193. modules/caas/paper/figures/fig2_context_triad.svg +105 -0
  194. modules/caas/paper/figures/fig3_ablation_results.png +0 -0
  195. modules/caas/paper/figures/fig3_ablation_results.svg +113 -0
  196. modules/caas/paper/figures/fig4_routing_latency.png +0 -0
  197. modules/caas/paper/figures/fig4_routing_latency.svg +97 -0
  198. modules/caas/paper/intro.md +103 -0
  199. modules/caas/paper/latex/figures/fig1_system_architecture.png +0 -0
  200. modules/caas/paper/latex/figures/fig2_context_triad.png +0 -0
  201. modules/caas/paper/latex/figures/fig3_ablation_results.png +0 -0
  202. modules/caas/paper/latex/figures/fig4_routing_latency.png +0 -0
  203. modules/caas/paper/latex/main.tex +468 -0
  204. modules/caas/paper/latex/references.bib +140 -0
  205. modules/caas/paper/method.md +350 -0
  206. modules/caas/paper/outline.md +123 -0
  207. modules/caas/paper/related_work.md +101 -0
  208. modules/caas/paper/tables/.gitkeep +0 -0
  209. modules/caas/paper/tables/results_tables.md +50 -0
  210. modules/caas/pyproject.toml +172 -0
  211. modules/caas/requirements.txt +11 -0
  212. modules/caas/src/caas/__init__.py +232 -0
  213. modules/caas/src/caas/api/__init__.py +7 -0
  214. modules/caas/src/caas/api/server.py +1326 -0
  215. modules/caas/src/caas/caching.py +832 -0
  216. modules/caas/src/caas/cli.py +208 -0
  217. modules/caas/src/caas/conversation.py +221 -0
  218. modules/caas/src/caas/decay.py +118 -0
  219. modules/caas/src/caas/detection/__init__.py +7 -0
  220. modules/caas/src/caas/detection/detector.py +236 -0
  221. modules/caas/src/caas/enrichment.py +127 -0
  222. modules/caas/src/caas/gateway/__init__.py +24 -0
  223. modules/caas/src/caas/gateway/trust_gateway.py +471 -0
  224. modules/caas/src/caas/hf_utils.py +477 -0
  225. modules/caas/src/caas/ingestion/__init__.py +21 -0
  226. modules/caas/src/caas/ingestion/processors.py +251 -0
  227. modules/caas/src/caas/ingestion/structure_parser.py +185 -0
  228. modules/caas/src/caas/models.py +354 -0
  229. modules/caas/src/caas/pragmatic_truth.py +441 -0
  230. modules/caas/src/caas/routing/__init__.py +8 -0
  231. modules/caas/src/caas/routing/heuristic_router.py +242 -0
  232. modules/caas/src/caas/storage/__init__.py +7 -0
  233. modules/caas/src/caas/storage/store.py +450 -0
  234. modules/caas/src/caas/triad.py +472 -0
  235. modules/caas/src/caas/tuning/__init__.py +7 -0
  236. modules/caas/src/caas/tuning/tuner.py +322 -0
  237. modules/caas/src/caas/vfs/__init__.py +12 -0
  238. modules/caas/src/caas/vfs/filesystem.py +450 -0
  239. modules/caas/tests/__init__.py +3 -0
  240. modules/caas/tests/conftest.py +8 -0
  241. modules/caas/tests/test_caching.py +628 -0
  242. modules/caas/tests/test_context_triad.py +385 -0
  243. modules/caas/tests/test_conversation_manager.py +289 -0
  244. modules/caas/tests/test_functionality.py +215 -0
  245. modules/caas/tests/test_heuristic_router.py +370 -0
  246. modules/caas/tests/test_metadata_injection.py +328 -0
  247. modules/caas/tests/test_pragmatic_truth.py +322 -0
  248. modules/caas/tests/test_structure_aware_indexing.py +283 -0
  249. modules/caas/tests/test_time_decay.py +268 -0
  250. modules/caas/tests/test_trust_gateway.py +445 -0
  251. modules/caas/tests/test_vfs.py +298 -0
  252. modules/cmvk/.github/FUNDING.yml +9 -0
  253. modules/cmvk/.github/dependabot.yml +54 -0
  254. modules/cmvk/.github/workflows/ci.yml +205 -0
  255. modules/cmvk/.github/workflows/publish.yml +143 -0
  256. modules/cmvk/.gitignore +147 -0
  257. modules/cmvk/.pre-commit-config.yaml +58 -0
  258. modules/cmvk/CHANGELOG.md +146 -0
  259. modules/cmvk/CITATION.cff +48 -0
  260. modules/cmvk/CONTRIBUTING.md +229 -0
  261. modules/cmvk/Dockerfile +87 -0
  262. modules/cmvk/HF_MODEL_CARD.md +185 -0
  263. modules/cmvk/LICENSE +21 -0
  264. modules/cmvk/README.md +149 -0
  265. modules/cmvk/SECURITY.md +114 -0
  266. modules/cmvk/config/prompts/generator_v1.txt +23 -0
  267. modules/cmvk/config/prompts/verifier_hostile.txt +32 -0
  268. modules/cmvk/config/settings.yaml +40 -0
  269. modules/cmvk/coverage_html/.gitignore +2 -0
  270. modules/cmvk/coverage_html/class_index.html +658 -0
  271. modules/cmvk/coverage_html/coverage_html_cb_188fc9a4.js +735 -0
  272. modules/cmvk/coverage_html/favicon_32_cb_c827f16f.png +0 -0
  273. modules/cmvk/coverage_html/function_index.html +1978 -0
  274. modules/cmvk/coverage_html/index.html +255 -0
  275. modules/cmvk/coverage_html/keybd_closed_cb_900cfef5.png +0 -0
  276. modules/cmvk/coverage_html/status.json +1 -0
  277. modules/cmvk/coverage_html/style_cb_5c747636.css +389 -0
  278. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38___init___py.html +315 -0
  279. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_audit_py.html +499 -0
  280. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_benchmarks_py.html +575 -0
  281. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_constitutional_py.html +1001 -0
  282. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_hf_utils_py.html +398 -0
  283. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_metrics_py.html +570 -0
  284. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_profiles_py.html +397 -0
  285. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_types_py.html +109 -0
  286. modules/cmvk/coverage_html/z_2c49bd2ed3e01e38_verification_py.html +1053 -0
  287. modules/cmvk/docs/DIAGRAMS.md +325 -0
  288. modules/cmvk/docs/architecture.md +345 -0
  289. modules/cmvk/docs/features.md +308 -0
  290. modules/cmvk/docs/getting_started.md +279 -0
  291. modules/cmvk/docs/innovation_layer.md +377 -0
  292. modules/cmvk/docs/safety.md +281 -0
  293. modules/cmvk/docs/traceability.md +150 -0
  294. modules/cmvk/examples/basic_example.py +62 -0
  295. modules/cmvk/examples/demo_complete_pipeline.py +209 -0
  296. modules/cmvk/examples/demo_innovation_layer.py +197 -0
  297. modules/cmvk/examples/example.py +112 -0
  298. modules/cmvk/examples/model_diversity_comparison.py +110 -0
  299. modules/cmvk/examples/real_api_integration.py +121 -0
  300. modules/cmvk/examples/test_full_pipeline.py +303 -0
  301. modules/cmvk/experiments/FEATURE_2_LATERAL_THINKING.md +187 -0
  302. modules/cmvk/experiments/README.md +216 -0
  303. modules/cmvk/experiments/ablation_runner.py +666 -0
  304. modules/cmvk/experiments/baseline_runner.py +158 -0
  305. modules/cmvk/experiments/blind_spot_benchmark.py +364 -0
  306. modules/cmvk/experiments/datasets/README.md +85 -0
  307. modules/cmvk/experiments/datasets/humaneval_50.json +352 -0
  308. modules/cmvk/experiments/datasets/humaneval_full.json +1150 -0
  309. modules/cmvk/experiments/datasets/humaneval_sample.json +32 -0
  310. modules/cmvk/experiments/datasets/sabotage.json +262 -0
  311. modules/cmvk/experiments/datasets/sample.json +40 -0
  312. modules/cmvk/experiments/demo_with_traces.py +110 -0
  313. modules/cmvk/experiments/efficiency_curve.py +259 -0
  314. modules/cmvk/experiments/experiment_runner.py +243 -0
  315. modules/cmvk/experiments/paper_data_generator.py +183 -0
  316. modules/cmvk/experiments/reproduce_results.py +407 -0
  317. modules/cmvk/experiments/reproducible_runner.py +352 -0
  318. modules/cmvk/experiments/sabotage_stress_test.py +311 -0
  319. modules/cmvk/experiments/test_lateral_thinking.py +116 -0
  320. modules/cmvk/experiments/test_prosecutor.py +41 -0
  321. modules/cmvk/experiments/visualize_results.py +735 -0
  322. modules/cmvk/logs/traces/demo_HumanEval_0_20260121-204900.json +36 -0
  323. modules/cmvk/notebooks/analysis.ipynb +124 -0
  324. modules/cmvk/paper/PAPER.md +561 -0
  325. modules/cmvk/paper/arxiv_checklist.md +230 -0
  326. modules/cmvk/paper/cmvk_neurips.aux +77 -0
  327. modules/cmvk/paper/cmvk_neurips.bbl +81 -0
  328. modules/cmvk/paper/cmvk_neurips.blg +48 -0
  329. modules/cmvk/paper/cmvk_neurips.out +16 -0
  330. modules/cmvk/paper/cmvk_neurips.pdf +0 -0
  331. modules/cmvk/paper/cmvk_neurips.tex +309 -0
  332. modules/cmvk/paper/figures/ablation.png +0 -0
  333. modules/cmvk/paper/figures/ablation.svg +39 -0
  334. modules/cmvk/paper/figures/architecture.png +0 -0
  335. modules/cmvk/paper/figures/architecture.svg +115 -0
  336. modules/cmvk/paper/figures/results_bar.png +0 -0
  337. modules/cmvk/paper/figures/results_bar.svg +70 -0
  338. modules/cmvk/paper/generate_figures.py +383 -0
  339. modules/cmvk/paper/neurips_2024.sty +101 -0
  340. modules/cmvk/paper/references.bib +98 -0
  341. modules/cmvk/paper/structure.tex +200 -0
  342. modules/cmvk/pyproject.toml +189 -0
  343. modules/cmvk/requirements-dev.txt +19 -0
  344. modules/cmvk/requirements.txt +14 -0
  345. modules/cmvk/src/cmvk/__init__.py +216 -0
  346. modules/cmvk/src/cmvk/audit.py +400 -0
  347. modules/cmvk/src/cmvk/benchmarks.py +476 -0
  348. modules/cmvk/src/cmvk/constitutional.py +902 -0
  349. modules/cmvk/src/cmvk/hf_utils.py +299 -0
  350. modules/cmvk/src/cmvk/metrics.py +471 -0
  351. modules/cmvk/src/cmvk/profiles.py +298 -0
  352. modules/cmvk/src/cmvk/py.typed +0 -0
  353. modules/cmvk/src/cmvk/types.py +10 -0
  354. modules/cmvk/src/cmvk/verification.py +954 -0
  355. modules/cmvk/src/cross_model_verification_kernel/__init__.py +91 -0
  356. modules/cmvk/src/cross_model_verification_kernel/__main__.py +10 -0
  357. modules/cmvk/src/cross_model_verification_kernel/agents/__init__.py +16 -0
  358. modules/cmvk/src/cross_model_verification_kernel/agents/base_agent.py +142 -0
  359. modules/cmvk/src/cross_model_verification_kernel/agents/generator_openai.py +223 -0
  360. modules/cmvk/src/cross_model_verification_kernel/agents/verifier_anthropic.py +448 -0
  361. modules/cmvk/src/cross_model_verification_kernel/agents/verifier_gemini.py +481 -0
  362. modules/cmvk/src/cross_model_verification_kernel/cli.py +570 -0
  363. modules/cmvk/src/cross_model_verification_kernel/core/__init__.py +26 -0
  364. modules/cmvk/src/cross_model_verification_kernel/core/graph_memory.py +308 -0
  365. modules/cmvk/src/cross_model_verification_kernel/core/kernel.py +413 -0
  366. modules/cmvk/src/cross_model_verification_kernel/core/trace_logger.py +75 -0
  367. modules/cmvk/src/cross_model_verification_kernel/core/types.py +121 -0
  368. modules/cmvk/src/cross_model_verification_kernel/datasets/__init__.py +20 -0
  369. modules/cmvk/src/cross_model_verification_kernel/datasets/humaneval_loader.py +271 -0
  370. modules/cmvk/src/cross_model_verification_kernel/generator.py +118 -0
  371. modules/cmvk/src/cross_model_verification_kernel/kernel.py +292 -0
  372. modules/cmvk/src/cross_model_verification_kernel/models.py +111 -0
  373. modules/cmvk/src/cross_model_verification_kernel/py.typed +1 -0
  374. modules/cmvk/src/cross_model_verification_kernel/simple_kernel.py +185 -0
  375. modules/cmvk/src/cross_model_verification_kernel/tools/__init__.py +94 -0
  376. modules/cmvk/src/cross_model_verification_kernel/tools/huggingface_upload.py +394 -0
  377. modules/cmvk/src/cross_model_verification_kernel/tools/sandbox.py +159 -0
  378. modules/cmvk/src/cross_model_verification_kernel/tools/statistics.py +468 -0
  379. modules/cmvk/src/cross_model_verification_kernel/tools/visualizer.py +312 -0
  380. modules/cmvk/src/cross_model_verification_kernel/tools/web_search.py +86 -0
  381. modules/cmvk/src/cross_model_verification_kernel/verifier.py +257 -0
  382. modules/cmvk/tests/__init__.py +3 -0
  383. modules/cmvk/tests/conftest.py +61 -0
  384. modules/cmvk/tests/integration/__init__.py +1 -0
  385. modules/cmvk/tests/integration/test_anthropic_verifier.py +269 -0
  386. modules/cmvk/tests/integration/test_integration.py +53 -0
  387. modules/cmvk/tests/integration/test_lateral_thinking_integration.py +199 -0
  388. modules/cmvk/tests/integration/test_lateral_thinking_witness.py +208 -0
  389. modules/cmvk/tests/integration/test_prosecutor_mode.py +131 -0
  390. modules/cmvk/tests/test_constitutional.py +611 -0
  391. modules/cmvk/tests/test_enhanced_features.py +603 -0
  392. modules/cmvk/tests/test_verification.py +255 -0
  393. modules/cmvk/tests/unit/__init__.py +1 -0
  394. modules/cmvk/tests/unit/test_agents.py +64 -0
  395. modules/cmvk/tests/unit/test_cli.py +224 -0
  396. modules/cmvk/tests/unit/test_core.py +126 -0
  397. modules/cmvk/tests/unit/test_humaneval_loader.py +197 -0
  398. modules/cmvk/tests/unit/test_kernel.py +255 -0
  399. modules/cmvk/tests/unit/test_reproducibility.py +160 -0
  400. modules/cmvk/tests/unit/test_trace_logger.py +115 -0
  401. modules/cmvk/tests/unit/test_visualizer.py +218 -0
  402. modules/control-plane/.github/ISSUE_TEMPLATE/bug_report.yml +82 -0
  403. modules/control-plane/.github/ISSUE_TEMPLATE/config.yml +11 -0
  404. modules/control-plane/.github/ISSUE_TEMPLATE/feature_request.yml +104 -0
  405. modules/control-plane/.github/ISSUE_TEMPLATE/question.yml +70 -0
  406. modules/control-plane/.github/ISSUE_TEMPLATE/security_vulnerability.yml +84 -0
  407. modules/control-plane/.github/discussions.yml +73 -0
  408. modules/control-plane/.github/pull_request_template.md +82 -0
  409. modules/control-plane/.github/workflows/publish.yml +146 -0
  410. modules/control-plane/.github/workflows/release.yml +39 -0
  411. modules/control-plane/.github/workflows/tests.yml +58 -0
  412. modules/control-plane/.gitignore +55 -0
  413. modules/control-plane/CHANGELOG.md +203 -0
  414. modules/control-plane/CONTRIBUTING.md +311 -0
  415. modules/control-plane/CONTRIBUTORS.md +88 -0
  416. modules/control-plane/Dockerfile +82 -0
  417. modules/control-plane/LICENSE +21 -0
  418. modules/control-plane/MANIFEST.in +17 -0
  419. modules/control-plane/README.md +1264 -0
  420. modules/control-plane/ROADMAP.md +228 -0
  421. modules/control-plane/SECURITY.md +210 -0
  422. modules/control-plane/SUPPORT.md +106 -0
  423. modules/control-plane/acp-cli.py +212 -0
  424. modules/control-plane/benchmark/README.md +257 -0
  425. modules/control-plane/benchmark/__init__.py +19 -0
  426. modules/control-plane/benchmark/red_team_dataset.py +517 -0
  427. modules/control-plane/benchmark.py +563 -0
  428. modules/control-plane/build_and_publish.sh +130 -0
  429. modules/control-plane/docker-compose.yml +74 -0
  430. modules/control-plane/docs/ABLATION_STUDIES.md +528 -0
  431. modules/control-plane/docs/ADAPTER_GUIDE.md +544 -0
  432. modules/control-plane/docs/ADVANCED_FEATURES.md +543 -0
  433. modules/control-plane/docs/AIOS_COMPARISON.md +296 -0
  434. modules/control-plane/docs/BIBLIOGRAPHY.md +367 -0
  435. modules/control-plane/docs/CASE_STUDIES.md +645 -0
  436. modules/control-plane/docs/DOCKER_DEPLOYMENT.md +184 -0
  437. modules/control-plane/docs/ECOSYSTEM_STATUS.md +98 -0
  438. modules/control-plane/docs/HF_MODEL_CARD.md +168 -0
  439. modules/control-plane/docs/KERNEL_V1_RELEASE.md +454 -0
  440. modules/control-plane/docs/LAYER3_FRAMEWORK.md +227 -0
  441. modules/control-plane/docs/LIMITATIONS.md +523 -0
  442. modules/control-plane/docs/PYPI_PUBLISHING.md +195 -0
  443. modules/control-plane/docs/README.md +58 -0
  444. modules/control-plane/docs/RELATED_WORK.md +319 -0
  445. modules/control-plane/docs/RELEASE_v1.1.0.md +252 -0
  446. modules/control-plane/docs/REPRODUCIBILITY.md +540 -0
  447. modules/control-plane/docs/RESEARCH_FOUNDATION.md +197 -0
  448. modules/control-plane/docs/api/CORE.md +270 -0
  449. modules/control-plane/docs/architecture/architecture.md +120 -0
  450. modules/control-plane/docs/community/ANNOUNCEMENT_TEMPLATES.md +52 -0
  451. modules/control-plane/docs/guides/IMPLEMENTATION.md +225 -0
  452. modules/control-plane/docs/guides/PHILOSOPHY.md +354 -0
  453. modules/control-plane/docs/guides/QUICKSTART.md +217 -0
  454. modules/control-plane/examples/README.md +138 -0
  455. modules/control-plane/examples/a2a_demo.py +410 -0
  456. modules/control-plane/examples/adapter_demo.py +347 -0
  457. modules/control-plane/examples/advanced_features.py +403 -0
  458. modules/control-plane/examples/basic_usage.py +261 -0
  459. modules/control-plane/examples/benchmark_demo.py +186 -0
  460. modules/control-plane/examples/compliance_demo.py +333 -0
  461. modules/control-plane/examples/configuration.py +265 -0
  462. modules/control-plane/examples/getting_started.py +178 -0
  463. modules/control-plane/examples/hibernation_and_time_travel_demo.py +406 -0
  464. modules/control-plane/examples/interactive_tutorial.ipynb +497 -0
  465. modules/control-plane/examples/kernel_interceptor_demo.py +202 -0
  466. modules/control-plane/examples/kernel_v1_demo.py +273 -0
  467. modules/control-plane/examples/langchain_demo.py +281 -0
  468. modules/control-plane/examples/lifecycle_demo.py +724 -0
  469. modules/control-plane/examples/mcp_demo.py +378 -0
  470. modules/control-plane/examples/ml_safety_demo.py +157 -0
  471. modules/control-plane/examples/multimodal_demo.py +347 -0
  472. modules/control-plane/examples/observability_demo.py +370 -0
  473. modules/control-plane/examples/use_cases.py +336 -0
  474. modules/control-plane/experiments/long_horizon_purge.py +235 -0
  475. modules/control-plane/experiments/multi_agent_rag.py +165 -0
  476. modules/control-plane/experiments/reproduce_results.py +667 -0
  477. modules/control-plane/paper/ARXIV_SUBMISSION_INFO.txt +122 -0
  478. modules/control-plane/paper/ETHICS_STATEMENT.md +248 -0
  479. modules/control-plane/paper/PAPER_CHECKLIST.md +72 -0
  480. modules/control-plane/paper/Paper.pdf +0 -0
  481. modules/control-plane/paper/README.md +71 -0
  482. modules/control-plane/paper/appendix.md +152 -0
  483. modules/control-plane/paper/architecture.md +15 -0
  484. modules/control-plane/paper/arxiv/figures/ablation_chart.png +0 -0
  485. modules/control-plane/paper/arxiv/figures/architecture.png +0 -0
  486. modules/control-plane/paper/arxiv/figures/constraint_graphs.png +0 -0
  487. modules/control-plane/paper/arxiv/figures/results_chart.png +0 -0
  488. modules/control-plane/paper/arxiv/main.aux +97 -0
  489. modules/control-plane/paper/arxiv/main.bbl +112 -0
  490. modules/control-plane/paper/arxiv/main.blg +48 -0
  491. modules/control-plane/paper/arxiv/main.out +33 -0
  492. modules/control-plane/paper/arxiv/main.pdf +0 -0
  493. modules/control-plane/paper/arxiv/main.tex +479 -0
  494. modules/control-plane/paper/arxiv/references.bib +234 -0
  495. modules/control-plane/paper/arxiv_submission.tar +0 -0
  496. modules/control-plane/paper/arxiv_submission.zip +0 -0
  497. modules/control-plane/paper/build.sh +68 -0
  498. modules/control-plane/paper/figures/README.md +47 -0
  499. modules/control-plane/paper/figures/ablation_chart.pdf +0 -0
  500. modules/control-plane/paper/figures/ablation_chart.png +0 -0
  501. modules/control-plane/paper/figures/architecture.pdf +0 -0
  502. modules/control-plane/paper/figures/architecture.png +0 -0
  503. modules/control-plane/paper/figures/constraint_graphs.pdf +0 -0
  504. modules/control-plane/paper/figures/constraint_graphs.png +0 -0
  505. modules/control-plane/paper/figures/generate_figures.py +252 -0
  506. modules/control-plane/paper/figures/results_chart.pdf +0 -0
  507. modules/control-plane/paper/figures/results_chart.png +0 -0
  508. modules/control-plane/paper/main.md +273 -0
  509. modules/control-plane/paper/main.tex +214 -0
  510. modules/control-plane/paper/main_arxiv.aux +53 -0
  511. modules/control-plane/paper/main_arxiv.out +17 -0
  512. modules/control-plane/paper/main_arxiv.pdf +0 -0
  513. modules/control-plane/paper/main_arxiv.tex +264 -0
  514. modules/control-plane/paper/references.bib +234 -0
  515. modules/control-plane/pyproject.toml +124 -0
  516. modules/control-plane/reproducibility/ABLATIONS.md +136 -0
  517. modules/control-plane/reproducibility/README.md +288 -0
  518. modules/control-plane/reproducibility/commands.md +467 -0
  519. modules/control-plane/reproducibility/docker_config/Dockerfile +39 -0
  520. modules/control-plane/reproducibility/experiment_configs/purge_config.json +46 -0
  521. modules/control-plane/reproducibility/experiment_configs/rag_config.json +36 -0
  522. modules/control-plane/reproducibility/hardware_specs.md +317 -0
  523. modules/control-plane/reproducibility/requirements_frozen.txt +0 -0
  524. modules/control-plane/reproducibility/run_all_experiments.sh +45 -0
  525. modules/control-plane/reproducibility/seeds.json +106 -0
  526. modules/control-plane/scripts/prepare_pypi.py +46 -0
  527. modules/control-plane/scripts/prepare_release.py +176 -0
  528. modules/control-plane/scripts/upload_dataset_to_hf.py +316 -0
  529. modules/control-plane/setup.py +69 -0
  530. modules/control-plane/src/agent_control_plane/__init__.py +639 -0
  531. modules/control-plane/src/agent_control_plane/a2a_adapter.py +541 -0
  532. modules/control-plane/src/agent_control_plane/adapter.py +415 -0
  533. modules/control-plane/src/agent_control_plane/agent_hibernation.py +364 -0
  534. modules/control-plane/src/agent_control_plane/agent_kernel.py +464 -0
  535. modules/control-plane/src/agent_control_plane/compliance.py +718 -0
  536. modules/control-plane/src/agent_control_plane/constraint_graphs.py +475 -0
  537. modules/control-plane/src/agent_control_plane/control_plane.py +848 -0
  538. modules/control-plane/src/agent_control_plane/example_executors.py +193 -0
  539. modules/control-plane/src/agent_control_plane/execution_engine.py +229 -0
  540. modules/control-plane/src/agent_control_plane/flight_recorder.py +600 -0
  541. modules/control-plane/src/agent_control_plane/governance_layer.py +432 -0
  542. modules/control-plane/src/agent_control_plane/hf_utils.py +561 -0
  543. modules/control-plane/src/agent_control_plane/interfaces/__init__.py +53 -0
  544. modules/control-plane/src/agent_control_plane/interfaces/kernel_interface.py +359 -0
  545. modules/control-plane/src/agent_control_plane/interfaces/plugin_interface.py +495 -0
  546. modules/control-plane/src/agent_control_plane/interfaces/protocol_interfaces.py +385 -0
  547. modules/control-plane/src/agent_control_plane/kernel_space.py +707 -0
  548. modules/control-plane/src/agent_control_plane/langchain_adapter.py +422 -0
  549. modules/control-plane/src/agent_control_plane/lifecycle.py +3111 -0
  550. modules/control-plane/src/agent_control_plane/mcp_adapter.py +517 -0
  551. modules/control-plane/src/agent_control_plane/ml_safety.py +560 -0
  552. modules/control-plane/src/agent_control_plane/multimodal.py +724 -0
  553. modules/control-plane/src/agent_control_plane/mute_agent.py +419 -0
  554. modules/control-plane/src/agent_control_plane/observability.py +785 -0
  555. modules/control-plane/src/agent_control_plane/orchestrator.py +480 -0
  556. modules/control-plane/src/agent_control_plane/plugin_registry.py +748 -0
  557. modules/control-plane/src/agent_control_plane/policy_engine.py +525 -0
  558. modules/control-plane/src/agent_control_plane/shadow_mode.py +307 -0
  559. modules/control-plane/src/agent_control_plane/signals.py +491 -0
  560. modules/control-plane/src/agent_control_plane/supervisor_agents.py +427 -0
  561. modules/control-plane/src/agent_control_plane/time_travel_debugger.py +554 -0
  562. modules/control-plane/src/agent_control_plane/tool_registry.py +350 -0
  563. modules/control-plane/src/agent_control_plane/vfs.py +695 -0
  564. modules/control-plane/tests/README.md +33 -0
  565. modules/control-plane/tests/test_a2a_adapter.py +336 -0
  566. modules/control-plane/tests/test_adapter.py +422 -0
  567. modules/control-plane/tests/test_advanced_features.py +389 -0
  568. modules/control-plane/tests/test_benchmark.py +223 -0
  569. modules/control-plane/tests/test_compliance.py +214 -0
  570. modules/control-plane/tests/test_control_plane.py +295 -0
  571. modules/control-plane/tests/test_hibernation.py +274 -0
  572. modules/control-plane/tests/test_kernel_interception.py +284 -0
  573. modules/control-plane/tests/test_langchain_adapter.py +258 -0
  574. modules/control-plane/tests/test_lifecycle.py +1174 -0
  575. modules/control-plane/tests/test_mcp_adapter.py +293 -0
  576. modules/control-plane/tests/test_ml_safety.py +142 -0
  577. modules/control-plane/tests/test_multimodal.py +317 -0
  578. modules/control-plane/tests/test_new_features.py +435 -0
  579. modules/control-plane/tests/test_observability.py +338 -0
  580. modules/control-plane/tests/test_time_travel.py +387 -0
  581. modules/emk/.github/workflows/ci.yml +105 -0
  582. modules/emk/.github/workflows/publish.yml +144 -0
  583. modules/emk/.gitignore +74 -0
  584. modules/emk/CHANGELOG.md +41 -0
  585. modules/emk/CONTRIBUTING.md +295 -0
  586. modules/emk/IMPLEMENTATION.md +174 -0
  587. modules/emk/LICENSE +21 -0
  588. modules/emk/MANIFEST.in +8 -0
  589. modules/emk/README.md +135 -0
  590. modules/emk/RELEASE_NOTES.md +82 -0
  591. modules/emk/SECURITY.md +52 -0
  592. modules/emk/codecov.yml +39 -0
  593. modules/emk/docs/MEMORY_MANAGEMENT.md +285 -0
  594. modules/emk/emk/__init__.py +106 -0
  595. modules/emk/emk/hf_utils.py +419 -0
  596. modules/emk/emk/indexer.py +144 -0
  597. modules/emk/emk/py.typed +0 -0
  598. modules/emk/emk/schema.py +204 -0
  599. modules/emk/emk/sleep_cycle.py +345 -0
  600. modules/emk/emk/store.py +479 -0
  601. modules/emk/examples/basic_usage.py +123 -0
  602. modules/emk/examples/memory_features_demo.py +154 -0
  603. modules/emk/experiments/README.md +59 -0
  604. modules/emk/experiments/reproduce_results.py +461 -0
  605. modules/emk/experiments/results.json +61 -0
  606. modules/emk/paper/structure.tex +192 -0
  607. modules/emk/paper/whitepaper.md +273 -0
  608. modules/emk/pyproject.toml +91 -0
  609. modules/emk/setup.py +5 -0
  610. modules/emk/tests/test_file_adapter.py +195 -0
  611. modules/emk/tests/test_indexer.py +174 -0
  612. modules/emk/tests/test_init.py +55 -0
  613. modules/emk/tests/test_negative_memory.py +83 -0
  614. modules/emk/tests/test_schema.py +150 -0
  615. modules/emk/tests/test_semantic_rules.py +175 -0
  616. modules/emk/tests/test_sleep_cycle.py +335 -0
  617. modules/emk/tests/test_store_anti_patterns.py +239 -0
  618. modules/iatp/.github/workflows/docker-build.yml +124 -0
  619. modules/iatp/.github/workflows/publish.yml +174 -0
  620. modules/iatp/.github/workflows/python-package.yml +121 -0
  621. modules/iatp/.gitignore +67 -0
  622. modules/iatp/.pre-commit-config.yaml +64 -0
  623. modules/iatp/CHANGELOG.md +120 -0
  624. modules/iatp/Dockerfile +91 -0
  625. modules/iatp/IMPLEMENTATION_SUMMARY.md +218 -0
  626. modules/iatp/MANIFEST.in +9 -0
  627. modules/iatp/README.md +180 -0
  628. modules/iatp/docker/Dockerfile.agent +27 -0
  629. modules/iatp/docker/Dockerfile.sidecar-python +86 -0
  630. modules/iatp/docker/README.md +258 -0
  631. modules/iatp/docker-compose.yml +194 -0
  632. modules/iatp/docs/ARCHITECTURE.md +243 -0
  633. modules/iatp/docs/CLI_GUIDE.md +220 -0
  634. modules/iatp/docs/DEPLOYMENT.md +304 -0
  635. modules/iatp/examples/README.md +132 -0
  636. modules/iatp/examples/backend_agent.py +39 -0
  637. modules/iatp/examples/client.py +168 -0
  638. modules/iatp/examples/demo_attestation_reputation.py +274 -0
  639. modules/iatp/examples/demo_client.py +240 -0
  640. modules/iatp/examples/demo_rbac.py +143 -0
  641. modules/iatp/examples/integration_demo.py +245 -0
  642. modules/iatp/examples/manifests/coder_agent.json +20 -0
  643. modules/iatp/examples/manifests/reviewer_agent.json +19 -0
  644. modules/iatp/examples/manifests/secure_bank.json +14 -0
  645. modules/iatp/examples/manifests/standard_agent.json +14 -0
  646. modules/iatp/examples/manifests/untrusted_honeypot.json +14 -0
  647. modules/iatp/examples/run_secure_bank_sidecar.py +85 -0
  648. modules/iatp/examples/run_sidecar.py +105 -0
  649. modules/iatp/examples/run_untrusted_sidecar.py +77 -0
  650. modules/iatp/examples/secure_bank_agent.py +138 -0
  651. modules/iatp/examples/test_untrusted.py +82 -0
  652. modules/iatp/examples/untrusted_agent.py +119 -0
  653. modules/iatp/experiments/README.md +58 -0
  654. modules/iatp/experiments/cascading_hallucination/README.md +149 -0
  655. modules/iatp/experiments/cascading_hallucination/agent_a_user.py +41 -0
  656. modules/iatp/experiments/cascading_hallucination/agent_b_summarizer.py +54 -0
  657. modules/iatp/experiments/cascading_hallucination/agent_c_database.py +47 -0
  658. modules/iatp/experiments/cascading_hallucination/proof_of_concept.py +290 -0
  659. modules/iatp/experiments/cascading_hallucination/run_experiment.py +226 -0
  660. modules/iatp/experiments/cascading_hallucination/sidecar_c.py +61 -0
  661. modules/iatp/experiments/reproduce_results.py +574 -0
  662. modules/iatp/experiments/results.json +2336 -0
  663. modules/iatp/iatp/__init__.py +164 -0
  664. modules/iatp/iatp/attestation.py +401 -0
  665. modules/iatp/iatp/cli.py +253 -0
  666. modules/iatp/iatp/hf_utils.py +469 -0
  667. modules/iatp/iatp/ipc_pipes.py +578 -0
  668. modules/iatp/iatp/main.py +410 -0
  669. modules/iatp/iatp/models/__init__.py +445 -0
  670. modules/iatp/iatp/policy_engine.py +335 -0
  671. modules/iatp/iatp/py.typed +2 -0
  672. modules/iatp/iatp/recovery.py +319 -0
  673. modules/iatp/iatp/security/__init__.py +268 -0
  674. modules/iatp/iatp/sidecar/__init__.py +517 -0
  675. modules/iatp/iatp/telemetry/__init__.py +162 -0
  676. modules/iatp/iatp/tests/__init__.py +1 -0
  677. modules/iatp/iatp/tests/test_attestation.py +368 -0
  678. modules/iatp/iatp/tests/test_cli.py +129 -0
  679. modules/iatp/iatp/tests/test_models.py +128 -0
  680. modules/iatp/iatp/tests/test_policy_engine.py +345 -0
  681. modules/iatp/iatp/tests/test_recovery.py +279 -0
  682. modules/iatp/iatp/tests/test_security.py +220 -0
  683. modules/iatp/iatp/tests/test_sidecar.py +165 -0
  684. modules/iatp/iatp/tests/test_telemetry.py +173 -0
  685. modules/iatp/paper/BLOG.md +307 -0
  686. modules/iatp/paper/PAPER.md +236 -0
  687. modules/iatp/paper/RFC_SUBMISSION.md +299 -0
  688. modules/iatp/paper/whitepaper.md +369 -0
  689. modules/iatp/proto/README.md +200 -0
  690. modules/iatp/proto/generate_stubs.py +81 -0
  691. modules/iatp/proto/iatp.proto +552 -0
  692. modules/iatp/pyproject.toml +180 -0
  693. modules/iatp/requirements-dev.txt +2 -0
  694. modules/iatp/requirements.txt +6 -0
  695. modules/iatp/setup.py +60 -0
  696. modules/iatp/sidecar/README.md +487 -0
  697. modules/iatp/sidecar/go/Dockerfile +32 -0
  698. modules/iatp/sidecar/go/README.md +237 -0
  699. modules/iatp/sidecar/go/go.mod +8 -0
  700. modules/iatp/sidecar/go/main.go +488 -0
  701. modules/iatp/spec/001-handshake.md +436 -0
  702. modules/iatp/spec/002-reversibility.md +394 -0
  703. modules/iatp/spec/schema/capability_manifest.json +266 -0
  704. modules/iatp/test_integration.py +310 -0
  705. modules/mcp-kernel-server/README.md +261 -0
  706. modules/mcp-kernel-server/pyproject.toml +60 -0
  707. modules/mcp-kernel-server/src/mcp_kernel_server/__init__.py +26 -0
  708. modules/mcp-kernel-server/src/mcp_kernel_server/cli.py +229 -0
  709. modules/mcp-kernel-server/src/mcp_kernel_server/resources.py +215 -0
  710. modules/mcp-kernel-server/src/mcp_kernel_server/server.py +562 -0
  711. modules/mcp-kernel-server/src/mcp_kernel_server/tools.py +1172 -0
  712. modules/mute-agent/.github/workflows/safety_check.yml +45 -0
  713. modules/mute-agent/.gitignore +53 -0
  714. modules/mute-agent/ARCHITECTURE.md +531 -0
  715. modules/mute-agent/BENCHMARK_GUIDE.md +384 -0
  716. modules/mute-agent/COMPLETION_SUMMARY.md +293 -0
  717. modules/mute-agent/EXPERIMENT_SUMMARY.md +318 -0
  718. modules/mute-agent/IMPLEMENTATION_SUMMARY.md +212 -0
  719. modules/mute-agent/LICENSE +21 -0
  720. modules/mute-agent/PHASE3_SUMMARY.md +297 -0
  721. modules/mute-agent/README.md +360 -0
  722. modules/mute-agent/STEEL_MAN_RESULTS.md +353 -0
  723. modules/mute-agent/USAGE.md +505 -0
  724. modules/mute-agent/V2_IMPLEMENTATION_SUMMARY.md +253 -0
  725. modules/mute-agent/V2_STEEL_MAN_IMPLEMENTATION.md +274 -0
  726. modules/mute-agent/VERIFICATION_REPORT.md +435 -0
  727. modules/mute-agent/charts/cost_comparison.png +0 -0
  728. modules/mute-agent/charts/cost_vs_ambiguity.png +0 -0
  729. modules/mute-agent/charts/metrics_comparison.png +0 -0
  730. modules/mute-agent/charts/scenario_breakdown.png +0 -0
  731. modules/mute-agent/charts/trace_attack_blocked.html +140 -0
  732. modules/mute-agent/charts/trace_attack_blocked.png +0 -0
  733. modules/mute-agent/charts/trace_failure.html +140 -0
  734. modules/mute-agent/charts/trace_failure.png +0 -0
  735. modules/mute-agent/charts/trace_success.html +140 -0
  736. modules/mute-agent/charts/trace_success.png +0 -0
  737. modules/mute-agent/examples/__init__.py +1 -0
  738. modules/mute-agent/examples/advanced_example.py +384 -0
  739. modules/mute-agent/examples/graph_debugger_demo.py +241 -0
  740. modules/mute-agent/examples/listener_example.py +297 -0
  741. modules/mute-agent/examples/simple_example.py +242 -0
  742. modules/mute-agent/examples/steel_man_demo.py +297 -0
  743. modules/mute-agent/experiments/README.md +135 -0
  744. modules/mute-agent/experiments/__init__.py +3 -0
  745. modules/mute-agent/experiments/agent_comparison.csv +6 -0
  746. modules/mute-agent/experiments/agent_comparison_50runs.csv +6 -0
  747. modules/mute-agent/experiments/ambiguity_test.py +335 -0
  748. modules/mute-agent/experiments/ambiguity_test_results.csv +31 -0
  749. modules/mute-agent/experiments/ambiguity_test_results_50runs.csv +51 -0
  750. modules/mute-agent/experiments/baseline_agent.py +189 -0
  751. modules/mute-agent/experiments/benchmark.py +402 -0
  752. modules/mute-agent/experiments/demo.py +172 -0
  753. modules/mute-agent/experiments/generate_cost_curve.py +474 -0
  754. modules/mute-agent/experiments/jailbreak_test.py +137 -0
  755. modules/mute-agent/experiments/latent_state_scenario.py +361 -0
  756. modules/mute-agent/experiments/mute_agent_experiment.py +349 -0
  757. modules/mute-agent/experiments/run_extended_experiment.py +40 -0
  758. modules/mute-agent/experiments/run_v2_experiments.py +266 -0
  759. modules/mute-agent/experiments/run_v2_experiments_auto.py +247 -0
  760. modules/mute-agent/experiments/v2_scenarios/README.md +214 -0
  761. modules/mute-agent/experiments/v2_scenarios/__init__.py +4 -0
  762. modules/mute-agent/experiments/v2_scenarios/scenario_1_deep_dependency.py +325 -0
  763. modules/mute-agent/experiments/v2_scenarios/scenario_2_adversarial.py +328 -0
  764. modules/mute-agent/experiments/v2_scenarios/scenario_3_false_positive.py +303 -0
  765. modules/mute-agent/experiments/v2_scenarios/scenario_4_performance.py +319 -0
  766. modules/mute-agent/experiments/visualize.py +400 -0
  767. modules/mute-agent/mute_agent/__init__.py +66 -0
  768. modules/mute-agent/mute_agent/core/__init__.py +1 -0
  769. modules/mute-agent/mute_agent/core/execution_agent.py +164 -0
  770. modules/mute-agent/mute_agent/core/handshake_protocol.py +199 -0
  771. modules/mute-agent/mute_agent/core/reasoning_agent.py +236 -0
  772. modules/mute-agent/mute_agent/knowledge_graph/__init__.py +1 -0
  773. modules/mute-agent/mute_agent/knowledge_graph/graph_elements.py +63 -0
  774. modules/mute-agent/mute_agent/knowledge_graph/multidimensional_graph.py +168 -0
  775. modules/mute-agent/mute_agent/knowledge_graph/subgraph.py +222 -0
  776. modules/mute-agent/mute_agent/listener/__init__.py +41 -0
  777. modules/mute-agent/mute_agent/listener/adapters/__init__.py +29 -0
  778. modules/mute-agent/mute_agent/listener/adapters/base_adapter.py +187 -0
  779. modules/mute-agent/mute_agent/listener/adapters/caas_adapter.py +342 -0
  780. modules/mute-agent/mute_agent/listener/adapters/control_plane_adapter.py +434 -0
  781. modules/mute-agent/mute_agent/listener/adapters/iatp_adapter.py +330 -0
  782. modules/mute-agent/mute_agent/listener/adapters/scak_adapter.py +249 -0
  783. modules/mute-agent/mute_agent/listener/listener.py +608 -0
  784. modules/mute-agent/mute_agent/listener/state_observer.py +434 -0
  785. modules/mute-agent/mute_agent/listener/threshold_config.py +311 -0
  786. modules/mute-agent/mute_agent/super_system/__init__.py +1 -0
  787. modules/mute-agent/mute_agent/super_system/router.py +202 -0
  788. modules/mute-agent/mute_agent/visualization/__init__.py +8 -0
  789. modules/mute-agent/mute_agent/visualization/graph_debugger.py +495 -0
  790. modules/mute-agent/requirements-dev.txt +6 -0
  791. modules/mute-agent/requirements.txt +9 -0
  792. modules/mute-agent/setup.py +64 -0
  793. modules/mute-agent/src/__init__.py +0 -0
  794. modules/mute-agent/src/agents/__init__.py +0 -0
  795. modules/mute-agent/src/agents/baseline_agent.py +524 -0
  796. modules/mute-agent/src/agents/interactive_agent.py +113 -0
  797. modules/mute-agent/src/agents/mute_agent.py +622 -0
  798. modules/mute-agent/src/benchmarks/__init__.py +0 -0
  799. modules/mute-agent/src/benchmarks/evaluator.py +481 -0
  800. modules/mute-agent/src/benchmarks/scenarios.json +985 -0
  801. modules/mute-agent/src/core/__init__.py +0 -0
  802. modules/mute-agent/src/core/mock_state.py +320 -0
  803. modules/mute-agent/src/core/tools.py +441 -0
  804. modules/nexus/__init__.py +49 -0
  805. modules/nexus/arbiter.py +357 -0
  806. modules/nexus/client.py +464 -0
  807. modules/nexus/dmz.py +417 -0
  808. modules/nexus/escrow.py +428 -0
  809. modules/nexus/exceptions.py +284 -0
  810. modules/nexus/registry.py +391 -0
  811. modules/nexus/reputation.py +423 -0
  812. modules/nexus/schemas/__init__.py +49 -0
  813. modules/nexus/schemas/compliance.py +274 -0
  814. modules/nexus/schemas/escrow.py +249 -0
  815. modules/nexus/schemas/manifest.py +223 -0
  816. modules/nexus/schemas/receipt.py +206 -0
  817. modules/observability/README.md +192 -0
  818. modules/observability/alertmanager/alertmanager.yml +116 -0
  819. modules/observability/alerts/agent-os-alerts.yaml +197 -0
  820. modules/observability/docker-compose.yml +128 -0
  821. modules/observability/grafana/dashboards/agent-os-amb.json +448 -0
  822. modules/observability/grafana/dashboards/agent-os-cmvk.json +441 -0
  823. modules/observability/grafana/dashboards/agent-os-overview.json +268 -0
  824. modules/observability/grafana/dashboards/agent-os-performance.json +15 -0
  825. modules/observability/grafana/dashboards/agent-os-safety.json +50 -0
  826. modules/observability/grafana/provisioning/dashboards/dashboards.yml +15 -0
  827. modules/observability/grafana/provisioning/datasources/datasources.yml +33 -0
  828. modules/observability/otel/otel-collector-config.yml +61 -0
  829. modules/observability/prometheus/prometheus.yml +63 -0
  830. modules/observability/pyproject.toml +53 -0
  831. modules/observability/scripts/export_dashboards.py +55 -0
  832. modules/observability/src/agent_os_observability/__init__.py +25 -0
  833. modules/observability/src/agent_os_observability/dashboards.py +896 -0
  834. modules/observability/src/agent_os_observability/metrics.py +396 -0
  835. modules/observability/src/agent_os_observability/server.py +221 -0
  836. modules/observability/src/agent_os_observability/tracer.py +226 -0
  837. modules/primitives/.gitignore +8 -0
  838. modules/primitives/README.md +62 -0
  839. modules/primitives/agent_primitives/__init__.py +22 -0
  840. modules/primitives/agent_primitives/failures.py +82 -0
  841. modules/primitives/agent_primitives/py.typed +0 -0
  842. modules/primitives/pyproject.toml +68 -0
  843. modules/scak/.github/copilot-instructions.md +396 -0
  844. modules/scak/.github/workflows/release.yml +117 -0
  845. modules/scak/.gitignore +32 -0
  846. modules/scak/CHANGELOG.md +173 -0
  847. modules/scak/CITATION.cff +62 -0
  848. modules/scak/CONTRIBUTING.md +429 -0
  849. modules/scak/Dockerfile +58 -0
  850. modules/scak/ENTERPRISE_FEATURES.md +518 -0
  851. modules/scak/IMPLEMENTATION_SUMMARY.md +206 -0
  852. modules/scak/LIMITATIONS.md +565 -0
  853. modules/scak/MANIFEST.in +16 -0
  854. modules/scak/NOVELTY.md +535 -0
  855. modules/scak/README.md +928 -0
  856. modules/scak/RESEARCH.md +670 -0
  857. modules/scak/agent_kernel/__init__.py +66 -0
  858. modules/scak/agent_kernel/analyzer.py +432 -0
  859. modules/scak/agent_kernel/auditor.py +31 -0
  860. modules/scak/agent_kernel/completeness_auditor.py +234 -0
  861. modules/scak/agent_kernel/detector.py +200 -0
  862. modules/scak/agent_kernel/kernel.py +741 -0
  863. modules/scak/agent_kernel/memory_manager.py +82 -0
  864. modules/scak/agent_kernel/models.py +372 -0
  865. modules/scak/agent_kernel/nudge_mechanism.py +260 -0
  866. modules/scak/agent_kernel/outcome_analyzer.py +335 -0
  867. modules/scak/agent_kernel/patcher.py +579 -0
  868. modules/scak/agent_kernel/semantic_analyzer.py +313 -0
  869. modules/scak/agent_kernel/semantic_purge.py +346 -0
  870. modules/scak/agent_kernel/simulator.py +447 -0
  871. modules/scak/agent_kernel/teacher.py +82 -0
  872. modules/scak/agent_kernel/triage.py +149 -0
  873. modules/scak/build_and_publish.ps1 +74 -0
  874. modules/scak/build_and_publish.sh +74 -0
  875. modules/scak/cli.py +471 -0
  876. modules/scak/dashboard.py +462 -0
  877. modules/scak/datasets/DATASET_CARD.md +219 -0
  878. modules/scak/datasets/README.md +143 -0
  879. modules/scak/datasets/gaia_vague_queries/vague_queries.json +262 -0
  880. modules/scak/datasets/hf_upload/README.md +219 -0
  881. modules/scak/datasets/hf_upload/scak_gaia_laziness.jsonl +50 -0
  882. modules/scak/datasets/prepare_hf_datasets.py +145 -0
  883. modules/scak/datasets/red_team/jailbreak_patterns.json +202 -0
  884. modules/scak/docker-compose.yml +99 -0
  885. modules/scak/docs/Adaptive-Memory-Hierarchy.md +319 -0
  886. modules/scak/docs/Data-Contracts-and-Schemas.md +285 -0
  887. modules/scak/docs/Dual-Loop-Architecture.md +344 -0
  888. modules/scak/docs/Enhanced-Features.md +612 -0
  889. modules/scak/docs/LANGCHAIN_INTEGRATION.md +572 -0
  890. modules/scak/docs/README.md +128 -0
  891. modules/scak/docs/Reference-Implementations.md +163 -0
  892. modules/scak/docs/SCAK_V2.md +374 -0
  893. modules/scak/docs/Three-Failure-Types.md +178 -0
  894. modules/scak/examples/basic_example.py +155 -0
  895. modules/scak/examples/circuit_breaker_lazy_eval_demo.py +243 -0
  896. modules/scak/examples/langchain_integration_example.py +339 -0
  897. modules/scak/examples/layer4_demo.py +243 -0
  898. modules/scak/examples/production_features_demo.py +353 -0
  899. modules/scak/examples/quick_demo.py +79 -0
  900. modules/scak/examples/scak_v2_demo.py +252 -0
  901. modules/scak/experiments/README.md +438 -0
  902. modules/scak/experiments/ablation_studies/README.md +192 -0
  903. modules/scak/experiments/ablation_studies/ablation_no_audit.py +116 -0
  904. modules/scak/experiments/ablation_studies/ablation_no_purge.py +133 -0
  905. modules/scak/experiments/chaos_engineering/README.md +332 -0
  906. modules/scak/experiments/context_efficiency_test.py +328 -0
  907. modules/scak/experiments/gaia_benchmark/README.md +208 -0
  908. modules/scak/experiments/laziness_benchmark.py +179 -0
  909. modules/scak/experiments/long_horizon_task_experiment.py +252 -0
  910. modules/scak/experiments/multi_agent_rag_experiment.py +284 -0
  911. modules/scak/experiments/results/ablation_table.md +12 -0
  912. modules/scak/experiments/results/long_horizon.json +36 -0
  913. modules/scak/experiments/results/multi_agent_rag.json +66 -0
  914. modules/scak/experiments/run_comprehensive_ablations.py +332 -0
  915. modules/scak/experiments/test_auditor_patcher_integration.py +251 -0
  916. modules/scak/notebooks/getting_started.ipynb +33 -0
  917. modules/scak/paper/ARXIV_SUBMISSION_METADATA.txt +109 -0
  918. modules/scak/paper/PAPER_CHECKLIST.md +304 -0
  919. modules/scak/paper/Paper.pdf +0 -0
  920. modules/scak/paper/README.md +113 -0
  921. modules/scak/paper/appendix.md +351 -0
  922. modules/scak/paper/arxiv/bibliography.bib +284 -0
  923. modules/scak/paper/arxiv/fig1_ooda_architecture.pdf +0 -0
  924. modules/scak/paper/arxiv/fig2_memory_hierarchy.pdf +0 -0
  925. modules/scak/paper/arxiv/fig3_gaia_results.pdf +0 -0
  926. modules/scak/paper/arxiv/fig4_ablation_heatmap.pdf +0 -0
  927. modules/scak/paper/arxiv/fig5_context_reduction.pdf +0 -0
  928. modules/scak/paper/arxiv/fig6_mttr_boxplot.pdf +0 -0
  929. modules/scak/paper/arxiv/main.aux +103 -0
  930. modules/scak/paper/arxiv/main.bbl +113 -0
  931. modules/scak/paper/arxiv/main.blg +55 -0
  932. modules/scak/paper/arxiv/main.out +31 -0
  933. modules/scak/paper/arxiv/main.pdf +0 -0
  934. modules/scak/paper/arxiv/main.tex +482 -0
  935. modules/scak/paper/arxiv_submission/bibliography.bib +284 -0
  936. modules/scak/paper/arxiv_submission/fig1_ooda_architecture.pdf +0 -0
  937. modules/scak/paper/arxiv_submission/fig2_memory_hierarchy.pdf +0 -0
  938. modules/scak/paper/arxiv_submission/fig3_gaia_results.pdf +0 -0
  939. modules/scak/paper/arxiv_submission/fig4_ablation_heatmap.pdf +0 -0
  940. modules/scak/paper/arxiv_submission/fig5_context_reduction.pdf +0 -0
  941. modules/scak/paper/arxiv_submission/fig6_mttr_boxplot.pdf +0 -0
  942. modules/scak/paper/arxiv_submission/main.aux +103 -0
  943. modules/scak/paper/arxiv_submission/main.bbl +113 -0
  944. modules/scak/paper/arxiv_submission/main.blg +55 -0
  945. modules/scak/paper/arxiv_submission/main.out +31 -0
  946. modules/scak/paper/arxiv_submission/main.pdf +0 -0
  947. modules/scak/paper/arxiv_submission/main.tex +482 -0
  948. modules/scak/paper/arxiv_submission.tar.gz +0 -0
  949. modules/scak/paper/bibliography.bib +284 -0
  950. modules/scak/paper/build.sh +55 -0
  951. modules/scak/paper/figures/README.md +32 -0
  952. modules/scak/paper/figures/fig1_ooda_architecture.md +75 -0
  953. modules/scak/paper/figures/fig1_ooda_architecture.pdf +0 -0
  954. modules/scak/paper/figures/fig1_ooda_architecture.png +0 -0
  955. modules/scak/paper/figures/fig2_memory_hierarchy.md +83 -0
  956. modules/scak/paper/figures/fig2_memory_hierarchy.pdf +0 -0
  957. modules/scak/paper/figures/fig2_memory_hierarchy.png +0 -0
  958. modules/scak/paper/figures/fig3_gaia_results.md +64 -0
  959. modules/scak/paper/figures/fig3_gaia_results.pdf +0 -0
  960. modules/scak/paper/figures/fig3_gaia_results.png +0 -0
  961. modules/scak/paper/figures/fig4_ablation_heatmap.md +64 -0
  962. modules/scak/paper/figures/fig4_ablation_heatmap.pdf +0 -0
  963. modules/scak/paper/figures/fig4_ablation_heatmap.png +0 -0
  964. modules/scak/paper/figures/fig5_context_reduction.md +71 -0
  965. modules/scak/paper/figures/fig5_context_reduction.pdf +0 -0
  966. modules/scak/paper/figures/fig5_context_reduction.png +0 -0
  967. modules/scak/paper/figures/fig6_mttr_boxplot.md +80 -0
  968. modules/scak/paper/figures/fig6_mttr_boxplot.pdf +0 -0
  969. modules/scak/paper/figures/fig6_mttr_boxplot.png +0 -0
  970. modules/scak/paper/figures/generate_figures.py +463 -0
  971. modules/scak/paper/main.aux +103 -0
  972. modules/scak/paper/main.bbl +113 -0
  973. modules/scak/paper/main.blg +55 -0
  974. modules/scak/paper/main.md +192 -0
  975. modules/scak/paper/main.out +31 -0
  976. modules/scak/paper/main.pdf +0 -0
  977. modules/scak/paper/main.tex +482 -0
  978. modules/scak/reproducibility/ABLATIONS.md +225 -0
  979. modules/scak/reproducibility/Dockerfile.reproducibility +34 -0
  980. modules/scak/reproducibility/README.md +421 -0
  981. modules/scak/reproducibility/requirements-pinned.txt +32 -0
  982. modules/scak/reproducibility/run_all_experiments.py +395 -0
  983. modules/scak/reproducibility/seed_control.py +53 -0
  984. modules/scak/reproducibility/statistical_analysis.py +302 -0
  985. modules/scak/requirements.txt +50 -0
  986. modules/scak/setup.py +93 -0
  987. modules/scak/src/__init__.py +124 -0
  988. modules/scak/src/agents/__init__.py +13 -0
  989. modules/scak/src/agents/conflict_resolution.py +732 -0
  990. modules/scak/src/agents/orchestrator.py +761 -0
  991. modules/scak/src/agents/pubsub.py +484 -0
  992. modules/scak/src/agents/shadow_teacher.py +344 -0
  993. modules/scak/src/agents/swarm.py +661 -0
  994. modules/scak/src/agents/worker.py +357 -0
  995. modules/scak/src/integrations/__init__.py +81 -0
  996. modules/scak/src/integrations/cmvk_adapter.py +430 -0
  997. modules/scak/src/integrations/control_plane_adapter.py +601 -0
  998. modules/scak/src/integrations/langchain_integration.py +902 -0
  999. modules/scak/src/interfaces/__init__.py +59 -0
  1000. modules/scak/src/interfaces/llm_clients.py +505 -0
  1001. modules/scak/src/interfaces/openapi_tools.py +611 -0
  1002. modules/scak/src/interfaces/plugin_system.py +605 -0
  1003. modules/scak/src/interfaces/protocols.py +365 -0
  1004. modules/scak/src/interfaces/telemetry.py +464 -0
  1005. modules/scak/src/interfaces/tool_registry.py +547 -0
  1006. modules/scak/src/kernel/__init__.py +100 -0
  1007. modules/scak/src/kernel/auditor.py +305 -0
  1008. modules/scak/src/kernel/circuit_breaker.py +398 -0
  1009. modules/scak/src/kernel/core.py +724 -0
  1010. modules/scak/src/kernel/distributed.py +667 -0
  1011. modules/scak/src/kernel/evolution.py +455 -0
  1012. modules/scak/src/kernel/failover.py +621 -0
  1013. modules/scak/src/kernel/governance.py +710 -0
  1014. modules/scak/src/kernel/governance_v2.py +603 -0
  1015. modules/scak/src/kernel/lazy_evaluator.py +514 -0
  1016. modules/scak/src/kernel/load_testing.py +633 -0
  1017. modules/scak/src/kernel/memory.py +945 -0
  1018. modules/scak/src/kernel/patcher.py +581 -0
  1019. modules/scak/src/kernel/rubric.py +419 -0
  1020. modules/scak/src/kernel/schemas.py +390 -0
  1021. modules/scak/src/kernel/skill_mapper.py +309 -0
  1022. modules/scak/src/kernel/triage.py +149 -0
  1023. modules/scak/src/mocks/__init__.py +99 -0
  1024. modules/scak/tests/__init__.py +1 -0
  1025. modules/scak/tests/test_circuit_breaker.py +403 -0
  1026. modules/scak/tests/test_conflict_resolution.py +287 -0
  1027. modules/scak/tests/test_dual_loop.py +463 -0
  1028. modules/scak/tests/test_enhanced_features.py +421 -0
  1029. modules/scak/tests/test_failover_and_load.py +438 -0
  1030. modules/scak/tests/test_governance.py +185 -0
  1031. modules/scak/tests/test_kernel.py +359 -0
  1032. modules/scak/tests/test_langchain_integration.py +451 -0
  1033. modules/scak/tests/test_lazy_evaluator.py +465 -0
  1034. modules/scak/tests/test_llm_clients.py +122 -0
  1035. modules/scak/tests/test_memory_controller.py +528 -0
  1036. modules/scak/tests/test_orchestrator.py +181 -0
  1037. modules/scak/tests/test_phase3_integration.py +265 -0
  1038. modules/scak/tests/test_pubsub_swarm.py +203 -0
  1039. modules/scak/tests/test_reference_implementations.py +240 -0
  1040. modules/scak/tests/test_rubric.py +363 -0
  1041. modules/scak/tests/test_scak_v2.py +651 -0
  1042. modules/scak/tests/test_skill_mapper.py +217 -0
  1043. modules/scak/tests/test_specific_failures.py +393 -0
  1044. modules/scak/tests/test_tool_registry.py +264 -0
  1045. modules/scak/tests/test_tools_and_plugins.py +303 -0
  1046. modules/scak/tests/test_triage.py +596 -0
  1047. modules/scak/tests/test_write_through.py +319 -0
  1048. agent_os_kernel-1.1.0.dist-info/METADATA +0 -400
  1049. agent_os_kernel-1.1.0.dist-info/RECORD +0 -12
  1050. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/WHEEL +0 -0
  1051. {agent_os_kernel-1.1.0.dist-info → agent_os_kernel-1.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1326 @@
1
+ """
2
+ REST API for Context-as-a-Service.
3
+ """
4
+
5
+ import uuid
6
+ from datetime import datetime
7
+ from typing import List, Optional
8
+
9
+ from fastapi import FastAPI, HTTPException, UploadFile, File, Form
10
+ from fastapi.responses import JSONResponse
11
+
12
+ from caas.models import (
13
+ Document,
14
+ DocumentType,
15
+ ContentFormat,
16
+ ContextRequest,
17
+ ContextResponse,
18
+ ContextLayer,
19
+ ContextTriadRequest,
20
+ ContextTriadResponse,
21
+ AddContextRequest,
22
+ RouteRequest,
23
+ RoutingDecision,
24
+ ModelTier,
25
+ AddTurnRequest,
26
+ UpdateTurnRequest,
27
+ ConversationHistoryResponse,
28
+ CreateFileRequest,
29
+ UpdateFileRequest,
30
+ ReadFileRequest,
31
+ DeleteFileRequest,
32
+ ListFilesRequest,
33
+ FileResponse,
34
+ FileListResponse,
35
+ )
36
+ from caas.ingestion import ProcessorFactory
37
+ from caas.detection import DocumentTypeDetector, StructureAnalyzer
38
+ from caas.tuning import WeightTuner, CorpusAnalyzer
39
+ from caas.storage import DocumentStore, ContextExtractor
40
+ from caas.triad import ContextTriadManager
41
+ from caas.routing import HeuristicRouter
42
+ from caas.conversation import ConversationManager
43
+ from caas.gateway import TrustGateway, SecurityPolicy, DeploymentMode
44
+ from caas.vfs import VirtualFileSystem
45
+
46
+
47
+ # Initialize FastAPI app
48
+ app = FastAPI(
49
+ title="Context-as-a-Service",
50
+ description="Intelligent context extraction and serving",
51
+ version="0.1.0"
52
+ )
53
+
54
+ # Initialize components
55
+ document_store = DocumentStore()
56
+ detector = DocumentTypeDetector()
57
+ structure_analyzer = StructureAnalyzer()
58
+ weight_tuner = WeightTuner()
59
+ corpus_analyzer = CorpusAnalyzer()
60
+ triad_manager = ContextTriadManager()
61
+ heuristic_router = HeuristicRouter()
62
+ conversation_manager = ConversationManager(max_turns=10) # Sliding window with 10 turns
63
+ # Virtual File System for SDLC agents
64
+ vfs = VirtualFileSystem()
65
+ # Trust Gateway with enterprise-grade security
66
+ trust_gateway = TrustGateway(
67
+ security_policy=SecurityPolicy(
68
+ deployment_mode=DeploymentMode.ON_PREM,
69
+ security_level="high"
70
+ ),
71
+ audit_enabled=True
72
+ )
73
+ # Note: context_extractor is created per-request with user-specified decay settings
74
+
75
+
76
+ @app.get("/")
77
+ async def root():
78
+ """Root endpoint."""
79
+ return {
80
+ "service": "Context-as-a-Service",
81
+ "version": "0.1.0",
82
+ "status": "operational",
83
+ "endpoints": {
84
+ "ingest": "/ingest",
85
+ "documents": "/documents",
86
+ "context": "/context/{document_id}",
87
+ "analyze": "/analyze/{document_id}",
88
+ "corpus": "/corpus/analyze",
89
+ "route": "/route",
90
+ "triad": "/triad",
91
+ "triad_hot": "/triad/hot",
92
+ "triad_warm": "/triad/warm",
93
+ "triad_cold": "/triad/cold",
94
+ "conversation": "/conversation",
95
+ "conversation_add": "/conversation/turn",
96
+ "conversation_stats": "/conversation/stats",
97
+ "gateway": "/gateway",
98
+ "gateway_route": "/gateway/route",
99
+ "gateway_info": "/gateway/info",
100
+ "gateway_audit": "/gateway/audit",
101
+ "vfs_create": "/vfs/files (POST)",
102
+ "vfs_read": "/vfs/files (GET)",
103
+ "vfs_update": "/vfs/files (PUT)",
104
+ "vfs_delete": "/vfs/files (DELETE)",
105
+ "vfs_list": "/vfs/list",
106
+ "vfs_history": "/vfs/history",
107
+ "vfs_state": "/vfs/state",
108
+ }
109
+ }
110
+
111
+
112
+
113
+ @app.get("/health")
114
+ async def health_check():
115
+ """Health check endpoint."""
116
+ return {"status": "healthy", "timestamp": datetime.utcnow().isoformat()}
117
+
118
+
119
+ @app.post("/ingest")
120
+ async def ingest_document(
121
+ file: UploadFile = File(...),
122
+ format: ContentFormat = Form(...),
123
+ title: Optional[str] = Form(None),
124
+ source_type: Optional[str] = Form(None),
125
+ source_url: Optional[str] = Form(None)
126
+ ):
127
+ """
128
+ Ingest a document for processing.
129
+
130
+ The service will:
131
+ 1. Process the raw content
132
+ 2. Auto-detect the document type and structure
133
+ 3. Auto-tune weights for sections
134
+ 4. Detect or use provided source type for Pragmatic Truth tracking
135
+ 5. Store the processed document
136
+
137
+ Pragmatic Truth Support:
138
+ - source_type: Explicitly specify source type (official_docs, team_chat, practical_logs, etc.)
139
+ - source_url: Optional URL to the original source
140
+
141
+ Args:
142
+ file: The file to ingest
143
+ format: The file format (pdf, html, code)
144
+ title: Optional title for the document
145
+ source_type: Optional source type for citation tracking
146
+ source_url: Optional URL to the original source
147
+
148
+ Returns:
149
+ Processed document information
150
+ """
151
+ try:
152
+ # Read file content
153
+ content = await file.read()
154
+
155
+ # Generate document ID
156
+ doc_id = str(uuid.uuid4())
157
+
158
+ # Process the document
159
+ processor = ProcessorFactory.get_processor(format)
160
+ metadata = {
161
+ "id": doc_id,
162
+ "title": title or file.filename,
163
+ "filename": file.filename,
164
+ }
165
+
166
+ # Add source metadata if provided
167
+ if source_type:
168
+ metadata['source_type'] = source_type
169
+ if source_url:
170
+ metadata['source_url'] = source_url
171
+
172
+ document = processor.process(content, metadata)
173
+
174
+ # Auto-detect document type
175
+ detected_type = detector.detect(document)
176
+ document.detected_type = detected_type
177
+
178
+ # Auto-tune weights
179
+ document = weight_tuner.tune(document)
180
+
181
+ # Add timestamp
182
+ document.ingestion_timestamp = datetime.utcnow().isoformat()
183
+
184
+ # Store document
185
+ document_store.add(document)
186
+
187
+ # Add to corpus analyzer
188
+ corpus_analyzer.add_document(document)
189
+
190
+ return {
191
+ "document_id": document.id,
192
+ "title": document.title,
193
+ "detected_type": document.detected_type,
194
+ "format": document.format,
195
+ "sections_found": len(document.sections),
196
+ "weights": document.weights,
197
+ "source_type": source_type or "auto-detected",
198
+ "status": "ingested"
199
+ }
200
+
201
+ except Exception as e:
202
+ raise HTTPException(status_code=500, detail=f"Ingestion failed: {str(e)}")
203
+
204
+
205
+ @app.get("/documents")
206
+ async def list_documents(doc_type: Optional[DocumentType] = None):
207
+ """
208
+ List all documents or filter by type.
209
+
210
+ Args:
211
+ doc_type: Optional document type filter
212
+
213
+ Returns:
214
+ List of documents
215
+ """
216
+ if doc_type:
217
+ documents = document_store.list_by_type(doc_type)
218
+ else:
219
+ documents = document_store.list_all()
220
+
221
+ return {
222
+ "total": len(documents),
223
+ "documents": [
224
+ {
225
+ "id": doc.id,
226
+ "title": doc.title,
227
+ "type": doc.detected_type,
228
+ "format": doc.format,
229
+ "sections": len(doc.sections),
230
+ "timestamp": doc.ingestion_timestamp,
231
+ }
232
+ for doc in documents
233
+ ]
234
+ }
235
+
236
+
237
+ @app.get("/documents/{document_id}")
238
+ async def get_document(document_id: str):
239
+ """
240
+ Get detailed information about a specific document.
241
+
242
+ Args:
243
+ document_id: The document ID
244
+
245
+ Returns:
246
+ Document details
247
+ """
248
+ document = document_store.get(document_id)
249
+ if not document:
250
+ raise HTTPException(status_code=404, detail="Document not found")
251
+
252
+ return {
253
+ "id": document.id,
254
+ "title": document.title,
255
+ "type": document.detected_type,
256
+ "format": document.format,
257
+ "sections": [
258
+ {
259
+ "title": s.title,
260
+ "weight": s.weight,
261
+ "importance": s.importance_score,
262
+ "length": len(s.content),
263
+ }
264
+ for s in document.sections
265
+ ],
266
+ "metadata": document.metadata,
267
+ "weights": document.weights,
268
+ "timestamp": document.ingestion_timestamp,
269
+ }
270
+
271
+
272
+ @app.post("/context/{document_id}")
273
+ async def get_context(document_id: str, request: ContextRequest):
274
+ """
275
+ Get optimized context from a document.
276
+
277
+ This endpoint returns the most relevant context based on:
278
+ - Auto-tuned section weights
279
+ - Time-based decay (prioritizes recent content)
280
+ - Optional query for focused extraction
281
+ - Token limits
282
+ - Source citations for transparency (Pragmatic Truth)
283
+ - Conflict detection between official and practical sources
284
+
285
+ Pragmatic Truth Philosophy:
286
+ - Provides REAL answers, not just OFFICIAL ones
287
+ - When official docs conflict with practical experience, shows both
288
+ - Includes transparent citations (e.g., "from Slack conversation")
289
+ - Example: "Officially, limit is 100. However, team reports crashes after 50."
290
+
291
+ Time Decay Formula: Score = Base_Weight * (1 / (1 + days_elapsed * decay_rate))
292
+ Result: Recent documents rank higher than old documents, even with lower similarity.
293
+
294
+ Args:
295
+ document_id: The document ID
296
+ request: Context request parameters (includes enable_time_decay, decay_rate, enable_citations, detect_conflicts)
297
+
298
+ Returns:
299
+ Optimized context with time-weighted relevance, citations, and conflict detection
300
+ """
301
+ document = document_store.get(document_id)
302
+ if not document:
303
+ raise HTTPException(status_code=404, detail="Document not found")
304
+
305
+ # Create context extractor with requested settings
306
+ extractor = ContextExtractor(
307
+ document_store,
308
+ enrich_metadata=request.include_metadata,
309
+ enable_time_decay=request.enable_time_decay,
310
+ decay_rate=request.decay_rate,
311
+ enable_citations=request.enable_citations,
312
+ detect_conflicts=request.detect_conflicts
313
+ )
314
+
315
+ # Extract context
316
+ context, metadata = extractor.extract_context(
317
+ document_id,
318
+ request.query,
319
+ request.max_tokens
320
+ )
321
+
322
+ # Estimate tokens (rough approximation)
323
+ estimated_tokens = len(context) // 4
324
+
325
+ response = ContextResponse(
326
+ document_id=document_id,
327
+ document_type=document.detected_type,
328
+ context=context,
329
+ sections_used=metadata.get("sections_used", []),
330
+ total_tokens=estimated_tokens,
331
+ weights_applied=metadata.get("weights_applied", {}),
332
+ metadata=metadata if request.include_metadata else {},
333
+ source_citations=metadata.get("citations", []),
334
+ source_conflicts=metadata.get("conflicts", [])
335
+ )
336
+
337
+ return response
338
+
339
+
340
+ @app.get("/analyze/{document_id}")
341
+ async def analyze_document(document_id: str):
342
+ """
343
+ Analyze a document's structure and content.
344
+
345
+ Args:
346
+ document_id: The document ID
347
+
348
+ Returns:
349
+ Analysis results
350
+ """
351
+ document = document_store.get(document_id)
352
+ if not document:
353
+ raise HTTPException(status_code=404, detail="Document not found")
354
+
355
+ # Perform structure analysis
356
+ structure = detector.detect_structure(document)
357
+ analysis = structure_analyzer.analyze(document)
358
+
359
+ return {
360
+ "document_id": document_id,
361
+ "structure": structure,
362
+ "analysis": analysis,
363
+ }
364
+
365
+
366
+ @app.get("/corpus/analyze")
367
+ async def analyze_corpus():
368
+ """
369
+ Analyze the entire corpus of documents.
370
+
371
+ Returns insights about:
372
+ - Document type distribution
373
+ - Common section patterns
374
+ - Average weights
375
+ - Optimization suggestions
376
+
377
+ Returns:
378
+ Corpus analysis results
379
+ """
380
+ analysis = corpus_analyzer.analyze_corpus()
381
+ return analysis
382
+
383
+
384
+ @app.delete("/documents/{document_id}")
385
+ async def delete_document(document_id: str):
386
+ """
387
+ Delete a document.
388
+
389
+ Args:
390
+ document_id: The document ID
391
+
392
+ Returns:
393
+ Deletion status
394
+ """
395
+ success = document_store.delete(document_id)
396
+ if not success:
397
+ raise HTTPException(status_code=404, detail="Document not found")
398
+
399
+ return {"status": "deleted", "document_id": document_id}
400
+
401
+
402
+ @app.get("/search")
403
+ async def search_documents(
404
+ q: str,
405
+ enable_time_decay: bool = True,
406
+ decay_rate: float = 1.0
407
+ ):
408
+ """
409
+ Search documents by content or metadata with time-based decay ranking.
410
+
411
+ When time decay is enabled (default):
412
+ - Recent documents are ranked higher than old documents
413
+ - Formula: relevance_score = match_score * decay_factor
414
+ - Example: Yesterday's 80% match beats Last Year's 95% match
415
+
416
+ Args:
417
+ q: The search query
418
+ enable_time_decay: Apply time-based decay to ranking (default: True)
419
+ decay_rate: Rate of decay, higher = faster decay (default: 1.0)
420
+
421
+ Returns:
422
+ Matching documents sorted by time-weighted relevance
423
+ """
424
+ results = document_store.search(
425
+ q,
426
+ enable_time_decay=enable_time_decay,
427
+ decay_rate=decay_rate
428
+ )
429
+
430
+ return {
431
+ "query": q,
432
+ "enable_time_decay": enable_time_decay,
433
+ "decay_rate": decay_rate,
434
+ "total_results": len(results),
435
+ "documents": [
436
+ {
437
+ "id": doc.id,
438
+ "title": doc.title,
439
+ "type": doc.detected_type,
440
+ "format": doc.format,
441
+ "search_score": doc.metadata.get('_search_score', 0),
442
+ "decay_factor": doc.metadata.get('_decay_factor', 1.0),
443
+ "ingestion_timestamp": doc.ingestion_timestamp,
444
+ }
445
+ for doc in results
446
+ ]
447
+ }
448
+
449
+
450
+ @app.post("/route")
451
+ async def route_query(request: RouteRequest):
452
+ """
453
+ Route a query to the appropriate model tier using deterministic heuristics.
454
+
455
+ The Heuristic Router Philosophy:
456
+ Use Deterministic Heuristics, not AI Classifiers. We can solve 80% of routing
457
+ with simple logic that takes 0ms. The goal isn't 100% routing accuracy.
458
+ The goal is instant response time for the trivial stuff, preserving the
459
+ "Big Brain" budget for the hard stuff.
460
+
461
+ Routing Rules (in priority order):
462
+ 1. Greetings ("Hi", "Thanks") → CANNED response (zero cost, instant)
463
+ 2. Smart keywords ("Summarize", "Analyze", "Compare") → SMART model (GPT-4o)
464
+ 3. Short queries (< 50 chars) → FAST model (GPT-4o-mini)
465
+ 4. Long queries → SMART model (better safe than sorry)
466
+
467
+ Model Tiers:
468
+ - CANNED: Pre-defined responses for greetings (zero cost, 0ms latency)
469
+ - FAST: Fast model like GPT-4o-mini (low cost, ~200ms latency)
470
+ - SMART: Smart model like GPT-4o (high cost, ~500ms+ latency)
471
+
472
+ Args:
473
+ request: RouteRequest with the query to route
474
+
475
+ Returns:
476
+ RoutingDecision with tier, reason, confidence, and suggested model
477
+ """
478
+ try:
479
+ decision = heuristic_router.route(request.query)
480
+
481
+ # If it's a canned response, include the actual response
482
+ response_data = decision.model_dump()
483
+ if decision.model_tier == ModelTier.CANNED:
484
+ canned_response = heuristic_router.get_canned_response(request.query)
485
+ if canned_response:
486
+ response_data["canned_response"] = canned_response
487
+
488
+ return response_data
489
+
490
+ except Exception as e:
491
+ raise HTTPException(status_code=500, detail=f"Routing failed: {str(e)}")
492
+
493
+
494
+
495
+ # ===========================
496
+ # Context Triad Endpoints
497
+ # ===========================
498
+
499
+ @app.post("/triad/hot")
500
+ async def add_hot_context(request: AddContextRequest):
501
+ """
502
+ Add hot context - the current situation.
503
+
504
+ Hot context represents what is happening RIGHT NOW:
505
+ - Current conversation messages
506
+ - Open VS Code tabs
507
+ - Error logs streaming in real-time
508
+ - Active debugging session
509
+
510
+ Policy: "Attention Head" - Hot context overrides everything.
511
+
512
+ Args:
513
+ request: AddContextRequest with content, metadata, and priority
514
+
515
+ Returns:
516
+ Created item ID
517
+ """
518
+ try:
519
+ item_id = triad_manager.add_hot_context(
520
+ request.content,
521
+ request.metadata,
522
+ request.priority
523
+ )
524
+ return {
525
+ "status": "success",
526
+ "layer": "hot",
527
+ "item_id": item_id,
528
+ "message": "Hot context added successfully"
529
+ }
530
+ except Exception as e:
531
+ raise HTTPException(status_code=500, detail=f"Failed to add hot context: {str(e)}")
532
+
533
+
534
+ @app.post("/triad/warm")
535
+ async def add_warm_context(request: AddContextRequest):
536
+ """
537
+ Add warm context - the user persona.
538
+
539
+ Warm context represents WHO THE USER IS:
540
+ - LinkedIn profile
541
+ - Medium articles
542
+ - GitHub bio
543
+ - Coding style preferences
544
+ - Favorite libraries
545
+ - Communication style
546
+
547
+ Policy: "Always On Filter" - Warm context is persistent and colors
548
+ how the AI speaks to you.
549
+
550
+ Args:
551
+ request: AddContextRequest with content, metadata, and priority
552
+
553
+ Returns:
554
+ Created item ID
555
+ """
556
+ try:
557
+ item_id = triad_manager.add_warm_context(
558
+ request.content,
559
+ request.metadata,
560
+ request.priority
561
+ )
562
+ return {
563
+ "status": "success",
564
+ "layer": "warm",
565
+ "item_id": item_id,
566
+ "message": "Warm context added successfully"
567
+ }
568
+ except Exception as e:
569
+ raise HTTPException(status_code=500, detail=f"Failed to add warm context: {str(e)}")
570
+
571
+
572
+ @app.post("/triad/cold")
573
+ async def add_cold_context(request: AddContextRequest):
574
+ """
575
+ Add cold context - the historical archive.
576
+
577
+ Cold context represents WHAT HAPPENED IN THE PAST:
578
+ - Old tickets from last year
579
+ - Closed PRs
580
+ - Historical design docs
581
+ - Legacy system documentation
582
+ - Archived meeting notes
583
+
584
+ Policy: "On Demand Only" - Cold context is NEVER automatically included.
585
+ It's only fetched when the user explicitly asks for history.
586
+
587
+ Args:
588
+ request: AddContextRequest with content, metadata, and priority
589
+
590
+ Returns:
591
+ Created item ID
592
+ """
593
+ try:
594
+ item_id = triad_manager.add_cold_context(
595
+ request.content,
596
+ request.metadata,
597
+ request.priority
598
+ )
599
+ return {
600
+ "status": "success",
601
+ "layer": "cold",
602
+ "item_id": item_id,
603
+ "message": "Cold context added successfully"
604
+ }
605
+ except Exception as e:
606
+ raise HTTPException(status_code=500, detail=f"Failed to add cold context: {str(e)}")
607
+
608
+
609
+ @app.post("/triad")
610
+ async def get_context_triad(request: ContextTriadRequest):
611
+ """
612
+ Get the complete context triad.
613
+
614
+ The Context Triad follows these policies:
615
+ 1. Hot Context: ALWAYS included (unless explicitly disabled)
616
+ - The Situation: what's happening right now
617
+ - Policy: "Attention Head" - overrides everything
618
+
619
+ 2. Warm Context: ALWAYS ON (unless explicitly disabled)
620
+ - The Persona: who you are
621
+ - Policy: "Filter" - colors how AI speaks to you
622
+
623
+ 3. Cold Context: ON DEMAND ONLY (requires explicit query)
624
+ - The Archive: what happened last year
625
+ - Policy: Never let cold data pollute the hot window
626
+
627
+ Args:
628
+ request: Context triad request with layer flags and query
629
+
630
+ Returns:
631
+ Context from requested layers
632
+ """
633
+ try:
634
+ result = triad_manager.get_full_context(
635
+ include_hot=request.include_hot,
636
+ include_warm=request.include_warm,
637
+ include_cold=request.include_cold,
638
+ cold_query=request.query,
639
+ max_tokens_per_layer=request.max_tokens_per_layer,
640
+ include_metadata=True
641
+ )
642
+
643
+ response = ContextTriadResponse(
644
+ hot_context=result["hot_context"],
645
+ warm_context=result["warm_context"],
646
+ cold_context=result["cold_context"],
647
+ total_tokens=result["total_tokens"],
648
+ layers_included=result["layers_included"],
649
+ metadata=result["metadata"]
650
+ )
651
+
652
+ return response
653
+ except Exception as e:
654
+ raise HTTPException(status_code=500, detail=f"Failed to get context triad: {str(e)}")
655
+
656
+
657
+ @app.get("/triad/state")
658
+ async def get_triad_state():
659
+ """
660
+ Get the current state of the context triad.
661
+
662
+ Returns:
663
+ Current context triad state with item counts
664
+ """
665
+ state = triad_manager.get_state()
666
+ return {
667
+ "hot_context_items": len(state.hot_context),
668
+ "warm_context_items": len(state.warm_context),
669
+ "cold_context_items": len(state.cold_context),
670
+ "total_items": len(state.hot_context) + len(state.warm_context) + len(state.cold_context)
671
+ }
672
+
673
+
674
+ @app.delete("/triad/hot")
675
+ async def clear_hot_context():
676
+ """Clear all hot context items."""
677
+ triad_manager.clear_hot_context()
678
+ return {"status": "success", "message": "Hot context cleared"}
679
+
680
+
681
+ @app.delete("/triad/warm")
682
+ async def clear_warm_context():
683
+ """Clear all warm context items."""
684
+ triad_manager.clear_warm_context()
685
+ return {"status": "success", "message": "Warm context cleared"}
686
+
687
+
688
+ @app.delete("/triad/cold")
689
+ async def clear_cold_context():
690
+ """Clear all cold context items."""
691
+ triad_manager.clear_cold_context()
692
+ return {"status": "success", "message": "Cold context cleared"}
693
+
694
+
695
+ @app.delete("/triad")
696
+ async def clear_all_context():
697
+ """Clear all context layers."""
698
+ triad_manager.clear_all()
699
+ return {"status": "success", "message": "All context cleared"}
700
+
701
+
702
+ # ===========================
703
+ # Conversation Manager Endpoints (Sliding Window / FIFO)
704
+ # ===========================
705
+
706
+ @app.post("/conversation/turn")
707
+ async def add_conversation_turn(request: AddTurnRequest):
708
+ """
709
+ Add a conversation turn to the history using Sliding Window (FIFO).
710
+
711
+ The Brutal Squeeze Philosophy:
712
+ Instead of asking an AI to summarize conversation history (which costs money
713
+ and loses nuance), we use a brutal "Sliding Window" approach:
714
+ - Keep the last 10 turns perfectly intact
715
+ - Delete turn 11 (FIFO - First In First Out)
716
+ - No summarization = No lossy compression
717
+
718
+ Why this works:
719
+ - Users rarely refer back to what they said 20 minutes ago
720
+ - They constantly refer to the exact code snippet they pasted 30 seconds ago
721
+ - Summary = Lossy Compression (loses specific error codes, exact wording)
722
+ - Chopping = Lossless Compression (of the recent past)
723
+
724
+ Example:
725
+ Turn 1: "I tried X and it failed with error code 500"
726
+ With Summarization: "User attempted troubleshooting" (ERROR CODE LOST!)
727
+ With Chopping: After 10 new turns, this is deleted entirely
728
+ But turns 2-11 are perfectly intact with all details
729
+
730
+ Args:
731
+ request: AddTurnRequest with user_message, ai_response, and metadata
732
+
733
+ Returns:
734
+ Created turn ID and current conversation statistics
735
+ """
736
+ try:
737
+ turn_id = conversation_manager.add_turn(
738
+ user_message=request.user_message,
739
+ ai_response=request.ai_response,
740
+ metadata=request.metadata
741
+ )
742
+
743
+ stats = conversation_manager.get_statistics()
744
+
745
+ return {
746
+ "status": "success",
747
+ "turn_id": turn_id,
748
+ "message": "Conversation turn added successfully",
749
+ "statistics": stats
750
+ }
751
+ except Exception as e:
752
+ raise HTTPException(status_code=500, detail=f"Failed to add turn: {str(e)}")
753
+
754
+
755
+ @app.get("/conversation")
756
+ async def get_conversation_history(
757
+ format_text: bool = True,
758
+ include_metadata: bool = False
759
+ ):
760
+ """
761
+ Get the conversation history (last N turns).
762
+
763
+ Returns the history in FIFO order (oldest to newest).
764
+ All turns are perfectly intact - no summarization, no loss.
765
+
766
+ The Sliding Window ensures:
767
+ 1. Recent precision: Last N turns are perfectly intact
768
+ 2. Zero summarization cost: No AI calls needed
769
+ 3. No information loss: What's kept is lossless
770
+ 4. Predictable behavior: Always know what's in context
771
+
772
+ Philosophy: In a frugal architecture, we value Recent Precision over Vague History.
773
+
774
+ Args:
775
+ format_text: If True, return formatted text; if False, return structured data
776
+ include_metadata: Whether to include metadata in text format
777
+
778
+ Returns:
779
+ Conversation history (formatted or structured)
780
+ """
781
+ try:
782
+ if format_text:
783
+ history_text = conversation_manager.get_conversation_history(
784
+ include_metadata=include_metadata,
785
+ format_as_text=True
786
+ )
787
+ return {"history": history_text}
788
+ else:
789
+ turns = conversation_manager.get_conversation_history(format_as_text=False)
790
+ stats = conversation_manager.get_statistics()
791
+
792
+ return ConversationHistoryResponse(
793
+ turns=turns,
794
+ total_turns=len(turns),
795
+ max_turns=conversation_manager.state.max_turns,
796
+ total_turns_ever=conversation_manager.state.total_turns_ever,
797
+ oldest_turn_timestamp=turns[0].timestamp if turns else None,
798
+ newest_turn_timestamp=turns[-1].timestamp if turns else None
799
+ )
800
+ except Exception as e:
801
+ raise HTTPException(status_code=500, detail=f"Failed to get history: {str(e)}")
802
+
803
+
804
+ @app.get("/conversation/stats")
805
+ async def get_conversation_statistics():
806
+ """
807
+ Get statistics about the conversation history.
808
+
809
+ Returns:
810
+ Statistics including current turns, deleted turns, and timestamps
811
+ """
812
+ try:
813
+ stats = conversation_manager.get_statistics()
814
+ return {
815
+ "status": "success",
816
+ "statistics": stats,
817
+ "sliding_window_info": {
818
+ "max_turns": conversation_manager.state.max_turns,
819
+ "policy": "FIFO (First In First Out)",
820
+ "philosophy": "Chopping > Summarizing",
821
+ "benefits": [
822
+ "Recent precision: Last N turns perfectly intact",
823
+ "Zero AI cost: No summarization needed",
824
+ "No information loss: Lossless compression of recent past",
825
+ "Predictable: Always know what's in context"
826
+ ]
827
+ }
828
+ }
829
+ except Exception as e:
830
+ raise HTTPException(status_code=500, detail=f"Failed to get stats: {str(e)}")
831
+
832
+
833
+ @app.get("/conversation/recent")
834
+ async def get_recent_turns(n: int = 5):
835
+ """
836
+ Get the N most recent conversation turns.
837
+
838
+ Args:
839
+ n: Number of recent turns to retrieve (default: 5)
840
+
841
+ Returns:
842
+ Recent conversation turns
843
+ """
844
+ try:
845
+ turns = conversation_manager.get_recent_turns(n=n)
846
+ return {
847
+ "status": "success",
848
+ "recent_turns": turns,
849
+ "count": len(turns),
850
+ "requested": n
851
+ }
852
+ except Exception as e:
853
+ raise HTTPException(status_code=500, detail=f"Failed to get recent turns: {str(e)}")
854
+
855
+
856
+ @app.patch("/conversation/turn/{turn_id}")
857
+ async def update_turn_response(turn_id: str, request: UpdateTurnRequest):
858
+ """
859
+ Update the AI response for a specific turn.
860
+
861
+ Useful when you add a turn with just the user message
862
+ and want to update it with the AI response later.
863
+
864
+ Args:
865
+ turn_id: The ID of the turn to update
866
+ request: UpdateTurnRequest with the AI response
867
+
868
+ Returns:
869
+ Update status
870
+ """
871
+ try:
872
+ success = conversation_manager.update_turn_response(turn_id, request.ai_response)
873
+ if success:
874
+ return {
875
+ "status": "success",
876
+ "turn_id": turn_id,
877
+ "message": "AI response updated successfully"
878
+ }
879
+ else:
880
+ raise HTTPException(status_code=404, detail="Turn not found")
881
+ except HTTPException:
882
+ raise
883
+ except Exception as e:
884
+ raise HTTPException(status_code=500, detail=f"Failed to update turn: {str(e)}")
885
+
886
+
887
+ @app.delete("/conversation")
888
+ async def clear_conversation():
889
+ """
890
+ Clear all conversation history.
891
+
892
+ Note: The total_turns_ever counter is preserved to track
893
+ how many turns have been processed across the lifetime.
894
+
895
+ Returns:
896
+ Deletion status
897
+ """
898
+ try:
899
+ conversation_manager.clear_conversation()
900
+ return {
901
+ "status": "success",
902
+ "message": "Conversation history cleared",
903
+ "total_turns_ever": conversation_manager.state.total_turns_ever
904
+ }
905
+ except Exception as e:
906
+ raise HTTPException(status_code=500, detail=f"Failed to clear conversation: {str(e)}")
907
+
908
+
909
+ # ===========================
910
+ # Trust Gateway Endpoints
911
+ # ===========================
912
+
913
+ @app.get("/gateway")
914
+ async def gateway_status():
915
+ """
916
+ Get Trust Gateway status and deployment information.
917
+
918
+ The Trust Gateway addresses the "Middleware Gap" by providing an
919
+ enterprise-grade, on-premises / private cloud router that CISOs can trust.
920
+
921
+ Philosophy:
922
+ No Enterprise CISO will send proprietary data to a random middleware startup.
923
+ The Trust Gateway can be deployed within your own infrastructure, ensuring:
924
+ - Data never leaves your environment
925
+ - Full audit trail for compliance
926
+ - Zero third-party data sharing
927
+ - Enterprise-grade security controls
928
+
929
+ Returns:
930
+ Trust Gateway deployment information and security status
931
+ """
932
+ try:
933
+ info = trust_gateway.get_deployment_info()
934
+ return {
935
+ "status": "operational",
936
+ "gateway_type": "Trust Gateway (Enterprise Private Cloud Router)",
937
+ "philosophy": "The winner won't be the one with the smartest routing; "
938
+ "it will be the one the Enterprise trusts with the keys to the kingdom.",
939
+ **info
940
+ }
941
+ except Exception as e:
942
+ raise HTTPException(status_code=500, detail=f"Failed to get gateway status: {str(e)}")
943
+
944
+
945
+ @app.post("/gateway/route")
946
+ async def gateway_route_request(
947
+ request: RouteRequest,
948
+ user_id: Optional[str] = None,
949
+ data_classification: Optional[str] = None
950
+ ):
951
+ """
952
+ Route a request through the Trust Gateway with enterprise security controls.
953
+
954
+ The Trust Gateway provides:
955
+ 1. On-Premises / Private Cloud deployment
956
+ 2. Zero data leakage (data never leaves your infrastructure)
957
+ 3. Full audit trail for compliance
958
+ 4. Configurable security policies
959
+ 5. Authentication and authorization
960
+ 6. Data classification and encryption
961
+
962
+ This endpoint validates the request against security policies, performs
963
+ heuristic routing, and logs all activity for compliance.
964
+
965
+ Example Use Case:
966
+ Enterprise CISO requirement: "We cannot send our proprietary financial data
967
+ to an external middleware service." Solution: Deploy Trust Gateway in your
968
+ own infrastructure. All routing decisions happen locally with zero external calls.
969
+
970
+ Args:
971
+ request: RouteRequest with the query to route
972
+ user_id: User ID making the request (for authentication)
973
+ data_classification: Classification level (public, internal, confidential, secret)
974
+
975
+ Returns:
976
+ Routing decision with security context and audit trail
977
+ """
978
+ try:
979
+ result = trust_gateway.route_request(
980
+ query=request.query,
981
+ user_id=user_id,
982
+ data_classification=data_classification
983
+ )
984
+ return result
985
+ except Exception as e:
986
+ raise HTTPException(status_code=500, detail=f"Gateway routing failed: {str(e)}")
987
+
988
+
989
+ @app.get("/gateway/info")
990
+ async def gateway_deployment_info():
991
+ """
992
+ Get detailed Trust Gateway deployment and security information.
993
+
994
+ Returns comprehensive information about:
995
+ - Deployment mode (on-prem, private cloud, hybrid, air-gapped)
996
+ - Security level and policies
997
+ - Data retention settings
998
+ - Encryption status
999
+ - Compliance mode
1000
+ - Trust guarantees
1001
+
1002
+ Returns:
1003
+ Detailed deployment and security configuration
1004
+ """
1005
+ try:
1006
+ info = trust_gateway.get_deployment_info()
1007
+ return {
1008
+ "gateway_info": info,
1009
+ "deployment_modes": {
1010
+ "on_prem": "Deployed on customer's own servers (maximum control)",
1011
+ "private_cloud": "Deployed in customer's private cloud (AWS VPC, Azure VNet, GCP VPC)",
1012
+ "hybrid": "Hybrid deployment with local processing and cloud backup",
1013
+ "air_gapped": "Completely isolated from internet (maximum security)"
1014
+ },
1015
+ "security_levels": {
1016
+ "standard": "Basic security controls",
1017
+ "high": "Enhanced security (encryption at rest and in transit)",
1018
+ "maximum": "Maximum security (air-gapped, zero data retention)"
1019
+ }
1020
+ }
1021
+ except Exception as e:
1022
+ raise HTTPException(status_code=500, detail=f"Failed to get deployment info: {str(e)}")
1023
+
1024
+
1025
+ @app.get("/gateway/audit")
1026
+ async def gateway_audit_logs(
1027
+ event_type: Optional[str] = None,
1028
+ user_id: Optional[str] = None,
1029
+ start_time: Optional[str] = None,
1030
+ end_time: Optional[str] = None
1031
+ ):
1032
+ """
1033
+ Retrieve Trust Gateway audit logs for compliance and security monitoring.
1034
+
1035
+ Audit logs include:
1036
+ - All routing decisions
1037
+ - Request validation events
1038
+ - Security policy changes
1039
+ - Data access events
1040
+ - User authentication attempts
1041
+
1042
+ This endpoint supports filtering by:
1043
+ - Event type (e.g., "request_routed", "policy_changed")
1044
+ - User ID
1045
+ - Time range (ISO format timestamps)
1046
+
1047
+ Example Use Cases:
1048
+ - Compliance audits (GDPR, HIPAA, SOC2)
1049
+ - Security incident investigation
1050
+ - User activity monitoring
1051
+ - Policy change tracking
1052
+
1053
+ Args:
1054
+ event_type: Filter by event type
1055
+ user_id: Filter by user ID
1056
+ start_time: Start of time range (ISO format)
1057
+ end_time: End of time range (ISO format)
1058
+
1059
+ Returns:
1060
+ Filtered audit log entries
1061
+ """
1062
+ try:
1063
+ logs = trust_gateway.get_audit_logs(
1064
+ event_type=event_type,
1065
+ user_id=user_id,
1066
+ start_time=start_time,
1067
+ end_time=end_time
1068
+ )
1069
+
1070
+ return {
1071
+ "status": "success",
1072
+ "total_logs": len(logs),
1073
+ "filters_applied": {
1074
+ "event_type": event_type,
1075
+ "user_id": user_id,
1076
+ "start_time": start_time,
1077
+ "end_time": end_time
1078
+ },
1079
+ "audit_logs": logs
1080
+ }
1081
+ except Exception as e:
1082
+ raise HTTPException(status_code=500, detail=f"Failed to retrieve audit logs: {str(e)}")
1083
+
1084
+
1085
+ @app.post("/gateway/validate")
1086
+ async def gateway_validate_request(
1087
+ query: str,
1088
+ user_id: Optional[str] = None,
1089
+ ip_address: Optional[str] = None,
1090
+ data_classification: Optional[str] = None
1091
+ ):
1092
+ """
1093
+ Validate a request against Trust Gateway security policies.
1094
+
1095
+ This endpoint checks:
1096
+ - Authentication requirements
1097
+ - User authorization (allowed users list)
1098
+ - IP address restrictions
1099
+ - Data classification requirements
1100
+ - Encryption requirements
1101
+
1102
+ Useful for pre-flight validation before sending actual requests.
1103
+
1104
+ Args:
1105
+ query: The query to validate
1106
+ user_id: User ID making the request
1107
+ ip_address: IP address of the requester
1108
+ data_classification: Data classification level
1109
+
1110
+ Returns:
1111
+ Validation result with status, warnings, and violations
1112
+ """
1113
+ try:
1114
+ validation = trust_gateway.validate_request(
1115
+ request_data={"query": query},
1116
+ user_id=user_id,
1117
+ ip_address=ip_address,
1118
+ data_classification=data_classification
1119
+ )
1120
+
1121
+ return {
1122
+ "status": "success" if validation["valid"] else "failed",
1123
+ "valid": validation["valid"],
1124
+ "warnings": validation["warnings"],
1125
+ "violations": validation["violations"],
1126
+ "timestamp": datetime.utcnow().isoformat()
1127
+ }
1128
+ except Exception as e:
1129
+ raise HTTPException(status_code=500, detail=f"Validation failed: {str(e)}")
1130
+
1131
+
1132
+ @app.delete("/gateway/audit")
1133
+ async def gateway_clear_audit_logs(user_id: Optional[str] = None):
1134
+ """
1135
+ Clear Trust Gateway audit logs.
1136
+
1137
+ Note: This operation itself is logged before clearing.
1138
+ Requires proper authorization in production environments.
1139
+
1140
+ Args:
1141
+ user_id: User ID requesting the clear operation
1142
+
1143
+ Returns:
1144
+ Clear operation status
1145
+ """
1146
+ try:
1147
+ result = trust_gateway.clear_audit_logs(user_id=user_id)
1148
+ return result
1149
+ except Exception as e:
1150
+ raise HTTPException(status_code=500, detail=f"Failed to clear audit logs: {str(e)}")
1151
+
1152
+
1153
+ # ============================================================================
1154
+ # Virtual File System Endpoints
1155
+ # ============================================================================
1156
+
1157
+ @app.post("/vfs/files", response_model=FileResponse, tags=["vfs"])
1158
+ async def create_vfs_file(request: CreateFileRequest):
1159
+ """
1160
+ Create a new file in the Virtual File System.
1161
+
1162
+ Allows SDLC agents to create files in shared project state.
1163
+ All agents can see files created by other agents.
1164
+ """
1165
+ try:
1166
+ file_node = vfs.create_file(
1167
+ path=request.path,
1168
+ content=request.content,
1169
+ agent_id=request.agent_id,
1170
+ metadata=request.metadata,
1171
+ )
1172
+
1173
+ return FileResponse(
1174
+ path=file_node.path,
1175
+ file_type=file_node.file_type,
1176
+ content=file_node.content,
1177
+ metadata=file_node.metadata,
1178
+ created_by=file_node.created_by,
1179
+ created_at=file_node.created_at,
1180
+ modified_by=file_node.modified_by,
1181
+ modified_at=file_node.modified_at,
1182
+ edit_count=len(file_node.edit_history),
1183
+ )
1184
+ except ValueError as e:
1185
+ raise HTTPException(status_code=400, detail=str(e))
1186
+
1187
+
1188
+ @app.get("/vfs/files", response_model=FileResponse, tags=["vfs"])
1189
+ async def read_vfs_file(path: str):
1190
+ """
1191
+ Read a file from the Virtual File System.
1192
+
1193
+ Agents can read files created or modified by other agents,
1194
+ ensuring shared visibility of project state.
1195
+ """
1196
+ try:
1197
+ content = vfs.read_file(path)
1198
+ info = vfs.get_file_info(path)
1199
+ return info
1200
+ except FileNotFoundError as e:
1201
+ raise HTTPException(status_code=404, detail=str(e))
1202
+ except ValueError as e:
1203
+ raise HTTPException(status_code=400, detail=str(e))
1204
+
1205
+
1206
+ @app.put("/vfs/files", response_model=FileResponse, tags=["vfs"])
1207
+ async def update_vfs_file(request: UpdateFileRequest):
1208
+ """
1209
+ Update an existing file in the Virtual File System.
1210
+
1211
+ Agents can update files and other agents will immediately see
1212
+ the changes. Edit history is maintained for auditability.
1213
+ """
1214
+ try:
1215
+ file_node = vfs.update_file(
1216
+ path=request.path,
1217
+ content=request.content,
1218
+ agent_id=request.agent_id,
1219
+ message=request.message,
1220
+ )
1221
+
1222
+ return FileResponse(
1223
+ path=file_node.path,
1224
+ file_type=file_node.file_type,
1225
+ content=file_node.content,
1226
+ metadata=file_node.metadata,
1227
+ created_by=file_node.created_by,
1228
+ created_at=file_node.created_at,
1229
+ modified_by=file_node.modified_by,
1230
+ modified_at=file_node.modified_at,
1231
+ edit_count=len(file_node.edit_history),
1232
+ )
1233
+ except FileNotFoundError as e:
1234
+ raise HTTPException(status_code=404, detail=str(e))
1235
+ except ValueError as e:
1236
+ raise HTTPException(status_code=400, detail=str(e))
1237
+
1238
+
1239
+ @app.delete("/vfs/files", tags=["vfs"])
1240
+ async def delete_vfs_file(path: str, agent_id: str):
1241
+ """
1242
+ Delete a file from the Virtual File System.
1243
+
1244
+ Removes a file from the shared project state.
1245
+ """
1246
+ try:
1247
+ vfs.delete_file(path, agent_id)
1248
+ return {"status": "deleted", "path": path}
1249
+ except FileNotFoundError as e:
1250
+ raise HTTPException(status_code=404, detail=str(e))
1251
+ except ValueError as e:
1252
+ raise HTTPException(status_code=400, detail=str(e))
1253
+
1254
+
1255
+ @app.get("/vfs/list", response_model=FileListResponse, tags=["vfs"])
1256
+ async def list_vfs_files(path: str = "/", recursive: bool = False):
1257
+ """
1258
+ List files in a directory within the Virtual File System.
1259
+
1260
+ Agents can browse the project structure to understand
1261
+ what files exist and have been created by other agents.
1262
+ """
1263
+ try:
1264
+ return vfs.list_files(path, recursive)
1265
+ except FileNotFoundError as e:
1266
+ raise HTTPException(status_code=404, detail=str(e))
1267
+ except ValueError as e:
1268
+ raise HTTPException(status_code=400, detail=str(e))
1269
+
1270
+
1271
+ @app.get("/vfs/history", tags=["vfs"])
1272
+ async def get_vfs_file_history(path: str):
1273
+ """
1274
+ Get the edit history of a file.
1275
+
1276
+ Shows all edits made to a file, including which agents
1277
+ made changes and when. Useful for understanding how a
1278
+ file evolved through multi-agent collaboration.
1279
+ """
1280
+ try:
1281
+ history = vfs.get_file_history(path)
1282
+ return {
1283
+ "path": path,
1284
+ "edit_count": len(history),
1285
+ "history": [
1286
+ {
1287
+ "agent_id": edit.agent_id,
1288
+ "timestamp": edit.timestamp,
1289
+ "message": edit.message,
1290
+ "content_preview": edit.content[:100] + "..." if len(edit.content) > 100 else edit.content,
1291
+ }
1292
+ for edit in history
1293
+ ]
1294
+ }
1295
+ except FileNotFoundError as e:
1296
+ raise HTTPException(status_code=404, detail=str(e))
1297
+
1298
+
1299
+ @app.get("/vfs/state", tags=["vfs"])
1300
+ async def get_vfs_state():
1301
+ """
1302
+ Get the complete Virtual File System state.
1303
+
1304
+ Returns the entire file system state, useful for debugging
1305
+ or snapshotting the current project state.
1306
+ """
1307
+ state = vfs.get_state()
1308
+ return {
1309
+ "root_path": state.root_path,
1310
+ "file_count": len(state.files),
1311
+ "files": [
1312
+ {
1313
+ "path": node.path,
1314
+ "type": node.file_type,
1315
+ "created_by": node.created_by,
1316
+ "modified_by": node.modified_by,
1317
+ "edit_count": len(node.edit_history),
1318
+ }
1319
+ for node in state.files.values()
1320
+ ]
1321
+ }
1322
+
1323
+
1324
+ if __name__ == "__main__":
1325
+ import uvicorn
1326
+ uvicorn.run(app, host="0.0.0.0", port=8000)