flowquery 1.0.46 → 1.0.48

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 (422) hide show
  1. package/dist/flowquery.min.js +1 -1
  2. package/dist/index.d.ts +0 -7
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +6 -4
  5. package/dist/index.js.map +1 -1
  6. package/dist/parsing/data_structures/list_comprehension.d.ts +56 -0
  7. package/dist/parsing/data_structures/list_comprehension.d.ts.map +1 -0
  8. package/dist/parsing/data_structures/list_comprehension.js +102 -0
  9. package/dist/parsing/data_structures/list_comprehension.js.map +1 -0
  10. package/dist/parsing/parser.d.ts +18 -0
  11. package/dist/parsing/parser.d.ts.map +1 -1
  12. package/dist/parsing/parser.js +92 -0
  13. package/dist/parsing/parser.js.map +1 -1
  14. package/package.json +4 -1
  15. package/.editorconfig +0 -21
  16. package/.gitattributes +0 -3
  17. package/.github/workflows/npm-publish.yml +0 -32
  18. package/.github/workflows/python-publish.yml +0 -143
  19. package/.github/workflows/release.yml +0 -107
  20. package/.husky/pre-commit +0 -28
  21. package/.prettierrc +0 -22
  22. package/CODE_OF_CONDUCT.md +0 -10
  23. package/FlowQueryLogoIcon.png +0 -0
  24. package/SECURITY.md +0 -14
  25. package/SUPPORT.md +0 -13
  26. package/docs/flowquery.min.js +0 -1
  27. package/docs/index.html +0 -105
  28. package/flowquery-py/CONTRIBUTING.md +0 -127
  29. package/flowquery-py/README.md +0 -67
  30. package/flowquery-py/misc/data/test.json +0 -10
  31. package/flowquery-py/misc/data/users.json +0 -242
  32. package/flowquery-py/notebooks/TestFlowQuery.ipynb +0 -440
  33. package/flowquery-py/pyproject.toml +0 -121
  34. package/flowquery-py/setup_env.ps1 +0 -92
  35. package/flowquery-py/setup_env.sh +0 -87
  36. package/flowquery-py/src/__init__.py +0 -38
  37. package/flowquery-py/src/__main__.py +0 -10
  38. package/flowquery-py/src/compute/__init__.py +0 -6
  39. package/flowquery-py/src/compute/flowquery.py +0 -68
  40. package/flowquery-py/src/compute/runner.py +0 -64
  41. package/flowquery-py/src/extensibility.py +0 -52
  42. package/flowquery-py/src/graph/__init__.py +0 -31
  43. package/flowquery-py/src/graph/data.py +0 -136
  44. package/flowquery-py/src/graph/database.py +0 -141
  45. package/flowquery-py/src/graph/hops.py +0 -43
  46. package/flowquery-py/src/graph/node.py +0 -143
  47. package/flowquery-py/src/graph/node_data.py +0 -26
  48. package/flowquery-py/src/graph/node_reference.py +0 -50
  49. package/flowquery-py/src/graph/pattern.py +0 -115
  50. package/flowquery-py/src/graph/pattern_expression.py +0 -67
  51. package/flowquery-py/src/graph/patterns.py +0 -42
  52. package/flowquery-py/src/graph/physical_node.py +0 -41
  53. package/flowquery-py/src/graph/physical_relationship.py +0 -36
  54. package/flowquery-py/src/graph/relationship.py +0 -193
  55. package/flowquery-py/src/graph/relationship_data.py +0 -36
  56. package/flowquery-py/src/graph/relationship_match_collector.py +0 -85
  57. package/flowquery-py/src/graph/relationship_reference.py +0 -21
  58. package/flowquery-py/src/io/__init__.py +0 -5
  59. package/flowquery-py/src/io/command_line.py +0 -108
  60. package/flowquery-py/src/parsing/__init__.py +0 -17
  61. package/flowquery-py/src/parsing/alias.py +0 -20
  62. package/flowquery-py/src/parsing/alias_option.py +0 -11
  63. package/flowquery-py/src/parsing/ast_node.py +0 -147
  64. package/flowquery-py/src/parsing/base_parser.py +0 -84
  65. package/flowquery-py/src/parsing/components/__init__.py +0 -19
  66. package/flowquery-py/src/parsing/components/csv.py +0 -8
  67. package/flowquery-py/src/parsing/components/from_.py +0 -12
  68. package/flowquery-py/src/parsing/components/headers.py +0 -12
  69. package/flowquery-py/src/parsing/components/json.py +0 -8
  70. package/flowquery-py/src/parsing/components/null.py +0 -10
  71. package/flowquery-py/src/parsing/components/post.py +0 -8
  72. package/flowquery-py/src/parsing/components/text.py +0 -8
  73. package/flowquery-py/src/parsing/context.py +0 -50
  74. package/flowquery-py/src/parsing/data_structures/__init__.py +0 -15
  75. package/flowquery-py/src/parsing/data_structures/associative_array.py +0 -41
  76. package/flowquery-py/src/parsing/data_structures/json_array.py +0 -30
  77. package/flowquery-py/src/parsing/data_structures/key_value_pair.py +0 -38
  78. package/flowquery-py/src/parsing/data_structures/lookup.py +0 -51
  79. package/flowquery-py/src/parsing/data_structures/range_lookup.py +0 -42
  80. package/flowquery-py/src/parsing/expressions/__init__.py +0 -61
  81. package/flowquery-py/src/parsing/expressions/boolean.py +0 -20
  82. package/flowquery-py/src/parsing/expressions/expression.py +0 -141
  83. package/flowquery-py/src/parsing/expressions/expression_map.py +0 -26
  84. package/flowquery-py/src/parsing/expressions/f_string.py +0 -27
  85. package/flowquery-py/src/parsing/expressions/identifier.py +0 -21
  86. package/flowquery-py/src/parsing/expressions/number.py +0 -32
  87. package/flowquery-py/src/parsing/expressions/operator.py +0 -271
  88. package/flowquery-py/src/parsing/expressions/reference.py +0 -47
  89. package/flowquery-py/src/parsing/expressions/string.py +0 -27
  90. package/flowquery-py/src/parsing/functions/__init__.py +0 -127
  91. package/flowquery-py/src/parsing/functions/aggregate_function.py +0 -60
  92. package/flowquery-py/src/parsing/functions/async_function.py +0 -65
  93. package/flowquery-py/src/parsing/functions/avg.py +0 -55
  94. package/flowquery-py/src/parsing/functions/coalesce.py +0 -43
  95. package/flowquery-py/src/parsing/functions/collect.py +0 -75
  96. package/flowquery-py/src/parsing/functions/count.py +0 -79
  97. package/flowquery-py/src/parsing/functions/date_.py +0 -61
  98. package/flowquery-py/src/parsing/functions/datetime_.py +0 -62
  99. package/flowquery-py/src/parsing/functions/duration.py +0 -159
  100. package/flowquery-py/src/parsing/functions/element_id.py +0 -50
  101. package/flowquery-py/src/parsing/functions/function.py +0 -68
  102. package/flowquery-py/src/parsing/functions/function_factory.py +0 -170
  103. package/flowquery-py/src/parsing/functions/function_metadata.py +0 -148
  104. package/flowquery-py/src/parsing/functions/functions.py +0 -67
  105. package/flowquery-py/src/parsing/functions/head.py +0 -39
  106. package/flowquery-py/src/parsing/functions/id_.py +0 -49
  107. package/flowquery-py/src/parsing/functions/join.py +0 -49
  108. package/flowquery-py/src/parsing/functions/keys.py +0 -34
  109. package/flowquery-py/src/parsing/functions/last.py +0 -39
  110. package/flowquery-py/src/parsing/functions/localdatetime.py +0 -60
  111. package/flowquery-py/src/parsing/functions/localtime.py +0 -57
  112. package/flowquery-py/src/parsing/functions/max_.py +0 -49
  113. package/flowquery-py/src/parsing/functions/min_.py +0 -49
  114. package/flowquery-py/src/parsing/functions/nodes.py +0 -48
  115. package/flowquery-py/src/parsing/functions/predicate_function.py +0 -47
  116. package/flowquery-py/src/parsing/functions/predicate_sum.py +0 -49
  117. package/flowquery-py/src/parsing/functions/properties.py +0 -50
  118. package/flowquery-py/src/parsing/functions/rand.py +0 -28
  119. package/flowquery-py/src/parsing/functions/range_.py +0 -41
  120. package/flowquery-py/src/parsing/functions/reducer_element.py +0 -15
  121. package/flowquery-py/src/parsing/functions/relationships.py +0 -46
  122. package/flowquery-py/src/parsing/functions/replace.py +0 -39
  123. package/flowquery-py/src/parsing/functions/round_.py +0 -34
  124. package/flowquery-py/src/parsing/functions/schema.py +0 -40
  125. package/flowquery-py/src/parsing/functions/size.py +0 -34
  126. package/flowquery-py/src/parsing/functions/split.py +0 -54
  127. package/flowquery-py/src/parsing/functions/string_distance.py +0 -92
  128. package/flowquery-py/src/parsing/functions/stringify.py +0 -49
  129. package/flowquery-py/src/parsing/functions/substring.py +0 -76
  130. package/flowquery-py/src/parsing/functions/sum.py +0 -51
  131. package/flowquery-py/src/parsing/functions/tail.py +0 -37
  132. package/flowquery-py/src/parsing/functions/temporal_utils.py +0 -186
  133. package/flowquery-py/src/parsing/functions/time_.py +0 -57
  134. package/flowquery-py/src/parsing/functions/timestamp.py +0 -37
  135. package/flowquery-py/src/parsing/functions/to_float.py +0 -46
  136. package/flowquery-py/src/parsing/functions/to_integer.py +0 -46
  137. package/flowquery-py/src/parsing/functions/to_json.py +0 -35
  138. package/flowquery-py/src/parsing/functions/to_lower.py +0 -37
  139. package/flowquery-py/src/parsing/functions/to_string.py +0 -41
  140. package/flowquery-py/src/parsing/functions/trim.py +0 -37
  141. package/flowquery-py/src/parsing/functions/type_.py +0 -47
  142. package/flowquery-py/src/parsing/functions/value_holder.py +0 -24
  143. package/flowquery-py/src/parsing/logic/__init__.py +0 -15
  144. package/flowquery-py/src/parsing/logic/case.py +0 -28
  145. package/flowquery-py/src/parsing/logic/else_.py +0 -12
  146. package/flowquery-py/src/parsing/logic/end.py +0 -8
  147. package/flowquery-py/src/parsing/logic/then.py +0 -12
  148. package/flowquery-py/src/parsing/logic/when.py +0 -12
  149. package/flowquery-py/src/parsing/operations/__init__.py +0 -46
  150. package/flowquery-py/src/parsing/operations/aggregated_return.py +0 -25
  151. package/flowquery-py/src/parsing/operations/aggregated_with.py +0 -22
  152. package/flowquery-py/src/parsing/operations/call.py +0 -73
  153. package/flowquery-py/src/parsing/operations/create_node.py +0 -35
  154. package/flowquery-py/src/parsing/operations/create_relationship.py +0 -35
  155. package/flowquery-py/src/parsing/operations/delete_node.py +0 -29
  156. package/flowquery-py/src/parsing/operations/delete_relationship.py +0 -29
  157. package/flowquery-py/src/parsing/operations/group_by.py +0 -148
  158. package/flowquery-py/src/parsing/operations/limit.py +0 -33
  159. package/flowquery-py/src/parsing/operations/load.py +0 -148
  160. package/flowquery-py/src/parsing/operations/match.py +0 -52
  161. package/flowquery-py/src/parsing/operations/operation.py +0 -69
  162. package/flowquery-py/src/parsing/operations/order_by.py +0 -114
  163. package/flowquery-py/src/parsing/operations/projection.py +0 -21
  164. package/flowquery-py/src/parsing/operations/return_op.py +0 -88
  165. package/flowquery-py/src/parsing/operations/union.py +0 -115
  166. package/flowquery-py/src/parsing/operations/union_all.py +0 -17
  167. package/flowquery-py/src/parsing/operations/unwind.py +0 -42
  168. package/flowquery-py/src/parsing/operations/where.py +0 -43
  169. package/flowquery-py/src/parsing/operations/with_op.py +0 -18
  170. package/flowquery-py/src/parsing/parser.py +0 -1384
  171. package/flowquery-py/src/parsing/parser_state.py +0 -26
  172. package/flowquery-py/src/parsing/token_to_node.py +0 -109
  173. package/flowquery-py/src/tokenization/__init__.py +0 -23
  174. package/flowquery-py/src/tokenization/keyword.py +0 -54
  175. package/flowquery-py/src/tokenization/operator.py +0 -29
  176. package/flowquery-py/src/tokenization/string_walker.py +0 -158
  177. package/flowquery-py/src/tokenization/symbol.py +0 -19
  178. package/flowquery-py/src/tokenization/token.py +0 -693
  179. package/flowquery-py/src/tokenization/token_mapper.py +0 -53
  180. package/flowquery-py/src/tokenization/token_type.py +0 -21
  181. package/flowquery-py/src/tokenization/tokenizer.py +0 -214
  182. package/flowquery-py/src/tokenization/trie.py +0 -125
  183. package/flowquery-py/src/utils/__init__.py +0 -6
  184. package/flowquery-py/src/utils/object_utils.py +0 -20
  185. package/flowquery-py/src/utils/string_utils.py +0 -113
  186. package/flowquery-py/tests/__init__.py +0 -1
  187. package/flowquery-py/tests/compute/__init__.py +0 -1
  188. package/flowquery-py/tests/compute/test_runner.py +0 -4902
  189. package/flowquery-py/tests/graph/__init__.py +0 -1
  190. package/flowquery-py/tests/graph/test_create.py +0 -56
  191. package/flowquery-py/tests/graph/test_data.py +0 -73
  192. package/flowquery-py/tests/graph/test_match.py +0 -40
  193. package/flowquery-py/tests/parsing/__init__.py +0 -1
  194. package/flowquery-py/tests/parsing/test_context.py +0 -34
  195. package/flowquery-py/tests/parsing/test_expression.py +0 -248
  196. package/flowquery-py/tests/parsing/test_parser.py +0 -1237
  197. package/flowquery-py/tests/test_extensibility.py +0 -611
  198. package/flowquery-py/tests/tokenization/__init__.py +0 -1
  199. package/flowquery-py/tests/tokenization/test_token_mapper.py +0 -60
  200. package/flowquery-py/tests/tokenization/test_tokenizer.py +0 -198
  201. package/flowquery-py/tests/tokenization/test_trie.py +0 -30
  202. package/flowquery-vscode/.vscode-test.mjs +0 -5
  203. package/flowquery-vscode/.vscodeignore +0 -13
  204. package/flowquery-vscode/LICENSE +0 -21
  205. package/flowquery-vscode/README.md +0 -11
  206. package/flowquery-vscode/demo/FlowQueryVSCodeDemo.gif +0 -0
  207. package/flowquery-vscode/eslint.config.mjs +0 -25
  208. package/flowquery-vscode/extension.js +0 -508
  209. package/flowquery-vscode/flowQueryEngine/flowquery.min.js +0 -1
  210. package/flowquery-vscode/flowquery-worker.js +0 -66
  211. package/flowquery-vscode/images/FlowQueryLogoIcon.png +0 -0
  212. package/flowquery-vscode/jsconfig.json +0 -13
  213. package/flowquery-vscode/libs/page.css +0 -53
  214. package/flowquery-vscode/libs/table.css +0 -13
  215. package/flowquery-vscode/libs/tabs.css +0 -66
  216. package/flowquery-vscode/package-lock.json +0 -2917
  217. package/flowquery-vscode/package.json +0 -51
  218. package/flowquery-vscode/test/extension.test.js +0 -196
  219. package/flowquery-vscode/test/worker.test.js +0 -25
  220. package/flowquery-vscode/vsc-extension-quickstart.md +0 -42
  221. package/jest.config.js +0 -14
  222. package/misc/apps/RAG/README.md +0 -29
  223. package/misc/apps/RAG/data/chats.json +0 -302
  224. package/misc/apps/RAG/data/emails.json +0 -182
  225. package/misc/apps/RAG/data/events.json +0 -226
  226. package/misc/apps/RAG/data/files.json +0 -172
  227. package/misc/apps/RAG/data/users.json +0 -158
  228. package/misc/apps/RAG/jest.config.js +0 -21
  229. package/misc/apps/RAG/package.json +0 -48
  230. package/misc/apps/RAG/public/index.html +0 -18
  231. package/misc/apps/RAG/src/App.css +0 -42
  232. package/misc/apps/RAG/src/App.tsx +0 -50
  233. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.css +0 -172
  234. package/misc/apps/RAG/src/components/AdaptiveCardRenderer.tsx +0 -380
  235. package/misc/apps/RAG/src/components/ApiKeySettings.tsx +0 -245
  236. package/misc/apps/RAG/src/components/ChatContainer.css +0 -67
  237. package/misc/apps/RAG/src/components/ChatContainer.tsx +0 -242
  238. package/misc/apps/RAG/src/components/ChatInput.css +0 -23
  239. package/misc/apps/RAG/src/components/ChatInput.tsx +0 -76
  240. package/misc/apps/RAG/src/components/ChatMessage.css +0 -160
  241. package/misc/apps/RAG/src/components/ChatMessage.tsx +0 -286
  242. package/misc/apps/RAG/src/components/FlowQueryAgent.ts +0 -708
  243. package/misc/apps/RAG/src/components/FlowQueryRunner.css +0 -113
  244. package/misc/apps/RAG/src/components/FlowQueryRunner.tsx +0 -371
  245. package/misc/apps/RAG/src/components/index.ts +0 -28
  246. package/misc/apps/RAG/src/graph/index.ts +0 -19
  247. package/misc/apps/RAG/src/graph/initializeGraph.ts +0 -254
  248. package/misc/apps/RAG/src/index.tsx +0 -29
  249. package/misc/apps/RAG/src/prompts/FlowQuerySystemPrompt.ts +0 -327
  250. package/misc/apps/RAG/src/prompts/index.ts +0 -10
  251. package/misc/apps/RAG/src/tests/graph.test.ts +0 -35
  252. package/misc/apps/RAG/src/utils/FlowQueryExecutor.ts +0 -130
  253. package/misc/apps/RAG/src/utils/FlowQueryExtractor.ts +0 -208
  254. package/misc/apps/RAG/src/utils/Llm.ts +0 -248
  255. package/misc/apps/RAG/src/utils/index.ts +0 -12
  256. package/misc/apps/RAG/tsconfig.json +0 -22
  257. package/misc/apps/RAG/webpack.config.js +0 -43
  258. package/misc/apps/README.md +0 -1
  259. package/misc/queries/analyze_catfacts.cql +0 -75
  260. package/misc/queries/azure_openai_completions.cql +0 -13
  261. package/misc/queries/azure_openai_models.cql +0 -9
  262. package/misc/queries/mock_pipeline.cql +0 -84
  263. package/misc/queries/openai_completions.cql +0 -15
  264. package/misc/queries/openai_models.cql +0 -13
  265. package/misc/queries/test.cql +0 -6
  266. package/misc/queries/tool_inference.cql +0 -24
  267. package/misc/queries/wisdom.cql +0 -6
  268. package/misc/queries/wisdom_letter_histogram.cql +0 -8
  269. package/src/compute/flowquery.ts +0 -46
  270. package/src/compute/runner.ts +0 -66
  271. package/src/extensibility.ts +0 -45
  272. package/src/graph/data.ts +0 -130
  273. package/src/graph/database.ts +0 -143
  274. package/src/graph/hops.ts +0 -22
  275. package/src/graph/node.ts +0 -122
  276. package/src/graph/node_data.ts +0 -18
  277. package/src/graph/node_reference.ts +0 -38
  278. package/src/graph/pattern.ts +0 -110
  279. package/src/graph/pattern_expression.ts +0 -48
  280. package/src/graph/patterns.ts +0 -36
  281. package/src/graph/physical_node.ts +0 -23
  282. package/src/graph/physical_relationship.ts +0 -23
  283. package/src/graph/relationship.ts +0 -167
  284. package/src/graph/relationship_data.ts +0 -31
  285. package/src/graph/relationship_match_collector.ts +0 -64
  286. package/src/graph/relationship_reference.ts +0 -25
  287. package/src/index.browser.ts +0 -46
  288. package/src/index.node.ts +0 -55
  289. package/src/index.ts +0 -12
  290. package/src/io/command_line.ts +0 -74
  291. package/src/parsing/alias.ts +0 -23
  292. package/src/parsing/alias_option.ts +0 -5
  293. package/src/parsing/ast_node.ts +0 -153
  294. package/src/parsing/base_parser.ts +0 -98
  295. package/src/parsing/components/csv.ts +0 -9
  296. package/src/parsing/components/from.ts +0 -12
  297. package/src/parsing/components/headers.ts +0 -12
  298. package/src/parsing/components/json.ts +0 -9
  299. package/src/parsing/components/null.ts +0 -9
  300. package/src/parsing/components/post.ts +0 -9
  301. package/src/parsing/components/text.ts +0 -9
  302. package/src/parsing/context.ts +0 -54
  303. package/src/parsing/data_structures/associative_array.ts +0 -43
  304. package/src/parsing/data_structures/json_array.ts +0 -31
  305. package/src/parsing/data_structures/key_value_pair.ts +0 -37
  306. package/src/parsing/data_structures/lookup.ts +0 -44
  307. package/src/parsing/data_structures/range_lookup.ts +0 -36
  308. package/src/parsing/expressions/boolean.ts +0 -21
  309. package/src/parsing/expressions/expression.ts +0 -150
  310. package/src/parsing/expressions/expression_map.ts +0 -22
  311. package/src/parsing/expressions/f_string.ts +0 -26
  312. package/src/parsing/expressions/identifier.ts +0 -22
  313. package/src/parsing/expressions/number.ts +0 -40
  314. package/src/parsing/expressions/operator.ts +0 -354
  315. package/src/parsing/expressions/reference.ts +0 -45
  316. package/src/parsing/expressions/string.ts +0 -34
  317. package/src/parsing/functions/aggregate_function.ts +0 -58
  318. package/src/parsing/functions/async_function.ts +0 -64
  319. package/src/parsing/functions/avg.ts +0 -47
  320. package/src/parsing/functions/coalesce.ts +0 -49
  321. package/src/parsing/functions/collect.ts +0 -54
  322. package/src/parsing/functions/count.ts +0 -54
  323. package/src/parsing/functions/date.ts +0 -63
  324. package/src/parsing/functions/datetime.ts +0 -63
  325. package/src/parsing/functions/duration.ts +0 -143
  326. package/src/parsing/functions/element_id.ts +0 -51
  327. package/src/parsing/functions/function.ts +0 -60
  328. package/src/parsing/functions/function_factory.ts +0 -195
  329. package/src/parsing/functions/function_metadata.ts +0 -217
  330. package/src/parsing/functions/functions.ts +0 -70
  331. package/src/parsing/functions/head.ts +0 -42
  332. package/src/parsing/functions/id.ts +0 -51
  333. package/src/parsing/functions/join.ts +0 -40
  334. package/src/parsing/functions/keys.ts +0 -29
  335. package/src/parsing/functions/last.ts +0 -42
  336. package/src/parsing/functions/localdatetime.ts +0 -63
  337. package/src/parsing/functions/localtime.ts +0 -58
  338. package/src/parsing/functions/max.ts +0 -37
  339. package/src/parsing/functions/min.ts +0 -37
  340. package/src/parsing/functions/nodes.ts +0 -54
  341. package/src/parsing/functions/predicate_function.ts +0 -48
  342. package/src/parsing/functions/predicate_sum.ts +0 -47
  343. package/src/parsing/functions/properties.ts +0 -56
  344. package/src/parsing/functions/rand.ts +0 -21
  345. package/src/parsing/functions/range.ts +0 -37
  346. package/src/parsing/functions/reducer_element.ts +0 -10
  347. package/src/parsing/functions/relationships.ts +0 -52
  348. package/src/parsing/functions/replace.ts +0 -38
  349. package/src/parsing/functions/round.ts +0 -28
  350. package/src/parsing/functions/schema.ts +0 -39
  351. package/src/parsing/functions/size.ts +0 -28
  352. package/src/parsing/functions/split.ts +0 -45
  353. package/src/parsing/functions/string_distance.ts +0 -83
  354. package/src/parsing/functions/stringify.ts +0 -37
  355. package/src/parsing/functions/substring.ts +0 -68
  356. package/src/parsing/functions/sum.ts +0 -41
  357. package/src/parsing/functions/tail.ts +0 -39
  358. package/src/parsing/functions/temporal_utils.ts +0 -180
  359. package/src/parsing/functions/time.ts +0 -58
  360. package/src/parsing/functions/timestamp.ts +0 -37
  361. package/src/parsing/functions/to_float.ts +0 -50
  362. package/src/parsing/functions/to_integer.ts +0 -50
  363. package/src/parsing/functions/to_json.ts +0 -28
  364. package/src/parsing/functions/to_lower.ts +0 -28
  365. package/src/parsing/functions/to_string.ts +0 -32
  366. package/src/parsing/functions/trim.ts +0 -28
  367. package/src/parsing/functions/type.ts +0 -39
  368. package/src/parsing/functions/value_holder.ts +0 -13
  369. package/src/parsing/logic/case.ts +0 -26
  370. package/src/parsing/logic/else.ts +0 -12
  371. package/src/parsing/logic/end.ts +0 -9
  372. package/src/parsing/logic/then.ts +0 -12
  373. package/src/parsing/logic/when.ts +0 -12
  374. package/src/parsing/operations/aggregated_return.ts +0 -22
  375. package/src/parsing/operations/aggregated_with.ts +0 -18
  376. package/src/parsing/operations/call.ts +0 -69
  377. package/src/parsing/operations/create_node.ts +0 -39
  378. package/src/parsing/operations/create_relationship.ts +0 -38
  379. package/src/parsing/operations/delete_node.ts +0 -33
  380. package/src/parsing/operations/delete_relationship.ts +0 -32
  381. package/src/parsing/operations/group_by.ts +0 -137
  382. package/src/parsing/operations/limit.ts +0 -31
  383. package/src/parsing/operations/load.ts +0 -146
  384. package/src/parsing/operations/match.ts +0 -54
  385. package/src/parsing/operations/operation.ts +0 -69
  386. package/src/parsing/operations/order_by.ts +0 -126
  387. package/src/parsing/operations/projection.ts +0 -18
  388. package/src/parsing/operations/return.ts +0 -76
  389. package/src/parsing/operations/union.ts +0 -114
  390. package/src/parsing/operations/union_all.ts +0 -16
  391. package/src/parsing/operations/unwind.ts +0 -36
  392. package/src/parsing/operations/where.ts +0 -42
  393. package/src/parsing/operations/with.ts +0 -20
  394. package/src/parsing/parser.ts +0 -1641
  395. package/src/parsing/parser_state.ts +0 -25
  396. package/src/parsing/token_to_node.ts +0 -114
  397. package/src/tokenization/keyword.ts +0 -50
  398. package/src/tokenization/operator.ts +0 -25
  399. package/src/tokenization/string_walker.ts +0 -197
  400. package/src/tokenization/symbol.ts +0 -15
  401. package/src/tokenization/token.ts +0 -764
  402. package/src/tokenization/token_mapper.ts +0 -53
  403. package/src/tokenization/token_type.ts +0 -16
  404. package/src/tokenization/tokenizer.ts +0 -250
  405. package/src/tokenization/trie.ts +0 -117
  406. package/src/utils/object_utils.ts +0 -17
  407. package/src/utils/string_utils.ts +0 -114
  408. package/tests/compute/runner.test.ts +0 -4559
  409. package/tests/extensibility.test.ts +0 -643
  410. package/tests/graph/create.test.ts +0 -36
  411. package/tests/graph/data.test.ts +0 -58
  412. package/tests/graph/match.test.ts +0 -29
  413. package/tests/parsing/context.test.ts +0 -27
  414. package/tests/parsing/expression.test.ts +0 -303
  415. package/tests/parsing/parser.test.ts +0 -1327
  416. package/tests/tokenization/token_mapper.test.ts +0 -47
  417. package/tests/tokenization/tokenizer.test.ts +0 -191
  418. package/tests/tokenization/trie.test.ts +0 -20
  419. package/tsconfig.json +0 -19
  420. package/typedoc.json +0 -16
  421. package/vscode-settings.json.recommended +0 -16
  422. package/webpack.config.js +0 -26
