opentasks 0.0.7 → 0.0.8

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 (496) 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/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +2 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/providers/entire.d.ts +0 -10
  13. package/dist/providers/entire.d.ts.map +1 -1
  14. package/dist/providers/entire.js +0 -13
  15. package/dist/providers/entire.js.map +1 -1
  16. package/dist/providers/index.d.ts +1 -0
  17. package/dist/providers/index.d.ts.map +1 -1
  18. package/dist/providers/index.js +2 -0
  19. package/dist/providers/index.js.map +1 -1
  20. package/dist/providers/map-connector.d.ts +87 -0
  21. package/dist/providers/map-connector.d.ts.map +1 -0
  22. package/dist/providers/map-connector.js +159 -0
  23. package/dist/providers/map-connector.js.map +1 -0
  24. package/package.json +1 -1
  25. package/dist/__tests__/cli-tools.test.d.ts +0 -8
  26. package/dist/__tests__/cli-tools.test.d.ts.map +0 -1
  27. package/dist/__tests__/cli-tools.test.js +0 -546
  28. package/dist/__tests__/cli-tools.test.js.map +0 -1
  29. package/dist/__tests__/cli.test.d.ts +0 -5
  30. package/dist/__tests__/cli.test.d.ts.map +0 -1
  31. package/dist/__tests__/cli.test.js +0 -77
  32. package/dist/__tests__/cli.test.js.map +0 -1
  33. package/dist/__tests__/p1-p3-gaps.test.d.ts +0 -2
  34. package/dist/__tests__/p1-p3-gaps.test.d.ts.map +0 -1
  35. package/dist/__tests__/p1-p3-gaps.test.js +0 -463
  36. package/dist/__tests__/p1-p3-gaps.test.js.map +0 -1
  37. package/dist/client/__tests__/client-crud.test.d.ts +0 -7
  38. package/dist/client/__tests__/client-crud.test.d.ts.map +0 -1
  39. package/dist/client/__tests__/client-crud.test.js +0 -404
  40. package/dist/client/__tests__/client-crud.test.js.map +0 -1
  41. package/dist/client/__tests__/client.test.d.ts +0 -5
  42. package/dist/client/__tests__/client.test.d.ts.map +0 -1
  43. package/dist/client/__tests__/client.test.js +0 -518
  44. package/dist/client/__tests__/client.test.js.map +0 -1
  45. package/dist/config/__tests__/defaults.test.d.ts +0 -2
  46. package/dist/config/__tests__/defaults.test.d.ts.map +0 -1
  47. package/dist/config/__tests__/defaults.test.js +0 -57
  48. package/dist/config/__tests__/defaults.test.js.map +0 -1
  49. package/dist/config/__tests__/env.test.d.ts +0 -2
  50. package/dist/config/__tests__/env.test.d.ts.map +0 -1
  51. package/dist/config/__tests__/env.test.js +0 -136
  52. package/dist/config/__tests__/env.test.js.map +0 -1
  53. package/dist/config/__tests__/index.test.d.ts +0 -2
  54. package/dist/config/__tests__/index.test.d.ts.map +0 -1
  55. package/dist/config/__tests__/index.test.js +0 -113
  56. package/dist/config/__tests__/index.test.js.map +0 -1
  57. package/dist/config/__tests__/loader.test.d.ts +0 -2
  58. package/dist/config/__tests__/loader.test.d.ts.map +0 -1
  59. package/dist/config/__tests__/loader.test.js +0 -128
  60. package/dist/config/__tests__/loader.test.js.map +0 -1
  61. package/dist/config/__tests__/merge.test.d.ts +0 -2
  62. package/dist/config/__tests__/merge.test.d.ts.map +0 -1
  63. package/dist/config/__tests__/merge.test.js +0 -79
  64. package/dist/config/__tests__/merge.test.js.map +0 -1
  65. package/dist/config/__tests__/schema.test.d.ts +0 -2
  66. package/dist/config/__tests__/schema.test.d.ts.map +0 -1
  67. package/dist/config/__tests__/schema.test.js +0 -300
  68. package/dist/config/__tests__/schema.test.js.map +0 -1
  69. package/dist/core/__tests__/conditional-redirects.test.d.ts +0 -2
  70. package/dist/core/__tests__/conditional-redirects.test.d.ts.map +0 -1
  71. package/dist/core/__tests__/conditional-redirects.test.js +0 -83
  72. package/dist/core/__tests__/conditional-redirects.test.js.map +0 -1
  73. package/dist/core/__tests__/connections.test.d.ts +0 -2
  74. package/dist/core/__tests__/connections.test.d.ts.map +0 -1
  75. package/dist/core/__tests__/connections.test.js +0 -158
  76. package/dist/core/__tests__/connections.test.js.map +0 -1
  77. package/dist/core/__tests__/hash.test.d.ts +0 -2
  78. package/dist/core/__tests__/hash.test.d.ts.map +0 -1
  79. package/dist/core/__tests__/hash.test.js +0 -139
  80. package/dist/core/__tests__/hash.test.js.map +0 -1
  81. package/dist/core/__tests__/id.test.d.ts +0 -2
  82. package/dist/core/__tests__/id.test.d.ts.map +0 -1
  83. package/dist/core/__tests__/id.test.js +0 -142
  84. package/dist/core/__tests__/id.test.js.map +0 -1
  85. package/dist/core/__tests__/location.test.d.ts +0 -2
  86. package/dist/core/__tests__/location.test.d.ts.map +0 -1
  87. package/dist/core/__tests__/location.test.js +0 -77
  88. package/dist/core/__tests__/location.test.js.map +0 -1
  89. package/dist/core/__tests__/merge-driver.test.d.ts +0 -2
  90. package/dist/core/__tests__/merge-driver.test.d.ts.map +0 -1
  91. package/dist/core/__tests__/merge-driver.test.js +0 -218
  92. package/dist/core/__tests__/merge-driver.test.js.map +0 -1
  93. package/dist/core/__tests__/redirects.test.d.ts +0 -2
  94. package/dist/core/__tests__/redirects.test.d.ts.map +0 -1
  95. package/dist/core/__tests__/redirects.test.js +0 -123
  96. package/dist/core/__tests__/redirects.test.js.map +0 -1
  97. package/dist/core/__tests__/resolve-location-target.test.d.ts +0 -8
  98. package/dist/core/__tests__/resolve-location-target.test.d.ts.map +0 -1
  99. package/dist/core/__tests__/resolve-location-target.test.js +0 -303
  100. package/dist/core/__tests__/resolve-location-target.test.js.map +0 -1
  101. package/dist/core/__tests__/uri.test.d.ts +0 -2
  102. package/dist/core/__tests__/uri.test.d.ts.map +0 -1
  103. package/dist/core/__tests__/uri.test.js +0 -159
  104. package/dist/core/__tests__/uri.test.js.map +0 -1
  105. package/dist/core/__tests__/worktree.test.d.ts +0 -2
  106. package/dist/core/__tests__/worktree.test.d.ts.map +0 -1
  107. package/dist/core/__tests__/worktree.test.js +0 -120
  108. package/dist/core/__tests__/worktree.test.js.map +0 -1
  109. package/dist/daemon/__tests__/flush.test.d.ts +0 -5
  110. package/dist/daemon/__tests__/flush.test.d.ts.map +0 -1
  111. package/dist/daemon/__tests__/flush.test.js +0 -213
  112. package/dist/daemon/__tests__/flush.test.js.map +0 -1
  113. package/dist/daemon/__tests__/integration.test.d.ts +0 -7
  114. package/dist/daemon/__tests__/integration.test.d.ts.map +0 -1
  115. package/dist/daemon/__tests__/integration.test.js +0 -276
  116. package/dist/daemon/__tests__/integration.test.js.map +0 -1
  117. package/dist/daemon/__tests__/ipc.test.d.ts +0 -5
  118. package/dist/daemon/__tests__/ipc.test.d.ts.map +0 -1
  119. package/dist/daemon/__tests__/ipc.test.js +0 -314
  120. package/dist/daemon/__tests__/ipc.test.js.map +0 -1
  121. package/dist/daemon/__tests__/lifecycle.test.d.ts +0 -5
  122. package/dist/daemon/__tests__/lifecycle.test.d.ts.map +0 -1
  123. package/dist/daemon/__tests__/lifecycle.test.js +0 -301
  124. package/dist/daemon/__tests__/lifecycle.test.js.map +0 -1
  125. package/dist/daemon/__tests__/lock.test.d.ts +0 -5
  126. package/dist/daemon/__tests__/lock.test.d.ts.map +0 -1
  127. package/dist/daemon/__tests__/lock.test.js +0 -192
  128. package/dist/daemon/__tests__/lock.test.js.map +0 -1
  129. package/dist/daemon/__tests__/methods/graph.test.d.ts +0 -5
  130. package/dist/daemon/__tests__/methods/graph.test.d.ts.map +0 -1
  131. package/dist/daemon/__tests__/methods/graph.test.js +0 -309
  132. package/dist/daemon/__tests__/methods/graph.test.js.map +0 -1
  133. package/dist/daemon/__tests__/methods/provider.test.d.ts +0 -7
  134. package/dist/daemon/__tests__/methods/provider.test.d.ts.map +0 -1
  135. package/dist/daemon/__tests__/methods/provider.test.js +0 -181
  136. package/dist/daemon/__tests__/methods/provider.test.js.map +0 -1
  137. package/dist/daemon/__tests__/methods/tools.test.d.ts +0 -5
  138. package/dist/daemon/__tests__/methods/tools.test.d.ts.map +0 -1
  139. package/dist/daemon/__tests__/methods/tools.test.js +0 -587
  140. package/dist/daemon/__tests__/methods/tools.test.js.map +0 -1
  141. package/dist/daemon/__tests__/multi-location.test.d.ts +0 -8
  142. package/dist/daemon/__tests__/multi-location.test.d.ts.map +0 -1
  143. package/dist/daemon/__tests__/multi-location.test.js +0 -669
  144. package/dist/daemon/__tests__/multi-location.test.js.map +0 -1
  145. package/dist/daemon/__tests__/registry.test.d.ts +0 -5
  146. package/dist/daemon/__tests__/registry.test.d.ts.map +0 -1
  147. package/dist/daemon/__tests__/registry.test.js +0 -208
  148. package/dist/daemon/__tests__/registry.test.js.map +0 -1
  149. package/dist/daemon/__tests__/watcher.test.d.ts +0 -5
  150. package/dist/daemon/__tests__/watcher.test.d.ts.map +0 -1
  151. package/dist/daemon/__tests__/watcher.test.js +0 -234
  152. package/dist/daemon/__tests__/watcher.test.js.map +0 -1
  153. package/dist/daemon/methods/__tests__/graph.test.d.ts +0 -5
  154. package/dist/daemon/methods/__tests__/graph.test.d.ts.map +0 -1
  155. package/dist/daemon/methods/__tests__/graph.test.js +0 -274
  156. package/dist/daemon/methods/__tests__/graph.test.js.map +0 -1
  157. package/dist/daemon/methods/__tests__/provider.test.d.ts +0 -5
  158. package/dist/daemon/methods/__tests__/provider.test.d.ts.map +0 -1
  159. package/dist/daemon/methods/__tests__/provider.test.js +0 -184
  160. package/dist/daemon/methods/__tests__/provider.test.js.map +0 -1
  161. package/dist/daemon/methods/__tests__/tools.test.d.ts +0 -5
  162. package/dist/daemon/methods/__tests__/tools.test.d.ts.map +0 -1
  163. package/dist/daemon/methods/__tests__/tools.test.js +0 -295
  164. package/dist/daemon/methods/__tests__/tools.test.js.map +0 -1
  165. package/dist/entire/agent/agents/claude-code.d.ts +0 -76
  166. package/dist/entire/agent/agents/claude-code.d.ts.map +0 -1
  167. package/dist/entire/agent/agents/claude-code.js +0 -759
  168. package/dist/entire/agent/agents/claude-code.js.map +0 -1
  169. package/dist/entire/agent/agents/cursor.d.ts +0 -35
  170. package/dist/entire/agent/agents/cursor.d.ts.map +0 -1
  171. package/dist/entire/agent/agents/cursor.js +0 -294
  172. package/dist/entire/agent/agents/cursor.js.map +0 -1
  173. package/dist/entire/agent/agents/gemini-cli.d.ts +0 -62
  174. package/dist/entire/agent/agents/gemini-cli.d.ts.map +0 -1
  175. package/dist/entire/agent/agents/gemini-cli.js +0 -462
  176. package/dist/entire/agent/agents/gemini-cli.js.map +0 -1
  177. package/dist/entire/agent/agents/opencode.d.ts +0 -100
  178. package/dist/entire/agent/agents/opencode.d.ts.map +0 -1
  179. package/dist/entire/agent/agents/opencode.js +0 -423
  180. package/dist/entire/agent/agents/opencode.js.map +0 -1
  181. package/dist/entire/agent/registry.d.ts +0 -54
  182. package/dist/entire/agent/registry.d.ts.map +0 -1
  183. package/dist/entire/agent/registry.js +0 -123
  184. package/dist/entire/agent/registry.js.map +0 -1
  185. package/dist/entire/agent/session-types.d.ts +0 -45
  186. package/dist/entire/agent/session-types.d.ts.map +0 -1
  187. package/dist/entire/agent/session-types.js +0 -50
  188. package/dist/entire/agent/session-types.js.map +0 -1
  189. package/dist/entire/agent/types.d.ts +0 -126
  190. package/dist/entire/agent/types.d.ts.map +0 -1
  191. package/dist/entire/agent/types.js +0 -39
  192. package/dist/entire/agent/types.js.map +0 -1
  193. package/dist/entire/commands/clean.d.ts +0 -30
  194. package/dist/entire/commands/clean.d.ts.map +0 -1
  195. package/dist/entire/commands/clean.js +0 -99
  196. package/dist/entire/commands/clean.js.map +0 -1
  197. package/dist/entire/commands/disable.d.ts +0 -23
  198. package/dist/entire/commands/disable.d.ts.map +0 -1
  199. package/dist/entire/commands/disable.js +0 -57
  200. package/dist/entire/commands/disable.js.map +0 -1
  201. package/dist/entire/commands/doctor.d.ts +0 -43
  202. package/dist/entire/commands/doctor.d.ts.map +0 -1
  203. package/dist/entire/commands/doctor.js +0 -97
  204. package/dist/entire/commands/doctor.js.map +0 -1
  205. package/dist/entire/commands/enable.d.ts +0 -29
  206. package/dist/entire/commands/enable.d.ts.map +0 -1
  207. package/dist/entire/commands/enable.js +0 -102
  208. package/dist/entire/commands/enable.js.map +0 -1
  209. package/dist/entire/commands/explain.d.ts +0 -68
  210. package/dist/entire/commands/explain.d.ts.map +0 -1
  211. package/dist/entire/commands/explain.js +0 -182
  212. package/dist/entire/commands/explain.js.map +0 -1
  213. package/dist/entire/commands/reset.d.ts +0 -23
  214. package/dist/entire/commands/reset.d.ts.map +0 -1
  215. package/dist/entire/commands/reset.js +0 -68
  216. package/dist/entire/commands/reset.js.map +0 -1
  217. package/dist/entire/commands/resume.d.ts +0 -42
  218. package/dist/entire/commands/resume.d.ts.map +0 -1
  219. package/dist/entire/commands/resume.js +0 -134
  220. package/dist/entire/commands/resume.js.map +0 -1
  221. package/dist/entire/commands/rewind.d.ts +0 -34
  222. package/dist/entire/commands/rewind.d.ts.map +0 -1
  223. package/dist/entire/commands/rewind.js +0 -155
  224. package/dist/entire/commands/rewind.js.map +0 -1
  225. package/dist/entire/commands/status.d.ts +0 -51
  226. package/dist/entire/commands/status.d.ts.map +0 -1
  227. package/dist/entire/commands/status.js +0 -94
  228. package/dist/entire/commands/status.js.map +0 -1
  229. package/dist/entire/config.d.ts +0 -40
  230. package/dist/entire/config.d.ts.map +0 -1
  231. package/dist/entire/config.js +0 -126
  232. package/dist/entire/config.js.map +0 -1
  233. package/dist/entire/git-operations.d.ts +0 -170
  234. package/dist/entire/git-operations.d.ts.map +0 -1
  235. package/dist/entire/git-operations.js +0 -395
  236. package/dist/entire/git-operations.js.map +0 -1
  237. package/dist/entire/hooks/git-hooks.d.ts +0 -22
  238. package/dist/entire/hooks/git-hooks.d.ts.map +0 -1
  239. package/dist/entire/hooks/git-hooks.js +0 -145
  240. package/dist/entire/hooks/git-hooks.js.map +0 -1
  241. package/dist/entire/hooks/lifecycle.d.ts +0 -21
  242. package/dist/entire/hooks/lifecycle.d.ts.map +0 -1
  243. package/dist/entire/hooks/lifecycle.js +0 -179
  244. package/dist/entire/hooks/lifecycle.js.map +0 -1
  245. package/dist/entire/index.d.ts +0 -69
  246. package/dist/entire/index.d.ts.map +0 -1
  247. package/dist/entire/index.js +0 -152
  248. package/dist/entire/index.js.map +0 -1
  249. package/dist/entire/security/redaction.d.ts +0 -35
  250. package/dist/entire/security/redaction.d.ts.map +0 -1
  251. package/dist/entire/security/redaction.js +0 -221
  252. package/dist/entire/security/redaction.js.map +0 -1
  253. package/dist/entire/session/state-machine.d.ts +0 -90
  254. package/dist/entire/session/state-machine.d.ts.map +0 -1
  255. package/dist/entire/session/state-machine.js +0 -347
  256. package/dist/entire/session/state-machine.js.map +0 -1
  257. package/dist/entire/store/checkpoint-store.d.ts +0 -47
  258. package/dist/entire/store/checkpoint-store.d.ts.map +0 -1
  259. package/dist/entire/store/checkpoint-store.js +0 -307
  260. package/dist/entire/store/checkpoint-store.js.map +0 -1
  261. package/dist/entire/store/native-store.d.ts +0 -14
  262. package/dist/entire/store/native-store.d.ts.map +0 -1
  263. package/dist/entire/store/native-store.js +0 -159
  264. package/dist/entire/store/native-store.js.map +0 -1
  265. package/dist/entire/store/provider-types.d.ts +0 -78
  266. package/dist/entire/store/provider-types.d.ts.map +0 -1
  267. package/dist/entire/store/provider-types.js +0 -12
  268. package/dist/entire/store/provider-types.js.map +0 -1
  269. package/dist/entire/store/session-store.d.ts +0 -28
  270. package/dist/entire/store/session-store.d.ts.map +0 -1
  271. package/dist/entire/store/session-store.js +0 -187
  272. package/dist/entire/store/session-store.js.map +0 -1
  273. package/dist/entire/strategy/attribution.d.ts +0 -39
  274. package/dist/entire/strategy/attribution.d.ts.map +0 -1
  275. package/dist/entire/strategy/attribution.js +0 -227
  276. package/dist/entire/strategy/attribution.js.map +0 -1
  277. package/dist/entire/strategy/common.d.ts +0 -57
  278. package/dist/entire/strategy/common.d.ts.map +0 -1
  279. package/dist/entire/strategy/common.js +0 -156
  280. package/dist/entire/strategy/common.js.map +0 -1
  281. package/dist/entire/strategy/content-overlap.d.ts +0 -33
  282. package/dist/entire/strategy/content-overlap.d.ts.map +0 -1
  283. package/dist/entire/strategy/content-overlap.js +0 -168
  284. package/dist/entire/strategy/content-overlap.js.map +0 -1
  285. package/dist/entire/strategy/manual-commit.d.ts +0 -31
  286. package/dist/entire/strategy/manual-commit.d.ts.map +0 -1
  287. package/dist/entire/strategy/manual-commit.js +0 -730
  288. package/dist/entire/strategy/manual-commit.js.map +0 -1
  289. package/dist/entire/strategy/types.d.ts +0 -163
  290. package/dist/entire/strategy/types.d.ts.map +0 -1
  291. package/dist/entire/strategy/types.js +0 -49
  292. package/dist/entire/strategy/types.js.map +0 -1
  293. package/dist/entire/summarize/claude-generator.d.ts +0 -25
  294. package/dist/entire/summarize/claude-generator.d.ts.map +0 -1
  295. package/dist/entire/summarize/claude-generator.js +0 -87
  296. package/dist/entire/summarize/claude-generator.js.map +0 -1
  297. package/dist/entire/summarize/summarize.d.ts +0 -52
  298. package/dist/entire/summarize/summarize.d.ts.map +0 -1
  299. package/dist/entire/summarize/summarize.js +0 -335
  300. package/dist/entire/summarize/summarize.js.map +0 -1
  301. package/dist/entire/types.d.ts +0 -288
  302. package/dist/entire/types.d.ts.map +0 -1
  303. package/dist/entire/types.js +0 -94
  304. package/dist/entire/types.js.map +0 -1
  305. package/dist/entire/utils/chunk-files.d.ts +0 -25
  306. package/dist/entire/utils/chunk-files.d.ts.map +0 -1
  307. package/dist/entire/utils/chunk-files.js +0 -47
  308. package/dist/entire/utils/chunk-files.js.map +0 -1
  309. package/dist/entire/utils/commit-message.d.ts +0 -11
  310. package/dist/entire/utils/commit-message.d.ts.map +0 -1
  311. package/dist/entire/utils/commit-message.js +0 -54
  312. package/dist/entire/utils/commit-message.js.map +0 -1
  313. package/dist/entire/utils/detect-agent.d.ts +0 -19
  314. package/dist/entire/utils/detect-agent.d.ts.map +0 -1
  315. package/dist/entire/utils/detect-agent.js +0 -34
  316. package/dist/entire/utils/detect-agent.js.map +0 -1
  317. package/dist/entire/utils/hook-managers.d.ts +0 -24
  318. package/dist/entire/utils/hook-managers.d.ts.map +0 -1
  319. package/dist/entire/utils/hook-managers.js +0 -87
  320. package/dist/entire/utils/hook-managers.js.map +0 -1
  321. package/dist/entire/utils/ide-tags.d.ts +0 -12
  322. package/dist/entire/utils/ide-tags.d.ts.map +0 -1
  323. package/dist/entire/utils/ide-tags.js +0 -30
  324. package/dist/entire/utils/ide-tags.js.map +0 -1
  325. package/dist/entire/utils/paths.d.ts +0 -32
  326. package/dist/entire/utils/paths.d.ts.map +0 -1
  327. package/dist/entire/utils/paths.js +0 -55
  328. package/dist/entire/utils/paths.js.map +0 -1
  329. package/dist/entire/utils/preview-rewind.d.ts +0 -23
  330. package/dist/entire/utils/preview-rewind.d.ts.map +0 -1
  331. package/dist/entire/utils/preview-rewind.js +0 -63
  332. package/dist/entire/utils/preview-rewind.js.map +0 -1
  333. package/dist/entire/utils/rewind-conflict.d.ts +0 -52
  334. package/dist/entire/utils/rewind-conflict.d.ts.map +0 -1
  335. package/dist/entire/utils/rewind-conflict.js +0 -79
  336. package/dist/entire/utils/rewind-conflict.js.map +0 -1
  337. package/dist/entire/utils/shadow-branch.d.ts +0 -44
  338. package/dist/entire/utils/shadow-branch.d.ts.map +0 -1
  339. package/dist/entire/utils/shadow-branch.js +0 -93
  340. package/dist/entire/utils/shadow-branch.js.map +0 -1
  341. package/dist/entire/utils/string-utils.d.ts +0 -24
  342. package/dist/entire/utils/string-utils.d.ts.map +0 -1
  343. package/dist/entire/utils/string-utils.js +0 -47
  344. package/dist/entire/utils/string-utils.js.map +0 -1
  345. package/dist/entire/utils/todo-extract.d.ts +0 -52
  346. package/dist/entire/utils/todo-extract.d.ts.map +0 -1
  347. package/dist/entire/utils/todo-extract.js +0 -167
  348. package/dist/entire/utils/todo-extract.js.map +0 -1
  349. package/dist/entire/utils/trailers.d.ts +0 -36
  350. package/dist/entire/utils/trailers.d.ts.map +0 -1
  351. package/dist/entire/utils/trailers.js +0 -149
  352. package/dist/entire/utils/trailers.js.map +0 -1
  353. package/dist/entire/utils/transcript-parse.d.ts +0 -57
  354. package/dist/entire/utils/transcript-parse.d.ts.map +0 -1
  355. package/dist/entire/utils/transcript-parse.js +0 -126
  356. package/dist/entire/utils/transcript-parse.js.map +0 -1
  357. package/dist/entire/utils/transcript-timestamp.d.ts +0 -22
  358. package/dist/entire/utils/transcript-timestamp.d.ts.map +0 -1
  359. package/dist/entire/utils/transcript-timestamp.js +0 -56
  360. package/dist/entire/utils/transcript-timestamp.js.map +0 -1
  361. package/dist/entire/utils/tree-ops.d.ts +0 -47
  362. package/dist/entire/utils/tree-ops.d.ts.map +0 -1
  363. package/dist/entire/utils/tree-ops.js +0 -145
  364. package/dist/entire/utils/tree-ops.js.map +0 -1
  365. package/dist/entire/utils/tty.d.ts +0 -25
  366. package/dist/entire/utils/tty.d.ts.map +0 -1
  367. package/dist/entire/utils/tty.js +0 -70
  368. package/dist/entire/utils/tty.js.map +0 -1
  369. package/dist/entire/utils/validation.d.ts +0 -31
  370. package/dist/entire/utils/validation.d.ts.map +0 -1
  371. package/dist/entire/utils/validation.js +0 -59
  372. package/dist/entire/utils/validation.js.map +0 -1
  373. package/dist/entire/utils/worktree.d.ts +0 -16
  374. package/dist/entire/utils/worktree.d.ts.map +0 -1
  375. package/dist/entire/utils/worktree.js +0 -50
  376. package/dist/entire/utils/worktree.js.map +0 -1
  377. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts +0 -2
  378. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts.map +0 -1
  379. package/dist/graph/__tests__/EdgeTypeRegistry.test.js +0 -212
  380. package/dist/graph/__tests__/EdgeTypeRegistry.test.js.map +0 -1
  381. package/dist/graph/__tests__/FederatedGraph.test.d.ts +0 -2
  382. package/dist/graph/__tests__/FederatedGraph.test.d.ts.map +0 -1
  383. package/dist/graph/__tests__/FederatedGraph.test.js +0 -661
  384. package/dist/graph/__tests__/FederatedGraph.test.js.map +0 -1
  385. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts +0 -2
  386. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts.map +0 -1
  387. package/dist/graph/__tests__/GraphologyAdapter.test.js +0 -326
  388. package/dist/graph/__tests__/GraphologyAdapter.test.js.map +0 -1
  389. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts +0 -2
  390. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts.map +0 -1
  391. package/dist/graph/__tests__/HydratingFederatedGraph.test.js +0 -587
  392. package/dist/graph/__tests__/HydratingFederatedGraph.test.js.map +0 -1
  393. package/dist/graph/__tests__/debounce.test.d.ts +0 -5
  394. package/dist/graph/__tests__/debounce.test.d.ts.map +0 -1
  395. package/dist/graph/__tests__/debounce.test.js +0 -195
  396. package/dist/graph/__tests__/debounce.test.js.map +0 -1
  397. package/dist/graph/__tests__/edge-cases.test.d.ts +0 -8
  398. package/dist/graph/__tests__/edge-cases.test.d.ts.map +0 -1
  399. package/dist/graph/__tests__/edge-cases.test.js +0 -472
  400. package/dist/graph/__tests__/edge-cases.test.js.map +0 -1
  401. package/dist/graph/__tests__/expansion.test.d.ts +0 -2
  402. package/dist/graph/__tests__/expansion.test.d.ts.map +0 -1
  403. package/dist/graph/__tests__/expansion.test.js +0 -105
  404. package/dist/graph/__tests__/expansion.test.js.map +0 -1
  405. package/dist/graph/__tests__/provider-store.test.d.ts +0 -5
  406. package/dist/graph/__tests__/provider-store.test.d.ts.map +0 -1
  407. package/dist/graph/__tests__/provider-store.test.js +0 -791
  408. package/dist/graph/__tests__/provider-store.test.js.map +0 -1
  409. package/dist/graph/__tests__/query.test.d.ts +0 -5
  410. package/dist/graph/__tests__/query.test.d.ts.map +0 -1
  411. package/dist/graph/__tests__/query.test.js +0 -774
  412. package/dist/graph/__tests__/query.test.js.map +0 -1
  413. package/dist/graph/__tests__/store.test.d.ts +0 -5
  414. package/dist/graph/__tests__/store.test.d.ts.map +0 -1
  415. package/dist/graph/__tests__/store.test.js +0 -489
  416. package/dist/graph/__tests__/store.test.js.map +0 -1
  417. package/dist/graph/__tests__/sync.test.d.ts +0 -5
  418. package/dist/graph/__tests__/sync.test.d.ts.map +0 -1
  419. package/dist/graph/__tests__/sync.test.js +0 -129
  420. package/dist/graph/__tests__/sync.test.js.map +0 -1
  421. package/dist/graph/__tests__/validation.test.d.ts +0 -2
  422. package/dist/graph/__tests__/validation.test.d.ts.map +0 -1
  423. package/dist/graph/__tests__/validation.test.js +0 -521
  424. package/dist/graph/__tests__/validation.test.js.map +0 -1
  425. package/dist/providers/__tests__/beads.test.d.ts +0 -5
  426. package/dist/providers/__tests__/beads.test.d.ts.map +0 -1
  427. package/dist/providers/__tests__/beads.test.js +0 -591
  428. package/dist/providers/__tests__/beads.test.js.map +0 -1
  429. package/dist/providers/__tests__/claude-tasks.test.d.ts +0 -5
  430. package/dist/providers/__tests__/claude-tasks.test.d.ts.map +0 -1
  431. package/dist/providers/__tests__/claude-tasks.test.js +0 -392
  432. package/dist/providers/__tests__/claude-tasks.test.js.map +0 -1
  433. package/dist/providers/__tests__/from-config.test.d.ts +0 -5
  434. package/dist/providers/__tests__/from-config.test.d.ts.map +0 -1
  435. package/dist/providers/__tests__/from-config.test.js +0 -152
  436. package/dist/providers/__tests__/from-config.test.js.map +0 -1
  437. package/dist/providers/__tests__/materialization.test.d.ts +0 -5
  438. package/dist/providers/__tests__/materialization.test.d.ts.map +0 -1
  439. package/dist/providers/__tests__/materialization.test.js +0 -407
  440. package/dist/providers/__tests__/materialization.test.js.map +0 -1
  441. package/dist/providers/__tests__/native.test.d.ts +0 -5
  442. package/dist/providers/__tests__/native.test.d.ts.map +0 -1
  443. package/dist/providers/__tests__/native.test.js +0 -566
  444. package/dist/providers/__tests__/native.test.js.map +0 -1
  445. package/dist/providers/__tests__/registry.test.d.ts +0 -5
  446. package/dist/providers/__tests__/registry.test.d.ts.map +0 -1
  447. package/dist/providers/__tests__/registry.test.js +0 -183
  448. package/dist/providers/__tests__/registry.test.js.map +0 -1
  449. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts +0 -2
  450. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts.map +0 -1
  451. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js +0 -169
  452. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js.map +0 -1
  453. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts +0 -2
  454. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts.map +0 -1
  455. package/dist/providers/traits/__tests__/TaskManageable.test.js +0 -172
  456. package/dist/providers/traits/__tests__/TaskManageable.test.js.map +0 -1
  457. package/dist/schema/__tests__/validation.test.d.ts +0 -2
  458. package/dist/schema/__tests__/validation.test.d.ts.map +0 -1
  459. package/dist/schema/__tests__/validation.test.js +0 -241
  460. package/dist/schema/__tests__/validation.test.js.map +0 -1
  461. package/dist/storage/__tests__/atomic-write.test.d.ts +0 -5
  462. package/dist/storage/__tests__/atomic-write.test.d.ts.map +0 -1
  463. package/dist/storage/__tests__/atomic-write.test.js +0 -170
  464. package/dist/storage/__tests__/atomic-write.test.js.map +0 -1
  465. package/dist/storage/__tests__/file-lock.test.d.ts +0 -2
  466. package/dist/storage/__tests__/file-lock.test.d.ts.map +0 -1
  467. package/dist/storage/__tests__/file-lock.test.js +0 -89
  468. package/dist/storage/__tests__/file-lock.test.js.map +0 -1
  469. package/dist/storage/__tests__/jsonl.test.d.ts +0 -2
  470. package/dist/storage/__tests__/jsonl.test.d.ts.map +0 -1
  471. package/dist/storage/__tests__/jsonl.test.js +0 -228
  472. package/dist/storage/__tests__/jsonl.test.js.map +0 -1
  473. package/dist/storage/__tests__/locked-writer.test.d.ts +0 -2
  474. package/dist/storage/__tests__/locked-writer.test.d.ts.map +0 -1
  475. package/dist/storage/__tests__/locked-writer.test.js +0 -109
  476. package/dist/storage/__tests__/locked-writer.test.js.map +0 -1
  477. package/dist/storage/__tests__/sqlite.test.d.ts +0 -2
  478. package/dist/storage/__tests__/sqlite.test.d.ts.map +0 -1
  479. package/dist/storage/__tests__/sqlite.test.js +0 -470
  480. package/dist/storage/__tests__/sqlite.test.js.map +0 -1
  481. package/dist/tools/__tests__/annotate.test.d.ts +0 -5
  482. package/dist/tools/__tests__/annotate.test.d.ts.map +0 -1
  483. package/dist/tools/__tests__/annotate.test.js +0 -314
  484. package/dist/tools/__tests__/annotate.test.js.map +0 -1
  485. package/dist/tools/__tests__/link.test.d.ts +0 -5
  486. package/dist/tools/__tests__/link.test.d.ts.map +0 -1
  487. package/dist/tools/__tests__/link.test.js +0 -245
  488. package/dist/tools/__tests__/link.test.js.map +0 -1
  489. package/dist/tools/__tests__/query.test.d.ts +0 -5
  490. package/dist/tools/__tests__/query.test.d.ts.map +0 -1
  491. package/dist/tools/__tests__/query.test.js +0 -288
  492. package/dist/tools/__tests__/query.test.js.map +0 -1
  493. package/dist/tools/__tests__/task.test.d.ts +0 -5
  494. package/dist/tools/__tests__/task.test.d.ts.map +0 -1
  495. package/dist/tools/__tests__/task.test.js +0 -178
  496. 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