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
@@ -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"}