@@ -1,254 +0,0 @@
1
- /**
2
- * Graph Initialization Module
3
- *
4
- * Models the JSON data files as a virtual FlowQuery graph.
5
- * Creates virtual nodes and relationships using FlowQuery Cypher.
6
- * Uses native LOAD JSON FROM to read data from the /data/ endpoint.
7
- */
8
- import FlowQuery from "flowquery";
9
-
10
- /**
11
- * Initializes the virtual FlowQuery graph with data from JSON files.
12
- * Creates nodes for: User, Chat, Email, Event, File
13
- * Creates relationships connecting them based on the data.
14
- */
15
- export async function initializeGraph(): Promise<void> {
16
- console.log("Initializing FlowQuery graph...");
17
-
18
- // Create all nodes
19
- await createUserNodes();
20
- await createChatNodes();
21
- await createEmailNodes();
22
- await createEventNodes();
23
- await createFileNodes();
24
-
25
- // Create relationships
26
- await createUserManagesRelationships();
27
- await createChatMemberRelationships();
28
- await createEmailSentByRelationships();
29
- await createEmailReceivedByRelationships();
30
- await createEventOrganizerRelationships();
31
- await createEventAttendeeRelationships();
32
- await createFileCreatedByRelationships();
33
- await createFileSharedWithRelationships();
34
- await createEmailAttachmentRelationships();
35
- await createEventFileRelationships();
36
- await createEventEmailRelationships();
37
-
38
- console.log("FlowQuery graph initialized successfully.");
39
- }
40
-
41
- // ============ Node Creation Functions ============
42
-
43
- async function createUserNodes(): Promise<void> {
44
- const runner = new FlowQuery(`
45
- CREATE VIRTUAL (:User) AS {
46
- LOAD JSON FROM '/data/users.json' AS user
47
- RETURN
48
- user.id AS id, user.displayName AS displayName, user.mail AS mail,
49
- user.jobTitle AS jobTitle, user.department AS department,
50
- user.officeLocation AS officeLocation, user.managerId AS managerId,
51
- user.directReports AS directReports, user.hireDate AS hireDate,
52
- user.skills AS skills, user.phone AS phone
53
- }
54
- `);
55
- await runner.run();
56
- console.log("Created User nodes");
57
- }
58
-
59
- async function createChatNodes(): Promise<void> {
60
- const runner = new FlowQuery(`
61
- CREATE VIRTUAL (:Chat) AS {
62
- LOAD JSON FROM '/data/chats.json' AS chat
63
- RETURN chat.id AS id, chat.topic AS topic, chat.type AS type,
64
- chat.teamName AS teamName, chat.members AS members, chat.messages AS messages
65
- }
66
- `);
67
- await runner.run();
68
- console.log("Created Chat nodes");
69
- }
70
-
71
- async function createEmailNodes(): Promise<void> {
72
- const runner = new FlowQuery(`
73
- CREATE VIRTUAL (:Email) AS {
74
- LOAD JSON FROM '/data/emails.json' AS email
75
- RETURN
76
- email.id AS id, email.subject AS subject, email.from AS fromUser,
77
- email.to AS toUsers, email.cc AS cc, email.receivedDateTime AS receivedDateTime,
78
- email.body AS body, email.importance AS importance,
79
- email.hasAttachments AS hasAttachments, email.attachments AS attachments,
80
- email.isRead AS isRead, email.conversationId AS conversationId,
81
- email.categories AS categories
82
- }
83
- `);
84
- await runner.run();
85
- console.log("Created Email nodes");
86
- }
87
-
88
- async function createEventNodes(): Promise<void> {
89
- const runner = new FlowQuery(`
90
- CREATE VIRTUAL (:Event) AS {
91
- LOAD JSON FROM '/data/events.json' AS event
92
- RETURN
93
- event.id AS id, event.subject AS subject, event.organizer AS organizer,
94
- event.attendees AS attendees, event.start AS start, event.end AS end,
95
- event.location AS location, event.isOnline AS isOnline,
96
- event.onlineMeetingUrl AS onlineMeetingUrl, event.body AS body,
97
- event.recurrence AS recurrence, event.relatedEmails AS relatedEmails,
98
- event.relatedFiles AS relatedFiles, event.categories AS categories
99
- }
100
- `);
101
- await runner.run();
102
- console.log("Created Event nodes");
103
- }
104
-
105
- async function createFileNodes(): Promise<void> {
106
- const runner = new FlowQuery(`
107
- CREATE VIRTUAL (:File) AS {
108
- LOAD JSON FROM '/data/files.json' AS file
109
- RETURN
110
- file.id AS id, file.name AS name, file.createdBy AS createdBy,
111
- file.createdDateTime AS createdDateTime, file.lastModifiedBy AS lastModifiedBy,
112
- file.lastModifiedDateTime AS lastModifiedDateTime, file.size AS size,
113
- file.mimeType AS mimeType, file.webUrl AS webUrl, file.driveId AS driveId,
114
- file.parentFolder AS parentFolder, file.sharedWith AS sharedWith,
115
- file.relatedEmails AS relatedEmails, file.relatedEvents AS relatedEvents,
116
- file.tags AS tags
117
- }
118
- `);
119
- await runner.run();
120
- console.log("Created File nodes");
121
- }
122
-
123
- // ============ Relationship Creation Functions ============
124
-
125
- async function createUserManagesRelationships(): Promise<void> {
126
- const runner = new FlowQuery(`
127
- CREATE VIRTUAL (:User)-[:MANAGES]-(:User) AS {
128
- LOAD JSON FROM '/data/users.json' AS user
129
- RETURN user.managerId AS left_id, user.id AS right_id
130
- }
131
- `);
132
- await runner.run();
133
- console.log("Created User-[:MANAGES]->User relationships");
134
- }
135
-
136
- async function createChatMemberRelationships(): Promise<void> {
137
- const runner = new FlowQuery(`
138
- CREATE VIRTUAL (:User)-[:MEMBER_OF]-(:Chat) AS {
139
- LOAD JSON FROM '/data/chats.json' AS chat
140
- UNWIND chat.members AS memberId
141
- RETURN memberId AS left_id, chat.id AS right_id
142
- }
143
- `);
144
- await runner.run();
145
- console.log("Created User-[:MEMBER_OF]->Chat relationships");
146
- }
147
-
148
- async function createEmailSentByRelationships(): Promise<void> {
149
- const runner = new FlowQuery(`
150
- CREATE VIRTUAL (:User)-[:SENT]-(:Email) AS {
151
- LOAD JSON FROM '/data/emails.json' AS email
152
- RETURN email.from AS left_id, email.id AS right_id
153
- }
154
- `);
155
- await runner.run();
156
- console.log("Created User-[:SENT]->Email relationships");
157
- }
158
-
159
- async function createEmailReceivedByRelationships(): Promise<void> {
160
- const runner = new FlowQuery(`
161
- CREATE VIRTUAL (:Email)-[:RECEIVED_BY]-(:User) AS {
162
- LOAD JSON FROM '/data/emails.json' AS email
163
- UNWIND email.to AS recipient
164
- RETURN email.id AS left_id, recipient AS right_id
165
- }
166
- `);
167
- await runner.run();
168
- console.log("Created Email-[:RECEIVED_BY]->User relationships");
169
- }
170
-
171
- async function createEventOrganizerRelationships(): Promise<void> {
172
- const runner = new FlowQuery(`
173
- CREATE VIRTUAL (:User)-[:ORGANIZES]-(:Event) AS {
174
- LOAD JSON FROM '/data/events.json' AS event
175
- RETURN event.organizer AS left_id, event.id AS right_id
176
- }
177
- `);
178
- await runner.run();
179
- console.log("Created User-[:ORGANIZES]->Event relationships");
180
- }
181
-
182
- async function createEventAttendeeRelationships(): Promise<void> {
183
- const runner = new FlowQuery(`
184
- CREATE VIRTUAL (:User)-[:ATTENDS]-(:Event) AS {
185
- LOAD JSON FROM '/data/events.json' AS event
186
- UNWIND event.attendees AS attendee
187
- RETURN attendee.userId AS left_id, event.id AS right_id
188
- }
189
- `);
190
- await runner.run();
191
- console.log("Created User-[:ATTENDS]->Event relationships");
192
- }
193
-
194
- async function createFileCreatedByRelationships(): Promise<void> {
195
- const runner = new FlowQuery(`
196
- CREATE VIRTUAL (:User)-[:CREATED]-(:File) AS {
197
- LOAD JSON FROM '/data/files.json' AS file
198
- RETURN file.createdBy AS left_id, file.id AS right_id
199
- }
200
- `);
201
- await runner.run();
202
- console.log("Created User-[:CREATED]->File relationships");
203
- }
204
-
205
- async function createFileSharedWithRelationships(): Promise<void> {
206
- const runner = new FlowQuery(`
207
- CREATE VIRTUAL (:File)-[:SHARED_WITH]-(:User) AS {
208
- LOAD JSON FROM '/data/files.json' AS file
209
- UNWIND file.sharedWith AS userId
210
- RETURN file.id AS left_id, userId AS right_id
211
- }
212
- `);
213
- await runner.run();
214
- console.log("Created File-[:SHARED_WITH]->User relationships");
215
- }
216
-
217
- async function createEmailAttachmentRelationships(): Promise<void> {
218
- const runner = new FlowQuery(`
219
- CREATE VIRTUAL (:Email)-[:HAS_ATTACHMENT]-(:File) AS {
220
- LOAD JSON FROM '/data/emails.json' AS email
221
- WHERE email.hasAttachments = true
222
- UNWIND email.attachments AS fileId
223
- RETURN email.id AS left_id, fileId AS right_id
224
- }
225
- `);
226
- await runner.run();
227
- console.log("Created Email-[:HAS_ATTACHMENT]->File relationships");
228
- }
229
-
230
- async function createEventFileRelationships(): Promise<void> {
231
- const runner = new FlowQuery(`
232
- CREATE VIRTUAL (:Event)-[:RELATED_TO_FILE]-(:File) AS {
233
- LOAD JSON FROM '/data/events.json' AS event
234
- UNWIND event.relatedFiles AS fileId
235
- WHERE fileId IS NOT NULL
236
- RETURN event.id AS left_id, fileId AS right_id
237
- }
238
- `);
239
- await runner.run();
240
- console.log("Created Event-[:RELATED_TO_FILE]->File relationships");
241
- }
242
-
243
- async function createEventEmailRelationships(): Promise<void> {
244
- const runner = new FlowQuery(`
245
- CREATE VIRTUAL (:Event)-[:RELATED_TO_EMAIL]-(:Email) AS {
246
- LOAD JSON FROM '/data/events.json' AS event
247
- UNWIND event.relatedEmails AS emailId
248
- WHERE emailId IS NOT NULL
249
- RETURN event.id AS left_id, emailId AS right_id
250
- }
251
- `);
252
- await runner.run();
253
- console.log("Created Event-[:RELATED_TO_EMAIL]->Email relationships");
254
- }
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
- import { createRoot } from 'react-dom/client';
3
- import App from './App';
4
- import { initializeGraph } from './graph';
5
-
6
- // Initialize the FlowQuery graph and then render the app
7
- initializeGraph().then(() => {
8
- const container = document.getElementById('root');
9
- if (container) {
10
- const root = createRoot(container);
11
- root.render(
12
- <React.StrictMode>
13
- <App />
14
- </React.StrictMode>
15
- );
16
- }
17
- }).catch((error) => {
18
- console.error('Failed to initialize FlowQuery graph:', error);
19
- // Still render the app even if graph initialization fails
20
- const container = document.getElementById('root');
21
- if (container) {
22
- const root = createRoot(container);
23
- root.render(
24
- <React.StrictMode>
25
- <App />
26
- </React.StrictMode>
27
- );
28
- }
29
- });
@@ -1,327 +0,0 @@
1
- /**
2
- * FlowQuery System Prompt Generator
3
- *
4
- * Generates a system prompt that instructs the LLM to create FlowQuery statements
5
- * based on natural language queries, with awareness of the graph schema.
6
- *
7
- * Uses FlowQuery's built-in schema() introspection to dynamically discover
8
- * available nodes and relationships in the graph.
9
- */
10
- import { getGraphSchema } from "../graph";
11
-
12
- /**
13
- * FlowQuery language reference documentation.
14
- */
15
- const FLOWQUERY_LANGUAGE_REFERENCE = `
16
- ## FlowQuery Language Reference
17
-
18
- FlowQuery is a Cypher-inspired declarative query language for querying graph data. It uses pattern matching to traverse nodes and relationships.
19
-
20
- ### Graph Query Clauses
21
-
22
- 1. **MATCH** - Match patterns in the graph
23
- \`\`\`
24
- MATCH (n:Person)
25
- MATCH (a:User)-[:KNOWS]-(b:User)
26
- MATCH (user:User)-[:SENT]->(email:Email)
27
- MATCH p=(a:Person)-[:KNOWS*1..3]-(b:Person)
28
- \`\`\`
29
-
30
- 2. **WHERE** - Filter matched patterns
31
- \`\`\`
32
- MATCH (n:Person)
33
- WHERE n.age > 30
34
-
35
- MATCH (a:User)-[:SENT]-(email:Email)
36
- WHERE email.subject CONTAINS 'urgent'
37
- \`\`\`
38
-
39
- 3. **RETURN** - Specify output columns
40
- \`\`\`
41
- RETURN n.name, n.email
42
- RETURN n.name AS Name, n.email AS Email
43
- RETURN n -- Return full node
44
- RETURN * -- Return all matched variables
45
- \`\`\`
46
-
47
- 4. **WITH** - Define intermediate variables or chain queries
48
- \`\`\`
49
- MATCH (n:User)
50
- WITH n, size((n)-[:SENT]->()) AS emailCount
51
- WHERE emailCount > 5
52
- RETURN n.name, emailCount
53
- \`\`\`
54
-
55
- 5. **UNWIND** - Expand arrays into individual rows
56
- \`\`\`
57
- UNWIND [1, 2, 3] AS number
58
- UNWIND n.tags AS tag
59
- \`\`\`
60
-
61
- ### Pattern Syntax
62
-
63
- - **Nodes**: \`(variable:Label)\` or \`(variable)\` or \`(:Label)\`
64
- - **Relationships**: \`-[:TYPE]-\` (undirected), \`-[:TYPE]->\` (outgoing), \`<-[:TYPE]-\` (incoming)
65
- - **Variable-length paths**: \`-[:TYPE*1..3]-\` (1 to 3 hops), \`-[:TYPE*]-\` (any number)
66
- - **Named paths**: \`p=(a)-[:KNOWS]-(b)\`
67
-
68
- ### Examples
69
-
70
- \`\`\`
71
- // Find all users
72
- MATCH (u:User)
73
- RETURN u.name, u.email
74
-
75
- // Find users and their managers
76
- MATCH (user:User)-[:MANAGES]-(manager:User)
77
- RETURN user.name AS Employee, manager.name AS Manager
78
-
79
- // Find emails sent by a specific user
80
- MATCH (u:User)-[:SENT]->(e:Email)
81
- WHERE u.name = 'Alice'
82
- RETURN e.subject, e.sentDate
83
-
84
- // Find chain of relationships
85
- MATCH (a:User)-[:KNOWS*1..2]-(b:User)
86
- WHERE a.name = 'Bob'
87
- RETURN b.name AS Connection
88
- \`\`\`
89
-
90
- ### Built-in Functions
91
-
92
- - **Aggregation**: \`count()\`, \`sum()\`, \`avg()\`, \`min()\`, \`max()\`, \`collect()\`
93
- - **String**: \`size()\`, \`trim()\`, \`toLower()\`, \`toUpper()\`, \`split()\`, \`join()\`, \`replace()\`
94
- - **List**: \`range()\`, \`head()\`, \`tail()\`, \`last()\`, \`size()\`, \`reverse()\`
95
- - **Type**: \`type()\`, \`toInteger()\`, \`toFloat()\`, \`toString()\`
96
- - **Utility**: \`keys()\`, \`properties()\`
97
-
98
- ### F-Strings (Template Literals)
99
-
100
- Use \`f"..."\` for string interpolation:
101
- \`\`\`
102
- MATCH (u:User)
103
- RETURN f"Name: {u.name}, Email: {u.email}" AS info
104
- \`\`\`
105
-
106
- ### Comparison Operators
107
-
108
- - \`=\`, \`<>\` (not equal), \`<\`, \`>\`, \`<=\`, \`>=\`
109
- - \`AND\`, \`OR\`, \`NOT\`
110
- - \`IN\`, \`CONTAINS\`, \`STARTS WITH\`, \`ENDS WITH\`
111
- - \`IS NULL\`, \`IS NOT NULL\`
112
- `;
113
-
114
- /**
115
- * FlowQuery System Prompt Generator class.
116
- * Provides methods to generate various system prompts for LLM interactions.
117
- */
118
- export class FlowQuerySystemPrompt {
119
- /**
120
- * Format the graph schema into readable documentation.
121
- * Accepts raw schema() results: array of { kind, label, type, sample }
122
- */
123
- private static formatSchemaDocumentation(schema: any[]): string {
124
- const sections: string[] = [];
125
-
126
- sections.push("## Graph Schema\n");
127
- sections.push(
128
- "The following nodes and relationships are available in the graph for use with `MATCH` queries:\n"
129
- );
130
-
131
- // Filter nodes and relationships from raw schema results
132
- const nodes = schema.filter((r) => r.kind === "node");
133
- const relationships = schema.filter((r) => r.kind === "relationship");
134
-
135
- // Document nodes
136
- sections.push("### Node Labels\n");
137
- if (nodes.length > 0) {
138
- for (const node of nodes) {
139
- sections.push(`#### \`${node.label}\``);
140
- // Extract properties from sample data
141
- if (node.sample && typeof node.sample === "object") {
142
- const props = Object.entries(node.sample);
143
- if (props.length > 0) {
144
- sections.push("**Properties**:");
145
- for (const [name, value] of props) {
146
- const propType = Array.isArray(value) ? "array" : typeof value;
147
- sections.push(` - \`${name}\`: ${propType}`);
148
- }
149
- }
150
- sections.push(`**Sample**: \`${JSON.stringify(node.sample)}\``);
151
- }
152
- sections.push("");
153
- }
154
- } else {
155
- sections.push("No nodes defined.\n");
156
- }
157
-
158
- // Document relationships
159
- sections.push("### Relationship Types\n");
160
- if (relationships.length > 0) {
161
- for (const rel of relationships) {
162
- sections.push(`#### \`[:${rel.type}]\``);
163
- // Extract properties from sample data
164
- if (rel.sample && typeof rel.sample === "object") {
165
- const props = Object.entries(rel.sample);
166
- if (props.length > 0) {
167
- sections.push("**Properties**:");
168
- for (const [name, value] of props) {
169
- const propType = Array.isArray(value) ? "array" : typeof value;
170
- sections.push(` - \`${name}\`: ${propType}`);
171
- }
172
- }
173
- }
174
- sections.push("");
175
- }
176
- } else {
177
- sections.push("No relationships defined.\n");
178
- }
179
-
180
- return sections.join("\n");
181
- }
182
-
183
- /**
184
- * Internal helper to build the system prompt from schema documentation.
185
- */
186
- private static buildSystemPrompt(schemaDocs: string, additionalContext?: string): string {
187
- return `You are a FlowQuery assistant. Your primary role is to help users by creating and executing FlowQuery statements based on their natural language requests.
188
-
189
- ## How You Work
190
-
191
- You operate in a multi-step process:
192
- 1. **Analyze** the user's natural language request
193
- 2. **Generate** a FlowQuery statement that fulfills the request using the graph schema
194
- 3. The system will **execute** your FlowQuery and provide you with the results
195
- 4. You will then **interpret** the results and present them to the user in a helpful way
196
-
197
- ## Response Format for Query Generation
198
-
199
- When the user makes a request that requires fetching or processing data:
200
- 1. Generate a FlowQuery statement wrapped in a code block with \`\`\`flowquery language tag
201
- 2. Keep any explanation brief - the main focus should be the query
202
- 3. The query will be automatically executed and you'll receive the results
203
-
204
- When the user asks a question that doesn't require data fetching (e.g., asking about FlowQuery syntax or general questions):
205
- 1. Start your response with [NO_QUERY_NEEDED]
206
- 2. Then provide your direct answer
207
-
208
- ## Important Guidelines
209
-
210
- - Only use the nodes and relationships documented in the graph schema below
211
- - Use proper FlowQuery syntax as documented in the language reference
212
- - Use MATCH patterns to query the graph
213
- - Always alias loaded items with \`AS\` for clarity
214
- - Use meaningful aliases in RETURN statements for better readability
215
- - Generate the simplest query that fulfills the user's request
216
- - If you cannot determine what the user needs, ask clarifying questions (with [NO_QUERY_NEEDED])
217
- - Do not use order by or coalesce
218
- - Do not use list comprehension [i for i in ...]
219
- - Do not use substring function
220
- - Do not use limit or skip
221
-
222
- ${FLOWQUERY_LANGUAGE_REFERENCE}
223
-
224
- ${schemaDocs}
225
-
226
- ${additionalContext ? `## Additional Context\n\n${additionalContext}` : ""}
227
-
228
- ## Example Response Format
229
-
230
- **When a query is needed**:
231
- \`\`\`flowquery
232
- MATCH (n:NodeLabel)-[:RELATIONSHIP]-(m:OtherLabel)
233
- WHERE n.property = 'value'
234
- RETURN n.name AS Name, m.value AS Value
235
- \`\`\`
236
-
237
- **When no query is needed** (e.g., general questions about FlowQuery):
238
- [NO_QUERY_NEEDED]
239
- Your direct answer here...
240
-
241
- Now help the user with their request.`;
242
- }
243
-
244
- /**
245
- * Generate the complete FlowQuery system prompt.
246
- * Uses FlowQuery's schema() introspection to discover the graph structure.
247
- *
248
- * @param additionalContext - Optional additional context to include in the prompt
249
- * @returns Promise resolving to the complete system prompt string
250
- */
251
- public static async generate(additionalContext?: string): Promise<string> {
252
- const schema = await getGraphSchema();
253
- const schemaDocs = this.formatSchemaDocumentation(schema);
254
-
255
- return this.buildSystemPrompt(schemaDocs, additionalContext);
256
- }
257
-
258
- /**
259
- * Generate a system prompt for the interpretation phase.
260
- * Used after FlowQuery execution to interpret results.
261
- *
262
- * @returns The interpretation system prompt string
263
- */
264
- public static generateInterpretationPrompt(): string {
265
- return `You are a helpful assistant interpreting FlowQuery execution results.
266
-
267
- ## Your Role
268
-
269
- The user made a natural language request, which was converted to a FlowQuery statement and executed.
270
- You are now receiving the execution results. Your job is to:
271
-
272
- 1. **Summarize** the results in a clear, user-friendly way
273
- 2. **Highlight** key insights or patterns in the data
274
- 3. **Format** the data appropriately (tables, lists, or prose depending on the data)
275
- 4. **Answer** the user's original question using the data
276
-
277
- ## Guidelines
278
-
279
- - Be concise but thorough
280
- - If the results contain many items, summarize rather than listing all
281
- - If there's an error, explain what went wrong in user-friendly terms
282
- - Use markdown formatting for better readability
283
- - If the data doesn't fully answer the user's question, note what's missing`;
284
- }
285
-
286
- /**
287
- * Get a minimal system prompt without full documentation.
288
- * Useful for contexts where token count is a concern.
289
- *
290
- * @returns Promise resolving to minimal prompt string
291
- */
292
- public static async getMinimalPrompt(): Promise<string> {
293
- const schema = await getGraphSchema();
294
- const nodes = schema.filter((r: any) => r.kind === "node");
295
- const relationships = schema.filter((r: any) => r.kind === "relationship");
296
-
297
- const nodeList =
298
- nodes.length > 0 ? nodes.map((n: any) => `- \`${n.label}\``).join("\n") : "None";
299
- const relList =
300
- relationships.length > 0
301
- ? relationships.map((r: any) => `- \`[:${r.type}]\``).join("\n")
302
- : "None";
303
-
304
- return `You are a FlowQuery assistant. Generate FlowQuery statements based on user requests.
305
-
306
- Available node labels:
307
- ${nodeList}
308
-
309
- Available relationships:
310
- ${relList}
311
-
312
- FlowQuery uses Cypher-like syntax: MATCH, WITH, UNWIND, WHERE, RETURN.
313
- Use f"..." for string interpolation. Access properties with dot notation or brackets.
314
-
315
- Always wrap FlowQuery code in \`\`\`flowquery code blocks.`;
316
- }
317
- }
318
-
319
- // Convenience function exports
320
- export const generateFlowQuerySystemPrompt =
321
- FlowQuerySystemPrompt.generate.bind(FlowQuerySystemPrompt);
322
- export const generateInterpretationPrompt =
323
- FlowQuerySystemPrompt.generateInterpretationPrompt.bind(FlowQuerySystemPrompt);
324
- export const getMinimalFlowQueryPrompt =
325
- FlowQuerySystemPrompt.getMinimalPrompt.bind(FlowQuerySystemPrompt);
326
-
327
- export default FlowQuerySystemPrompt;
@@ -1,10 +0,0 @@
1
- /**
2
- * Prompts module - exports system prompt generators.
3
- */
4
-
5
- export {
6
- FlowQuerySystemPrompt,
7
- generateFlowQuerySystemPrompt,
8
- generateInterpretationPrompt,
9
- getMinimalFlowQueryPrompt,
10
- } from "./FlowQuerySystemPrompt";
@@ -1,35 +0,0 @@
1
- /**
2
- * Tests for the FlowQuery graph initialization
3
- *
4
- * Note: The tests that depend on graph initialization
5
- * are skipped due to Jest module isolation issues with the flowquery package.
6
- * These tests work correctly when the app runs directly.
7
- */
8
- import FlowQuery from "flowquery";
9
-
10
- describe("Graph - Basic FlowQuery Operations", () => {
11
- test("should execute simple WITH/RETURN query", async () => {
12
- const runner = new FlowQuery("WITH 42 AS value RETURN value");
13
- await runner.run();
14
- expect(runner.results).toEqual([{ value: 42 }]);
15
- });
16
-
17
- test("should execute UNWIND query", async () => {
18
- const runner = new FlowQuery("UNWIND [1, 2, 3] AS num RETURN num");
19
- await runner.run();
20
- expect(runner.results.length).toBe(3);
21
- expect(runner.results).toEqual([{ num: 1 }, { num: 2 }, { num: 3 }]);
22
- });
23
-
24
- test("should execute expression with functions", async () => {
25
- const runner = new FlowQuery("WITH size([1, 2, 3, 4, 5]) AS len RETURN len");
26
- await runner.run();
27
- expect(runner.results).toEqual([{ len: 5 }]);
28
- });
29
-
30
- test("should execute aggregation query", async () => {
31
- const runner = new FlowQuery("UNWIND [10, 20, 30] AS n RETURN sum(n) AS total");
32
- await runner.run();
33
- expect(runner.results).toEqual([{ total: 60 }]);
34
- });
35
- });