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,288 +0,0 @@
1
- /**
2
- * Tests for Query Tool
3
- */
4
- import { describe, it, expect, beforeEach, vi } from 'vitest';
5
- import { query } from '../query.js';
6
- describe('query tool', () => {
7
- let mockStore;
8
- // Sample data
9
- const sampleSpec = {
10
- id: 's-test1',
11
- uuid: 'uuid-1',
12
- type: 'spec',
13
- title: 'Test Spec',
14
- priority: 1,
15
- archived: false,
16
- created_at: '2024-01-01T00:00:00Z',
17
- updated_at: '2024-01-01T00:00:00Z',
18
- };
19
- const sampleIssue = {
20
- id: 'i-test1',
21
- uuid: 'uuid-2',
22
- type: 'issue',
23
- title: 'Test Issue',
24
- status: 'open',
25
- priority: 2,
26
- archived: false,
27
- created_at: '2024-01-01T00:00:00Z',
28
- updated_at: '2024-01-01T00:00:00Z',
29
- };
30
- const sampleFeedback = {
31
- id: 'f-test1',
32
- uuid: 'uuid-3',
33
- type: 'feedback',
34
- title: 'Test Feedback',
35
- target_id: 's-test1',
36
- feedback_type: 'comment',
37
- resolved: false,
38
- dismissed: false,
39
- content: 'This is a test feedback comment that might be quite long in practice',
40
- priority: 0,
41
- archived: false,
42
- created_at: '2024-01-01T00:00:00Z',
43
- updated_at: '2024-01-01T00:00:00Z',
44
- };
45
- const sampleEdge = {
46
- id: 'x-test1',
47
- uuid: 'uuid-4',
48
- from_id: 'i-test1',
49
- to_id: 's-test1',
50
- type: 'implements',
51
- created_at: '2024-01-01T00:00:00Z',
52
- };
53
- beforeEach(() => {
54
- mockStore = {
55
- query: {
56
- nodes: vi.fn().mockResolvedValue([sampleSpec, sampleIssue]),
57
- edges: vi.fn().mockResolvedValue([sampleEdge]),
58
- ready: vi.fn().mockResolvedValue([sampleIssue]),
59
- blockers: vi.fn().mockResolvedValue([sampleSpec]),
60
- blocking: vi.fn().mockResolvedValue([sampleIssue]),
61
- feedback: vi.fn().mockResolvedValue([sampleFeedback]),
62
- unresolvedFeedback: vi.fn().mockResolvedValue([sampleFeedback]),
63
- },
64
- };
65
- });
66
- describe('query type validation', () => {
67
- it('should error when no query type specified', async () => {
68
- await expect(query(mockStore, {})).rejects.toThrow('No query type specified');
69
- });
70
- it('should error when multiple query types specified', async () => {
71
- await expect(query(mockStore, {
72
- nodes: {},
73
- edges: {},
74
- })).rejects.toThrow('Multiple query types specified');
75
- });
76
- it('should accept single query type', async () => {
77
- const result = await query(mockStore, { nodes: {} });
78
- expect(result.items).toBeDefined();
79
- });
80
- });
81
- describe('nodes query', () => {
82
- it('should query nodes with filter', async () => {
83
- const result = await query(mockStore, {
84
- nodes: { type: 'spec' },
85
- });
86
- expect(mockStore.query.nodes).toHaveBeenCalledWith(expect.objectContaining({ type: 'spec' }));
87
- expect(result.items).toHaveLength(2);
88
- });
89
- it('should return reduced output by default', async () => {
90
- const result = await query(mockStore, { nodes: {} });
91
- const item = result.items[0];
92
- expect(item.id).toBe('s-test1');
93
- expect(item.type).toBe('spec');
94
- expect(item.title).toBe('Test Spec');
95
- // Should NOT have full node properties
96
- expect(item.uuid).toBeUndefined();
97
- expect(item.created_at).toBeUndefined();
98
- });
99
- it('should return full objects when verbose=true', async () => {
100
- const result = await query(mockStore, { nodes: {}, verbose: true });
101
- const item = result.items[0];
102
- expect(item.id).toBe('s-test1');
103
- expect(item.uuid).toBe('uuid-1');
104
- expect(item.created_at).toBeDefined();
105
- });
106
- });
107
- describe('edges query', () => {
108
- it('should query edges with filter', async () => {
109
- const result = await query(mockStore, {
110
- edges: { from_id: 'i-test1' },
111
- });
112
- expect(mockStore.query.edges).toHaveBeenCalled();
113
- expect(result.items).toHaveLength(1);
114
- });
115
- it('should return reduced edge output by default', async () => {
116
- const result = await query(mockStore, { edges: {} });
117
- const item = result.items[0];
118
- expect(item.id).toBe('x-test1');
119
- expect(item.fromId).toBe('i-test1');
120
- expect(item.toId).toBe('s-test1');
121
- expect(item.type).toBe('implements');
122
- // Should NOT have full edge properties
123
- expect(item.uuid).toBeUndefined();
124
- expect(item.created_at).toBeUndefined();
125
- });
126
- });
127
- describe('ready query', () => {
128
- it('should return ready issues', async () => {
129
- const result = await query(mockStore, { ready: {} });
130
- expect(mockStore.query.ready).toHaveBeenCalled();
131
- expect(result.items).toHaveLength(1);
132
- });
133
- it('should pass ready options', async () => {
134
- await query(mockStore, {
135
- ready: { priority: 1, assignee: 'user1' },
136
- });
137
- expect(mockStore.query.ready).toHaveBeenCalledWith(expect.objectContaining({
138
- priority: 1,
139
- assignee: 'user1',
140
- }));
141
- });
142
- });
143
- describe('blockers query', () => {
144
- it('should return blockers for node', async () => {
145
- const result = await query(mockStore, {
146
- blockers: { nodeId: 'i-test1' },
147
- });
148
- expect(mockStore.query.blockers).toHaveBeenCalledWith('i-test1', expect.any(Object));
149
- expect(result.items).toHaveLength(1);
150
- });
151
- it('should pass blocker options', async () => {
152
- await query(mockStore, {
153
- blockers: { nodeId: 'i-test1', transitive: true, activeOnly: false },
154
- });
155
- expect(mockStore.query.blockers).toHaveBeenCalledWith('i-test1', {
156
- transitive: true,
157
- activeOnly: false,
158
- });
159
- });
160
- });
161
- describe('blocking query', () => {
162
- it('should return nodes blocked by node', async () => {
163
- const result = await query(mockStore, {
164
- blocking: { nodeId: 's-test1' },
165
- });
166
- expect(mockStore.query.blocking).toHaveBeenCalledWith('s-test1', expect.any(Object));
167
- expect(result.items).toHaveLength(1);
168
- });
169
- });
170
- describe('feedback query', () => {
171
- it('should return feedback for node', async () => {
172
- const result = await query(mockStore, {
173
- feedback: { nodeId: 's-test1' },
174
- });
175
- expect(mockStore.query.feedback).toHaveBeenCalledWith('s-test1', expect.any(Object));
176
- expect(result.items).toHaveLength(1);
177
- });
178
- it('should pass feedback options', async () => {
179
- await query(mockStore, {
180
- feedback: {
181
- nodeId: 's-test1',
182
- type: 'suggestion',
183
- resolved: true,
184
- includeDismissed: true,
185
- },
186
- });
187
- expect(mockStore.query.feedback).toHaveBeenCalledWith('s-test1', {
188
- type: 'suggestion',
189
- resolved: true,
190
- includeDismissed: true,
191
- });
192
- });
193
- it('should return reduced feedback output by default', async () => {
194
- const result = await query(mockStore, {
195
- feedback: { nodeId: 's-test1' },
196
- });
197
- const item = result.items[0];
198
- expect(item.id).toBe('f-test1');
199
- expect(item.targetId).toBe('s-test1');
200
- expect(item.feedbackType).toBe('comment');
201
- expect(item.resolved).toBe(false);
202
- expect(item.dismissed).toBe(false);
203
- expect(item.contentPreview).toBeDefined();
204
- // Should NOT have full feedback properties
205
- expect(item.uuid).toBeUndefined();
206
- });
207
- });
208
- describe('unresolvedFeedback query', () => {
209
- it('should return all unresolved feedback', async () => {
210
- const result = await query(mockStore, {
211
- unresolvedFeedback: {},
212
- });
213
- expect(mockStore.query.unresolvedFeedback).toHaveBeenCalledWith(undefined);
214
- expect(result.items).toHaveLength(1);
215
- });
216
- it('should filter by targetId when provided', async () => {
217
- await query(mockStore, {
218
- unresolvedFeedback: { targetId: 's-test1' },
219
- });
220
- expect(mockStore.query.unresolvedFeedback).toHaveBeenCalledWith('s-test1');
221
- });
222
- it('should return reduced feedback output', async () => {
223
- const result = await query(mockStore, {
224
- unresolvedFeedback: {},
225
- });
226
- const item = result.items[0];
227
- expect(item.id).toBe('f-test1');
228
- expect(item.targetId).toBe('s-test1');
229
- expect(item.feedbackType).toBe('comment');
230
- expect(item.resolved).toBe(false);
231
- // Should NOT have full feedback properties
232
- expect(item.uuid).toBeUndefined();
233
- });
234
- });
235
- describe('pagination', () => {
236
- beforeEach(() => {
237
- // Return many items for pagination tests
238
- const manyNodes = Array.from({ length: 100 }, (_, i) => ({
239
- ...sampleSpec,
240
- id: `s-test${i}`,
241
- title: `Test Spec ${i}`,
242
- }));
243
- mockStore.query.nodes = vi.fn().mockResolvedValue(manyNodes);
244
- });
245
- it('should respect limit', async () => {
246
- const result = await query(mockStore, {
247
- nodes: {},
248
- limit: 10,
249
- });
250
- expect(result.items).toHaveLength(10);
251
- });
252
- it('should respect offset', async () => {
253
- const result = await query(mockStore, {
254
- nodes: {},
255
- limit: 10,
256
- offset: 5,
257
- });
258
- expect(result.items).toHaveLength(10);
259
- expect(result.items[0].id).toBe('s-test5');
260
- });
261
- it('should calculate hasMore correctly when more items exist', async () => {
262
- const result = await query(mockStore, {
263
- nodes: {},
264
- limit: 10,
265
- });
266
- expect(result.hasMore).toBe(true);
267
- });
268
- it('should calculate hasMore correctly when no more items', async () => {
269
- const result = await query(mockStore, {
270
- nodes: {},
271
- limit: 100,
272
- });
273
- expect(result.hasMore).toBe(false);
274
- });
275
- it('should include total count', async () => {
276
- const result = await query(mockStore, {
277
- nodes: {},
278
- limit: 10,
279
- });
280
- expect(result.total).toBe(100);
281
- });
282
- it('should use default limit of 50', async () => {
283
- const result = await query(mockStore, { nodes: {} });
284
- expect(result.items).toHaveLength(50);
285
- });
286
- });
287
- });
288
- //# sourceMappingURL=query.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/query.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for Task Tool
3
- */
4
- export {};
5
- //# sourceMappingURL=task.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.d.ts","sourceRoot":"","sources":["../../../src/tools/__tests__/task.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,178 +0,0 @@
1
- /**
2
- * Tests for Task Tool
3
- */
4
- import { describe, it, expect, beforeEach, vi } from 'vitest';
5
- import { task } from '../task.js';
6
- describe('task tool', () => {
7
- let mockStore;
8
- const sampleNode = {
9
- id: 'x-task1',
10
- uuid: 'uuid-1',
11
- type: 'external',
12
- title: 'Test Task',
13
- priority: 1,
14
- archived: false,
15
- uri: 'beads://x-task1',
16
- source: 'beads',
17
- materialized: true,
18
- created_at: '2024-01-01T00:00:00Z',
19
- updated_at: '2024-01-01T00:00:00Z',
20
- };
21
- beforeEach(() => {
22
- mockStore = {
23
- taskTransition: vi.fn().mockResolvedValue({
24
- node: { ...sampleNode, title: 'Started Task' },
25
- provider: 'beads',
26
- action: 'start',
27
- }),
28
- taskReady: vi.fn().mockResolvedValue([sampleNode]),
29
- taskAssign: vi.fn().mockResolvedValue(sampleNode),
30
- taskValidActions: vi.fn().mockResolvedValue(['start', 'complete', 'close']),
31
- };
32
- });
33
- describe('operation validation', () => {
34
- it('should error when no operation specified', async () => {
35
- const result = await task(mockStore, {});
36
- expect(result.success).toBe(false);
37
- expect(result.error).toContain('No operation specified');
38
- });
39
- it('should error when multiple operations specified', async () => {
40
- const result = await task(mockStore, {
41
- transition: { id: 'x-task1', action: 'start' },
42
- ready: {},
43
- });
44
- expect(result.success).toBe(false);
45
- expect(result.error).toContain('Multiple operations');
46
- });
47
- });
48
- describe('transition', () => {
49
- it('should transition a task', async () => {
50
- const result = await task(mockStore, {
51
- transition: { id: 'x-task1', action: 'start' },
52
- });
53
- expect(result.success).toBe(true);
54
- expect(result.data).toBeDefined();
55
- expect(result.data.type).toBe('transition');
56
- if (result.data.type === 'transition') {
57
- expect(result.data.provider).toBe('beads');
58
- expect(result.data.action).toBe('start');
59
- expect(result.data.node.id).toBe('x-task1');
60
- }
61
- expect(mockStore.taskTransition).toHaveBeenCalledWith('x-task1', 'start');
62
- });
63
- it('should reject invalid action', async () => {
64
- const result = await task(mockStore, {
65
- transition: { id: 'x-task1', action: 'invalid' },
66
- });
67
- expect(result.success).toBe(false);
68
- expect(result.error).toContain('Invalid action');
69
- });
70
- it('should require id', async () => {
71
- const result = await task(mockStore, {
72
- transition: { id: '', action: 'start' },
73
- });
74
- expect(result.success).toBe(false);
75
- expect(result.error).toContain('Missing required parameter: id');
76
- });
77
- it('should handle provider errors gracefully', async () => {
78
- vi.mocked(mockStore.taskTransition).mockRejectedValue(new Error('Provider beads does not support task operations'));
79
- const result = await task(mockStore, {
80
- transition: { id: 'x-task1', action: 'start' },
81
- });
82
- expect(result.success).toBe(false);
83
- expect(result.error).toContain('does not support task operations');
84
- });
85
- it('should support all valid actions', async () => {
86
- for (const action of ['start', 'complete', 'block', 'reopen', 'close']) {
87
- vi.mocked(mockStore.taskTransition).mockResolvedValue({
88
- node: sampleNode,
89
- provider: 'beads',
90
- action,
91
- });
92
- const result = await task(mockStore, {
93
- transition: { id: 'x-task1', action },
94
- });
95
- expect(result.success).toBe(true);
96
- }
97
- });
98
- });
99
- describe('ready', () => {
100
- it('should return ready tasks', async () => {
101
- const result = await task(mockStore, { ready: {} });
102
- expect(result.success).toBe(true);
103
- expect(result.data).toBeDefined();
104
- expect(result.data.type).toBe('ready');
105
- if (result.data.type === 'ready') {
106
- expect(result.data.items).toHaveLength(1);
107
- expect(result.data.items[0].id).toBe('x-task1');
108
- expect(result.data.total).toBe(1);
109
- }
110
- });
111
- it('should forward filter options', async () => {
112
- await task(mockStore, {
113
- ready: { providers: ['beads'], limit: 5, tags: ['urgent'] },
114
- });
115
- expect(mockStore.taskReady).toHaveBeenCalledWith({
116
- providers: ['beads'],
117
- limit: 5,
118
- tags: ['urgent'],
119
- priority: undefined,
120
- assignee: undefined,
121
- });
122
- });
123
- it('should return empty list when no ready tasks', async () => {
124
- vi.mocked(mockStore.taskReady).mockResolvedValue([]);
125
- const result = await task(mockStore, { ready: {} });
126
- expect(result.success).toBe(true);
127
- if (result.data.type === 'ready') {
128
- expect(result.data.items).toHaveLength(0);
129
- expect(result.data.total).toBe(0);
130
- }
131
- });
132
- });
133
- describe('assign', () => {
134
- it('should assign a task', async () => {
135
- const result = await task(mockStore, {
136
- assign: { id: 'x-task1', assignee: 'alice' },
137
- });
138
- expect(result.success).toBe(true);
139
- expect(result.data.type).toBe('assign');
140
- expect(mockStore.taskAssign).toHaveBeenCalledWith('x-task1', 'alice');
141
- });
142
- it('should require id', async () => {
143
- const result = await task(mockStore, {
144
- assign: { id: '', assignee: 'alice' },
145
- });
146
- expect(result.success).toBe(false);
147
- expect(result.error).toContain('Missing required parameter: id');
148
- });
149
- it('should require assignee', async () => {
150
- const result = await task(mockStore, {
151
- assign: { id: 'x-task1', assignee: '' },
152
- });
153
- expect(result.success).toBe(false);
154
- expect(result.error).toContain('Missing required parameter: assignee');
155
- });
156
- });
157
- describe('validActions', () => {
158
- it('should return valid actions', async () => {
159
- const result = await task(mockStore, {
160
- validActions: { id: 'x-task1' },
161
- });
162
- expect(result.success).toBe(true);
163
- expect(result.data.type).toBe('validActions');
164
- if (result.data.type === 'validActions') {
165
- expect(result.data.actions).toEqual(['start', 'complete', 'close']);
166
- }
167
- expect(mockStore.taskValidActions).toHaveBeenCalledWith('x-task1');
168
- });
169
- it('should require id', async () => {
170
- const result = await task(mockStore, {
171
- validActions: { id: '' },
172
- });
173
- expect(result.success).toBe(false);
174
- expect(result.error).toContain('Missing required parameter: id');
175
- });
176
- });
177
- });
178
- //# sourceMappingURL=task.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task.test.js","sourceRoot":"","sources":["../../../src/tools/__tests__/task.test.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Claude Task State Reconstructor
3
- *
4
- * Replays TaskCreate/TaskUpdate sequences from extracted tool calls
5
- * to reconstruct the ephemeral task list state from a session.
6
- */
7
- import type { ExtractedToolCall } from './claude-tool-categorizer.js';
8
- export interface ReconstructedTask {
9
- /** Task ID (from TaskCreate response or TaskUpdate params) */
10
- taskId: string;
11
- /** Subject (from TaskCreate input) */
12
- subject: string;
13
- /** Description (from TaskCreate input) */
14
- description?: string;
15
- /** Status transitions in order */
16
- statusHistory: Array<{
17
- status: string;
18
- lineIndex: number;
19
- }>;
20
- /** Final status */
21
- finalStatus: 'pending' | 'in_progress' | 'completed';
22
- /** Owner if assigned via TaskUpdate */
23
- owner?: string;
24
- /** Dependencies from TaskUpdate addBlocks */
25
- blocks?: string[];
26
- /** Dependencies from TaskUpdate addBlockedBy */
27
- blockedBy?: string[];
28
- }
29
- export interface ReconstructedClaudeTaskState {
30
- /** Tasks that existed during the session */
31
- tasks: ReconstructedTask[];
32
- /** Final task list snapshot at session end */
33
- finalSnapshot: ReconstructedTask[];
34
- }
35
- /**
36
- * Reconstruct Claude's ephemeral task state from a list of extracted tool calls.
37
- * Only processes calls with `category === 'claude-native'` and
38
- * `toolName` of `TaskCreate` or `TaskUpdate`.
39
- */
40
- export declare function reconstructClaudeTaskState(toolCalls: ExtractedToolCall[]): ReconstructedClaudeTaskState;
41
- //# sourceMappingURL=claude-task-reconstructor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-task-reconstructor.d.ts","sourceRoot":"","sources":["../../src/tracking/claude-task-reconstructor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMtE,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAEhB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAE5D,mBAAmB;IACnB,WAAW,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;IAErD,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,4CAA4C;IAC5C,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAE3B,8CAA8C;IAC9C,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAcD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,iBAAiB,EAAE,GAC7B,4BAA4B,CA+E9B"}
@@ -1,91 +0,0 @@
1
- /**
2
- * Claude Task State Reconstructor
3
- *
4
- * Replays TaskCreate/TaskUpdate sequences from extracted tool calls
5
- * to reconstruct the ephemeral task list state from a session.
6
- */
7
- // ============================================================================
8
- // Implementation
9
- // ============================================================================
10
- const TASK_CREATED_REGEX = /Task #(\d+)/;
11
- function parseTaskIdFromOutput(output) {
12
- if (!output)
13
- return undefined;
14
- const match = output.match(TASK_CREATED_REGEX);
15
- return match?.[1];
16
- }
17
- /**
18
- * Reconstruct Claude's ephemeral task state from a list of extracted tool calls.
19
- * Only processes calls with `category === 'claude-native'` and
20
- * `toolName` of `TaskCreate` or `TaskUpdate`.
21
- */
22
- export function reconstructClaudeTaskState(toolCalls) {
23
- const tasksById = new Map();
24
- const taskOrder = [];
25
- for (const call of toolCalls) {
26
- if (call.category !== 'claude-native')
27
- continue;
28
- if (call.toolName === 'TaskCreate') {
29
- const taskId = parseTaskIdFromOutput(call.output);
30
- if (!taskId)
31
- continue;
32
- const task = {
33
- taskId,
34
- subject: call.input.subject ?? '',
35
- description: call.input.description,
36
- statusHistory: [{ status: 'pending', lineIndex: call.lineIndex }],
37
- finalStatus: 'pending',
38
- owner: undefined,
39
- blocks: undefined,
40
- blockedBy: undefined,
41
- };
42
- tasksById.set(taskId, task);
43
- taskOrder.push(taskId);
44
- }
45
- if (call.toolName === 'TaskUpdate') {
46
- const taskId = call.input.taskId;
47
- if (!taskId)
48
- continue;
49
- let task = tasksById.get(taskId);
50
- if (!task) {
51
- // Task was created before this transcript scope
52
- task = {
53
- taskId,
54
- subject: `(unknown task #${taskId})`,
55
- statusHistory: [],
56
- finalStatus: 'pending',
57
- };
58
- tasksById.set(taskId, task);
59
- taskOrder.push(taskId);
60
- }
61
- if (call.input.status) {
62
- const status = call.input.status;
63
- task.statusHistory.push({ status, lineIndex: call.lineIndex });
64
- task.finalStatus = status;
65
- }
66
- if (call.input.owner !== undefined) {
67
- task.owner = call.input.owner;
68
- }
69
- if (call.input.subject !== undefined) {
70
- task.subject = call.input.subject;
71
- }
72
- if (call.input.description !== undefined) {
73
- task.description = call.input.description;
74
- }
75
- if (call.input.addBlocks) {
76
- const newBlocks = call.input.addBlocks;
77
- task.blocks = [...(task.blocks ?? []), ...newBlocks];
78
- }
79
- if (call.input.addBlockedBy) {
80
- const newBlockedBy = call.input.addBlockedBy;
81
- task.blockedBy = [...(task.blockedBy ?? []), ...newBlockedBy];
82
- }
83
- }
84
- }
85
- const tasks = taskOrder.map((id) => tasksById.get(id));
86
- return {
87
- tasks,
88
- finalSnapshot: tasks.map((t) => ({ ...t })),
89
- };
90
- }
91
- //# sourceMappingURL=claude-task-reconstructor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-task-reconstructor.js","sourceRoot":"","sources":["../../src/tracking/claude-task-reconstructor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0CH,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEzC,SAAS,qBAAqB,CAAC,MAA0B;IACvD,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;IACvD,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,eAAe;YAAE,SAAS;QAEhD,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,IAAI,GAAsB;gBAC9B,MAAM;gBACN,OAAO,EAAG,IAAI,CAAC,KAAK,CAAC,OAAkB,IAAI,EAAE;gBAC7C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAiC;gBACzD,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjE,WAAW,EAAE,SAAS;gBACtB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,SAAS;aACrB,CAAC;YAEF,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAA4B,CAAC;YACvD,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,gDAAgD;gBAChD,IAAI,GAAG;oBACL,MAAM;oBACN,OAAO,EAAE,kBAAkB,MAAM,GAAG;oBACpC,aAAa,EAAE,EAAE;oBACjB,WAAW,EAAE,SAAS;iBACvB,CAAC;gBACF,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC5B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAgB,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC/D,IAAI,CAAC,WAAW,GAAG,MAA0C,CAAC;YAChE,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC;YAC1C,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAiB,CAAC;YAC9C,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACzC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAqB,CAAC;YACtD,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAqB,CAAC;gBACnD,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAwB,CAAC;gBACzD,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;KAC5C,CAAC;AACJ,CAAC"}