opentasks 0.0.7 → 0.0.9

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 (505) hide show
  1. package/dist/daemon/entire-linker.d.ts.map +1 -1
  2. package/dist/daemon/entire-linker.js +42 -48
  3. package/dist/daemon/entire-linker.js.map +1 -1
  4. package/dist/daemon/entire-watcher.d.ts +0 -11
  5. package/dist/daemon/entire-watcher.d.ts.map +1 -1
  6. package/dist/daemon/entire-watcher.js +1 -32
  7. package/dist/daemon/entire-watcher.js.map +1 -1
  8. package/dist/graph/query.js +3 -3
  9. package/dist/graph/query.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/providers/entire.d.ts +0 -10
  15. package/dist/providers/entire.d.ts.map +1 -1
  16. package/dist/providers/entire.js +0 -13
  17. package/dist/providers/entire.js.map +1 -1
  18. package/dist/providers/index.d.ts +1 -0
  19. package/dist/providers/index.d.ts.map +1 -1
  20. package/dist/providers/index.js +2 -0
  21. package/dist/providers/index.js.map +1 -1
  22. package/dist/providers/map-connector.d.ts +87 -0
  23. package/dist/providers/map-connector.d.ts.map +1 -0
  24. package/dist/providers/map-connector.js +159 -0
  25. package/dist/providers/map-connector.js.map +1 -0
  26. package/dist/storage/interface.d.ts +6 -0
  27. package/dist/storage/interface.d.ts.map +1 -1
  28. package/dist/storage/interface.js.map +1 -1
  29. package/dist/storage/sqlite.d.ts +1 -0
  30. package/dist/storage/sqlite.d.ts.map +1 -1
  31. package/dist/storage/sqlite.js +11 -0
  32. package/dist/storage/sqlite.js.map +1 -1
  33. package/package.json +2 -2
  34. package/dist/__tests__/cli-tools.test.d.ts +0 -8
  35. package/dist/__tests__/cli-tools.test.d.ts.map +0 -1
  36. package/dist/__tests__/cli-tools.test.js +0 -546
  37. package/dist/__tests__/cli-tools.test.js.map +0 -1
  38. package/dist/__tests__/cli.test.d.ts +0 -5
  39. package/dist/__tests__/cli.test.d.ts.map +0 -1
  40. package/dist/__tests__/cli.test.js +0 -77
  41. package/dist/__tests__/cli.test.js.map +0 -1
  42. package/dist/__tests__/p1-p3-gaps.test.d.ts +0 -2
  43. package/dist/__tests__/p1-p3-gaps.test.d.ts.map +0 -1
  44. package/dist/__tests__/p1-p3-gaps.test.js +0 -463
  45. package/dist/__tests__/p1-p3-gaps.test.js.map +0 -1
  46. package/dist/client/__tests__/client-crud.test.d.ts +0 -7
  47. package/dist/client/__tests__/client-crud.test.d.ts.map +0 -1
  48. package/dist/client/__tests__/client-crud.test.js +0 -404
  49. package/dist/client/__tests__/client-crud.test.js.map +0 -1
  50. package/dist/client/__tests__/client.test.d.ts +0 -5
  51. package/dist/client/__tests__/client.test.d.ts.map +0 -1
  52. package/dist/client/__tests__/client.test.js +0 -518
  53. package/dist/client/__tests__/client.test.js.map +0 -1
  54. package/dist/config/__tests__/defaults.test.d.ts +0 -2
  55. package/dist/config/__tests__/defaults.test.d.ts.map +0 -1
  56. package/dist/config/__tests__/defaults.test.js +0 -57
  57. package/dist/config/__tests__/defaults.test.js.map +0 -1
  58. package/dist/config/__tests__/env.test.d.ts +0 -2
  59. package/dist/config/__tests__/env.test.d.ts.map +0 -1
  60. package/dist/config/__tests__/env.test.js +0 -136
  61. package/dist/config/__tests__/env.test.js.map +0 -1
  62. package/dist/config/__tests__/index.test.d.ts +0 -2
  63. package/dist/config/__tests__/index.test.d.ts.map +0 -1
  64. package/dist/config/__tests__/index.test.js +0 -113
  65. package/dist/config/__tests__/index.test.js.map +0 -1
  66. package/dist/config/__tests__/loader.test.d.ts +0 -2
  67. package/dist/config/__tests__/loader.test.d.ts.map +0 -1
  68. package/dist/config/__tests__/loader.test.js +0 -128
  69. package/dist/config/__tests__/loader.test.js.map +0 -1
  70. package/dist/config/__tests__/merge.test.d.ts +0 -2
  71. package/dist/config/__tests__/merge.test.d.ts.map +0 -1
  72. package/dist/config/__tests__/merge.test.js +0 -79
  73. package/dist/config/__tests__/merge.test.js.map +0 -1
  74. package/dist/config/__tests__/schema.test.d.ts +0 -2
  75. package/dist/config/__tests__/schema.test.d.ts.map +0 -1
  76. package/dist/config/__tests__/schema.test.js +0 -300
  77. package/dist/config/__tests__/schema.test.js.map +0 -1
  78. package/dist/core/__tests__/conditional-redirects.test.d.ts +0 -2
  79. package/dist/core/__tests__/conditional-redirects.test.d.ts.map +0 -1
  80. package/dist/core/__tests__/conditional-redirects.test.js +0 -83
  81. package/dist/core/__tests__/conditional-redirects.test.js.map +0 -1
  82. package/dist/core/__tests__/connections.test.d.ts +0 -2
  83. package/dist/core/__tests__/connections.test.d.ts.map +0 -1
  84. package/dist/core/__tests__/connections.test.js +0 -158
  85. package/dist/core/__tests__/connections.test.js.map +0 -1
  86. package/dist/core/__tests__/hash.test.d.ts +0 -2
  87. package/dist/core/__tests__/hash.test.d.ts.map +0 -1
  88. package/dist/core/__tests__/hash.test.js +0 -139
  89. package/dist/core/__tests__/hash.test.js.map +0 -1
  90. package/dist/core/__tests__/id.test.d.ts +0 -2
  91. package/dist/core/__tests__/id.test.d.ts.map +0 -1
  92. package/dist/core/__tests__/id.test.js +0 -142
  93. package/dist/core/__tests__/id.test.js.map +0 -1
  94. package/dist/core/__tests__/location.test.d.ts +0 -2
  95. package/dist/core/__tests__/location.test.d.ts.map +0 -1
  96. package/dist/core/__tests__/location.test.js +0 -77
  97. package/dist/core/__tests__/location.test.js.map +0 -1
  98. package/dist/core/__tests__/merge-driver.test.d.ts +0 -2
  99. package/dist/core/__tests__/merge-driver.test.d.ts.map +0 -1
  100. package/dist/core/__tests__/merge-driver.test.js +0 -218
  101. package/dist/core/__tests__/merge-driver.test.js.map +0 -1
  102. package/dist/core/__tests__/redirects.test.d.ts +0 -2
  103. package/dist/core/__tests__/redirects.test.d.ts.map +0 -1
  104. package/dist/core/__tests__/redirects.test.js +0 -123
  105. package/dist/core/__tests__/redirects.test.js.map +0 -1
  106. package/dist/core/__tests__/resolve-location-target.test.d.ts +0 -8
  107. package/dist/core/__tests__/resolve-location-target.test.d.ts.map +0 -1
  108. package/dist/core/__tests__/resolve-location-target.test.js +0 -303
  109. package/dist/core/__tests__/resolve-location-target.test.js.map +0 -1
  110. package/dist/core/__tests__/uri.test.d.ts +0 -2
  111. package/dist/core/__tests__/uri.test.d.ts.map +0 -1
  112. package/dist/core/__tests__/uri.test.js +0 -159
  113. package/dist/core/__tests__/uri.test.js.map +0 -1
  114. package/dist/core/__tests__/worktree.test.d.ts +0 -2
  115. package/dist/core/__tests__/worktree.test.d.ts.map +0 -1
  116. package/dist/core/__tests__/worktree.test.js +0 -120
  117. package/dist/core/__tests__/worktree.test.js.map +0 -1
  118. package/dist/daemon/__tests__/flush.test.d.ts +0 -5
  119. package/dist/daemon/__tests__/flush.test.d.ts.map +0 -1
  120. package/dist/daemon/__tests__/flush.test.js +0 -213
  121. package/dist/daemon/__tests__/flush.test.js.map +0 -1
  122. package/dist/daemon/__tests__/integration.test.d.ts +0 -7
  123. package/dist/daemon/__tests__/integration.test.d.ts.map +0 -1
  124. package/dist/daemon/__tests__/integration.test.js +0 -276
  125. package/dist/daemon/__tests__/integration.test.js.map +0 -1
  126. package/dist/daemon/__tests__/ipc.test.d.ts +0 -5
  127. package/dist/daemon/__tests__/ipc.test.d.ts.map +0 -1
  128. package/dist/daemon/__tests__/ipc.test.js +0 -314
  129. package/dist/daemon/__tests__/ipc.test.js.map +0 -1
  130. package/dist/daemon/__tests__/lifecycle.test.d.ts +0 -5
  131. package/dist/daemon/__tests__/lifecycle.test.d.ts.map +0 -1
  132. package/dist/daemon/__tests__/lifecycle.test.js +0 -301
  133. package/dist/daemon/__tests__/lifecycle.test.js.map +0 -1
  134. package/dist/daemon/__tests__/lock.test.d.ts +0 -5
  135. package/dist/daemon/__tests__/lock.test.d.ts.map +0 -1
  136. package/dist/daemon/__tests__/lock.test.js +0 -192
  137. package/dist/daemon/__tests__/lock.test.js.map +0 -1
  138. package/dist/daemon/__tests__/methods/graph.test.d.ts +0 -5
  139. package/dist/daemon/__tests__/methods/graph.test.d.ts.map +0 -1
  140. package/dist/daemon/__tests__/methods/graph.test.js +0 -309
  141. package/dist/daemon/__tests__/methods/graph.test.js.map +0 -1
  142. package/dist/daemon/__tests__/methods/provider.test.d.ts +0 -7
  143. package/dist/daemon/__tests__/methods/provider.test.d.ts.map +0 -1
  144. package/dist/daemon/__tests__/methods/provider.test.js +0 -181
  145. package/dist/daemon/__tests__/methods/provider.test.js.map +0 -1
  146. package/dist/daemon/__tests__/methods/tools.test.d.ts +0 -5
  147. package/dist/daemon/__tests__/methods/tools.test.d.ts.map +0 -1
  148. package/dist/daemon/__tests__/methods/tools.test.js +0 -587
  149. package/dist/daemon/__tests__/methods/tools.test.js.map +0 -1
  150. package/dist/daemon/__tests__/multi-location.test.d.ts +0 -8
  151. package/dist/daemon/__tests__/multi-location.test.d.ts.map +0 -1
  152. package/dist/daemon/__tests__/multi-location.test.js +0 -669
  153. package/dist/daemon/__tests__/multi-location.test.js.map +0 -1
  154. package/dist/daemon/__tests__/registry.test.d.ts +0 -5
  155. package/dist/daemon/__tests__/registry.test.d.ts.map +0 -1
  156. package/dist/daemon/__tests__/registry.test.js +0 -208
  157. package/dist/daemon/__tests__/registry.test.js.map +0 -1
  158. package/dist/daemon/__tests__/watcher.test.d.ts +0 -5
  159. package/dist/daemon/__tests__/watcher.test.d.ts.map +0 -1
  160. package/dist/daemon/__tests__/watcher.test.js +0 -234
  161. package/dist/daemon/__tests__/watcher.test.js.map +0 -1
  162. package/dist/daemon/methods/__tests__/graph.test.d.ts +0 -5
  163. package/dist/daemon/methods/__tests__/graph.test.d.ts.map +0 -1
  164. package/dist/daemon/methods/__tests__/graph.test.js +0 -274
  165. package/dist/daemon/methods/__tests__/graph.test.js.map +0 -1
  166. package/dist/daemon/methods/__tests__/provider.test.d.ts +0 -5
  167. package/dist/daemon/methods/__tests__/provider.test.d.ts.map +0 -1
  168. package/dist/daemon/methods/__tests__/provider.test.js +0 -184
  169. package/dist/daemon/methods/__tests__/provider.test.js.map +0 -1
  170. package/dist/daemon/methods/__tests__/tools.test.d.ts +0 -5
  171. package/dist/daemon/methods/__tests__/tools.test.d.ts.map +0 -1
  172. package/dist/daemon/methods/__tests__/tools.test.js +0 -295
  173. package/dist/daemon/methods/__tests__/tools.test.js.map +0 -1
  174. package/dist/entire/agent/agents/claude-code.d.ts +0 -76
  175. package/dist/entire/agent/agents/claude-code.d.ts.map +0 -1
  176. package/dist/entire/agent/agents/claude-code.js +0 -759
  177. package/dist/entire/agent/agents/claude-code.js.map +0 -1
  178. package/dist/entire/agent/agents/cursor.d.ts +0 -35
  179. package/dist/entire/agent/agents/cursor.d.ts.map +0 -1
  180. package/dist/entire/agent/agents/cursor.js +0 -294
  181. package/dist/entire/agent/agents/cursor.js.map +0 -1
  182. package/dist/entire/agent/agents/gemini-cli.d.ts +0 -62
  183. package/dist/entire/agent/agents/gemini-cli.d.ts.map +0 -1
  184. package/dist/entire/agent/agents/gemini-cli.js +0 -462
  185. package/dist/entire/agent/agents/gemini-cli.js.map +0 -1
  186. package/dist/entire/agent/agents/opencode.d.ts +0 -100
  187. package/dist/entire/agent/agents/opencode.d.ts.map +0 -1
  188. package/dist/entire/agent/agents/opencode.js +0 -423
  189. package/dist/entire/agent/agents/opencode.js.map +0 -1
  190. package/dist/entire/agent/registry.d.ts +0 -54
  191. package/dist/entire/agent/registry.d.ts.map +0 -1
  192. package/dist/entire/agent/registry.js +0 -123
  193. package/dist/entire/agent/registry.js.map +0 -1
  194. package/dist/entire/agent/session-types.d.ts +0 -45
  195. package/dist/entire/agent/session-types.d.ts.map +0 -1
  196. package/dist/entire/agent/session-types.js +0 -50
  197. package/dist/entire/agent/session-types.js.map +0 -1
  198. package/dist/entire/agent/types.d.ts +0 -126
  199. package/dist/entire/agent/types.d.ts.map +0 -1
  200. package/dist/entire/agent/types.js +0 -39
  201. package/dist/entire/agent/types.js.map +0 -1
  202. package/dist/entire/commands/clean.d.ts +0 -30
  203. package/dist/entire/commands/clean.d.ts.map +0 -1
  204. package/dist/entire/commands/clean.js +0 -99
  205. package/dist/entire/commands/clean.js.map +0 -1
  206. package/dist/entire/commands/disable.d.ts +0 -23
  207. package/dist/entire/commands/disable.d.ts.map +0 -1
  208. package/dist/entire/commands/disable.js +0 -57
  209. package/dist/entire/commands/disable.js.map +0 -1
  210. package/dist/entire/commands/doctor.d.ts +0 -43
  211. package/dist/entire/commands/doctor.d.ts.map +0 -1
  212. package/dist/entire/commands/doctor.js +0 -97
  213. package/dist/entire/commands/doctor.js.map +0 -1
  214. package/dist/entire/commands/enable.d.ts +0 -29
  215. package/dist/entire/commands/enable.d.ts.map +0 -1
  216. package/dist/entire/commands/enable.js +0 -102
  217. package/dist/entire/commands/enable.js.map +0 -1
  218. package/dist/entire/commands/explain.d.ts +0 -68
  219. package/dist/entire/commands/explain.d.ts.map +0 -1
  220. package/dist/entire/commands/explain.js +0 -182
  221. package/dist/entire/commands/explain.js.map +0 -1
  222. package/dist/entire/commands/reset.d.ts +0 -23
  223. package/dist/entire/commands/reset.d.ts.map +0 -1
  224. package/dist/entire/commands/reset.js +0 -68
  225. package/dist/entire/commands/reset.js.map +0 -1
  226. package/dist/entire/commands/resume.d.ts +0 -42
  227. package/dist/entire/commands/resume.d.ts.map +0 -1
  228. package/dist/entire/commands/resume.js +0 -134
  229. package/dist/entire/commands/resume.js.map +0 -1
  230. package/dist/entire/commands/rewind.d.ts +0 -34
  231. package/dist/entire/commands/rewind.d.ts.map +0 -1
  232. package/dist/entire/commands/rewind.js +0 -155
  233. package/dist/entire/commands/rewind.js.map +0 -1
  234. package/dist/entire/commands/status.d.ts +0 -51
  235. package/dist/entire/commands/status.d.ts.map +0 -1
  236. package/dist/entire/commands/status.js +0 -94
  237. package/dist/entire/commands/status.js.map +0 -1
  238. package/dist/entire/config.d.ts +0 -40
  239. package/dist/entire/config.d.ts.map +0 -1
  240. package/dist/entire/config.js +0 -126
  241. package/dist/entire/config.js.map +0 -1
  242. package/dist/entire/git-operations.d.ts +0 -170
  243. package/dist/entire/git-operations.d.ts.map +0 -1
  244. package/dist/entire/git-operations.js +0 -395
  245. package/dist/entire/git-operations.js.map +0 -1
  246. package/dist/entire/hooks/git-hooks.d.ts +0 -22
  247. package/dist/entire/hooks/git-hooks.d.ts.map +0 -1
  248. package/dist/entire/hooks/git-hooks.js +0 -145
  249. package/dist/entire/hooks/git-hooks.js.map +0 -1
  250. package/dist/entire/hooks/lifecycle.d.ts +0 -21
  251. package/dist/entire/hooks/lifecycle.d.ts.map +0 -1
  252. package/dist/entire/hooks/lifecycle.js +0 -179
  253. package/dist/entire/hooks/lifecycle.js.map +0 -1
  254. package/dist/entire/index.d.ts +0 -69
  255. package/dist/entire/index.d.ts.map +0 -1
  256. package/dist/entire/index.js +0 -152
  257. package/dist/entire/index.js.map +0 -1
  258. package/dist/entire/security/redaction.d.ts +0 -35
  259. package/dist/entire/security/redaction.d.ts.map +0 -1
  260. package/dist/entire/security/redaction.js +0 -221
  261. package/dist/entire/security/redaction.js.map +0 -1
  262. package/dist/entire/session/state-machine.d.ts +0 -90
  263. package/dist/entire/session/state-machine.d.ts.map +0 -1
  264. package/dist/entire/session/state-machine.js +0 -347
  265. package/dist/entire/session/state-machine.js.map +0 -1
  266. package/dist/entire/store/checkpoint-store.d.ts +0 -47
  267. package/dist/entire/store/checkpoint-store.d.ts.map +0 -1
  268. package/dist/entire/store/checkpoint-store.js +0 -307
  269. package/dist/entire/store/checkpoint-store.js.map +0 -1
  270. package/dist/entire/store/native-store.d.ts +0 -14
  271. package/dist/entire/store/native-store.d.ts.map +0 -1
  272. package/dist/entire/store/native-store.js +0 -159
  273. package/dist/entire/store/native-store.js.map +0 -1
  274. package/dist/entire/store/provider-types.d.ts +0 -78
  275. package/dist/entire/store/provider-types.d.ts.map +0 -1
  276. package/dist/entire/store/provider-types.js +0 -12
  277. package/dist/entire/store/provider-types.js.map +0 -1
  278. package/dist/entire/store/session-store.d.ts +0 -28
  279. package/dist/entire/store/session-store.d.ts.map +0 -1
  280. package/dist/entire/store/session-store.js +0 -187
  281. package/dist/entire/store/session-store.js.map +0 -1
  282. package/dist/entire/strategy/attribution.d.ts +0 -39
  283. package/dist/entire/strategy/attribution.d.ts.map +0 -1
  284. package/dist/entire/strategy/attribution.js +0 -227
  285. package/dist/entire/strategy/attribution.js.map +0 -1
  286. package/dist/entire/strategy/common.d.ts +0 -57
  287. package/dist/entire/strategy/common.d.ts.map +0 -1
  288. package/dist/entire/strategy/common.js +0 -156
  289. package/dist/entire/strategy/common.js.map +0 -1
  290. package/dist/entire/strategy/content-overlap.d.ts +0 -33
  291. package/dist/entire/strategy/content-overlap.d.ts.map +0 -1
  292. package/dist/entire/strategy/content-overlap.js +0 -168
  293. package/dist/entire/strategy/content-overlap.js.map +0 -1
  294. package/dist/entire/strategy/manual-commit.d.ts +0 -31
  295. package/dist/entire/strategy/manual-commit.d.ts.map +0 -1
  296. package/dist/entire/strategy/manual-commit.js +0 -730
  297. package/dist/entire/strategy/manual-commit.js.map +0 -1
  298. package/dist/entire/strategy/types.d.ts +0 -163
  299. package/dist/entire/strategy/types.d.ts.map +0 -1
  300. package/dist/entire/strategy/types.js +0 -49
  301. package/dist/entire/strategy/types.js.map +0 -1
  302. package/dist/entire/summarize/claude-generator.d.ts +0 -25
  303. package/dist/entire/summarize/claude-generator.d.ts.map +0 -1
  304. package/dist/entire/summarize/claude-generator.js +0 -87
  305. package/dist/entire/summarize/claude-generator.js.map +0 -1
  306. package/dist/entire/summarize/summarize.d.ts +0 -52
  307. package/dist/entire/summarize/summarize.d.ts.map +0 -1
  308. package/dist/entire/summarize/summarize.js +0 -335
  309. package/dist/entire/summarize/summarize.js.map +0 -1
  310. package/dist/entire/types.d.ts +0 -288
  311. package/dist/entire/types.d.ts.map +0 -1
  312. package/dist/entire/types.js +0 -94
  313. package/dist/entire/types.js.map +0 -1
  314. package/dist/entire/utils/chunk-files.d.ts +0 -25
  315. package/dist/entire/utils/chunk-files.d.ts.map +0 -1
  316. package/dist/entire/utils/chunk-files.js +0 -47
  317. package/dist/entire/utils/chunk-files.js.map +0 -1
  318. package/dist/entire/utils/commit-message.d.ts +0 -11
  319. package/dist/entire/utils/commit-message.d.ts.map +0 -1
  320. package/dist/entire/utils/commit-message.js +0 -54
  321. package/dist/entire/utils/commit-message.js.map +0 -1
  322. package/dist/entire/utils/detect-agent.d.ts +0 -19
  323. package/dist/entire/utils/detect-agent.d.ts.map +0 -1
  324. package/dist/entire/utils/detect-agent.js +0 -34
  325. package/dist/entire/utils/detect-agent.js.map +0 -1
  326. package/dist/entire/utils/hook-managers.d.ts +0 -24
  327. package/dist/entire/utils/hook-managers.d.ts.map +0 -1
  328. package/dist/entire/utils/hook-managers.js +0 -87
  329. package/dist/entire/utils/hook-managers.js.map +0 -1
  330. package/dist/entire/utils/ide-tags.d.ts +0 -12
  331. package/dist/entire/utils/ide-tags.d.ts.map +0 -1
  332. package/dist/entire/utils/ide-tags.js +0 -30
  333. package/dist/entire/utils/ide-tags.js.map +0 -1
  334. package/dist/entire/utils/paths.d.ts +0 -32
  335. package/dist/entire/utils/paths.d.ts.map +0 -1
  336. package/dist/entire/utils/paths.js +0 -55
  337. package/dist/entire/utils/paths.js.map +0 -1
  338. package/dist/entire/utils/preview-rewind.d.ts +0 -23
  339. package/dist/entire/utils/preview-rewind.d.ts.map +0 -1
  340. package/dist/entire/utils/preview-rewind.js +0 -63
  341. package/dist/entire/utils/preview-rewind.js.map +0 -1
  342. package/dist/entire/utils/rewind-conflict.d.ts +0 -52
  343. package/dist/entire/utils/rewind-conflict.d.ts.map +0 -1
  344. package/dist/entire/utils/rewind-conflict.js +0 -79
  345. package/dist/entire/utils/rewind-conflict.js.map +0 -1
  346. package/dist/entire/utils/shadow-branch.d.ts +0 -44
  347. package/dist/entire/utils/shadow-branch.d.ts.map +0 -1
  348. package/dist/entire/utils/shadow-branch.js +0 -93
  349. package/dist/entire/utils/shadow-branch.js.map +0 -1
  350. package/dist/entire/utils/string-utils.d.ts +0 -24
  351. package/dist/entire/utils/string-utils.d.ts.map +0 -1
  352. package/dist/entire/utils/string-utils.js +0 -47
  353. package/dist/entire/utils/string-utils.js.map +0 -1
  354. package/dist/entire/utils/todo-extract.d.ts +0 -52
  355. package/dist/entire/utils/todo-extract.d.ts.map +0 -1
  356. package/dist/entire/utils/todo-extract.js +0 -167
  357. package/dist/entire/utils/todo-extract.js.map +0 -1
  358. package/dist/entire/utils/trailers.d.ts +0 -36
  359. package/dist/entire/utils/trailers.d.ts.map +0 -1
  360. package/dist/entire/utils/trailers.js +0 -149
  361. package/dist/entire/utils/trailers.js.map +0 -1
  362. package/dist/entire/utils/transcript-parse.d.ts +0 -57
  363. package/dist/entire/utils/transcript-parse.d.ts.map +0 -1
  364. package/dist/entire/utils/transcript-parse.js +0 -126
  365. package/dist/entire/utils/transcript-parse.js.map +0 -1
  366. package/dist/entire/utils/transcript-timestamp.d.ts +0 -22
  367. package/dist/entire/utils/transcript-timestamp.d.ts.map +0 -1
  368. package/dist/entire/utils/transcript-timestamp.js +0 -56
  369. package/dist/entire/utils/transcript-timestamp.js.map +0 -1
  370. package/dist/entire/utils/tree-ops.d.ts +0 -47
  371. package/dist/entire/utils/tree-ops.d.ts.map +0 -1
  372. package/dist/entire/utils/tree-ops.js +0 -145
  373. package/dist/entire/utils/tree-ops.js.map +0 -1
  374. package/dist/entire/utils/tty.d.ts +0 -25
  375. package/dist/entire/utils/tty.d.ts.map +0 -1
  376. package/dist/entire/utils/tty.js +0 -70
  377. package/dist/entire/utils/tty.js.map +0 -1
  378. package/dist/entire/utils/validation.d.ts +0 -31
  379. package/dist/entire/utils/validation.d.ts.map +0 -1
  380. package/dist/entire/utils/validation.js +0 -59
  381. package/dist/entire/utils/validation.js.map +0 -1
  382. package/dist/entire/utils/worktree.d.ts +0 -16
  383. package/dist/entire/utils/worktree.d.ts.map +0 -1
  384. package/dist/entire/utils/worktree.js +0 -50
  385. package/dist/entire/utils/worktree.js.map +0 -1
  386. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts +0 -2
  387. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts.map +0 -1
  388. package/dist/graph/__tests__/EdgeTypeRegistry.test.js +0 -212
  389. package/dist/graph/__tests__/EdgeTypeRegistry.test.js.map +0 -1
  390. package/dist/graph/__tests__/FederatedGraph.test.d.ts +0 -2
  391. package/dist/graph/__tests__/FederatedGraph.test.d.ts.map +0 -1
  392. package/dist/graph/__tests__/FederatedGraph.test.js +0 -661
  393. package/dist/graph/__tests__/FederatedGraph.test.js.map +0 -1
  394. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts +0 -2
  395. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts.map +0 -1
  396. package/dist/graph/__tests__/GraphologyAdapter.test.js +0 -326
  397. package/dist/graph/__tests__/GraphologyAdapter.test.js.map +0 -1
  398. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts +0 -2
  399. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts.map +0 -1
  400. package/dist/graph/__tests__/HydratingFederatedGraph.test.js +0 -587
  401. package/dist/graph/__tests__/HydratingFederatedGraph.test.js.map +0 -1
  402. package/dist/graph/__tests__/debounce.test.d.ts +0 -5
  403. package/dist/graph/__tests__/debounce.test.d.ts.map +0 -1
  404. package/dist/graph/__tests__/debounce.test.js +0 -195
  405. package/dist/graph/__tests__/debounce.test.js.map +0 -1
  406. package/dist/graph/__tests__/edge-cases.test.d.ts +0 -8
  407. package/dist/graph/__tests__/edge-cases.test.d.ts.map +0 -1
  408. package/dist/graph/__tests__/edge-cases.test.js +0 -472
  409. package/dist/graph/__tests__/edge-cases.test.js.map +0 -1
  410. package/dist/graph/__tests__/expansion.test.d.ts +0 -2
  411. package/dist/graph/__tests__/expansion.test.d.ts.map +0 -1
  412. package/dist/graph/__tests__/expansion.test.js +0 -105
  413. package/dist/graph/__tests__/expansion.test.js.map +0 -1
  414. package/dist/graph/__tests__/provider-store.test.d.ts +0 -5
  415. package/dist/graph/__tests__/provider-store.test.d.ts.map +0 -1
  416. package/dist/graph/__tests__/provider-store.test.js +0 -791
  417. package/dist/graph/__tests__/provider-store.test.js.map +0 -1
  418. package/dist/graph/__tests__/query.test.d.ts +0 -5
  419. package/dist/graph/__tests__/query.test.d.ts.map +0 -1
  420. package/dist/graph/__tests__/query.test.js +0 -774
  421. package/dist/graph/__tests__/query.test.js.map +0 -1
  422. package/dist/graph/__tests__/store.test.d.ts +0 -5
  423. package/dist/graph/__tests__/store.test.d.ts.map +0 -1
  424. package/dist/graph/__tests__/store.test.js +0 -489
  425. package/dist/graph/__tests__/store.test.js.map +0 -1
  426. package/dist/graph/__tests__/sync.test.d.ts +0 -5
  427. package/dist/graph/__tests__/sync.test.d.ts.map +0 -1
  428. package/dist/graph/__tests__/sync.test.js +0 -129
  429. package/dist/graph/__tests__/sync.test.js.map +0 -1
  430. package/dist/graph/__tests__/validation.test.d.ts +0 -2
  431. package/dist/graph/__tests__/validation.test.d.ts.map +0 -1
  432. package/dist/graph/__tests__/validation.test.js +0 -521
  433. package/dist/graph/__tests__/validation.test.js.map +0 -1
  434. package/dist/providers/__tests__/beads.test.d.ts +0 -5
  435. package/dist/providers/__tests__/beads.test.d.ts.map +0 -1
  436. package/dist/providers/__tests__/beads.test.js +0 -591
  437. package/dist/providers/__tests__/beads.test.js.map +0 -1
  438. package/dist/providers/__tests__/claude-tasks.test.d.ts +0 -5
  439. package/dist/providers/__tests__/claude-tasks.test.d.ts.map +0 -1
  440. package/dist/providers/__tests__/claude-tasks.test.js +0 -392
  441. package/dist/providers/__tests__/claude-tasks.test.js.map +0 -1
  442. package/dist/providers/__tests__/from-config.test.d.ts +0 -5
  443. package/dist/providers/__tests__/from-config.test.d.ts.map +0 -1
  444. package/dist/providers/__tests__/from-config.test.js +0 -152
  445. package/dist/providers/__tests__/from-config.test.js.map +0 -1
  446. package/dist/providers/__tests__/materialization.test.d.ts +0 -5
  447. package/dist/providers/__tests__/materialization.test.d.ts.map +0 -1
  448. package/dist/providers/__tests__/materialization.test.js +0 -407
  449. package/dist/providers/__tests__/materialization.test.js.map +0 -1
  450. package/dist/providers/__tests__/native.test.d.ts +0 -5
  451. package/dist/providers/__tests__/native.test.d.ts.map +0 -1
  452. package/dist/providers/__tests__/native.test.js +0 -566
  453. package/dist/providers/__tests__/native.test.js.map +0 -1
  454. package/dist/providers/__tests__/registry.test.d.ts +0 -5
  455. package/dist/providers/__tests__/registry.test.d.ts.map +0 -1
  456. package/dist/providers/__tests__/registry.test.js +0 -183
  457. package/dist/providers/__tests__/registry.test.js.map +0 -1
  458. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts +0 -2
  459. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts.map +0 -1
  460. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js +0 -169
  461. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js.map +0 -1
  462. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts +0 -2
  463. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts.map +0 -1
  464. package/dist/providers/traits/__tests__/TaskManageable.test.js +0 -172
  465. package/dist/providers/traits/__tests__/TaskManageable.test.js.map +0 -1
  466. package/dist/schema/__tests__/validation.test.d.ts +0 -2
  467. package/dist/schema/__tests__/validation.test.d.ts.map +0 -1
  468. package/dist/schema/__tests__/validation.test.js +0 -241
  469. package/dist/schema/__tests__/validation.test.js.map +0 -1
  470. package/dist/storage/__tests__/atomic-write.test.d.ts +0 -5
  471. package/dist/storage/__tests__/atomic-write.test.d.ts.map +0 -1
  472. package/dist/storage/__tests__/atomic-write.test.js +0 -170
  473. package/dist/storage/__tests__/atomic-write.test.js.map +0 -1
  474. package/dist/storage/__tests__/file-lock.test.d.ts +0 -2
  475. package/dist/storage/__tests__/file-lock.test.d.ts.map +0 -1
  476. package/dist/storage/__tests__/file-lock.test.js +0 -89
  477. package/dist/storage/__tests__/file-lock.test.js.map +0 -1
  478. package/dist/storage/__tests__/jsonl.test.d.ts +0 -2
  479. package/dist/storage/__tests__/jsonl.test.d.ts.map +0 -1
  480. package/dist/storage/__tests__/jsonl.test.js +0 -228
  481. package/dist/storage/__tests__/jsonl.test.js.map +0 -1
  482. package/dist/storage/__tests__/locked-writer.test.d.ts +0 -2
  483. package/dist/storage/__tests__/locked-writer.test.d.ts.map +0 -1
  484. package/dist/storage/__tests__/locked-writer.test.js +0 -109
  485. package/dist/storage/__tests__/locked-writer.test.js.map +0 -1
  486. package/dist/storage/__tests__/sqlite.test.d.ts +0 -2
  487. package/dist/storage/__tests__/sqlite.test.d.ts.map +0 -1
  488. package/dist/storage/__tests__/sqlite.test.js +0 -470
  489. package/dist/storage/__tests__/sqlite.test.js.map +0 -1
  490. package/dist/tools/__tests__/annotate.test.d.ts +0 -5
  491. package/dist/tools/__tests__/annotate.test.d.ts.map +0 -1
  492. package/dist/tools/__tests__/annotate.test.js +0 -314
  493. package/dist/tools/__tests__/annotate.test.js.map +0 -1
  494. package/dist/tools/__tests__/link.test.d.ts +0 -5
  495. package/dist/tools/__tests__/link.test.d.ts.map +0 -1
  496. package/dist/tools/__tests__/link.test.js +0 -245
  497. package/dist/tools/__tests__/link.test.js.map +0 -1
  498. package/dist/tools/__tests__/query.test.d.ts +0 -5
  499. package/dist/tools/__tests__/query.test.d.ts.map +0 -1
  500. package/dist/tools/__tests__/query.test.js +0 -288
  501. package/dist/tools/__tests__/query.test.js.map +0 -1
  502. package/dist/tools/__tests__/task.test.d.ts +0 -5
  503. package/dist/tools/__tests__/task.test.d.ts.map +0 -1
  504. package/dist/tools/__tests__/task.test.js +0 -178
  505. package/dist/tools/__tests__/task.test.js.map +0 -1
