opentasks 0.0.5 → 0.0.6

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 (311) hide show
  1. package/README.md +40 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +153 -8
  4. package/dist/cli.js.map +1 -1
  5. package/dist/config/schema.d.ts +54 -0
  6. package/dist/config/schema.d.ts.map +1 -1
  7. package/dist/config/schema.js +52 -0
  8. package/dist/config/schema.js.map +1 -1
  9. package/dist/core/merge-driver.d.ts +6 -2
  10. package/dist/core/merge-driver.d.ts.map +1 -1
  11. package/dist/core/merge-driver.js +11 -7
  12. package/dist/core/merge-driver.js.map +1 -1
  13. package/dist/core/worktree.js +1 -1
  14. package/dist/core/worktree.js.map +1 -1
  15. package/dist/daemon/ipc.d.ts.map +1 -1
  16. package/dist/daemon/ipc.js +4 -1
  17. package/dist/daemon/ipc.js.map +1 -1
  18. package/dist/daemon/lifecycle.d.ts.map +1 -1
  19. package/dist/daemon/lifecycle.js +5 -0
  20. package/dist/daemon/lifecycle.js.map +1 -1
  21. package/dist/graph/git-graph-syncer.js +1 -1
  22. package/dist/graph/git-graph-syncer.js.map +1 -1
  23. package/dist/providers/from-config.d.ts +3 -0
  24. package/dist/providers/from-config.d.ts.map +1 -1
  25. package/dist/providers/from-config.js +29 -0
  26. package/dist/providers/from-config.js.map +1 -1
  27. package/dist/providers/index.d.ts +3 -0
  28. package/dist/providers/index.d.ts.map +1 -1
  29. package/dist/providers/index.js +6 -0
  30. package/dist/providers/index.js.map +1 -1
  31. package/dist/providers/map-client-factory.d.ts +55 -0
  32. package/dist/providers/map-client-factory.d.ts.map +1 -0
  33. package/dist/providers/map-client-factory.js +123 -0
  34. package/dist/providers/map-client-factory.js.map +1 -0
  35. package/dist/providers/map-event-bridge.d.ts +146 -0
  36. package/dist/providers/map-event-bridge.d.ts.map +1 -0
  37. package/dist/providers/map-event-bridge.js +208 -0
  38. package/dist/providers/map-event-bridge.js.map +1 -0
  39. package/dist/providers/map.d.ts +115 -0
  40. package/dist/providers/map.d.ts.map +1 -0
  41. package/dist/providers/map.js +376 -0
  42. package/dist/providers/map.js.map +1 -0
  43. package/package.json +1 -1
  44. package/dist/__tests__/cli-tools.test.d.ts +0 -8
  45. package/dist/__tests__/cli-tools.test.d.ts.map +0 -1
  46. package/dist/__tests__/cli-tools.test.js +0 -546
  47. package/dist/__tests__/cli-tools.test.js.map +0 -1
  48. package/dist/__tests__/cli.test.d.ts +0 -5
  49. package/dist/__tests__/cli.test.d.ts.map +0 -1
  50. package/dist/__tests__/cli.test.js +0 -77
  51. package/dist/__tests__/cli.test.js.map +0 -1
  52. package/dist/__tests__/p1-p3-gaps.test.d.ts +0 -2
  53. package/dist/__tests__/p1-p3-gaps.test.d.ts.map +0 -1
  54. package/dist/__tests__/p1-p3-gaps.test.js +0 -463
  55. package/dist/__tests__/p1-p3-gaps.test.js.map +0 -1
  56. package/dist/client/__tests__/client-crud.test.d.ts +0 -7
  57. package/dist/client/__tests__/client-crud.test.d.ts.map +0 -1
  58. package/dist/client/__tests__/client-crud.test.js +0 -404
  59. package/dist/client/__tests__/client-crud.test.js.map +0 -1
  60. package/dist/client/__tests__/client.test.d.ts +0 -5
  61. package/dist/client/__tests__/client.test.d.ts.map +0 -1
  62. package/dist/client/__tests__/client.test.js +0 -518
  63. package/dist/client/__tests__/client.test.js.map +0 -1
  64. package/dist/config/__tests__/defaults.test.d.ts +0 -2
  65. package/dist/config/__tests__/defaults.test.d.ts.map +0 -1
  66. package/dist/config/__tests__/defaults.test.js +0 -57
  67. package/dist/config/__tests__/defaults.test.js.map +0 -1
  68. package/dist/config/__tests__/env.test.d.ts +0 -2
  69. package/dist/config/__tests__/env.test.d.ts.map +0 -1
  70. package/dist/config/__tests__/env.test.js +0 -136
  71. package/dist/config/__tests__/env.test.js.map +0 -1
  72. package/dist/config/__tests__/index.test.d.ts +0 -2
  73. package/dist/config/__tests__/index.test.d.ts.map +0 -1
  74. package/dist/config/__tests__/index.test.js +0 -113
  75. package/dist/config/__tests__/index.test.js.map +0 -1
  76. package/dist/config/__tests__/loader.test.d.ts +0 -2
  77. package/dist/config/__tests__/loader.test.d.ts.map +0 -1
  78. package/dist/config/__tests__/loader.test.js +0 -128
  79. package/dist/config/__tests__/loader.test.js.map +0 -1
  80. package/dist/config/__tests__/merge.test.d.ts +0 -2
  81. package/dist/config/__tests__/merge.test.d.ts.map +0 -1
  82. package/dist/config/__tests__/merge.test.js +0 -79
  83. package/dist/config/__tests__/merge.test.js.map +0 -1
  84. package/dist/config/__tests__/schema.test.d.ts +0 -2
  85. package/dist/config/__tests__/schema.test.d.ts.map +0 -1
  86. package/dist/config/__tests__/schema.test.js +0 -300
  87. package/dist/config/__tests__/schema.test.js.map +0 -1
  88. package/dist/core/__tests__/conditional-redirects.test.d.ts +0 -2
  89. package/dist/core/__tests__/conditional-redirects.test.d.ts.map +0 -1
  90. package/dist/core/__tests__/conditional-redirects.test.js +0 -83
  91. package/dist/core/__tests__/conditional-redirects.test.js.map +0 -1
  92. package/dist/core/__tests__/connections.test.d.ts +0 -2
  93. package/dist/core/__tests__/connections.test.d.ts.map +0 -1
  94. package/dist/core/__tests__/connections.test.js +0 -158
  95. package/dist/core/__tests__/connections.test.js.map +0 -1
  96. package/dist/core/__tests__/hash.test.d.ts +0 -2
  97. package/dist/core/__tests__/hash.test.d.ts.map +0 -1
  98. package/dist/core/__tests__/hash.test.js +0 -139
  99. package/dist/core/__tests__/hash.test.js.map +0 -1
  100. package/dist/core/__tests__/id.test.d.ts +0 -2
  101. package/dist/core/__tests__/id.test.d.ts.map +0 -1
  102. package/dist/core/__tests__/id.test.js +0 -142
  103. package/dist/core/__tests__/id.test.js.map +0 -1
  104. package/dist/core/__tests__/location.test.d.ts +0 -2
  105. package/dist/core/__tests__/location.test.d.ts.map +0 -1
  106. package/dist/core/__tests__/location.test.js +0 -77
  107. package/dist/core/__tests__/location.test.js.map +0 -1
  108. package/dist/core/__tests__/merge-driver.test.d.ts +0 -2
  109. package/dist/core/__tests__/merge-driver.test.d.ts.map +0 -1
  110. package/dist/core/__tests__/merge-driver.test.js +0 -218
  111. package/dist/core/__tests__/merge-driver.test.js.map +0 -1
  112. package/dist/core/__tests__/redirects.test.d.ts +0 -2
  113. package/dist/core/__tests__/redirects.test.d.ts.map +0 -1
  114. package/dist/core/__tests__/redirects.test.js +0 -123
  115. package/dist/core/__tests__/redirects.test.js.map +0 -1
  116. package/dist/core/__tests__/resolve-location-target.test.d.ts +0 -8
  117. package/dist/core/__tests__/resolve-location-target.test.d.ts.map +0 -1
  118. package/dist/core/__tests__/resolve-location-target.test.js +0 -303
  119. package/dist/core/__tests__/resolve-location-target.test.js.map +0 -1
  120. package/dist/core/__tests__/uri.test.d.ts +0 -2
  121. package/dist/core/__tests__/uri.test.d.ts.map +0 -1
  122. package/dist/core/__tests__/uri.test.js +0 -159
  123. package/dist/core/__tests__/uri.test.js.map +0 -1
  124. package/dist/core/__tests__/worktree.test.d.ts +0 -2
  125. package/dist/core/__tests__/worktree.test.d.ts.map +0 -1
  126. package/dist/core/__tests__/worktree.test.js +0 -120
  127. package/dist/core/__tests__/worktree.test.js.map +0 -1
  128. package/dist/daemon/__tests__/flush.test.d.ts +0 -5
  129. package/dist/daemon/__tests__/flush.test.d.ts.map +0 -1
  130. package/dist/daemon/__tests__/flush.test.js +0 -213
  131. package/dist/daemon/__tests__/flush.test.js.map +0 -1
  132. package/dist/daemon/__tests__/integration.test.d.ts +0 -7
  133. package/dist/daemon/__tests__/integration.test.d.ts.map +0 -1
  134. package/dist/daemon/__tests__/integration.test.js +0 -276
  135. package/dist/daemon/__tests__/integration.test.js.map +0 -1
  136. package/dist/daemon/__tests__/ipc.test.d.ts +0 -5
  137. package/dist/daemon/__tests__/ipc.test.d.ts.map +0 -1
  138. package/dist/daemon/__tests__/ipc.test.js +0 -314
  139. package/dist/daemon/__tests__/ipc.test.js.map +0 -1
  140. package/dist/daemon/__tests__/lifecycle.test.d.ts +0 -5
  141. package/dist/daemon/__tests__/lifecycle.test.d.ts.map +0 -1
  142. package/dist/daemon/__tests__/lifecycle.test.js +0 -301
  143. package/dist/daemon/__tests__/lifecycle.test.js.map +0 -1
  144. package/dist/daemon/__tests__/lock.test.d.ts +0 -5
  145. package/dist/daemon/__tests__/lock.test.d.ts.map +0 -1
  146. package/dist/daemon/__tests__/lock.test.js +0 -192
  147. package/dist/daemon/__tests__/lock.test.js.map +0 -1
  148. package/dist/daemon/__tests__/methods/graph.test.d.ts +0 -5
  149. package/dist/daemon/__tests__/methods/graph.test.d.ts.map +0 -1
  150. package/dist/daemon/__tests__/methods/graph.test.js +0 -309
  151. package/dist/daemon/__tests__/methods/graph.test.js.map +0 -1
  152. package/dist/daemon/__tests__/methods/provider.test.d.ts +0 -7
  153. package/dist/daemon/__tests__/methods/provider.test.d.ts.map +0 -1
  154. package/dist/daemon/__tests__/methods/provider.test.js +0 -181
  155. package/dist/daemon/__tests__/methods/provider.test.js.map +0 -1
  156. package/dist/daemon/__tests__/methods/tools.test.d.ts +0 -5
  157. package/dist/daemon/__tests__/methods/tools.test.d.ts.map +0 -1
  158. package/dist/daemon/__tests__/methods/tools.test.js +0 -587
  159. package/dist/daemon/__tests__/methods/tools.test.js.map +0 -1
  160. package/dist/daemon/__tests__/multi-location.test.d.ts +0 -8
  161. package/dist/daemon/__tests__/multi-location.test.d.ts.map +0 -1
  162. package/dist/daemon/__tests__/multi-location.test.js +0 -669
  163. package/dist/daemon/__tests__/multi-location.test.js.map +0 -1
  164. package/dist/daemon/__tests__/registry.test.d.ts +0 -5
  165. package/dist/daemon/__tests__/registry.test.d.ts.map +0 -1
  166. package/dist/daemon/__tests__/registry.test.js +0 -208
  167. package/dist/daemon/__tests__/registry.test.js.map +0 -1
  168. package/dist/daemon/__tests__/watcher.test.d.ts +0 -5
  169. package/dist/daemon/__tests__/watcher.test.d.ts.map +0 -1
  170. package/dist/daemon/__tests__/watcher.test.js +0 -234
  171. package/dist/daemon/__tests__/watcher.test.js.map +0 -1
  172. package/dist/daemon/methods/__tests__/graph.test.d.ts +0 -5
  173. package/dist/daemon/methods/__tests__/graph.test.d.ts.map +0 -1
  174. package/dist/daemon/methods/__tests__/graph.test.js +0 -274
  175. package/dist/daemon/methods/__tests__/graph.test.js.map +0 -1
  176. package/dist/daemon/methods/__tests__/provider.test.d.ts +0 -5
  177. package/dist/daemon/methods/__tests__/provider.test.d.ts.map +0 -1
  178. package/dist/daemon/methods/__tests__/provider.test.js +0 -184
  179. package/dist/daemon/methods/__tests__/provider.test.js.map +0 -1
  180. package/dist/daemon/methods/__tests__/tools.test.d.ts +0 -5
  181. package/dist/daemon/methods/__tests__/tools.test.d.ts.map +0 -1
  182. package/dist/daemon/methods/__tests__/tools.test.js +0 -295
  183. package/dist/daemon/methods/__tests__/tools.test.js.map +0 -1
  184. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts +0 -2
  185. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts.map +0 -1
  186. package/dist/graph/__tests__/EdgeTypeRegistry.test.js +0 -212
  187. package/dist/graph/__tests__/EdgeTypeRegistry.test.js.map +0 -1
  188. package/dist/graph/__tests__/FederatedGraph.test.d.ts +0 -2
  189. package/dist/graph/__tests__/FederatedGraph.test.d.ts.map +0 -1
  190. package/dist/graph/__tests__/FederatedGraph.test.js +0 -661
  191. package/dist/graph/__tests__/FederatedGraph.test.js.map +0 -1
  192. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts +0 -2
  193. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts.map +0 -1
  194. package/dist/graph/__tests__/GraphologyAdapter.test.js +0 -326
  195. package/dist/graph/__tests__/GraphologyAdapter.test.js.map +0 -1
  196. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts +0 -2
  197. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts.map +0 -1
  198. package/dist/graph/__tests__/HydratingFederatedGraph.test.js +0 -587
  199. package/dist/graph/__tests__/HydratingFederatedGraph.test.js.map +0 -1
  200. package/dist/graph/__tests__/debounce.test.d.ts +0 -5
  201. package/dist/graph/__tests__/debounce.test.d.ts.map +0 -1
  202. package/dist/graph/__tests__/debounce.test.js +0 -195
  203. package/dist/graph/__tests__/debounce.test.js.map +0 -1
  204. package/dist/graph/__tests__/edge-cases.test.d.ts +0 -8
  205. package/dist/graph/__tests__/edge-cases.test.d.ts.map +0 -1
  206. package/dist/graph/__tests__/edge-cases.test.js +0 -472
  207. package/dist/graph/__tests__/edge-cases.test.js.map +0 -1
  208. package/dist/graph/__tests__/expansion.test.d.ts +0 -2
  209. package/dist/graph/__tests__/expansion.test.d.ts.map +0 -1
  210. package/dist/graph/__tests__/expansion.test.js +0 -105
  211. package/dist/graph/__tests__/expansion.test.js.map +0 -1
  212. package/dist/graph/__tests__/provider-store.test.d.ts +0 -5
  213. package/dist/graph/__tests__/provider-store.test.d.ts.map +0 -1
  214. package/dist/graph/__tests__/provider-store.test.js +0 -791
  215. package/dist/graph/__tests__/provider-store.test.js.map +0 -1
  216. package/dist/graph/__tests__/query.test.d.ts +0 -5
  217. package/dist/graph/__tests__/query.test.d.ts.map +0 -1
  218. package/dist/graph/__tests__/query.test.js +0 -774
  219. package/dist/graph/__tests__/query.test.js.map +0 -1
  220. package/dist/graph/__tests__/store.test.d.ts +0 -5
  221. package/dist/graph/__tests__/store.test.d.ts.map +0 -1
  222. package/dist/graph/__tests__/store.test.js +0 -489
  223. package/dist/graph/__tests__/store.test.js.map +0 -1
  224. package/dist/graph/__tests__/sync.test.d.ts +0 -5
  225. package/dist/graph/__tests__/sync.test.d.ts.map +0 -1
  226. package/dist/graph/__tests__/sync.test.js +0 -129
  227. package/dist/graph/__tests__/sync.test.js.map +0 -1
  228. package/dist/graph/__tests__/validation.test.d.ts +0 -2
  229. package/dist/graph/__tests__/validation.test.d.ts.map +0 -1
  230. package/dist/graph/__tests__/validation.test.js +0 -521
  231. package/dist/graph/__tests__/validation.test.js.map +0 -1
  232. package/dist/providers/__tests__/beads.test.d.ts +0 -5
  233. package/dist/providers/__tests__/beads.test.d.ts.map +0 -1
  234. package/dist/providers/__tests__/beads.test.js +0 -591
  235. package/dist/providers/__tests__/beads.test.js.map +0 -1
  236. package/dist/providers/__tests__/claude-tasks.test.d.ts +0 -5
  237. package/dist/providers/__tests__/claude-tasks.test.d.ts.map +0 -1
  238. package/dist/providers/__tests__/claude-tasks.test.js +0 -392
  239. package/dist/providers/__tests__/claude-tasks.test.js.map +0 -1
  240. package/dist/providers/__tests__/from-config.test.d.ts +0 -5
  241. package/dist/providers/__tests__/from-config.test.d.ts.map +0 -1
  242. package/dist/providers/__tests__/from-config.test.js +0 -152
  243. package/dist/providers/__tests__/from-config.test.js.map +0 -1
  244. package/dist/providers/__tests__/materialization.test.d.ts +0 -5
  245. package/dist/providers/__tests__/materialization.test.d.ts.map +0 -1
  246. package/dist/providers/__tests__/materialization.test.js +0 -407
  247. package/dist/providers/__tests__/materialization.test.js.map +0 -1
  248. package/dist/providers/__tests__/native.test.d.ts +0 -5
  249. package/dist/providers/__tests__/native.test.d.ts.map +0 -1
  250. package/dist/providers/__tests__/native.test.js +0 -566
  251. package/dist/providers/__tests__/native.test.js.map +0 -1
  252. package/dist/providers/__tests__/registry.test.d.ts +0 -5
  253. package/dist/providers/__tests__/registry.test.d.ts.map +0 -1
  254. package/dist/providers/__tests__/registry.test.js +0 -183
  255. package/dist/providers/__tests__/registry.test.js.map +0 -1
  256. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts +0 -2
  257. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts.map +0 -1
  258. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js +0 -169
  259. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js.map +0 -1
  260. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts +0 -2
  261. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts.map +0 -1
  262. package/dist/providers/traits/__tests__/TaskManageable.test.js +0 -172
  263. package/dist/providers/traits/__tests__/TaskManageable.test.js.map +0 -1
  264. package/dist/schema/__tests__/validation.test.d.ts +0 -2
  265. package/dist/schema/__tests__/validation.test.d.ts.map +0 -1
  266. package/dist/schema/__tests__/validation.test.js +0 -241
  267. package/dist/schema/__tests__/validation.test.js.map +0 -1
  268. package/dist/storage/__tests__/atomic-write.test.d.ts +0 -5
  269. package/dist/storage/__tests__/atomic-write.test.d.ts.map +0 -1
  270. package/dist/storage/__tests__/atomic-write.test.js +0 -170
  271. package/dist/storage/__tests__/atomic-write.test.js.map +0 -1
  272. package/dist/storage/__tests__/file-lock.test.d.ts +0 -2
  273. package/dist/storage/__tests__/file-lock.test.d.ts.map +0 -1
  274. package/dist/storage/__tests__/file-lock.test.js +0 -89
  275. package/dist/storage/__tests__/file-lock.test.js.map +0 -1
  276. package/dist/storage/__tests__/jsonl.test.d.ts +0 -2
  277. package/dist/storage/__tests__/jsonl.test.d.ts.map +0 -1
  278. package/dist/storage/__tests__/jsonl.test.js +0 -228
  279. package/dist/storage/__tests__/jsonl.test.js.map +0 -1
  280. package/dist/storage/__tests__/locked-writer.test.d.ts +0 -2
  281. package/dist/storage/__tests__/locked-writer.test.d.ts.map +0 -1
  282. package/dist/storage/__tests__/locked-writer.test.js +0 -109
  283. package/dist/storage/__tests__/locked-writer.test.js.map +0 -1
  284. package/dist/storage/__tests__/sqlite.test.d.ts +0 -2
  285. package/dist/storage/__tests__/sqlite.test.d.ts.map +0 -1
  286. package/dist/storage/__tests__/sqlite.test.js +0 -470
  287. package/dist/storage/__tests__/sqlite.test.js.map +0 -1
  288. package/dist/tools/__tests__/annotate.test.d.ts +0 -5
  289. package/dist/tools/__tests__/annotate.test.d.ts.map +0 -1
  290. package/dist/tools/__tests__/annotate.test.js +0 -314
  291. package/dist/tools/__tests__/annotate.test.js.map +0 -1
  292. package/dist/tools/__tests__/link.test.d.ts +0 -5
  293. package/dist/tools/__tests__/link.test.d.ts.map +0 -1
  294. package/dist/tools/__tests__/link.test.js +0 -245
  295. package/dist/tools/__tests__/link.test.js.map +0 -1
  296. package/dist/tools/__tests__/query.test.d.ts +0 -5
  297. package/dist/tools/__tests__/query.test.d.ts.map +0 -1
  298. package/dist/tools/__tests__/query.test.js +0 -288
  299. package/dist/tools/__tests__/query.test.js.map +0 -1
  300. package/dist/tools/__tests__/task.test.d.ts +0 -5
  301. package/dist/tools/__tests__/task.test.d.ts.map +0 -1
  302. package/dist/tools/__tests__/task.test.js +0 -178
  303. package/dist/tools/__tests__/task.test.js.map +0 -1
  304. package/dist/tracking/claude-task-reconstructor.d.ts +0 -41
  305. package/dist/tracking/claude-task-reconstructor.d.ts.map +0 -1
  306. package/dist/tracking/claude-task-reconstructor.js +0 -91
  307. package/dist/tracking/claude-task-reconstructor.js.map +0 -1
  308. package/dist/tracking/plan-mode-tracker.d.ts +0 -20
  309. package/dist/tracking/plan-mode-tracker.d.ts.map +0 -1
  310. package/dist/tracking/plan-mode-tracker.js +0 -35
  311. package/dist/tracking/plan-mode-tracker.js.map +0 -1
