@moltzap/client 2026.1001.2 → 2026.1004.0

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 (486) hide show
  1. package/README.md +11 -6
  2. package/bin/moltzapd +2 -2
  3. package/dist/{harness-mcp-contract.d.ts → delivery/history-export.d.ts} +94 -136
  4. package/dist/delivery/history-export.d.ts.map +1 -0
  5. package/dist/{daemon/runtime → delivery}/history-export.js +36 -3
  6. package/dist/delivery/history-export.js.map +1 -0
  7. package/dist/delivery/host-delivery.d.ts +51 -0
  8. package/dist/delivery/host-delivery.d.ts.map +1 -0
  9. package/dist/delivery/host-delivery.js +109 -0
  10. package/dist/delivery/host-delivery.js.map +1 -0
  11. package/dist/delivery/inbox.d.ts +141 -0
  12. package/dist/delivery/inbox.d.ts.map +1 -0
  13. package/dist/delivery/inbox.js +129 -0
  14. package/dist/delivery/inbox.js.map +1 -0
  15. package/dist/delivery/index.d.ts +4 -0
  16. package/dist/delivery/index.d.ts.map +1 -0
  17. package/dist/delivery/index.js +4 -0
  18. package/dist/delivery/index.js.map +1 -0
  19. package/dist/delivery/operations.d.ts +789 -0
  20. package/dist/delivery/operations.d.ts.map +1 -0
  21. package/dist/delivery/operations.js +162 -0
  22. package/dist/delivery/operations.js.map +1 -0
  23. package/dist/delivery/pass.d.ts +91 -0
  24. package/dist/delivery/pass.d.ts.map +1 -0
  25. package/dist/{daemon/runtime/pending-delivery.js → delivery/pass.js} +61 -34
  26. package/dist/delivery/pass.js.map +1 -0
  27. package/dist/delivery/send-invocations.d.ts +106 -0
  28. package/dist/delivery/send-invocations.d.ts.map +1 -0
  29. package/dist/delivery/send-invocations.js +109 -0
  30. package/dist/delivery/send-invocations.js.map +1 -0
  31. package/dist/endpoint/harness-endpoint/capability.d.ts +39 -0
  32. package/dist/endpoint/harness-endpoint/capability.d.ts.map +1 -0
  33. package/dist/endpoint/harness-endpoint/capability.js +9 -0
  34. package/dist/endpoint/harness-endpoint/capability.js.map +1 -0
  35. package/dist/endpoint/harness-endpoint/events.d.ts +12 -0
  36. package/dist/endpoint/harness-endpoint/events.d.ts.map +1 -0
  37. package/dist/endpoint/harness-endpoint/events.js +199 -0
  38. package/dist/endpoint/harness-endpoint/events.js.map +1 -0
  39. package/dist/{client-runtime.d.ts → endpoint/harness-endpoint/index.d.ts} +4 -2
  40. package/dist/endpoint/harness-endpoint/index.d.ts.map +1 -0
  41. package/dist/{client-runtime.js → endpoint/harness-endpoint/index.js} +115 -115
  42. package/dist/endpoint/harness-endpoint/index.js.map +1 -0
  43. package/dist/endpoint/implementation.d.ts +4 -0
  44. package/dist/endpoint/implementation.d.ts.map +1 -0
  45. package/dist/endpoint/implementation.js +5 -0
  46. package/dist/endpoint/implementation.js.map +1 -0
  47. package/dist/endpoint/mcp/auth.d.ts +31 -0
  48. package/dist/endpoint/mcp/auth.d.ts.map +1 -0
  49. package/dist/endpoint/mcp/auth.js +42 -0
  50. package/dist/endpoint/mcp/auth.js.map +1 -0
  51. package/dist/endpoint/mcp/event-schemas.d.ts +151 -0
  52. package/dist/endpoint/mcp/event-schemas.d.ts.map +1 -0
  53. package/dist/endpoint/mcp/event-schemas.js +72 -0
  54. package/dist/endpoint/mcp/event-schemas.js.map +1 -0
  55. package/dist/endpoint/mcp/event-signing.d.ts +62 -0
  56. package/dist/endpoint/mcp/event-signing.d.ts.map +1 -0
  57. package/dist/endpoint/mcp/event-signing.js +185 -0
  58. package/dist/endpoint/mcp/event-signing.js.map +1 -0
  59. package/dist/endpoint/mcp/events.d.ts +45 -0
  60. package/dist/endpoint/mcp/events.d.ts.map +1 -0
  61. package/dist/endpoint/mcp/events.js +296 -0
  62. package/dist/endpoint/mcp/events.js.map +1 -0
  63. package/dist/{harness-mcp-http.d.ts → endpoint/mcp/http.d.ts} +1 -1
  64. package/dist/endpoint/mcp/http.d.ts.map +1 -0
  65. package/dist/{harness-mcp-http.js → endpoint/mcp/http.js} +1 -1
  66. package/dist/endpoint/mcp/http.js.map +1 -0
  67. package/dist/endpoint/mcp/index.d.ts +10 -0
  68. package/dist/endpoint/mcp/index.d.ts.map +1 -0
  69. package/dist/endpoint/mcp/index.js +8 -0
  70. package/dist/endpoint/mcp/index.js.map +1 -0
  71. package/dist/{management-runtime.d.ts → endpoint/mcp/owner-tools.d.ts} +7 -7
  72. package/dist/endpoint/mcp/owner-tools.d.ts.map +1 -0
  73. package/dist/{management-runtime.js → endpoint/mcp/owner-tools.js} +3 -4
  74. package/dist/endpoint/mcp/owner-tools.js.map +1 -0
  75. package/dist/endpoint/mcp/schemas.d.ts +60 -0
  76. package/dist/endpoint/mcp/schemas.d.ts.map +1 -0
  77. package/dist/endpoint/mcp/schemas.js +116 -0
  78. package/dist/endpoint/mcp/schemas.js.map +1 -0
  79. package/dist/{harness-mcp-wire.d.ts → endpoint/mcp/tools.d.ts} +17 -14
  80. package/dist/endpoint/mcp/tools.d.ts.map +1 -0
  81. package/dist/{harness-mcp-wire.js → endpoint/mcp/tools.js} +229 -110
  82. package/dist/endpoint/mcp/tools.js.map +1 -0
  83. package/dist/endpoint/mcp/webhook.d.ts +15 -0
  84. package/dist/endpoint/mcp/webhook.d.ts.map +1 -0
  85. package/dist/endpoint/mcp/webhook.js +359 -0
  86. package/dist/endpoint/mcp/webhook.js.map +1 -0
  87. package/dist/identity/credentials.d.ts +46 -0
  88. package/dist/identity/credentials.d.ts.map +1 -0
  89. package/dist/identity/credentials.js +55 -0
  90. package/dist/identity/credentials.js.map +1 -0
  91. package/dist/identity/index.d.ts +4 -0
  92. package/dist/identity/index.d.ts.map +1 -0
  93. package/dist/identity/index.js +4 -0
  94. package/dist/identity/index.js.map +1 -0
  95. package/dist/index.d.ts +19 -2
  96. package/dist/index.d.ts.map +1 -1
  97. package/dist/index.js +21 -3
  98. package/dist/index.js.map +1 -1
  99. package/dist/{contract.types-check.d.ts → index.types-check.d.ts} +21 -18
  100. package/dist/index.types-check.d.ts.map +1 -0
  101. package/dist/{contract.types-check.js → index.types-check.js} +6 -3
  102. package/dist/index.types-check.js.map +1 -0
  103. package/dist/{daemon/runtime → service}/activation.d.ts +9 -12
  104. package/dist/service/activation.d.ts.map +1 -0
  105. package/dist/{daemon/runtime → service}/activation.js +3 -3
  106. package/dist/service/activation.js.map +1 -0
  107. package/dist/{daemon → service}/configuration.d.ts +8 -7
  108. package/dist/service/configuration.d.ts.map +1 -0
  109. package/dist/{daemon → service}/configuration.js +30 -28
  110. package/dist/service/configuration.js.map +1 -0
  111. package/dist/{daemon/runtime → service}/controller.d.ts +8 -6
  112. package/dist/service/controller.d.ts.map +1 -0
  113. package/dist/service/controller.js +106 -0
  114. package/dist/service/controller.js.map +1 -0
  115. package/dist/{server.d.ts → service/index.d.ts} +7 -4
  116. package/dist/service/index.d.ts.map +1 -0
  117. package/dist/{server.js → service/index.js} +17 -15
  118. package/dist/service/index.js.map +1 -0
  119. package/dist/{server.types-check.d.ts → service/index.types-check.d.ts} +7 -7
  120. package/dist/service/index.types-check.d.ts.map +1 -0
  121. package/dist/{server.types-check.js → service/index.types-check.js} +1 -1
  122. package/dist/service/index.types-check.js.map +1 -0
  123. package/dist/{daemon/runtime/index.d.ts → service/lifecycle.d.ts} +3 -3
  124. package/dist/service/lifecycle.d.ts.map +1 -0
  125. package/dist/{daemon/runtime/index.js → service/lifecycle.js} +28 -25
  126. package/dist/service/lifecycle.js.map +1 -0
  127. package/dist/{daemon → service}/management.d.ts +2 -2
  128. package/dist/service/management.d.ts.map +1 -0
  129. package/dist/{daemon → service}/management.js +2 -13
  130. package/dist/service/management.js.map +1 -0
  131. package/dist/{daemon → service}/registration.d.ts +1 -1
  132. package/dist/service/registration.d.ts.map +1 -0
  133. package/dist/{daemon → service}/registration.js +1 -2
  134. package/dist/service/registration.js.map +1 -0
  135. package/dist/{daemon/runtime/protocol.d.ts → service/supervision.d.ts} +16 -24
  136. package/dist/service/supervision.d.ts.map +1 -0
  137. package/dist/{daemon/runtime/protocol.js → service/supervision.js} +33 -36
  138. package/dist/service/supervision.js.map +1 -0
  139. package/dist/store/anchors.d.ts.map +1 -0
  140. package/dist/store/anchors.js.map +1 -0
  141. package/dist/store/database/index.d.ts.map +1 -0
  142. package/dist/store/database/index.js.map +1 -0
  143. package/dist/store/database/schema.d.ts.map +1 -0
  144. package/dist/{endpoint/store → store}/database/schema.js +42 -6
  145. package/dist/store/database/schema.js.map +1 -0
  146. package/dist/store/database/values.d.ts.map +1 -0
  147. package/dist/store/database/values.js.map +1 -0
  148. package/dist/{endpoint/store → store}/deliveries.d.ts +8 -0
  149. package/dist/store/deliveries.d.ts.map +1 -0
  150. package/dist/{endpoint/store → store}/deliveries.js +16 -0
  151. package/dist/store/deliveries.js.map +1 -0
  152. package/dist/store/dissemination.d.ts.map +1 -0
  153. package/dist/store/dissemination.js.map +1 -0
  154. package/dist/store/inbox.d.ts +86 -0
  155. package/dist/store/inbox.d.ts.map +1 -0
  156. package/dist/store/inbox.js +269 -0
  157. package/dist/store/inbox.js.map +1 -0
  158. package/dist/store/index.d.ts +12 -0
  159. package/dist/store/index.d.ts.map +1 -0
  160. package/dist/store/index.js +8 -0
  161. package/dist/store/index.js.map +1 -0
  162. package/dist/store/outbound.d.ts.map +1 -0
  163. package/dist/store/outbound.js.map +1 -0
  164. package/dist/{endpoint/store/management.d.ts → store/reads.d.ts} +1 -1
  165. package/dist/store/reads.d.ts.map +1 -0
  166. package/dist/{endpoint/store/management.js → store/reads.js} +1 -1
  167. package/dist/store/reads.js.map +1 -0
  168. package/dist/store/records.d.ts.map +1 -0
  169. package/dist/store/records.js.map +1 -0
  170. package/dist/store/rows/index.d.ts.map +1 -0
  171. package/dist/store/rows/index.js.map +1 -0
  172. package/dist/store/runtime-codec.d.ts +17 -0
  173. package/dist/store/runtime-codec.d.ts.map +1 -0
  174. package/dist/store/runtime-codec.js +32 -0
  175. package/dist/store/runtime-codec.js.map +1 -0
  176. package/dist/{endpoint/store/index.d.ts → store/store.d.ts} +2 -2
  177. package/dist/store/store.d.ts.map +1 -0
  178. package/dist/{endpoint/store/index.js → store/store.js} +33 -4
  179. package/dist/store/store.js.map +1 -0
  180. package/dist/{endpoint/store → store}/types.d.ts +41 -0
  181. package/dist/store/types.d.ts.map +1 -0
  182. package/dist/store/types.js.map +1 -0
  183. package/dist/transport/collectives/answer-check.d.ts +22 -0
  184. package/dist/transport/collectives/answer-check.d.ts.map +1 -0
  185. package/dist/transport/collectives/answer-check.js +166 -0
  186. package/dist/transport/collectives/answer-check.js.map +1 -0
  187. package/dist/transport/collectives/answer-formats.d.ts +21 -0
  188. package/dist/transport/collectives/answer-formats.d.ts.map +1 -0
  189. package/dist/transport/collectives/answer-formats.js +127 -0
  190. package/dist/transport/collectives/answer-formats.js.map +1 -0
  191. package/dist/transport/collectives/failures.d.ts +34 -0
  192. package/dist/transport/collectives/failures.d.ts.map +1 -0
  193. package/dist/transport/collectives/failures.js +40 -0
  194. package/dist/transport/collectives/failures.js.map +1 -0
  195. package/dist/transport/collectives/form-grammar.d.ts +175 -0
  196. package/dist/transport/collectives/form-grammar.d.ts.map +1 -0
  197. package/dist/transport/collectives/form-grammar.js +226 -0
  198. package/dist/transport/collectives/form-grammar.js.map +1 -0
  199. package/dist/transport/collectives/forms.d.ts +224 -0
  200. package/dist/transport/collectives/forms.d.ts.map +1 -0
  201. package/dist/transport/collectives/forms.js +183 -0
  202. package/dist/transport/collectives/forms.js.map +1 -0
  203. package/dist/transport/collectives/inbound.d.ts +130 -0
  204. package/dist/transport/collectives/inbound.d.ts.map +1 -0
  205. package/dist/transport/collectives/inbound.js +80 -0
  206. package/dist/transport/collectives/inbound.js.map +1 -0
  207. package/dist/transport/collectives/index.d.ts +10 -0
  208. package/dist/transport/collectives/index.d.ts.map +1 -0
  209. package/dist/transport/collectives/index.js +8 -0
  210. package/dist/transport/collectives/index.js.map +1 -0
  211. package/dist/transport/collectives/message-text.d.ts +52 -0
  212. package/dist/transport/collectives/message-text.d.ts.map +1 -0
  213. package/dist/transport/collectives/message-text.js +118 -0
  214. package/dist/transport/collectives/message-text.js.map +1 -0
  215. package/dist/{endpoint/collective → transport/collectives}/operation.d.ts +30 -21
  216. package/dist/transport/collectives/operation.d.ts.map +1 -0
  217. package/dist/{endpoint/collective → transport/collectives}/operation.js +135 -143
  218. package/dist/transport/collectives/operation.js.map +1 -0
  219. package/dist/transport/collectives/received-request.d.ts +41 -0
  220. package/dist/transport/collectives/received-request.d.ts.map +1 -0
  221. package/dist/transport/collectives/received-request.js +56 -0
  222. package/dist/transport/collectives/received-request.js.map +1 -0
  223. package/dist/transport/collectives/request-sends.d.ts +42 -0
  224. package/dist/transport/collectives/request-sends.d.ts.map +1 -0
  225. package/dist/transport/collectives/request-sends.js +46 -0
  226. package/dist/transport/collectives/request-sends.js.map +1 -0
  227. package/dist/{endpoint/collective → transport/collectives}/shared-answers.d.ts +3 -2
  228. package/dist/transport/collectives/shared-answers.d.ts.map +1 -0
  229. package/dist/transport/collectives/shared-answers.js.map +1 -0
  230. package/dist/{endpoint/collective → transport/collectives}/validation.d.ts +8 -10
  231. package/dist/transport/collectives/validation.d.ts.map +1 -0
  232. package/dist/{endpoint/collective → transport/collectives}/validation.js +10 -21
  233. package/dist/transport/collectives/validation.js.map +1 -0
  234. package/dist/{endpoint/collective → transport/collectives}/wire.d.ts +18 -13
  235. package/dist/transport/collectives/wire.d.ts.map +1 -0
  236. package/dist/{endpoint/collective → transport/collectives}/wire.js +19 -38
  237. package/dist/transport/collectives/wire.js.map +1 -0
  238. package/dist/{endpoint/addressing/index.d.ts → transport/messaging/address.d.ts} +38 -5
  239. package/dist/transport/messaging/address.d.ts.map +1 -0
  240. package/dist/{endpoint/addressing/index.js → transport/messaging/address.js} +100 -21
  241. package/dist/transport/messaging/address.js.map +1 -0
  242. package/dist/{endpoint/protocol/index.d.ts → transport/messaging/certification.d.ts} +4 -4
  243. package/dist/transport/messaging/certification.d.ts.map +1 -0
  244. package/dist/{endpoint/protocol/index.js → transport/messaging/certification.js} +7 -5
  245. package/dist/transport/messaging/certification.js.map +1 -0
  246. package/dist/{endpoint/engine-dissemination.d.ts → transport/messaging/dissemination.d.ts} +3 -3
  247. package/dist/transport/messaging/dissemination.d.ts.map +1 -0
  248. package/dist/{endpoint/engine-dissemination.js → transport/messaging/dissemination.js} +5 -5
  249. package/dist/transport/messaging/dissemination.js.map +1 -0
  250. package/dist/{endpoint/engine-durability.d.ts → transport/messaging/durability.d.ts} +4 -4
  251. package/dist/{endpoint/engine-durability.d.ts.map → transport/messaging/durability.d.ts.map} +1 -1
  252. package/dist/{endpoint/engine-durability.js → transport/messaging/durability.js} +4 -13
  253. package/dist/transport/messaging/durability.js.map +1 -0
  254. package/dist/transport/messaging/errors.d.ts +50 -0
  255. package/dist/transport/messaging/errors.d.ts.map +1 -0
  256. package/dist/transport/messaging/errors.js +64 -0
  257. package/dist/transport/messaging/errors.js.map +1 -0
  258. package/dist/{endpoint/protocol → transport/messaging}/evidence.d.ts +3 -3
  259. package/dist/{endpoint/protocol → transport/messaging}/evidence.d.ts.map +1 -1
  260. package/dist/{endpoint/protocol → transport/messaging}/evidence.js +1 -1
  261. package/dist/transport/messaging/evidence.js.map +1 -0
  262. package/dist/{endpoint/engine.d.ts → transport/messaging/index.d.ts} +4 -4
  263. package/dist/transport/messaging/index.d.ts.map +1 -0
  264. package/dist/{endpoint/engine.js → transport/messaging/index.js} +14 -9
  265. package/dist/transport/messaging/index.js.map +1 -0
  266. package/dist/transport/messaging/message.d.ts +112 -0
  267. package/dist/transport/messaging/message.d.ts.map +1 -0
  268. package/dist/transport/messaging/message.js +39 -0
  269. package/dist/transport/messaging/message.js.map +1 -0
  270. package/dist/{endpoint → transport/messaging}/recovery/barrier.d.ts +1 -1
  271. package/dist/transport/messaging/recovery/barrier.d.ts.map +1 -0
  272. package/dist/transport/messaging/recovery/barrier.js.map +1 -0
  273. package/dist/{endpoint/recovery/store-evidence.d.ts → transport/messaging/recovery/evidence.d.ts} +5 -5
  274. package/dist/transport/messaging/recovery/evidence.d.ts.map +1 -0
  275. package/dist/{endpoint/recovery/store-evidence.js → transport/messaging/recovery/evidence.js} +3 -3
  276. package/dist/transport/messaging/recovery/evidence.js.map +1 -0
  277. package/dist/{endpoint → transport/messaging}/recovery/index.d.ts +4 -4
  278. package/dist/transport/messaging/recovery/index.d.ts.map +1 -0
  279. package/dist/{endpoint → transport/messaging}/recovery/index.js +29 -25
  280. package/dist/transport/messaging/recovery/index.js.map +1 -0
  281. package/dist/{endpoint/recovery/store.d.ts → transport/messaging/recovery/persistence.d.ts} +5 -5
  282. package/dist/transport/messaging/recovery/persistence.d.ts.map +1 -0
  283. package/dist/{endpoint/recovery/store.js → transport/messaging/recovery/persistence.js} +4 -4
  284. package/dist/transport/messaging/recovery/persistence.js.map +1 -0
  285. package/dist/{endpoint/recovery/reanchor/empty.d.ts → transport/messaging/recovery/reanchor-empty.d.ts} +6 -6
  286. package/dist/transport/messaging/recovery/reanchor-empty.d.ts.map +1 -0
  287. package/dist/{endpoint/recovery/reanchor/empty.js → transport/messaging/recovery/reanchor-empty.js} +4 -4
  288. package/dist/transport/messaging/recovery/reanchor-empty.js.map +1 -0
  289. package/dist/{endpoint/recovery/reanchor/index.d.ts → transport/messaging/recovery/reanchor.d.ts} +4 -4
  290. package/dist/transport/messaging/recovery/reanchor.d.ts.map +1 -0
  291. package/dist/{endpoint/recovery/reanchor/index.js → transport/messaging/recovery/reanchor.js} +29 -14
  292. package/dist/transport/messaging/recovery/reanchor.js.map +1 -0
  293. package/dist/{endpoint → transport/messaging}/recovery/state.d.ts +5 -5
  294. package/dist/transport/messaging/recovery/state.d.ts.map +1 -0
  295. package/dist/{endpoint → transport/messaging}/recovery/state.js +2 -2
  296. package/dist/transport/messaging/recovery/state.js.map +1 -0
  297. package/dist/{endpoint/engine-send.d.ts → transport/messaging/send.d.ts} +5 -4
  298. package/dist/transport/messaging/send.d.ts.map +1 -0
  299. package/dist/{endpoint/engine-send.js → transport/messaging/send.js} +4 -4
  300. package/dist/transport/messaging/send.js.map +1 -0
  301. package/dist/{endpoint/engine-types.d.ts → transport/messaging/types.d.ts} +7 -5
  302. package/dist/transport/messaging/types.d.ts.map +1 -0
  303. package/dist/{endpoint/engine-types.js → transport/messaging/types.js} +1 -1
  304. package/dist/{endpoint/engine-types.js.map → transport/messaging/types.js.map} +1 -1
  305. package/dist/transport/router/index.d.ts.map +1 -0
  306. package/dist/{endpoint/router-worker → transport/router}/index.js +1 -1
  307. package/dist/transport/router/index.js.map +1 -0
  308. package/dist/transport/router/outage.d.ts.map +1 -0
  309. package/dist/transport/router/outage.js.map +1 -0
  310. package/dist/{endpoint/router-worker → transport/router}/types.d.ts +2 -2
  311. package/dist/transport/router/types.d.ts.map +1 -0
  312. package/dist/transport/router/types.js.map +1 -0
  313. package/dist/{endpoint/representation-canonical.d.ts → transport/wire/canonical.d.ts} +1 -1
  314. package/dist/transport/wire/canonical.d.ts.map +1 -0
  315. package/dist/{endpoint/representation-canonical.js → transport/wire/canonical.js} +1 -1
  316. package/dist/transport/wire/canonical.js.map +1 -0
  317. package/dist/{endpoint/representation-codec.d.ts → transport/wire/codec.d.ts} +5 -6
  318. package/dist/transport/wire/codec.d.ts.map +1 -0
  319. package/dist/{endpoint/representation-codec.js → transport/wire/codec.js} +5 -24
  320. package/dist/transport/wire/codec.js.map +1 -0
  321. package/dist/transport/wire/index.d.ts +7 -0
  322. package/dist/transport/wire/index.d.ts.map +1 -0
  323. package/dist/transport/wire/index.js +10 -0
  324. package/dist/transport/wire/index.js.map +1 -0
  325. package/dist/{endpoint/representation-schemas.d.ts → transport/wire/schemas.d.ts} +76 -98
  326. package/dist/transport/wire/schemas.d.ts.map +1 -0
  327. package/dist/{endpoint/representation-schemas.js → transport/wire/schemas.js} +7 -19
  328. package/dist/transport/wire/schemas.js.map +1 -0
  329. package/dist/transport/wire/values.d.ts +79 -0
  330. package/dist/transport/wire/values.d.ts.map +1 -0
  331. package/dist/transport/wire/values.js +115 -0
  332. package/dist/transport/wire/values.js.map +1 -0
  333. package/dist/{endpoint/representation-verification.d.ts → transport/wire/verification.d.ts} +4 -4
  334. package/dist/transport/wire/verification.d.ts.map +1 -0
  335. package/dist/{endpoint/representation-verification.js → transport/wire/verification.js} +5 -4
  336. package/dist/transport/wire/verification.js.map +1 -0
  337. package/package.json +6 -6
  338. package/dist/client-runtime.d.ts.map +0 -1
  339. package/dist/client-runtime.js.map +0 -1
  340. package/dist/contract.d.ts +0 -721
  341. package/dist/contract.d.ts.map +0 -1
  342. package/dist/contract.js +0 -451
  343. package/dist/contract.js.map +0 -1
  344. package/dist/contract.types-check.d.ts.map +0 -1
  345. package/dist/contract.types-check.js.map +0 -1
  346. package/dist/daemon/configuration.d.ts.map +0 -1
  347. package/dist/daemon/configuration.js.map +0 -1
  348. package/dist/daemon/management.d.ts.map +0 -1
  349. package/dist/daemon/management.js.map +0 -1
  350. package/dist/daemon/registration.d.ts.map +0 -1
  351. package/dist/daemon/registration.js.map +0 -1
  352. package/dist/daemon/runtime/activation.d.ts.map +0 -1
  353. package/dist/daemon/runtime/activation.js.map +0 -1
  354. package/dist/daemon/runtime/controller.d.ts.map +0 -1
  355. package/dist/daemon/runtime/controller.js +0 -140
  356. package/dist/daemon/runtime/controller.js.map +0 -1
  357. package/dist/daemon/runtime/history-export.d.ts +0 -33
  358. package/dist/daemon/runtime/history-export.d.ts.map +0 -1
  359. package/dist/daemon/runtime/history-export.js.map +0 -1
  360. package/dist/daemon/runtime/index.d.ts.map +0 -1
  361. package/dist/daemon/runtime/index.js.map +0 -1
  362. package/dist/daemon/runtime/pending-delivery.d.ts +0 -49
  363. package/dist/daemon/runtime/pending-delivery.d.ts.map +0 -1
  364. package/dist/daemon/runtime/pending-delivery.js.map +0 -1
  365. package/dist/daemon/runtime/protocol.d.ts.map +0 -1
  366. package/dist/daemon/runtime/protocol.js.map +0 -1
  367. package/dist/endpoint/addressing/index.d.ts.map +0 -1
  368. package/dist/endpoint/addressing/index.js.map +0 -1
  369. package/dist/endpoint/collective/operation.d.ts.map +0 -1
  370. package/dist/endpoint/collective/operation.js.map +0 -1
  371. package/dist/endpoint/collective/shared-answers.d.ts.map +0 -1
  372. package/dist/endpoint/collective/shared-answers.js.map +0 -1
  373. package/dist/endpoint/collective/validation.d.ts.map +0 -1
  374. package/dist/endpoint/collective/validation.js.map +0 -1
  375. package/dist/endpoint/collective/wire.d.ts.map +0 -1
  376. package/dist/endpoint/collective/wire.js.map +0 -1
  377. package/dist/endpoint/engine-dissemination.d.ts.map +0 -1
  378. package/dist/endpoint/engine-dissemination.js.map +0 -1
  379. package/dist/endpoint/engine-durability.js.map +0 -1
  380. package/dist/endpoint/engine-send.d.ts.map +0 -1
  381. package/dist/endpoint/engine-send.js.map +0 -1
  382. package/dist/endpoint/engine-types.d.ts.map +0 -1
  383. package/dist/endpoint/engine.d.ts.map +0 -1
  384. package/dist/endpoint/engine.js.map +0 -1
  385. package/dist/endpoint/protocol/evidence.js.map +0 -1
  386. package/dist/endpoint/protocol/index.d.ts.map +0 -1
  387. package/dist/endpoint/protocol/index.js.map +0 -1
  388. package/dist/endpoint/recovery/barrier.d.ts.map +0 -1
  389. package/dist/endpoint/recovery/barrier.js.map +0 -1
  390. package/dist/endpoint/recovery/index.d.ts.map +0 -1
  391. package/dist/endpoint/recovery/index.js.map +0 -1
  392. package/dist/endpoint/recovery/reanchor/empty.d.ts.map +0 -1
  393. package/dist/endpoint/recovery/reanchor/empty.js.map +0 -1
  394. package/dist/endpoint/recovery/reanchor/index.d.ts.map +0 -1
  395. package/dist/endpoint/recovery/reanchor/index.js.map +0 -1
  396. package/dist/endpoint/recovery/state.d.ts.map +0 -1
  397. package/dist/endpoint/recovery/state.js.map +0 -1
  398. package/dist/endpoint/recovery/store-evidence.d.ts.map +0 -1
  399. package/dist/endpoint/recovery/store-evidence.js.map +0 -1
  400. package/dist/endpoint/recovery/store.d.ts.map +0 -1
  401. package/dist/endpoint/recovery/store.js.map +0 -1
  402. package/dist/endpoint/representation-canonical.d.ts.map +0 -1
  403. package/dist/endpoint/representation-canonical.js.map +0 -1
  404. package/dist/endpoint/representation-codec.d.ts.map +0 -1
  405. package/dist/endpoint/representation-codec.js.map +0 -1
  406. package/dist/endpoint/representation-schemas.d.ts.map +0 -1
  407. package/dist/endpoint/representation-schemas.js.map +0 -1
  408. package/dist/endpoint/representation-verification.d.ts.map +0 -1
  409. package/dist/endpoint/representation-verification.js.map +0 -1
  410. package/dist/endpoint/representation.d.ts +0 -6
  411. package/dist/endpoint/representation.d.ts.map +0 -1
  412. package/dist/endpoint/representation.js +0 -8
  413. package/dist/endpoint/representation.js.map +0 -1
  414. package/dist/endpoint/router-worker/index.d.ts.map +0 -1
  415. package/dist/endpoint/router-worker/index.js.map +0 -1
  416. package/dist/endpoint/router-worker/outage.d.ts.map +0 -1
  417. package/dist/endpoint/router-worker/outage.js.map +0 -1
  418. package/dist/endpoint/router-worker/types.d.ts.map +0 -1
  419. package/dist/endpoint/router-worker/types.js.map +0 -1
  420. package/dist/endpoint/store/anchors.d.ts.map +0 -1
  421. package/dist/endpoint/store/anchors.js.map +0 -1
  422. package/dist/endpoint/store/database/index.d.ts.map +0 -1
  423. package/dist/endpoint/store/database/index.js.map +0 -1
  424. package/dist/endpoint/store/database/schema.d.ts.map +0 -1
  425. package/dist/endpoint/store/database/schema.js.map +0 -1
  426. package/dist/endpoint/store/database/values.d.ts.map +0 -1
  427. package/dist/endpoint/store/database/values.js.map +0 -1
  428. package/dist/endpoint/store/deliveries.d.ts.map +0 -1
  429. package/dist/endpoint/store/deliveries.js.map +0 -1
  430. package/dist/endpoint/store/dissemination.d.ts.map +0 -1
  431. package/dist/endpoint/store/dissemination.js.map +0 -1
  432. package/dist/endpoint/store/index.d.ts.map +0 -1
  433. package/dist/endpoint/store/index.js.map +0 -1
  434. package/dist/endpoint/store/management.d.ts.map +0 -1
  435. package/dist/endpoint/store/management.js.map +0 -1
  436. package/dist/endpoint/store/outbound.d.ts.map +0 -1
  437. package/dist/endpoint/store/outbound.js.map +0 -1
  438. package/dist/endpoint/store/records.d.ts.map +0 -1
  439. package/dist/endpoint/store/records.js.map +0 -1
  440. package/dist/endpoint/store/rows/index.d.ts.map +0 -1
  441. package/dist/endpoint/store/rows/index.js.map +0 -1
  442. package/dist/endpoint/store/types.d.ts.map +0 -1
  443. package/dist/endpoint/store/types.js.map +0 -1
  444. package/dist/endpoint/store.d.ts +0 -10
  445. package/dist/endpoint/store.d.ts.map +0 -1
  446. package/dist/endpoint/store.js +0 -6
  447. package/dist/endpoint/store.js.map +0 -1
  448. package/dist/harness-mcp-contract.d.ts.map +0 -1
  449. package/dist/harness-mcp-contract.js +0 -113
  450. package/dist/harness-mcp-contract.js.map +0 -1
  451. package/dist/harness-mcp-http.d.ts.map +0 -1
  452. package/dist/harness-mcp-http.js.map +0 -1
  453. package/dist/harness-mcp-subscription.d.ts +0 -30
  454. package/dist/harness-mcp-subscription.d.ts.map +0 -1
  455. package/dist/harness-mcp-subscription.js +0 -361
  456. package/dist/harness-mcp-subscription.js.map +0 -1
  457. package/dist/harness-mcp-wire.d.ts.map +0 -1
  458. package/dist/harness-mcp-wire.js.map +0 -1
  459. package/dist/management-runtime.d.ts.map +0 -1
  460. package/dist/management-runtime.js.map +0 -1
  461. package/dist/server.d.ts.map +0 -1
  462. package/dist/server.js.map +0 -1
  463. package/dist/server.types-check.d.ts.map +0 -1
  464. package/dist/server.types-check.js.map +0 -1
  465. /package/dist/{endpoint/store → store}/anchors.d.ts +0 -0
  466. /package/dist/{endpoint/store → store}/anchors.js +0 -0
  467. /package/dist/{endpoint/store → store}/database/index.d.ts +0 -0
  468. /package/dist/{endpoint/store → store}/database/index.js +0 -0
  469. /package/dist/{endpoint/store → store}/database/schema.d.ts +0 -0
  470. /package/dist/{endpoint/store → store}/database/values.d.ts +0 -0
  471. /package/dist/{endpoint/store → store}/database/values.js +0 -0
  472. /package/dist/{endpoint/store → store}/dissemination.d.ts +0 -0
  473. /package/dist/{endpoint/store → store}/dissemination.js +0 -0
  474. /package/dist/{endpoint/store → store}/outbound.d.ts +0 -0
  475. /package/dist/{endpoint/store → store}/outbound.js +0 -0
  476. /package/dist/{endpoint/store → store}/records.d.ts +0 -0
  477. /package/dist/{endpoint/store → store}/records.js +0 -0
  478. /package/dist/{endpoint/store → store}/rows/index.d.ts +0 -0
  479. /package/dist/{endpoint/store → store}/rows/index.js +0 -0
  480. /package/dist/{endpoint/store → store}/types.js +0 -0
  481. /package/dist/{endpoint/collective → transport/collectives}/shared-answers.js +0 -0
  482. /package/dist/{endpoint → transport/messaging}/recovery/barrier.js +0 -0
  483. /package/dist/{endpoint/router-worker → transport/router}/index.d.ts +0 -0
  484. /package/dist/{endpoint/router-worker → transport/router}/outage.d.ts +0 -0
  485. /package/dist/{endpoint/router-worker → transport/router}/outage.js +0 -0
  486. /package/dist/{endpoint/router-worker → transport/router}/types.js +0 -0