@@ -1,661 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { createFederatedGraph, } from '../FederatedGraph.js';
3
- import { createGraphologyAdapter } from '../GraphologyAdapter.js';
4
- describe('FederatedGraph', () => {
5
- let adapter;
6
- let graph;
7
- beforeEach(() => {
8
- adapter = createGraphologyAdapter();
9
- graph = createFederatedGraph(adapter);
10
- });
11
- // Test fixtures - a simple graph:
12
- //
13
- // s-spec1 ──implements──> i-issue1 ──blocks──> i-issue2 ──blocks──> i-issue3
14
- // │
15
- // └──blocks──> i-issue4
16
- //
17
- const spec1 = {
18
- id: 's-spec1',
19
- uuid: 'uuid-spec1',
20
- type: 'spec',
21
- title: 'Spec 1',
22
- created_at: '2025-01-01T00:00:00Z',
23
- updated_at: '2025-01-01T00:00:00Z',
24
- };
25
- const issue1 = {
26
- id: 'i-issue1',
27
- uuid: 'uuid-issue1',
28
- type: 'issue',
29
- title: 'Issue 1',
30
- status: 'open',
31
- created_at: '2025-01-01T00:00:00Z',
32
- updated_at: '2025-01-01T00:00:00Z',
33
- };
34
- const issue2 = {
35
- id: 'i-issue2',
36
- uuid: 'uuid-issue2',
37
- type: 'issue',
38
- title: 'Issue 2',
39
- status: 'open',
40
- created_at: '2025-01-01T00:00:00Z',
41
- updated_at: '2025-01-01T00:00:00Z',
42
- };
43
- const issue3 = {
44
- id: 'i-issue3',
45
- uuid: 'uuid-issue3',
46
- type: 'issue',
47
- title: 'Issue 3',
48
- status: 'closed',
49
- created_at: '2025-01-01T00:00:00Z',
50
- updated_at: '2025-01-01T00:00:00Z',
51
- };
52
- const issue4 = {
53
- id: 'i-issue4',
54
- uuid: 'uuid-issue4',
55
- type: 'issue',
56
- title: 'Issue 4',
57
- status: 'open',
58
- created_at: '2025-01-01T00:00:00Z',
59
- updated_at: '2025-01-01T00:00:00Z',
60
- };
61
- const edgeImplements = {
62
- id: 'e-impl',
63
- uuid: 'uuid-impl',
64
- from_id: 'i-issue1',
65
- to_id: 's-spec1',
66
- type: 'implements',
67
- created_at: '2025-01-01T00:00:00Z',
68
- };
69
- const edgeBlocks1 = {
70
- id: 'e-blocks1',
71
- uuid: 'uuid-blocks1',
72
- from_id: 'i-issue1',
73
- to_id: 'i-issue2',
74
- type: 'blocks',
75
- created_at: '2025-01-01T00:00:00Z',
76
- };
77
- const edgeBlocks2 = {
78
- id: 'e-blocks2',
79
- uuid: 'uuid-blocks2',
80
- from_id: 'i-issue2',
81
- to_id: 'i-issue3',
82
- type: 'blocks',
83
- created_at: '2025-01-01T00:00:00Z',
84
- };
85
- const edgeBlocks3 = {
86
- id: 'e-blocks3',
87
- uuid: 'uuid-blocks3',
88
- from_id: 'i-issue1',
89
- to_id: 'i-issue4',
90
- type: 'blocks',
91
- created_at: '2025-01-01T00:00:00Z',
92
- };
93
- function setupGraph() {
94
- adapter.onNodeCreated(spec1);
95
- adapter.onNodeCreated(issue1);
96
- adapter.onNodeCreated(issue2);
97
- adapter.onNodeCreated(issue3);
98
- adapter.onNodeCreated(issue4);
99
- adapter.onEdgeCreated(edgeImplements);
100
- adapter.onEdgeCreated(edgeBlocks1);
101
- adapter.onEdgeCreated(edgeBlocks2);
102
- adapter.onEdgeCreated(edgeBlocks3);
103
- }
104
- describe('related()', () => {
105
- beforeEach(setupGraph);
106
- it('returns outgoing neighbors', () => {
107
- const result = graph.related('native://i-issue1', { direction: 'out' });
108
- expect(result).toHaveLength(3);
109
- expect(result).toContain('native://s-spec1');
110
- expect(result).toContain('native://i-issue2');
111
- expect(result).toContain('native://i-issue4');
112
- });
113
- it('returns incoming neighbors', () => {
114
- const result = graph.related('native://i-issue2', { direction: 'in' });
115
- expect(result).toHaveLength(1);
116
- expect(result).toContain('native://i-issue1');
117
- });
118
- it('returns both directions by default', () => {
119
- const result = graph.related('native://i-issue2');
120
- expect(result).toHaveLength(2);
121
- expect(result).toContain('native://i-issue1'); // incoming
122
- expect(result).toContain('native://i-issue3'); // outgoing
123
- });
124
- it('filters by edge type (string)', () => {
125
- const result = graph.related('native://i-issue1', {
126
- direction: 'out',
127
- edgeType: 'blocks',
128
- });
129
- expect(result).toHaveLength(2);
130
- expect(result).toContain('native://i-issue2');
131
- expect(result).toContain('native://i-issue4');
132
- expect(result).not.toContain('native://s-spec1');
133
- });
134
- it('filters by edge type (array)', () => {
135
- const result = graph.related('native://i-issue1', {
136
- direction: 'out',
137
- edgeType: ['implements'],
138
- });
139
- expect(result).toHaveLength(1);
140
- expect(result).toContain('native://s-spec1');
141
- });
142
- it('returns empty for non-existent node', () => {
143
- const result = graph.related('native://non-existent');
144
- expect(result).toHaveLength(0);
145
- });
146
- it('removes duplicates with both direction', () => {
147
- // Create a bidirectional relationship
148
- adapter.onEdgeCreated({
149
- id: 'e-related1',
150
- uuid: 'uuid-related1',
151
- from_id: 'i-issue2',
152
- to_id: 'i-issue1',
153
- type: 'related',
154
- created_at: '2025-01-01T00:00:00Z',
155
- });
156
- const result = graph.related('native://i-issue1', {
157
- direction: 'both',
158
- edgeType: ['blocks', 'related'],
159
- });
160
- // issue2 should only appear once even though there are edges in both directions
161
- const issue2Count = result.filter((r) => r === 'native://i-issue2').length;
162
- expect(issue2Count).toBe(1);
163
- });
164
- });
165
- describe('reachable()', () => {
166
- beforeEach(setupGraph);
167
- it('returns transitively reachable nodes (out)', () => {
168
- const result = graph.reachable('native://i-issue1', {
169
- direction: 'out',
170
- edgeType: 'blocks',
171
- });
172
- expect(result).toHaveLength(3);
173
- expect(result).toContain('native://i-issue2');
174
- expect(result).toContain('native://i-issue3');
175
- expect(result).toContain('native://i-issue4');
176
- });
177
- it('returns transitively reachable nodes (in)', () => {
178
- const result = graph.reachable('native://i-issue3', {
179
- direction: 'in',
180
- edgeType: 'blocks',
181
- });
182
- expect(result).toHaveLength(2);
183
- expect(result).toContain('native://i-issue2');
184
- expect(result).toContain('native://i-issue1');
185
- });
186
- it('respects maxDepth', () => {
187
- const result = graph.reachable('native://i-issue1', {
188
- direction: 'out',
189
- edgeType: 'blocks',
190
- maxDepth: 1,
191
- });
192
- expect(result).toHaveLength(2);
193
- expect(result).toContain('native://i-issue2');
194
- expect(result).toContain('native://i-issue4');
195
- expect(result).not.toContain('native://i-issue3'); // 2 hops away
196
- });
197
- it('does not include start node', () => {
198
- const result = graph.reachable('native://i-issue1', { direction: 'out' });
199
- expect(result).not.toContain('native://i-issue1');
200
- });
201
- it('handles cycles without infinite loop', () => {
202
- // Create a cycle: issue3 -> issue1
203
- adapter.onEdgeCreated({
204
- id: 'e-cycle',
205
- uuid: 'uuid-cycle',
206
- from_id: 'i-issue3',
207
- to_id: 'i-issue1',
208
- type: 'blocks',
209
- created_at: '2025-01-01T00:00:00Z',
210
- });
211
- const result = graph.reachable('native://i-issue1', {
212
- direction: 'out',
213
- edgeType: 'blocks',
214
- });
215
- // Should terminate and include all reachable nodes exactly once
216
- expect(result).toHaveLength(3);
217
- });
218
- it('returns empty for non-existent node', () => {
219
- const result = graph.reachable('native://non-existent');
220
- expect(result).toHaveLength(0);
221
- });
222
- it('filters by multiple edge types', () => {
223
- const result = graph.reachable('native://i-issue1', {
224
- direction: 'out',
225
- edgeType: ['blocks', 'implements'],
226
- });
227
- expect(result).toHaveLength(4);
228
- expect(result).toContain('native://s-spec1');
229
- expect(result).toContain('native://i-issue2');
230
- expect(result).toContain('native://i-issue3');
231
- expect(result).toContain('native://i-issue4');
232
- });
233
- });
234
- describe('shortestPath()', () => {
235
- beforeEach(setupGraph);
236
- it('finds shortest path', () => {
237
- const result = graph.shortestPath('native://i-issue1', 'native://i-issue3');
238
- expect(result).not.toBeNull();
239
- expect(result).toHaveLength(3);
240
- expect(result[0]).toBe('native://i-issue1');
241
- expect(result[1]).toBe('native://i-issue2');
242
- expect(result[2]).toBe('native://i-issue3');
243
- });
244
- it('returns path of length 1 for adjacent nodes', () => {
245
- const result = graph.shortestPath('native://i-issue1', 'native://i-issue2');
246
- expect(result).toHaveLength(2);
247
- });
248
- it('returns path of length 0 for same node', () => {
249
- const result = graph.shortestPath('native://i-issue1', 'native://i-issue1');
250
- expect(result).toHaveLength(1);
251
- expect(result[0]).toBe('native://i-issue1');
252
- });
253
- it('returns null for non-existent start node', () => {
254
- const result = graph.shortestPath('native://non-existent', 'native://i-issue1');
255
- expect(result).toBeNull();
256
- });
257
- it('returns null for non-existent end node', () => {
258
- const result = graph.shortestPath('native://i-issue1', 'native://non-existent');
259
- expect(result).toBeNull();
260
- });
261
- it('returns null when no path exists', () => {
262
- // Create an isolated node
263
- adapter.onNodeCreated({
264
- id: 'i-isolated',
265
- uuid: 'uuid-isolated',
266
- type: 'issue',
267
- title: 'Isolated',
268
- created_at: '2025-01-01T00:00:00Z',
269
- updated_at: '2025-01-01T00:00:00Z',
270
- });
271
- const result = graph.shortestPath('native://i-issue1', 'native://i-isolated');
272
- expect(result).toBeNull();
273
- });
274
- it('filters by edge types', () => {
275
- // issue1 -> issue2 is via 'blocks'
276
- // There's no 'implements' path from issue1 to issue2
277
- const result = graph.shortestPath('native://i-issue1', 'native://i-issue2', {
278
- edgeTypes: ['implements'],
279
- });
280
- expect(result).toBeNull();
281
- });
282
- });
283
- describe('hasPath()', () => {
284
- beforeEach(setupGraph);
285
- it('returns true when path exists', () => {
286
- expect(graph.hasPath('native://i-issue1', 'native://i-issue3')).toBe(true);
287
- });
288
- it('returns false when no path exists', () => {
289
- adapter.onNodeCreated({
290
- id: 'i-isolated',
291
- uuid: 'uuid-isolated',
292
- type: 'issue',
293
- title: 'Isolated',
294
- created_at: '2025-01-01T00:00:00Z',
295
- updated_at: '2025-01-01T00:00:00Z',
296
- });
297
- expect(graph.hasPath('native://i-issue1', 'native://i-isolated')).toBe(false);
298
- });
299
- });
300
- describe('getNode()', () => {
301
- beforeEach(setupGraph);
302
- it('returns node attributes', () => {
303
- const node = graph.getNode('native://i-issue1');
304
- expect(node).not.toBeNull();
305
- expect(node.title).toBe('Issue 1');
306
- expect(node.type).toBe('issue');
307
- });
308
- it('returns null for non-existent node', () => {
309
- expect(graph.getNode('native://non-existent')).toBeNull();
310
- });
311
- });
312
- describe('hasNode()', () => {
313
- beforeEach(setupGraph);
314
- it('returns true for existing node', () => {
315
- expect(graph.hasNode('native://i-issue1')).toBe(true);
316
- });
317
- it('returns false for non-existent node', () => {
318
- expect(graph.hasNode('native://non-existent')).toBe(false);
319
- });
320
- });
321
- describe('nodes()', () => {
322
- beforeEach(setupGraph);
323
- it('returns all node URIs', () => {
324
- const nodes = graph.nodes();
325
- expect(nodes).toHaveLength(5);
326
- expect(nodes).toContain('native://s-spec1');
327
- expect(nodes).toContain('native://i-issue1');
328
- expect(nodes).toContain('native://i-issue2');
329
- expect(nodes).toContain('native://i-issue3');
330
- expect(nodes).toContain('native://i-issue4');
331
- });
332
- });
333
- describe('stats()', () => {
334
- beforeEach(setupGraph);
335
- it('returns correct node and edge counts', () => {
336
- const stats = graph.stats();
337
- expect(stats.nodes).toBe(5);
338
- expect(stats.edges).toBe(4);
339
- });
340
- });
341
- describe('traverse()', () => {
342
- beforeEach(setupGraph);
343
- it('traverses single step pattern', async () => {
344
- const results = [];
345
- for await (const result of graph.traverse('native://i-issue1', {
346
- steps: [{ type: 'blocks', direction: 'out' }],
347
- })) {
348
- results.push(result.uri);
349
- }
350
- expect(results).toContain('native://i-issue2');
351
- expect(results).toContain('native://i-issue4');
352
- expect(results).not.toContain('native://s-spec1'); // implements, not blocks
353
- });
354
- it('traverses multi-step pattern', async () => {
355
- // First find specs, then issues that implement them
356
- const results = [];
357
- for await (const result of graph.traverse('native://i-issue1', {
358
- steps: [
359
- { type: 'implements', direction: 'out' }, // i-issue1 -> s-spec1
360
- { type: 'implements', direction: 'in' }, // s-spec1 <- other issues
361
- ],
362
- })) {
363
- results.push(result.uri);
364
- }
365
- // Should find s-spec1 first, then back to i-issue1
366
- expect(results).toContain('native://s-spec1');
367
- expect(results).toContain('native://i-issue1');
368
- });
369
- it('traverses with maxHops=Infinity for transitive closure', async () => {
370
- const results = [];
371
- for await (const result of graph.traverse('native://i-issue1', {
372
- steps: [{ type: 'blocks', direction: 'out', maxHops: Infinity }],
373
- })) {
374
- results.push(result.uri);
375
- }
376
- // Should find all transitively blocked issues
377
- expect(results).toContain('native://i-issue2');
378
- expect(results).toContain('native://i-issue3');
379
- expect(results).toContain('native://i-issue4');
380
- });
381
- it('respects limit option', async () => {
382
- const results = [];
383
- for await (const result of graph.traverse('native://i-issue1', {
384
- steps: [{ type: 'blocks', direction: 'out', maxHops: Infinity }],
385
- limit: 2,
386
- })) {
387
- results.push(result.uri);
388
- }
389
- expect(results).toHaveLength(2);
390
- });
391
- it('tracks depth correctly', async () => {
392
- const depths = [];
393
- for await (const result of graph.traverse('native://i-issue1', {
394
- steps: [{ type: 'blocks', direction: 'out', maxHops: Infinity }],
395
- })) {
396
- depths.push(result.depth);
397
- }
398
- // issue2 and issue4 are depth 1, issue3 is depth 2
399
- expect(depths).toContain(1);
400
- expect(depths).toContain(2);
401
- });
402
- it('tracks path correctly', async () => {
403
- let issue3Path = [];
404
- for await (const result of graph.traverse('native://i-issue1', {
405
- steps: [{ type: 'blocks', direction: 'out', maxHops: Infinity }],
406
- })) {
407
- if (result.uri === 'native://i-issue3') {
408
- issue3Path = result.path;
409
- break;
410
- }
411
- }
412
- // Path should be: issue1 -> issue2 -> issue3
413
- expect(issue3Path).toEqual([
414
- 'native://i-issue1',
415
- 'native://i-issue2',
416
- 'native://i-issue3',
417
- ]);
418
- });
419
- it('handles multiple start URIs', async () => {
420
- const results = [];
421
- for await (const result of graph.traverse(['native://i-issue1', 'native://i-issue2'], { steps: [{ type: 'blocks', direction: 'out' }] })) {
422
- results.push(result.uri);
423
- }
424
- // issue1 blocks issue2 and issue4
425
- // issue2 blocks issue3
426
- expect(results).toContain('native://i-issue2');
427
- expect(results).toContain('native://i-issue3');
428
- expect(results).toContain('native://i-issue4');
429
- });
430
- it('handles non-existent start URI', async () => {
431
- const results = [];
432
- for await (const result of graph.traverse('native://non-existent', {
433
- steps: [{ type: 'blocks', direction: 'out' }],
434
- })) {
435
- results.push(result.uri);
436
- }
437
- expect(results).toHaveLength(0);
438
- });
439
- it('handles empty steps', async () => {
440
- const results = [];
441
- for await (const result of graph.traverse('native://i-issue1', {
442
- steps: [],
443
- })) {
444
- results.push(result.uri);
445
- }
446
- expect(results).toHaveLength(0);
447
- });
448
- it('respects minHops option', async () => {
449
- const results = [];
450
- for await (const result of graph.traverse('native://i-issue1', {
451
- steps: [{ type: 'blocks', direction: 'out', minHops: 2, maxHops: 2 }],
452
- })) {
453
- results.push(result.uri);
454
- }
455
- // Only issue3 is exactly 2 hops away via blocks
456
- expect(results).toContain('native://i-issue3');
457
- expect(results).not.toContain('native://i-issue2'); // 1 hop
458
- expect(results).not.toContain('native://i-issue4'); // 1 hop
459
- });
460
- it('handles cycles without infinite loop', async () => {
461
- // Add a cycle: issue3 -> issue1
462
- adapter.onEdgeCreated({
463
- id: 'e-cycle',
464
- uuid: 'uuid-cycle',
465
- from_id: 'i-issue3',
466
- to_id: 'i-issue1',
467
- type: 'blocks',
468
- created_at: '2025-01-01T00:00:00Z',
469
- });
470
- const results = [];
471
- for await (const result of graph.traverse('native://i-issue1', {
472
- steps: [{ type: 'blocks', direction: 'out', maxHops: 10 }],
473
- })) {
474
- results.push(result.uri);
475
- }
476
- // Should not hang, and should not include duplicates
477
- expect(results.length).toBeLessThanOrEqual(4);
478
- });
479
- it('includes stepIndex and edgeType in results', async () => {
480
- for await (const result of graph.traverse('native://i-issue1', {
481
- steps: [{ type: 'blocks', direction: 'out' }],
482
- })) {
483
- expect(result.stepIndex).toBe(0);
484
- expect(result.edgeType).toBe('blocks');
485
- break;
486
- }
487
- });
488
- it('applies filter predicate to exclude nodes', async () => {
489
- const results = [];
490
- for await (const result of graph.traverse('native://i-issue1', {
491
- steps: [{ type: 'blocks', direction: 'out', maxHops: Infinity }],
492
- filter: (uri, attrs) => {
493
- // Only include open issues
494
- return attrs?.data?.status === 'open';
495
- },
496
- })) {
497
- results.push(result.uri);
498
- }
499
- // Should include issue2 and issue4 (open) but not issue3 (closed)
500
- expect(results).toContain('native://i-issue2');
501
- expect(results).toContain('native://i-issue4');
502
- expect(results).not.toContain('native://i-issue3');
503
- });
504
- it('filter continues traversal through filtered nodes', async () => {
505
- // Add another edge: issue3 -> issue5
506
- adapter.onNodeCreated({
507
- id: 'i-issue5',
508
- uuid: 'uuid-issue5',
509
- type: 'issue',
510
- title: 'Issue 5',
511
- status: 'open',
512
- created_at: '2025-01-01T00:00:00Z',
513
- updated_at: '2025-01-01T00:00:00Z',
514
- });
515
- adapter.onEdgeCreated({
516
- id: 'e-blocks4',
517
- uuid: 'uuid-blocks4',
518
- from_id: 'i-issue3',
519
- to_id: 'i-issue5',
520
- type: 'blocks',
521
- created_at: '2025-01-01T00:00:00Z',
522
- });
523
- const results = [];
524
- for await (const result of graph.traverse('native://i-issue1', {
525
- steps: [{ type: 'blocks', direction: 'out', maxHops: Infinity }],
526
- filter: (uri, attrs) => attrs?.data?.status === 'open',
527
- })) {
528
- results.push(result.uri);
529
- }
530
- // Should find issue5 even though it goes through filtered issue3
531
- expect(results).toContain('native://i-issue5');
532
- expect(results).not.toContain('native://i-issue3');
533
- });
534
- });
535
- describe('parseSelector()', () => {
536
- it('parses children selector (+uri)', () => {
537
- const result = graph.parseSelector('+native://s-spec1');
538
- expect(result.type).toBe('children');
539
- expect(result.uri).toBe('native://s-spec1');
540
- expect(result.original).toBe('+native://s-spec1');
541
- });
542
- it('parses descendants selector (uri+)', () => {
543
- const result = graph.parseSelector('native://i-issue1+');
544
- expect(result.type).toBe('descendants');
545
- expect(result.uri).toBe('native://i-issue1');
546
- expect(result.original).toBe('native://i-issue1+');
547
- });
548
- it('parses neighbors selector (@uri)', () => {
549
- const result = graph.parseSelector('@native://i-issue2');
550
- expect(result.type).toBe('neighbors');
551
- expect(result.uri).toBe('native://i-issue2');
552
- expect(result.original).toBe('@native://i-issue2');
553
- });
554
- it('parses literal URI', () => {
555
- const result = graph.parseSelector('native://i-issue1');
556
- expect(result.type).toBe('literal');
557
- expect(result.uri).toBe('native://i-issue1');
558
- expect(result.original).toBe('native://i-issue1');
559
- });
560
- });
561
- describe('expandSelector()', () => {
562
- beforeEach(setupGraph);
563
- it('expands literal to the node if exists', () => {
564
- const result = graph.expandSelector('native://i-issue1');
565
- expect(result).toEqual(['native://i-issue1']);
566
- });
567
- it('expands literal to empty if not exists', () => {
568
- const result = graph.expandSelector('native://non-existent');
569
- expect(result).toEqual([]);
570
- });
571
- it('expands children selector to direct outgoing neighbors', () => {
572
- const result = graph.expandSelector('+native://i-issue1');
573
- expect(result).toHaveLength(3);
574
- expect(result).toContain('native://s-spec1');
575
- expect(result).toContain('native://i-issue2');
576
- expect(result).toContain('native://i-issue4');
577
- });
578
- it('expands children selector with edge type filter', () => {
579
- const result = graph.expandSelector('+native://i-issue1', { edgeType: 'blocks' });
580
- expect(result).toHaveLength(2);
581
- expect(result).toContain('native://i-issue2');
582
- expect(result).toContain('native://i-issue4');
583
- expect(result).not.toContain('native://s-spec1');
584
- });
585
- it('expands descendants selector transitively', () => {
586
- const result = graph.expandSelector('native://i-issue1+');
587
- // Should include all transitively reachable nodes
588
- expect(result).toContain('native://s-spec1');
589
- expect(result).toContain('native://i-issue2');
590
- expect(result).toContain('native://i-issue3');
591
- expect(result).toContain('native://i-issue4');
592
- });
593
- it('expands descendants with edge type filter', () => {
594
- const result = graph.expandSelector('native://i-issue1+', { edgeType: 'blocks' });
595
- expect(result).toHaveLength(3);
596
- expect(result).toContain('native://i-issue2');
597
- expect(result).toContain('native://i-issue3');
598
- expect(result).toContain('native://i-issue4');
599
- expect(result).not.toContain('native://s-spec1');
600
- });
601
- it('expands neighbors selector to all connected nodes', () => {
602
- const result = graph.expandSelector('@native://i-issue2');
603
- expect(result).toHaveLength(2);
604
- expect(result).toContain('native://i-issue1'); // incoming
605
- expect(result).toContain('native://i-issue3'); // outgoing
606
- });
607
- it('expands neighbors with edge type filter', () => {
608
- const result = graph.expandSelector('@native://i-issue1', { edgeType: 'implements' });
609
- expect(result).toHaveLength(1);
610
- expect(result).toContain('native://s-spec1');
611
- });
612
- it('returns empty for non-existent node selectors', () => {
613
- expect(graph.expandSelector('+native://non-existent')).toEqual([]);
614
- expect(graph.expandSelector('native://non-existent+')).toEqual([]);
615
- expect(graph.expandSelector('@native://non-existent')).toEqual([]);
616
- });
617
- });
618
- describe('edgeTypes()', () => {
619
- it('returns all registered edge types', () => {
620
- const types = graph.edgeTypes();
621
- expect(types.length).toBeGreaterThan(0);
622
- // Should include built-in types
623
- const typeNames = types.map((t) => t.name);
624
- expect(typeNames).toContain('blocks');
625
- expect(typeNames).toContain('implements');
626
- expect(typeNames).toContain('parent-of');
627
- expect(typeNames).toContain('related');
628
- });
629
- it('includes edge type metadata', () => {
630
- const types = graph.edgeTypes();
631
- const blocksType = types.find((t) => t.name === 'blocks');
632
- expect(blocksType).toBeDefined();
633
- expect(blocksType.description).toBeDefined();
634
- expect(blocksType.inverseOf).toBe('blocked-by');
635
- expect(blocksType.affectsReady).toBe(true);
636
- expect(blocksType.direction).toBe('directed');
637
- });
638
- });
639
- describe('capabilities()', () => {
640
- it('returns graph capabilities', () => {
641
- const caps = graph.capabilities();
642
- expect(caps.edgeTypes).toBeDefined();
643
- expect(caps.edgeTypes.length).toBeGreaterThan(0);
644
- });
645
- it('includes ready-affecting types', () => {
646
- const caps = graph.capabilities();
647
- expect(caps.readyAffectingTypes).toContain('blocks');
648
- expect(caps.readyAffectingTypes).toContain('blocked-by');
649
- });
650
- it('includes provider-specific capabilities', () => {
651
- const caps = graph.capabilities();
652
- expect(caps.providers).toBeDefined();
653
- expect(caps.providers.get('native')).toBeDefined();
654
- const nativeTypes = caps.providers.get('native');
655
- const nativeTypeNames = nativeTypes.map((t) => t.name);
656
- expect(nativeTypeNames).toContain('blocks');
657
- expect(nativeTypeNames).toContain('implements');
658
- });
659
- });
660
- });
661
- //# sourceMappingURL=FederatedGraph.test.js.map