opentasks 0.0.4 → 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 (373) hide show
  1. package/README.md +40 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +183 -21
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/client.d.ts.map +1 -1
  6. package/dist/client/client.js +14 -1
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/config/schema.d.ts +139 -3
  9. package/dist/config/schema.d.ts.map +1 -1
  10. package/dist/config/schema.js +118 -2
  11. package/dist/config/schema.js.map +1 -1
  12. package/dist/core/discover.d.ts.map +1 -1
  13. package/dist/core/discover.js +55 -39
  14. package/dist/core/discover.js.map +1 -1
  15. package/dist/core/init.js +1 -1
  16. package/dist/core/init.js.map +1 -1
  17. package/dist/core/merge-driver.d.ts +6 -2
  18. package/dist/core/merge-driver.d.ts.map +1 -1
  19. package/dist/core/merge-driver.js +11 -7
  20. package/dist/core/merge-driver.js.map +1 -1
  21. package/dist/core/worktree.js +1 -1
  22. package/dist/core/worktree.js.map +1 -1
  23. package/dist/daemon/entire-linker.d.ts.map +1 -1
  24. package/dist/daemon/entire-linker.js +48 -42
  25. package/dist/daemon/entire-linker.js.map +1 -1
  26. package/dist/daemon/entire-watcher.d.ts +12 -1
  27. package/dist/daemon/entire-watcher.d.ts.map +1 -1
  28. package/dist/daemon/entire-watcher.js +34 -3
  29. package/dist/daemon/entire-watcher.js.map +1 -1
  30. package/dist/daemon/ipc.d.ts +9 -1
  31. package/dist/daemon/ipc.d.ts.map +1 -1
  32. package/dist/daemon/ipc.js +45 -2
  33. package/dist/daemon/ipc.js.map +1 -1
  34. package/dist/daemon/lifecycle.d.ts.map +1 -1
  35. package/dist/daemon/lifecycle.js +77 -3
  36. package/dist/daemon/lifecycle.js.map +1 -1
  37. package/dist/daemon/location-state.d.ts +3 -0
  38. package/dist/daemon/location-state.d.ts.map +1 -1
  39. package/dist/daemon/location-state.js +49 -2
  40. package/dist/daemon/location-state.js.map +1 -1
  41. package/dist/daemon/methods/watch.d.ts +23 -0
  42. package/dist/daemon/methods/watch.d.ts.map +1 -0
  43. package/dist/daemon/methods/watch.js +172 -0
  44. package/dist/daemon/methods/watch.js.map +1 -0
  45. package/dist/daemon/registry.d.ts.map +1 -1
  46. package/dist/daemon/registry.js +2 -1
  47. package/dist/daemon/registry.js.map +1 -1
  48. package/dist/entire/index.d.ts +1 -0
  49. package/dist/entire/index.d.ts.map +1 -1
  50. package/dist/entire/index.js.map +1 -1
  51. package/dist/entire/store/native-store.d.ts +1 -1
  52. package/dist/entire/store/native-store.d.ts.map +1 -1
  53. package/dist/entire/store/provider-types.d.ts +78 -0
  54. package/dist/entire/store/provider-types.d.ts.map +1 -0
  55. package/dist/entire/store/provider-types.js +12 -0
  56. package/dist/entire/store/provider-types.js.map +1 -0
  57. package/dist/graph/expansion.d.ts +3 -1
  58. package/dist/graph/expansion.d.ts.map +1 -1
  59. package/dist/graph/expansion.js +32 -2
  60. package/dist/graph/expansion.js.map +1 -1
  61. package/dist/graph/git-graph-syncer.d.ts +72 -0
  62. package/dist/graph/git-graph-syncer.d.ts.map +1 -0
  63. package/dist/graph/git-graph-syncer.js +205 -0
  64. package/dist/graph/git-graph-syncer.js.map +1 -0
  65. package/dist/graph/store.d.ts +4 -0
  66. package/dist/graph/store.d.ts.map +1 -1
  67. package/dist/graph/store.js +97 -2
  68. package/dist/graph/store.js.map +1 -1
  69. package/dist/providers/entire.d.ts +34 -69
  70. package/dist/providers/entire.d.ts.map +1 -1
  71. package/dist/providers/entire.js +63 -9
  72. package/dist/providers/entire.js.map +1 -1
  73. package/dist/providers/from-config.d.ts +3 -0
  74. package/dist/providers/from-config.d.ts.map +1 -1
  75. package/dist/providers/from-config.js +45 -20
  76. package/dist/providers/from-config.js.map +1 -1
  77. package/dist/providers/global.d.ts +2 -1
  78. package/dist/providers/global.d.ts.map +1 -1
  79. package/dist/providers/global.js +52 -1
  80. package/dist/providers/global.js.map +1 -1
  81. package/dist/providers/index.d.ts +3 -0
  82. package/dist/providers/index.d.ts.map +1 -1
  83. package/dist/providers/index.js +6 -0
  84. package/dist/providers/index.js.map +1 -1
  85. package/dist/providers/map-client-factory.d.ts +55 -0
  86. package/dist/providers/map-client-factory.d.ts.map +1 -0
  87. package/dist/providers/map-client-factory.js +123 -0
  88. package/dist/providers/map-client-factory.js.map +1 -0
  89. package/dist/providers/map-event-bridge.d.ts +146 -0
  90. package/dist/providers/map-event-bridge.d.ts.map +1 -0
  91. package/dist/providers/map-event-bridge.js +208 -0
  92. package/dist/providers/map-event-bridge.js.map +1 -0
  93. package/dist/providers/map.d.ts +115 -0
  94. package/dist/providers/map.d.ts.map +1 -0
  95. package/dist/providers/map.js +376 -0
  96. package/dist/providers/map.js.map +1 -0
  97. package/dist/tracking/index.d.ts +0 -4
  98. package/dist/tracking/index.d.ts.map +1 -1
  99. package/dist/tracking/index.js +0 -2
  100. package/dist/tracking/index.js.map +1 -1
  101. package/dist/tracking/transcript-extractor.d.ts +0 -6
  102. package/dist/tracking/transcript-extractor.d.ts.map +1 -1
  103. package/dist/tracking/transcript-extractor.js +3 -12
  104. package/dist/tracking/transcript-extractor.js.map +1 -1
  105. package/package.json +3 -1
  106. package/dist/__tests__/cli-tools.test.d.ts +0 -8
  107. package/dist/__tests__/cli-tools.test.d.ts.map +0 -1
  108. package/dist/__tests__/cli-tools.test.js +0 -546
  109. package/dist/__tests__/cli-tools.test.js.map +0 -1
  110. package/dist/__tests__/cli.test.d.ts +0 -5
  111. package/dist/__tests__/cli.test.d.ts.map +0 -1
  112. package/dist/__tests__/cli.test.js +0 -77
  113. package/dist/__tests__/cli.test.js.map +0 -1
  114. package/dist/__tests__/p1-p3-gaps.test.d.ts +0 -2
  115. package/dist/__tests__/p1-p3-gaps.test.d.ts.map +0 -1
  116. package/dist/__tests__/p1-p3-gaps.test.js +0 -463
  117. package/dist/__tests__/p1-p3-gaps.test.js.map +0 -1
  118. package/dist/client/__tests__/client-crud.test.d.ts +0 -7
  119. package/dist/client/__tests__/client-crud.test.d.ts.map +0 -1
  120. package/dist/client/__tests__/client-crud.test.js +0 -404
  121. package/dist/client/__tests__/client-crud.test.js.map +0 -1
  122. package/dist/client/__tests__/client.test.d.ts +0 -5
  123. package/dist/client/__tests__/client.test.d.ts.map +0 -1
  124. package/dist/client/__tests__/client.test.js +0 -518
  125. package/dist/client/__tests__/client.test.js.map +0 -1
  126. package/dist/config/__tests__/defaults.test.d.ts +0 -2
  127. package/dist/config/__tests__/defaults.test.d.ts.map +0 -1
  128. package/dist/config/__tests__/defaults.test.js +0 -57
  129. package/dist/config/__tests__/defaults.test.js.map +0 -1
  130. package/dist/config/__tests__/env.test.d.ts +0 -2
  131. package/dist/config/__tests__/env.test.d.ts.map +0 -1
  132. package/dist/config/__tests__/env.test.js +0 -136
  133. package/dist/config/__tests__/env.test.js.map +0 -1
  134. package/dist/config/__tests__/index.test.d.ts +0 -2
  135. package/dist/config/__tests__/index.test.d.ts.map +0 -1
  136. package/dist/config/__tests__/index.test.js +0 -113
  137. package/dist/config/__tests__/index.test.js.map +0 -1
  138. package/dist/config/__tests__/loader.test.d.ts +0 -2
  139. package/dist/config/__tests__/loader.test.d.ts.map +0 -1
  140. package/dist/config/__tests__/loader.test.js +0 -128
  141. package/dist/config/__tests__/loader.test.js.map +0 -1
  142. package/dist/config/__tests__/merge.test.d.ts +0 -2
  143. package/dist/config/__tests__/merge.test.d.ts.map +0 -1
  144. package/dist/config/__tests__/merge.test.js +0 -79
  145. package/dist/config/__tests__/merge.test.js.map +0 -1
  146. package/dist/config/__tests__/schema.test.d.ts +0 -2
  147. package/dist/config/__tests__/schema.test.d.ts.map +0 -1
  148. package/dist/config/__tests__/schema.test.js +0 -300
  149. package/dist/config/__tests__/schema.test.js.map +0 -1
  150. package/dist/core/__tests__/conditional-redirects.test.d.ts +0 -2
  151. package/dist/core/__tests__/conditional-redirects.test.d.ts.map +0 -1
  152. package/dist/core/__tests__/conditional-redirects.test.js +0 -83
  153. package/dist/core/__tests__/conditional-redirects.test.js.map +0 -1
  154. package/dist/core/__tests__/connections.test.d.ts +0 -2
  155. package/dist/core/__tests__/connections.test.d.ts.map +0 -1
  156. package/dist/core/__tests__/connections.test.js +0 -158
  157. package/dist/core/__tests__/connections.test.js.map +0 -1
  158. package/dist/core/__tests__/hash.test.d.ts +0 -2
  159. package/dist/core/__tests__/hash.test.d.ts.map +0 -1
  160. package/dist/core/__tests__/hash.test.js +0 -139
  161. package/dist/core/__tests__/hash.test.js.map +0 -1
  162. package/dist/core/__tests__/id.test.d.ts +0 -2
  163. package/dist/core/__tests__/id.test.d.ts.map +0 -1
  164. package/dist/core/__tests__/id.test.js +0 -142
  165. package/dist/core/__tests__/id.test.js.map +0 -1
  166. package/dist/core/__tests__/location.test.d.ts +0 -2
  167. package/dist/core/__tests__/location.test.d.ts.map +0 -1
  168. package/dist/core/__tests__/location.test.js +0 -77
  169. package/dist/core/__tests__/location.test.js.map +0 -1
  170. package/dist/core/__tests__/merge-driver.test.d.ts +0 -2
  171. package/dist/core/__tests__/merge-driver.test.d.ts.map +0 -1
  172. package/dist/core/__tests__/merge-driver.test.js +0 -218
  173. package/dist/core/__tests__/merge-driver.test.js.map +0 -1
  174. package/dist/core/__tests__/redirects.test.d.ts +0 -2
  175. package/dist/core/__tests__/redirects.test.d.ts.map +0 -1
  176. package/dist/core/__tests__/redirects.test.js +0 -123
  177. package/dist/core/__tests__/redirects.test.js.map +0 -1
  178. package/dist/core/__tests__/resolve-location-target.test.d.ts +0 -8
  179. package/dist/core/__tests__/resolve-location-target.test.d.ts.map +0 -1
  180. package/dist/core/__tests__/resolve-location-target.test.js +0 -303
  181. package/dist/core/__tests__/resolve-location-target.test.js.map +0 -1
  182. package/dist/core/__tests__/uri.test.d.ts +0 -2
  183. package/dist/core/__tests__/uri.test.d.ts.map +0 -1
  184. package/dist/core/__tests__/uri.test.js +0 -159
  185. package/dist/core/__tests__/uri.test.js.map +0 -1
  186. package/dist/core/__tests__/worktree.test.d.ts +0 -2
  187. package/dist/core/__tests__/worktree.test.d.ts.map +0 -1
  188. package/dist/core/__tests__/worktree.test.js +0 -120
  189. package/dist/core/__tests__/worktree.test.js.map +0 -1
  190. package/dist/daemon/__tests__/flush.test.d.ts +0 -5
  191. package/dist/daemon/__tests__/flush.test.d.ts.map +0 -1
  192. package/dist/daemon/__tests__/flush.test.js +0 -213
  193. package/dist/daemon/__tests__/flush.test.js.map +0 -1
  194. package/dist/daemon/__tests__/integration.test.d.ts +0 -7
  195. package/dist/daemon/__tests__/integration.test.d.ts.map +0 -1
  196. package/dist/daemon/__tests__/integration.test.js +0 -276
  197. package/dist/daemon/__tests__/integration.test.js.map +0 -1
  198. package/dist/daemon/__tests__/ipc.test.d.ts +0 -5
  199. package/dist/daemon/__tests__/ipc.test.d.ts.map +0 -1
  200. package/dist/daemon/__tests__/ipc.test.js +0 -314
  201. package/dist/daemon/__tests__/ipc.test.js.map +0 -1
  202. package/dist/daemon/__tests__/lifecycle.test.d.ts +0 -5
  203. package/dist/daemon/__tests__/lifecycle.test.d.ts.map +0 -1
  204. package/dist/daemon/__tests__/lifecycle.test.js +0 -301
  205. package/dist/daemon/__tests__/lifecycle.test.js.map +0 -1
  206. package/dist/daemon/__tests__/lock.test.d.ts +0 -5
  207. package/dist/daemon/__tests__/lock.test.d.ts.map +0 -1
  208. package/dist/daemon/__tests__/lock.test.js +0 -192
  209. package/dist/daemon/__tests__/lock.test.js.map +0 -1
  210. package/dist/daemon/__tests__/methods/graph.test.d.ts +0 -5
  211. package/dist/daemon/__tests__/methods/graph.test.d.ts.map +0 -1
  212. package/dist/daemon/__tests__/methods/graph.test.js +0 -309
  213. package/dist/daemon/__tests__/methods/graph.test.js.map +0 -1
  214. package/dist/daemon/__tests__/methods/provider.test.d.ts +0 -7
  215. package/dist/daemon/__tests__/methods/provider.test.d.ts.map +0 -1
  216. package/dist/daemon/__tests__/methods/provider.test.js +0 -181
  217. package/dist/daemon/__tests__/methods/provider.test.js.map +0 -1
  218. package/dist/daemon/__tests__/methods/tools.test.d.ts +0 -5
  219. package/dist/daemon/__tests__/methods/tools.test.d.ts.map +0 -1
  220. package/dist/daemon/__tests__/methods/tools.test.js +0 -587
  221. package/dist/daemon/__tests__/methods/tools.test.js.map +0 -1
  222. package/dist/daemon/__tests__/multi-location.test.d.ts +0 -8
  223. package/dist/daemon/__tests__/multi-location.test.d.ts.map +0 -1
  224. package/dist/daemon/__tests__/multi-location.test.js +0 -669
  225. package/dist/daemon/__tests__/multi-location.test.js.map +0 -1
  226. package/dist/daemon/__tests__/registry.test.d.ts +0 -5
  227. package/dist/daemon/__tests__/registry.test.d.ts.map +0 -1
  228. package/dist/daemon/__tests__/registry.test.js +0 -208
  229. package/dist/daemon/__tests__/registry.test.js.map +0 -1
  230. package/dist/daemon/__tests__/watcher.test.d.ts +0 -5
  231. package/dist/daemon/__tests__/watcher.test.d.ts.map +0 -1
  232. package/dist/daemon/__tests__/watcher.test.js +0 -234
  233. package/dist/daemon/__tests__/watcher.test.js.map +0 -1
  234. package/dist/daemon/methods/__tests__/graph.test.d.ts +0 -5
  235. package/dist/daemon/methods/__tests__/graph.test.d.ts.map +0 -1
  236. package/dist/daemon/methods/__tests__/graph.test.js +0 -274
  237. package/dist/daemon/methods/__tests__/graph.test.js.map +0 -1
  238. package/dist/daemon/methods/__tests__/provider.test.d.ts +0 -5
  239. package/dist/daemon/methods/__tests__/provider.test.d.ts.map +0 -1
  240. package/dist/daemon/methods/__tests__/provider.test.js +0 -184
  241. package/dist/daemon/methods/__tests__/provider.test.js.map +0 -1
  242. package/dist/daemon/methods/__tests__/tools.test.d.ts +0 -5
  243. package/dist/daemon/methods/__tests__/tools.test.d.ts.map +0 -1
  244. package/dist/daemon/methods/__tests__/tools.test.js +0 -295
  245. package/dist/daemon/methods/__tests__/tools.test.js.map +0 -1
  246. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts +0 -2
  247. package/dist/graph/__tests__/EdgeTypeRegistry.test.d.ts.map +0 -1
  248. package/dist/graph/__tests__/EdgeTypeRegistry.test.js +0 -212
  249. package/dist/graph/__tests__/EdgeTypeRegistry.test.js.map +0 -1
  250. package/dist/graph/__tests__/FederatedGraph.test.d.ts +0 -2
  251. package/dist/graph/__tests__/FederatedGraph.test.d.ts.map +0 -1
  252. package/dist/graph/__tests__/FederatedGraph.test.js +0 -661
  253. package/dist/graph/__tests__/FederatedGraph.test.js.map +0 -1
  254. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts +0 -2
  255. package/dist/graph/__tests__/GraphologyAdapter.test.d.ts.map +0 -1
  256. package/dist/graph/__tests__/GraphologyAdapter.test.js +0 -326
  257. package/dist/graph/__tests__/GraphologyAdapter.test.js.map +0 -1
  258. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts +0 -2
  259. package/dist/graph/__tests__/HydratingFederatedGraph.test.d.ts.map +0 -1
  260. package/dist/graph/__tests__/HydratingFederatedGraph.test.js +0 -587
  261. package/dist/graph/__tests__/HydratingFederatedGraph.test.js.map +0 -1
  262. package/dist/graph/__tests__/debounce.test.d.ts +0 -5
  263. package/dist/graph/__tests__/debounce.test.d.ts.map +0 -1
  264. package/dist/graph/__tests__/debounce.test.js +0 -195
  265. package/dist/graph/__tests__/debounce.test.js.map +0 -1
  266. package/dist/graph/__tests__/edge-cases.test.d.ts +0 -8
  267. package/dist/graph/__tests__/edge-cases.test.d.ts.map +0 -1
  268. package/dist/graph/__tests__/edge-cases.test.js +0 -472
  269. package/dist/graph/__tests__/edge-cases.test.js.map +0 -1
  270. package/dist/graph/__tests__/expansion.test.d.ts +0 -2
  271. package/dist/graph/__tests__/expansion.test.d.ts.map +0 -1
  272. package/dist/graph/__tests__/expansion.test.js +0 -105
  273. package/dist/graph/__tests__/expansion.test.js.map +0 -1
  274. package/dist/graph/__tests__/provider-store.test.d.ts +0 -5
  275. package/dist/graph/__tests__/provider-store.test.d.ts.map +0 -1
  276. package/dist/graph/__tests__/provider-store.test.js +0 -791
  277. package/dist/graph/__tests__/provider-store.test.js.map +0 -1
  278. package/dist/graph/__tests__/query.test.d.ts +0 -5
  279. package/dist/graph/__tests__/query.test.d.ts.map +0 -1
  280. package/dist/graph/__tests__/query.test.js +0 -774
  281. package/dist/graph/__tests__/query.test.js.map +0 -1
  282. package/dist/graph/__tests__/store.test.d.ts +0 -5
  283. package/dist/graph/__tests__/store.test.d.ts.map +0 -1
  284. package/dist/graph/__tests__/store.test.js +0 -489
  285. package/dist/graph/__tests__/store.test.js.map +0 -1
  286. package/dist/graph/__tests__/sync.test.d.ts +0 -5
  287. package/dist/graph/__tests__/sync.test.d.ts.map +0 -1
  288. package/dist/graph/__tests__/sync.test.js +0 -129
  289. package/dist/graph/__tests__/sync.test.js.map +0 -1
  290. package/dist/graph/__tests__/validation.test.d.ts +0 -2
  291. package/dist/graph/__tests__/validation.test.d.ts.map +0 -1
  292. package/dist/graph/__tests__/validation.test.js +0 -521
  293. package/dist/graph/__tests__/validation.test.js.map +0 -1
  294. package/dist/providers/__tests__/beads.test.d.ts +0 -5
  295. package/dist/providers/__tests__/beads.test.d.ts.map +0 -1
  296. package/dist/providers/__tests__/beads.test.js +0 -591
  297. package/dist/providers/__tests__/beads.test.js.map +0 -1
  298. package/dist/providers/__tests__/claude-tasks.test.d.ts +0 -5
  299. package/dist/providers/__tests__/claude-tasks.test.d.ts.map +0 -1
  300. package/dist/providers/__tests__/claude-tasks.test.js +0 -392
  301. package/dist/providers/__tests__/claude-tasks.test.js.map +0 -1
  302. package/dist/providers/__tests__/from-config.test.d.ts +0 -5
  303. package/dist/providers/__tests__/from-config.test.d.ts.map +0 -1
  304. package/dist/providers/__tests__/from-config.test.js +0 -152
  305. package/dist/providers/__tests__/from-config.test.js.map +0 -1
  306. package/dist/providers/__tests__/materialization.test.d.ts +0 -5
  307. package/dist/providers/__tests__/materialization.test.d.ts.map +0 -1
  308. package/dist/providers/__tests__/materialization.test.js +0 -407
  309. package/dist/providers/__tests__/materialization.test.js.map +0 -1
  310. package/dist/providers/__tests__/native.test.d.ts +0 -5
  311. package/dist/providers/__tests__/native.test.d.ts.map +0 -1
  312. package/dist/providers/__tests__/native.test.js +0 -566
  313. package/dist/providers/__tests__/native.test.js.map +0 -1
  314. package/dist/providers/__tests__/registry.test.d.ts +0 -5
  315. package/dist/providers/__tests__/registry.test.d.ts.map +0 -1
  316. package/dist/providers/__tests__/registry.test.js +0 -183
  317. package/dist/providers/__tests__/registry.test.js.map +0 -1
  318. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts +0 -2
  319. package/dist/providers/traits/__tests__/RelationshipQueryable.test.d.ts.map +0 -1
  320. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js +0 -169
  321. package/dist/providers/traits/__tests__/RelationshipQueryable.test.js.map +0 -1
  322. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts +0 -2
  323. package/dist/providers/traits/__tests__/TaskManageable.test.d.ts.map +0 -1
  324. package/dist/providers/traits/__tests__/TaskManageable.test.js +0 -172
  325. package/dist/providers/traits/__tests__/TaskManageable.test.js.map +0 -1
  326. package/dist/schema/__tests__/validation.test.d.ts +0 -2
  327. package/dist/schema/__tests__/validation.test.d.ts.map +0 -1
  328. package/dist/schema/__tests__/validation.test.js +0 -241
  329. package/dist/schema/__tests__/validation.test.js.map +0 -1
  330. package/dist/storage/__tests__/atomic-write.test.d.ts +0 -5
  331. package/dist/storage/__tests__/atomic-write.test.d.ts.map +0 -1
  332. package/dist/storage/__tests__/atomic-write.test.js +0 -170
  333. package/dist/storage/__tests__/atomic-write.test.js.map +0 -1
  334. package/dist/storage/__tests__/file-lock.test.d.ts +0 -2
  335. package/dist/storage/__tests__/file-lock.test.d.ts.map +0 -1
  336. package/dist/storage/__tests__/file-lock.test.js +0 -89
  337. package/dist/storage/__tests__/file-lock.test.js.map +0 -1
  338. package/dist/storage/__tests__/jsonl.test.d.ts +0 -2
  339. package/dist/storage/__tests__/jsonl.test.d.ts.map +0 -1
  340. package/dist/storage/__tests__/jsonl.test.js +0 -228
  341. package/dist/storage/__tests__/jsonl.test.js.map +0 -1
  342. package/dist/storage/__tests__/locked-writer.test.d.ts +0 -2
  343. package/dist/storage/__tests__/locked-writer.test.d.ts.map +0 -1
  344. package/dist/storage/__tests__/locked-writer.test.js +0 -109
  345. package/dist/storage/__tests__/locked-writer.test.js.map +0 -1
  346. package/dist/storage/__tests__/sqlite.test.d.ts +0 -2
  347. package/dist/storage/__tests__/sqlite.test.d.ts.map +0 -1
  348. package/dist/storage/__tests__/sqlite.test.js +0 -470
  349. package/dist/storage/__tests__/sqlite.test.js.map +0 -1
  350. package/dist/tools/__tests__/annotate.test.d.ts +0 -5
  351. package/dist/tools/__tests__/annotate.test.d.ts.map +0 -1
  352. package/dist/tools/__tests__/annotate.test.js +0 -314
  353. package/dist/tools/__tests__/annotate.test.js.map +0 -1
  354. package/dist/tools/__tests__/link.test.d.ts +0 -5
  355. package/dist/tools/__tests__/link.test.d.ts.map +0 -1
  356. package/dist/tools/__tests__/link.test.js +0 -245
  357. package/dist/tools/__tests__/link.test.js.map +0 -1
  358. package/dist/tools/__tests__/query.test.d.ts +0 -5
  359. package/dist/tools/__tests__/query.test.d.ts.map +0 -1
  360. package/dist/tools/__tests__/query.test.js +0 -288
  361. package/dist/tools/__tests__/query.test.js.map +0 -1
  362. package/dist/tools/__tests__/task.test.d.ts +0 -5
  363. package/dist/tools/__tests__/task.test.d.ts.map +0 -1
  364. package/dist/tools/__tests__/task.test.js +0 -178
  365. package/dist/tools/__tests__/task.test.js.map +0 -1
  366. package/dist/tracking/claude-task-reconstructor.d.ts +0 -41
  367. package/dist/tracking/claude-task-reconstructor.d.ts.map +0 -1
  368. package/dist/tracking/claude-task-reconstructor.js +0 -91
  369. package/dist/tracking/claude-task-reconstructor.js.map +0 -1
  370. package/dist/tracking/plan-mode-tracker.d.ts +0 -20
  371. package/dist/tracking/plan-mode-tracker.d.ts.map +0 -1
  372. package/dist/tracking/plan-mode-tracker.js +0 -35
  373. package/dist/tracking/plan-mode-tracker.js.map +0 -1