@@ -0,0 +1,116 @@
1
+ /** @file MCP framing of the harness operations: tool names, send metadata, Events constants, and JSON Schema projections. */
2
+ import { Effect, JSONSchema, Schema, } from "effect";
3
+ import { harnessAcknowledgeDeliveryRequestSchema, harnessSendArgumentsSchema, harnessSendOptionsSchema, harnessSendResultSchema, inboxRequestSchema, inboxResultSchema, readSendRequestSchema, readSendResultSchema, } from "../../delivery/operations.js";
4
+ import { InboundItem } from "../../transport/collectives/inbound.js";
5
+ import { exactStruct } from "../../transport/wire/values.js";
6
+ /** A content-free wakeup to read the classified runtime inbox. */
7
+ export const INBOX_PENDING_EVENT = "moltzap.inbox.pending";
8
+ /** Classified content delivered directly to a webhook consumer. */
9
+ export const INBOX_ITEM_EVENT = "moltzap.inbox.item";
10
+ /** Semantic retrieval of content referenced by a large webhook event. */
11
+ export const HARNESS_READ_EVENT_TOOL = "read_event";
12
+ /** Adapter operation performing one collective operation. */
13
+ export const HARNESS_SEND_TOOL = "send_message";
14
+ /** Runtime send options travel outside model-generated tool arguments. */
15
+ export const HARNESS_SEND_META_KEY = "xyz.moltzap/send";
16
+ /** Retires an inbox item after its host-specific acceptance contract is met. */
17
+ export const HARNESS_ACKNOWLEDGE_DELIVERY_TOOL = "acknowledge_delivery";
18
+ /** Runtime read of classified deliveries whose host acceptance is pending. */
19
+ export const HARNESS_READ_INBOX_TOOL = "read_inbox";
20
+ /** Lookup of a retained invocation, distinct from collective completion. */
21
+ export const HARNESS_READ_SEND_TOOL = "read_send";
22
+ const exact = {
23
+ exact: true,
24
+ onExcessProperty: "error",
25
+ };
26
+ const exactEmptyObject = Schema.Record({
27
+ key: Schema.String,
28
+ value: Schema.Never,
29
+ }).annotations({ parseOptions: exact });
30
+ /** Inline content or an explicit reference without truncating stored content. */
31
+ const itemEventDataSchema = Schema.Union(exactStruct({ kind: Schema.Literal("item"), item: InboundItem }), exactStruct({
32
+ kind: Schema.Literal("reference"),
33
+ itemKind: Schema.Literal("multicast", "collectiveRequest", "collectiveResult", "operationFailed"),
34
+ bytes: Schema.NonNegativeInt,
35
+ }));
36
+ /** Classified webhook payload advertised through MCP event discovery. */
37
+ export const itemEventDataJsonSchema = JSONSchema.make(itemEventDataSchema, {
38
+ target: "jsonSchema2020-12",
39
+ });
40
+ const harnessEmptyResultSchema = exactEmptyObject;
41
+ const harnessSendMetadataSchema = Schema.Struct({
42
+ [HARNESS_SEND_META_KEY]: Schema.optionalWith(harnessSendOptionsSchema, {
43
+ exact: true,
44
+ }),
45
+ });
46
+ /** JSON Schema for the runtime inbox pagination arguments. */
47
+ export const harnessReadInboxRequestJsonSchema = JSONSchema.make(inboxRequestSchema, { target: "jsonSchema2020-12" });
48
+ /** JSON Schema for classified inbox pages. */
49
+ export const harnessReadInboxResultJsonSchema = JSONSchema.make(inboxResultSchema, { target: "jsonSchema2020-12" });
50
+ /** JSON Schema for keyed send lookup. */
51
+ export const harnessReadSendRequestJsonSchema = JSONSchema.make(readSendRequestSchema, { target: "jsonSchema2020-12" });
52
+ /** JSON Schema for observed send state. */
53
+ export const harnessReadSendResultJsonSchema = JSONSchema.make(readSendResultSchema, { target: "jsonSchema2020-12" });
54
+ /**
55
+ * Validate semantic arguments separately from runtime-owned send options.
56
+ * Unrelated SDK metadata belongs to the transport and is not interpreted here.
57
+ * @param toolArguments Model-visible arguments.
58
+ * @param metadata The SDK request metadata, if supplied.
59
+ * @returns One validated invocation for the daemon's existing store.
60
+ */
61
+ export function decodeHarnessSendCall(toolArguments, metadata) {
62
+ return Effect.gen(function* () {
63
+ const args = yield* Schema.decodeUnknown(harnessSendArgumentsSchema)(toolArguments);
64
+ const runtime = yield* Schema.decodeUnknown(harnessSendMetadataSchema)(metadata === undefined ? {} : metadata);
65
+ return { ...args, ...runtime[HARNESS_SEND_META_KEY] };
66
+ }).pipe(Effect.withSpan("decodeHarnessSendCall"));
67
+ }
68
+ /** JSON Schema advertised for the delivery acknowledgment operation. */
69
+ export const harnessAcknowledgeDeliveryRequestJsonSchema = JSONSchema.make(harnessAcknowledgeDeliveryRequestSchema, { target: "jsonSchema2020-12" });
70
+ /** JSON Schema advertised for `send_message` arguments. */
71
+ export const harnessSendArgumentsJsonSchema = JSONSchema.make(harnessSendArgumentsSchema, { target: "jsonSchema2020-12" });
72
+ /** JSON Schema advertised for `send_message` results. */
73
+ export const harnessSendResultJsonSchema = JSONSchema.make(harnessSendResultSchema, { target: "jsonSchema2020-12" });
74
+ /** JSON Schema advertised for empty adapter-operation results. */
75
+ export const harnessEmptyResultJsonSchema = JSONSchema.make(harnessEmptyResultSchema, { target: "jsonSchema2020-12" });
76
+ /** Closed wire failure vocabularies prevent internal diagnostics from escaping. */
77
+ export const harnessFailureReasons = {
78
+ RUNTIME_READ_REASONS: new Set([
79
+ "not-registered",
80
+ "invalid-continuation",
81
+ "invalid-event",
82
+ "unknown-event",
83
+ "persistence-failed",
84
+ ]),
85
+ REGISTER_REASONS: new Set([
86
+ "dependency-unavailable",
87
+ "persistence-failed",
88
+ "incompatible-daemon",
89
+ ]),
90
+ STATUS_REASONS: new Set(["persistence-failed", "incompatible-daemon"]),
91
+ SEARCH_AGENTS_REASONS: new Set([
92
+ "not-registered",
93
+ "dependency-unavailable",
94
+ "incompatible-daemon",
95
+ ]),
96
+ SEARCH_CONVERSATIONS_REASONS: new Set([
97
+ "not-registered",
98
+ "invalid-address",
99
+ "persistence-failed",
100
+ ]),
101
+ READ_CONVERSATION_REASONS: new Set([
102
+ "not-registered",
103
+ "invalid-address",
104
+ "unknown-agent",
105
+ "invalid-continuation",
106
+ "history-gap",
107
+ "persistence-failed",
108
+ ]),
109
+ ACKNOWLEDGE_DELIVERY_REASONS: new Set([
110
+ "unknown-delivery",
111
+ "delivery-conflict",
112
+ "persistence-failed",
113
+ "transport-failed",
114
+ ]),
115
+ };
116
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/endpoint/mcp/schemas.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,28 @@
1
1
  /** @file Official MCP tool catalog and private Harness operation projection. */
