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,25 @@
1
+ {
2
+ "name": "TOI Politics & Economy",
3
+ "description": "Indian political and economic news from Times of India",
4
+ "context_type": "knowledge_base",
5
+ "sensitivity": "public",
6
+ "tags": ["news", "india", "politics"],
7
+ "pipeline": {
8
+ "template_id": "builtin:smart-article",
9
+ "source_url": "https://timesofindia.indiatimes.com/",
10
+ "max_pages": 5,
11
+ "schema_id": "news_article",
12
+ "schema_mode": "schema_plus"
13
+ },
14
+ "filters": {
15
+ "keyword_exclude": ["cricket", "bollywood", "horoscope", "recipe"],
16
+ "keyword_include": ["politics", "economy", "policy", "parliament", "budget", "RBI"],
17
+ "semantic_rules": [
18
+ {"description": "Indian government policy decisions and legislation", "threshold": 0.7},
19
+ {"description": "Economic reforms, GDP, inflation, and RBI monetary policy", "threshold": 0.6},
20
+ {"description": "Elections, political parties, and campaign news", "threshold": 0.65}
21
+ ],
22
+ "semantic_mode": "or"
23
+ },
24
+ "schedule": {"trigger_type": "scheduled", "interval_minutes": 60}
25
+ }
@@ -0,0 +1,453 @@
1
+ """
2
+ Database Configuration Manager
3
+
4
+ Centralized configuration system similar to PostgreSQL (postgresql.conf),
5
+ MySQL (my.cnf), MongoDB (mongod.conf), etc.
6
+
7
+ Supports:
8
+ - Performance tuning
9
+ - Storage configuration
10
+ - Connection settings
11
+ - Logging configuration
12
+ - Feature flags
13
+ """
14
+
15
+ import json
16
+ import yaml
17
+ import logging
18
+ from pathlib import Path
19
+ from typing import Dict, Any, Optional, Union
20
+ from dataclasses import dataclass, asdict
21
+ from enum import Enum
22
+
23
+ logger = logging.getLogger(__name__)
24
+
25
+
26
+ class ConfigFormat(Enum):
27
+ """Supported configuration formats."""
28
+ YAML = "yaml"
29
+ JSON = "json"
30
+ INI = "ini"
31
+
32
+
33
+ @dataclass
34
+ class PerformanceConfig:
35
+ """Performance tuning parameters."""
36
+ # Graph Database Settings (moved from config/config.yaml)
37
+ default_engine: str = "csr" # Graph engine: csr (NetworkX disabled - CSR-only mode)
38
+ auto_index: bool = True # Enable automatic indexing
39
+ cache_size: int = 1000 # Cache size (number of items)
40
+
41
+ # Graph operations
42
+ max_nodes_in_memory: int = 1000000 # Max nodes before spilling to disk
43
+ max_edges_in_memory: int = 5000000 # Max edges before spilling to disk
44
+ cache_size_mb: int = 512 # Cache size in MB
45
+ enable_query_cache: bool = True # Enable query result caching
46
+
47
+ # CSR settings
48
+ csr_auto_switch_threshold: int = 1000 # Switch to CSR at this node count
49
+ csr_enabled: bool = True # Enable CSR storage
50
+
51
+ # Buffer settings (for delayed block updates)
52
+ buffer_enabled: bool = True # Enable buffer manager for batch writes
53
+ buffer_type: str = "local" # Buffer backend: local, file, redis, sqlite, duckdb, lmdb
54
+ buffer_max_size: int = 1000 # Max records before auto-flush
55
+ buffer_flush_interval: float = 2.0 # Seconds between auto-flushes (delayed block update)
56
+ buffer_batch_size: int = 100 # Records per batch when flushing
57
+ buffer_auto_flush: bool = True # Enable automatic flushing
58
+ buffer_flush_threshold: float = 0.7 # Flush when buffer reaches 70% capacity (0.0-1.0)
59
+ buffer_threshold_flush_enabled: bool = True # Enable threshold-based flushing
60
+
61
+ # Vector operations
62
+ vector_batch_size: int = 1000 # Batch size for vector operations
63
+ vector_index_type: str = "flat" # FAISS index type: flat, ivf, hnsw
64
+
65
+ # Parallel processing
66
+ max_workers: int = 4 # Max parallel workers
67
+ enable_parallel_queries: bool = True # Enable parallel query execution
68
+
69
+ # Memory management
70
+ gc_threshold: int = 10000 # Garbage collection threshold
71
+ enable_auto_gc: bool = True # Automatic garbage collection
72
+
73
+ # WAL (Write-Ahead Logging) Configuration - Neo4j-level performance
74
+ wal_enabled: bool = True # Enable WAL for fast writes (Neo4j-style)
75
+ wal_dir: str = "./contextcore_wal" # WAL directory
76
+ wal_max_size_mb: int = 100 # Max WAL size before rotation (MB)
77
+ wal_checkpoint_interval: int = 1000 # Checkpoint every N operations
78
+ wal_sync_interval: float = 1.0 # Sync to disk every N seconds
79
+ wal_compression: bool = True # Enable WAL compression
80
+ wal_background_flush: bool = True # Background flush to main graph file
81
+
82
+ # Persistence Performance Optimization
83
+ persistence_mode: str = "wal" # Options: "wal" (fast, recommended), "direct" (fallback)
84
+ background_save_threshold: int = 10000 # Use background save for graphs > N nodes
85
+ immediate_persistence: bool = True # Neo4j-style immediate persistence
86
+
87
+
88
+ @dataclass
89
+ class StorageConfig:
90
+ """Storage configuration."""
91
+ # Storage strategy
92
+ storage_strategy: str = "single_file" # Options: "single_file" (HDF5), "multi_file_optimized" (format-specific)
93
+ storage_format: str = "single_file" # Deprecated: use storage_strategy instead
94
+ storage_type: str = "hdf5" # json, hdf5, parquet (default: hdf5 for single-file)
95
+
96
+ # Compression
97
+ compression_enabled: bool = True
98
+ compression_level: int = 6 # 0-9, higher = more compression
99
+
100
+ # Persistence
101
+ auto_save: bool = True # Auto-save on changes
102
+ auto_save_interval: int = 300 # Auto-save interval in seconds
103
+ save_on_shutdown: bool = True # Save on graceful shutdown
104
+
105
+ # Backup
106
+ backup_enabled: bool = True
107
+ backup_retention_days: int = 30 # Keep backups for N days
108
+ backup_location: str = "contextcore_data/backups"
109
+
110
+ # Node properties
111
+ node_properties_format: str = "parquet" # json, parquet
112
+ node_properties_compression: str = "snappy" # snappy, gzip, lz4
113
+
114
+ # CSR storage
115
+ csr_save_enabled: bool = True
116
+ csr_load_priority: bool = True # Try CSR first on load
117
+
118
+
119
+ @dataclass
120
+ class ConnectionConfig:
121
+ """Connection and API settings."""
122
+ # API server
123
+ api_host: str = "0.0.0.0"
124
+ api_port: int = 8000
125
+ api_workers: int = 1 # Single process — agents connect from their own platforms
126
+
127
+ # Timeouts
128
+ request_timeout: int = 300 # Request timeout in seconds
129
+ session_timeout: int = 3600 # Session timeout in seconds
130
+
131
+ # Rate limiting
132
+ rate_limit_enabled: bool = False
133
+ rate_limit_per_minute: int = 1000
134
+
135
+ # CORS
136
+ cors_enabled: bool = True
137
+ cors_origins: list = None # None = allow all
138
+
139
+ def __post_init__(self):
140
+ if self.cors_origins is None:
141
+ self.cors_origins = ["*"]
142
+
143
+
144
+ @dataclass
145
+ class LoggingConfig:
146
+ """Logging configuration."""
147
+ # Log levels
148
+ log_level: str = "INFO" # DEBUG, INFO, WARNING, ERROR, CRITICAL
149
+ log_file: Optional[str] = None # None = console only
150
+ log_format: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
151
+ log_date_format: str = "%Y-%m-%d %H:%M:%S"
152
+
153
+ # Log rotation
154
+ log_rotation_enabled: bool = True
155
+ log_max_bytes: int = 10485760 # 10 MB
156
+ log_backup_count: int = 5
157
+
158
+ # Component-specific logging
159
+ log_queries: bool = True # Log all queries
160
+ log_performance: bool = False # Log performance metrics
161
+ log_storage_ops: bool = False # Log storage operations
162
+
163
+
164
+ @dataclass
165
+ class SecurityConfig:
166
+ """Security settings."""
167
+ # Authentication
168
+ auth_enabled: bool = False
169
+ auth_method: str = "token" # token, oauth, basic
170
+
171
+ # Encryption
172
+ encryption_enabled: bool = False
173
+ encryption_key: Optional[str] = None
174
+
175
+ # Access control
176
+ access_control_enabled: bool = False
177
+ default_role: str = "user" # admin, user, readonly
178
+
179
+
180
+ @dataclass
181
+ class TraceabilityConfig:
182
+ """Traceability/Blockchain configuration."""
183
+ enabled: bool = True # Enable blockchain/traceability layer
184
+ batch_size: int = 100 # Commit Merkle root every N operations
185
+ auto_commit: bool = True # Auto-commit batches
186
+ verify_on_read: bool = False # Verify integrity on read (performance impact)
187
+ persistence_enabled: bool = True # Persist blockchain to disk
188
+
189
+
190
+ @dataclass
191
+ class FeatureFlags:
192
+ """Feature flags."""
193
+ # Experimental features
194
+ enable_temporal_queries: bool = True # Enable time-travel queries
195
+ enable_distributed_mode: bool = False
196
+ enable_replication: bool = False
197
+
198
+ # Advanced features
199
+ enable_full_text_search: bool = True
200
+ enable_vector_search: bool = True
201
+ enable_graph_algorithms: bool = True
202
+
203
+ # Performance features
204
+ enable_query_optimizer: bool = True
205
+ enable_index_hints: bool = True
206
+
207
+
208
+ @dataclass
209
+ class DatabaseConfig:
210
+ """Complete database configuration."""
211
+ # Database identity
212
+ database_name: str = "contextsynapse"
213
+ database_version: str = "1.0.0"
214
+
215
+ # Configuration sections
216
+ performance: PerformanceConfig = None
217
+ storage: StorageConfig = None
218
+ connection: ConnectionConfig = None
219
+ logging: LoggingConfig = None
220
+ security: SecurityConfig = None
221
+ features: FeatureFlags = None
222
+ traceability: TraceabilityConfig = None
223
+
224
+ def __post_init__(self):
225
+ if self.performance is None:
226
+ self.performance = PerformanceConfig()
227
+ if self.storage is None:
228
+ self.storage = StorageConfig()
229
+ if self.connection is None:
230
+ self.connection = ConnectionConfig()
231
+ if self.logging is None:
232
+ self.logging = LoggingConfig()
233
+ if self.security is None:
234
+ self.security = SecurityConfig()
235
+ if self.features is None:
236
+ self.features = FeatureFlags()
237
+ if self.traceability is None:
238
+ self.traceability = TraceabilityConfig()
239
+
240
+
241
+ class DatabaseConfigManager:
242
+ """Manages database configuration files."""
243
+
244
+ DEFAULT_CONFIG_FILE = "contextsynapse.conf"
245
+ DEFAULT_CONFIG_DIR = Path("contextcore_data/config")
246
+
247
+ def __init__(self, config_file: Optional[Union[str, Path]] = None):
248
+ """
249
+ Initialize configuration manager.
250
+
251
+ Args:
252
+ config_file: Path to configuration file (default: config/core/database.yaml or contextsynapse.conf)
253
+ """
254
+ if config_file is None:
255
+ # Try multiple locations (new structure first, then legacy fallbacks)
256
+ possible_locations = [
257
+ Path("config/core/database.yaml"), # New structure (primary)
258
+ Path.home() / ".contextcore" / "contextsynapse.conf", # User home (legacy)
259
+ self.DEFAULT_CONFIG_DIR / "contextsynapse.conf", # Data directory (legacy)
260
+ Path(self.DEFAULT_CONFIG_FILE), # Legacy: Current directory (last resort)
261
+ ]
262
+
263
+ for loc in possible_locations:
264
+ if loc.exists():
265
+ config_file = loc
266
+ break
267
+ else:
268
+ # Use default location
269
+ config_file = Path(self.DEFAULT_CONFIG_FILE)
270
+ else:
271
+ config_file = Path(config_file)
272
+
273
+ self.config_file = config_file
274
+ self.config = self._load_config()
275
+
276
+ def _load_config(self) -> DatabaseConfig:
277
+ """Load configuration from file or return defaults."""
278
+ if not self.config_file.exists():
279
+ logger.info(f"Config file not found: {self.config_file}, using defaults")
280
+ return DatabaseConfig()
281
+
282
+ try:
283
+ with open(self.config_file, 'r') as f:
284
+ if self.config_file.suffix in ['.yaml', '.yml']:
285
+ data = yaml.safe_load(f) or {}
286
+ elif self.config_file.suffix == '.json':
287
+ data = json.load(f)
288
+ else:
289
+ # Try YAML first, then JSON
290
+ try:
291
+ f.seek(0)
292
+ data = yaml.safe_load(f) or {}
293
+ except:
294
+ f.seek(0)
295
+ data = json.load(f)
296
+
297
+ return self._dict_to_config(data)
298
+
299
+ except Exception as e:
300
+ logger.error(f"Failed to load config from {self.config_file}: {e}")
301
+ logger.info("Using default configuration")
302
+ return DatabaseConfig()
303
+
304
+ def _dict_to_config(self, data: Dict[str, Any]) -> DatabaseConfig:
305
+ """Convert dictionary to DatabaseConfig."""
306
+ config = DatabaseConfig()
307
+
308
+ # Database identity
309
+ config.database_name = data.get('database_name', config.database_name)
310
+ config.database_version = data.get('database_version', config.database_version)
311
+
312
+ # Performance
313
+ if 'performance' in data:
314
+ perf_data = data['performance']
315
+ config.performance = PerformanceConfig(**{
316
+ k: v for k, v in perf_data.items()
317
+ if k in PerformanceConfig.__annotations__
318
+ })
319
+
320
+ # Storage
321
+ if 'storage' in data:
322
+ storage_data = data['storage']
323
+ config.storage = StorageConfig(**{
324
+ k: v for k, v in storage_data.items()
325
+ if k in StorageConfig.__annotations__
326
+ })
327
+
328
+ # Connection
329
+ if 'connection' in data:
330
+ conn_data = data['connection']
331
+ config.connection = ConnectionConfig(**{
332
+ k: v for k, v in conn_data.items()
333
+ if k in ConnectionConfig.__annotations__
334
+ })
335
+
336
+ # Logging
337
+ if 'logging' in data:
338
+ log_data = data['logging']
339
+ config.logging = LoggingConfig(**{
340
+ k: v for k, v in log_data.items()
341
+ if k in LoggingConfig.__annotations__
342
+ })
343
+
344
+ # Security
345
+ if 'security' in data:
346
+ sec_data = data['security']
347
+ config.security = SecurityConfig(**{
348
+ k: v for k, v in sec_data.items()
349
+ if k in SecurityConfig.__annotations__
350
+ })
351
+
352
+ # Features
353
+ if 'features' in data:
354
+ feat_data = data['features']
355
+ config.features = FeatureFlags(**{
356
+ k: v for k, v in feat_data.items()
357
+ if k in FeatureFlags.__annotations__
358
+ })
359
+
360
+ # Traceability (Blockchain)
361
+ if 'traceability' in data:
362
+ trace_data = data['traceability']
363
+ config.traceability = TraceabilityConfig(**{
364
+ k: v for k, v in trace_data.items()
365
+ if k in TraceabilityConfig.__annotations__
366
+ })
367
+
368
+ return config
369
+
370
+ def save_config(self, config: Optional[DatabaseConfig] = None, format: ConfigFormat = ConfigFormat.YAML):
371
+ """Save configuration to file."""
372
+ if config is None:
373
+ config = self.config
374
+
375
+ self.config_file.parent.mkdir(parents=True, exist_ok=True)
376
+
377
+ try:
378
+ config_dict = self._config_to_dict(config)
379
+
380
+ with open(self.config_file, 'w') as f:
381
+ if format == ConfigFormat.YAML:
382
+ yaml.dump(config_dict, f, default_flow_style=False, sort_keys=False)
383
+ elif format == ConfigFormat.JSON:
384
+ json.dump(config_dict, f, indent=2, sort_keys=False)
385
+
386
+ logger.info(f"Configuration saved to {self.config_file}")
387
+
388
+ except Exception as e:
389
+ logger.error(f"Failed to save config to {self.config_file}: {e}")
390
+ raise
391
+
392
+ def _config_to_dict(self, config: DatabaseConfig) -> Dict[str, Any]:
393
+ """Convert DatabaseConfig to dictionary."""
394
+ return {
395
+ 'database_name': config.database_name,
396
+ 'database_version': config.database_version,
397
+ 'performance': asdict(config.performance),
398
+ 'storage': asdict(config.storage),
399
+ 'connection': asdict(config.connection),
400
+ 'logging': asdict(config.logging),
401
+ 'security': asdict(config.security),
402
+ 'features': asdict(config.features),
403
+ 'traceability': asdict(config.traceability),
404
+ }
405
+
406
+ def get_config(self) -> DatabaseConfig:
407
+ """Get current configuration."""
408
+ return self.config
409
+
410
+ def update_config(self, section: str, **kwargs):
411
+ """Update configuration section."""
412
+ if not hasattr(self.config, section):
413
+ raise ValueError(f"Unknown config section: {section}")
414
+
415
+ section_obj = getattr(self.config, section)
416
+ for key, value in kwargs.items():
417
+ if hasattr(section_obj, key):
418
+ setattr(section_obj, key, value)
419
+ else:
420
+ logger.warning(f"Unknown config key: {section}.{key}")
421
+
422
+ def create_default_config(self, output_file: Optional[Union[str, Path]] = None):
423
+ """Create a default configuration file with all options."""
424
+ if output_file is None:
425
+ output_file = self.config_file
426
+
427
+ output_file = Path(output_file)
428
+ output_file.parent.mkdir(parents=True, exist_ok=True)
429
+
430
+ default_config = DatabaseConfig()
431
+ self.save_config(default_config, format=ConfigFormat.YAML)
432
+
433
+ logger.info(f"Default configuration created at {output_file}")
434
+
435
+
436
+ # Global config manager instance
437
+ _global_config_manager: Optional[DatabaseConfigManager] = None
438
+
439
+
440
+ def get_config_manager(config_file: Optional[Union[str, Path]] = None) -> DatabaseConfigManager:
441
+ """Get or create global configuration manager."""
442
+ global _global_config_manager
443
+ if _global_config_manager is None:
444
+ _global_config_manager = DatabaseConfigManager(config_file)
445
+ return _global_config_manager
446
+
447
+
448
+ def get_config() -> DatabaseConfig:
449
+ """Get current database configuration."""
450
+ return get_config_manager().get_config()
451
+
452
+
453
+
@@ -0,0 +1,221 @@
1
+ """
2
+ Deployment Configuration — single settings file for local, Docker, and K8s.
3
+
4
+ All deployment-specific behavior is controlled here. Switch between local dev,
5
+ Docker Compose, and Kubernetes by changing CONTEXTSYNAPSE_DEPLOY_MODE env var
6
+ or editing deploy_settings.yaml.
7
+
8
+ Usage:
9
+ from contextsynapse.config.deployment import get_deploy_config
10
+
11
+ config = get_deploy_config()
12
+ storage_backend = config.storage_backend # "local", "s3", "gcs"
13
+ redis_url = config.redis_url
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ import logging
19
+ import os
20
+ from dataclasses import dataclass, field
21
+ from pathlib import Path
22
+ from typing import Any, Dict, Optional
23
+
24
+ logger = logging.getLogger(__name__)
25
+
26
+ # Deployment modes
27
+ MODE_LOCAL = "local" # Local dev — file storage, optional Redis
28
+ MODE_DOCKER = "docker" # Docker Compose — Redis + local volumes
29
+ MODE_K8S = "kubernetes" # Kubernetes — Redis + shared/cloud storage
30
+
31
+
32
+ @dataclass
33
+ class DeployConfig:
34
+ """Deployment configuration — all infra settings in one place."""
35
+
36
+ # Core
37
+ mode: str = MODE_LOCAL
38
+ api_host: str = "0.0.0.0"
39
+ api_port: int = 8000
40
+ workers: int = 1
41
+ log_level: str = "info"
42
+
43
+ # Redis
44
+ redis_url: str = ""
45
+ redis_enabled: bool = False
46
+
47
+ # Storage backend: "local", "s3", "gcs", "azure"
48
+ storage_backend: str = "local"
49
+ storage_path: str = "contextcore_data" # local path or bucket prefix
50
+
51
+ # S3 settings (when storage_backend = "s3")
52
+ s3_bucket: str = ""
53
+ s3_region: str = "us-east-1"
54
+ s3_prefix: str = "graphs/"
55
+ s3_endpoint: str = "" # for MinIO or R2
56
+
57
+ # GCS settings (when storage_backend = "gcs")
58
+ gcs_bucket: str = ""
59
+ gcs_prefix: str = "graphs/"
60
+
61
+ # Azure Blob settings (when storage_backend = "azure")
62
+ azure_container: str = ""
63
+ azure_connection_string: str = ""
64
+
65
+ # Graph backend: "redis" (shared, default) or "csr" (in-memory, dev only)
66
+ graph_backend: str = "redis"
67
+
68
+ # Vector DB
69
+ vector_backend: str = "custom" # "custom", "qdrant", "chromadb"
70
+ qdrant_url: str = ""
71
+
72
+ # Embedding
73
+ embedding_provider: str = "ollama" # "ollama", "openai", "cohere"
74
+ embedding_model: str = "nomic-embed-text"
75
+ embedding_url: str = "http://localhost:11434"
76
+
77
+ # LLM
78
+ llm_provider: str = "groq"
79
+ llm_model: str = "gpt-oss-120b"
80
+ llm_max_concurrent: int = 10
81
+ llm_rpm: int = 100
82
+
83
+ # Ingestion workers
84
+ ingestion_workers: int = 2
85
+ ingestion_queue_max: int = 100
86
+
87
+ # Quotas (SaaS)
88
+ default_graphs_per_tenant: int = 50
89
+ default_nodes_per_tenant: int = 100000
90
+ default_storage_mb_per_tenant: int = 500
91
+
92
+ # K8s specific
93
+ k8s_namespace: str = "contextsynapse"
94
+ k8s_service_account: str = "contextcore-sa"
95
+ pod_memory_limit: str = "2Gi"
96
+ pod_cpu_limit: str = "1"
97
+
98
+ # Write-behind
99
+ write_behind_interval: int = 10
100
+ max_graphs_in_memory: int = 50
101
+
102
+ def to_env(self) -> Dict[str, str]:
103
+ """Export config as environment variables (uses new CONTEXTSYNAPSE_ prefix)."""
104
+ env = {}
105
+ if self.redis_url:
106
+ env["CONTEXTSYNAPSE_REDIS_URL"] = self.redis_url
107
+ env["CONTEXTSYNAPSE_GRAPH_BACKEND"] = self.graph_backend
108
+ if self.qdrant_url:
109
+ env["QDRANT_URL"] = self.qdrant_url
110
+ env["CONTEXTSYNAPSE_DEPLOY_MODE"] = self.mode
111
+ env["CONTEXTSYNAPSE_STORAGE_BACKEND"] = self.storage_backend
112
+ env["CONTEXTSYNAPSE_STORAGE_PATH"] = self.storage_path
113
+ env["CONTEXTSYNAPSE_LLM_MAX_CONCURRENT"] = str(self.llm_max_concurrent)
114
+ env["CONTEXTSYNAPSE_LLM_RPM"] = str(self.llm_rpm)
115
+ env["CONTEXTSYNAPSE_MAX_GRAPHS"] = str(self.max_graphs_in_memory)
116
+ env["CONTEXTSYNAPSE_WB_FLUSH_INTERVAL"] = str(self.write_behind_interval)
117
+ if self.s3_bucket:
118
+ env["CONTEXTSYNAPSE_S3_BUCKET"] = self.s3_bucket
119
+ env["CONTEXTSYNAPSE_S3_REGION"] = self.s3_region
120
+ env["CONTEXTSYNAPSE_S3_PREFIX"] = self.s3_prefix
121
+ if self.gcs_bucket:
122
+ env["CONTEXTSYNAPSE_GCS_BUCKET"] = self.gcs_bucket
123
+ return env
124
+
125
+
126
+ def _load_from_yaml() -> Optional[Dict[str, Any]]:
127
+ """Try to load deploy_settings.yaml from project root."""
128
+ paths = [
129
+ Path("deploy_settings.yaml"),
130
+ Path("config/deploy_settings.yaml"),
131
+ Path("/etc/contextcore/deploy_settings.yaml"),
132
+ ]
133
+ for p in paths:
134
+ if p.exists():
135
+ try:
136
+ import yaml
137
+ with open(p) as f:
138
+ data = yaml.safe_load(f)
139
+ logger.info("Loaded deploy config from %s", p)
140
+ return data
141
+ except Exception as e:
142
+ logger.warning("Failed to load %s: %s", p, e)
143
+ return None
144
+
145
+
146
+ def _load_from_env() -> Dict[str, Any]:
147
+ """Load config from environment variables."""
148
+ config = {}
149
+ # Each entry: (new_CONTEXTSYNAPSE_key, old_AICONTEXTDB_key, config_key)
150
+ mapping = [
151
+ ("CONTEXTSYNAPSE_DEPLOY_MODE", "AICONTEXTDB_DEPLOY_MODE", "mode"),
152
+ ("CONTEXTSYNAPSE_REDIS_URL", "AICONTEXTDB_REDIS_URL", "redis_url"),
153
+ ("CONTEXTSYNAPSE_STORAGE_BACKEND", "AICONTEXTDB_STORAGE_BACKEND", "storage_backend"),
154
+ ("CONTEXTSYNAPSE_STORAGE_PATH", "AICONTEXTDB_STORAGE_PATH", "storage_path"),
155
+ ("CONTEXTSYNAPSE_S3_BUCKET", "AICONTEXTDB_S3_BUCKET", "s3_bucket"),
156
+ ("CONTEXTSYNAPSE_S3_REGION", "AICONTEXTDB_S3_REGION", "s3_region"),
157
+ ("CONTEXTSYNAPSE_S3_PREFIX", "AICONTEXTDB_S3_PREFIX", "s3_prefix"),
158
+ ("CONTEXTSYNAPSE_S3_ENDPOINT", "AICONTEXTDB_S3_ENDPOINT", "s3_endpoint"),
159
+ ("CONTEXTSYNAPSE_GCS_BUCKET", "AICONTEXTDB_GCS_BUCKET", "gcs_bucket"),
160
+ ("CONTEXTSYNAPSE_GCS_PREFIX", "AICONTEXTDB_GCS_PREFIX", "gcs_prefix"),
161
+ (None, "QDRANT_URL", "qdrant_url"),
162
+ ("CONTEXTSYNAPSE_GRAPH_BACKEND", "AICONTEXTDB_GRAPH_BACKEND", "graph_backend"),
163
+ ("CONTEXTSYNAPSE_LLM_MAX_CONCURRENT", "AICONTEXTDB_LLM_MAX_CONCURRENT", "llm_max_concurrent"),
164
+ ("CONTEXTSYNAPSE_LLM_RPM", "AICONTEXTDB_LLM_RPM", "llm_rpm"),
165
+ ("CONTEXTSYNAPSE_MAX_GRAPHS", "AICONTEXTDB_MAX_GRAPHS", "max_graphs_in_memory"),
166
+ ("CONTEXTSYNAPSE_WB_FLUSH_INTERVAL", "AICONTEXTDB_WB_FLUSH_INTERVAL", "write_behind_interval"),
167
+ (None, "API_PORT", "api_port"),
168
+ ("CONTEXTSYNAPSE_LOG_LEVEL", "AICONTEXTDB_LOG_LEVEL", "log_level"),
169
+ ]
170
+ for new_env_key, old_env_key, config_key in mapping:
171
+ val = (os.environ.get(new_env_key) if new_env_key else None) or os.environ.get(old_env_key)
172
+ if val is not None:
173
+ # Convert numeric fields
174
+ if config_key in ("api_port", "workers", "llm_max_concurrent", "llm_rpm",
175
+ "max_graphs_in_memory", "write_behind_interval", "ingestion_workers"):
176
+ try:
177
+ val = int(val)
178
+ except ValueError:
179
+ pass
180
+ config[config_key] = val
181
+ return config
182
+
183
+
184
+ # Singleton
185
+ _config: Optional[DeployConfig] = None
186
+
187
+
188
+ def get_deploy_config() -> DeployConfig:
189
+ """Get deployment config — YAML file → env vars → defaults."""
190
+ global _config
191
+ if _config is not None:
192
+ return _config
193
+
194
+ config = DeployConfig()
195
+
196
+ # Layer 1: YAML file
197
+ yaml_data = _load_from_yaml()
198
+ if yaml_data:
199
+ for key, val in yaml_data.items():
200
+ if hasattr(config, key):
201
+ setattr(config, key, val)
202
+
203
+ # Layer 2: Environment variables (override YAML)
204
+ env_data = _load_from_env()
205
+ for key, val in env_data.items():
206
+ if hasattr(config, key):
207
+ setattr(config, key, val)
208
+
209
+ # Auto-detect mode
210
+ if not config.mode or config.mode == MODE_LOCAL:
211
+ if os.environ.get("KUBERNETES_SERVICE_HOST"):
212
+ config.mode = MODE_K8S
213
+ elif os.path.exists("/.dockerenv"):
214
+ config.mode = MODE_DOCKER
215
+
216
+ # Auto-enable Redis
217
+ config.redis_enabled = bool(config.redis_url)
218
+
219
+ logger.info("[DEPLOY] Mode=%s, storage=%s, redis=%s", config.mode, config.storage_backend, config.redis_enabled)
220
+ _config = config
221
+ return _config