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,948 @@
1
+ """
2
+ Comprehensive Test Suite for All AIQL Queries
3
+
4
+ Tests all major AIQL query types both natively and via API.
5
+
6
+ This test suite covers:
7
+ - CREATE operations (NODE, EDGE, GRAPH, COLLECTION, INDEX)
8
+ - SELECT queries (basic, WHERE, LIMIT, COUNT, ORDER BY, GROUP BY, aggregations)
9
+ - UPDATE operations (NODE, EDGE)
10
+ - DELETE operations (NODE, EDGE)
11
+ - MATCH queries (NODE, patterns, RETURN, WHERE)
12
+ - TRAVERSE queries (FROM, VIA, DEPTH, MAX DEPTH, WHERE)
13
+ - Search queries (DENSE, SPARSE, HYBRID, SEMANTIC, GRAPH)
14
+ - RAG queries (Simple RAG, RAG GENERATE)
15
+ - Analytics (PAGERANK, SHORTEST_PATH, COMMUNITY_DETECTION, GRAPH SUMMARY, HOP)
16
+ - Variable declarations (LET)
17
+ - MERGE operations
18
+ - NEIGHBORS queries
19
+ - Namespace operations
20
+ - Statistics and metadata
21
+ - Transaction operations
22
+ - And more...
23
+
24
+ Usage:
25
+ # Test both native and API (API server must be running)
26
+ python test_all_aiql_queries.py
27
+
28
+ # To start API server:
29
+ python -m contextsynapse.api.server
30
+
31
+ Note: Some queries may be marked as expected_success=False if they require
32
+ specific setup (e.g., embeddings for search, graph structure for analytics).
33
+ These will still be tested but failures won't count against the test suite.
34
+ """
35
+
36
+ import sys
37
+ import os
38
+ import json
39
+ import time
40
+ import argparse
41
+ from pathlib import Path
42
+ try:
43
+ import requests
44
+ REQUESTS_AVAILABLE = True
45
+ except ImportError:
46
+ REQUESTS_AVAILABLE = False
47
+ print("[WARN] requests library not available. API tests will be skipped.")
48
+
49
+ # Add project root to path
50
+ project_root = Path(__file__).parent.parent
51
+ sys.path.insert(0, str(project_root))
52
+
53
+ from contextsynapse.core.hybrid_graph_storage import AIContextDB
54
+ from contextsynapse.aiql.engine.executor import AIQLExecutor
55
+
56
+
57
+ class AIQLQueryTester:
58
+ """Comprehensive tester for all AIQL queries."""
59
+
60
+ def __init__(self, namespace: str = "test_all_queries", api_url: str = "http://localhost:8000",
61
+ test_native_only: bool = False, test_api_only: bool = False):
62
+ self.namespace = namespace
63
+ self.api_url = api_url
64
+ self.test_native_only = test_native_only
65
+ self.test_api_only = test_api_only
66
+
67
+ # Generate session ID for stateful API testing (so all requests share same graph instance)
68
+ import uuid
69
+ self.session_id = str(uuid.uuid4())
70
+
71
+ # Setup native executor
72
+ self.graph = AIContextDB(name=namespace, storage_backend='csr')
73
+ self.graph.buffer_enabled = False
74
+ self.executor = AIQLExecutor(contextcore=self.graph)
75
+ self.executor.active_namespace = namespace
76
+
77
+ # Track created UUIDs for cleanup
78
+ self.created_node_uuids = []
79
+ self.created_edge_uuids = []
80
+
81
+ # Results
82
+ self.results = {
83
+ 'native': {},
84
+ 'api': {}
85
+ }
86
+
87
+ def setup(self):
88
+ """Setup test environment."""
89
+ print("\n[SETUP] Creating namespace...")
90
+ try:
91
+ self.executor.execute(f"CREATE NAMESPACE {self.namespace}")
92
+ self.executor.execute(f"USE NAMESPACE {self.namespace}")
93
+ print("[OK] Namespace created")
94
+ except Exception as e:
95
+ print(f"[WARN] Namespace might already exist: {e}")
96
+
97
+ def test_native(self, query_name: str, query: str, expected_success: bool = True):
98
+ """Test query natively."""
99
+ try:
100
+ result = self.executor.execute(query)
101
+ success = result.get('success', True) if isinstance(result, dict) else True
102
+
103
+ if expected_success:
104
+ self.results['native'][query_name] = success
105
+ status = "[PASS]" if success else "[FAIL]"
106
+ print(f" {status} {query_name}")
107
+ else:
108
+ # For queries that might fail, just check no exception
109
+ self.results['native'][query_name] = True
110
+ print(f" [OK] {query_name} (executed without exception)")
111
+
112
+ return result
113
+ except Exception as e:
114
+ self.results['native'][query_name] = False
115
+ print(f" [FAIL] {query_name}: {e}")
116
+ return None
117
+
118
+ def test_api(self, query_name: str, query: str, expected_success: bool = True):
119
+ """Test query via API."""
120
+ if not REQUESTS_AVAILABLE:
121
+ self.results['api'][query_name] = None
122
+ print(f" [SKIP] {query_name} (API): requests library not available")
123
+ return None
124
+
125
+ try:
126
+ response = requests.post(
127
+ f"{self.api_url}/aiql",
128
+ json={
129
+ "query": query,
130
+ "namespace": self.namespace,
131
+ "session_id": self.session_id # Use stateful session for consistent graph instance
132
+ },
133
+ timeout=30 # Increased timeout for complex queries
134
+ )
135
+
136
+ if response.status_code == 200:
137
+ result = response.json()
138
+ success = result.get('success', True)
139
+
140
+ if expected_success:
141
+ self.results['api'][query_name] = success
142
+ status = "[PASS]" if success else "[FAIL]"
143
+ print(f" {status} {query_name} (API)")
144
+ else:
145
+ # For queries that might fail, just check no exception
146
+ self.results['api'][query_name] = True
147
+ print(f" [OK] {query_name} (API) (executed without exception)")
148
+
149
+ return result
150
+ else:
151
+ # Check if it's an expected failure
152
+ if not expected_success:
153
+ self.results['api'][query_name] = True
154
+ print(f" [OK] {query_name} (API) (expected failure: HTTP {response.status_code})")
155
+ else:
156
+ self.results['api'][query_name] = False
157
+ print(f" [FAIL] {query_name} (API): HTTP {response.status_code}")
158
+ return None
159
+ except requests.exceptions.ConnectionError:
160
+ self.results['api'][query_name] = None # API not available
161
+ print(f" [SKIP] {query_name} (API): API server not running (start with: python -m contextsynapse.api.server)")
162
+ return None
163
+ except requests.exceptions.Timeout:
164
+ self.results['api'][query_name] = None
165
+ print(f" [SKIP] {query_name} (API): Request timeout")
166
+ return None
167
+ except Exception as e:
168
+ if not expected_success:
169
+ self.results['api'][query_name] = True
170
+ print(f" [OK] {query_name} (API) (expected failure: {str(e)[:50]})")
171
+ else:
172
+ self.results['api'][query_name] = False
173
+ print(f" [FAIL] {query_name} (API): {e}")
174
+ return None
175
+
176
+ def test_both(self, query_name: str, query: str, expected_success: bool = True):
177
+ """Test query both natively and via API."""
178
+ print(f"\n[TEST] {query_name}")
179
+ print(f" Query: {query[:80]}..." if len(query) > 80 else f" Query: {query}")
180
+
181
+ native_result = None
182
+ api_result = None
183
+
184
+ if not self.test_api_only:
185
+ native_result = self.test_native(query_name, query, expected_success)
186
+
187
+ if not self.test_native_only and REQUESTS_AVAILABLE:
188
+ api_result = self.test_api(query_name, query, expected_success)
189
+
190
+ return native_result, api_result
191
+
192
+ def run_all_tests(self):
193
+ """Run comprehensive test suite."""
194
+ print("=" * 80)
195
+ print("COMPREHENSIVE AIQL QUERY TEST SUITE")
196
+ print("=" * 80)
197
+
198
+ if self.test_native_only:
199
+ print("\n[MODE] Testing NATIVE execution only")
200
+ elif self.test_api_only:
201
+ print("\n[MODE] Testing API execution only")
202
+ else:
203
+ print("\n[MODE] Testing both NATIVE and API execution")
204
+
205
+ self.setup()
206
+
207
+ # ========================================================================
208
+ # 1. CREATE NODE Tests
209
+ # ========================================================================
210
+ print("\n" + "=" * 80)
211
+ print("1. CREATE NODE Tests")
212
+ print("=" * 80)
213
+
214
+ # Basic CREATE NODE
215
+ result1, _ = self.test_both(
216
+ "CREATE_NODE_BASIC",
217
+ 'CREATE NODE Person {name: "Alice", age: 30, city: "NYC"}'
218
+ )
219
+ if result1 and result1.get('uuid'):
220
+ self.created_node_uuids.append(result1['uuid'])
221
+
222
+ # CREATE NODE with alias
223
+ result2, _ = self.test_both(
224
+ "CREATE_NODE_WITH_ALIAS",
225
+ 'CREATE NODE Company AS corp {name: "TechCorp", industry: "Tech"}'
226
+ )
227
+ if result2 and result2.get('uuid'):
228
+ self.created_node_uuids.append(result2['uuid'])
229
+
230
+ # CREATE NODE with complex properties
231
+ result3, _ = self.test_both(
232
+ "CREATE_NODE_COMPLEX",
233
+ 'CREATE NODE Product {name: "Widget", price: 99.99, in_stock: true, tags: ["electronics", "gadget"]}'
234
+ )
235
+ if result3 and result3.get('uuid'):
236
+ self.created_node_uuids.append(result3['uuid'])
237
+
238
+ # ========================================================================
239
+ # 2. CREATE EDGE Tests
240
+ # ========================================================================
241
+ print("\n" + "=" * 80)
242
+ print("2. CREATE EDGE Tests")
243
+ print("=" * 80)
244
+
245
+ # CREATE EDGE with SRC/DEST
246
+ result4, _ = self.test_both(
247
+ "CREATE_EDGE_SRC_DEST",
248
+ "CREATE EDGE WORKS_AT SRC Person DEST Company"
249
+ )
250
+ if result4 and result4.get('uuid'):
251
+ self.created_edge_uuids.append(result4['uuid'])
252
+
253
+ # CREATE EDGE with properties
254
+ result5, _ = self.test_both(
255
+ "CREATE_EDGE_WITH_PROPERTIES",
256
+ 'CREATE EDGE OWNS SRC Person DEST Product {since: "2024-01-01", quantity: 2}'
257
+ )
258
+ if result5 and result5.get('uuid'):
259
+ self.created_edge_uuids.append(result5['uuid'])
260
+
261
+ # ========================================================================
262
+ # 3. SELECT Tests
263
+ # ========================================================================
264
+ print("\n" + "=" * 80)
265
+ print("3. SELECT Tests")
266
+ print("=" * 80)
267
+
268
+ # SELECT all nodes
269
+ self.test_both(
270
+ "SELECT_ALL",
271
+ "SELECT * FROM Person"
272
+ )
273
+
274
+ # SELECT with WHERE
275
+ self.test_both(
276
+ "SELECT_WHERE",
277
+ 'SELECT * FROM Person WHERE age > 25'
278
+ )
279
+
280
+ # SELECT with LIMIT
281
+ self.test_both(
282
+ "SELECT_LIMIT",
283
+ "SELECT * FROM Person LIMIT 10"
284
+ )
285
+
286
+ # SELECT COUNT
287
+ self.test_both(
288
+ "SELECT_COUNT",
289
+ "SELECT COUNT(*) FROM Person"
290
+ )
291
+
292
+ # SELECT specific properties
293
+ self.test_both(
294
+ "SELECT_PROPERTIES",
295
+ "SELECT name, age FROM Person"
296
+ )
297
+
298
+ # ========================================================================
299
+ # 4. UPDATE NODE Tests
300
+ # ========================================================================
301
+ print("\n" + "=" * 80)
302
+ print("4. UPDATE NODE Tests")
303
+ print("=" * 80)
304
+
305
+ # UPDATE NODE
306
+ self.test_both(
307
+ "UPDATE_NODE",
308
+ 'UPDATE NODE Person SET {age: 31, city: "Boston"} WHERE name = "Alice"'
309
+ )
310
+
311
+ # UPDATE NODE with multiple properties
312
+ self.test_both(
313
+ "UPDATE_NODE_MULTIPLE",
314
+ 'UPDATE NODE Product SET {price: 89.99, in_stock: false} WHERE name = "Widget"'
315
+ )
316
+
317
+ # ========================================================================
318
+ # 5. UPDATE EDGE Tests
319
+ # ========================================================================
320
+ print("\n" + "=" * 80)
321
+ print("5. UPDATE EDGE Tests")
322
+ print("=" * 80)
323
+
324
+ # UPDATE EDGE
325
+ self.test_both(
326
+ "UPDATE_EDGE",
327
+ 'UPDATE EDGE WORKS_AT SET {role: "Senior Engineer", since: "2023-01-01"}'
328
+ )
329
+
330
+ # ========================================================================
331
+ # 6. DELETE Tests
332
+ # ========================================================================
333
+ print("\n" + "=" * 80)
334
+ print("6. DELETE Tests")
335
+ print("=" * 80)
336
+
337
+ # DELETE NODE
338
+ self.test_both(
339
+ "DELETE_NODE",
340
+ 'DELETE NODE Product WHERE name = "Widget"'
341
+ )
342
+
343
+ # DELETE EDGE
344
+ self.test_both(
345
+ "DELETE_EDGE",
346
+ "DELETE EDGE OWNS"
347
+ )
348
+
349
+ # ========================================================================
350
+ # 7. MATCH Tests
351
+ # ========================================================================
352
+ print("\n" + "=" * 80)
353
+ print("7. MATCH Tests")
354
+ print("=" * 80)
355
+
356
+ # MATCH NODE
357
+ self.test_both(
358
+ "MATCH_NODE",
359
+ 'MATCH NODE Person WHERE name = "Alice"'
360
+ )
361
+
362
+ # MATCH pattern
363
+ self.test_both(
364
+ "MATCH_PATTERN",
365
+ "MATCH (Person)-[WORKS_AT]->(Company)"
366
+ )
367
+
368
+ # ========================================================================
369
+ # 8. TRAVERSE Tests
370
+ # ========================================================================
371
+ print("\n" + "=" * 80)
372
+ print("8. TRAVERSE Tests")
373
+ print("=" * 80)
374
+
375
+ # TRAVERSE FROM
376
+ self.test_both(
377
+ "TRAVERSE_FROM",
378
+ "TRAVERSE FROM Person TO Company VIA WORKS_AT"
379
+ )
380
+
381
+ # TRAVERSE with DEPTH
382
+ self.test_both(
383
+ "TRAVERSE_DEPTH",
384
+ "TRAVERSE FROM Person DEPTH 2"
385
+ )
386
+
387
+ # ========================================================================
388
+ # 9. Namespace Operations
389
+ # ========================================================================
390
+ print("\n" + "=" * 80)
391
+ print("9. Namespace Operations")
392
+ print("=" * 80)
393
+
394
+ # SHOW NAMESPACES
395
+ self.test_both(
396
+ "SHOW_NAMESPACES",
397
+ "SHOW NAMESPACES"
398
+ )
399
+
400
+ # SHOW GRAPHS
401
+ self.test_both(
402
+ "SHOW_GRAPHS",
403
+ "SHOW GRAPHS"
404
+ )
405
+
406
+ # ========================================================================
407
+ # 10. Advanced SELECT Tests
408
+ # ========================================================================
409
+ print("\n" + "=" * 80)
410
+ print("10. Advanced SELECT Tests")
411
+ print("=" * 80)
412
+
413
+ # SELECT with ORDER BY
414
+ self.test_both(
415
+ "SELECT_ORDER_BY",
416
+ "SELECT * FROM Person ORDER BY age DESC"
417
+ )
418
+
419
+ # SELECT with GROUP BY
420
+ self.test_both(
421
+ "SELECT_GROUP_BY",
422
+ "SELECT city, COUNT(*) FROM Person GROUP BY city"
423
+ )
424
+
425
+ # SELECT with aggregation functions
426
+ self.test_both(
427
+ "SELECT_AVG",
428
+ "SELECT AVG(age) FROM Person"
429
+ )
430
+
431
+ self.test_both(
432
+ "SELECT_SUM",
433
+ "SELECT SUM(age) FROM Person"
434
+ )
435
+
436
+ self.test_both(
437
+ "SELECT_MIN_MAX",
438
+ "SELECT MIN(age), MAX(age) FROM Person"
439
+ )
440
+
441
+ # ========================================================================
442
+ # 11. Variable Declarations
443
+ # ========================================================================
444
+ print("\n" + "=" * 80)
445
+ print("11. Variable Declarations")
446
+ print("=" * 80)
447
+
448
+ # LET variable
449
+ self.test_both(
450
+ "LET_VARIABLE",
451
+ 'LET $author = "Alice"'
452
+ )
453
+
454
+ # Use variable in query
455
+ self.test_both(
456
+ "SELECT_WITH_VARIABLE",
457
+ 'LET $min_age = 25; SELECT * FROM Person WHERE age > $min_age'
458
+ )
459
+
460
+ # ========================================================================
461
+ # 12. MERGE Operations
462
+ # ========================================================================
463
+ print("\n" + "=" * 80)
464
+ print("12. MERGE Operations")
465
+ print("=" * 80)
466
+
467
+ # MERGE NODE
468
+ self.test_both(
469
+ "MERGE_NODE",
470
+ 'MERGE NODE Person {name: "Alice"} SET {age: 30, city: "NYC"}'
471
+ )
472
+
473
+ # ========================================================================
474
+ # 13. Search Queries
475
+ # ========================================================================
476
+ print("\n" + "=" * 80)
477
+ print("13. Search Queries")
478
+ print("=" * 80)
479
+
480
+ # DENSE SEARCH
481
+ self.test_both(
482
+ "DENSE_SEARCH",
483
+ 'DENSE SEARCH "Alice" IN Person LIMIT 5',
484
+ expected_success=False # May fail if no embeddings
485
+ )
486
+
487
+ # SPARSE SEARCH
488
+ self.test_both(
489
+ "SPARSE_SEARCH",
490
+ 'SPARSE SEARCH "Alice" IN Person LIMIT 5',
491
+ expected_success=False # May fail if no index
492
+ )
493
+
494
+ # HYBRID SEARCH
495
+ self.test_both(
496
+ "HYBRID_SEARCH",
497
+ 'HYBRID SEARCH "Alice" IN Person LIMIT 5',
498
+ expected_success=False # May fail if no embeddings/index
499
+ )
500
+
501
+ # SEMANTIC SEARCH
502
+ self.test_both(
503
+ "SEMANTIC_SEARCH",
504
+ 'SEMANTIC SEARCH "Alice" IN Person LIMIT 5',
505
+ expected_success=False # May fail if no embeddings
506
+ )
507
+
508
+ # GRAPH SEARCH
509
+ self.test_both(
510
+ "GRAPH_SEARCH",
511
+ 'GRAPH SEARCH "Alice" VIA (WORKS_AT) DEPTH 2',
512
+ expected_success=False # May fail if no graph structure
513
+ )
514
+
515
+ # ========================================================================
516
+ # 14. RAG Queries
517
+ # ========================================================================
518
+ print("\n" + "=" * 80)
519
+ print("14. RAG Queries")
520
+ print("=" * 80)
521
+
522
+ # Simple RAG query
523
+ self.test_both(
524
+ "RAG_QUERY_SIMPLE",
525
+ f'RAG "What is Alice?" AT NAMESPACE {self.namespace}',
526
+ expected_success=False # May fail if no RAG setup
527
+ )
528
+
529
+ # RAG GENERATE
530
+ self.test_both(
531
+ "RAG_GENERATE",
532
+ 'LET $query = "What is Alice?"; RAG GENERATE $query',
533
+ expected_success=False # May fail if no RAG setup
534
+ )
535
+
536
+ # ========================================================================
537
+ # 15. Analytics Queries
538
+ # ========================================================================
539
+ print("\n" + "=" * 80)
540
+ print("15. Analytics Queries")
541
+ print("=" * 80)
542
+
543
+ # PAGERANK
544
+ self.test_both(
545
+ "PAGERANK",
546
+ "PAGERANK ON Person ITERATIONS 10",
547
+ expected_success=False # May fail if no edges
548
+ )
549
+
550
+ # SHORTEST_PATH
551
+ self.test_both(
552
+ "SHORTEST_PATH",
553
+ 'SHORTEST_PATH FROM "Alice" TO "TechCorp"',
554
+ expected_success=False # May fail if nodes don't exist
555
+ )
556
+
557
+ # COMMUNITY_DETECTION
558
+ self.test_both(
559
+ "COMMUNITY_DETECTION",
560
+ "COMMUNITY_DETECTION ON Person",
561
+ expected_success=False # May fail if no graph structure
562
+ )
563
+
564
+ # GRAPH SUMMARY
565
+ self.test_both(
566
+ "GRAPH_SUMMARY",
567
+ "GRAPH SUMMARY ON Person",
568
+ expected_success=False # May fail if no nodes
569
+ )
570
+
571
+ # HOP query
572
+ self.test_both(
573
+ "HOP_QUERY",
574
+ 'HOP FROM Person TO Company DEPTH 1',
575
+ expected_success=False # May fail if no edges
576
+ )
577
+
578
+ # ========================================================================
579
+ # 16. NEIGHBORS Queries
580
+ # ========================================================================
581
+ print("\n" + "=" * 80)
582
+ print("16. NEIGHBORS Queries")
583
+ print("=" * 80)
584
+
585
+ # NEIGHBORS FROM
586
+ self.test_both(
587
+ "NEIGHBORS_FROM",
588
+ 'NEIGHBORS FROM Person WHERE name = "Alice" DEPTH 1',
589
+ expected_success=False # May fail if no edges
590
+ )
591
+
592
+ # ========================================================================
593
+ # 17. Collection Operations
594
+ # ========================================================================
595
+ print("\n" + "=" * 80)
596
+ print("17. Collection Operations")
597
+ print("=" * 80)
598
+
599
+ # CREATE COLLECTION
600
+ self.test_both(
601
+ "CREATE_COLLECTION",
602
+ 'CREATE COLLECTION test_collection {fields: [{name: "string"}, {age: "int"}]}',
603
+ expected_success=False # May not be implemented
604
+ )
605
+
606
+ # SHOW COLLECTIONS
607
+ self.test_both(
608
+ "SHOW_COLLECTIONS",
609
+ "SHOW COLLECTIONS"
610
+ )
611
+
612
+ # ========================================================================
613
+ # 18. Index Operations
614
+ # ========================================================================
615
+ print("\n" + "=" * 80)
616
+ print("18. Index Operations")
617
+ print("=" * 80)
618
+
619
+ # CREATE INDEX
620
+ self.test_both(
621
+ "CREATE_INDEX",
622
+ "CREATE INDEX test_index ON Person (name) TYPE DENSE",
623
+ expected_success=False # May fail if not implemented
624
+ )
625
+
626
+ # SHOW INDEXES
627
+ self.test_both(
628
+ "SHOW_INDEXES",
629
+ "SHOW INDEXES"
630
+ )
631
+
632
+ # ========================================================================
633
+ # 19. Statistics and Metadata
634
+ # ========================================================================
635
+ print("\n" + "=" * 80)
636
+ print("19. Statistics and Metadata")
637
+ print("=" * 80)
638
+
639
+ # SHOW STATS
640
+ self.test_both(
641
+ "SHOW_STATS",
642
+ "SHOW STATS"
643
+ )
644
+
645
+ # SHOW CURRENT GRAPH
646
+ self.test_both(
647
+ "SHOW_CURRENT_GRAPH",
648
+ "SHOW CURRENT GRAPH"
649
+ )
650
+
651
+ # DESCRIBE NODE
652
+ self.test_both(
653
+ "DESCRIBE_NODE",
654
+ "DESCRIBE NODE Person"
655
+ )
656
+
657
+ # ========================================================================
658
+ # 20. Pipeline Operations
659
+ # ========================================================================
660
+ print("\n" + "=" * 80)
661
+ print("20. Pipeline Operations")
662
+ print("=" * 80)
663
+
664
+ # SHOW PIPELINES
665
+ self.test_both(
666
+ "SHOW_PIPELINES",
667
+ "SHOW PIPELINES"
668
+ )
669
+
670
+ # ========================================================================
671
+ # 21. Advanced Traversal
672
+ # ========================================================================
673
+ print("\n" + "=" * 80)
674
+ print("21. Advanced Traversal")
675
+ print("=" * 80)
676
+
677
+ # TRAVERSE with VIA
678
+ self.test_both(
679
+ "TRAVERSE_VIA",
680
+ "TRAVERSE FROM Person VIA (WORKS_AT) TO Company"
681
+ )
682
+
683
+ # TRAVERSE with MAX DEPTH
684
+ self.test_both(
685
+ "TRAVERSE_MAX_DEPTH",
686
+ "TRAVERSE FROM Person MAX DEPTH 3"
687
+ )
688
+
689
+ # TRAVERSE with WHERE
690
+ self.test_both(
691
+ "TRAVERSE_WHERE",
692
+ 'TRAVERSE FROM Person WHERE name = "Alice" MAX DEPTH 2'
693
+ )
694
+
695
+ # ========================================================================
696
+ # 22. Advanced MATCH Patterns
697
+ # ========================================================================
698
+ print("\n" + "=" * 80)
699
+ print("22. Advanced MATCH Patterns")
700
+ print("=" * 80)
701
+
702
+ # MATCH with RETURN
703
+ self.test_both(
704
+ "MATCH_RETURN",
705
+ "MATCH (Person)-[WORKS_AT]->(Company) RETURN Person.name, Company.name"
706
+ )
707
+
708
+ # MATCH with WHERE
709
+ self.test_both(
710
+ "MATCH_WHERE",
711
+ 'MATCH (Person)-[WORKS_AT]->(Company) WHERE Person.name = "Alice"'
712
+ )
713
+
714
+ # ========================================================================
715
+ # 23. Aggregation Queries
716
+ # ========================================================================
717
+ print("\n" + "=" * 80)
718
+ print("23. Aggregation Queries")
719
+ print("=" * 80)
720
+
721
+ # AGGREGATE query
722
+ self.test_both(
723
+ "AGGREGATE_COUNT",
724
+ "AGGREGATE COUNT(*) FROM Person"
725
+ )
726
+
727
+ # ========================================================================
728
+ # 24. CREATE GRAPH Operations
729
+ # ========================================================================
730
+ print("\n" + "=" * 80)
731
+ print("24. CREATE GRAPH Operations")
732
+ print("=" * 80)
733
+
734
+ # CREATE GRAPH
735
+ self.test_both(
736
+ "CREATE_GRAPH",
737
+ "CREATE GRAPH test_graph"
738
+ )
739
+
740
+ # USE GRAPH
741
+ self.test_both(
742
+ "USE_GRAPH",
743
+ "USE GRAPH test_graph"
744
+ )
745
+
746
+ # ========================================================================
747
+ # 25. Transaction Operations
748
+ # ========================================================================
749
+ print("\n" + "=" * 80)
750
+ print("25. Transaction Operations")
751
+ print("=" * 80)
752
+
753
+ # BEGIN TRANSACTION
754
+ self.test_both(
755
+ "BEGIN_TRANSACTION",
756
+ "BEGIN TRANSACTION",
757
+ expected_success=False # May not be implemented
758
+ )
759
+
760
+ # COMMIT TRANSACTION
761
+ self.test_both(
762
+ "COMMIT_TRANSACTION",
763
+ "COMMIT TRANSACTION",
764
+ expected_success=False # May not be implemented
765
+ )
766
+
767
+ # ========================================================================
768
+ # 26. Verification: Check UUIDs in results
769
+ # ========================================================================
770
+ print("\n" + "=" * 80)
771
+ print("26. UUID Verification")
772
+ print("=" * 80)
773
+
774
+ # Verify CREATE NODE returns UUID
775
+ if result1:
776
+ has_uuid = 'uuid' in result1
777
+ no_node_id = 'node_id' not in result1
778
+ self.results['native']['UUID_RETURNED'] = has_uuid and no_node_id
779
+ print(f" [{'PASS' if has_uuid and no_node_id else 'FAIL'}] CREATE NODE returns UUID (no node_id)")
780
+
781
+ # Verify CREATE EDGE returns UUID
782
+ if result4:
783
+ has_uuid = 'uuid' in result4
784
+ no_edge_id = 'edge_id' not in result4
785
+ self.results['native']['EDGE_UUID_RETURNED'] = has_uuid and no_edge_id
786
+ print(f" [{'PASS' if has_uuid and no_edge_id else 'FAIL'}] CREATE EDGE returns UUID (no edge_id)")
787
+
788
+ # Verify nodes can be found by UUID
789
+ if self.created_node_uuids:
790
+ all_nodes = self.graph.get_all_nodes()
791
+ found_by_uuid = False
792
+ for node in all_nodes:
793
+ if node.properties.get('uuid') == self.created_node_uuids[0]:
794
+ found_by_uuid = True
795
+ break
796
+ self.results['native']['FIND_BY_UUID'] = found_by_uuid
797
+ print(f" [{'PASS' if found_by_uuid else 'FAIL'}] Can find node by UUID from properties")
798
+
799
+ # ========================================================================
800
+ # Print Summary
801
+ # ========================================================================
802
+ self.print_summary()
803
+
804
+ def print_summary(self):
805
+ """Print test summary."""
806
+ print("\n" + "=" * 80)
807
+ print("TEST SUMMARY")
808
+ print("=" * 80)
809
+
810
+ # Native results
811
+ native_passed = sum(1 for v in self.results['native'].values() if v is True)
812
+ native_failed = sum(1 for v in self.results['native'].values() if v is False)
813
+ native_total = len([v for v in self.results['native'].values() if v is not None])
814
+ native_skipped = sum(1 for v in self.results['native'].values() if v is None)
815
+
816
+ print(f"\nNative Execution:")
817
+ print(f" Passed: {native_passed}/{native_total}")
818
+ print(f" Failed: {native_failed}/{native_total}")
819
+ if native_skipped > 0:
820
+ print(f" Skipped: {native_skipped}")
821
+ print(f" Success Rate: {(native_passed*100//native_total) if native_total > 0 else 0}%")
822
+
823
+ # API results
824
+ api_passed = sum(1 for v in self.results['api'].values() if v is True)
825
+ api_failed = sum(1 for v in self.results['api'].values() if v is False)
826
+ api_total = len([v for v in self.results['api'].values() if v is not None])
827
+ api_skipped = sum(1 for v in self.results['api'].values() if v is None)
828
+
829
+ print(f"\nAPI Execution:")
830
+ print(f" Passed: {api_passed}/{api_total}")
831
+ print(f" Failed: {api_failed}/{api_total}")
832
+ if api_skipped > 0:
833
+ print(f" Skipped: {api_skipped} (API server not running)")
834
+ print(f" Note: Start API server with: python -m contextsynapse.api.server")
835
+ if api_total > 0:
836
+ print(f" Success Rate: {(api_passed*100//api_total)}%")
837
+
838
+ # Group results by category
839
+ categories = {
840
+ 'CREATE': ['CREATE_NODE', 'CREATE_EDGE', 'CREATE_GRAPH', 'CREATE_COLLECTION', 'CREATE_INDEX'],
841
+ 'SELECT': ['SELECT', 'SELECT_COUNT', 'SELECT_WHERE', 'SELECT_ORDER_BY', 'SELECT_GROUP_BY'],
842
+ 'UPDATE': ['UPDATE_NODE', 'UPDATE_EDGE'],
843
+ 'DELETE': ['DELETE_NODE', 'DELETE_EDGE'],
844
+ 'MATCH': ['MATCH_NODE', 'MATCH_PATTERN', 'MATCH_RETURN', 'MATCH_WHERE'],
845
+ 'TRAVERSE': ['TRAVERSE', 'TRAVERSE_FROM', 'TRAVERSE_DEPTH', 'TRAVERSE_VIA'],
846
+ 'SEARCH': ['DENSE_SEARCH', 'SPARSE_SEARCH', 'HYBRID_SEARCH', 'SEMANTIC_SEARCH', 'GRAPH_SEARCH'],
847
+ 'RAG': ['RAG_QUERY', 'RAG_GENERATE'],
848
+ 'ANALYTICS': ['PAGERANK', 'SHORTEST_PATH', 'COMMUNITY_DETECTION', 'GRAPH_SUMMARY', 'HOP_QUERY'],
849
+ 'NAMESPACE': ['SHOW_NAMESPACES', 'SHOW_GRAPHS', 'SHOW_COLLECTIONS', 'SHOW_PIPELINES'],
850
+ 'OTHER': ['MERGE_NODE', 'LET_VARIABLE', 'NEIGHBORS', 'AGGREGATE']
851
+ }
852
+
853
+ print(f"\n" + "=" * 80)
854
+ print("QUERY TYPE COVERAGE")
855
+ print("=" * 80)
856
+
857
+ for category, patterns in categories.items():
858
+ category_tests = [k for k in self.results['native'].keys()
859
+ if any(p in k for p in patterns)]
860
+ if category_tests:
861
+ passed = sum(1 for k in category_tests if self.results['native'].get(k) is True)
862
+ total = len([k for k in category_tests if self.results['native'].get(k) is not None])
863
+ print(f"\n{category}: {passed}/{total} passed")
864
+
865
+ # Detailed results
866
+ print(f"\n" + "=" * 80)
867
+ print("DETAILED RESULTS")
868
+ print("=" * 80)
869
+ print(f"\nNative:")
870
+ for test_name, result in sorted(self.results['native'].items()):
871
+ status = "[PASS]" if result is True else "[FAIL]" if result is False else "[SKIP]"
872
+ print(f" {status} {test_name}")
873
+
874
+ if api_total > 0:
875
+ print(f"\nAPI:")
876
+ for test_name, result in sorted(self.results['api'].items()):
877
+ status = "[PASS]" if result is True else "[FAIL]" if result is False else "[SKIP]"
878
+ print(f" {status} {test_name}")
879
+
880
+ print("\n" + "=" * 80)
881
+ print("QUERY TYPES TESTED")
882
+ print("=" * 80)
883
+ print("""
884
+ 1. CREATE Operations: NODE, EDGE, GRAPH, COLLECTION, INDEX
885
+ 2. SELECT Queries: Basic, WHERE, LIMIT, COUNT, ORDER BY, GROUP BY, Aggregations
886
+ 3. UPDATE Operations: NODE, EDGE
887
+ 4. DELETE Operations: NODE, EDGE
888
+ 5. MATCH Queries: NODE, Pattern matching, RETURN, WHERE
889
+ 6. TRAVERSE Queries: FROM, VIA, DEPTH, MAX DEPTH, WHERE
890
+ 7. Search Queries: DENSE, SPARSE, HYBRID, SEMANTIC, GRAPH
891
+ 8. RAG Queries: Simple RAG, RAG GENERATE
892
+ 9. Analytics: PAGERANK, SHORTEST_PATH, COMMUNITY_DETECTION, GRAPH SUMMARY, HOP
893
+ 10. Variable Declarations: LET
894
+ 11. MERGE Operations: MERGE NODE
895
+ 12. NEIGHBORS Queries
896
+ 13. Namespace Operations: SHOW NAMESPACES, GRAPHS, COLLECTIONS, PIPELINES
897
+ 14. Statistics: SHOW STATS, DESCRIBE
898
+ 15. Transaction Operations: BEGIN, COMMIT
899
+ 16. Aggregation: COUNT, SUM, AVG, MIN, MAX
900
+ """)
901
+
902
+ print("=" * 80)
903
+
904
+ # Overall success
905
+ overall_success = native_passed == native_total
906
+ if api_total > 0:
907
+ overall_success = overall_success and (api_passed == api_total)
908
+
909
+ return overall_success
910
+
911
+
912
+ def main():
913
+ """Run comprehensive AIQL query tests."""
914
+ parser = argparse.ArgumentParser(description='Test all AIQL queries (native and/or API)')
915
+ parser.add_argument('--native-only', action='store_true',
916
+ help='Test only native execution (skip API tests)')
917
+ parser.add_argument('--api-only', action='store_true',
918
+ help='Test only API execution (skip native tests)')
919
+ parser.add_argument('--api-url', default='http://localhost:8000',
920
+ help='API server URL (default: http://localhost:8000)')
921
+ parser.add_argument('--namespace', default='test_all_queries',
922
+ help='Test namespace (default: test_all_queries)')
923
+
924
+ args = parser.parse_args()
925
+
926
+ if args.native_only and args.api_only:
927
+ print("[ERROR] Cannot specify both --native-only and --api-only")
928
+ sys.exit(1)
929
+
930
+ tester = AIQLQueryTester(
931
+ namespace=args.namespace,
932
+ api_url=args.api_url,
933
+ test_native_only=args.native_only,
934
+ test_api_only=args.api_only
935
+ )
936
+
937
+ try:
938
+ success = tester.run_all_tests()
939
+ sys.exit(0 if success else 1)
940
+ except Exception as e:
941
+ print(f"\n[ERROR] Test suite failed with exception: {e}")
942
+ import traceback
943
+ traceback.print_exc()
944
+ sys.exit(1)
945
+
946
+
947
+ if __name__ == "__main__":
948
+ main()