opentasks 0.0.1 → 0.0.2

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 (662) hide show
  1. package/README.md +344 -1
  2. package/dist/__tests__/cli-tools.test.d.ts +8 -0
  3. package/dist/__tests__/cli-tools.test.d.ts.map +1 -0
  4. package/dist/__tests__/cli-tools.test.js +546 -0
  5. package/dist/__tests__/cli-tools.test.js.map +1 -0
  6. package/dist/__tests__/cli.test.d.ts +5 -0
  7. package/dist/__tests__/cli.test.d.ts.map +1 -0
  8. package/dist/__tests__/cli.test.js +77 -0
  9. package/dist/__tests__/cli.test.js.map +1 -0
  10. package/dist/__tests__/p1-p3-gaps.test.d.ts +2 -0
  11. package/dist/__tests__/p1-p3-gaps.test.d.ts.map +1 -0
  12. package/dist/__tests__/p1-p3-gaps.test.js +463 -0
  13. package/dist/__tests__/p1-p3-gaps.test.js.map +1 -0
  14. package/dist/cli.d.ts +19 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +702 -23
  17. package/dist/cli.js.map +1 -1
  18. package/dist/client/__tests__/client-crud.test.d.ts +7 -0
  19. package/dist/client/__tests__/client-crud.test.d.ts.map +1 -0
  20. package/dist/client/__tests__/client-crud.test.js +404 -0
  21. package/dist/client/__tests__/client-crud.test.js.map +1 -0
  22. package/dist/client/__tests__/client.test.d.ts +5 -0
  23. package/dist/client/__tests__/client.test.d.ts.map +1 -0
  24. package/dist/client/__tests__/client.test.js +518 -0
  25. package/dist/client/__tests__/client.test.js.map +1 -0
  26. package/dist/client/client.d.ts +228 -0
  27. package/dist/client/client.d.ts.map +1 -0
  28. package/dist/client/client.js +393 -0
  29. package/dist/client/client.js.map +1 -0
  30. package/dist/client/index.d.ts +11 -0
  31. package/dist/client/index.d.ts.map +1 -0
  32. package/dist/client/index.js +9 -0
  33. package/dist/client/index.js.map +1 -0
  34. package/dist/config/__tests__/defaults.test.d.ts +2 -0
  35. package/dist/config/__tests__/defaults.test.d.ts.map +1 -0
  36. package/dist/config/__tests__/defaults.test.js +57 -0
  37. package/dist/config/__tests__/defaults.test.js.map +1 -0
  38. package/dist/config/__tests__/env.test.d.ts +2 -0
  39. package/dist/config/__tests__/env.test.d.ts.map +1 -0
  40. package/dist/config/__tests__/env.test.js +136 -0
  41. package/dist/config/__tests__/env.test.js.map +1 -0
  42. package/dist/config/__tests__/index.test.d.ts +2 -0
  43. package/dist/config/__tests__/index.test.d.ts.map +1 -0
  44. package/dist/config/__tests__/index.test.js +113 -0
  45. package/dist/config/__tests__/index.test.js.map +1 -0
  46. package/dist/config/__tests__/loader.test.d.ts +2 -0
  47. package/dist/config/__tests__/loader.test.d.ts.map +1 -0
  48. package/dist/config/__tests__/loader.test.js +128 -0
  49. package/dist/config/__tests__/loader.test.js.map +1 -0
  50. package/dist/config/__tests__/merge.test.d.ts +2 -0
  51. package/dist/config/__tests__/merge.test.d.ts.map +1 -0
  52. package/dist/config/__tests__/merge.test.js +79 -0
  53. package/dist/config/__tests__/merge.test.js.map +1 -0
  54. package/dist/config/__tests__/schema.test.d.ts +2 -0
  55. package/dist/config/__tests__/schema.test.d.ts.map +1 -0
  56. package/dist/config/__tests__/schema.test.js +300 -0
  57. package/dist/config/__tests__/schema.test.js.map +1 -0
  58. package/dist/config/defaults.d.ts +13 -0
  59. package/dist/config/defaults.d.ts.map +1 -0
  60. package/dist/config/defaults.js +15 -0
  61. package/dist/config/defaults.js.map +1 -0
  62. package/dist/config/env.d.ts +14 -0
  63. package/dist/config/env.d.ts.map +1 -0
  64. package/dist/config/env.js +130 -0
  65. package/dist/config/env.js.map +1 -0
  66. package/dist/config/errors.d.ts +21 -0
  67. package/dist/config/errors.d.ts.map +1 -0
  68. package/dist/config/errors.js +30 -0
  69. package/dist/config/errors.js.map +1 -0
  70. package/dist/config/index.d.ts +21 -0
  71. package/dist/config/index.d.ts.map +1 -0
  72. package/dist/config/index.js +41 -0
  73. package/dist/config/index.js.map +1 -0
  74. package/dist/config/loader.d.ts +8 -0
  75. package/dist/config/loader.d.ts.map +1 -0
  76. package/dist/config/loader.js +87 -0
  77. package/dist/config/loader.js.map +1 -0
  78. package/dist/config/merge.d.ts +12 -0
  79. package/dist/config/merge.d.ts.map +1 -0
  80. package/dist/config/merge.js +54 -0
  81. package/dist/config/merge.js.map +1 -0
  82. package/dist/config/schema.d.ts +644 -0
  83. package/dist/config/schema.d.ts.map +1 -0
  84. package/dist/config/schema.js +491 -0
  85. package/dist/config/schema.js.map +1 -0
  86. package/dist/core/__tests__/conditional-redirects.test.d.ts +2 -0
  87. package/dist/core/__tests__/conditional-redirects.test.d.ts.map +1 -0
  88. package/dist/core/__tests__/conditional-redirects.test.js +83 -0
  89. package/dist/core/__tests__/conditional-redirects.test.js.map +1 -0
  90. package/dist/core/__tests__/connections.test.d.ts +2 -0
  91. package/dist/core/__tests__/connections.test.d.ts.map +1 -0
  92. package/dist/core/__tests__/connections.test.js +158 -0
  93. package/dist/core/__tests__/connections.test.js.map +1 -0
  94. package/dist/core/__tests__/hash.test.d.ts +2 -0
  95. package/dist/core/__tests__/hash.test.d.ts.map +1 -0
  96. package/dist/core/__tests__/hash.test.js +139 -0
  97. package/dist/core/__tests__/hash.test.js.map +1 -0
  98. package/dist/core/__tests__/id.test.d.ts +2 -0
  99. package/dist/core/__tests__/id.test.d.ts.map +1 -0
  100. package/dist/core/__tests__/id.test.js +142 -0
  101. package/dist/core/__tests__/id.test.js.map +1 -0
  102. package/dist/core/__tests__/location.test.d.ts +2 -0
  103. package/dist/core/__tests__/location.test.d.ts.map +1 -0
  104. package/dist/core/__tests__/location.test.js +77 -0
  105. package/dist/core/__tests__/location.test.js.map +1 -0
  106. package/dist/core/__tests__/merge-driver.test.d.ts +2 -0
  107. package/dist/core/__tests__/merge-driver.test.d.ts.map +1 -0
  108. package/dist/core/__tests__/merge-driver.test.js +218 -0
  109. package/dist/core/__tests__/merge-driver.test.js.map +1 -0
  110. package/dist/core/__tests__/redirects.test.d.ts +2 -0
  111. package/dist/core/__tests__/redirects.test.d.ts.map +1 -0
  112. package/dist/core/__tests__/redirects.test.js +123 -0
  113. package/dist/core/__tests__/redirects.test.js.map +1 -0
  114. package/dist/core/__tests__/resolve-location-target.test.d.ts +8 -0
  115. package/dist/core/__tests__/resolve-location-target.test.d.ts.map +1 -0
  116. package/dist/core/__tests__/resolve-location-target.test.js +303 -0
  117. package/dist/core/__tests__/resolve-location-target.test.js.map +1 -0
  118. package/dist/core/__tests__/uri.test.d.ts +2 -0
  119. package/dist/core/__tests__/uri.test.d.ts.map +1 -0
  120. package/dist/core/__tests__/uri.test.js +159 -0
  121. package/dist/core/__tests__/uri.test.js.map +1 -0
  122. package/dist/core/__tests__/worktree.test.d.ts +2 -0
  123. package/dist/core/__tests__/worktree.test.d.ts.map +1 -0
  124. package/dist/core/__tests__/worktree.test.js +120 -0
  125. package/dist/core/__tests__/worktree.test.js.map +1 -0
  126. package/dist/core/conditional-redirects.d.ts +42 -0
  127. package/dist/core/conditional-redirects.d.ts.map +1 -0
  128. package/dist/core/conditional-redirects.js +59 -0
  129. package/dist/core/conditional-redirects.js.map +1 -0
  130. package/dist/core/connections.d.ts +87 -0
  131. package/dist/core/connections.d.ts.map +1 -0
  132. package/dist/core/connections.js +160 -0
  133. package/dist/core/connections.js.map +1 -0
  134. package/dist/core/discover.d.ts +39 -0
  135. package/dist/core/discover.d.ts.map +1 -0
  136. package/dist/core/discover.js +136 -0
  137. package/dist/core/discover.js.map +1 -0
  138. package/dist/core/hash.d.ts +25 -0
  139. package/dist/core/hash.d.ts.map +1 -0
  140. package/dist/core/hash.js +62 -0
  141. package/dist/core/hash.js.map +1 -0
  142. package/dist/core/id.d.ts +79 -0
  143. package/dist/core/id.d.ts.map +1 -0
  144. package/dist/core/id.js +141 -0
  145. package/dist/core/id.js.map +1 -0
  146. package/dist/core/index.d.ts +15 -0
  147. package/dist/core/index.d.ts.map +1 -0
  148. package/dist/core/index.js +24 -0
  149. package/dist/core/index.js.map +1 -0
  150. package/dist/core/location.d.ts +70 -0
  151. package/dist/core/location.d.ts.map +1 -0
  152. package/dist/core/location.js +121 -0
  153. package/dist/core/location.js.map +1 -0
  154. package/dist/core/merge-driver.d.ts +50 -0
  155. package/dist/core/merge-driver.d.ts.map +1 -0
  156. package/dist/core/merge-driver.js +258 -0
  157. package/dist/core/merge-driver.js.map +1 -0
  158. package/dist/core/redirects.d.ts +91 -0
  159. package/dist/core/redirects.d.ts.map +1 -0
  160. package/dist/core/redirects.js +113 -0
  161. package/dist/core/redirects.js.map +1 -0
  162. package/dist/core/uri.d.ts +105 -0
  163. package/dist/core/uri.d.ts.map +1 -0
  164. package/dist/core/uri.js +190 -0
  165. package/dist/core/uri.js.map +1 -0
  166. package/dist/core/worktree.d.ts +106 -0
  167. package/dist/core/worktree.d.ts.map +1 -0
  168. package/dist/core/worktree.js +394 -0
  169. package/dist/core/worktree.js.map +1 -0
  170. package/dist/daemon/__tests__/flush.test.d.ts +5 -0
  171. package/dist/daemon/__tests__/flush.test.d.ts.map +1 -0
  172. package/dist/daemon/__tests__/flush.test.js +213 -0
  173. package/dist/daemon/__tests__/flush.test.js.map +1 -0
  174. package/dist/daemon/__tests__/integration.test.d.ts +7 -0
  175. package/dist/daemon/__tests__/integration.test.d.ts.map +1 -0
  176. package/dist/daemon/__tests__/integration.test.js +276 -0
  177. package/dist/daemon/__tests__/integration.test.js.map +1 -0
  178. package/dist/daemon/__tests__/ipc.test.d.ts +5 -0
  179. package/dist/daemon/__tests__/ipc.test.d.ts.map +1 -0
  180. package/dist/daemon/__tests__/ipc.test.js +314 -0
  181. package/dist/daemon/__tests__/ipc.test.js.map +1 -0
  182. package/dist/daemon/__tests__/lifecycle.test.d.ts +5 -0
  183. package/dist/daemon/__tests__/lifecycle.test.d.ts.map +1 -0
  184. package/dist/daemon/__tests__/lifecycle.test.js +301 -0
  185. package/dist/daemon/__tests__/lifecycle.test.js.map +1 -0
  186. package/dist/daemon/__tests__/lock.test.d.ts +5 -0
  187. package/dist/daemon/__tests__/lock.test.d.ts.map +1 -0
  188. package/dist/daemon/__tests__/lock.test.js +192 -0
  189. package/dist/daemon/__tests__/lock.test.js.map +1 -0
  190. package/dist/daemon/__tests__/methods/graph.test.d.ts +5 -0
  191. package/dist/daemon/__tests__/methods/graph.test.d.ts.map +1 -0
  192. package/dist/daemon/__tests__/methods/graph.test.js +309 -0
  193. package/dist/daemon/__tests__/methods/graph.test.js.map +1 -0
  194. package/dist/daemon/__tests__/methods/provider.test.d.ts +7 -0
  195. package/dist/daemon/__tests__/methods/provider.test.d.ts.map +1 -0
  196. package/dist/daemon/__tests__/methods/provider.test.js +181 -0
  197. package/dist/daemon/__tests__/methods/provider.test.js.map +1 -0
  198. package/dist/daemon/__tests__/methods/tools.test.d.ts +5 -0
  199. package/dist/daemon/__tests__/methods/tools.test.d.ts.map +1 -0
  200. package/dist/daemon/__tests__/methods/tools.test.js +587 -0
  201. package/dist/daemon/__tests__/methods/tools.test.js.map +1 -0
  202. package/dist/daemon/__tests__/multi-location.test.d.ts +8 -0
  203. package/dist/daemon/__tests__/multi-location.test.d.ts.map +1 -0
  204. package/dist/daemon/__tests__/multi-location.test.js +669 -0
  205. package/dist/daemon/__tests__/multi-location.test.js.map +1 -0
  206. package/dist/daemon/__tests__/registry.test.d.ts +5 -0
  207. package/dist/daemon/__tests__/registry.test.d.ts.map +1 -0
  208. package/dist/daemon/__tests__/registry.test.js +208 -0
  209. package/dist/daemon/__tests__/registry.test.js.map +1 -0
  210. package/dist/daemon/__tests__/watcher.test.d.ts +5 -0
  211. package/dist/daemon/__tests__/watcher.test.d.ts.map +1 -0
  212. package/dist/daemon/__tests__/watcher.test.js +234 -0
  213. package/dist/daemon/__tests__/watcher.test.js.map +1 -0
  214. package/dist/daemon/entire-linker.d.ts +68 -0
  215. package/dist/daemon/entire-linker.d.ts.map +1 -0
  216. package/dist/daemon/entire-linker.js +439 -0
  217. package/dist/daemon/entire-linker.js.map +1 -0
  218. package/dist/daemon/entire-watcher.d.ts +66 -0
  219. package/dist/daemon/entire-watcher.d.ts.map +1 -0
  220. package/dist/daemon/entire-watcher.js +258 -0
  221. package/dist/daemon/entire-watcher.js.map +1 -0
  222. package/dist/daemon/factory.d.ts +59 -0
  223. package/dist/daemon/factory.d.ts.map +1 -0
  224. package/dist/daemon/factory.js +72 -0
  225. package/dist/daemon/factory.js.map +1 -0
  226. package/dist/daemon/flush.d.ts +51 -0
  227. package/dist/daemon/flush.d.ts.map +1 -0
  228. package/dist/daemon/flush.js +89 -0
  229. package/dist/daemon/flush.js.map +1 -0
  230. package/dist/daemon/index.d.ts +39 -0
  231. package/dist/daemon/index.d.ts.map +1 -0
  232. package/dist/daemon/index.js +24 -0
  233. package/dist/daemon/index.js.map +1 -0
  234. package/dist/daemon/ipc.d.ts +97 -0
  235. package/dist/daemon/ipc.d.ts.map +1 -0
  236. package/dist/daemon/ipc.js +304 -0
  237. package/dist/daemon/ipc.js.map +1 -0
  238. package/dist/daemon/lifecycle.d.ts +85 -0
  239. package/dist/daemon/lifecycle.d.ts.map +1 -0
  240. package/dist/daemon/lifecycle.js +754 -0
  241. package/dist/daemon/lifecycle.js.map +1 -0
  242. package/dist/daemon/location-state.d.ts +85 -0
  243. package/dist/daemon/location-state.d.ts.map +1 -0
  244. package/dist/daemon/location-state.js +291 -0
  245. package/dist/daemon/location-state.js.map +1 -0
  246. package/dist/daemon/lock.d.ts +29 -0
  247. package/dist/daemon/lock.d.ts.map +1 -0
  248. package/dist/daemon/lock.js +131 -0
  249. package/dist/daemon/lock.js.map +1 -0
  250. package/dist/daemon/methods/__tests__/graph.test.d.ts +5 -0
  251. package/dist/daemon/methods/__tests__/graph.test.d.ts.map +1 -0
  252. package/dist/daemon/methods/__tests__/graph.test.js +274 -0
  253. package/dist/daemon/methods/__tests__/graph.test.js.map +1 -0
  254. package/dist/daemon/methods/__tests__/provider.test.d.ts +5 -0
  255. package/dist/daemon/methods/__tests__/provider.test.d.ts.map +1 -0
  256. package/dist/daemon/methods/__tests__/provider.test.js +184 -0
  257. package/dist/daemon/methods/__tests__/provider.test.js.map +1 -0
  258. package/dist/daemon/methods/__tests__/tools.test.d.ts +5 -0
  259. package/dist/daemon/methods/__tests__/tools.test.d.ts.map +1 -0
  260. package/dist/daemon/methods/__tests__/tools.test.js +295 -0
  261. package/dist/daemon/methods/__tests__/tools.test.js.map +1 -0
  262. package/dist/daemon/methods/archive.d.ts +22 -0
  263. package/dist/daemon/methods/archive.d.ts.map +1 -0
  264. package/dist/daemon/methods/archive.js +107 -0
  265. package/dist/daemon/methods/archive.js.map +1 -0
  266. package/dist/daemon/methods/graph.d.ts +26 -0
  267. package/dist/daemon/methods/graph.d.ts.map +1 -0
  268. package/dist/daemon/methods/graph.js +157 -0
  269. package/dist/daemon/methods/graph.js.map +1 -0
  270. package/dist/daemon/methods/lifecycle.d.ts +54 -0
  271. package/dist/daemon/methods/lifecycle.d.ts.map +1 -0
  272. package/dist/daemon/methods/lifecycle.js +46 -0
  273. package/dist/daemon/methods/lifecycle.js.map +1 -0
  274. package/dist/daemon/methods/location.d.ts +24 -0
  275. package/dist/daemon/methods/location.d.ts.map +1 -0
  276. package/dist/daemon/methods/location.js +72 -0
  277. package/dist/daemon/methods/location.js.map +1 -0
  278. package/dist/daemon/methods/provider.d.ts +22 -0
  279. package/dist/daemon/methods/provider.d.ts.map +1 -0
  280. package/dist/daemon/methods/provider.js +72 -0
  281. package/dist/daemon/methods/provider.js.map +1 -0
  282. package/dist/daemon/methods/tools.d.ts +23 -0
  283. package/dist/daemon/methods/tools.d.ts.map +1 -0
  284. package/dist/daemon/methods/tools.js +111 -0
  285. package/dist/daemon/methods/tools.js.map +1 -0
  286. package/dist/daemon/registry.d.ts +35 -0
  287. package/dist/daemon/registry.d.ts.map +1 -0
  288. package/dist/daemon/registry.js +189 -0
  289. package/dist/daemon/registry.js.map +1 -0
  290. package/dist/daemon/types.d.ts +101 -0
  291. package/dist/daemon/types.d.ts.map +1 -0
  292. package/dist/daemon/types.js +19 -0
  293. package/dist/daemon/types.js.map +1 -0
  294. package/dist/daemon/watcher.d.ts +62 -0
  295. package/dist/daemon/watcher.d.ts.map +1 -0
  296. package/dist/daemon/watcher.js +142 -0
  297. package/dist/daemon/watcher.js.map +1 -0
  298. package/dist/graph/EdgeTypeRegistry.d.ts +134 -0
  299. package/dist/graph/EdgeTypeRegistry.d.ts.map +1 -0
  300. package/dist/graph/EdgeTypeRegistry.js +255 -0
  301. package/dist/graph/EdgeTypeRegistry.js.map +1 -0
  302. package/dist/graph/FederatedGraph.d.ts +296 -0
  303. package/dist/graph/FederatedGraph.d.ts.map +1 -0
  304. package/dist/graph/FederatedGraph.js +406 -0
  305. package/dist/graph/FederatedGraph.js.map +1 -0
  306. package/dist/graph/GraphologyAdapter.d.ts +151 -0
  307. package/dist/graph/GraphologyAdapter.d.ts.map +1 -0
  308. package/dist/graph/GraphologyAdapter.js +209 -0
  309. package/dist/graph/GraphologyAdapter.js.map +1 -0
  310. package/dist/graph/HydratingFederatedGraph.d.ts +151 -0
  311. package/dist/graph/HydratingFederatedGraph.d.ts.map +1 -0
  312. package/dist/graph/HydratingFederatedGraph.js +327 -0
  313. package/dist/graph/HydratingFederatedGraph.js.map +1 -0
  314. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts +2 -0
  315. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts.map +1 -0
  316. package/dist/graph/__tests__/EdgeTypeRegistry.test.js +212 -0
  317. package/dist/graph/__tests__/EdgeTypeRegistry.test.js.map +1 -0
  318. package/dist/graph/__tests__/FederatedGraph.test.d.ts +2 -0
  319. package/dist/graph/__tests__/FederatedGraph.test.d.ts.map +1 -0
  320. package/dist/graph/__tests__/FederatedGraph.test.js +661 -0
  321. package/dist/graph/__tests__/FederatedGraph.test.js.map +1 -0
  322. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts +2 -0
  323. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts.map +1 -0
  324. package/dist/graph/__tests__/GraphologyAdapter.test.js +326 -0
  325. package/dist/graph/__tests__/GraphologyAdapter.test.js.map +1 -0
  326. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts +2 -0
  327. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts.map +1 -0
  328. package/dist/graph/__tests__/HydratingFederatedGraph.test.js +587 -0
  329. package/dist/graph/__tests__/HydratingFederatedGraph.test.js.map +1 -0
  330. package/dist/graph/__tests__/debounce.test.d.ts +5 -0
  331. package/dist/graph/__tests__/debounce.test.d.ts.map +1 -0
  332. package/dist/graph/__tests__/debounce.test.js +195 -0
  333. package/dist/graph/__tests__/debounce.test.js.map +1 -0
  334. package/dist/graph/__tests__/edge-cases.test.d.ts +8 -0
  335. package/dist/graph/__tests__/edge-cases.test.d.ts.map +1 -0
  336. package/dist/graph/__tests__/edge-cases.test.js +472 -0
  337. package/dist/graph/__tests__/edge-cases.test.js.map +1 -0
  338. package/dist/graph/__tests__/expansion.test.d.ts +2 -0
  339. package/dist/graph/__tests__/expansion.test.d.ts.map +1 -0
  340. package/dist/graph/__tests__/expansion.test.js +105 -0
  341. package/dist/graph/__tests__/expansion.test.js.map +1 -0
  342. package/dist/graph/__tests__/provider-store.test.d.ts +5 -0
  343. package/dist/graph/__tests__/provider-store.test.d.ts.map +1 -0
  344. package/dist/graph/__tests__/provider-store.test.js +791 -0
  345. package/dist/graph/__tests__/provider-store.test.js.map +1 -0
  346. package/dist/graph/__tests__/query.test.d.ts +5 -0
  347. package/dist/graph/__tests__/query.test.d.ts.map +1 -0
  348. package/dist/graph/__tests__/query.test.js +774 -0
  349. package/dist/graph/__tests__/query.test.js.map +1 -0
  350. package/dist/graph/__tests__/store.test.d.ts +5 -0
  351. package/dist/graph/__tests__/store.test.d.ts.map +1 -0
  352. package/dist/graph/__tests__/store.test.js +489 -0
  353. package/dist/graph/__tests__/store.test.js.map +1 -0
  354. package/dist/graph/__tests__/sync.test.d.ts +5 -0
  355. package/dist/graph/__tests__/sync.test.d.ts.map +1 -0
  356. package/dist/graph/__tests__/sync.test.js +129 -0
  357. package/dist/graph/__tests__/sync.test.js.map +1 -0
  358. package/dist/graph/__tests__/validation.test.d.ts +2 -0
  359. package/dist/graph/__tests__/validation.test.d.ts.map +1 -0
  360. package/dist/graph/__tests__/validation.test.js +521 -0
  361. package/dist/graph/__tests__/validation.test.js.map +1 -0
  362. package/dist/graph/coordination.d.ts +190 -0
  363. package/dist/graph/coordination.d.ts.map +1 -0
  364. package/dist/graph/coordination.js +180 -0
  365. package/dist/graph/coordination.js.map +1 -0
  366. package/dist/graph/debounce.d.ts +47 -0
  367. package/dist/graph/debounce.d.ts.map +1 -0
  368. package/dist/graph/debounce.js +95 -0
  369. package/dist/graph/debounce.js.map +1 -0
  370. package/dist/graph/expansion.d.ts +64 -0
  371. package/dist/graph/expansion.d.ts.map +1 -0
  372. package/dist/graph/expansion.js +205 -0
  373. package/dist/graph/expansion.js.map +1 -0
  374. package/dist/graph/history.d.ts +186 -0
  375. package/dist/graph/history.d.ts.map +1 -0
  376. package/dist/graph/history.js +155 -0
  377. package/dist/graph/history.js.map +1 -0
  378. package/dist/graph/index.d.ts +35 -0
  379. package/dist/graph/index.d.ts.map +1 -0
  380. package/dist/graph/index.js +22 -0
  381. package/dist/graph/index.js.map +1 -0
  382. package/dist/graph/provider-store.d.ts +211 -0
  383. package/dist/graph/provider-store.d.ts.map +1 -0
  384. package/dist/graph/provider-store.js +568 -0
  385. package/dist/graph/provider-store.js.map +1 -0
  386. package/dist/graph/query.d.ts +90 -0
  387. package/dist/graph/query.d.ts.map +1 -0
  388. package/dist/graph/query.js +463 -0
  389. package/dist/graph/query.js.map +1 -0
  390. package/dist/graph/store.d.ts +71 -0
  391. package/dist/graph/store.d.ts.map +1 -0
  392. package/dist/graph/store.js +530 -0
  393. package/dist/graph/store.js.map +1 -0
  394. package/dist/graph/sync.d.ts +48 -0
  395. package/dist/graph/sync.d.ts.map +1 -0
  396. package/dist/graph/sync.js +60 -0
  397. package/dist/graph/sync.js.map +1 -0
  398. package/dist/graph/types.d.ts +289 -0
  399. package/dist/graph/types.d.ts.map +1 -0
  400. package/dist/graph/types.js +19 -0
  401. package/dist/graph/types.js.map +1 -0
  402. package/dist/graph/validation.d.ts +26 -0
  403. package/dist/graph/validation.d.ts.map +1 -0
  404. package/dist/graph/validation.js +338 -0
  405. package/dist/graph/validation.js.map +1 -0
  406. package/dist/index.d.ts +25 -14
  407. package/dist/index.d.ts.map +1 -1
  408. package/dist/index.js +22 -25
  409. package/dist/index.js.map +1 -1
  410. package/dist/materialization/archiver.d.ts +12 -0
  411. package/dist/materialization/archiver.d.ts.map +1 -0
  412. package/dist/materialization/archiver.js +273 -0
  413. package/dist/materialization/archiver.js.map +1 -0
  414. package/dist/materialization/git-archive-store.d.ts +17 -0
  415. package/dist/materialization/git-archive-store.d.ts.map +1 -0
  416. package/dist/materialization/git-archive-store.js +509 -0
  417. package/dist/materialization/git-archive-store.js.map +1 -0
  418. package/dist/materialization/git-remote-store.d.ts +22 -0
  419. package/dist/materialization/git-remote-store.d.ts.map +1 -0
  420. package/dist/materialization/git-remote-store.js +448 -0
  421. package/dist/materialization/git-remote-store.js.map +1 -0
  422. package/dist/materialization/graph-id.d.ts +53 -0
  423. package/dist/materialization/graph-id.d.ts.map +1 -0
  424. package/dist/materialization/graph-id.js +163 -0
  425. package/dist/materialization/graph-id.js.map +1 -0
  426. package/dist/materialization/http-remote-store.d.ts +12 -0
  427. package/dist/materialization/http-remote-store.d.ts.map +1 -0
  428. package/dist/materialization/http-remote-store.js +143 -0
  429. package/dist/materialization/http-remote-store.js.map +1 -0
  430. package/dist/materialization/index.d.ts +15 -0
  431. package/dist/materialization/index.d.ts.map +1 -0
  432. package/dist/materialization/index.js +17 -0
  433. package/dist/materialization/index.js.map +1 -0
  434. package/dist/materialization/remote-store-factory.d.ts +17 -0
  435. package/dist/materialization/remote-store-factory.d.ts.map +1 -0
  436. package/dist/materialization/remote-store-factory.js +46 -0
  437. package/dist/materialization/remote-store-factory.js.map +1 -0
  438. package/dist/materialization/snapshot.d.ts +34 -0
  439. package/dist/materialization/snapshot.d.ts.map +1 -0
  440. package/dist/materialization/snapshot.js +177 -0
  441. package/dist/materialization/snapshot.js.map +1 -0
  442. package/dist/materialization/types.d.ts +300 -0
  443. package/dist/materialization/types.d.ts.map +1 -0
  444. package/dist/materialization/types.js +17 -0
  445. package/dist/materialization/types.js.map +1 -0
  446. package/dist/providers/__tests__/beads.test.d.ts +5 -0
  447. package/dist/providers/__tests__/beads.test.d.ts.map +1 -0
  448. package/dist/providers/__tests__/beads.test.js +591 -0
  449. package/dist/providers/__tests__/beads.test.js.map +1 -0
  450. package/dist/providers/__tests__/claude-tasks.test.d.ts +5 -0
  451. package/dist/providers/__tests__/claude-tasks.test.d.ts.map +1 -0
  452. package/dist/providers/__tests__/claude-tasks.test.js +392 -0
  453. package/dist/providers/__tests__/claude-tasks.test.js.map +1 -0
  454. package/dist/providers/__tests__/from-config.test.d.ts +5 -0
  455. package/dist/providers/__tests__/from-config.test.d.ts.map +1 -0
  456. package/dist/providers/__tests__/from-config.test.js +152 -0
  457. package/dist/providers/__tests__/from-config.test.js.map +1 -0
  458. package/dist/providers/__tests__/materialization.test.d.ts +5 -0
  459. package/dist/providers/__tests__/materialization.test.d.ts.map +1 -0
  460. package/dist/providers/__tests__/materialization.test.js +407 -0
  461. package/dist/providers/__tests__/materialization.test.js.map +1 -0
  462. package/dist/providers/__tests__/native.test.d.ts +5 -0
  463. package/dist/providers/__tests__/native.test.d.ts.map +1 -0
  464. package/dist/providers/__tests__/native.test.js +566 -0
  465. package/dist/providers/__tests__/native.test.js.map +1 -0
  466. package/dist/providers/__tests__/registry.test.d.ts +5 -0
  467. package/dist/providers/__tests__/registry.test.d.ts.map +1 -0
  468. package/dist/providers/__tests__/registry.test.js +183 -0
  469. package/dist/providers/__tests__/registry.test.js.map +1 -0
  470. package/dist/providers/beads.d.ts +46 -0
  471. package/dist/providers/beads.d.ts.map +1 -0
  472. package/dist/providers/beads.js +865 -0
  473. package/dist/providers/beads.js.map +1 -0
  474. package/dist/providers/claude-tasks.d.ts +56 -0
  475. package/dist/providers/claude-tasks.d.ts.map +1 -0
  476. package/dist/providers/claude-tasks.js +282 -0
  477. package/dist/providers/claude-tasks.js.map +1 -0
  478. package/dist/providers/entire.d.ts +88 -0
  479. package/dist/providers/entire.d.ts.map +1 -0
  480. package/dist/providers/entire.js +409 -0
  481. package/dist/providers/entire.js.map +1 -0
  482. package/dist/providers/from-config.d.ts +47 -0
  483. package/dist/providers/from-config.d.ts.map +1 -0
  484. package/dist/providers/from-config.js +150 -0
  485. package/dist/providers/from-config.js.map +1 -0
  486. package/dist/providers/index.d.ts +26 -0
  487. package/dist/providers/index.d.ts.map +1 -0
  488. package/dist/providers/index.js +29 -0
  489. package/dist/providers/index.js.map +1 -0
  490. package/dist/providers/location.d.ts +44 -0
  491. package/dist/providers/location.d.ts.map +1 -0
  492. package/dist/providers/location.js +157 -0
  493. package/dist/providers/location.js.map +1 -0
  494. package/dist/providers/materialization.d.ts +46 -0
  495. package/dist/providers/materialization.d.ts.map +1 -0
  496. package/dist/providers/materialization.js +237 -0
  497. package/dist/providers/materialization.js.map +1 -0
  498. package/dist/providers/native.d.ts +32 -0
  499. package/dist/providers/native.d.ts.map +1 -0
  500. package/dist/providers/native.js +552 -0
  501. package/dist/providers/native.js.map +1 -0
  502. package/dist/providers/registry.d.ts +11 -0
  503. package/dist/providers/registry.d.ts.map +1 -0
  504. package/dist/providers/registry.js +97 -0
  505. package/dist/providers/registry.js.map +1 -0
  506. package/dist/providers/sudocode.d.ts +49 -0
  507. package/dist/providers/sudocode.d.ts.map +1 -0
  508. package/dist/providers/sudocode.js +945 -0
  509. package/dist/providers/sudocode.js.map +1 -0
  510. package/dist/providers/sync.d.ts +299 -0
  511. package/dist/providers/sync.d.ts.map +1 -0
  512. package/dist/providers/sync.js +93 -0
  513. package/dist/providers/sync.js.map +1 -0
  514. package/dist/providers/traits/RelationshipQueryable.d.ts +129 -0
  515. package/dist/providers/traits/RelationshipQueryable.d.ts.map +1 -0
  516. package/dist/providers/traits/RelationshipQueryable.js +68 -0
  517. package/dist/providers/traits/RelationshipQueryable.js.map +1 -0
  518. package/dist/providers/traits/TaskManageable.d.ts +157 -0
  519. package/dist/providers/traits/TaskManageable.d.ts.map +1 -0
  520. package/dist/providers/traits/TaskManageable.js +37 -0
  521. package/dist/providers/traits/TaskManageable.js.map +1 -0
  522. package/dist/providers/traits/Watchable.d.ts +216 -0
  523. package/dist/providers/traits/Watchable.d.ts.map +1 -0
  524. package/dist/providers/traits/Watchable.js +37 -0
  525. package/dist/providers/traits/Watchable.js.map +1 -0
  526. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts +2 -0
  527. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts.map +1 -0
  528. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js +169 -0
  529. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js.map +1 -0
  530. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts +2 -0
  531. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts.map +1 -0
  532. package/dist/providers/traits/__tests__/TaskManageable.test.js +172 -0
  533. package/dist/providers/traits/__tests__/TaskManageable.test.js.map +1 -0
  534. package/dist/providers/traits/index.d.ts +13 -0
  535. package/dist/providers/traits/index.d.ts.map +1 -0
  536. package/dist/providers/traits/index.js +10 -0
  537. package/dist/providers/traits/index.js.map +1 -0
  538. package/dist/providers/types.d.ts +284 -0
  539. package/dist/providers/types.d.ts.map +1 -0
  540. package/dist/providers/types.js +30 -0
  541. package/dist/providers/types.js.map +1 -0
  542. package/dist/schema/__tests__/validation.test.d.ts +2 -0
  543. package/dist/schema/__tests__/validation.test.d.ts.map +1 -0
  544. package/dist/schema/__tests__/validation.test.js +241 -0
  545. package/dist/schema/__tests__/validation.test.js.map +1 -0
  546. package/dist/schema/base.d.ts +68 -0
  547. package/dist/schema/base.d.ts.map +1 -0
  548. package/dist/schema/base.js +5 -0
  549. package/dist/schema/base.js.map +1 -0
  550. package/dist/schema/edges.d.ts +49 -0
  551. package/dist/schema/edges.d.ts.map +1 -0
  552. package/dist/schema/edges.js +9 -0
  553. package/dist/schema/edges.js.map +1 -0
  554. package/dist/schema/index.d.ts +11 -0
  555. package/dist/schema/index.d.ts.map +1 -0
  556. package/dist/schema/index.js +8 -0
  557. package/dist/schema/index.js.map +1 -0
  558. package/dist/schema/nodes.d.ts +97 -0
  559. package/dist/schema/nodes.d.ts.map +1 -0
  560. package/dist/schema/nodes.js +5 -0
  561. package/dist/schema/nodes.js.map +1 -0
  562. package/dist/schema/storage.d.ts +107 -0
  563. package/dist/schema/storage.d.ts.map +1 -0
  564. package/dist/schema/storage.js +10 -0
  565. package/dist/schema/storage.js.map +1 -0
  566. package/dist/schema/validation.d.ts +61 -0
  567. package/dist/schema/validation.d.ts.map +1 -0
  568. package/dist/schema/validation.js +170 -0
  569. package/dist/schema/validation.js.map +1 -0
  570. package/dist/storage/__tests__/atomic-write.test.d.ts +5 -0
  571. package/dist/storage/__tests__/atomic-write.test.d.ts.map +1 -0
  572. package/dist/storage/__tests__/atomic-write.test.js +170 -0
  573. package/dist/storage/__tests__/atomic-write.test.js.map +1 -0
  574. package/dist/storage/__tests__/file-lock.test.d.ts +2 -0
  575. package/dist/storage/__tests__/file-lock.test.d.ts.map +1 -0
  576. package/dist/storage/__tests__/file-lock.test.js +89 -0
  577. package/dist/storage/__tests__/file-lock.test.js.map +1 -0
  578. package/dist/storage/__tests__/jsonl.test.d.ts +2 -0
  579. package/dist/storage/__tests__/jsonl.test.d.ts.map +1 -0
  580. package/dist/storage/__tests__/jsonl.test.js +228 -0
  581. package/dist/storage/__tests__/jsonl.test.js.map +1 -0
  582. package/dist/storage/__tests__/locked-writer.test.d.ts +2 -0
  583. package/dist/storage/__tests__/locked-writer.test.d.ts.map +1 -0
  584. package/dist/storage/__tests__/locked-writer.test.js +109 -0
  585. package/dist/storage/__tests__/locked-writer.test.js.map +1 -0
  586. package/dist/storage/__tests__/sqlite.test.d.ts +2 -0
  587. package/dist/storage/__tests__/sqlite.test.d.ts.map +1 -0
  588. package/dist/storage/__tests__/sqlite.test.js +470 -0
  589. package/dist/storage/__tests__/sqlite.test.js.map +1 -0
  590. package/dist/storage/atomic-write.d.ts +38 -0
  591. package/dist/storage/atomic-write.d.ts.map +1 -0
  592. package/dist/storage/atomic-write.js +83 -0
  593. package/dist/storage/atomic-write.js.map +1 -0
  594. package/dist/storage/file-lock.d.ts +66 -0
  595. package/dist/storage/file-lock.d.ts.map +1 -0
  596. package/dist/storage/file-lock.js +176 -0
  597. package/dist/storage/file-lock.js.map +1 -0
  598. package/dist/storage/index.d.ts +11 -0
  599. package/dist/storage/index.d.ts.map +1 -0
  600. package/dist/storage/index.js +13 -0
  601. package/dist/storage/index.js.map +1 -0
  602. package/dist/storage/interface.d.ts +219 -0
  603. package/dist/storage/interface.d.ts.map +1 -0
  604. package/dist/storage/interface.js +22 -0
  605. package/dist/storage/interface.js.map +1 -0
  606. package/dist/storage/jsonl.d.ts +106 -0
  607. package/dist/storage/jsonl.d.ts.map +1 -0
  608. package/dist/storage/jsonl.js +218 -0
  609. package/dist/storage/jsonl.js.map +1 -0
  610. package/dist/storage/locked-writer.d.ts +67 -0
  611. package/dist/storage/locked-writer.d.ts.map +1 -0
  612. package/dist/storage/locked-writer.js +105 -0
  613. package/dist/storage/locked-writer.js.map +1 -0
  614. package/dist/storage/sqlite-schema.d.ts +48 -0
  615. package/dist/storage/sqlite-schema.d.ts.map +1 -0
  616. package/dist/storage/sqlite-schema.js +169 -0
  617. package/dist/storage/sqlite-schema.js.map +1 -0
  618. package/dist/storage/sqlite.d.ts +73 -0
  619. package/dist/storage/sqlite.d.ts.map +1 -0
  620. package/dist/storage/sqlite.js +698 -0
  621. package/dist/storage/sqlite.js.map +1 -0
  622. package/dist/tools/__tests__/annotate.test.d.ts +5 -0
  623. package/dist/tools/__tests__/annotate.test.d.ts.map +1 -0
  624. package/dist/tools/__tests__/annotate.test.js +314 -0
  625. package/dist/tools/__tests__/annotate.test.js.map +1 -0
  626. package/dist/tools/__tests__/link.test.d.ts +5 -0
  627. package/dist/tools/__tests__/link.test.d.ts.map +1 -0
  628. package/dist/tools/__tests__/link.test.js +245 -0
  629. package/dist/tools/__tests__/link.test.js.map +1 -0
  630. package/dist/tools/__tests__/query.test.d.ts +5 -0
  631. package/dist/tools/__tests__/query.test.d.ts.map +1 -0
  632. package/dist/tools/__tests__/query.test.js +288 -0
  633. package/dist/tools/__tests__/query.test.js.map +1 -0
  634. package/dist/tools/__tests__/task.test.d.ts +5 -0
  635. package/dist/tools/__tests__/task.test.d.ts.map +1 -0
  636. package/dist/tools/__tests__/task.test.js +178 -0
  637. package/dist/tools/__tests__/task.test.js.map +1 -0
  638. package/dist/tools/annotate.d.ts +17 -0
  639. package/dist/tools/annotate.d.ts.map +1 -0
  640. package/dist/tools/annotate.js +218 -0
  641. package/dist/tools/annotate.js.map +1 -0
  642. package/dist/tools/index.d.ts +14 -0
  643. package/dist/tools/index.d.ts.map +1 -0
  644. package/dist/tools/index.js +14 -0
  645. package/dist/tools/index.js.map +1 -0
  646. package/dist/tools/link.d.ts +17 -0
  647. package/dist/tools/link.d.ts.map +1 -0
  648. package/dist/tools/link.js +127 -0
  649. package/dist/tools/link.js.map +1 -0
  650. package/dist/tools/query.d.ts +17 -0
  651. package/dist/tools/query.d.ts.map +1 -0
  652. package/dist/tools/query.js +342 -0
  653. package/dist/tools/query.js.map +1 -0
  654. package/dist/tools/task.d.ts +20 -0
  655. package/dist/tools/task.d.ts.map +1 -0
  656. package/dist/tools/task.js +161 -0
  657. package/dist/tools/task.js.map +1 -0
  658. package/dist/tools/types.d.ts +334 -0
  659. package/dist/tools/types.d.ts.map +1 -0
  660. package/dist/tools/types.js +19 -0
  661. package/dist/tools/types.js.map +1 -0
  662. package/package.json +40 -5
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Query Engine for Graph Operations
3
+ *
4
+ * Provides rich query capabilities for graph traversal and filtering.
5
+ */
6
+ import type { Storage } from '../storage/interface.js';
7
+ import type { StoredNode } from '../schema/storage.js';
8
+ import type { Node, Task, Context, Feedback, Edge, EdgeType } from '../schema/index.js';
9
+ import type { NodeFilter, EdgeFilter, BlockerOptions, ReadyOptions, FeedbackOptions } from './types.js';
10
+ /**
11
+ * Node resolver function for resolving external URIs
12
+ *
13
+ * When provided to the query engine, enables cross-provider query support.
14
+ * The resolver should handle external URIs (e.g., beads://./bd-123) and
15
+ * return the corresponding StoredNode, or null if not found.
16
+ */
17
+ export type NodeResolver = (idOrUri: string) => Promise<StoredNode | null>;
18
+ /**
19
+ * Options for creating a query engine
20
+ */
21
+ export interface QueryEngineOptions {
22
+ /** Storage for native nodes */
23
+ storage: Storage;
24
+ /**
25
+ * Optional resolver for external nodes.
26
+ * If provided, queries like blockers/blocking/ready will resolve external URIs.
27
+ * If not provided, only local node IDs will be resolved.
28
+ */
29
+ nodeResolver?: NodeResolver;
30
+ }
31
+ /**
32
+ * Query engine for graph traversal and filtering
33
+ */
34
+ export interface QueryEngine {
35
+ /** Query nodes with filters */
36
+ nodes(filter: NodeFilter): Promise<Node[]>;
37
+ /** Query edges with filters */
38
+ edges(filter: EdgeFilter): Promise<Edge[]>;
39
+ /** Get edges from a node */
40
+ edgesFrom(nodeId: string, type?: EdgeType): Promise<Edge[]>;
41
+ /** Get edges to a node */
42
+ edgesTo(nodeId: string, type?: EdgeType): Promise<Edge[]>;
43
+ /** Get all edges for a node (both directions) */
44
+ edgesFor(nodeId: string, type?: EdgeType): Promise<Edge[]>;
45
+ /** What blocks this node? */
46
+ blockers(nodeId: string, options?: BlockerOptions): Promise<Node[]>;
47
+ /** What does this node block? */
48
+ blocking(nodeId: string, options?: BlockerOptions): Promise<Node[]>;
49
+ /** Is there a path from A blocking B? */
50
+ isBlocking(fromId: string, toId: string): Promise<boolean>;
51
+ /** Tasks that implement a context */
52
+ tasks(contextId: string): Promise<Task[]>;
53
+ /** Context nodes that a task implements */
54
+ context(taskId: string): Promise<Context[]>;
55
+ /** Get children of a node */
56
+ children(nodeId: string): Promise<Node[]>;
57
+ /** Get parent of a node */
58
+ parent(nodeId: string): Promise<Node | null>;
59
+ /** Get all ancestors */
60
+ ancestors(nodeId: string): Promise<Node[]>;
61
+ /** Get all descendants */
62
+ descendants(nodeId: string): Promise<Node[]>;
63
+ /** Get tasks ready to work on (no active blockers) */
64
+ ready(options?: ReadyOptions): Promise<Task[]>;
65
+ /** Get feedback on a node */
66
+ feedback(targetId: string, options?: FeedbackOptions): Promise<Feedback[]>;
67
+ /** Get unresolved feedback */
68
+ unresolvedFeedback(targetId?: string): Promise<Feedback[]>;
69
+ }
70
+ /**
71
+ * Create a query engine backed by a storage implementation
72
+ *
73
+ * @param options - Storage instance or QueryEngineOptions object
74
+ * @returns QueryEngine instance
75
+ *
76
+ * @example
77
+ * // Basic usage with storage only (native queries)
78
+ * const engine = createQueryEngine(storage)
79
+ *
80
+ * @example
81
+ * // With node resolver for cross-provider queries
82
+ * const engine = createQueryEngine({
83
+ * storage,
84
+ * nodeResolver: async (idOrUri) => {
85
+ * return providerAwareStore.resolveNode(idOrUri)
86
+ * }
87
+ * })
88
+ */
89
+ export declare function createQueryEngine(options: QueryEngineOptions | Storage): QueryEngine;
90
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/graph/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,463 @@
1
+ /**
2
+ * Query Engine for Graph Operations
3
+ *
4
+ * Provides rich query capabilities for graph traversal and filtering.
5
+ */
6
+ import { parseNode, isTask, isContext, isFeedback } from '../schema/validation.js';
7
+ // ============================================================================
8
+ // Cross-Provider Resolution Support
9
+ // ============================================================================
10
+ /**
11
+ * Pattern for local node IDs (c-, t-, f-, e-, x-)
12
+ */
13
+ const LOCAL_ID_PATTERN = /^[ctfex]-[a-z0-9]+$/;
14
+ // ============================================================================
15
+ // Helper Functions
16
+ // ============================================================================
17
+ /**
18
+ * Convert StoredEdge to Edge (they're the same, but for type clarity)
19
+ */
20
+ function toEdge(stored) {
21
+ return stored;
22
+ }
23
+ /**
24
+ * Safely parse a node, returning null on error
25
+ * (makes query engine resilient to bad data in storage)
26
+ */
27
+ function safeParseNode(stored) {
28
+ try {
29
+ return parseNode(stored);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ /**
36
+ * Check if a node is active (not closed, not archived)
37
+ */
38
+ function isActiveNode(node) {
39
+ return !node.archived && node.status !== 'closed';
40
+ }
41
+ /**
42
+ * Apply priority filter to nodes
43
+ */
44
+ function matchesPriority(node, filter) {
45
+ if (filter === undefined)
46
+ return true;
47
+ if (node.priority === undefined)
48
+ return true;
49
+ if (typeof filter === 'number') {
50
+ return node.priority === filter;
51
+ }
52
+ const { min, max } = filter;
53
+ if (min !== undefined && node.priority < min)
54
+ return false;
55
+ if (max !== undefined && node.priority > max)
56
+ return false;
57
+ return true;
58
+ }
59
+ /**
60
+ * Convert graph NodeFilter to storage NodeFilter
61
+ * Handles type differences (archived: null → undefined)
62
+ */
63
+ function toStorageFilter(filter) {
64
+ return {
65
+ type: filter.type,
66
+ status: filter.status,
67
+ tags: filter.tags,
68
+ parent_id: filter.parent_id,
69
+ archived: filter.archived ?? undefined,
70
+ search: filter.search,
71
+ limit: filter.limit,
72
+ offset: filter.offset,
73
+ };
74
+ }
75
+ // ============================================================================
76
+ // Query Engine Implementation
77
+ // ============================================================================
78
+ /**
79
+ * Create a query engine backed by a storage implementation
80
+ *
81
+ * @param options - Storage instance or QueryEngineOptions object
82
+ * @returns QueryEngine instance
83
+ *
84
+ * @example
85
+ * // Basic usage with storage only (native queries)
86
+ * const engine = createQueryEngine(storage)
87
+ *
88
+ * @example
89
+ * // With node resolver for cross-provider queries
90
+ * const engine = createQueryEngine({
91
+ * storage,
92
+ * nodeResolver: async (idOrUri) => {
93
+ * return providerAwareStore.resolveNode(idOrUri)
94
+ * }
95
+ * })
96
+ */
97
+ export function createQueryEngine(options) {
98
+ // Support both old signature (Storage) and new signature (QueryEngineOptions)
99
+ const storage = 'storage' in options ? options.storage : options;
100
+ const nodeResolver = 'nodeResolver' in options ? options.nodeResolver : undefined;
101
+ /**
102
+ * Resolve a node by ID or URI
103
+ * Uses the nodeResolver for external URIs if available, otherwise falls back to storage
104
+ */
105
+ const resolveNode = async (idOrUri) => {
106
+ // For local IDs, always use storage directly
107
+ if (LOCAL_ID_PATTERN.test(idOrUri)) {
108
+ return storage.getNode(idOrUri);
109
+ }
110
+ // For URIs or unknown formats, try resolver first if available
111
+ if (nodeResolver) {
112
+ return nodeResolver(idOrUri);
113
+ }
114
+ // Fallback to storage (might work for materialized external nodes)
115
+ return storage.getNode(idOrUri);
116
+ };
117
+ return {
118
+ // =========================================================================
119
+ // Basic Queries
120
+ // =========================================================================
121
+ async nodes(filter) {
122
+ const stored = await storage.queryNodes(toStorageFilter(filter));
123
+ return stored.map(safeParseNode).filter((n) => n !== null);
124
+ },
125
+ async edges(filter) {
126
+ const results = [];
127
+ if (filter.from_id) {
128
+ const fromEdges = await storage.getEdgesFrom(filter.from_id, filter.type);
129
+ results.push(...fromEdges);
130
+ }
131
+ else if (filter.to_id) {
132
+ const toEdges = await storage.getEdgesTo(filter.to_id, filter.type);
133
+ results.push(...toEdges);
134
+ }
135
+ else {
136
+ // No specific node filter - this would need a full edge query
137
+ // For now, return empty (full edge enumeration not typically needed)
138
+ return [];
139
+ }
140
+ // Apply type filter if we didn't use it in the query
141
+ let filtered = results;
142
+ if (filter.type && !filter.from_id && !filter.to_id) {
143
+ const types = Array.isArray(filter.type) ? filter.type : [filter.type];
144
+ filtered = results.filter((e) => types.includes(e.type));
145
+ }
146
+ // Apply pagination
147
+ const offset = filter.offset ?? 0;
148
+ const limit = filter.limit ?? filtered.length;
149
+ const paginated = filtered.slice(offset, offset + limit);
150
+ return paginated.map(toEdge);
151
+ },
152
+ // =========================================================================
153
+ // Relationship Queries
154
+ // =========================================================================
155
+ async edgesFrom(nodeId, type) {
156
+ const stored = await storage.getEdgesFrom(nodeId, type);
157
+ return stored.map(toEdge);
158
+ },
159
+ async edgesTo(nodeId, type) {
160
+ const stored = await storage.getEdgesTo(nodeId, type);
161
+ return stored.map(toEdge);
162
+ },
163
+ async edgesFor(nodeId, type) {
164
+ const [from, to] = await Promise.all([
165
+ storage.getEdgesFrom(nodeId, type),
166
+ storage.getEdgesTo(nodeId, type),
167
+ ]);
168
+ // Combine and deduplicate by ID
169
+ const seen = new Set();
170
+ const all = [];
171
+ for (const edge of [...from, ...to]) {
172
+ if (!seen.has(edge.id)) {
173
+ seen.add(edge.id);
174
+ all.push(toEdge(edge));
175
+ }
176
+ }
177
+ return all;
178
+ },
179
+ // =========================================================================
180
+ // Dependency Queries
181
+ // =========================================================================
182
+ async blockers(nodeId, options) {
183
+ const result = [];
184
+ const visited = new Set();
185
+ const maxDepth = options?.maxDepth ?? 10;
186
+ const activeOnly = options?.activeOnly ?? true;
187
+ async function collect(id, depth) {
188
+ if (depth > maxDepth || visited.has(id))
189
+ return;
190
+ visited.add(id);
191
+ // Get incoming 'blocks' edges (things that block this node)
192
+ const edges = await storage.getEdgesTo(id, 'blocks');
193
+ for (const edge of edges) {
194
+ // Use resolveNode to support cross-provider resolution
195
+ const blocker = await resolveNode(edge.from_id);
196
+ if (!blocker)
197
+ continue;
198
+ // Filter by activeOnly
199
+ if (activeOnly && !isActiveNode(blocker))
200
+ continue;
201
+ const parsed = safeParseNode(blocker);
202
+ if (parsed) {
203
+ result.push(parsed);
204
+ }
205
+ // Recurse for transitive blockers
206
+ if (options?.transitive) {
207
+ await collect(edge.from_id, depth + 1);
208
+ }
209
+ }
210
+ }
211
+ await collect(nodeId, 0);
212
+ return result;
213
+ },
214
+ async blocking(nodeId, options) {
215
+ const result = [];
216
+ const visited = new Set();
217
+ const maxDepth = options?.maxDepth ?? 10;
218
+ const activeOnly = options?.activeOnly ?? true;
219
+ async function collect(id, depth) {
220
+ if (depth > maxDepth || visited.has(id))
221
+ return;
222
+ visited.add(id);
223
+ // Get outgoing 'blocks' edges (things this node blocks)
224
+ const edges = await storage.getEdgesFrom(id, 'blocks');
225
+ for (const edge of edges) {
226
+ // Use resolveNode to support cross-provider resolution
227
+ const blocked = await resolveNode(edge.to_id);
228
+ if (!blocked)
229
+ continue;
230
+ // Filter by activeOnly
231
+ if (activeOnly && !isActiveNode(blocked))
232
+ continue;
233
+ const parsed = safeParseNode(blocked);
234
+ if (parsed) {
235
+ result.push(parsed);
236
+ }
237
+ // Recurse for transitive blocking
238
+ if (options?.transitive) {
239
+ await collect(edge.to_id, depth + 1);
240
+ }
241
+ }
242
+ }
243
+ await collect(nodeId, 0);
244
+ return result;
245
+ },
246
+ async isBlocking(fromId, toId) {
247
+ // Check if fromId blocks toId (directly or transitively)
248
+ const visited = new Set();
249
+ async function search(current) {
250
+ if (current === toId)
251
+ return true;
252
+ if (visited.has(current))
253
+ return false;
254
+ visited.add(current);
255
+ const edges = await storage.getEdgesFrom(current, 'blocks');
256
+ for (const edge of edges) {
257
+ if (await search(edge.to_id)) {
258
+ return true;
259
+ }
260
+ }
261
+ return false;
262
+ }
263
+ return search(fromId);
264
+ },
265
+ // =========================================================================
266
+ // Context/Task Queries
267
+ // =========================================================================
268
+ async tasks(contextId) {
269
+ // Get incoming 'implements' edges to the context
270
+ const edges = await storage.getEdgesTo(contextId, 'implements');
271
+ const tasks = [];
272
+ for (const edge of edges) {
273
+ // Use resolveNode to support cross-provider resolution
274
+ const node = await resolveNode(edge.from_id);
275
+ if (node) {
276
+ const parsed = safeParseNode(node);
277
+ if (parsed && isTask(parsed)) {
278
+ tasks.push(parsed);
279
+ }
280
+ }
281
+ }
282
+ return tasks;
283
+ },
284
+ async context(taskId) {
285
+ // Get outgoing 'implements' edges from the task
286
+ const edges = await storage.getEdgesFrom(taskId, 'implements');
287
+ const contextNodes = [];
288
+ for (const edge of edges) {
289
+ // Use resolveNode to support cross-provider resolution
290
+ const node = await resolveNode(edge.to_id);
291
+ if (node) {
292
+ const parsed = safeParseNode(node);
293
+ if (parsed && isContext(parsed)) {
294
+ contextNodes.push(parsed);
295
+ }
296
+ }
297
+ }
298
+ return contextNodes;
299
+ },
300
+ // =========================================================================
301
+ // Hierarchy Queries
302
+ // =========================================================================
303
+ async children(nodeId) {
304
+ // Query nodes with parent_id = nodeId
305
+ const stored = await storage.queryNodes({ parent_id: nodeId });
306
+ return stored.map(parseNode).filter((n) => n !== null);
307
+ },
308
+ async parent(nodeId) {
309
+ const node = await storage.getNode(nodeId);
310
+ if (!node || !node.parent_id)
311
+ return null;
312
+ const parentNode = await storage.getNode(node.parent_id);
313
+ if (!parentNode)
314
+ return null;
315
+ return safeParseNode(parentNode);
316
+ },
317
+ async ancestors(nodeId) {
318
+ const result = [];
319
+ let currentId = nodeId;
320
+ while (currentId) {
321
+ const node = await storage.getNode(currentId);
322
+ if (!node || !node.parent_id)
323
+ break;
324
+ const parentNode = await storage.getNode(node.parent_id);
325
+ if (!parentNode)
326
+ break;
327
+ const parsed = safeParseNode(parentNode);
328
+ if (parsed) {
329
+ result.push(parsed);
330
+ }
331
+ currentId = parentNode.parent_id;
332
+ }
333
+ return result;
334
+ },
335
+ async descendants(nodeId) {
336
+ const result = [];
337
+ const visited = new Set();
338
+ async function collect(id) {
339
+ if (visited.has(id))
340
+ return;
341
+ visited.add(id);
342
+ const children = await storage.queryNodes({ parent_id: id });
343
+ for (const child of children) {
344
+ const parsed = safeParseNode(child);
345
+ if (parsed) {
346
+ result.push(parsed);
347
+ await collect(child.id);
348
+ }
349
+ }
350
+ }
351
+ await collect(nodeId);
352
+ return result;
353
+ },
354
+ // =========================================================================
355
+ // Ready Query
356
+ // =========================================================================
357
+ async ready(options) {
358
+ // Get all open, non-archived tasks
359
+ const taskNodes = await storage.queryNodes({
360
+ type: 'task',
361
+ status: 'open',
362
+ archived: false,
363
+ });
364
+ const readyTasks = [];
365
+ for (const task of taskNodes) {
366
+ // Apply additional filters
367
+ if (options?.tags) {
368
+ const nodeTags = task.tags || [];
369
+ const hasAllTags = options.tags.every((t) => nodeTags.includes(t));
370
+ if (!hasAllTags)
371
+ continue;
372
+ }
373
+ if (!matchesPriority(task, options?.priority))
374
+ continue;
375
+ if (options?.assignee && task.assignee !== options.assignee)
376
+ continue;
377
+ // Check for active blockers
378
+ const blockerEdges = await storage.getEdgesTo(task.id, 'blocks');
379
+ let hasActiveBlocker = false;
380
+ for (const edge of blockerEdges) {
381
+ // Use resolveNode to support cross-provider resolution
382
+ const blocker = await resolveNode(edge.from_id);
383
+ if (blocker && isActiveNode(blocker)) {
384
+ hasActiveBlocker = true;
385
+ break;
386
+ }
387
+ }
388
+ if (!hasActiveBlocker) {
389
+ const parsed = safeParseNode(task);
390
+ if (parsed && isTask(parsed)) {
391
+ readyTasks.push(parsed);
392
+ }
393
+ }
394
+ }
395
+ // Sort by priority (lower priority number = higher priority)
396
+ // Items without priority come after items with priority
397
+ readyTasks.sort((a, b) => {
398
+ const aPriority = a.priority ?? Infinity;
399
+ const bPriority = b.priority ?? Infinity;
400
+ return aPriority - bPriority;
401
+ });
402
+ // Apply limit
403
+ if (options?.limit !== undefined) {
404
+ return readyTasks.slice(0, options.limit);
405
+ }
406
+ return readyTasks;
407
+ },
408
+ // =========================================================================
409
+ // Feedback Queries
410
+ // =========================================================================
411
+ async feedback(targetId, options) {
412
+ // Query feedback nodes that target this node
413
+ const allFeedback = await storage.queryNodes({
414
+ type: 'feedback',
415
+ });
416
+ const result = [];
417
+ for (const node of allFeedback) {
418
+ // Check if this feedback targets the specified node
419
+ if (node.target_id !== targetId)
420
+ continue;
421
+ // Apply type filter
422
+ if (options?.type && node.feedback_type !== options.type)
423
+ continue;
424
+ // Apply resolved filter
425
+ if (options?.resolved !== undefined) {
426
+ if (options.resolved && !node.resolved)
427
+ continue;
428
+ if (!options.resolved && node.resolved)
429
+ continue;
430
+ }
431
+ // Apply dismissed filter
432
+ if (!options?.includeDismissed && node.dismissed)
433
+ continue;
434
+ const parsed = safeParseNode(node);
435
+ if (parsed && isFeedback(parsed)) {
436
+ result.push(parsed);
437
+ }
438
+ }
439
+ return result;
440
+ },
441
+ async unresolvedFeedback(targetId) {
442
+ // Query all feedback nodes
443
+ const allFeedback = await storage.queryNodes({
444
+ type: 'feedback',
445
+ });
446
+ const result = [];
447
+ for (const node of allFeedback) {
448
+ // Filter by target if specified
449
+ if (targetId && node.target_id !== targetId)
450
+ continue;
451
+ // Only unresolved and not dismissed
452
+ if (node.resolved || node.dismissed)
453
+ continue;
454
+ const parsed = safeParseNode(node);
455
+ if (parsed && isFeedback(parsed)) {
456
+ result.push(parsed);
457
+ }
458
+ }
459
+ return result;
460
+ },
461
+ };
462
+ }
463
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/graph/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Graph Store
3
+ *
4
+ * Unified API coordinating JSONL and SQLite persisters.
5
+ * Provides CRUD operations with validation and debounced persistence.
6
+ */
7
+ import type { Storage } from '../storage/interface.js';
8
+ import type { StoredNode, StoredEdge } from '../schema/storage.js';
9
+ import type { Node, Edge } from '../schema/index.js';
10
+ import type { CreateNodeInput, UpdateNodeInput, DeleteOptions, CreateEdgeInput, GraphStoreConfig } from './types.js';
11
+ import type { QueryEngine } from './query.js';
12
+ /**
13
+ * Transaction interface for atomic operations
14
+ */
15
+ export interface GraphTransaction {
16
+ createNode(input: CreateNodeInput): Promise<Node>;
17
+ updateNode(id: string, updates: UpdateNodeInput): Promise<Node>;
18
+ deleteNode(id: string): Promise<void>;
19
+ createEdge(input: CreateEdgeInput): Promise<Edge>;
20
+ deleteEdge(id: string): Promise<void>;
21
+ }
22
+ /**
23
+ * Graph store interface
24
+ */
25
+ export interface GraphStore {
26
+ /** Initialize the store (load from JSONL, sync to SQLite) */
27
+ initialize(): Promise<void>;
28
+ /** Close the store (flush pending changes) */
29
+ close(): Promise<void>;
30
+ /** Force immediate flush to JSONL */
31
+ flush(): Promise<void>;
32
+ /** Create a new node */
33
+ createNode(input: CreateNodeInput): Promise<Node>;
34
+ /** Get a node by ID */
35
+ getNode(id: string): Promise<Node | null>;
36
+ /** Update an existing node */
37
+ updateNode(id: string, updates: UpdateNodeInput): Promise<Node>;
38
+ /** Delete a node (soft delete by default) */
39
+ deleteNode(id: string, options?: DeleteOptions): Promise<void>;
40
+ /** Restore an archived node */
41
+ restoreNode(id: string): Promise<Node>;
42
+ /** Create a new edge */
43
+ createEdge(input: CreateEdgeInput): Promise<Edge>;
44
+ /** Get an edge by ID */
45
+ getEdge(id: string): Promise<Edge | null>;
46
+ /** Delete an edge */
47
+ deleteEdge(id: string): Promise<void>;
48
+ /** Add tags to a node */
49
+ addTags(nodeId: string, tags: string[]): Promise<void>;
50
+ /** Remove tags from a node */
51
+ removeTags(nodeId: string, tags: string[]): Promise<void>;
52
+ /** Set tags for a node (replaces existing) */
53
+ setTags(nodeId: string, tags: string[]): Promise<void>;
54
+ /** Query engine for graph traversal */
55
+ readonly query: QueryEngine;
56
+ /** Execute operations in a transaction */
57
+ transaction<T>(fn: (tx: GraphTransaction) => Promise<T>): Promise<T>;
58
+ }
59
+ /**
60
+ * Create a graph store
61
+ *
62
+ * @param config - Store configuration
63
+ * @param storage - Storage implementation (SQLite persister)
64
+ * @param jsonlLoad - Function to load from JSONL
65
+ * @param jsonlSave - Function to save to JSONL
66
+ */
67
+ export declare function createGraphStore(config: GraphStoreConfig, storage: Storage, jsonlLoad: () => Promise<{
68
+ nodes: StoredNode[];
69
+ edges: StoredEdge[];
70
+ }>, jsonlSave: (nodes: StoredNode[], edges: StoredEdge[]) => Promise<void>): GraphStore;
71
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/graph/store.ts"],"names":[],"mappings":"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"}