@@ -1,472 +0,0 @@
1
- /**
2
- * Tests for Graph Edge Cases
3
- *
4
- * Tests circular dependencies, self-referential edges, deep hierarchies,
5
- * and other edge cases.
6
- */
7
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
- import * as fs from 'node:fs/promises';
9
- import * as path from 'node:path';
10
- import * as os from 'node:os';
11
- import { createGraphStore } from '../store.js';
12
- import { createSQLitePersister } from '../../storage/sqlite.js';
13
- // ============================================================================
14
- // Test Setup
15
- // ============================================================================
16
- describe('Graph Edge Cases', () => {
17
- let tempDir;
18
- let storage;
19
- let store;
20
- // JSONL mock that keeps data in memory
21
- let jsonlNodes = [];
22
- let jsonlEdges = [];
23
- async function jsonlLoad() {
24
- return { nodes: jsonlNodes, edges: jsonlEdges };
25
- }
26
- async function jsonlSave(nodes, edges) {
27
- jsonlNodes = nodes;
28
- jsonlEdges = edges;
29
- }
30
- beforeEach(async () => {
31
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'opentasks-edge-test-'));
32
- // createSQLitePersister takes basePath and creates cache.db inside it
33
- // It also calls initialize() internally
34
- storage = createSQLitePersister(tempDir);
35
- jsonlNodes = [];
36
- jsonlEdges = [];
37
- store = createGraphStore({ basePath: tempDir }, storage, jsonlLoad, jsonlSave);
38
- await store.initialize();
39
- });
40
- afterEach(async () => {
41
- try {
42
- await store.close();
43
- }
44
- catch {
45
- // Ignore
46
- }
47
- try {
48
- await fs.rm(tempDir, { recursive: true, force: true });
49
- }
50
- catch {
51
- // Ignore
52
- }
53
- });
54
- // ==========================================================================
55
- // Circular Dependencies
56
- // ==========================================================================
57
- describe('Circular Dependencies', () => {
58
- it('should detect direct cycle (A blocks B, B blocks A)', async () => {
59
- const issueA = await store.createNode({
60
- type: 'issue',
61
- title: 'Issue A',
62
- status: 'open',
63
- });
64
- const issueB = await store.createNode({
65
- type: 'issue',
66
- title: 'Issue B',
67
- status: 'open',
68
- });
69
- // A blocks B
70
- await store.createEdge({
71
- from_id: issueA.id,
72
- to_id: issueB.id,
73
- type: 'blocks',
74
- });
75
- // B blocks A should fail
76
- await expect(store.createEdge({
77
- from_id: issueB.id,
78
- to_id: issueA.id,
79
- type: 'blocks',
80
- })).rejects.toThrow(/cycle/i);
81
- });
82
- it('should detect transitive cycle (A→B→C→A)', async () => {
83
- const issueA = await store.createNode({
84
- type: 'issue',
85
- title: 'Issue A',
86
- status: 'open',
87
- });
88
- const issueB = await store.createNode({
89
- type: 'issue',
90
- title: 'Issue B',
91
- status: 'open',
92
- });
93
- const issueC = await store.createNode({
94
- type: 'issue',
95
- title: 'Issue C',
96
- status: 'open',
97
- });
98
- // A → B → C
99
- await store.createEdge({
100
- from_id: issueA.id,
101
- to_id: issueB.id,
102
- type: 'blocks',
103
- });
104
- await store.createEdge({
105
- from_id: issueB.id,
106
- to_id: issueC.id,
107
- type: 'blocks',
108
- });
109
- // C → A should fail
110
- await expect(store.createEdge({
111
- from_id: issueC.id,
112
- to_id: issueA.id,
113
- type: 'blocks',
114
- })).rejects.toThrow(/cycle/i);
115
- });
116
- it('should allow non-blocking cycles (implements is not checked for cycles)', async () => {
117
- const spec = await store.createNode({
118
- type: 'spec',
119
- title: 'Spec',
120
- });
121
- const issue = await store.createNode({
122
- type: 'issue',
123
- title: 'Issue',
124
- status: 'open',
125
- });
126
- // Issue implements Spec
127
- await store.createEdge({
128
- from_id: issue.id,
129
- to_id: spec.id,
130
- type: 'implements',
131
- });
132
- // Spec references Issue (different edge type, should be allowed)
133
- const edge = await store.createEdge({
134
- from_id: spec.id,
135
- to_id: issue.id,
136
- type: 'references',
137
- });
138
- expect(edge).toBeDefined();
139
- expect(edge.id).toBeDefined();
140
- });
141
- });
142
- // ==========================================================================
143
- // Self-Referential Edges
144
- // ==========================================================================
145
- describe('Self-Referential Edges', () => {
146
- it('should reject self-referential blocks edge', async () => {
147
- const issue = await store.createNode({
148
- type: 'issue',
149
- title: 'Self-blocking Issue',
150
- status: 'open',
151
- });
152
- // Issue blocks itself should fail
153
- await expect(store.createEdge({
154
- from_id: issue.id,
155
- to_id: issue.id,
156
- type: 'blocks',
157
- })).rejects.toThrow(); // Either cycle detection or validation should catch this
158
- });
159
- it('should reject self-referential implements edge', async () => {
160
- const spec = await store.createNode({
161
- type: 'spec',
162
- title: 'Self-implementing Spec',
163
- });
164
- // Spec implements itself should fail validation
165
- await expect(store.createEdge({
166
- from_id: spec.id,
167
- to_id: spec.id,
168
- type: 'implements',
169
- })).rejects.toThrow();
170
- });
171
- });
172
- // ==========================================================================
173
- // Deep Hierarchies
174
- // ==========================================================================
175
- describe('Deep Hierarchies', () => {
176
- it('should handle 10-level blocking chain', async () => {
177
- const issues = [];
178
- // Create 10 issues
179
- for (let i = 0; i < 10; i++) {
180
- const issue = await store.createNode({
181
- type: 'issue',
182
- title: `Issue ${i}`,
183
- status: 'open',
184
- });
185
- issues.push(issue);
186
- }
187
- // Create chain: 0→1→2→...→9
188
- for (let i = 0; i < 9; i++) {
189
- await store.createEdge({
190
- from_id: issues[i].id,
191
- to_id: issues[i + 1].id,
192
- type: 'blocks',
193
- });
194
- }
195
- // Query blockers for issue 9 (should include all predecessors transitively)
196
- const blockers = await store.query.blockers(issues[9].id, {
197
- transitive: true,
198
- });
199
- expect(blockers.length).toBe(9); // 0-8 all block 9 transitively
200
- });
201
- it('should handle 50-level parent hierarchy', async () => {
202
- let parentId;
203
- // Create deep parent chain
204
- for (let i = 0; i < 50; i++) {
205
- const node = await store.createNode({
206
- type: 'spec',
207
- title: `Level ${i}`,
208
- parent_id: parentId,
209
- });
210
- parentId = node.id;
211
- }
212
- // Should be able to retrieve the deepest node
213
- const deepest = await store.getNode(parentId);
214
- expect(deepest).not.toBeNull();
215
- expect(deepest?.title).toBe('Level 49');
216
- });
217
- it('should query children of a parent', async () => {
218
- const parent = await store.createNode({
219
- type: 'spec',
220
- title: 'Parent',
221
- });
222
- // Create 5 children
223
- for (let i = 0; i < 5; i++) {
224
- await store.createNode({
225
- type: 'spec',
226
- title: `Child ${i}`,
227
- parent_id: parent.id,
228
- });
229
- }
230
- // Query children
231
- const children = await store.query.nodes({ parent_id: parent.id });
232
- expect(children.length).toBe(5);
233
- });
234
- });
235
- // ==========================================================================
236
- // Dangling References
237
- // ==========================================================================
238
- describe('Dangling References', () => {
239
- it('should allow edge to external URI (non-local ID)', async () => {
240
- // The system allows edges to non-local IDs (treated as external URIs)
241
- // This is by design - edges can reference external resources
242
- const issue = await store.createNode({
243
- type: 'issue',
244
- title: 'Real Issue',
245
- status: 'open',
246
- });
247
- // "nonexistent-id" doesn't match local ID pattern (x-xxx) so it's treated as external
248
- const edge = await store.createEdge({
249
- from_id: issue.id,
250
- to_id: 'github://org/repo/issues/123',
251
- type: 'references',
252
- });
253
- expect(edge).toBeDefined();
254
- expect(edge.to_id).toBe('github://org/repo/issues/123');
255
- });
256
- it('should reject edge to non-existent LOCAL node', async () => {
257
- // Local node references (matching pattern like i-xxx) are validated
258
- const issue = await store.createNode({
259
- type: 'issue',
260
- title: 'Real Issue',
261
- status: 'open',
262
- });
263
- // i-xxxx format is a local ID - should be validated
264
- await expect(store.createEdge({
265
- from_id: issue.id,
266
- to_id: 'i-nonexistent',
267
- type: 'blocks',
268
- })).rejects.toThrow();
269
- });
270
- it('should reject edge from non-existent LOCAL node', async () => {
271
- const issue = await store.createNode({
272
- type: 'issue',
273
- title: 'Real Issue',
274
- status: 'open',
275
- });
276
- await expect(store.createEdge({
277
- from_id: 'i-nonexistent',
278
- to_id: issue.id,
279
- type: 'blocks',
280
- })).rejects.toThrow();
281
- });
282
- });
283
- // ==========================================================================
284
- // Multiple Edges Between Same Nodes
285
- // ==========================================================================
286
- describe('Multiple Edges Between Same Nodes', () => {
287
- it('should allow different edge types between same nodes', async () => {
288
- const spec = await store.createNode({
289
- type: 'spec',
290
- title: 'Spec',
291
- });
292
- const issue = await store.createNode({
293
- type: 'issue',
294
- title: 'Issue',
295
- status: 'open',
296
- });
297
- // Issue implements Spec
298
- const edge1 = await store.createEdge({
299
- from_id: issue.id,
300
- to_id: spec.id,
301
- type: 'implements',
302
- });
303
- // Issue also references Spec
304
- const edge2 = await store.createEdge({
305
- from_id: issue.id,
306
- to_id: spec.id,
307
- type: 'references',
308
- });
309
- expect(edge1.id).not.toBe(edge2.id);
310
- expect(edge1.type).toBe('implements');
311
- expect(edge2.type).toBe('references');
312
- });
313
- it('should handle querying multiple edge types', async () => {
314
- const spec = await store.createNode({
315
- type: 'spec',
316
- title: 'Spec',
317
- });
318
- const issue = await store.createNode({
319
- type: 'issue',
320
- title: 'Issue',
321
- status: 'open',
322
- });
323
- await store.createEdge({
324
- from_id: issue.id,
325
- to_id: spec.id,
326
- type: 'implements',
327
- });
328
- await store.createEdge({
329
- from_id: issue.id,
330
- to_id: spec.id,
331
- type: 'references',
332
- });
333
- // Query all edges from issue
334
- const allEdges = await store.query.edges({ from_id: issue.id });
335
- expect(allEdges.length).toBe(2);
336
- // Query only implements edges
337
- const implementsEdges = await store.query.edges({
338
- from_id: issue.id,
339
- type: 'implements',
340
- });
341
- expect(implementsEdges.length).toBe(1);
342
- });
343
- });
344
- // ==========================================================================
345
- // Concurrent Operations
346
- // ==========================================================================
347
- describe('Concurrent Operations', () => {
348
- it('should handle concurrent node creation', async () => {
349
- // Create 10 nodes concurrently
350
- const promises = Array.from({ length: 10 }, (_, i) => store.createNode({
351
- type: 'issue',
352
- title: `Concurrent Issue ${i}`,
353
- status: 'open',
354
- }));
355
- const nodes = await Promise.all(promises);
356
- // All nodes should have unique IDs
357
- const ids = nodes.map((n) => n.id);
358
- const uniqueIds = new Set(ids);
359
- expect(uniqueIds.size).toBe(10);
360
- });
361
- it('should handle concurrent edge creation', async () => {
362
- // Create nodes first
363
- const nodes = await Promise.all(Array.from({ length: 5 }, (_, i) => store.createNode({
364
- type: 'issue',
365
- title: `Issue ${i}`,
366
- status: 'open',
367
- })));
368
- // Create edges concurrently (0→1, 0→2, 0→3, 0→4)
369
- const edgePromises = nodes.slice(1).map((target) => store.createEdge({
370
- from_id: nodes[0].id,
371
- to_id: target.id,
372
- type: 'references',
373
- }));
374
- const edges = await Promise.all(edgePromises);
375
- // All edges should be created
376
- expect(edges.length).toBe(4);
377
- expect(new Set(edges.map((e) => e.id)).size).toBe(4);
378
- });
379
- });
380
- // ==========================================================================
381
- // Empty and Boundary Values
382
- // ==========================================================================
383
- describe('Empty and Boundary Values', () => {
384
- it('should handle empty title', async () => {
385
- // Empty title should be rejected by validation
386
- await expect(store.createNode({
387
- type: 'issue',
388
- title: '',
389
- status: 'open',
390
- })).rejects.toThrow();
391
- });
392
- it('should handle title at max length (500 chars)', async () => {
393
- // System has a 500 character limit for titles
394
- const longTitle = 'A'.repeat(500);
395
- const node = await store.createNode({
396
- type: 'issue',
397
- title: longTitle,
398
- status: 'open',
399
- });
400
- expect(node.title).toBe(longTitle);
401
- });
402
- it('should reject title exceeding max length', async () => {
403
- const tooLongTitle = 'A'.repeat(501);
404
- await expect(store.createNode({
405
- type: 'issue',
406
- title: tooLongTitle,
407
- status: 'open',
408
- })).rejects.toThrow(/exceeds maximum length/i);
409
- });
410
- it('should handle special characters in title', async () => {
411
- const specialTitle = '测试 "quotes" <tags> & symbols 🎉';
412
- const node = await store.createNode({
413
- type: 'spec',
414
- title: specialTitle,
415
- });
416
- expect(node.title).toBe(specialTitle);
417
- });
418
- it('should handle null content', async () => {
419
- const node = await store.createNode({
420
- type: 'spec',
421
- title: 'No Content',
422
- });
423
- expect(node.content).toBeUndefined();
424
- });
425
- it('should handle empty content', async () => {
426
- const node = await store.createNode({
427
- type: 'spec',
428
- title: 'Empty Content',
429
- content: '',
430
- });
431
- expect(node.content).toBe('');
432
- });
433
- });
434
- // ==========================================================================
435
- // Priority Edge Cases
436
- // ==========================================================================
437
- describe('Priority Edge Cases', () => {
438
- it('should handle priority 0 (highest)', async () => {
439
- const node = await store.createNode({
440
- type: 'issue',
441
- title: 'Critical',
442
- status: 'open',
443
- priority: 0,
444
- });
445
- expect(node.priority).toBe(0);
446
- });
447
- it('should handle priority 4 (lowest)', async () => {
448
- const node = await store.createNode({
449
- type: 'issue',
450
- title: 'Low Priority',
451
- status: 'open',
452
- priority: 4,
453
- });
454
- expect(node.priority).toBe(4);
455
- });
456
- it('should reject priority out of range', async () => {
457
- await expect(store.createNode({
458
- type: 'issue',
459
- title: 'Invalid Priority',
460
- status: 'open',
461
- priority: 5,
462
- })).rejects.toThrow();
463
- await expect(store.createNode({
464
- type: 'issue',
465
- title: 'Invalid Priority',
466
- status: 'open',
467
- priority: -1,
468
- })).rejects.toThrow();
469
- });
470
- });
471
- });
472
- //# sourceMappingURL=edge-cases.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edge-cases.test.js","sourceRoot":"","sources":["../../../src/graph/__tests__/edge-cases.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=expansion.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expansion.test.d.ts","sourceRoot":"","sources":["../../../src/graph/__tests__/expansion.test.ts"],"names":[],"mappings":""}
@@ -1,105 +0,0 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- import { createQueryExpander, } from '../expansion.js';
3
- function mockStorage() {
4
- return {
5
- createNode: vi.fn(),
6
- getNode: vi.fn(),
7
- updateNode: vi.fn(),
8
- deleteNode: vi.fn(),
9
- queryNodes: vi.fn().mockResolvedValue([]),
10
- createEdge: vi.fn(),
11
- getEdge: vi.fn(),
12
- deleteEdge: vi.fn(),
13
- getEdgesFrom: vi.fn().mockResolvedValue([]),
14
- getEdgesTo: vi.fn().mockResolvedValue([]),
15
- addTag: vi.fn(),
16
- removeTag: vi.fn(),
17
- getTags: vi.fn().mockResolvedValue([]),
18
- getTagsForNodes: vi.fn().mockResolvedValue(new Map()),
19
- getNodesByTag: vi.fn().mockResolvedValue([]),
20
- getReady: vi.fn().mockResolvedValue([
21
- { id: 'i-local', uuid: 'uuid1', type: 'issue', title: 'Local Issue', status: 'open', created_at: '2025-01-01', updated_at: '2025-01-01' },
22
- ]),
23
- runInTransaction: vi.fn(),
24
- markDirty: vi.fn(),
25
- getDirtyNodes: vi.fn().mockResolvedValue([]),
26
- clearDirty: vi.fn(),
27
- close: vi.fn(),
28
- };
29
- }
30
- function mockLocationProvider(hash, readyNodes = []) {
31
- return {
32
- name: `opentasks-${hash}`,
33
- schemes: ['opentasks'],
34
- capabilities: { read: true, write: false, search: true, watch: false, mount: false, feedback: false },
35
- parseUri: vi.fn().mockReturnValue(null),
36
- buildUri: vi.fn().mockReturnValue(''),
37
- isValidUri: vi.fn().mockReturnValue(false),
38
- get: vi.fn().mockResolvedValue(null),
39
- list: vi.fn().mockResolvedValue(readyNodes),
40
- create: vi.fn(),
41
- update: vi.fn(),
42
- delete: vi.fn(),
43
- ready: vi.fn().mockResolvedValue(readyNodes),
44
- close: vi.fn(),
45
- };
46
- }
47
- describe('createQueryExpander', () => {
48
- it('returns only local results with mode=none', async () => {
49
- const storage = mockStorage();
50
- const expander = createQueryExpander(storage, 'local1', new Map());
51
- const result = await expander.expandedReady({ expand: 'none' });
52
- expect(result.local).toHaveLength(1);
53
- expect(result.local[0].id).toBe('i-local');
54
- expect(result.connected).toEqual({});
55
- expect(result.completeness).toBe('full');
56
- });
57
- it('queries connected locations with mode=connections', async () => {
58
- const storage = mockStorage();
59
- const remoteNodes = [
60
- { id: 'i-remote', uri: 'opentasks://remote1/i-remote', type: 'issue', title: 'Remote Issue', fetchedAt: '2025-01-01' },
61
- ];
62
- const providers = new Map();
63
- providers.set('remote1', mockLocationProvider('remote1', remoteNodes));
64
- const expander = createQueryExpander(storage, 'local1', providers);
65
- const result = await expander.expandedReady({ expand: 'connections' });
66
- expect(result.local).toHaveLength(1);
67
- expect(result.connected['remote1']).toHaveLength(1);
68
- expect(result.connected['remote1'][0].id).toBe('i-remote');
69
- expect(result.queriedLocations).toContain('local1');
70
- expect(result.queriedLocations).toContain('remote1');
71
- expect(result.completeness).toBe('full');
72
- });
73
- it('marks partial when providers fail', async () => {
74
- const storage = mockStorage();
75
- const failingProvider = mockLocationProvider('failing1');
76
- failingProvider.ready.mockRejectedValue(new Error('unreachable'));
77
- const providers = new Map();
78
- providers.set('failing1', failingProvider);
79
- const expander = createQueryExpander(storage, 'local1', providers);
80
- const result = await expander.expandedReady({ expand: 'all' });
81
- expect(result.unreachableLocations).toContain('failing1');
82
- expect(result.completeness).toBe('partial');
83
- });
84
- it('expandedQuery uses filter', async () => {
85
- const storage = mockStorage();
86
- const providers = new Map();
87
- const expander = createQueryExpander(storage, 'local1', providers);
88
- await expander.expandedQuery({ type: 'issue', status: 'open' });
89
- expect(storage.queryNodes).toHaveBeenCalledWith({
90
- type: 'issue',
91
- status: 'open',
92
- });
93
- });
94
- it('respects maxLocations', async () => {
95
- const storage = mockStorage();
96
- const providers = new Map();
97
- for (let i = 0; i < 20; i++) {
98
- providers.set(`loc${i}`, mockLocationProvider(`loc${i}`));
99
- }
100
- const expander = createQueryExpander(storage, 'local1', providers);
101
- const result = await expander.expandedReady({ expand: 'all', maxLocations: 5 });
102
- expect(result.queriedLocations.length).toBeLessThanOrEqual(6); // local + 5
103
- });
104
- });
105
- //# sourceMappingURL=expansion.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"expansion.test.js","sourceRoot":"","sources":["../../../src/graph/__tests__/expansion.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for Provider-Aware Graph Store
3
- */
4
- export {};
5
- //# sourceMappingURL=provider-store.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider-store.test.d.ts","sourceRoot":"","sources":["../../../src/graph/__tests__/provider-store.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}