2
- import { type Implementation } from "@modelcontextprotocol/server";
2
+ import { type Implementation, type McpHttpHandler } from "@modelcontextprotocol/server";
3
3
  import { Effect } from "effect";
4
- import type { CollectiveError, SendError } from "./contract.js";
5
- import type { DeliveryToken } from "./endpoint/store.js";
6
- import { type HarnessMessageReadyEvent, type HarnessSendRequest, type HarnessSendResult } from "./harness-mcp-contract.js";
7
- import { type HarnessMcpSubscriptionHandler } from "./harness-mcp-subscription.js";
8
- import { type ManagementReadConversationRequest, type ManagementReadConversationResult, type ManagementRegisterRequest, type ManagementRegisterResult, type ManagementSearchAgentsRequest, type ManagementSearchAgentsResult, type ManagementSearchConversationsRequest, type ManagementSearchConversationsResult, type ManagementStatusResult } from "./management-runtime.js";
4
+ import { type DeliveryOperations, type EventStore } from "../../delivery/operations.js";
5
+ import { type HarnessMcpCredentials } from "./auth.js";
6
+ import { type ManagementReadConversationRequest, type ManagementReadConversationResult, type ManagementRegisterRequest, type ManagementRegisterResult, type ManagementSearchAgentsRequest, type ManagementSearchAgentsResult, type ManagementSearchConversationsRequest, type ManagementSearchConversationsResult, type ManagementStatusResult } from "./owner-tools.js";
9
7
  type ClosedOperationError = Readonly<{
10
8
  readonly reason: string;
11
9
  }>;
