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,116 @@
1
+ """ConnectorRegistry — YAML-driven connector auto-instantiation.
2
+
3
+ Loads connector configurations from YAML files and creates connector
4
+ instances using registered connector classes.
5
+
6
+ Usage:
7
+ reg = ConnectorRegistry()
8
+ reg.register_connector_class("amfi_nav", AmfiNavConnector)
9
+ reg.load_from_directory("config/connectors/")
10
+ connectors = reg.create_all()
11
+ """
12
+ from __future__ import annotations
13
+
14
+ import logging
15
+ import os
16
+ from pathlib import Path
17
+ from typing import Any, Dict, List, Optional, Type
18
+
19
+ import yaml
20
+
21
+ from .base import BaseConnector, ConnectorConfig
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ class ConnectorRegistry:
27
+ """Loads YAML configs and instantiates connectors by type."""
28
+
29
+ def __init__(self):
30
+ self._classes: Dict[str, Type[BaseConnector]] = {}
31
+ self._configs: List[ConnectorConfig] = []
32
+
33
+ @property
34
+ def configs(self) -> List[ConnectorConfig]:
35
+ return list(self._configs)
36
+
37
+ def register_connector_class(
38
+ self, connector_type: str, cls: Type[BaseConnector]
39
+ ) -> None:
40
+ """Register a connector class for a given type string."""
41
+ self._classes[connector_type] = cls
42
+
43
+ def get_connector_class(self, connector_type: str) -> Type[BaseConnector]:
44
+ """Get the registered class for a connector type."""
45
+ if connector_type not in self._classes:
46
+ raise KeyError(
47
+ f"Unknown connector type: {connector_type!r}. "
48
+ f"Registered: {list(self._classes.keys())}"
49
+ )
50
+ return self._classes[connector_type]
51
+
52
+ def load_from_yaml(self, path: str) -> ConnectorConfig:
53
+ """Load and validate a single YAML connector config."""
54
+ with open(path, "r") as f:
55
+ data = yaml.safe_load(f) or {}
56
+
57
+ if not data.get("name"):
58
+ raise ValueError(
59
+ f"Connector config {path} missing required field: name"
60
+ )
61
+ if not data.get("connector_type"):
62
+ raise ValueError(
63
+ f"Connector config {path} missing required field: connector_type"
64
+ )
65
+
66
+ config = ConnectorConfig(
67
+ connector_id=data.get("connector_id", ""),
68
+ connector_type=data["connector_type"],
69
+ name=data["name"],
70
+ target_context_id=data.get("target_context_id", ""),
71
+ pipeline=data.get("pipeline", "builtin:knowledge-graph"),
72
+ llm_model=data.get("llm_model", ""),
73
+ embedding_model=data.get("embedding_model", ""),
74
+ poll_interval_minutes=data.get("poll_interval_minutes", 5),
75
+ active=data.get("active", True),
76
+ config=data.get("config", {}),
77
+ )
78
+ self._configs.append(config)
79
+ return config
80
+
81
+ def load_from_directory(self, config_dir: str) -> int:
82
+ """Load all YAML configs from a directory. Returns count loaded."""
83
+ loaded = 0
84
+ config_path = Path(config_dir)
85
+ if not config_path.is_dir():
86
+ logger.warning("[REGISTRY] Config dir not found: %s", config_dir)
87
+ return 0
88
+
89
+ for f in sorted(config_path.iterdir()):
90
+ if f.suffix not in (".yaml", ".yml"):
91
+ continue
92
+ try:
93
+ self.load_from_yaml(str(f))
94
+ loaded += 1
95
+ except Exception as e:
96
+ logger.warning("[REGISTRY] Skipping %s: %s", f.name, e)
97
+ return loaded
98
+
99
+ def create_connector(self, config: ConnectorConfig) -> BaseConnector:
100
+ """Create a connector instance from a config."""
101
+ cls = self.get_connector_class(config.connector_type)
102
+ return cls(config)
103
+
104
+ def create_all(self) -> List[BaseConnector]:
105
+ """Create connector instances for all loaded configs."""
106
+ connectors = []
107
+ for config in self._configs:
108
+ try:
109
+ connector = self.create_connector(config)
110
+ connectors.append(connector)
111
+ except KeyError:
112
+ logger.warning(
113
+ "[REGISTRY] No class registered for type %r, skipping %s",
114
+ config.connector_type, config.name,
115
+ )
116
+ return connectors
@@ -0,0 +1,87 @@
1
+ """ConnectorScheduler — runs connectors on their configured intervals.
2
+
3
+ Usage:
4
+ scheduler = ConnectorScheduler(registry, manager)
5
+ results = scheduler.run_due() # runs only due connectors
6
+ results = scheduler.run_all() # runs all connectors
7
+ """
8
+ from __future__ import annotations
9
+
10
+ import logging
11
+ import time
12
+ from typing import Dict, List
13
+
14
+ from .base import ConnectorManager
15
+ from .registry import ConnectorRegistry
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ class ConnectorScheduler:
21
+ """Runs connectors based on their poll_interval_minutes."""
22
+
23
+ def __init__(self, registry: ConnectorRegistry, manager: ConnectorManager):
24
+ self._registry = registry
25
+ self._manager = manager
26
+ self._last_run: Dict[str, float] = {} # connector_id → timestamp
27
+ self._intervals: Dict[str, float] = {} # connector_id → seconds
28
+
29
+ # Initialize intervals from registry configs
30
+ for config in registry.configs:
31
+ cid = config.connector_id or config.name
32
+ self._intervals[cid] = config.poll_interval_minutes * 60
33
+
34
+ # Also pull intervals directly from manager's registered connectors
35
+ # (when connectors are registered manually without going through registry YAML load)
36
+ for cid, connector in manager._connectors.items():
37
+ if cid not in self._intervals:
38
+ self._intervals[cid] = connector.config.poll_interval_minutes * 60
39
+
40
+ # Seed last_run=now for connectors with interval > 0 so they don't
41
+ # all fire immediately on first run_due() call. Connectors with
42
+ # interval==0 are left unseeded so they always fire immediately.
43
+ now = time.time()
44
+ for cid, interval in self._intervals.items():
45
+ if interval > 0 and cid not in self._last_run:
46
+ self._last_run[cid] = now
47
+
48
+ def run_due(self) -> Dict[str, int]:
49
+ """Run connectors whose interval has elapsed. Returns {id: doc_count}."""
50
+ now = time.time()
51
+ results = {}
52
+
53
+ for cid, connector in self._manager._connectors.items():
54
+ interval = self._intervals.get(cid, 300) # default 5 min
55
+ last = self._last_run.get(cid, 0)
56
+
57
+ if (now - last) >= interval:
58
+ docs = self._manager.poll_one(cid)
59
+ results[cid] = len(docs)
60
+ self._last_run[cid] = now
61
+ if docs:
62
+ logger.info("[SCHEDULER] %s: %d new docs", cid, len(docs))
63
+
64
+ return results
65
+
66
+ def run_all(self) -> Dict[str, int]:
67
+ """Run all connectors regardless of schedule."""
68
+ results = self._manager.poll_all()
69
+ now = time.time()
70
+ for cid in results:
71
+ self._last_run[cid] = now
72
+ return results
73
+
74
+ def get_status(self) -> List[Dict]:
75
+ """Get status of all connectors."""
76
+ statuses = self._manager.list_status()
77
+ result = []
78
+ for s in statuses:
79
+ d = s.to_dict()
80
+ # Enrich with connector name from config
81
+ connector = self._manager._connectors.get(s.connector_id)
82
+ if connector:
83
+ d["name"] = connector.config.name
84
+ d["last_scheduled_run"] = self._last_run.get(s.connector_id)
85
+ d["interval_minutes"] = self._intervals.get(s.connector_id, 300) / 60
86
+ result.append(d)
87
+ return result
@@ -0,0 +1,360 @@
1
+ """Universal Connectors -- plug-and-play data sources for ContextCore.
2
+
3
+ 5 built-in connectors that any vertical can use:
4
+ 1. RSS/Atom feed connector
5
+ 2. REST API connector (any JSON API)
6
+ 3. Web scraper connector (URL -> passages)
7
+ 4. File watcher connector (local directory)
8
+ 5. Webhook receiver connector (push-based)
9
+
10
+ Each connector implements collect() -> List[dict] that returns
11
+ items ready for the StorageRouter.
12
+
13
+ Usage:
14
+ from contextsynapse.connectors.universal import RSSConnector, APIConnector
15
+
16
+ rss = RSSConnector(feeds=["https://news.ycombinator.com/rss"])
17
+ items = await rss.collect()
18
+ engine.ingest(items)
19
+ """
20
+ from __future__ import annotations
21
+
22
+ import hashlib
23
+ import logging
24
+ import os
25
+ import time
26
+ from abc import ABC, abstractmethod
27
+ from datetime import datetime, timezone
28
+ from pathlib import Path
29
+ from typing import Any, Dict, List, Optional
30
+ from dataclasses import dataclass, field
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+
35
+ @dataclass
36
+ class ConnectorConfig:
37
+ """Configuration for a connector."""
38
+ name: str = ""
39
+ interval_seconds: int = 300
40
+ max_items: int = 100
41
+ namespace: str = "default"
42
+ metadata: Dict[str, Any] = field(default_factory=dict)
43
+
44
+
45
+ class UniversalConnector(ABC):
46
+ """Base class for universal connectors.
47
+
48
+ Subclasses implement collect() which returns items
49
+ ready for engine.ingest().
50
+ """
51
+
52
+ def __init__(self, config: ConnectorConfig = None):
53
+ self.config = config or ConnectorConfig()
54
+ self._last_poll = 0
55
+ self._seen_ids: set = set()
56
+
57
+ @property
58
+ @abstractmethod
59
+ def connector_type(self) -> str:
60
+ """e.g. 'rss', 'api', 'scraper', 'file', 'webhook'"""
61
+
62
+ @abstractmethod
63
+ async def collect(self) -> List[Dict[str, Any]]:
64
+ """Collect data from the source. Returns items for engine.ingest()."""
65
+
66
+ async def health_check(self) -> Dict[str, Any]:
67
+ return {"healthy": True, "type": self.connector_type, "name": self.config.name}
68
+
69
+ def _dedup_id(self, content: str) -> str:
70
+ return hashlib.md5(content.encode()).hexdigest()[:12]
71
+
72
+
73
+ class RSSConnector(UniversalConnector):
74
+ """RSS/Atom feed connector. Polls feeds and returns articles as Document + Passage items."""
75
+
76
+ connector_type = "rss"
77
+
78
+ def __init__(self, feeds: List[str], config: ConnectorConfig = None):
79
+ super().__init__(config)
80
+ self.feeds = feeds
81
+
82
+ async def collect(self) -> List[Dict[str, Any]]:
83
+ try:
84
+ import feedparser
85
+ except ImportError:
86
+ logger.error("feedparser not installed: pip install feedparser")
87
+ return []
88
+
89
+ items = []
90
+ for feed_url in self.feeds:
91
+ try:
92
+ feed = feedparser.parse(feed_url)
93
+ for entry in feed.entries[:self.config.max_items]:
94
+ entry_id = self._dedup_id(entry.get("link", entry.get("title", "")))
95
+ if entry_id in self._seen_ids:
96
+ continue
97
+ self._seen_ids.add(entry_id)
98
+
99
+ doc_id = f"rss_{entry_id}"
100
+ title = entry.get("title", "")
101
+ summary = entry.get("summary", entry.get("description", ""))
102
+ link = entry.get("link", "")
103
+ published = entry.get("published", "")
104
+
105
+ # Document node
106
+ items.append({
107
+ "id": doc_id, "type": "Document",
108
+ "properties": {
109
+ "title": title, "url": link,
110
+ "date": published, "source": "rss",
111
+ "feed_url": feed_url,
112
+ },
113
+ })
114
+
115
+ # Passage from summary
116
+ if summary and len(summary) > 20:
117
+ items.append({
118
+ "id": f"p_{entry_id}", "type": "Passage",
119
+ "properties": {
120
+ "text": f"{title}. {summary}",
121
+ "doc_id": doc_id, "position": 0,
122
+ },
123
+ })
124
+
125
+ except Exception as e:
126
+ logger.warning("RSS feed error %s: %s", feed_url, e)
127
+
128
+ return items
129
+
130
+
131
+ class APIConnector(UniversalConnector):
132
+ """REST API connector. Polls any JSON API and maps response to items."""
133
+
134
+ connector_type = "api"
135
+
136
+ def __init__(self, url: str, headers: Dict[str, str] = None,
137
+ item_path: str = "", item_type: str = "Document",
138
+ text_field: str = "content", id_field: str = "id",
139
+ config: ConnectorConfig = None):
140
+ super().__init__(config)
141
+ self.url = url
142
+ self.headers = headers or {}
143
+ self.item_path = item_path # JSON path to items array (e.g. "data.articles")
144
+ self.item_type = item_type
145
+ self.text_field = text_field
146
+ self.id_field = id_field
147
+
148
+ async def collect(self) -> List[Dict[str, Any]]:
149
+ try:
150
+ import aiohttp
151
+ except ImportError:
152
+ # Fallback to urllib
153
+ import urllib.request
154
+ import json
155
+ req = urllib.request.Request(self.url, headers=self.headers)
156
+ with urllib.request.urlopen(req, timeout=30) as resp:
157
+ data = json.loads(resp.read())
158
+ return self._parse_response(data)
159
+
160
+ async with aiohttp.ClientSession() as session:
161
+ async with session.get(self.url, headers=self.headers, timeout=aiohttp.ClientTimeout(total=30)) as resp:
162
+ data = await resp.json()
163
+ return self._parse_response(data)
164
+
165
+ def _parse_response(self, data: Any) -> List[Dict[str, Any]]:
166
+ # Navigate to item_path
167
+ items_raw = data
168
+ if self.item_path:
169
+ for key in self.item_path.split("."):
170
+ if isinstance(items_raw, dict):
171
+ items_raw = items_raw.get(key, [])
172
+ else:
173
+ break
174
+
175
+ if not isinstance(items_raw, list):
176
+ items_raw = [items_raw]
177
+
178
+ items = []
179
+ for raw in items_raw[:self.config.max_items]:
180
+ if not isinstance(raw, dict):
181
+ continue
182
+ item_id = str(raw.get(self.id_field, self._dedup_id(str(raw))))
183
+ text = str(raw.get(self.text_field, ""))
184
+
185
+ items.append({
186
+ "id": f"api_{item_id}", "type": self.item_type,
187
+ "properties": {"text": text, "source": "api", "api_url": self.url, **raw},
188
+ })
189
+ return items
190
+
191
+
192
+ class WebScraperConnector(UniversalConnector):
193
+ """Web scraper connector. Fetches a URL, extracts text, returns as passages."""
194
+
195
+ connector_type = "scraper"
196
+
197
+ def __init__(self, urls: List[str], config: ConnectorConfig = None):
198
+ super().__init__(config)
199
+ self.urls = urls
200
+
201
+ async def collect(self) -> List[Dict[str, Any]]:
202
+ items = []
203
+ for url in self.urls:
204
+ try:
205
+ import urllib.request
206
+ req = urllib.request.Request(url, headers={"User-Agent": "ContextCore/1.0"})
207
+ with urllib.request.urlopen(req, timeout=30) as resp:
208
+ html = resp.read().decode("utf-8", errors="ignore")
209
+
210
+ # Extract text (try trafilatura, fallback to regex)
211
+ text = ""
212
+ try:
213
+ import trafilatura
214
+ text = trafilatura.extract(html) or ""
215
+ except ImportError:
216
+ import re
217
+ text = re.sub(r"<[^>]+>", " ", html)
218
+ text = re.sub(r"\s+", " ", text).strip()
219
+
220
+ if not text or len(text) < 50:
221
+ continue
222
+
223
+ url_id = self._dedup_id(url)
224
+ doc_id = f"web_{url_id}"
225
+
226
+ # Extract title
227
+ title = ""
228
+ import re
229
+ title_match = re.search(r"<title>(.*?)</title>", html, re.IGNORECASE | re.DOTALL)
230
+ if title_match:
231
+ title = title_match.group(1).strip()
232
+
233
+ items.append({
234
+ "id": doc_id, "type": "Document",
235
+ "properties": {"title": title or url, "url": url, "source": "web"},
236
+ })
237
+
238
+ # Chunk into passages (~500 chars each)
239
+ chunks = [text[i:i+500] for i in range(0, len(text), 450)]
240
+ for idx, chunk in enumerate(chunks[:20]): # max 20 passages per page
241
+ items.append({
242
+ "id": f"p_{url_id}_{idx}", "type": "Passage",
243
+ "properties": {"text": chunk.strip(), "doc_id": doc_id, "position": idx},
244
+ })
245
+
246
+ except Exception as e:
247
+ logger.warning("Scrape error %s: %s", url, e)
248
+
249
+ return items
250
+
251
+
252
+ class FileWatcherConnector(UniversalConnector):
253
+ """File watcher connector. Monitors a directory for new/changed files."""
254
+
255
+ connector_type = "file"
256
+
257
+ def __init__(self, directory: str, extensions: List[str] = None,
258
+ config: ConnectorConfig = None):
259
+ super().__init__(config)
260
+ self.directory = Path(directory)
261
+ self.extensions = set(extensions or [".txt", ".md", ".csv", ".json"])
262
+ self._file_mtimes: Dict[str, float] = {}
263
+
264
+ async def collect(self) -> List[Dict[str, Any]]:
265
+ if not self.directory.exists():
266
+ return []
267
+
268
+ items = []
269
+ for fpath in self.directory.rglob("*"):
270
+ if not fpath.is_file():
271
+ continue
272
+ if fpath.suffix.lower() not in self.extensions:
273
+ continue
274
+
275
+ mtime = fpath.stat().st_mtime
276
+ str_path = str(fpath)
277
+ if str_path in self._file_mtimes and self._file_mtimes[str_path] >= mtime:
278
+ continue # unchanged
279
+ self._file_mtimes[str_path] = mtime
280
+
281
+ try:
282
+ content = fpath.read_text(encoding="utf-8", errors="ignore")
283
+ if len(content) < 10:
284
+ continue
285
+
286
+ file_id = self._dedup_id(str_path)
287
+ doc_id = f"file_{file_id}"
288
+
289
+ items.append({
290
+ "id": doc_id, "type": "Document",
291
+ "properties": {
292
+ "title": fpath.name, "url": str(fpath),
293
+ "source": "file", "file_path": str_path,
294
+ "file_size": fpath.stat().st_size,
295
+ },
296
+ })
297
+
298
+ # Chunk into passages
299
+ chunks = [content[i:i+500] for i in range(0, len(content), 450)]
300
+ for idx, chunk in enumerate(chunks[:50]):
301
+ items.append({
302
+ "id": f"p_{file_id}_{idx}", "type": "Passage",
303
+ "properties": {"text": chunk.strip(), "doc_id": doc_id, "position": idx},
304
+ })
305
+
306
+ except Exception as e:
307
+ logger.warning("File read error %s: %s", fpath, e)
308
+
309
+ return items
310
+
311
+
312
+ class WebhookConnector(UniversalConnector):
313
+ """Webhook receiver connector. Receives push data via HTTP POST.
314
+
315
+ Call webhook.receive(data) when a webhook arrives.
316
+ collect() returns buffered items.
317
+ """
318
+
319
+ connector_type = "webhook"
320
+
321
+ def __init__(self, item_type: str = "Document", text_field: str = "content",
322
+ config: ConnectorConfig = None):
323
+ super().__init__(config)
324
+ self.item_type = item_type
325
+ self.text_field = text_field
326
+ self._buffer: List[Dict] = []
327
+
328
+ def receive(self, data: Dict[str, Any]) -> str:
329
+ """Buffer an incoming webhook payload. Returns item ID."""
330
+ item_id = f"wh_{self._dedup_id(str(data))}"
331
+ text = str(data.get(self.text_field, data.get("text", data.get("message", ""))))
332
+ self._buffer.append({
333
+ "id": item_id, "type": self.item_type,
334
+ "properties": {"text": text, "source": "webhook", **data},
335
+ })
336
+ return item_id
337
+
338
+ async def collect(self) -> List[Dict[str, Any]]:
339
+ """Return and clear the buffer."""
340
+ items = self._buffer[:self.config.max_items]
341
+ self._buffer = self._buffer[self.config.max_items:]
342
+ return items
343
+
344
+
345
+ # ── Connector Registry ──
346
+
347
+ BUILTIN_CONNECTORS = {
348
+ "rss": RSSConnector,
349
+ "api": APIConnector,
350
+ "scraper": WebScraperConnector,
351
+ "file": FileWatcherConnector,
352
+ "webhook": WebhookConnector,
353
+ }
354
+
355
+ def create_connector(connector_type: str, **kwargs) -> UniversalConnector:
356
+ """Factory to create a connector by type."""
357
+ cls = BUILTIN_CONNECTORS.get(connector_type)
358
+ if not cls:
359
+ raise ValueError(f"Unknown connector type: {connector_type}. Available: {list(BUILTIN_CONNECTORS.keys())}")
360
+ return cls(**kwargs)
@@ -0,0 +1,96 @@
1
+ """
2
+ Context-as-a-Service — Build, share, and export structured context for LLMs.
3
+
4
+ Usage:
5
+ from contextsynapse.context import ContextHub, AgentRegistry, ContextSessionManager
6
+
7
+ # Register an agent
8
+ registry = AgentRegistry()
9
+ agent, api_key = registry.register("my-agent", role="researcher")
10
+
11
+ # Create a shared session
12
+ sessions = ContextSessionManager(graph_registry=my_registry)
13
+ session = sessions.create_session("project-alpha", owner_agent_id=agent.agent_id)
14
+
15
+ # Build context
16
+ hub = ContextHub(system_prompt="You are a graph analyst.")
17
+ hub.add_text("Some background", role="background")
18
+ messages = hub.to_messages()
19
+ """
20
+
21
+ # Only import the most commonly used items eagerly
22
+ from .hub import ContextHub, ContextItem, ContextRole, ContextFormat, Sensitivity, SlotConfig
23
+
24
+
25
+ def __getattr__(name):
26
+ """Lazy import for less commonly used classes."""
27
+ _lazy_imports = {
28
+ "AgentIdentity": ".agents",
29
+ "AgentRegistry": ".agents",
30
+ "ProvenanceRecord": ".agents",
31
+ "ContextSession": ".session",
32
+ "ContextSessionManager": ".session",
33
+ "Context": ".context_manager",
34
+ "ContextManager": ".context_manager",
35
+ "BlobStore": ".blob",
36
+ "UnifiedIngestor": ".ingest",
37
+ "DocumentProcessor": ".document_processor",
38
+ "ContextEvent": ".pubsub",
39
+ "PubSubHub": ".pubsub",
40
+ "pubsub_hub": ".pubsub",
41
+ "SessionVectorStore": ".vector_integration",
42
+ "ContextScoper": ".scoping",
43
+ "ScopingConfig": ".scoping",
44
+ "ConversationStore": ".conversation",
45
+ "Conversation": ".conversation",
46
+ "ConversationMessage": ".conversation",
47
+ "EmbeddingHooks": ".embedding_hooks",
48
+ "HybridSync": ".sync",
49
+ "CompressionConfig": ".compression",
50
+ "CompressionTier": ".compression",
51
+ "InteractionGraphifier": ".interaction_graphifier",
52
+ "GraphifyResult": ".interaction_graphifier",
53
+ "SessionGraphBuilder": ".session_graph",
54
+ "AgentMemory": ".agent_memory",
55
+ }
56
+ if name in _lazy_imports:
57
+ import importlib
58
+ module = importlib.import_module(_lazy_imports[name], __package__)
59
+ return getattr(module, name)
60
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
61
+
62
+
63
+ __all__ = [
64
+ # Hub (original)
65
+ "ContextHub", "ContextItem", "ContextRole", "ContextFormat", "Sensitivity",
66
+ # Agents
67
+ "AgentIdentity", "AgentRegistry", "ProvenanceRecord",
68
+ # Sessions
69
+ "ContextSession", "ContextSessionManager",
70
+ # Contexts (first-class)
71
+ "Context", "ContextManager",
72
+ # Storage
73
+ "BlobStore",
74
+ # Ingestion
75
+ "UnifiedIngestor",
76
+ # Document processing
77
+ "DocumentProcessor",
78
+ # PubSub
79
+ "ContextEvent", "PubSubHub", "pubsub_hub",
80
+ # Vector
81
+ "SessionVectorStore",
82
+ # Scoping (Phase 2)
83
+ "ContextScoper", "ScopingConfig",
84
+ # Conversations (Phase 2)
85
+ "ConversationStore", "Conversation", "ConversationMessage",
86
+ # Embedding hooks (Phase 2)
87
+ "EmbeddingHooks",
88
+ # Sync (Phase 2)
89
+ "HybridSync",
90
+ # Compression & Slots (Phase 3)
91
+ "CompressionConfig", "CompressionTier", "SlotConfig",
92
+ # Session Graph (unified knowledge + conversation layer)
93
+ "InteractionGraphifier", "GraphifyResult", "SessionGraphBuilder",
94
+ # Agent Memory
95
+ "AgentMemory",
96
+ ]
@@ -0,0 +1,4 @@
1
+ """Allow running the context CLI via: python -m contextsynapse.context"""
2
+ from .cli import main
3
+
4
+ main()