contextsynapse 1.0.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 (776) hide show
  1. contextsynapse/__init__.py +107 -0
  2. contextsynapse/__main__.py +9 -0
  3. contextsynapse/a2a/__init__.py +28 -0
  4. contextsynapse/a2a/client.py +120 -0
  5. contextsynapse/a2a/discovery.py +128 -0
  6. contextsynapse/a2a/handlers.py +164 -0
  7. contextsynapse/a2a/models.py +246 -0
  8. contextsynapse/a2a/streaming.py +92 -0
  9. contextsynapse/a2a/task_manager.py +275 -0
  10. contextsynapse/adapters/__init__.py +98 -0
  11. contextsynapse/adapters/_base.py +298 -0
  12. contextsynapse/adapters/autogen/__init__.py +4 -0
  13. contextsynapse/adapters/autogen/tools.py +34 -0
  14. contextsynapse/adapters/crewai/__init__.py +4 -0
  15. contextsynapse/adapters/crewai/tools.py +63 -0
  16. contextsynapse/adapters/langchain/__init__.py +19 -0
  17. contextsynapse/adapters/langchain/message_history.py +17 -0
  18. contextsynapse/adapters/langchain/retriever.py +158 -0
  19. contextsynapse/adapters/langchain/tools.py +43 -0
  20. contextsynapse/adapters/langgraph/__init__.py +21 -0
  21. contextsynapse/adapters/langgraph/checkpoint.py +223 -0
  22. contextsynapse/adapters/langgraph/context_tools.py +341 -0
  23. contextsynapse/adapters/langgraph/message_history.py +138 -0
  24. contextsynapse/adapters/langgraph/tools.py +43 -0
  25. contextsynapse/adapters/llamaindex/__init__.py +4 -0
  26. contextsynapse/adapters/llamaindex/tools.py +64 -0
  27. contextsynapse/adapters/openai/__init__.py +24 -0
  28. contextsynapse/adapters/openai/tools.py +206 -0
  29. contextsynapse/adapters/pydantic_ai/__init__.py +4 -0
  30. contextsynapse/adapters/pydantic_ai/tools.py +36 -0
  31. contextsynapse/adapters/swarm/__init__.py +4 -0
  32. contextsynapse/adapters/swarm/tools.py +44 -0
  33. contextsynapse/agents/__init__.py +6 -0
  34. contextsynapse/agents/auto_capture.py +80 -0
  35. contextsynapse/agents/dispatcher.py +299 -0
  36. contextsynapse/agents/notifications.py +112 -0
  37. contextsynapse/aiql/__init__.py +71 -0
  38. contextsynapse/aiql/cache.py +341 -0
  39. contextsynapse/aiql/compiler/__init__.py +62 -0
  40. contextsynapse/aiql/compiler/optimizer.py +126 -0
  41. contextsynapse/aiql/compiler/planner.py +366 -0
  42. contextsynapse/aiql/compiler/statistics.py +235 -0
  43. contextsynapse/aiql/compiler/validator.py +425 -0
  44. contextsynapse/aiql/engine/__init__.py +11 -0
  45. contextsynapse/aiql/engine/chunk_storage.py +2584 -0
  46. contextsynapse/aiql/engine/executor.py +7737 -0
  47. contextsynapse/aiql/engine/extraction_integration.py +442 -0
  48. contextsynapse/aiql/engine/graph_builder.py +405 -0
  49. contextsynapse/aiql/engine/node_creation_from_normalized.py +691 -0
  50. contextsynapse/aiql/engine/performance_monitor.py +289 -0
  51. contextsynapse/aiql/engine/postprocessing.py +365 -0
  52. contextsynapse/aiql/engine/ray_stage_executors.py +918 -0
  53. contextsynapse/aiql/engine/redis_cache.py +106 -0
  54. contextsynapse/aiql/engine/streaming_json.py +366 -0
  55. contextsynapse/aiql/engine/streaming_parquet.py +568 -0
  56. contextsynapse/aiql/engine/streaming_ray_chunking.py +419 -0
  57. contextsynapse/aiql/grammar/__init__.py +14 -0
  58. contextsynapse/aiql/grammar/aiql_grammar.py +1822 -0
  59. contextsynapse/aiql/grammar/base.py +71 -0
  60. contextsynapse/aiql/parser/__init__.py +46 -0
  61. contextsynapse/aiql/parser/aiql_parser.py +11330 -0
  62. contextsynapse/aiql/parser/base_parser.py +47 -0
  63. contextsynapse/api/__init__.py +5 -0
  64. contextsynapse/api/a2a_router.py +233 -0
  65. contextsynapse/api/admin_router.py +140 -0
  66. contextsynapse/api/agent_worker_router.py +978 -0
  67. contextsynapse/api/algorithms_router.py +317 -0
  68. contextsynapse/api/api.py +4144 -0
  69. contextsynapse/api/audit.py +204 -0
  70. contextsynapse/api/auth.py +441 -0
  71. contextsynapse/api/auth_router.py +537 -0
  72. contextsynapse/api/billing.py +261 -0
  73. contextsynapse/api/billing_router.py +275 -0
  74. contextsynapse/api/boundary_router.py +452 -0
  75. contextsynapse/api/cognition_router.py +116 -0
  76. contextsynapse/api/connector_router.py +237 -0
  77. contextsynapse/api/context_router.py +1619 -0
  78. contextsynapse/api/dashboard_router.py +11367 -0
  79. contextsynapse/api/errors.py +183 -0
  80. contextsynapse/api/events.py +88 -0
  81. contextsynapse/api/experiment_bootstrap.py +321 -0
  82. contextsynapse/api/experiment_orchestrator.py +1078 -0
  83. contextsynapse/api/experiment_router.py +2089 -0
  84. contextsynapse/api/feature_gate.py +89 -0
  85. contextsynapse/api/federation_router.py +108 -0
  86. contextsynapse/api/integrations.py +567 -0
  87. contextsynapse/api/integrations_router.py +461 -0
  88. contextsynapse/api/intelligence_router.py +1028 -0
  89. contextsynapse/api/metering.py +155 -0
  90. contextsynapse/api/metrics.py +112 -0
  91. contextsynapse/api/models.py +38 -0
  92. contextsynapse/api/monitoring_router.py +174 -0
  93. contextsynapse/api/pipeline_router.py +1437 -0
  94. contextsynapse/api/playground_conn.py +116 -0
  95. contextsynapse/api/projects_router.py +131 -0
  96. contextsynapse/api/queries_router.py +282 -0
  97. contextsynapse/api/quota.py +95 -0
  98. contextsynapse/api/rate_limit.py +64 -0
  99. contextsynapse/api/search_router.py +261 -0
  100. contextsynapse/api/shield_router.py +447 -0
  101. contextsynapse/api/tenant_guard.py +103 -0
  102. contextsynapse/api/tenant_quotas.py +231 -0
  103. contextsynapse/api/tenants.py +305 -0
  104. contextsynapse/api/users.py +646 -0
  105. contextsynapse/api/v1.py +167 -0
  106. contextsynapse/api/vertical_builder_router.py +387 -0
  107. contextsynapse/benchmark/__init__.py +15 -0
  108. contextsynapse/benchmark/__main__.py +64 -0
  109. contextsynapse/benchmark/agents.py +338 -0
  110. contextsynapse/benchmark/live_ab.py +338 -0
  111. contextsynapse/benchmark/reporter.py +149 -0
  112. contextsynapse/benchmark/runner.py +264 -0
  113. contextsynapse/benchmark/savings.py +266 -0
  114. contextsynapse/benchmark/token_counter.py +212 -0
  115. contextsynapse/benchmark/workloads.py +289 -0
  116. contextsynapse/buffer/__init__.py +154 -0
  117. contextsynapse/buffer/base.py +257 -0
  118. contextsynapse/buffer/duckdb_buffer.py +246 -0
  119. contextsynapse/buffer/file_buffer.py +229 -0
  120. contextsynapse/buffer/lmdb_buffer.py +286 -0
  121. contextsynapse/buffer/local_buffer.py +154 -0
  122. contextsynapse/buffer/redis_buffer.py +211 -0
  123. contextsynapse/buffer/sqlite_buffer.py +266 -0
  124. contextsynapse/cache.py +2 -0
  125. contextsynapse/cli/__init__.py +40 -0
  126. contextsynapse/cli/cli.py +475 -0
  127. contextsynapse/cli/config_cli.py +177 -0
  128. contextsynapse/cli/scaffold.py +465 -0
  129. contextsynapse/cognition/__init__.py +31 -0
  130. contextsynapse/cognition/derivation.py +55 -0
  131. contextsynapse/cognition/events.py +135 -0
  132. contextsynapse/cognition/feedback.py +52 -0
  133. contextsynapse/cognition/hallucination.py +90 -0
  134. contextsynapse/cognition/invalidation.py +70 -0
  135. contextsynapse/cognition/read_tracker.py +50 -0
  136. contextsynapse/collaboration.py +2 -0
  137. contextsynapse/comparison.py +2 -0
  138. contextsynapse/config/__init__.py +10 -0
  139. contextsynapse/config/connectors/amfi_nav.yaml +18 -0
  140. contextsynapse/config/connectors/auto_sector.yaml +20 -0
  141. contextsynapse/config/connectors/banking_sector.yaml +20 -0
  142. contextsynapse/config/connectors/energy_sector.yaml +20 -0
  143. contextsynapse/config/connectors/fmcg_sector.yaml +20 -0
  144. contextsynapse/config/connectors/nsdl_fpi.yaml +9 -0
  145. contextsynapse/config/connectors/nse_price.yaml +61 -0
  146. contextsynapse/config/connectors/pharma_sector.yaml +20 -0
  147. contextsynapse/config/connectors/rbi_dbie.yaml +12 -0
  148. contextsynapse/config/context_presets/ai_research.json +25 -0
  149. contextsynapse/config/context_presets/chatgpt_conversations.json +19 -0
  150. contextsynapse/config/context_presets/claude_conversations.json +19 -0
  151. contextsynapse/config/context_presets/legal_compliance.json +21 -0
  152. contextsynapse/config/context_presets/meeting_notes.json +21 -0
  153. contextsynapse/config/context_presets/slack_engineering.json +21 -0
  154. contextsynapse/config/context_presets/tech_climate.json +24 -0
  155. contextsynapse/config/context_presets/toi_politics.json +25 -0
  156. contextsynapse/config/database_config.py +453 -0
  157. contextsynapse/config/deployment.py +221 -0
  158. contextsynapse/config/gpt_action_schema.json +164 -0
  159. contextsynapse/config/indicators/india_macro.yaml +213 -0
  160. contextsynapse/config/logging_config.py +88 -0
  161. contextsynapse/config/mode_config.py +223 -0
  162. contextsynapse/config/schemas/api_spec.yaml +48 -0
  163. contextsynapse/config/schemas/architecture_doc.yaml +51 -0
  164. contextsynapse/config/schemas/chat_history.yaml +90 -0
  165. contextsynapse/config/schemas/chatgpt_conversation.yaml +101 -0
  166. contextsynapse/config/schemas/claude_conversation.yaml +148 -0
  167. contextsynapse/config/schemas/contract.yaml +48 -0
  168. contextsynapse/config/schemas/conversation.yaml +167 -0
  169. contextsynapse/config/schemas/database.yaml +74 -0
  170. contextsynapse/config/schemas/decision.yaml +72 -0
  171. contextsynapse/config/schemas/ecommerce.yaml +56 -0
  172. contextsynapse/config/schemas/education.yaml +42 -0
  173. contextsynapse/config/schemas/healthcare.yaml +133 -0
  174. contextsynapse/config/schemas/hr_document.yaml +48 -0
  175. contextsynapse/config/schemas/invoice.yaml +40 -0
  176. contextsynapse/config/schemas/knowledge_base.yaml +75 -0
  177. contextsynapse/config/schemas/legal.yaml +42 -0
  178. contextsynapse/config/schemas/marketing_content.yaml +48 -0
  179. contextsynapse/config/schemas/meeting_notes.yaml +51 -0
  180. contextsynapse/config/schemas/news_article.yaml +61 -0
  181. contextsynapse/config/schemas/real_estate.yaml +49 -0
  182. contextsynapse/config/schemas/requirements_doc.yaml +48 -0
  183. contextsynapse/config/schemas/research_paper.yaml +56 -0
  184. contextsynapse/config/schemas/resume.yaml +49 -0
  185. contextsynapse/config/schemas/retail.yaml +42 -0
  186. contextsynapse/config/schemas/rule_meta.yaml +173 -0
  187. contextsynapse/config/schemas/rules.yaml +72 -0
  188. contextsynapse/config/schemas/screener_meta.yaml +236 -0
  189. contextsynapse/config/schemas/sdlc.yaml +103 -0
  190. contextsynapse/config/schemas/session_graph.yaml +172 -0
  191. contextsynapse/config/schemas/support_ticket.yaml +48 -0
  192. contextsynapse/config/schemas/web.yaml +64 -0
  193. contextsynapse/config/sensors/earnings_calendar.yaml +52 -0
  194. contextsynapse/config/sensors/global_risk.yaml +53 -0
  195. contextsynapse/config/sensors/government_policy.yaml +54 -0
  196. contextsynapse/config/sensors/supply_chain.yaml +50 -0
  197. contextsynapse/config/sensors/templates/behavioral.yaml +56 -0
  198. contextsynapse/config/sensors/templates/equity_sentiment.yaml +48 -0
  199. contextsynapse/config/sensors/templates/global_macro.yaml +47 -0
  200. contextsynapse/config/sensors/templates/market_data.yaml +118 -0
  201. contextsynapse/config/sensors/templates/sector_technical.yaml +47 -0
  202. contextsynapse/config/sensors/weather.yaml +52 -0
  203. contextsynapse/config/storage_strategy.py +202 -0
  204. contextsynapse/config/templates/competitive_intel.yaml +39 -0
  205. contextsynapse/config/templates/geopolitical_risk.yaml +46 -0
  206. contextsynapse/config/templates/market_analysis.yaml +58 -0
  207. contextsynapse/connectors/__init__.py +15 -0
  208. contextsynapse/connectors/api_router.py +121 -0
  209. contextsynapse/connectors/base.py +357 -0
  210. contextsynapse/connectors/financial/audio.py +170 -0
  211. contextsynapse/connectors/financial/youtube.py +272 -0
  212. contextsynapse/connectors/github.py +164 -0
  213. contextsynapse/connectors/jira.py +120 -0
  214. contextsynapse/connectors/kafka_connector.py +124 -0
  215. contextsynapse/connectors/pipeline_connector.py +747 -0
  216. contextsynapse/connectors/registry.py +116 -0
  217. contextsynapse/connectors/scheduler.py +87 -0
  218. contextsynapse/connectors/universal.py +360 -0
  219. contextsynapse/context/__init__.py +96 -0
  220. contextsynapse/context/__main__.py +4 -0
  221. contextsynapse/context/acl.py +125 -0
  222. contextsynapse/context/agent_card.py +201 -0
  223. contextsynapse/context/agent_memory.py +814 -0
  224. contextsynapse/context/agents.py +472 -0
  225. contextsynapse/context/agents_redis.py +391 -0
  226. contextsynapse/context/assembled.py +204 -0
  227. contextsynapse/context/attribution.py +113 -0
  228. contextsynapse/context/blob.py +184 -0
  229. contextsynapse/context/boundaries.py +187 -0
  230. contextsynapse/context/boundary.py +507 -0
  231. contextsynapse/context/bundle.py +155 -0
  232. contextsynapse/context/cli.py +519 -0
  233. contextsynapse/context/collaboration.py +165 -0
  234. contextsynapse/context/compiler.py +604 -0
  235. contextsynapse/context/composite.py +536 -0
  236. contextsynapse/context/compression.py +147 -0
  237. contextsynapse/context/context_manager.py +888 -0
  238. contextsynapse/context/context_schema.py +90 -0
  239. contextsynapse/context/context_schema.yaml +105 -0
  240. contextsynapse/context/context_units.py +891 -0
  241. contextsynapse/context/conversation.py +488 -0
  242. contextsynapse/context/dedup.py +207 -0
  243. contextsynapse/context/document_processor.py +698 -0
  244. contextsynapse/context/embedding_hooks.py +338 -0
  245. contextsynapse/context/execution_schema.py +274 -0
  246. contextsynapse/context/fan_out.py +138 -0
  247. contextsynapse/context/frozen.py +80 -0
  248. contextsynapse/context/gravity.py +227 -0
  249. contextsynapse/context/hub.py +1401 -0
  250. contextsynapse/context/ingest.py +391 -0
  251. contextsynapse/context/injection.py +226 -0
  252. contextsynapse/context/interaction_graphifier.py +562 -0
  253. contextsynapse/context/layers.py +574 -0
  254. contextsynapse/context/projection.py +1195 -0
  255. contextsynapse/context/promotion.py +634 -0
  256. contextsynapse/context/proof.py +131 -0
  257. contextsynapse/context/propagation.py +577 -0
  258. contextsynapse/context/pubsub.py +135 -0
  259. contextsynapse/context/quality.py +1054 -0
  260. contextsynapse/context/quality_tracker.py +270 -0
  261. contextsynapse/context/scoping.py +370 -0
  262. contextsynapse/context/seed.py +992 -0
  263. contextsynapse/context/session.py +1142 -0
  264. contextsynapse/context/session_graph.py +593 -0
  265. contextsynapse/context/session_memory.py +309 -0
  266. contextsynapse/context/session_resolver.py +111 -0
  267. contextsynapse/context/skill_learning.py +237 -0
  268. contextsynapse/context/smart_budget.py +129 -0
  269. contextsynapse/context/source_policy.py +242 -0
  270. contextsynapse/context/store_factory.py +53 -0
  271. contextsynapse/context/sync.py +648 -0
  272. contextsynapse/context/token.py +236 -0
  273. contextsynapse/context/vector_integration.py +297 -0
  274. contextsynapse/context/webhooks.py +194 -0
  275. contextsynapse/context/working_memory.py +224 -0
  276. contextsynapse/core/__init__.py +18 -0
  277. contextsynapse/core/archiver.py +237 -0
  278. contextsynapse/core/change_stream.py +282 -0
  279. contextsynapse/core/checkpoint.py +310 -0
  280. contextsynapse/core/cloud_storage.py +387 -0
  281. contextsynapse/core/context_state.py +651 -0
  282. contextsynapse/core/cron.py +324 -0
  283. contextsynapse/core/datasource.py +643 -0
  284. contextsynapse/core/db.py +289 -0
  285. contextsynapse/core/federation.py +283 -0
  286. contextsynapse/core/graph_coordinator.py +201 -0
  287. contextsynapse/core/graph_intelligence.py +388 -0
  288. contextsynapse/core/graph_structures.py +106 -0
  289. contextsynapse/core/graph_sync.py +157 -0
  290. contextsynapse/core/hybrid_graph_storage.py +2998 -0
  291. contextsynapse/core/lifecycle.py +691 -0
  292. contextsynapse/core/multiworker.py +378 -0
  293. contextsynapse/core/pruning.py +312 -0
  294. contextsynapse/core/redis_registry.py +524 -0
  295. contextsynapse/core/registry.py +1043 -0
  296. contextsynapse/core/registry_factory.py +51 -0
  297. contextsynapse/core/registry_metadata.py +294 -0
  298. contextsynapse/core/replay.py +354 -0
  299. contextsynapse/core/replication.py +339 -0
  300. contextsynapse/core/time_travel.py +260 -0
  301. contextsynapse/core/write_behind.py +152 -0
  302. contextsynapse/core/write_context.py +39 -0
  303. contextsynapse/db/__init__.py +1 -0
  304. contextsynapse/db/postgres.py +267 -0
  305. contextsynapse/db/profile.py +236 -0
  306. contextsynapse/db/rules.py +328 -0
  307. contextsynapse/demo/__init__.py +0 -0
  308. contextsynapse/demo/report.py +147 -0
  309. contextsynapse/demo/runner.py +520 -0
  310. contextsynapse/demo/scenario.py +165 -0
  311. contextsynapse/demo/session_demo.py +280 -0
  312. contextsynapse/demo/session_report.py +143 -0
  313. contextsynapse/demo/universal_runner.py +257 -0
  314. contextsynapse/engine/__init__.py +15 -0
  315. contextsynapse/engine/core.py +555 -0
  316. contextsynapse/extraction/__init__.py +69 -0
  317. contextsynapse/extraction/cli.py +274 -0
  318. contextsynapse/extraction/config.py +107 -0
  319. contextsynapse/extraction/examples/example_usage.py +118 -0
  320. contextsynapse/extraction/examples/sample_manifest.json +53 -0
  321. contextsynapse/extraction/examples/sample_normalized.json +185 -0
  322. contextsynapse/extraction/extract_engine.py +440 -0
  323. contextsynapse/extraction/extractors/__init__.py +37 -0
  324. contextsynapse/extraction/extractors/chat_export_extractor.py +189 -0
  325. contextsynapse/extraction/extractors/csv_extractor.py +83 -0
  326. contextsynapse/extraction/extractors/docx_extractor.py +129 -0
  327. contextsynapse/extraction/extractors/excel_extractor.py +152 -0
  328. contextsynapse/extraction/extractors/html_extractor.py +146 -0
  329. contextsynapse/extraction/extractors/pdf_extractor.py +635 -0
  330. contextsynapse/extraction/extractors/pdf_extractor_layoutparser.py +408 -0
  331. contextsynapse/extraction/extractors/register_extractors.py +63 -0
  332. contextsynapse/extraction/extractors/text_extractor.py +65 -0
  333. contextsynapse/extraction/extractors/txt_extractor.py +120 -0
  334. contextsynapse/extraction/extractors/website_extractor.py +246 -0
  335. contextsynapse/extraction/fact_extractor.py +236 -0
  336. contextsynapse/extraction/file_manager.py +353 -0
  337. contextsynapse/extraction/hierarchy.py +239 -0
  338. contextsynapse/extraction/id_generator.py +450 -0
  339. contextsynapse/extraction/layout_detector.py +409 -0
  340. contextsynapse/extraction/llm_entity_extractor.py +301 -0
  341. contextsynapse/extraction/normalized_store.py +480 -0
  342. contextsynapse/extraction/normalizer.py +594 -0
  343. contextsynapse/extraction/parquet_writer.py +598 -0
  344. contextsynapse/extraction/post_processors/__init__.py +40 -0
  345. contextsynapse/extraction/post_processors/column_reorganizer.py +507 -0
  346. contextsynapse/extraction/ray_normalization.py +233 -0
  347. contextsynapse/extraction/ray_runner.py +207 -0
  348. contextsynapse/extraction/redis_schema_registry.py +222 -0
  349. contextsynapse/extraction/registry.py +204 -0
  350. contextsynapse/extraction/schema_loader.py +663 -0
  351. contextsynapse/extraction/schema_registry.py +230 -0
  352. contextsynapse/extraction/semantic_normalizer.py +245 -0
  353. contextsynapse/extraction/version_manager.py +314 -0
  354. contextsynapse/gateway/__init__.py +24 -0
  355. contextsynapse/gateway/action_emitter.py +212 -0
  356. contextsynapse/gateway/cost_tracker.py +508 -0
  357. contextsynapse/gateway/gateway.py +377 -0
  358. contextsynapse/gateway/policy.py +303 -0
  359. contextsynapse/governance/__init__.py +13 -0
  360. contextsynapse/governance/layer.py +513 -0
  361. contextsynapse/ingestion/__init__.py +15 -0
  362. contextsynapse/ingestion/amplifier.py +288 -0
  363. contextsynapse/ingestion/async_ingest.py +463 -0
  364. contextsynapse/ingestion/chunker.py +303 -0
  365. contextsynapse/ingestion/chunking.py +58 -0
  366. contextsynapse/ingestion/cleaner.py +190 -0
  367. contextsynapse/ingestion/cleanse.py +252 -0
  368. contextsynapse/ingestion/connectors/__init__.py +38 -0
  369. contextsynapse/ingestion/connectors/base.py +300 -0
  370. contextsynapse/ingestion/connectors/chatgpt_memory.py +247 -0
  371. contextsynapse/ingestion/connectors/claude_memory.py +274 -0
  372. contextsynapse/ingestion/connectors/sap_ingestor.py +208 -0
  373. contextsynapse/ingestion/content_detector.py +80 -0
  374. contextsynapse/ingestion/content_monitor.py +502 -0
  375. contextsynapse/ingestion/dedup.py +106 -0
  376. contextsynapse/ingestion/feed.py +640 -0
  377. contextsynapse/ingestion/filters.py +461 -0
  378. contextsynapse/ingestion/graph_builder.py +705 -0
  379. contextsynapse/ingestion/input_classifier.py +307 -0
  380. contextsynapse/ingestion/job_manager.py +571 -0
  381. contextsynapse/ingestion/llm_extractor.py +610 -0
  382. contextsynapse/ingestion/orchestrator.py +116 -0
  383. contextsynapse/ingestion/parsers/__init__.py +19 -0
  384. contextsynapse/ingestion/parsers/graph_parser_registry.py +103 -0
  385. contextsynapse/ingestion/parsers/graphml_parser.py +141 -0
  386. contextsynapse/ingestion/parsers/jsonld_parser.py +171 -0
  387. contextsynapse/ingestion/parsers/rdf_parser.py +150 -0
  388. contextsynapse/ingestion/pipeline_context.py +228 -0
  389. contextsynapse/ingestion/pipeline_store.py +1195 -0
  390. contextsynapse/ingestion/queue.py +133 -0
  391. contextsynapse/ingestion/reprocess.py +179 -0
  392. contextsynapse/ingestion/scenario_router.py +224 -0
  393. contextsynapse/ingestion/schema_extractor.py +759 -0
  394. contextsynapse/ingestion/schema_validator.py +274 -0
  395. contextsynapse/ingestion/sdlc_ingest.py +87 -0
  396. contextsynapse/ingestion/smart_ingest.py +2451 -0
  397. contextsynapse/ingestion/source_connector.py +171 -0
  398. contextsynapse/ingestion/stage_executor.py +2095 -0
  399. contextsynapse/ingestion/stages/__init__.py +9 -0
  400. contextsynapse/ingestion/stages/tabular_to_graph.py +289 -0
  401. contextsynapse/ingestion/strategies.py +386 -0
  402. contextsynapse/ingestion/universal/__init__.py +4 -0
  403. contextsynapse/ingestion/universal/_operator_registry.py +59 -0
  404. contextsynapse/ingestion/universal/ingest_content.py +32 -0
  405. contextsynapse/ingestion/universal/operators/__init__.py +1 -0
  406. contextsynapse/ingestion/universal/operators/base.py +19 -0
  407. contextsynapse/ingestion/universal/operators/build_edges.py +75 -0
  408. contextsynapse/ingestion/universal/operators/cluster_topics.py +397 -0
  409. contextsynapse/ingestion/universal/operators/deduplicate.py +45 -0
  410. contextsynapse/ingestion/universal/operators/detect_signals.py +90 -0
  411. contextsynapse/ingestion/universal/operators/embed.py +80 -0
  412. contextsynapse/ingestion/universal/operators/extract_entities.py +253 -0
  413. contextsynapse/ingestion/universal/operators/extract_preferences.py +117 -0
  414. contextsynapse/ingestion/universal/operators/filter_content.py +69 -0
  415. contextsynapse/ingestion/universal/operators/index_bm25.py +52 -0
  416. contextsynapse/ingestion/universal/operators/infer_domains.py +69 -0
  417. contextsynapse/ingestion/universal/operators/link_cross_reference.py +210 -0
  418. contextsynapse/ingestion/universal/operators/parse_records.py +66 -0
  419. contextsynapse/ingestion/universal/operators/resolve_entities.py +261 -0
  420. contextsynapse/ingestion/universal/operators/scanners/__init__.py +16 -0
  421. contextsynapse/ingestion/universal/operators/scanners/edges.py +173 -0
  422. contextsynapse/ingestion/universal/operators/scanners/git.py +187 -0
  423. contextsynapse/ingestion/universal/operators/scanners/github.py +135 -0
  424. contextsynapse/ingestion/universal/operators/scanners/github_api.py +509 -0
  425. contextsynapse/ingestion/universal/operators/scanners/helpers.py +67 -0
  426. contextsynapse/ingestion/universal/operators/scanners/jira.py +65 -0
  427. contextsynapse/ingestion/universal/operators/scanners/llm_enrichment.py +82 -0
  428. contextsynapse/ingestion/universal/operators/scanners/repo.py +149 -0
  429. contextsynapse/ingestion/universal/operators/sdlc_scan.py +213 -0
  430. contextsynapse/ingestion/universal/operators/spec_scanner.py +149 -0
  431. contextsynapse/ingestion/universal/operators/store_documents.py +72 -0
  432. contextsynapse/ingestion/universal/operators/synthesize_cu.py +180 -0
  433. contextsynapse/ingestion/universal/operators/validate_gate.py +65 -0
  434. contextsynapse/ingestion/universal/parsers/__init__.py +5 -0
  435. contextsynapse/ingestion/universal/parsers/record_parser.py +203 -0
  436. contextsynapse/ingestion/universal/parsers/turn_parser.py +329 -0
  437. contextsynapse/ingestion/universal/shared_signals.py +161 -0
  438. contextsynapse/ingestion/universal/stage_executor.py +219 -0
  439. contextsynapse/ingestion/web_crawler.py +265 -0
  440. contextsynapse/intelligence/__init__.py +53 -0
  441. contextsynapse/intelligence/alerts.py +198 -0
  442. contextsynapse/intelligence/collector.py +655 -0
  443. contextsynapse/intelligence/comparison.py +198 -0
  444. contextsynapse/intelligence/config.py +56 -0
  445. contextsynapse/intelligence/conflict_detector.py +182 -0
  446. contextsynapse/intelligence/context_gaps.py +192 -0
  447. contextsynapse/intelligence/context_radar.py +135 -0
  448. contextsynapse/intelligence/correlation_engine.py +416 -0
  449. contextsynapse/intelligence/correlation_template.py +120 -0
  450. contextsynapse/intelligence/dedup.py +296 -0
  451. contextsynapse/intelligence/event_bus.py +91 -0
  452. contextsynapse/intelligence/feedback_loop.py +101 -0
  453. contextsynapse/intelligence/freshness.py +307 -0
  454. contextsynapse/intelligence/fundamental_feed.py +551 -0
  455. contextsynapse/intelligence/geo_data.py +170 -0
  456. contextsynapse/intelligence/geo_reference.py +112 -0
  457. contextsynapse/intelligence/graph_fusion.py +465 -0
  458. contextsynapse/intelligence/heuristics.py +176 -0
  459. contextsynapse/intelligence/impact_tracker.py +336 -0
  460. contextsynapse/intelligence/macro_indicators.py +319 -0
  461. contextsynapse/intelligence/ocr.py +104 -0
  462. contextsynapse/intelligence/persistence.py +267 -0
  463. contextsynapse/intelligence/pipeline_health.py +130 -0
  464. contextsynapse/intelligence/price_feed.py +221 -0
  465. contextsynapse/intelligence/rate_limiter.py +130 -0
  466. contextsynapse/intelligence/reactive.py +411 -0
  467. contextsynapse/intelligence/runtime_context.py +390 -0
  468. contextsynapse/intelligence/sentiment_decay.py +426 -0
  469. contextsynapse/intelligence/session.py +277 -0
  470. contextsynapse/intelligence/signal_hierarchy.py +438 -0
  471. contextsynapse/intelligence/signals.py +185 -0
  472. contextsynapse/intelligence/source_watcher.py +132 -0
  473. contextsynapse/intelligence/table_enricher.py +256 -0
  474. contextsynapse/intelligence/tagger.py +319 -0
  475. contextsynapse/intelligence/timeseries.py +209 -0
  476. contextsynapse/intelligence/tracker.py +318 -0
  477. contextsynapse/intelligence/watchdog.py +392 -0
  478. contextsynapse/intelligence/watchdog_manager.py +263 -0
  479. contextsynapse/intelligence/webhook_receiver.py +165 -0
  480. contextsynapse/intelligence/weight_learner.py +234 -0
  481. contextsynapse/llm/__init__.py +8 -0
  482. contextsynapse/llm/client.py +348 -0
  483. contextsynapse/llm/rate_limiter.py +166 -0
  484. contextsynapse/logging_config.py +2 -0
  485. contextsynapse/marketplace/__init__.py +7 -0
  486. contextsynapse/marketplace/registry.py +173 -0
  487. contextsynapse/mcp/__init__.py +11 -0
  488. contextsynapse/mcp/__main__.py +4 -0
  489. contextsynapse/mcp/auth_middleware.py +212 -0
  490. contextsynapse/mcp/connection_pool.py +128 -0
  491. contextsynapse/mcp/server.py +986 -0
  492. contextsynapse/mcp/session_context.py +67 -0
  493. contextsynapse/memory/__init__.py +34 -0
  494. contextsynapse/memory/engine.py +475 -0
  495. contextsynapse/memory/temporal.py +327 -0
  496. contextsynapse/metadata/__init__.py +12 -0
  497. contextsynapse/metadata/metadata_db.py +272 -0
  498. contextsynapse/metadata/metadata_query_tool.py +300 -0
  499. contextsynapse/metadata/metadata_tracker.py +425 -0
  500. contextsynapse/models/__init__.py +27 -0
  501. contextsynapse/models/embedding_service.py +360 -0
  502. contextsynapse/models/model_registry.py +228 -0
  503. contextsynapse/multiworker.py +2 -0
  504. contextsynapse/pipelines/__init__.py +1 -0
  505. contextsynapse/pipelines/executor.py +851 -0
  506. contextsynapse/pipelines/filters.py +189 -0
  507. contextsynapse/pipelines/models.py +176 -0
  508. contextsynapse/pipelines/scheduler.py +268 -0
  509. contextsynapse/playground/__init__.py +1 -0
  510. contextsynapse/playground/templates.py +85 -0
  511. contextsynapse/plugins/__init__.py +43 -0
  512. contextsynapse/plugins/api.py +66 -0
  513. contextsynapse/plugins/base.py +350 -0
  514. contextsynapse/plugins/domain_interface.py +508 -0
  515. contextsynapse/plugins/domain_loader.py +241 -0
  516. contextsynapse/plugins/loader.py +148 -0
  517. contextsynapse/plugins/registry.py +265 -0
  518. contextsynapse/project/__init__.py +11 -0
  519. contextsynapse/project/code_context.py +807 -0
  520. contextsynapse/project/connectors/__init__.py +4 -0
  521. contextsynapse/project/connectors/github_connector.py +113 -0
  522. contextsynapse/project/connectors/jira_connector.py +160 -0
  523. contextsynapse/project/graph.py +1023 -0
  524. contextsynapse/project/project_context.py +545 -0
  525. contextsynapse/project/scanner_registry.py +61 -0
  526. contextsynapse/project/schema_manager.py +322 -0
  527. contextsynapse/project/schemas/knowledge.yaml +59 -0
  528. contextsynapse/project/schemas/sdlc.yaml +369 -0
  529. contextsynapse/project/sdlc_schema.py +172 -0
  530. contextsynapse/project/spec_parser.py +85 -0
  531. contextsynapse/project/task_lock.py +181 -0
  532. contextsynapse/project/task_stream.py +203 -0
  533. contextsynapse/project/team_tools.py +537 -0
  534. contextsynapse/py.typed +0 -0
  535. contextsynapse/realtime/__init__.py +6 -0
  536. contextsynapse/realtime/collaboration.py +147 -0
  537. contextsynapse/rules/__init__.py +10 -0
  538. contextsynapse/rules/engine.py +116 -0
  539. contextsynapse/rules/evaluators/__init__.py +6 -0
  540. contextsynapse/rules/evaluators/aggregate.py +205 -0
  541. contextsynapse/rules/evaluators/custom.py +170 -0
  542. contextsynapse/rules/evaluators/pre_action.py +125 -0
  543. contextsynapse/rules/evaluators/temporal.py +129 -0
  544. contextsynapse/rules/loader.py +52 -0
  545. contextsynapse/rules/models.py +124 -0
  546. contextsynapse/rules/universal.py +393 -0
  547. contextsynapse/scheduler.py +229 -0
  548. contextsynapse/schema/__init__.py +42 -0
  549. contextsynapse/schema/compiler.py +252 -0
  550. contextsynapse/schema/composer.py +158 -0
  551. contextsynapse/schema/dedup.py +73 -0
  552. contextsynapse/schema/derivation.py +172 -0
  553. contextsynapse/schema/sdl.py +326 -0
  554. contextsynapse/schema/validation_gate.py +124 -0
  555. contextsynapse/sdk/__init__.py +63 -0
  556. contextsynapse/sdk/agent.py +214 -0
  557. contextsynapse/sdk/client.py +269 -0
  558. contextsynapse/sdk/exceptions.py +23 -0
  559. contextsynapse/sdk/models.py +78 -0
  560. contextsynapse/sdk/session.py +408 -0
  561. contextsynapse/sdk/tracked.py +218 -0
  562. contextsynapse/sdk/worker.py +266 -0
  563. contextsynapse/sdk/workspace_client.py +98 -0
  564. contextsynapse/sdk/ws.py +41 -0
  565. contextsynapse/search/__init__.py +20 -0
  566. contextsynapse/search/embedding_cache.py +140 -0
  567. contextsynapse/search/enhanced_search.py +152 -0
  568. contextsynapse/search/fulltext.py +130 -0
  569. contextsynapse/search/graph_search.py +634 -0
  570. contextsynapse/search/lmdb_index.py +1218 -0
  571. contextsynapse/search/nl_to_aiql.py +199 -0
  572. contextsynapse/search/rag.py +1346 -0
  573. contextsynapse/search/rag_cache.py +167 -0
  574. contextsynapse/search/reasoning_chain.py +231 -0
  575. contextsynapse/search/redis_search.py +207 -0
  576. contextsynapse/search/retrieval_quality.py +314 -0
  577. contextsynapse/search/semantic_query.py +455 -0
  578. contextsynapse/search/text_resolver.py +159 -0
  579. contextsynapse/search/whoosh_search.py +373 -0
  580. contextsynapse/security/__init__.py +17 -0
  581. contextsynapse/security/audit.py +297 -0
  582. contextsynapse/security/audit_logger.py +97 -0
  583. contextsynapse/security/audit_trail.py +270 -0
  584. contextsynapse/security/auth_unified.py +284 -0
  585. contextsynapse/security/auto_tagger.py +230 -0
  586. contextsynapse/security/data_security.py +218 -0
  587. contextsynapse/security/encryption.py +207 -0
  588. contextsynapse/security/identity.py +447 -0
  589. contextsynapse/security/jwt_identity.py +59 -0
  590. contextsynapse/security/middleware.py +336 -0
  591. contextsynapse/security/pii.py +233 -0
  592. contextsynapse/security/rbac.py +96 -0
  593. contextsynapse/security/rls.py +205 -0
  594. contextsynapse/security/sanitize.py +233 -0
  595. contextsynapse/security/scoped_encryption.py +131 -0
  596. contextsynapse/security/tenant.py +401 -0
  597. contextsynapse/shield/__init__.py +21 -0
  598. contextsynapse/shield/anomaly.py +56 -0
  599. contextsynapse/shield/permissions.py +99 -0
  600. contextsynapse/shield/profile.py +103 -0
  601. contextsynapse/shield/shield.py +108 -0
  602. contextsynapse/shield/trust_engine.py +69 -0
  603. contextsynapse/skills/__init__.py +14 -0
  604. contextsynapse/skills/engine.py +233 -0
  605. contextsynapse/skills/loader.py +59 -0
  606. contextsynapse/skills/models.py +139 -0
  607. contextsynapse/storage/__init__.py +7 -0
  608. contextsynapse/storage/cache.py +208 -0
  609. contextsynapse/storage/columnar_store_v2.py +178 -0
  610. contextsynapse/storage/csr_graph_storage.py +587 -0
  611. contextsynapse/storage/csr_store.py +388 -0
  612. contextsynapse/storage/document_store.py +491 -0
  613. contextsynapse/storage/hnsw_index.py +294 -0
  614. contextsynapse/storage/hybrid_store_v2.py +278 -0
  615. contextsynapse/storage/lmdb_graph_storage.py +366 -0
  616. contextsynapse/storage/migration.py +279 -0
  617. contextsynapse/storage/namespace_store.py +346 -0
  618. contextsynapse/storage/pure_graph_storage.py +185 -0
  619. contextsynapse/storage/redis_graph_adapter.py +186 -0
  620. contextsynapse/storage/redis_graph_storage.py +375 -0
  621. contextsynapse/storage/router/__init__.py +29 -0
  622. contextsynapse/storage/router/duckdb_store.py +398 -0
  623. contextsynapse/storage/router/factory.py +83 -0
  624. contextsynapse/storage/router/interface.py +125 -0
  625. contextsynapse/storage/router/postgres_store.py +339 -0
  626. contextsynapse/storage/router/resolver.py +192 -0
  627. contextsynapse/storage/router/router.py +300 -0
  628. contextsynapse/storage/single_file_storage.py +391 -0
  629. contextsynapse/storage/storage_manager.py +214 -0
  630. contextsynapse/storage/storage_query_optimizer.py +314 -0
  631. contextsynapse/storage/wal.py +359 -0
  632. contextsynapse/temporal/__init__.py +0 -0
  633. contextsynapse/temporal/storage.py +106 -0
  634. contextsynapse/tests/__init__.py +11 -0
  635. contextsynapse/tests/regression/__init__.py +1 -0
  636. contextsynapse/tests/regression/add_metadata.py +395 -0
  637. contextsynapse/tests/regression/add_skip_flags.py +85 -0
  638. contextsynapse/tests/regression/cases/test_basic_create_node.yaml +20 -0
  639. contextsynapse/tests/regression/cases/test_basic_select.yaml +21 -0
  640. contextsynapse/tests/regression/cases/test_blockchain_audit_trail.yaml +37 -0
  641. contextsynapse/tests/regression/cases/test_blockchain_audit_trail_filtered.yaml +39 -0
  642. contextsynapse/tests/regression/cases/test_blockchain_blocks_range.yaml +39 -0
  643. contextsynapse/tests/regression/cases/test_blockchain_get_block.yaml +35 -0
  644. contextsynapse/tests/regression/cases/test_blockchain_latest_block.yaml +35 -0
  645. contextsynapse/tests/regression/cases/test_blockchain_length.yaml +37 -0
  646. contextsynapse/tests/regression/cases/test_blockchain_merkle_root.yaml +37 -0
  647. contextsynapse/tests/regression/cases/test_blockchain_verify.yaml +35 -0
  648. contextsynapse/tests/regression/cases/test_blockchain_verify_block.yaml +35 -0
  649. contextsynapse/tests/regression/cases/test_create_edge.yaml +28 -0
  650. contextsynapse/tests/regression/cases/test_delete_edge_basic.yaml +29 -0
  651. contextsynapse/tests/regression/cases/test_delete_node_basic.yaml +29 -0
  652. contextsynapse/tests/regression/cases/test_evaluation_mrr.yaml +40 -0
  653. contextsynapse/tests/regression/cases/test_evaluation_ndcg.yaml +40 -0
  654. contextsynapse/tests/regression/cases/test_evaluation_precision.yaml +40 -0
  655. contextsynapse/tests/regression/cases/test_evaluation_recall.yaml +40 -0
  656. contextsynapse/tests/regression/cases/test_group_by_basic.yaml +56 -0
  657. contextsynapse/tests/regression/cases/test_match_node_basic.yaml +29 -0
  658. contextsynapse/tests/regression/cases/test_match_node_with_order_limit.yaml +31 -0
  659. contextsynapse/tests/regression/cases/test_namespace_switch.yaml +18 -0
  660. contextsynapse/tests/regression/cases/test_pipeline_cascaded.yaml +61 -0
  661. contextsynapse/tests/regression/cases/test_pipeline_fixed_size_chunking.yaml +48 -0
  662. contextsynapse/tests/regression/cases/test_pipeline_gpt4_chunking.yaml +54 -0
  663. contextsynapse/tests/regression/cases/test_pipeline_hybrid_indexing.yaml +57 -0
  664. contextsynapse/tests/regression/cases/test_pipeline_large_embedding.yaml +52 -0
  665. contextsynapse/tests/regression/cases/test_pipeline_paragraph_chunking.yaml +49 -0
  666. contextsynapse/tests/regression/cases/test_pipeline_recursive_chunking.yaml +47 -0
  667. contextsynapse/tests/regression/cases/test_pipeline_run_pipeline.yaml +56 -0
  668. contextsynapse/tests/regression/cases/test_pipeline_section_based_chunking.yaml +53 -0
  669. contextsynapse/tests/regression/cases/test_pipeline_semantic_chunking.yaml +51 -0
  670. contextsynapse/tests/regression/cases/test_pipeline_with_entity_extraction.yaml +57 -0
  671. contextsynapse/tests/regression/cases/test_pipeline_with_relationships.yaml +62 -0
  672. contextsynapse/tests/regression/cases/test_rag_evaluation.yaml +38 -0
  673. contextsynapse/tests/regression/cases/test_rag_graph_bfs_with_eval.yaml +48 -0
  674. contextsynapse/tests/regression/cases/test_rag_graph_centrality.yaml +40 -0
  675. contextsynapse/tests/regression/cases/test_rag_graph_centrality_eval.yaml +35 -0
  676. contextsynapse/tests/regression/cases/test_rag_graph_community.yaml +40 -0
  677. contextsynapse/tests/regression/cases/test_rag_graph_community_eval.yaml +35 -0
  678. contextsynapse/tests/regression/cases/test_rag_graph_dfs_with_eval.yaml +35 -0
  679. contextsynapse/tests/regression/cases/test_rag_graph_multi_hop_eval.yaml +35 -0
  680. contextsynapse/tests/regression/cases/test_rag_graph_path.yaml +40 -0
  681. contextsynapse/tests/regression/cases/test_rag_graph_search_basic.yaml +38 -0
  682. contextsynapse/tests/regression/cases/test_rag_graph_search_bfs.yaml +52 -0
  683. contextsynapse/tests/regression/cases/test_rag_graph_search_dfs.yaml +41 -0
  684. contextsynapse/tests/regression/cases/test_rag_graph_search_multi_hop.yaml +43 -0
  685. contextsynapse/tests/regression/cases/test_rag_graph_search_shortest_path.yaml +41 -0
  686. contextsynapse/tests/regression/cases/test_rag_graph_search_weighted.yaml +43 -0
  687. contextsynapse/tests/regression/cases/test_rag_graph_shortest_path_eval.yaml +35 -0
  688. contextsynapse/tests/regression/cases/test_rag_graph_traversal.yaml +30 -0
  689. contextsynapse/tests/regression/cases/test_rag_graph_weighted_eval.yaml +35 -0
  690. contextsynapse/tests/regression/cases/test_rag_hybrid_search.yaml +33 -0
  691. contextsynapse/tests/regression/cases/test_rag_hybrid_with_prompt_embedding.yaml +44 -0
  692. contextsynapse/tests/regression/cases/test_rag_keyword_search.yaml +32 -0
  693. contextsynapse/tests/regression/cases/test_rag_multi_hop_graph.yaml +32 -0
  694. contextsynapse/tests/regression/cases/test_rag_path_based.yaml +34 -0
  695. contextsynapse/tests/regression/cases/test_rag_profile_based.yaml +32 -0
  696. contextsynapse/tests/regression/cases/test_rag_vector_search.yaml +32 -0
  697. contextsynapse/tests/regression/cases/test_rag_weighted_graph.yaml +34 -0
  698. contextsynapse/tests/regression/cases/test_rag_weighted_hybrid.yaml +31 -0
  699. contextsynapse/tests/regression/cases/test_semantic_boundary_chunking.yaml +57 -0
  700. contextsynapse/tests/regression/cases/test_semantic_boundary_detection.yaml +33 -0
  701. contextsynapse/tests/regression/cases/test_semantic_hash_function.yaml +30 -0
  702. contextsynapse/tests/regression/cases/test_semantic_hash_with_model.yaml +31 -0
  703. contextsynapse/tests/regression/cases/test_tcs_ingestion_fixed_size.yaml +44 -0
  704. contextsynapse/tests/regression/cases/test_tcs_ingestion_recursive.yaml +46 -0
  705. contextsynapse/tests/regression/cases/test_tcs_ingestion_section.yaml +46 -0
  706. contextsynapse/tests/regression/cases/test_tcs_ingestion_semantic.yaml +44 -0
  707. contextsynapse/tests/regression/cases/test_time_travel_as_of.yaml +35 -0
  708. contextsynapse/tests/regression/cases/test_time_travel_at_commit.yaml +33 -0
  709. contextsynapse/tests/regression/cases/test_time_travel_at_timestamp.yaml +33 -0
  710. contextsynapse/tests/regression/cases/test_time_travel_for_system_time_all.yaml +37 -0
  711. contextsynapse/tests/regression/cases/test_time_travel_versions_between.yaml +39 -0
  712. contextsynapse/tests/regression/cases/test_traverse_basic.yaml +31 -0
  713. contextsynapse/tests/regression/cases/test_traverse_max_depth.yaml +34 -0
  714. contextsynapse/tests/regression/cases/test_update_edge_basic.yaml +29 -0
  715. contextsynapse/tests/regression/evaluation_metrics.py +227 -0
  716. contextsynapse/tests/regression/regression_runner.py +1081 -0
  717. contextsynapse/tests/regression/setup_regression_data.py +212 -0
  718. contextsynapse/tests/regression/test_basic_only.py +84 -0
  719. contextsynapse/tests/regression/test_namespace_creation.py +29 -0
  720. contextsynapse/tests/regression/test_single_fix.py +61 -0
  721. contextsynapse/tests/regression/test_single_query.py +20 -0
  722. contextsynapse/tests/regression/validate_test_syntax.py +179 -0
  723. contextsynapse/tests/test_advanced_features.py +347 -0
  724. contextsynapse/tests/test_aiql_summary.py +283 -0
  725. contextsynapse/tests/test_all_aiql_queries.py +948 -0
  726. contextsynapse/tests/test_all_create_queries.py +213 -0
  727. contextsynapse/tests/test_api_vs_native.py +280 -0
  728. contextsynapse/tests/test_chunking_dedup.py +199 -0
  729. contextsynapse/tests/test_connectors.py +171 -0
  730. contextsynapse/tests/test_edges_and_match.py +202 -0
  731. contextsynapse/tests/test_extraction_pipeline_integration.py +581 -0
  732. contextsynapse/tests/test_name_property.py +224 -0
  733. contextsynapse/tests/test_node_edge_metadata.py +250 -0
  734. contextsynapse/tests/test_playground_conn.py +114 -0
  735. contextsynapse/tests/test_query_cache.py +213 -0
  736. contextsynapse/tests/test_source_policy_auth.py +348 -0
  737. contextsynapse/tests/test_temporal_and_domain.py +224 -0
  738. contextsynapse/tests/test_time_travel_e2e.py +571 -0
  739. contextsynapse/tests/test_traversal_and_aggregation.py +275 -0
  740. contextsynapse/tools/__init__.py +36 -0
  741. contextsynapse/tools/a2a_tools.py +106 -0
  742. contextsynapse/tools/cognition_tools.py +118 -0
  743. contextsynapse/tools/context.py +905 -0
  744. contextsynapse/tools/formatting.py +92 -0
  745. contextsynapse/tools/gateway_tools.py +186 -0
  746. contextsynapse/tools/graph.py +1700 -0
  747. contextsynapse/tools/intelligence.py +235 -0
  748. contextsynapse/tools/memory.py +118 -0
  749. contextsynapse/tools/registry.py +373 -0
  750. contextsynapse/tools/shield_tools.py +159 -0
  751. contextsynapse/tools/tasks.py +341 -0
  752. contextsynapse/tools/workspace_tools.py +124 -0
  753. contextsynapse/utils/__init__.py +15 -0
  754. contextsynapse/utils/config_loader.py +198 -0
  755. contextsynapse/utils/env_loader.py +156 -0
  756. contextsynapse/utils/file_utils.py +288 -0
  757. contextsynapse/utils/logging_optimizer.py +119 -0
  758. contextsynapse/vector/__init__.py +30 -0
  759. contextsynapse/vector/chroma_vector_store.py +152 -0
  760. contextsynapse/vector/custom_vector_store.py +537 -0
  761. contextsynapse/vector/faiss_vector_store.py +296 -0
  762. contextsynapse/vector/qdrant_vector_store.py +163 -0
  763. contextsynapse/vector/vector_db.py +953 -0
  764. contextsynapse/vector/vector_db_manager.py +197 -0
  765. contextsynapse/workspace/__init__.py +27 -0
  766. contextsynapse/workspace/base.py +94 -0
  767. contextsynapse/workspace/git.py +228 -0
  768. contextsynapse/workspace/github.py +78 -0
  769. contextsynapse/workspace/local.py +73 -0
  770. contextsynapse/workspace/tools.py +222 -0
  771. contextsynapse-1.0.0.dist-info/METADATA +847 -0
  772. contextsynapse-1.0.0.dist-info/RECORD +776 -0
  773. contextsynapse-1.0.0.dist-info/WHEEL +5 -0
  774. contextsynapse-1.0.0.dist-info/entry_points.txt +4 -0
  775. contextsynapse-1.0.0.dist-info/licenses/LICENSE +200 -0
  776. contextsynapse-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,206 @@