12
10
  /** Structural daemon operations projected onto the loopback MCP boundary. */
13
- export interface HarnessMcpOperations {
11
+ export interface HarnessMcpOperations extends DeliveryOperations {
14
12
  readonly readStatus: () => Effect.Effect<ManagementStatusResult, ClosedOperationError>;
15
13
  readonly register: (input: ManagementRegisterRequest) => Effect.Effect<ManagementRegisterResult, ClosedOperationError>;
16
14
  readonly searchAgents: (input: ManagementSearchAgentsRequest) => Effect.Effect<ManagementSearchAgentsResult, ClosedOperationError>;
17
15
  readonly searchConversations: (input: ManagementSearchConversationsRequest) => Effect.Effect<ManagementSearchConversationsResult, ClosedOperationError>;
18
16
  readonly readConversation: (input: ManagementReadConversationRequest) => Effect.Effect<ManagementReadConversationResult, ClosedOperationError>;
19
- readonly send: (request: HarnessSendRequest) => Effect.Effect<HarnessSendResult, SendError | CollectiveError>;
20
- readonly acknowledgeDelivery: (deliveryToken: DeliveryToken) => Effect.Effect<void, ClosedOperationError>;
17
+ }
18
+ /** Official handler with one content-free daemon notification edge. */
19
+ export interface HarnessMcpEventHandler extends McpHttpHandler {
20
+ readonly hasActiveSubscription: () => boolean;
21
+ readonly notifyPending: () => boolean;
21
22
  }
22
23
  interface HarnessMcpHandlerOptions {
24
+ readonly eventStore?: EventStore;
25
+ readonly credentials?: HarnessMcpCredentials;
23
26
  readonly implementation: Implementation;
24
27
  readonly operations: HarnessMcpOperations;
25
28
  readonly onSubscriptionActiveChange?: (active: boolean) => void;
@@ -28,10 +31,10 @@ interface HarnessMcpHandlerOptions {
28
31
  readonly keepAliveMillis?: number;
29
32
  }
30
33
  /**
31
- * Create one state-dependent official MCP handler and message listener.
32
- * @param options Closed daemon operations and lifecycle callbacks.
33
- * @returns Handler whose catalog transitions in place after registration.
34
+ * Create one official MCP handler with explicit event resource ownership.
35
+ * @param options Daemon operations, optional credentials and callback persistence.
36
+ * @returns Handler whose catalog changes in place after registration.
34
37
  */
35
- export declare const makeHarnessMcpHttpHandler: (options: HarnessMcpHandlerOptions) => Effect.Effect<HarnessMcpSubscriptionHandler<HarnessMessageReadyEvent>, ClosedOperationError>;
38
+ export declare const makeHarnessMcpHttpHandler: (options: HarnessMcpHandlerOptions) => Effect.Effect<HarnessMcpEventHandler, ClosedOperationError>;
36
39
  export {};
37
- //# sourceMappingURL=harness-mcp-wire.d.ts.map
40
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/endpoint/mcp/tools.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,cAAc,EAKpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,MAAM,EAQP,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EAYhB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,KAAK,qBAAqB,EAG3B,MAAM,WAAW,CAAC;AASnB,OAAO,EACL,KAAK,iCAAiC,EAEtC,KAAK,gCAAgC,EAErC,KAAK,yBAAyB,EAE9B,KAAK,wBAAwB,EAE7B,KAAK,6BAA6B,EAElC,KAAK,4BAA4B,EAEjC,KAAK,oCAAoC,EAEzC,KAAK,mCAAmC,EAExC,KAAK,sBAAsB,EAE5B,MAAM,kBAAkB,CAAC;AA4B1B,KAAK,oBAAoB,GAAG,QAAQ,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAElE,6EAA6E;AAC7E,MAAM,WAAW,oBAAqB,SAAQ,kBAAkB;IAC9D,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CACtC,sBAAsB,EACtB,oBAAoB,CACrB,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,yBAAyB,KAC7B,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;IACnE,QAAQ,CAAC,YAAY,EAAE,CACrB,KAAK,EAAE,6BAA6B,KACjC,MAAM,CAAC,MAAM,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAAC;IACvE,QAAQ,CAAC,mBAAmB,EAAE,CAC5B,KAAK,EAAE,oCAAoC,KACxC,MAAM,CAAC,MAAM,CAAC,mCAAmC,EAAE,oBAAoB,CAAC,CAAC;IAC9E,QAAQ,CAAC,gBAAgB,EAAE,CACzB,KAAK,EAAE,iCAAiC,KACrC,MAAM,CAAC,MAAM,CAAC,gCAAgC,EAAE,oBAAoB,CAAC,CAAC;CAC5E;AAED,uEAAuE;AACvE,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACvC;AAED,UAAU,wBAAwB;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;IAC1C,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAk6BD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,YAC3B,wBAAwB,KAChC,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CASN,CAAC"}
@@ -1,9 +1,11 @@
1
1
  /** @file Official MCP tool catalog and private Harness operation projection. */
2
2
  import { createMcpHandler, fromJsonSchema, McpServer, ProtocolError, ProtocolErrorCode, } from "@modelcontextprotocol/server";
3
- import { Cause, Effect, Exit, JSONSchema, Option, Schema } from "effect";
4
- import { HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, HARNESS_EVENTS_EXTENSION, HARNESS_SEND_TOOL, harnessAcknowledgeDeliveryRequestJsonSchema, harnessEmptyResultJsonSchema, harnessSendRequestJsonSchema, harnessSendResultJsonSchema, } from "./harness-mcp-contract.js";
5
- import { makeHarnessMcpSubscriptionHandler, } from "./harness-mcp-subscription.js";
6
- import { managementReadConversationRequestSchema, managementReadConversationResultSchema, managementRegisterRequestSchema, managementRegisterResultSchema, managementSearchAgentsRequestSchema, managementSearchAgentsResultSchema, managementSearchConversationsRequestSchema, managementSearchConversationsResultSchema, managementStatusResultSchema, } from "./management-runtime.js";
3
+ import { Cause, Effect, Exit, JSONSchema, Layer, Option, Schema, Scope, } from "effect";
4
+ import { decodeHarnessReadSendRequest, readEventRequestSchema, readEventResultSchema, sendErrorData, } from "../../delivery/operations.js";
5
+ import { authenticateHarnessRequest, mayInvokeHarnessTool, } from "./auth.js";
6
+ import { makeHarnessEvents, makeWebhookEvents, runEventOperation, webhookHttpClientLayer, webhookStatusJsonSchema, } from "./events.js";
7
+ import { managementReadConversationRequestSchema, managementReadConversationResultSchema, managementRegisterRequestSchema, managementRegisterResultSchema, managementSearchAgentsRequestSchema, managementSearchAgentsResultSchema, managementSearchConversationsRequestSchema, managementSearchConversationsResultSchema, managementStatusResultSchema, } from "./owner-tools.js";
8
+ import { decodeHarnessSendCall, HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, HARNESS_READ_EVENT_TOOL, HARNESS_READ_INBOX_TOOL, HARNESS_READ_SEND_TOOL, HARNESS_SEND_TOOL, harnessAcknowledgeDeliveryRequestJsonSchema, harnessEmptyResultJsonSchema, harnessFailureReasons, harnessReadInboxRequestJsonSchema, harnessReadInboxResultJsonSchema, harnessReadSendRequestJsonSchema, harnessReadSendResultJsonSchema, harnessSendArgumentsJsonSchema, harnessSendResultJsonSchema, } from "./schemas.js";
7
9
  /* eslint-disable agent-code-guard/async-keyword -- Official MCP factories and callbacks are Promise-native. */
8
10
  const REGISTER_TOOL = "register";
9
11
  const STATUS_TOOL = "status";
@@ -29,40 +31,17 @@ const searchConversationsInput = makeStandardSchema(makeJsonSchema(managementSea
29
31
  const searchConversationsOutput = makeStandardSchema(makeJsonSchema(managementSearchConversationsResultSchema));
30
32
  const readConversationInput = makeStandardSchema(makeJsonSchema(managementReadConversationRequestSchema));
31
33
  const readConversationOutput = makeStandardSchema(makeJsonSchema(managementReadConversationResultSchema));
32
- const sendInput = makeStandardSchema(harnessSendRequestJsonSchema);
34
+ const sendInput = makeStandardSchema(harnessSendArgumentsJsonSchema);
33
35
  const acknowledgeDeliveryInput = makeStandardSchema(harnessAcknowledgeDeliveryRequestJsonSchema);
34
36
  const emptyOutput = makeStandardSchema(harnessEmptyResultJsonSchema);
35
37
  const sendOutput = makeStandardSchema(harnessSendResultJsonSchema);
36
- const REGISTER_REASONS = new Set([
37
- "dependency-unavailable",
38
- "persistence-failed",
39
- "incompatible-daemon",
40
- ]);
41
- const STATUS_REASONS = new Set(["persistence-failed", "incompatible-daemon"]);
42
- const SEARCH_AGENTS_REASONS = new Set([
43
- "not-registered",
44
- "dependency-unavailable",
45
- "incompatible-daemon",
46
- ]);
47
- const SEARCH_CONVERSATIONS_REASONS = new Set([
48
- "not-registered",
49
- "invalid-address",
50
- "persistence-failed",
51
- ]);
52
- const READ_CONVERSATION_REASONS = new Set([
53
- "not-registered",
54
- "invalid-address",
55
- "unknown-agent",
56
- "invalid-continuation",
57
- "history-gap",
58
- "persistence-failed",
59
- ]);
60
- const ACKNOWLEDGE_DELIVERY_REASONS = new Set([
61
- "unknown-delivery",
62
- "delivery-conflict",
63
- "persistence-failed",
64
- "transport-failed",
65
- ]);
38
+ const readEventInput = makeStandardSchema(makeJsonSchema(readEventRequestSchema));
39
+ const readEventOutput = makeStandardSchema(makeJsonSchema(readEventResultSchema));
40
+ const readInboxInput = makeStandardSchema(harnessReadInboxRequestJsonSchema);
41
+ const readInboxOutput = makeStandardSchema(harnessReadInboxResultJsonSchema);
42
+ const readSendInput = makeStandardSchema(harnessReadSendRequestJsonSchema);
43
+ const readSendOutput = makeStandardSchema(harnessReadSendResultJsonSchema);
44
+ const { RUNTIME_READ_REASONS, REGISTER_REASONS, STATUS_REASONS, SEARCH_AGENTS_REASONS, SEARCH_CONVERSATIONS_REASONS, READ_CONVERSATION_REASONS, ACKNOWLEDGE_DELIVERY_REASONS, } = harnessFailureReasons;
66
45
  const operationReason = (cause, allowed, fallback) => {
67
46
  if (typeof cause !== "object" || cause === null || !("reason" in cause)) {
68
47
  return fallback;
@@ -102,27 +81,6 @@ const runOperation = async (options) => {
102
81
  }
103
82
  return toolResult(outcome.value);
104
83
  };
105
- /**
106
- * The error data a refused send carries: a collective failure keeps its id
107
- * and the members or fields it names, so the loopback client rebuilds the
108
- * same typed error the daemon raised.
109
- */
110
- const sendErrorData = (error) => {
111
- switch (error._tag) {
112
- case "SendError":
113
- return { reason: error.reason };
114
- case "CollectiveError":
115
- return {
116
- reason: "collective-failed",
117
- id: error.id,
118
- failure: error.failure,
119
- };
120
- default: {
121
- const exhaustive = error;
122
- return exhaustive;
123
- }
124
- }
125
- };
126
84
  // #ignore-sloppy-code-next-line[async-keyword]: MCP tool handlers are Promise callbacks, so this edge awaits Effect before returning the SDK result.
127
85
  const runSendOperation = async (operation, signal) => {
128
86
  const outcome = await Effect.runPromiseExit(operation, { signal });
@@ -182,7 +140,7 @@ const registerRegistrationTool = (server, operations, state) => {
182
140
  return result;
183
141
  });
184
142
  };
185
- const registerReadTools = (server, operations) => {
143
+ const registerSearchAgentsTool = (server, operations) => {
186
144
  server.registerTool(SEARCH_AGENTS_TOOL, { inputSchema: searchAgentsInput, outputSchema: searchAgentsOutput }, (input, context) => runOperation({
187
145
  operation: operations.searchAgents(input),
188
146
  label: "Agent search",
@@ -190,6 +148,9 @@ const registerReadTools = (server, operations) => {
190
148
  fallbackReason: "dependency-unavailable",
191
149
  signal: context.mcpReq.signal,
192
150
  }));
151
+ };
152
+ const registerReadTools = (server, operations) => {
153
+ registerSearchAgentsTool(server, operations);
193
154
  server.registerTool(SEARCH_CONVERSATIONS_TOOL, {
194
155
  inputSchema: searchConversationsInput,
195
156
  outputSchema: searchConversationsOutput,
@@ -211,8 +172,44 @@ const registerReadTools = (server, operations) => {
211
172
  signal: context.mcpReq.signal,
212
173
  }));
213
174
  };
175
+ function registerSendTool(server, operations) {
176
+ server.registerTool(HARNESS_SEND_TOOL, { inputSchema: sendInput, outputSchema: sendOutput }, (input, context) => handleSendToolCall({
177
+ name: HARNESS_SEND_TOOL,
178
+ toolArguments: input,
179
+ metadata: context.mcpReq._meta,
180
+ signal: context.mcpReq.signal,
181
+ }, operations));
182
+ }
183
+ const registerEventReadTool = (server, operations) => {
184
+ server.registerTool(HARNESS_READ_EVENT_TOOL, {
185
+ description: "Read the original full content of a MoltZap event by eventId. This read has no delivery or acknowledgment side effects.",
186
+ inputSchema: readEventInput,
187
+ outputSchema: readEventOutput,
188
+ }, (input, context) => runOperation({
189
+ operation: operations.readEvent(input),
190
+ label: "Event read",
191
+ allowedReasons: RUNTIME_READ_REASONS,
192
+ fallbackReason: "persistence-failed",
193
+ signal: context.mcpReq.signal,
194
+ }));
195
+ };
214
196
  const registerAdapterTools = (server, operations) => {
215
- server.registerTool(HARNESS_SEND_TOOL, { inputSchema: sendInput, outputSchema: sendOutput }, (input, context) => runSendOperation(operations.send(input), context.mcpReq.signal));
197
+ server.registerTool(HARNESS_READ_INBOX_TOOL, { inputSchema: readInboxInput, outputSchema: readInboxOutput }, (input, context) => runOperation({
198
+ operation: operations.readInbox(input),
199
+ label: "Inbox read",
200
+ allowedReasons: RUNTIME_READ_REASONS,
201
+ fallbackReason: "persistence-failed",
202
+ signal: context.mcpReq.signal,
203
+ }));
204
+ server.registerTool(HARNESS_READ_SEND_TOOL, { inputSchema: readSendInput, outputSchema: readSendOutput }, (input, context) => runOperation({
205
+ operation: operations.readSend(input),
206
+ label: "Send lookup",
207
+ allowedReasons: RUNTIME_READ_REASONS,
208
+ fallbackReason: "persistence-failed",
209
+ signal: context.mcpReq.signal,
210
+ }));
211
+ registerSendTool(server, operations);
212
+ registerEventReadTool(server, operations);
216
213
  server.registerTool(HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, { inputSchema: acknowledgeDeliveryInput, outputSchema: emptyOutput }, (input, context) => runVoidOperation({
217
214
  operation: operations.acknowledgeDelivery(input.deliveryToken),
218
215
  label: "Delivery acknowledgment",
@@ -221,7 +218,13 @@ const registerAdapterTools = (server, operations) => {
221
218
  signal: context.mcpReq.signal,
222
219
  }));
223
220
  };
224
- const registerActiveTools = (server, operations) => {
221
+ const registerActiveTools = (server, operations, role) => {
222
+ if (role === "runtime") {
223
+ registerSearchAgentsTool(server, operations);
224
+ registerSendTool(server, operations);
225
+ registerEventReadTool(server, operations);
226
+ return;
227
+ }
225
228
  registerReadTools(server, operations);
226
229
  registerAdapterTools(server, operations);
227
230
  };
@@ -293,11 +296,14 @@ const handleReadConversationToolCall = async (input, operations) => {
293
296
  signal: input.signal,
294
297
  });
295
298
  };
299
+ const decodeInvocationInput = (input, signal) => runEventOperation(input.pipe(Effect.catchTag("ParseError", () => Effect.fail(new ProtocolError(-32602, "Invalid invocation arguments", {
300
+ reason: "content-invalid",
301
+ })))), signal);
296
302
  // #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP request handler awaits schema validation and the Promise-native operation bridge.
297
- const handleSendToolCall = async (input, operations) => {
298
- const decoded = await decodeToolInput(sendInput, input.toolArguments, input.name);
303
+ async function handleSendToolCall(input, operations) {
304
+ const decoded = await decodeInvocationInput(decodeHarnessSendCall(input.toolArguments, input.metadata), input.signal);
299
305
  return await validateToolOutput(sendOutput, await runSendOperation(operations.send(decoded), input.signal), input.name);
300
- };
306
+ }
301
307
  // #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP request handler awaits schema validation and the Promise-native operation bridge.
302
308
  const handleAcknowledgeDeliveryToolCall = async (input, operations) => {
303
309
  const decoded = await decodeToolInput(acknowledgeDeliveryInput, input.toolArguments, input.name);
@@ -309,9 +315,43 @@ const handleAcknowledgeDeliveryToolCall = async (input, operations) => {
309
315
  signal: input.signal,
310
316
  });
311
317
  };
318
+ // #ignore-sloppy-code-next-line[async-keyword]: Runtime read dispatch validates the selected MCP schema before invoking the operation.
319
+ const handleInboxReadToolCall = async (input, operations) => {
320
+ switch (input.name) {
321
+ case HARNESS_READ_EVENT_TOOL:
322
+ return await runValidatedOperation(readEventOutput, input.name, {
323
+ operation: operations.readEvent(await decodeToolInput(readEventInput, input.toolArguments, input.name)),
324
+ label: "Event read",
325
+ allowedReasons: RUNTIME_READ_REASONS,
326
+ fallbackReason: "persistence-failed",
327
+ signal: input.signal,
328
+ });
329
+ case HARNESS_READ_INBOX_TOOL:
330
+ return await runValidatedOperation(readInboxOutput, input.name, {
331
+ operation: operations.readInbox(await decodeToolInput(readInboxInput, input.toolArguments, input.name)),
332
+ label: "Inbox read",
333
+ allowedReasons: RUNTIME_READ_REASONS,
334
+ fallbackReason: "persistence-failed",
335
+ signal: input.signal,
336
+ });
337
+ default:
338
+ return toolNotFound(input.name);
339
+ }
340
+ };
312
341
  // #ignore-sloppy-code-next-line[async-keyword]: Active tool dispatch returns the selected Promise-native MCP operation result.
313
342
  const handleActiveToolCall = async (input, operations) => {
343
+ if ([HARNESS_READ_EVENT_TOOL, HARNESS_READ_INBOX_TOOL].includes(input.name)) {
344
+ return await handleInboxReadToolCall(input, operations);
345
+ }
314
346
  switch (input.name) {
347
+ case HARNESS_READ_SEND_TOOL:
348
+ return await runValidatedOperation(readSendOutput, input.name, {
349
+ operation: operations.readSend(await decodeInvocationInput(decodeHarnessReadSendRequest(input.toolArguments), input.signal)),
350
+ label: "Send lookup",
351
+ allowedReasons: RUNTIME_READ_REASONS,
352
+ fallbackReason: "persistence-failed",
353
+ signal: input.signal,
354
+ });
315
355
  case SEARCH_AGENTS_TOOL:
316
356
  return await handleSearchAgentsToolCall(input, operations);
317
357
  case SEARCH_CONVERSATIONS_TOOL:
@@ -334,7 +374,10 @@ const handleInactiveToolCall = async (input, operations, state) => {
334
374
  return await handleRegistrationToolCall(input, operations, state);
335
375
  };
336
376
  // #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP dispatcher awaits the selected state-dependent Promise callback.
337
- const handleToolCall = async (input, operations, state) => {
377
+ const handleToolCall = async (input, operations, state, role) => {
378
+ if (!mayInvokeHarnessTool(role, input.name)) {
379
+ return toolNotFound(input.name);
380
+ }
338
381
  if (input.name === STATUS_TOOL) {
339
382
  return await handleStatusToolCall(input, operations);
340
383
  }
@@ -343,61 +386,137 @@ const handleToolCall = async (input, operations, state) => {
343
386
  }
344
387
  return await handleActiveToolCall(input, operations);
345
388
  };
346
- /**
347
- * Keep schema and operation failures on the JSON-RPC error channel.
348
- *
349
- * The high-level SDK tool dispatcher intentionally converts every thrown tool
350
- * callback error into an `isError` result. This boundary instead uses the
351
- * official low-level `tools/call` handler so malformed input and accepted
352
- * domain failures retain their distinct protocol codes and closed data.
353
- * @param server Official MCP server that owns the low-level request handler.
354
- * @param operations Closed daemon operations exposed through the tool catalog.
355
- * @param state Shared registration state controlling active tool visibility.
356
- */
357
- const installToolCallHandler = (server, operations, state) => {
358
- server.server.setRequestHandler("tools/call", (request, context) => handleToolCall({
359
- name: request.params.name,
360
- toolArguments: request.params.arguments ?? {},
361
- signal: context.mcpReq.signal,
362
- }, operations, state));
389
+ const ownerEventDescriptions = {
390
+ event_subscription_status: "Inspect the runtime consumer and stalled delivery without exposing callback credentials.",
391
+ revoke_event_subscription: "Release the active runtime consumer. Pending inbox items remain unread.",
392
+ resume_event_subscription: "Resume transient callback retries. Terminal rejection requires revocation and reconfiguration.",
393
+ };
394
+ const ownerEventTools = [
395
+ "event_subscription_status",
396
+ "revoke_event_subscription",
397
+ "resume_event_subscription",
398
+ ];
399
+ const ownerEventOperation = (events, name) => {
400
+ switch (name) {
401
+ case "event_subscription_status":
402
+ return events.status;
403
+ case "revoke_event_subscription":
404
+ return events.revoke.pipe(Effect.as({}));
405
+ case "resume_event_subscription":
406
+ return events.resume.pipe(Effect.as({}));
407
+ default:
408
+ return undefined;
409
+ }
410
+ };
411
+ // #ignore-sloppy-code-next-line[async-keyword]: The MCP edge validates its Promise-native tool schema before running the owner operation.
412
+ const handleOwnerOperation = async (operation, input) => {
413
+ await decodeToolInput(emptyInput, input.toolArguments, input.name);
414
+ return toolResult(await runEventOperation(operation, input.signal));
363
415
  };
364
- const makeServer = (options, state) => {
365
- const server = new McpServer(options.implementation, {
366
- capabilities: {
367
- experimental: {
368
- [HARNESS_EVENTS_EXTENSION]: {},
369
- },
370
- },
416
+ /** Schema failures and refused operations stay on the JSON-RPC error channel. */
417
+ const installToolCallHandler = (server, operations, state, authority) => {
418
+ server.server.setRequestHandler("tools/call", (request, context) => {
419
+ const input = {
420
+ name: request.params.name,
421
+ toolArguments: request.params.arguments ?? {},
422
+ metadata: context.mcpReq._meta,
423
+ signal: context.mcpReq.signal,
424
+ };
425
+ const ownerOperation = ownerEventOperation(authority.events, input.name);
426
+ if (authority.role === "owner" && ownerOperation !== undefined) {
427
+ return handleOwnerOperation(ownerOperation, input);
428
+ }
429
+ return handleToolCall(input, operations, state, authority.role);
371
430
  });
372
- registerStatusTool(server, options.operations);
431
+ };
432
+ const registerOwnerEvents = (server) => {
433
+ for (const name of ownerEventTools) {
434
+ server.registerTool(name, {
435
+ description: ownerEventDescriptions[name],
436
+ inputSchema: emptyInput,
437
+ ...(name === "event_subscription_status"
438
+ ? { outputSchema: makeStandardSchema(webhookStatusJsonSchema) }
439
+ : {}),
440
+ }, () => toolResult({}));
441
+ }
442
+ };
443
+ const runtimeOperations = (operations, events) => ({
444
+ ...operations,
445
+ acknowledgeDelivery: (token) => operations
446
+ .acknowledgeDelivery(token)
447
+ .pipe(Effect.tap(() => Effect.sync(() => events.notifyPending()))),
448
+ });
449
+ const makeServer = (options, state, events, role) => {
450
+ const capabilities = { tools: {}, events: {} };
451
+ const server = new McpServer(options.implementation, { capabilities });
452
+ if (role !== "runtime") {
453
+ registerStatusTool(server, options.operations);
454
+ }
455
+ if (role === "owner") {
456
+ registerOwnerEvents(server);
457
+ }
373
458
  if (state.active) {
374
- registerActiveTools(server, options.operations);
459
+ registerActiveTools(server, options.operations, role);
375
460
  }
376
- else {
461
+ else if (role !== "runtime") {
377
462
  registerRegistrationTool(server, options.operations, state);
378
463
  }
379
- installToolCallHandler(server, options.operations, state);
464
+ installToolCallHandler(server, runtimeOperations(options.operations, events), state, { role, events });
465
+ events.install(server.server, role === "local" ? undefined : role);
380
466
  return server;
381
467
  };
382
- /**
383
- * Create one state-dependent official MCP handler and message listener.
384
- * @param options Closed daemon operations and lifecycle callbacks.
385
- * @returns Handler whose catalog transitions in place after registration.
386
- */
387
- export const makeHarnessMcpHttpHandler = (options) => options.operations.readStatus().pipe(Effect.map((status) => {
388
- const state = { active: status.kind === "active" };
389
- const delegate = createMcpHandler(() => makeServer(options, state), {
390
- legacy: "reject",
391
- responseMode: "json",
392
- onerror: options.onerror,
393
- });
394
- return makeHarnessMcpSubscriptionHandler({
395
- delegate,
396
- implementation: options.implementation,
397
- onActiveChange: options.onSubscriptionActiveChange,
398
- onerror: options.onerror,
468
+ const officialHandler = (options, state, events) => createMcpHandler((context) => {
469
+ const request = context.requestInfo;
470
+ if (request === undefined) {
471
+ throw new ProtocolError(-32012, "Authentication required");
472
+ }
473
+ const role = authenticateHarnessRequest(request, options.credentials);
474
+ if (role === undefined) {
475
+ throw new ProtocolError(-32012, "Authentication required");
476
+ }
477
+ return makeServer(options, state, events, role);
478
+ }, { legacy: "reject", responseMode: "auto", onerror: options.onerror });
479
+ const guardedHandler = (options, delegate, events, scope) => ({
480
+ ...delegate,
481
+ hasActiveSubscription: events.hasActiveSubscription,
482
+ notifyPending: events.notifyPending,
483
+ fetch: (request, requestOptions) => authenticateHarnessRequest(request, options.credentials) === undefined
484
+ ? Promise.resolve(new Response("Unauthorized", {
485
+ status: 401,
486
+ headers: { "www-authenticate": "Bearer" },
487
+ }))
488
+ : delegate.fetch(request, requestOptions),
489
+ close: () => Effect.runPromise(events.close.pipe(Effect.ensuring(Effect.tryPromise(() => delegate.close()).pipe(Effect.ignore)), Effect.ensuring(Scope.close(scope, Exit.void)))),
490
+ });
491
+ const acquireWebhook = (options, scope, gate) => Effect.gen(function* () {
492
+ if (options.credentials === undefined || options.eventStore === undefined) {
493
+ return undefined;
494
+ }
495
+ const context = yield* Layer.buildWithScope(webhookHttpClientLayer, scope);
496
+ return yield* makeWebhookEvents(options.eventStore, gate).pipe(Effect.provide(context), Effect.mapError(() => ({ reason: "persistence-failed" })));
497
+ });
498
+ const acquireHandler = (options, state, scope) => Effect.gen(function* () {
499
+ const gate = yield* Effect.makeSemaphore(1);
500
+ const webhook = yield* acquireWebhook(options, scope, gate);
501
+ const events = yield* makeHarnessEvents({
502
+ ...(webhook === undefined ? {} : { webhook }),
503
+ summary: options.operations.readInboxSummary,
504
+ registered: () => state.active,
505
+ gate,
399
506
  keepAliveMillis: options.keepAliveMillis,
507
+ onActiveChange: options.onSubscriptionActiveChange,
400
508
  });
401
- }));
509
+ return guardedHandler(options, officialHandler(options, state, events), events, scope);
510
+ });
511
+ /**
512
+ * Create one official MCP handler with explicit event resource ownership.
513
+ * @param options Daemon operations, optional credentials and callback persistence.
514
+ * @returns Handler whose catalog changes in place after registration.
515
+ */
516
+ export const makeHarnessMcpHttpHandler = (options) => Effect.gen(function* () {
517
+ const status = yield* options.operations.readStatus();
518
+ const scope = yield* Scope.make();
519
+ return yield* acquireHandler(options, { active: status.kind === "active" }, scope).pipe(Effect.onError(() => Scope.close(scope, Exit.void)));
520
+ }).pipe(Effect.withSpan("makeHarnessMcpHttpHandler"));
402
521
  /* eslint-enable agent-code-guard/async-keyword -- Restore repository defaults after the MCP boundary. */
403
- //# sourceMappingURL=harness-mcp-wire.js.map
522
+ //# sourceMappingURL=tools.js.map