@@ -0,0 +1,123 @@
1
+ /**
2
+ * MAP Client Factory
3
+ *
4
+ * Creates a MAPTaskClient from a MAP server connection.
5
+ * Used by the daemon to wire the MAP provider and event bridge.
6
+ *
7
+ * The factory dynamically imports @multi-agent-protocol/sdk so that
8
+ * the dependency is optional — if the SDK is not installed, the factory
9
+ * returns null and the MAP provider is gracefully skipped.
10
+ */
11
+ // ============================================================================
12
+ // Factory
13
+ // ============================================================================
14
+ /**
15
+ * Create a MAP client by connecting to a MAP server.
16
+ *
17
+ * Dynamically imports the MAP SDK. Returns null if:
18
+ * - The SDK is not installed
19
+ * - The connection fails
20
+ *
21
+ * The returned client satisfies the MAPTaskClient interface and can be
22
+ * passed directly to createMAPProvider(). The send function can be passed
23
+ * to createMAPEventBridge().
24
+ *
25
+ * @param options - Connection options
26
+ * @returns MAPClientResult or null on failure
27
+ */
28
+ export async function createMAPClient(options) {
29
+ const { server, agentName = 'opentasks-daemon', scope = '', systemId = 'default', timeout = 30000, } = options;
30
+ try {
31
+ // Dynamic import — SDK is optional
32
+ const sdk = await import('@multi-agent-protocol/sdk');
33
+ const { AgentConnection } = sdk;
34
+ const connection = await AgentConnection.connect(server, {
35
+ name: agentName,
36
+ role: 'daemon',
37
+ scopes: scope ? [scope] : [],
38
+ capabilities: {
39
+ tasks: {
40
+ canCreate: true,
41
+ canAssign: true,
42
+ canUpdate: true,
43
+ canList: true,
44
+ },
45
+ },
46
+ metadata: {
47
+ systemId,
48
+ type: 'opentasks-daemon',
49
+ },
50
+ reconnection: {
51
+ enabled: true,
52
+ maxRetries: 10,
53
+ baseDelayMs: 1000,
54
+ maxDelayMs: 30000,
55
+ },
56
+ });
57
+ // Task event listeners for the Watchable trait
58
+ const eventCallbacks = [];
59
+ // Listen for incoming messages that contain task events
60
+ connection.onMessage((message) => {
61
+ const payload = (message.payload ?? {});
62
+ if (payload.type?.startsWith('task.')) {
63
+ const event = {
64
+ type: payload.type,
65
+ data: payload,
66
+ };
67
+ for (const cb of eventCallbacks) {
68
+ try {
69
+ cb(event);
70
+ }
71
+ catch {
72
+ // Don't let callback errors break the loop
73
+ }
74
+ }
75
+ }
76
+ });
77
+ const client = {
78
+ async createTask(params) {
79
+ return connection.createTask(params);
80
+ },
81
+ async assignTask(taskId, agentId) {
82
+ return connection.assignTask(taskId, agentId);
83
+ },
84
+ async updateTask(params) {
85
+ return connection.updateTask(params);
86
+ },
87
+ async listTasks(params) {
88
+ return connection.listTasks(params ?? {});
89
+ },
90
+ onTaskEvent(callback) {
91
+ eventCallbacks.push(callback);
92
+ return () => {
93
+ const idx = eventCallbacks.indexOf(callback);
94
+ if (idx >= 0)
95
+ eventCallbacks.splice(idx, 1);
96
+ };
97
+ },
98
+ };
99
+ const send = (eventType, data) => {
100
+ // Send as a message to the scope (observers see message_sent events)
101
+ // The data includes the event type for receivers to dispatch on
102
+ if (!scope)
103
+ return; // Cannot send without a target scope
104
+ connection.send({ scope }, { type: eventType, ...data }).catch(() => {
105
+ // Best effort — don't block on send failures
106
+ });
107
+ };
108
+ const disconnect = async () => {
109
+ try {
110
+ await connection.disconnect();
111
+ }
112
+ catch {
113
+ // Ignore disconnect errors
114
+ }
115
+ };
116
+ return { client, send, disconnect };
117
+ }
118
+ catch {
119
+ // SDK not installed or connection failed — graceful degradation
120
+ return null;
121
+ }
122
+ }
123
+ //# sourceMappingURL=map-client-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-client-factory.js","sourceRoot":"","sources":["../../src/providers/map-client-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * MAP Event Bridge
3
+ *
4
+ * Translates OpenTasks graph changes into MAP task events for observability.
5
+ * Standalone utility — can be used by the daemon (attached to graph store changes)
6
+ * or by individual agent processes (emit-your-own-actions pattern).
7
+ *
8
+ * The bridge is independent of the MAP provider. The provider handles inbound
9
+ * (MAP → OpenTasks); the bridge handles outbound (OpenTasks → MAP).
10
+ *
11
+ * Accepts either a send function or a MAP connection object (compatible with
12
+ * agent-inbox's MapConnection interface), so multiple systems can share one
13
+ * connection — e.g., agent-inbox handles messaging while this bridge handles
14
+ * task events, both over the same MAP connection.
15
+ *
16
+ * Usage patterns:
17
+ *
18
+ * 1. With a send function:
19
+ * ```
20
+ * const bridge = createMAPEventBridge({ send, agentId: 'agent-alice' });
21
+ * bridge.emitTaskCreated({ id: 'task-1', title: 'Do thing', status: 'open' });
22
+ * ```
23
+ *
24
+ * 2. With a shared MAP connection (e.g., from agent-inbox or MAP SDK):
25
+ * ```
26
+ * const bridge = createMAPEventBridge({
27
+ * connection: mapConnection,
28
+ * scope: 'swarm:my-team',
29
+ * agentId: 'agent-alice',
30
+ * });
31
+ * bridge.emitTaskStatus('task-1', 'open', 'in_progress');
32
+ * ```
33
+ *
34
+ * 3. Attached to daemon watch events via IPC:
35
+ * ```
36
+ * const bridge = createMAPEventBridge({ send, agentId: 'agent-bob' });
37
+ * daemonClient.on('watch.event', (event) => bridge.handleProviderChange('native', event));
38
+ * ```
39
+ */
40
+ import type { ProviderChangeEvent } from './traits/Watchable.js';
41
+ /**
42
+ * Function that sends a MAP event over a connection.
43
+ *
44
+ * This is the only dependency on the MAP transport layer.
45
+ * A ClientConnection's sendEvent, a BaseConnection's sendNotification,
46
+ * or any custom function that puts events on the wire.
47
+ */
48
+ export type MAPEventSender = (eventType: string, data: Record<string, unknown>) => void;
49
+ /**
50
+ * Minimal MAP connection interface for sharing a connection with other systems.
51
+ *
52
+ * Compatible with:
53
+ * - agent-inbox's MapConnection
54
+ * - MAP SDK's AgentConnection / ClientConnection
55
+ * - Any object with a send(to, payload, meta?) method
56
+ *
57
+ * The bridge borrows the connection — it does NOT own its lifecycle
58
+ * and will not disconnect it on stop().
59
+ */
60
+ export interface MAPConnection {
61
+ send(to: {
62
+ scope?: string;
63
+ agentId?: string;
64
+ } | string, payload: unknown, meta?: Record<string, unknown>): Promise<void>;
65
+ }
66
+ /**
67
+ * Minimal task info needed to emit MAP events.
68
+ * Matches the shape agents already have when they perform task operations.
69
+ */
70
+ export interface TaskInfo {
71
+ id: string;
72
+ title?: string;
73
+ status?: string;
74
+ description?: string;
75
+ assignee?: string | null;
76
+ meta?: Record<string, unknown>;
77
+ }
78
+ /**
79
+ * Configuration for creating a MAP event bridge.
80
+ *
81
+ * Provide either `send` (a raw function) or `connection` + `scope`
82
+ * (a shared MAP connection object). If both are provided, `send` takes precedence.
83
+ */
84
+ export interface MAPEventBridgeConfig {
85
+ /**
86
+ * Function to send MAP events over the wire.
87
+ * If provided, this is used directly. Mutually exclusive with `connection`.
88
+ */
89
+ send?: MAPEventSender;
90
+ /**
91
+ * A shared MAP connection object (e.g., from agent-inbox or MAP SDK).
92
+ * The bridge adapts connection.send() into the event sender.
93
+ * The bridge does NOT own the connection lifecycle.
94
+ */
95
+ connection?: MAPConnection;
96
+ /**
97
+ * MAP scope to send events to. Required when using `connection`.
98
+ * Ignored when using `send` directly.
99
+ */
100
+ scope?: string;
101
+ /**
102
+ * Origin identifier stamped on all emitted events.
103
+ * Used to prevent echo loops — receivers can filter events
104
+ * that originated from their own system.
105
+ */
106
+ agentId?: string;
107
+ /**
108
+ * Optional filter — return false to suppress an event.
109
+ * Called before sending. Useful for filtering by provider,
110
+ * node type, or any other criteria.
111
+ */
112
+ filter?: (eventType: string, data: Record<string, unknown>) => boolean;
113
+ }
114
+ /**
115
+ * MAP Event Bridge instance
116
+ */
117
+ export interface MAPEventBridge {
118
+ /** Emit a task.created event */
119
+ emitTaskCreated(task: TaskInfo): void;
120
+ /** Emit a task.status event */
121
+ emitTaskStatus(taskId: string, previous: string, current: string): void;
122
+ /** Emit a task.assigned event */
123
+ emitTaskAssigned(taskId: string, assignee: string): void;
124
+ /** Emit a task.completed event */
125
+ emitTaskCompleted(taskId: string, result?: unknown): void;
126
+ /**
127
+ * Handle a ProviderChangeEvent from the graph store.
128
+ * Translates it to the appropriate MAP event(s) and sends.
129
+ *
130
+ * @param providerName - Name of the provider that produced the change
131
+ * @param event - The provider change event
132
+ */
133
+ handleProviderChange(providerName: string, event: ProviderChangeEvent): void;
134
+ /** Stop the bridge and prevent further events from being sent */
135
+ stop(): void;
136
+ /** Whether the bridge is active */
137
+ readonly active: boolean;
138
+ }
139
+ /**
140
+ * Create a MAP event bridge
141
+ *
142
+ * @param config - Bridge configuration (provide `send` or `connection` + `scope`)
143
+ * @returns A MAPEventBridge instance
144
+ */
145
+ export declare function createMAPEventBridge(config: MAPEventBridgeConfig): MAPEventBridge;
146
+ //# sourceMappingURL=map-event-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-event-bridge.d.ts","sourceRoot":"","sources":["../../src/providers/map-event-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAA2B,MAAM,uBAAuB,CAAC;AAM1F;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAExF;;;;;;;;;;GAUG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CACF,EAAE,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,EACjD,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;CACxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAG7B,gCAAgC;IAChC,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEtC,+BAA+B;IAC/B,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAExE,iCAAiC;IACjC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzD,kCAAkC;IAClC,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAI1D;;;;;;OAMG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAE7E,iEAAiE;IACjE,IAAI,IAAI,IAAI,CAAC;IAEb,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAyBD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAoKjF"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * MAP Event Bridge
3
+ *
4
+ * Translates OpenTasks graph changes into MAP task events for observability.
5
+ * Standalone utility — can be used by the daemon (attached to graph store changes)
6
+ * or by individual agent processes (emit-your-own-actions pattern).
7
+ *
8
+ * The bridge is independent of the MAP provider. The provider handles inbound
9
+ * (MAP → OpenTasks); the bridge handles outbound (OpenTasks → MAP).
10
+ *
11
+ * Accepts either a send function or a MAP connection object (compatible with
12
+ * agent-inbox's MapConnection interface), so multiple systems can share one
13
+ * connection — e.g., agent-inbox handles messaging while this bridge handles
14
+ * task events, both over the same MAP connection.
15
+ *
16
+ * Usage patterns:
17
+ *
18
+ * 1. With a send function:
19
+ * ```
20
+ * const bridge = createMAPEventBridge({ send, agentId: 'agent-alice' });
21
+ * bridge.emitTaskCreated({ id: 'task-1', title: 'Do thing', status: 'open' });
22
+ * ```
23
+ *
24
+ * 2. With a shared MAP connection (e.g., from agent-inbox or MAP SDK):
25
+ * ```
26
+ * const bridge = createMAPEventBridge({
27
+ * connection: mapConnection,
28
+ * scope: 'swarm:my-team',
29
+ * agentId: 'agent-alice',
30
+ * });
31
+ * bridge.emitTaskStatus('task-1', 'open', 'in_progress');
32
+ * ```
33
+ *
34
+ * 3. Attached to daemon watch events via IPC:
35
+ * ```
36
+ * const bridge = createMAPEventBridge({ send, agentId: 'agent-bob' });
37
+ * daemonClient.on('watch.event', (event) => bridge.handleProviderChange('native', event));
38
+ * ```
39
+ */
40
+ // ============================================================================
41
+ // Status Mapping
42
+ // ============================================================================
43
+ /**
44
+ * Map OpenTasks status to MAP task status for outbound events
45
+ */
46
+ function toMAPStatus(status) {
47
+ switch (status?.toLowerCase()) {
48
+ case 'open': return 'open';
49
+ case 'in_progress': return 'in_progress';
50
+ case 'blocked': return 'blocked';
51
+ case 'closed': return 'completed';
52
+ case 'completed': return 'completed';
53
+ case 'failed': return 'failed';
54
+ default: return 'open';
55
+ }
56
+ }
57
+ // ============================================================================
58
+ // Factory
59
+ // ============================================================================
60
+ /**
61
+ * Create a MAP event bridge
62
+ *
63
+ * @param config - Bridge configuration (provide `send` or `connection` + `scope`)
64
+ * @returns A MAPEventBridge instance
65
+ */
66
+ export function createMAPEventBridge(config) {
67
+ const { agentId, filter } = config;
68
+ // Resolve the send function from either direct `send` or `connection` + `scope`
69
+ let send;
70
+ if (config.send) {
71
+ send = config.send;
72
+ }
73
+ else if (config.connection) {
74
+ const connection = config.connection;
75
+ const scope = config.scope || '';
76
+ const target = scope ? { scope } : {};
77
+ send = (eventType, data) => {
78
+ connection.send(target, { type: eventType, ...data }).catch(() => {
79
+ // Best effort — don't block on send failures
80
+ });
81
+ };
82
+ }
83
+ else {
84
+ throw new Error('MAPEventBridgeConfig requires either `send` or `connection`');
85
+ }
86
+ let active = true;
87
+ function emit(eventType, data) {
88
+ if (!active)
89
+ return;
90
+ // Stamp origin metadata
91
+ if (agentId) {
92
+ data._origin = agentId;
93
+ }
94
+ // Apply filter
95
+ if (filter && !filter(eventType, data))
96
+ return;
97
+ send(eventType, data);
98
+ }
99
+ const bridge = {
100
+ // ==================================================================
101
+ // Direct Emit Methods
102
+ // ==================================================================
103
+ emitTaskCreated(task) {
104
+ emit('task.created', {
105
+ task: {
106
+ id: task.id,
107
+ ...(task.title !== undefined && { title: task.title }),
108
+ ...(task.status !== undefined && { status: toMAPStatus(task.status) }),
109
+ ...(task.description !== undefined && { description: task.description }),
110
+ ...(task.assignee !== undefined && { assignee: task.assignee }),
111
+ ...(task.meta !== undefined && { meta: task.meta }),
112
+ },
113
+ });
114
+ },
115
+ emitTaskStatus(taskId, previous, current) {
116
+ emit('task.status', {
117
+ taskId,
118
+ previous: toMAPStatus(previous),
119
+ current: toMAPStatus(current),
120
+ });
121
+ // Also emit task.completed if the new status is a terminal state
122
+ if (current === 'completed' || current === 'closed') {
123
+ emit('task.completed', { taskId });
124
+ }
125
+ },
126
+ emitTaskAssigned(taskId, assignee) {
127
+ emit('task.assigned', {
128
+ taskId,
129
+ agentId: assignee,
130
+ });
131
+ },
132
+ emitTaskCompleted(taskId, result) {
133
+ emit('task.completed', {
134
+ taskId,
135
+ ...(result !== undefined && { result }),
136
+ });
137
+ },
138
+ // ==================================================================
139
+ // Provider Change Handler
140
+ // ==================================================================
141
+ handleProviderChange(providerName, event) {
142
+ if (!active)
143
+ return;
144
+ // Only handle node events (not edge events)
145
+ if (event.kind !== 'node')
146
+ return;
147
+ // Skip changes from the MAP provider to prevent echo loops
148
+ if (providerName === 'map')
149
+ return;
150
+ const nodeEvent = event.event;
151
+ // Only bridge task-type nodes
152
+ const nodeType = nodeEvent.node?.type;
153
+ if (nodeType && nodeType !== 'task')
154
+ return;
155
+ switch (nodeEvent.type) {
156
+ case 'created': {
157
+ if (nodeEvent.node) {
158
+ bridge.emitTaskCreated({
159
+ id: nodeEvent.nodeId,
160
+ title: nodeEvent.node.title,
161
+ status: nodeEvent.node.status,
162
+ description: nodeEvent.node.content,
163
+ assignee: nodeEvent.node.rawData?.assignee,
164
+ meta: nodeEvent.node.rawData,
165
+ });
166
+ }
167
+ break;
168
+ }
169
+ case 'updated': {
170
+ const changedFields = nodeEvent.changedFields;
171
+ const previousValues = nodeEvent.previousValues;
172
+ // Status change
173
+ if (changedFields?.includes('status') && previousValues?.status) {
174
+ const previous = String(previousValues.status);
175
+ const current = nodeEvent.node?.status ?? 'open';
176
+ bridge.emitTaskStatus(nodeEvent.nodeId, previous, current);
177
+ }
178
+ // Assignment change
179
+ if (changedFields?.includes('assignee') && nodeEvent.node?.rawData?.assignee) {
180
+ bridge.emitTaskAssigned(nodeEvent.nodeId, String(nodeEvent.node.rawData.assignee));
181
+ }
182
+ // If no specific fields reported, emit a generic status event
183
+ // based on current node state (best effort)
184
+ if (!changedFields && nodeEvent.node?.status) {
185
+ const previous = previousValues?.status
186
+ ? String(previousValues.status)
187
+ : 'open';
188
+ bridge.emitTaskStatus(nodeEvent.nodeId, previous, nodeEvent.node.status);
189
+ }
190
+ break;
191
+ }
192
+ case 'deleted': {
193
+ // MAP has no delete — emit as status change to 'failed'
194
+ bridge.emitTaskStatus(nodeEvent.nodeId, 'open', 'failed');
195
+ break;
196
+ }
197
+ }
198
+ },
199
+ stop() {
200
+ active = false;
201
+ },
202
+ get active() {
203
+ return active;
204
+ },
205
+ };
206
+ return bridge;
207
+ }
208
+ //# sourceMappingURL=map-event-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-event-bridge.js","sourceRoot":"","sources":["../../src/providers/map-event-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * MAP (Multi-Agent Protocol) Provider
3
+ *
4
+ * Provider that bridges MAP task operations with OpenTasks.
5
+ * Handles map:// URI scheme for tasks managed via MAP.
6
+ *
7
+ * Supports three scenarios:
8
+ * 1. Same OpenTasks repo — MAP used for real-time coordination, native provider resolves tasks
9
+ * 2. Cross-system — tasks on a remote system accessed via MAP task methods
10
+ * 3. Mixed — local tasks with MAP-based assignment to external agents
11
+ *
12
+ * The provider depends on a MAPTaskClient interface, which can be satisfied by:
13
+ * - A MAP SDK ClientConnection (hub topology)
14
+ * - A MAP SDK BaseConnection wrapper (peer topology)
15
+ * - A local adapter (same-repo coordination, no network)
16
+ */
17
+ import type { Provider } from './types.js';
18
+ import type { TaskManageable } from './traits/TaskManageable.js';
19
+ import type { Watchable } from './traits/Watchable.js';
20
+ /**
21
+ * MAP task status values (matches MAP SDK MAPTaskStatus)
22
+ */
23
+ export type MAPTaskStatus = 'open' | 'in_progress' | 'blocked' | 'completed' | 'failed';
24
+ /**
25
+ * MAP task structure (matches MAP SDK MAPTask)
26
+ */
27
+ export interface MAPTask {
28
+ id: string;
29
+ assignee?: string | null;
30
+ title?: string;
31
+ status?: MAPTaskStatus;
32
+ description?: string;
33
+ meta?: Record<string, unknown>;
34
+ }
35
+ /**
36
+ * MAP task event (for Watchable support)
37
+ */
38
+ export interface MAPTaskEvent {
39
+ type: 'task.created' | 'task.assigned' | 'task.status' | 'task.completed';
40
+ data: Record<string, unknown>;
41
+ }
42
+ /**
43
+ * Interface for anything that can perform MAP task operations.
44
+ *
45
+ * This is the abstraction boundary between OpenTasks and MAP.
46
+ * Implementations include:
47
+ * - MAP SDK ClientConnection (satisfies this naturally)
48
+ * - A future PeerConnection
49
+ * - A local GraphStore adapter (for same-repo scenario)
50
+ *
51
+ * The interface uses the same parameter/response shapes as the MAP SDK
52
+ * so that ClientConnection can be passed directly without an adapter.
53
+ */
54
+ export interface MAPTaskClient {
55
+ createTask(params: {
56
+ task: Omit<MAPTask, 'id'> & {
57
+ id?: string;
58
+ };
59
+ }): Promise<{
60
+ task: MAPTask;
61
+ }>;
62
+ assignTask(taskId: string, agentId: string): Promise<{
63
+ task: MAPTask;
64
+ }>;
65
+ updateTask(params: {
66
+ taskId: string;
67
+ status?: MAPTaskStatus;
68
+ title?: string;
69
+ description?: string;
70
+ assignee?: string | null;
71
+ meta?: Record<string, unknown>;
72
+ }): Promise<{
73
+ task: MAPTask;
74
+ }>;
75
+ listTasks(params?: {
76
+ filter?: {
77
+ assignee?: string;
78
+ status?: MAPTaskStatus | MAPTaskStatus[];
79
+ };
80
+ limit?: number;
81
+ cursor?: string;
82
+ }): Promise<{
83
+ tasks: MAPTask[];
84
+ hasMore: boolean;
85
+ nextCursor?: string;
86
+ }>;
87
+ /**
88
+ * Subscribe to task events. Optional — enables the Watchable trait.
89
+ * Returns an unsubscribe function.
90
+ */
91
+ onTaskEvent?(callback: (event: MAPTaskEvent) => void): () => void;
92
+ }
93
+ /**
94
+ * Configuration for MAP provider
95
+ */
96
+ export interface MAPProviderConfig {
97
+ /** The MAP task client to use for operations */
98
+ client: MAPTaskClient;
99
+ /**
100
+ * System identifier for this MAP connection.
101
+ * Used in URIs: map://{systemId}/{taskId}
102
+ * Defaults to 'default'.
103
+ */
104
+ systemId?: string;
105
+ /** Request timeout in ms */
106
+ timeout?: number;
107
+ }
108
+ /**
109
+ * Create a MAP provider
110
+ *
111
+ * @param config - Provider configuration including the MAPTaskClient
112
+ * @returns A Provider that implements TaskManageable and optionally Watchable
113
+ */
114
+ export declare function createMAPProvider(config: MAPProviderConfig): Provider & TaskManageable & Partial<Watchable>;
115
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/providers/map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,QAAQ,EAST,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,cAAc,EAAkD,MAAM,4BAA4B,CAAC;AACjH,OAAO,KAAK,EAAE,SAAS,EAAyC,MAAM,uBAAuB,CAAC;AAM9F;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAC1E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7C,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAE/B,UAAU,CACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAE9B,UAAU,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAE/B,SAAS,CAAC,MAAM,CAAC,EAAE;QACjB,MAAM,CAAC,EAAE;YACP,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,MAAM,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;SAC1C,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QACV,KAAK,EAAE,OAAO,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH;;;OAGG;IACH,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnE;AAMD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,MAAM,EAAE,aAAa,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAoFD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,iBAAiB,GACxB,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAsXhD"}