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,568 @@
1
+ /**
2
+ * Provider-Aware Graph Store
3
+ *
4
+ * Extends GraphStore with provider resolution and materialization capabilities.
5
+ * This wrapper adds the ability to resolve external URIs and materialize
6
+ * external nodes while keeping the base GraphStore implementation intact.
7
+ */
8
+ import { ProviderError } from '../providers/types.js';
9
+ import { createProviderRegistry } from '../providers/registry.js';
10
+ import { createNativeProvider } from '../providers/native.js';
11
+ import { createMaterializationManager } from '../providers/materialization.js';
12
+ import { isWatchable, } from '../providers/traits/Watchable.js';
13
+ import { isTaskManageable, } from '../providers/traits/TaskManageable.js';
14
+ // ============================================================================
15
+ // Constants
16
+ // ============================================================================
17
+ /**
18
+ * Pattern for local node IDs (s-, i-, f-, e-, x-)
19
+ */
20
+ const LOCAL_ID_PATTERN = /^[ctfex]-[a-z0-9]+$/;
21
+ // ============================================================================
22
+ // Helper Functions
23
+ // ============================================================================
24
+ /**
25
+ * Check if a string is a local node ID
26
+ */
27
+ function isLocalId(idOrUri) {
28
+ return LOCAL_ID_PATTERN.test(idOrUri);
29
+ }
30
+ /**
31
+ * Convert CreateNodeInput to ProviderCreateInput.
32
+ * Passes through tags and parent_id via metadata so providers can use them.
33
+ */
34
+ function toProviderCreateInput(input) {
35
+ // Merge tags and parent_id into metadata for providers that support them
36
+ const metadata = { ...input.metadata };
37
+ if (input.tags && input.tags.length > 0) {
38
+ metadata.tags = input.tags;
39
+ }
40
+ if (input.parent_id) {
41
+ metadata.parent_id = input.parent_id;
42
+ }
43
+ return {
44
+ type: input.type === 'task' ? 'issue' : input.type === 'context' ? 'spec' : 'issue',
45
+ title: input.title,
46
+ content: input.content,
47
+ status: input.status,
48
+ priority: input.priority,
49
+ metadata: Object.keys(metadata).length > 0 ? metadata : input.metadata,
50
+ };
51
+ }
52
+ /**
53
+ * Convert UpdateNodeInput to ProviderUpdateInput
54
+ */
55
+ function toProviderUpdateInput(updates) {
56
+ return {
57
+ title: updates.title,
58
+ content: updates.content,
59
+ status: updates.status,
60
+ priority: updates.priority,
61
+ metadata: updates.metadata,
62
+ };
63
+ }
64
+ /**
65
+ * Find external node by URI in the store
66
+ */
67
+ async function findExternalNodeByUri(uri, store) {
68
+ const nodes = await store.query.nodes({
69
+ type: 'external',
70
+ });
71
+ for (const node of nodes) {
72
+ if (node.type === 'external' && node.uri === uri) {
73
+ return node;
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ // ============================================================================
79
+ // Factory Function
80
+ // ============================================================================
81
+ /**
82
+ * Create a provider-aware store by wrapping an existing GraphStore
83
+ */
84
+ export function createProviderAwareStore(baseStore, config = {}) {
85
+ // Set up provider registry
86
+ const registry = config.registry ?? createProviderRegistry();
87
+ // Set up materialization manager
88
+ const materialization = createMaterializationManager(config.materialization);
89
+ // Default provider configuration
90
+ const defaultProviderName = config.defaultProvider ?? 'native';
91
+ // Auto-register native provider if not disabled
92
+ if (config.autoRegisterNative !== false) {
93
+ const nativeProvider = createNativeProvider(baseStore);
94
+ registry.register(nativeProvider);
95
+ }
96
+ // =========================================================================
97
+ // Provider Watch State
98
+ // =========================================================================
99
+ /** External handlers for provider change events */
100
+ const changeHandlers = [];
101
+ /** Track which providers are currently being watched */
102
+ const watchedProviders = new Set();
103
+ /**
104
+ * Handle an inbound provider change event.
105
+ * Auto-refreshes materialized nodes, then notifies external handlers.
106
+ */
107
+ async function handleProviderChange(providerName, event) {
108
+ if (event.kind === 'node') {
109
+ await handleNodeChange(providerName, event.event);
110
+ }
111
+ // Edge events: no auto-action needed for now — consumers can
112
+ // react via onProviderChange handlers. In the future, the
113
+ // federated graph could invalidate cached edge data here.
114
+ // Notify external handlers
115
+ for (const handler of changeHandlers) {
116
+ try {
117
+ handler(providerName, event);
118
+ }
119
+ catch {
120
+ // Don't let handler errors break the watch loop
121
+ }
122
+ }
123
+ }
124
+ /**
125
+ * Handle a node change from a provider.
126
+ * If the node is already materialized locally, refresh it.
127
+ */
128
+ async function handleNodeChange(_providerName, event) {
129
+ // Check if we have a materialized copy of this node
130
+ const existing = await findExternalNodeByUri(event.uri, baseStore);
131
+ if (!existing) {
132
+ // Node not materialized locally — nothing to refresh.
133
+ // The event is still forwarded to external handlers above.
134
+ return;
135
+ }
136
+ if (event.type === 'deleted') {
137
+ // Mark the local materialized node as stale
138
+ await baseStore.updateNode(existing.id, {
139
+ metadata: {
140
+ ...existing.metadata,
141
+ stale: true,
142
+ last_refresh_at: new Date().toISOString(),
143
+ last_refresh_error: 'Node deleted in provider',
144
+ },
145
+ });
146
+ return;
147
+ }
148
+ // For 'created' (re-appeared) or 'updated': refresh materialized copy
149
+ if (event.node) {
150
+ // Provider included the full node data — materialize directly
151
+ await materialization.materialize(event.uri, event.node, baseStore);
152
+ }
153
+ else {
154
+ // No node data in event — fetch fresh from provider
155
+ const provider = registry.resolveProvider(event.uri);
156
+ if (provider) {
157
+ await materialization.refresh(existing, provider, baseStore);
158
+ }
159
+ }
160
+ }
161
+ // Create the provider-aware store by extending the base store
162
+ const providerStore = {
163
+ // Spread all base store properties and methods
164
+ ...baseStore,
165
+ // Add provider-specific properties
166
+ providers: registry,
167
+ materialization,
168
+ /**
169
+ * Resolve a node by ID or URI
170
+ */
171
+ async resolveNode(idOrUri, options) {
172
+ return resolveNodeInternal(idOrUri, options);
173
+ },
174
+ /**
175
+ * Explicitly materialize an external node
176
+ */
177
+ async materializeNode(uri) {
178
+ // Find provider for this URI
179
+ const provider = registry.resolveProvider(uri);
180
+ if (!provider) {
181
+ throw new Error(`No provider found for URI: ${uri}`);
182
+ }
183
+ // Parse and fetch
184
+ const parsed = provider.parseUri(uri);
185
+ if (!parsed) {
186
+ throw new Error(`Invalid URI for provider: ${uri}`);
187
+ }
188
+ const providerNode = await provider.get(parsed.id);
189
+ if (!providerNode) {
190
+ throw new Error(`Node not found: ${uri}`);
191
+ }
192
+ // Materialize
193
+ return materialization.materialize(uri, providerNode, baseStore);
194
+ },
195
+ /**
196
+ * Refresh a materialized external node
197
+ */
198
+ async refreshNode(id) {
199
+ // Get the existing node
200
+ const node = await baseStore.getNode(id);
201
+ if (!node || node.type !== 'external') {
202
+ throw new Error(`Node not found or not external: ${id}`);
203
+ }
204
+ const externalNode = node;
205
+ // Find provider
206
+ const provider = registry.resolveProvider(externalNode.uri);
207
+ if (!provider) {
208
+ throw new Error(`No provider found for URI: ${externalNode.uri}`);
209
+ }
210
+ // Refresh using materialization manager
211
+ return materialization.refresh(externalNode, provider, baseStore);
212
+ },
213
+ /**
214
+ * Start background sync
215
+ */
216
+ startBackgroundSync() {
217
+ materialization.startBackgroundSync(baseStore, registry);
218
+ },
219
+ /**
220
+ * Stop background sync
221
+ */
222
+ stopBackgroundSync() {
223
+ materialization.stopBackgroundSync();
224
+ },
225
+ /**
226
+ * Check if background sync is running
227
+ */
228
+ isBackgroundSyncRunning() {
229
+ return materialization.isBackgroundSyncRunning();
230
+ },
231
+ /**
232
+ * Start watching all watchable providers for changes.
233
+ */
234
+ startProviderWatching() {
235
+ for (const provider of registry.list()) {
236
+ if (isWatchable(provider) && !watchedProviders.has(provider.name)) {
237
+ provider.startWatching((event) => {
238
+ void handleProviderChange(provider.name, event);
239
+ });
240
+ watchedProviders.add(provider.name);
241
+ }
242
+ }
243
+ },
244
+ /**
245
+ * Stop watching all providers for changes.
246
+ */
247
+ stopProviderWatching() {
248
+ for (const provider of registry.list()) {
249
+ if (isWatchable(provider) && watchedProviders.has(provider.name)) {
250
+ provider.stopWatching();
251
+ watchedProviders.delete(provider.name);
252
+ }
253
+ }
254
+ },
255
+ /**
256
+ * Register an external handler for provider change events.
257
+ */
258
+ onProviderChange(handler) {
259
+ changeHandlers.push(handler);
260
+ return () => {
261
+ const idx = changeHandlers.indexOf(handler);
262
+ if (idx >= 0)
263
+ changeHandlers.splice(idx, 1);
264
+ };
265
+ },
266
+ // =========================================================================
267
+ // Provider-Routed CRUD (Unified Interface)
268
+ // =========================================================================
269
+ defaultProvider: defaultProviderName,
270
+ async providerCreate(input, options) {
271
+ const targetScheme = options?.scheme ?? defaultProviderName;
272
+ // Native/local path — no provider routing needed
273
+ if (targetScheme === 'native' || targetScheme === 'opentasks') {
274
+ const node = await baseStore.createNode(input);
275
+ return { node, provider: 'native' };
276
+ }
277
+ // Find the target provider by name or scheme
278
+ const provider = registry.get(targetScheme) ?? registry.resolveProvider(`${targetScheme}://`);
279
+ if (!provider) {
280
+ throw new ProviderError('NOT_FOUND', `Unknown provider: ${targetScheme}`, targetScheme);
281
+ }
282
+ if (!provider.capabilities.write) {
283
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${provider.name} is read-only`, provider.name);
284
+ }
285
+ if (!provider.capabilities.mount) {
286
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${provider.name} does not support mounting`, provider.name);
287
+ }
288
+ // Create via provider, forwarding operational context
289
+ const providerNode = await provider.create(toProviderCreateInput(input), options?.context);
290
+ // Build canonical URI and always materialize on create
291
+ const uri = provider.buildUri(providerNode.id);
292
+ const materializedNode = await materialization.materialize(uri, providerNode, baseStore);
293
+ return {
294
+ node: materializedNode,
295
+ uri,
296
+ provider: provider.name,
297
+ };
298
+ },
299
+ async providerGet(idOrUri, options) {
300
+ // 1. Local ID — direct store access
301
+ if (isLocalId(idOrUri)) {
302
+ const node = await baseStore.getNode(idOrUri);
303
+ // If it's a materialized external node, check staleness
304
+ if (node?.type === 'external') {
305
+ const extNode = node;
306
+ if (materialization.isStale(extNode)) {
307
+ const provider = registry.resolveProvider(extNode.uri);
308
+ if (provider) {
309
+ const refreshed = await materialization.refresh(extNode, provider, baseStore, options?.context);
310
+ return refreshed ?? node;
311
+ }
312
+ }
313
+ }
314
+ return node;
315
+ }
316
+ // 2. Provider URI — resolve through provider, always materialize
317
+ const result = await resolveNodeInternal(idOrUri, { materialize: true }, options?.context);
318
+ return result;
319
+ },
320
+ async providerUpdate(idOrUri, updates, options) {
321
+ // Resolve the target node and provider
322
+ const { node, provider: owningProvider, isExternal } = await resolveForWrite(idOrUri);
323
+ if (!isExternal || owningProvider?.name === 'native') {
324
+ // Local node — update directly
325
+ return baseStore.updateNode(node.id, updates);
326
+ }
327
+ // External node but provider not registered — error rather than silent local-only update
328
+ if (!owningProvider) {
329
+ const extNode = node;
330
+ throw new ProviderError('NOT_FOUND', `Provider not registered for external node URI: ${extNode.uri}. Cannot route update.`);
331
+ }
332
+ if (!owningProvider.capabilities.write) {
333
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${owningProvider.name} is read-only`, owningProvider.name);
334
+ }
335
+ // Route update to external provider
336
+ const extNode = node;
337
+ const parsed = owningProvider.parseUri(extNode.uri);
338
+ if (!parsed) {
339
+ throw new ProviderError('INVALID_URI', `Cannot parse URI: ${extNode.uri}`, owningProvider.name);
340
+ }
341
+ const updatedProviderNode = await owningProvider.update(parsed.id, toProviderUpdateInput(updates), options?.context);
342
+ // Refresh local materialized copy with provider's response
343
+ return materialization.materialize(extNode.uri, updatedProviderNode, baseStore);
344
+ },
345
+ async providerDelete(idOrUri, options) {
346
+ // Resolve the target node and provider
347
+ const { node, provider: owningProvider, isExternal } = await resolveForWrite(idOrUri);
348
+ if (!isExternal || owningProvider?.name === 'native') {
349
+ // Local node — delete directly
350
+ await baseStore.deleteNode(node.id, options);
351
+ return;
352
+ }
353
+ // External node but provider not registered — error rather than silent local-only delete
354
+ if (!owningProvider) {
355
+ const extNode = node;
356
+ throw new ProviderError('NOT_FOUND', `Provider not registered for external node URI: ${extNode.uri}. Cannot route delete.`);
357
+ }
358
+ if (!owningProvider.capabilities.write) {
359
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${owningProvider.name} is read-only`, owningProvider.name);
360
+ }
361
+ // Delete in external provider
362
+ const extNode = node;
363
+ const parsed = owningProvider.parseUri(extNode.uri);
364
+ if (!parsed) {
365
+ throw new ProviderError('INVALID_URI', `Cannot parse URI: ${extNode.uri}`, owningProvider.name);
366
+ }
367
+ await owningProvider.delete(parsed.id, options?.context);
368
+ // Remove local materialized copy
369
+ await baseStore.deleteNode(node.id, { hard: true });
370
+ },
371
+ // =========================================================================
372
+ // Task Lifecycle (TaskManageable Trait — Federated)
373
+ // =========================================================================
374
+ async taskTransition(idOrUri, action, options) {
375
+ const { provider, providerId } = await resolveTaskProvider(idOrUri);
376
+ const updatedNode = await provider.transitionTask(providerId, action, options?.context);
377
+ // Materialize the result if external
378
+ const uri = provider.buildUri(updatedNode.id);
379
+ const materialized = await materialization.materialize(uri, updatedNode, baseStore);
380
+ return {
381
+ node: materialized,
382
+ provider: provider.name,
383
+ action,
384
+ };
385
+ },
386
+ async taskReady(options) {
387
+ const results = [];
388
+ for (const provider of registry.list()) {
389
+ if (!isTaskManageable(provider))
390
+ continue;
391
+ if (options?.providers && !options.providers.includes(provider.name))
392
+ continue;
393
+ const readyNodes = await provider.readyTasks({
394
+ limit: options?.limit,
395
+ tags: options?.tags,
396
+ priority: options?.priority,
397
+ assignee: options?.assignee,
398
+ }, options?.context);
399
+ // Materialize each ready task so callers get Node objects
400
+ for (const pNode of readyNodes) {
401
+ const uri = provider.buildUri(pNode.id);
402
+ const existing = await findExternalNodeByUri(uri, baseStore);
403
+ if (existing) {
404
+ results.push(existing);
405
+ }
406
+ else {
407
+ const materialized = await materialization.materialize(uri, pNode, baseStore);
408
+ results.push(materialized);
409
+ }
410
+ }
411
+ }
412
+ // Apply global limit after aggregating across providers
413
+ if (options?.limit && results.length > options.limit) {
414
+ return results.slice(0, options.limit);
415
+ }
416
+ return results;
417
+ },
418
+ async taskAssign(idOrUri, assignee, options) {
419
+ const { provider, providerId } = await resolveTaskProvider(idOrUri);
420
+ if (!provider.taskCapabilities.supportsAssignment || !provider.assignTask) {
421
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${provider.name} does not support task assignment`, provider.name);
422
+ }
423
+ const updatedNode = await provider.assignTask(providerId, assignee, options?.context);
424
+ const uri = provider.buildUri(updatedNode.id);
425
+ return materialization.materialize(uri, updatedNode, baseStore);
426
+ },
427
+ async taskValidActions(idOrUri) {
428
+ const { provider, providerId } = await resolveTaskProvider(idOrUri);
429
+ if (provider.validActions) {
430
+ return provider.validActions(providerId);
431
+ }
432
+ // Fall back to the provider's declared capabilities
433
+ return provider.taskCapabilities.actions;
434
+ },
435
+ };
436
+ // ===========================================================================
437
+ // Internal Helper: Resolve a task-capable provider for a given ID or URI
438
+ // ===========================================================================
439
+ async function resolveTaskProvider(idOrUri) {
440
+ // If it's a local ID, check if it's an external node with a provider URI
441
+ if (isLocalId(idOrUri)) {
442
+ const node = await baseStore.getNode(idOrUri);
443
+ if (!node) {
444
+ throw new ProviderError('NOT_FOUND', `Node not found: ${idOrUri}`);
445
+ }
446
+ if (node.type === 'external') {
447
+ const extNode = node;
448
+ const provider = registry.resolveProvider(extNode.uri);
449
+ if (!provider) {
450
+ throw new ProviderError('NOT_FOUND', `No provider found for URI: ${extNode.uri}`);
451
+ }
452
+ if (!isTaskManageable(provider)) {
453
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${provider.name} does not support task operations`, provider.name);
454
+ }
455
+ const parsed = provider.parseUri(extNode.uri);
456
+ if (!parsed) {
457
+ throw new ProviderError('INVALID_URI', `Cannot parse URI: ${extNode.uri}`, provider.name);
458
+ }
459
+ return { provider, providerId: parsed.id };
460
+ }
461
+ // Local non-external node — check native provider
462
+ const nativeProvider = registry.get('native');
463
+ if (!nativeProvider || !isTaskManageable(nativeProvider)) {
464
+ throw new ProviderError('NOT_SUPPORTED', 'Native provider does not support task operations');
465
+ }
466
+ return {
467
+ provider: nativeProvider,
468
+ providerId: idOrUri,
469
+ };
470
+ }
471
+ // Provider URI
472
+ const provider = registry.resolveProvider(idOrUri);
473
+ if (!provider) {
474
+ throw new ProviderError('NOT_FOUND', `No provider found for: ${idOrUri}`);
475
+ }
476
+ if (!isTaskManageable(provider)) {
477
+ throw new ProviderError('NOT_SUPPORTED', `Provider ${provider.name} does not support task operations`, provider.name);
478
+ }
479
+ const parsed = provider.parseUri(idOrUri);
480
+ if (!parsed) {
481
+ throw new ProviderError('INVALID_URI', `Cannot parse URI: ${idOrUri}`, provider.name);
482
+ }
483
+ return { provider, providerId: parsed.id };
484
+ }
485
+ // ===========================================================================
486
+ // Internal Helper: Resolve any node by ID or URI (used by resolveNode and providerGet)
487
+ // ===========================================================================
488
+ async function resolveNodeInternal(idOrUri, options, context) {
489
+ // 1. Check if local ID - use existing getNode
490
+ if (isLocalId(idOrUri)) {
491
+ return baseStore.getNode(idOrUri);
492
+ }
493
+ // 2. Check for cached materialized node (unless refresh requested)
494
+ if (!options?.refresh) {
495
+ const existing = await findExternalNodeByUri(idOrUri, baseStore);
496
+ if (existing && !materialization.isStale(existing)) {
497
+ return existing;
498
+ }
499
+ }
500
+ // 3. Find provider for this URI
501
+ const provider = registry.resolveProvider(idOrUri);
502
+ if (!provider) {
503
+ return null;
504
+ }
505
+ // 4. Parse URI and fetch from provider
506
+ const parsed = provider.parseUri(idOrUri);
507
+ if (!parsed) {
508
+ return null;
509
+ }
510
+ const providerNode = await provider.get(parsed.id, context);
511
+ if (!providerNode) {
512
+ return null;
513
+ }
514
+ // 5. Materialize if requested or per strategy
515
+ const shouldMaterialize = materialization.shouldMaterialize(idOrUri, {
516
+ accessType: 'resolve',
517
+ explicit: options?.materialize,
518
+ });
519
+ if (shouldMaterialize) {
520
+ return materialization.materialize(idOrUri, providerNode, baseStore);
521
+ }
522
+ // Return provider node directly
523
+ return providerNode;
524
+ }
525
+ // ===========================================================================
526
+ // Internal Helper: Resolve a node + its owning provider for write operations
527
+ // ===========================================================================
528
+ async function resolveForWrite(idOrUri) {
529
+ // Case 1: Provider URI (e.g., sudocode://proj/i-456)
530
+ if (!isLocalId(idOrUri)) {
531
+ const provider = registry.resolveProvider(idOrUri);
532
+ if (!provider) {
533
+ throw new ProviderError('NOT_FOUND', `No provider found for: ${idOrUri}`);
534
+ }
535
+ // Check if we have a materialized copy
536
+ const existing = await findExternalNodeByUri(idOrUri, baseStore);
537
+ if (existing) {
538
+ return { node: existing, provider, isExternal: true };
539
+ }
540
+ // No local copy — materialize first so we have a node to return
541
+ const parsed = provider.parseUri(idOrUri);
542
+ if (!parsed) {
543
+ throw new ProviderError('INVALID_URI', `Cannot parse URI: ${idOrUri}`, provider.name);
544
+ }
545
+ const providerNode = await provider.get(parsed.id);
546
+ if (!providerNode) {
547
+ throw new ProviderError('NOT_FOUND', `Node not found: ${idOrUri}`, provider.name);
548
+ }
549
+ const materialized = await materialization.materialize(idOrUri, providerNode, baseStore);
550
+ return { node: materialized, provider, isExternal: true };
551
+ }
552
+ // Case 2: Local ID (s-abc1, i-def2, x-ghi3)
553
+ const node = await baseStore.getNode(idOrUri);
554
+ if (!node) {
555
+ throw new ProviderError('NOT_FOUND', `Node not found: ${idOrUri}`);
556
+ }
557
+ // Check if it's a materialized external node
558
+ if (node.type === 'external') {
559
+ const extNode = node;
560
+ const provider = registry.resolveProvider(extNode.uri);
561
+ return { node, provider, isExternal: true };
562
+ }
563
+ // Pure local node
564
+ return { node, provider: null, isExternal: false };
565
+ }
566
+ return providerStore;
567
+ }
568
+ //# sourceMappingURL=provider-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-store.js","sourceRoot":"","sources":["../../src/graph/provider-store.ts"],"names":[],"mappings":"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"}