1
+ """
2
+ AIContextDB OpenAI / Codex Adapter
3
+ ===================================
4
+ Exposes AIContextDB operations as OpenAI function-calling tools,
5
+ compatible with the Chat Completions API and Responses API.
6
+
7
+ Thin wrapper over the Universal Tool Layer (contextsynapse.tools).
8
+ All tool logic lives in contextcore/tools/ — this file only handles
9
+ connection setup and format conversion.
10
+
11
+ Usage:
12
+ from contextsynapse.adapters.openai import create_openai_tools, dispatch_tool_call
13
+
14
+ tools = create_openai_tools() # OpenAI tool schemas
15
+ # Pass `tools` to openai.chat.completions.create(tools=tools, ...)
16
+
17
+ # When the model returns a tool_call, dispatch it:
18
+ result = dispatch_tool_call(tool_call.function.name, tool_call.function.arguments)
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import json
24
+ import logging
25
+ import os
26
+ from datetime import datetime, timezone
27
+ from typing import Any, Dict, List, Optional, Tuple
28
+
29
+ from .._base import AIContextDBConnection
30
+
31
+ logger = logging.getLogger(__name__)
32
+
33
+ # ── Module-level state (lazy) ──────────────────────────────────────
34
+ _conn: Optional[AIContextDBConnection] = None
35
+ _agent_name: str = "codex"
36
+ _agent_id: Optional[str] = None
37
+ _api_key: Optional[str] = None
38
+ _registry = None # AgentRegistry instance
39
+ _tool_context = None # ToolContext for dispatch
40
+
41
+
42
+ def _get_conn() -> AIContextDBConnection:
43
+ global _conn
44
+ if _conn is None:
45
+ _conn = AIContextDBConnection(namespace="default")
46
+ return _conn
47
+
48
+
49
+ def _get_registry():
50
+ global _registry
51
+ if _registry is None:
52
+ from contextsynapse.context.store_factory import create_agent_registry
53
+ _registry = create_agent_registry()
54
+ return _registry
55
+
56
+
57
+ def _ensure_registered(platform: str = "app") -> Tuple[str, str]:
58
+ global _agent_id, _api_key
59
+ if _agent_id and _api_key:
60
+ return _agent_id, _api_key
61
+ try:
62
+ registry = _get_registry()
63
+ agent, api_key = registry.register(
64
+ name=_agent_name, role="agent", platform=platform,
65
+ capabilities=["read", "write"],
66
+ metadata={"adapter": "openai", "registered_at": datetime.now(timezone.utc).isoformat()},
67
+ )
68
+ _agent_id = agent.agent_id
69
+ _api_key = api_key
70
+ except Exception as e:
71
+ logger.warning("Agent registration failed: %s", e)
72
+ _agent_id = _agent_name
73
+ _api_key = ""
74
+ return _agent_id, _api_key
75
+
76
+
77
+ def _get_tool_context():
78
+ """Build or return the current ToolContext."""
79
+ global _tool_context
80
+ from contextsynapse.tools import ToolContext
81
+ _tool_context = ToolContext(
82
+ conn=_get_conn(),
83
+ agent_id=_agent_id or "unknown",
84
+ agent_name=_agent_name,
85
+ )
86
+ # Attach project if available
87
+ try:
88
+ from contextsynapse.project.team_tools import get_project
89
+ _tool_context.project = get_project()
90
+ except Exception:
91
+ pass
92
+ return _tool_context
93
+
94
+
95
+ def configure(
96
+ namespace: str = "default",
97
+ agent_name: str = "codex",
98
+ platform: str = "app",
99
+ connection: Optional[AIContextDBConnection] = None,
100
+ daemon_url: Optional[str] = None,
101
+ auto_register: bool = True,
102
+ api_key: Optional[str] = None,
103
+ session_id: Optional[str] = None,
104
+ ) -> Dict[str, str]:
105
+ """Configure the adapter before use.
106
+
107
+ Preferred: pass api_key + session_id for secure session-based connection.
108
+ Legacy: pass namespace for direct graph access.
109
+ """
110
+ global _conn, _agent_name, _agent_id, _api_key
111
+
112
+ # Session-based connection (preferred)
113
+ if session_id and api_key:
114
+ from contextsynapse.context.session_resolver import resolve_session
115
+ resolved = resolve_session(session_id, api_key)
116
+ _agent_name = resolved.agent_name
117
+ _agent_id = resolved.agent_id
118
+ _api_key = api_key.split(":", 1)[1] if ":" in api_key else ""
119
+ _conn = AIContextDBConnection(namespace=resolved.graph_namespace)
120
+
121
+ # Init team tools with thread
122
+ try:
123
+ from contextsynapse.project.team_tools import init_team
124
+ from contextsynapse.project.graph import ProjectGraph
125
+ pg = ProjectGraph(resolved.graph_namespace, connection=_conn)
126
+ init_team(resolved.graph_namespace, agent_id=_agent_id,
127
+ agent_name=_agent_name, project=pg, thread_id=resolved.thread_id)
128
+ except Exception:
129
+ pass
130
+
131
+ return {
132
+ "agent_id": resolved.agent_id,
133
+ "agent_name": resolved.agent_name,
134
+ "session_id": session_id,
135
+ "goal": resolved.goal,
136
+ "access_level": resolved.access_level,
137
+ }
138
+
139
+ # Legacy: direct namespace
140
+ _agent_name = agent_name
141
+ if connection is not None:
142
+ _conn = connection
143
+ else:
144
+ _conn = AIContextDBConnection(namespace=namespace, daemon_url=daemon_url)
145
+
146
+ result = {}
147
+ if auto_register:
148
+ agent_id, api_key_val = _ensure_registered(platform=platform)
149
+ result = {"agent_id": agent_id, "api_key": api_key_val}
150
+
151
+ return result
152
+
153
+
154
+ # =====================================================================
155
+ # Public API — delegates to Universal Tool Layer
156
+ # =====================================================================
157
+
158
+ def create_openai_tools(include_team: bool = True) -> List[Dict[str, Any]]:
159
+ """Return OpenAI-compatible tool schemas for AIContextDB.
160
+
161
+ Pass the returned list directly to openai.chat.completions.create(tools=...).
162
+ """
163
+ from contextsynapse.tools import ToolRegistry
164
+
165
+ categories = ["graph", "context", "gateway"]
166
+ if include_team:
167
+ categories.extend(["task", "workspace"])
168
+
169
+ return ToolRegistry.to_openai_schemas(categories)
170
+
171
+
172
+ def init_project(project_name: str) -> str:
173
+ """Initialize a project graph for team collaboration."""
174
+ _ensure_registered()
175
+ from contextsynapse.tools import ToolRegistry
176
+ ctx = _get_tool_context()
177
+ return ToolRegistry.dispatch("init_project", ctx, {"project_name": project_name})
178
+
179
+
180
+ def dispatch_tool_call(function_name: str, arguments: str) -> str:
181
+ """Execute a tool call returned by the OpenAI API.
182
+
183
+ Args:
184
+ function_name: The function name from tool_call.function.name
185
+ arguments: The JSON arguments from tool_call.function.arguments
186
+
187
+ Returns:
188
+ String result to send back as tool response.
189
+ """
190
+ from contextsynapse.tools import ToolRegistry
191
+
192
+ ctx = _get_tool_context()
193
+
194
+ try:
195
+ args = json.loads(arguments) if arguments else {}
196
+ except json.JSONDecodeError:
197
+ return f"Error: Invalid JSON arguments: {arguments}"
198
+
199
+ # Observe tool call for Context Relevance Gravity
200
+ try:
201
+ from contextsynapse.context.gravity import get_gravity
202
+ get_gravity().observe(ctx.agent_id or "unknown", function_name, args)
203
+ except Exception:
204
+ pass
205
+
206
+ return ToolRegistry.dispatch(function_name, ctx, args)
@@ -0,0 +1,4 @@
1
+ """Pydantic AI adapter for AIContextDB."""
2
+ from .tools import create_pydantic_ai_tools, graph_query_tool, graph_write_tool
3
+
4
+ __all__ = ["create_pydantic_ai_tools", "graph_query_tool", "graph_write_tool"]
@@ -0,0 +1,36 @@
1
+ """
2
+ Pydantic AI adapter — thin wrapper over Universal Tool Layer.
3
+
4
+ Usage:
5
+ from contextsynapse.adapters.pydantic_ai.tools import create_pydantic_ai_tools
6
+ tools = create_pydantic_ai_tools(namespace="my-project")
7
+ """
8
+
9
+ from __future__ import annotations
10
+
11
+ import json
12
+ from typing import List, Optional
13
+
14
+ from contextsynapse.tools import ToolRegistry, ToolContext
15
+ from contextsynapse.adapters._base import AIContextDBConnection
16
+
17
+
18
+ def create_pydantic_ai_tools(
19
+ namespace: str = "default",
20
+ connection: Optional[AIContextDBConnection] = None,
21
+ categories: Optional[List[str]] = None,
22
+ ) -> list:
23
+ """Create Pydantic AI-compatible tools from the Universal Tool Registry."""
24
+ conn = connection or AIContextDBConnection(namespace=namespace)
25
+ ctx = ToolContext(conn=conn, agent_id="pydantic_ai", agent_name="pydantic_ai")
26
+
27
+ cats = categories or ["graph", "context", "task"]
28
+ tools = []
29
+ for td in ToolRegistry.by_category(*cats):
30
+ def _handler(_ctx=ctx, _td=td, **kwargs):
31
+ return _td.handler(_ctx, **kwargs)
32
+
33
+ _handler.__name__ = td.name
34
+ _handler.__doc__ = td.description
35
+ tools.append(_handler)
36
+ return tools
@@ -0,0 +1,4 @@
1
+ """OpenAI Swarm / Agno adapter for AIContextDB."""
2
+ from .tools import create_swarm_tools
3
+
4
+ __all__ = ["create_swarm_tools"]
@@ -0,0 +1,44 @@
1
+ """
2
+ Swarm / Agno adapter — thin wrapper over Universal Tool Layer.
3
+
4
+ Swarm uses plain Python functions as tools.
5
+
6
+ Usage:
7
+ from contextsynapse.adapters.swarm.tools import create_swarm_tools
8
+ functions = create_swarm_tools(namespace="my-project")
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import json
14
+ from typing import List, Optional
15
+
16
+ from contextsynapse.tools import ToolRegistry, ToolContext
17
+ from contextsynapse.adapters._base import AIContextDBConnection
18
+
19
+
20
+ def create_swarm_tools(
21
+ namespace: str = "default",
22
+ connection: Optional[AIContextDBConnection] = None,
23
+ categories: Optional[List[str]] = None,
24
+ ) -> list:
25
+ """Create plain functions for Swarm/Agno from the Universal Tool Registry."""
26
+ conn = connection or AIContextDBConnection(namespace=namespace)
27
+ ctx = ToolContext(conn=conn, agent_id="swarm", agent_name="swarm")
28
+
29
+ cats = categories or ["graph", "context", "task"]
30
+ functions = []
31
+ for td in ToolRegistry.by_category(*cats):
32
+ def _fn(input_str="", _td=td, _ctx=ctx, **kwargs):
33
+ if kwargs:
34
+ return _td.handler(_ctx, **kwargs)
35
+ try:
36
+ args = json.loads(input_str) if input_str else {}
37
+ except (json.JSONDecodeError, AttributeError):
38
+ args = {_td.params[0].name: input_str} if _td.params else {}
39
+ return _td.handler(_ctx, **args)
40
+
41
+ _fn.__name__ = td.name
42
+ _fn.__doc__ = td.description
43
+ functions.append(_fn)
44
+ return functions
@@ -0,0 +1,6 @@
1
+ """
2
+ Agent Platform — task dispatch, auto-capture, notifications, profiles.
3
+ """
4
+ from .dispatcher import dispatch_goal, get_agent_profile, DEFAULT_PROFILES
5
+ from .auto_capture import capture_tool_call
6
+ from .notifications import notify_agents, get_pending_notifications
@@ -0,0 +1,80 @@
1
+ """
2
+ Conversation Auto-Capture — automatically ingests agent activity into the graph.
3
+
4
+ Every MCP tool call or API call captures:
5
+ - What the agent searched for (search queries)
6
+ - What the agent wrote (findings, decisions)
7
+ - Tool usage patterns
8
+
9
+ This runs passively — agents don't need to do anything special.
10
+ The capture happens as a side-effect of tool dispatch.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import logging
16
+ import uuid
17
+ from datetime import datetime, timezone
18
+ from typing import Any, Dict, Optional
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+
23
+ def capture_tool_call(
24
+ agent_name: str,
25
+ agent_id: str,
26
+ tool_name: str,
27
+ params: Dict[str, Any],
28
+ result: str,
29
+ namespace: str,
30
+ db=None,
31
+ ):
32
+ """Capture a tool call as a lightweight Activity node.
33
+
34
+ Only captures meaningful activity — skips orient(), my_tasks(), etc.
35
+ """
36
+ # Skip noise — only capture substantive tool calls
37
+ SKIP_TOOLS = {"orient", "my_tasks", "list_tasks", "get_agent_context",
38
+ "my_usage", "report_tokens", "get_tool_policy"}
39
+
40
+ if tool_name in SKIP_TOOLS:
41
+ return
42
+
43
+ # Skip if result is empty or error
44
+ if not result or result.startswith("Error:"):
45
+ return
46
+
47
+ # Determine activity type
48
+ if tool_name in ("search_nodes", "search", "rag_query", "rag_graph"):
49
+ activity_type = "search"
50
+ query = params.get("query", params.get("label", ""))
51
+ summary = f"Searched: {query}" if query else f"Searched graph"
52
+ elif tool_name in ("add_knowledge", "add_decision"):
53
+ activity_type = "write"
54
+ content = params.get("content", "")[:100]
55
+ summary = f"Wrote: {content}"
56
+ elif tool_name in ("add_task", "claim_task", "complete_task"):
57
+ activity_type = "task"
58
+ title = params.get("title", params.get("task_id", ""))
59
+ summary = f"Task: {tool_name.replace('_', ' ')} — {title}"
60
+ elif tool_name == "dispatch_goal":
61
+ activity_type = "dispatch"
62
+ summary = f"Dispatched goal: {params.get('goal', '')[:100]}"
63
+ else:
64
+ activity_type = "tool"
65
+ summary = f"Used {tool_name}"
66
+
67
+ # Store as lightweight provenance (not a full graph node — avoids noise)
68
+ try:
69
+ from ..context.propagation import get_propagator
70
+ get_propagator().propagate(
71
+ source_agent=agent_name or agent_id,
72
+ event_type=f"agent_{activity_type}",
73
+ content=summary,
74
+ namespace=namespace,
75
+ priority="info",
76
+ )
77
+ except Exception:
78
+ pass
79
+
80
+ logger.debug("[CAPTURE] %s: %s", agent_name, summary)
@@ -0,0 +1,299 @@
1
+ """
2
+ Agent Task Dispatcher — Auto-decompose goals and assign to agents.
3
+
4
+ Given a goal and a set of registered agents, the dispatcher:
5
+ 1. Decomposes the goal into tasks using LLM
6
+ 2. Matches tasks to agents based on profiles/capabilities
7
+ 3. Creates Task nodes assigned to specific agents
8
+ 4. Agents discover tasks via orient() or my_tasks()
9
+
10
+ Usage:
11
+ from contextsynapse.agents.dispatcher import dispatch_goal
12
+
13
+ result = dispatch_goal(
14
+ goal="Analyze our codebase for security vulnerabilities",
15
+ session_id="abc123",
16
+ graph_registry=reg,
17
+ agent_registry=agent_reg,
18
+ )
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import json
24
+ import logging
25
+ import uuid
26
+ from datetime import datetime, timezone
27
+ from typing import Any, Dict, List, Optional
28
+
29
+ logger = logging.getLogger(__name__)
30
+
31
+
32
+ # ── Agent Profiles ─────────────────────────────────────────────────────
33
+
34
+ DEFAULT_PROFILES = {
35
+ "claude": {
36
+ "strengths": ["code review", "architecture", "debugging", "detailed analysis", "safety"],
37
+ "preferred_tasks": ["review code", "analyze architecture", "find bugs", "security audit"],
38
+ "speed": "thorough",
39
+ },
40
+ "chatgpt": {
41
+ "strengths": ["research", "writing", "brainstorming", "breadth", "summarization"],
42
+ "preferred_tasks": ["research topic", "write summary", "explore options", "draft document"],
43
+ "speed": "fast",
44
+ },
45
+ "gemini": {
46
+ "strengths": ["multimodal", "data analysis", "reasoning", "math"],
47
+ "preferred_tasks": ["analyze data", "process images", "calculate", "compare"],
48
+ "speed": "fast",
49
+ },
50
+ }
51
+
52
+
53
+ def get_agent_profile(agent, registry=None) -> Dict[str, Any]:
54
+ """Get the specialization profile for an agent.
55
+
56
+ Checks agent.metadata for a custom profile, falls back to defaults
57
+ based on agent name. Optionally enriches from registry capabilities.
58
+ """
59
+ metadata = agent.metadata if hasattr(agent, 'metadata') else {}
60
+ if isinstance(metadata, str):
61
+ try:
62
+ metadata = json.loads(metadata)
63
+ except Exception:
64
+ metadata = {}
65
+
66
+ # Custom profile in metadata
67
+ if metadata.get("profile"):
68
+ profile = metadata["profile"]
69
+ else:
70
+ # Match by name
71
+ name_lower = (agent.name if hasattr(agent, 'name') else "").lower()
72
+ profile = None
73
+ for key, default_profile in DEFAULT_PROFILES.items():
74
+ if key in name_lower:
75
+ profile = dict(default_profile)
76
+ break
77
+
78
+ if not profile:
79
+ profile = {
80
+ "strengths": ["general"],
81
+ "preferred_tasks": ["any"],
82
+ "speed": "normal",
83
+ }
84
+
85
+ # Enrich from registry capabilities if available
86
+ if registry:
87
+ try:
88
+ agent_name = (agent.name if hasattr(agent, 'name') else "").lower()
89
+ agents = registry.list_agents()
90
+ for reg_agent in agents:
91
+ reg_name = reg_agent.name if hasattr(reg_agent, 'name') else (reg_agent.get("name", "") if isinstance(reg_agent, dict) else "")
92
+ if reg_name.lower() == agent_name:
93
+ caps = reg_agent.capabilities if hasattr(reg_agent, 'capabilities') else (reg_agent.get("capabilities", []) if isinstance(reg_agent, dict) else [])
94
+ if isinstance(caps, str):
95
+ caps = json.loads(caps)
96
+ profile["strengths"] = list(set(profile.get("strengths", []) + caps))
97
+ break
98
+ except Exception:
99
+ pass
100
+
101
+ return profile
102
+
103
+
104
+ # ── Goal Decomposition ────────────────────────────────────────────────
105
+
106
+ def decompose_goal(goal: str, agent_profiles: List[Dict], llm_fn=None) -> List[Dict]:
107
+ """Decompose a goal into tasks matched to agent capabilities.
108
+
109
+ Args:
110
+ goal: Natural language goal
111
+ agent_profiles: List of {"name": str, "strengths": [...]}
112
+ llm_fn: Optional LLM callable(prompt) -> str
113
+
114
+ Returns:
115
+ List of {"title": str, "description": str, "assigned_to": str, "priority": str}
116
+ """
117
+ agent_descriptions = "\n".join(
118
+ f"- {p['name']}: good at {', '.join(p.get('strengths', ['general']))}"
119
+ for p in agent_profiles
120
+ )
121
+
122
+ prompt = f"""Decompose this goal into 3-5 specific tasks and assign each to the best agent.
123
+
124
+ GOAL: {goal}
125
+
126
+ AVAILABLE AGENTS:
127
+ {agent_descriptions}
128
+
129
+ Rules:
130
+ - Each task should be assigned to the agent whose strengths best match
131
+ - Distribute work evenly — don't give everything to one agent
132
+ - Tasks should be specific and actionable
133
+ - Include a mix of research, analysis, and writing tasks
134
+
135
+ Return ONLY a valid JSON array:
136
+ [
137
+ {{"title": "task title", "description": "what to do", "assigned_to": "agent name", "priority": "high|medium|low"}},
138
+ ...
139
+ ]"""
140
+
141
+ if llm_fn:
142
+ try:
143
+ import re
144
+ response = llm_fn(prompt)
145
+ match = re.search(r'\[[\s\S]*\]', response)
146
+ if match:
147
+ return json.loads(match.group())
148
+ except Exception as e:
149
+ logger.warning("LLM decomposition failed: %s", e)
150
+
151
+ # Fallback: create one task per agent
152
+ tasks = []
153
+ for i, profile in enumerate(agent_profiles):
154
+ tasks.append({
155
+ "title": f"Research and analyze: {goal[:50]}",
156
+ "description": f"Focus on: {', '.join(profile.get('strengths', ['general'])[:2])}",
157
+ "assigned_to": profile["name"],
158
+ "priority": "high" if i == 0 else "medium",
159
+ })
160
+ return tasks
161
+
162
+
163
+ # ── Dispatch Goal ─────────────────────────────────────────────────────
164
+
165
+ def dispatch_goal(
166
+ goal: str,
167
+ session_id: str,
168
+ graph_registry=None,
169
+ agent_registry=None,
170
+ session_manager=None,
171
+ llm_fn=None,
172
+ ) -> Dict[str, Any]:
173
+ """Decompose a goal and create tasks assigned to registered agents.
174
+
175
+ Args:
176
+ goal: What needs to be accomplished
177
+ session_id: Session to create tasks in
178
+ graph_registry: GraphRegistry for graph access
179
+ agent_registry: AgentRegistry to find agents
180
+ session_manager: SessionManager for session lookup
181
+ llm_fn: Optional LLM callable
182
+
183
+ Returns:
184
+ {"tasks": [...], "agents": [...], "goal": str}
185
+ """
186
+ # Get session — tasks go to the runtime graph, not the atomic context
187
+ session = None
188
+ graph_ns = None
189
+ if session_manager:
190
+ session = session_manager.get_session(session_id)
191
+ if session:
192
+ # Use runtime_namespace for agent work (tasks, findings, actions)
193
+ graph_ns = getattr(session, 'runtime_namespace', '') or f"{session.graph_namespace}_rt"
194
+
195
+ if not graph_ns:
196
+ return {"error": "Session not found", "tasks": []}
197
+
198
+ # Get registered agents
199
+ agents = []
200
+ if agent_registry:
201
+ # Get agents assigned to this session
202
+ if session and session.config.get("assigned_agents"):
203
+ for aid in session.config["assigned_agents"]:
204
+ agent = agent_registry.get(aid)
205
+ if agent and agent.status == "active":
206
+ agents.append(agent)
207
+
208
+ # If no assigned agents, get all active agents
209
+ if not agents:
210
+ try:
211
+ all_agents = agent_registry.list_agents() if hasattr(agent_registry, 'list_agents') else []
212
+ agents = [a for a in all_agents if a.status == "active"][:5]
213
+ except Exception:
214
+ pass
215
+
216
+ if not agents:
217
+ return {"error": "No agents available", "tasks": []}
218
+
219
+ # Build profiles
220
+ agent_profiles = []
221
+ for agent in agents:
222
+ profile = get_agent_profile(agent)
223
+ profile["name"] = agent.name
224
+ profile["agent_id"] = agent.agent_id
225
+ agent_profiles.append(profile)
226
+
227
+ logger.info("[DISPATCH] Goal: %s | Agents: %s", goal[:60],
228
+ [p["name"] for p in agent_profiles])
229
+
230
+ # Decompose goal into tasks
231
+ tasks = decompose_goal(goal, agent_profiles, llm_fn=llm_fn)
232
+
233
+ # Create task nodes in the graph
234
+ created = []
235
+ if graph_registry:
236
+ db = graph_registry.get_graph(graph_ns, load_if_missing=True)
237
+ if db:
238
+ from ..core.hybrid_graph_storage import GraphNode, GraphEdge
239
+
240
+ for task in tasks:
241
+ task_id = f"task_{uuid.uuid4().hex[:12]}"
242
+ props = {
243
+ "title": task["title"],
244
+ "description": task.get("description", ""),
245
+ "assigned_to": task.get("assigned_to", ""),
246
+ "priority": task.get("priority", "medium"),
247
+ "status": "open",
248
+ "created_by": "dispatcher",
249
+ "created_at": datetime.now(timezone.utc).isoformat(),
250
+ "goal": goal[:200],
251
+ "session_id": session_id,
252
+ }
253
+ db.add_node(GraphNode(id=task_id, label="Task", properties=props))
254
+
255
+ created.append({
256
+ "task_id": task_id,
257
+ "title": task["title"],
258
+ "assigned_to": task.get("assigned_to", ""),
259
+ "priority": task.get("priority", "medium"),
260
+ })
261
+
262
+ logger.info("[DISPATCH] Created task: %s → %s", task["title"][:40], task.get("assigned_to", "?"))
263
+
264
+ # Publish all created tasks to stream for push-based delivery
265
+ try:
266
+ from ..project.task_stream import get_task_publisher
267
+ pub = get_task_publisher()
268
+ stream_tasks = [
269
+ {"task_id": t.get("task_id", t.get("id", "")),
270
+ "priority": {"critical": 3, "high": 2, "medium": 1, "low": 0}.get(t.get("priority", "medium"), 1),
271
+ "metadata": {"title": t.get("title", ""), "assigned_to": t.get("assigned_to", ""), "goal": goal}}
272
+ for t in created
273
+ ]
274
+ if stream_tasks:
275
+ pub.publish_batch(namespace=graph_ns, tasks=stream_tasks)
276
+ except Exception:
277
+ pass # stream publishing must never break goal dispatch
278
+
279
+ # Notify agents (via propagation)
280
+ try:
281
+ from ..context.propagation import get_propagator
282
+ for task in created:
283
+ get_propagator().propagate(
284
+ source_agent="dispatcher",
285
+ event_type="task_assigned",
286
+ content=f"New task: {task['title']} (priority: {task['priority']})",
287
+ namespace=graph_ns,
288
+ priority="high",
289
+ target_agent=task["assigned_to"],
290
+ )
291
+ except Exception:
292
+ pass
293
+
294
+ return {
295
+ "goal": goal,
296
+ "tasks": created,
297
+ "agents": [{"name": p["name"], "strengths": p.get("strengths", [])} for p in agent_profiles],
298
+ "session_id": session_id,
299
+ }