@moltzap/client 2026.1002.0 → 2026.1005.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 (515) hide show
  1. package/NOTICE +1 -6
  2. package/README.md +2 -2
  3. package/bin/moltzapd +2 -2
  4. package/dist/{harness-mcp-contract.d.ts → delivery/history-export.d.ts} +96 -136
  5. package/dist/delivery/history-export.d.ts.map +1 -0
  6. package/dist/{daemon/runtime → delivery}/history-export.js +36 -3
  7. package/dist/delivery/history-export.js.map +1 -0
  8. package/dist/delivery/host-delivery.d.ts +51 -0
  9. package/dist/delivery/host-delivery.d.ts.map +1 -0
  10. package/dist/delivery/host-delivery.js +109 -0
  11. package/dist/delivery/host-delivery.js.map +1 -0
  12. package/dist/delivery/inbox.d.ts +142 -0
  13. package/dist/delivery/inbox.d.ts.map +1 -0
  14. package/dist/delivery/inbox.js +130 -0
  15. package/dist/delivery/inbox.js.map +1 -0
  16. package/dist/delivery/index.d.ts +4 -0
  17. package/dist/delivery/index.d.ts.map +1 -0
  18. package/dist/delivery/index.js +4 -0
  19. package/dist/delivery/index.js.map +1 -0
  20. package/dist/delivery/operations.d.ts +787 -0
  21. package/dist/delivery/operations.d.ts.map +1 -0
  22. package/dist/delivery/operations.js +162 -0
  23. package/dist/delivery/operations.js.map +1 -0
  24. package/dist/delivery/pass.d.ts +91 -0
  25. package/dist/delivery/pass.d.ts.map +1 -0
  26. package/dist/{daemon/runtime/pending-delivery.js → delivery/pass.js} +61 -34
  27. package/dist/delivery/pass.js.map +1 -0
  28. package/dist/delivery/send-invocations.d.ts +106 -0
  29. package/dist/delivery/send-invocations.d.ts.map +1 -0
  30. package/dist/delivery/send-invocations.js +109 -0
  31. package/dist/delivery/send-invocations.js.map +1 -0
  32. package/dist/endpoint/harness-endpoint/capability.d.ts +39 -0
  33. package/dist/endpoint/harness-endpoint/capability.d.ts.map +1 -0
  34. package/dist/endpoint/harness-endpoint/capability.js +9 -0
  35. package/dist/endpoint/harness-endpoint/capability.js.map +1 -0
  36. package/dist/endpoint/harness-endpoint/events.d.ts +12 -0
  37. package/dist/endpoint/harness-endpoint/events.d.ts.map +1 -0
  38. package/dist/endpoint/harness-endpoint/events.js +199 -0
  39. package/dist/endpoint/harness-endpoint/events.js.map +1 -0
  40. package/dist/{client-runtime.d.ts → endpoint/harness-endpoint/index.d.ts} +4 -2
  41. package/dist/endpoint/harness-endpoint/index.d.ts.map +1 -0
  42. package/dist/{client-runtime.js → endpoint/harness-endpoint/index.js} +115 -115
  43. package/dist/endpoint/harness-endpoint/index.js.map +1 -0
  44. package/dist/endpoint/implementation.d.ts +4 -0
  45. package/dist/endpoint/implementation.d.ts.map +1 -0
  46. package/dist/endpoint/implementation.js +5 -0
  47. package/dist/endpoint/implementation.js.map +1 -0
  48. package/dist/endpoint/mcp/auth.d.ts +31 -0
  49. package/dist/endpoint/mcp/auth.d.ts.map +1 -0
  50. package/dist/endpoint/mcp/auth.js +42 -0
  51. package/dist/endpoint/mcp/auth.js.map +1 -0
  52. package/dist/endpoint/mcp/event-schemas.d.ts +151 -0
  53. package/dist/endpoint/mcp/event-schemas.d.ts.map +1 -0
  54. package/dist/endpoint/mcp/event-schemas.js +72 -0
  55. package/dist/endpoint/mcp/event-schemas.js.map +1 -0
  56. package/dist/endpoint/mcp/event-signing.d.ts +62 -0
  57. package/dist/endpoint/mcp/event-signing.d.ts.map +1 -0
  58. package/dist/endpoint/mcp/event-signing.js +185 -0
  59. package/dist/endpoint/mcp/event-signing.js.map +1 -0
  60. package/dist/endpoint/mcp/events.d.ts +45 -0
  61. package/dist/endpoint/mcp/events.d.ts.map +1 -0
  62. package/dist/endpoint/mcp/events.js +308 -0
  63. package/dist/endpoint/mcp/events.js.map +1 -0
  64. package/dist/{harness-mcp-http.d.ts → endpoint/mcp/http.d.ts} +1 -1
  65. package/dist/endpoint/mcp/http.d.ts.map +1 -0
  66. package/dist/{harness-mcp-http.js → endpoint/mcp/http.js} +1 -1
  67. package/dist/endpoint/mcp/http.js.map +1 -0
  68. package/dist/endpoint/mcp/index.d.ts +10 -0
  69. package/dist/endpoint/mcp/index.d.ts.map +1 -0
  70. package/dist/endpoint/mcp/index.js +8 -0
  71. package/dist/endpoint/mcp/index.js.map +1 -0
  72. package/dist/endpoint/mcp/names.d.ts +18 -0
  73. package/dist/endpoint/mcp/names.d.ts.map +1 -0
  74. package/dist/endpoint/mcp/names.js +18 -0
  75. package/dist/endpoint/mcp/names.js.map +1 -0
  76. package/dist/{management-runtime.d.ts → endpoint/mcp/owner-tools.d.ts} +7 -7
  77. package/dist/endpoint/mcp/owner-tools.d.ts.map +1 -0
  78. package/dist/{management-runtime.js → endpoint/mcp/owner-tools.js} +2 -4
  79. package/dist/endpoint/mcp/owner-tools.js.map +1 -0
  80. package/dist/endpoint/mcp/schemas.d.ts +42 -0
  81. package/dist/endpoint/mcp/schemas.d.ts.map +1 -0
  82. package/dist/endpoint/mcp/schemas.js +89 -0
  83. package/dist/endpoint/mcp/schemas.js.map +1 -0
  84. package/dist/{harness-mcp-wire.d.ts → endpoint/mcp/tools.d.ts} +17 -14
  85. package/dist/endpoint/mcp/tools.d.ts.map +1 -0
  86. package/dist/{harness-mcp-wire.js → endpoint/mcp/tools.js} +230 -110
  87. package/dist/endpoint/mcp/tools.js.map +1 -0
  88. package/dist/endpoint/mcp/webhook.d.ts +15 -0
  89. package/dist/endpoint/mcp/webhook.d.ts.map +1 -0
  90. package/dist/endpoint/mcp/webhook.js +359 -0
  91. package/dist/endpoint/mcp/webhook.js.map +1 -0
  92. package/dist/identity/credentials.d.ts +46 -0
  93. package/dist/identity/credentials.d.ts.map +1 -0
  94. package/dist/identity/credentials.js +55 -0
  95. package/dist/identity/credentials.js.map +1 -0
  96. package/dist/identity/index.d.ts +4 -0
  97. package/dist/identity/index.d.ts.map +1 -0
  98. package/dist/identity/index.js +4 -0
  99. package/dist/identity/index.js.map +1 -0
  100. package/dist/index.d.ts +21 -4
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +23 -5
  103. package/dist/index.js.map +1 -1
  104. package/dist/{contract.types-check.d.ts → index.types-check.d.ts} +12 -7
  105. package/dist/index.types-check.d.ts.map +1 -0
  106. package/dist/{contract.types-check.js → index.types-check.js} +6 -5
  107. package/dist/index.types-check.js.map +1 -0
  108. package/dist/{daemon/runtime/activation.d.ts → service/activation/index.d.ts} +11 -13
  109. package/dist/service/activation/index.d.ts.map +1 -0
  110. package/dist/{daemon/runtime/activation.js → service/activation/index.js} +3 -3
  111. package/dist/service/activation/index.js.map +1 -0
  112. package/dist/{daemon/configuration.d.ts → service/bootstrap.d.ts} +9 -17
  113. package/dist/service/bootstrap.d.ts.map +1 -0
  114. package/dist/service/bootstrap.js +6 -0
  115. package/dist/service/bootstrap.js.map +1 -0
  116. package/dist/service/configuration.d.ts +13 -0
  117. package/dist/service/configuration.d.ts.map +1 -0
  118. package/dist/service/configuration.js +75 -0
  119. package/dist/service/configuration.js.map +1 -0
  120. package/dist/{daemon/runtime → service}/controller.d.ts +9 -7
  121. package/dist/service/controller.d.ts.map +1 -0
  122. package/dist/service/controller.js +106 -0
  123. package/dist/service/controller.js.map +1 -0
  124. package/dist/{server.d.ts → service/index.d.ts} +7 -4
  125. package/dist/service/index.d.ts.map +1 -0
  126. package/dist/{server.js → service/index.js} +17 -15
  127. package/dist/service/index.js.map +1 -0
  128. package/dist/{server.types-check.d.ts → service/index.types-check.d.ts} +7 -7
  129. package/dist/service/index.types-check.d.ts.map +1 -0
  130. package/dist/{server.types-check.js → service/index.types-check.js} +1 -1
  131. package/dist/service/index.types-check.js.map +1 -0
  132. package/dist/{daemon/runtime/index.d.ts → service/lifecycle.d.ts} +4 -4
  133. package/dist/service/lifecycle.d.ts.map +1 -0
  134. package/dist/{daemon/runtime/index.js → service/lifecycle.js} +29 -26
  135. package/dist/service/lifecycle.js.map +1 -0
  136. package/dist/{daemon → service}/management.d.ts +3 -3
  137. package/dist/service/management.d.ts.map +1 -0
  138. package/dist/{daemon → service}/management.js +4 -14
  139. package/dist/service/management.js.map +1 -0
  140. package/dist/{daemon/registration.d.ts → service/registration/index.d.ts} +3 -3
  141. package/dist/service/registration/index.d.ts.map +1 -0
  142. package/dist/{daemon/registration.js → service/registration/index.js} +2 -3
  143. package/dist/service/registration/index.js.map +1 -0
  144. package/dist/{daemon/runtime/protocol.d.ts → service/supervision.d.ts} +17 -25
  145. package/dist/service/supervision.d.ts.map +1 -0
  146. package/dist/{daemon/runtime/protocol.js → service/supervision.js} +34 -37
  147. package/dist/service/supervision.js.map +1 -0
  148. package/dist/store/anchors.d.ts.map +1 -0
  149. package/dist/store/anchors.js.map +1 -0
  150. package/dist/store/database/index.d.ts.map +1 -0
  151. package/dist/store/database/index.js.map +1 -0
  152. package/dist/store/database/schema.d.ts.map +1 -0
  153. package/dist/{endpoint/store → store}/database/schema.js +42 -6
  154. package/dist/store/database/schema.js.map +1 -0
  155. package/dist/store/database/values.d.ts.map +1 -0
  156. package/dist/store/database/values.js.map +1 -0
  157. package/dist/store/inbox.d.ts +86 -0
  158. package/dist/store/inbox.d.ts.map +1 -0
  159. package/dist/store/inbox.js +269 -0
  160. package/dist/store/inbox.js.map +1 -0
  161. package/dist/store/index.d.ts +12 -0
  162. package/dist/store/index.d.ts.map +1 -0
  163. package/dist/store/index.js +8 -0
  164. package/dist/store/index.js.map +1 -0
  165. package/dist/{endpoint/store → store/queues}/deliveries.d.ts +9 -1
  166. package/dist/store/queues/deliveries.d.ts.map +1 -0
  167. package/dist/{endpoint/store → store/queues}/deliveries.js +19 -3
  168. package/dist/store/queues/deliveries.js.map +1 -0
  169. package/dist/{endpoint/store → store/queues}/dissemination.d.ts +4 -2
  170. package/dist/store/queues/dissemination.d.ts.map +1 -0
  171. package/dist/{endpoint/store → store/queues}/dissemination.js +5 -4
  172. package/dist/store/queues/dissemination.js.map +1 -0
  173. package/dist/store/queues/index.d.ts +5 -0
  174. package/dist/store/queues/index.d.ts.map +1 -0
  175. package/dist/store/queues/index.js +7 -0
  176. package/dist/store/queues/index.js.map +1 -0
  177. package/dist/{endpoint/store → store/queues}/outbound.d.ts +1 -1
  178. package/dist/store/queues/outbound.d.ts.map +1 -0
  179. package/dist/{endpoint/store → store/queues}/outbound.js +1 -1
  180. package/dist/store/queues/outbound.js.map +1 -0
  181. package/dist/{endpoint/store/management.d.ts → store/reads.d.ts} +1 -1
  182. package/dist/store/reads.d.ts.map +1 -0
  183. package/dist/{endpoint/store/management.js → store/reads.js} +2 -4
  184. package/dist/store/reads.js.map +1 -0
  185. package/dist/store/records.d.ts.map +1 -0
  186. package/dist/{endpoint/store → store}/records.js +1 -2
  187. package/dist/store/records.js.map +1 -0
  188. package/dist/store/rows/index.d.ts.map +1 -0
  189. package/dist/store/rows/index.js.map +1 -0
  190. package/dist/store/runtime-codec.d.ts +17 -0
  191. package/dist/store/runtime-codec.d.ts.map +1 -0
  192. package/dist/store/runtime-codec.js +32 -0
  193. package/dist/store/runtime-codec.js.map +1 -0
  194. package/dist/{endpoint/store/index.d.ts → store/store.d.ts} +2 -2
  195. package/dist/store/store.d.ts.map +1 -0
  196. package/dist/{endpoint/store/index.js → store/store.js} +34 -7
  197. package/dist/store/store.js.map +1 -0
  198. package/dist/{endpoint/store → store}/types.d.ts +41 -0
  199. package/dist/store/types.d.ts.map +1 -0
  200. package/dist/store/types.js.map +1 -0
  201. package/dist/transport/collectives/answer-formats.d.ts +21 -0
  202. package/dist/transport/collectives/answer-formats.d.ts.map +1 -0
  203. package/dist/transport/collectives/answer-formats.js +127 -0
  204. package/dist/transport/collectives/answer-formats.js.map +1 -0
  205. package/dist/transport/collectives/failures.d.ts +34 -0
  206. package/dist/transport/collectives/failures.d.ts.map +1 -0
  207. package/dist/transport/collectives/failures.js +40 -0
  208. package/dist/transport/collectives/failures.js.map +1 -0
  209. package/dist/transport/collectives/forms.d.ts +260 -0
  210. package/dist/transport/collectives/forms.d.ts.map +1 -0
  211. package/dist/transport/collectives/forms.js +214 -0
  212. package/dist/transport/collectives/forms.js.map +1 -0
  213. package/dist/transport/collectives/inbound.d.ts +129 -0
  214. package/dist/transport/collectives/inbound.d.ts.map +1 -0
  215. package/dist/transport/collectives/inbound.js +81 -0
  216. package/dist/transport/collectives/inbound.js.map +1 -0
  217. package/dist/transport/collectives/index.d.ts +10 -0
  218. package/dist/transport/collectives/index.d.ts.map +1 -0
  219. package/dist/transport/collectives/index.js +8 -0
  220. package/dist/transport/collectives/index.js.map +1 -0
  221. package/dist/{message-text.d.ts → transport/collectives/message-text.d.ts} +8 -4
  222. package/dist/transport/collectives/message-text.d.ts.map +1 -0
  223. package/dist/{message-text.js → transport/collectives/message-text.js} +23 -47
  224. package/dist/transport/collectives/message-text.js.map +1 -0
  225. package/dist/{endpoint/collective → transport/collectives}/operation.d.ts +35 -24
  226. package/dist/transport/collectives/operation.d.ts.map +1 -0
  227. package/dist/{endpoint/collective → transport/collectives}/operation.js +70 -105
  228. package/dist/transport/collectives/operation.js.map +1 -0
  229. package/dist/transport/collectives/part/grammar.d.ts +175 -0
  230. package/dist/transport/collectives/part/grammar.d.ts.map +1 -0
  231. package/dist/transport/collectives/part/grammar.js +222 -0
  232. package/dist/transport/collectives/part/grammar.js.map +1 -0
  233. package/dist/{endpoint/collective/wire.d.ts → transport/collectives/part/index.d.ts} +38 -51
  234. package/dist/transport/collectives/part/index.d.ts.map +1 -0
  235. package/dist/{endpoint/collective/wire.js → transport/collectives/part/index.js} +20 -122
  236. package/dist/transport/collectives/part/index.js.map +1 -0
  237. package/dist/{endpoint/collective → transport/collectives}/received-request.d.ts +2 -1
  238. package/dist/transport/collectives/received-request.d.ts.map +1 -0
  239. package/dist/transport/collectives/received-request.js.map +1 -0
  240. package/dist/transport/collectives/render.d.ts +40 -0
  241. package/dist/transport/collectives/render.d.ts.map +1 -0
  242. package/dist/transport/collectives/render.js +74 -0
  243. package/dist/transport/collectives/render.js.map +1 -0
  244. package/dist/{endpoint/collective → transport/collectives}/request-sends.d.ts +3 -2
  245. package/dist/transport/collectives/request-sends.d.ts.map +1 -0
  246. package/dist/transport/collectives/request-sends.js.map +1 -0
  247. package/dist/{endpoint/collective → transport/collectives}/shared-answers.d.ts +4 -3
  248. package/dist/transport/collectives/shared-answers.d.ts.map +1 -0
  249. package/dist/transport/collectives/shared-answers.js.map +1 -0
  250. package/dist/transport/collectives/validation.d.ts +31 -0
  251. package/dist/transport/collectives/validation.d.ts.map +1 -0
  252. package/dist/transport/collectives/validation.js +239 -0
  253. package/dist/transport/collectives/validation.js.map +1 -0
  254. package/dist/{endpoint/addressing/index.d.ts → transport/messaging/address.d.ts} +7 -4
  255. package/dist/transport/messaging/address.d.ts.map +1 -0
  256. package/dist/{endpoint/addressing/index.js → transport/messaging/address.js} +30 -26
  257. package/dist/transport/messaging/address.js.map +1 -0
  258. package/dist/{endpoint/protocol/index.d.ts → transport/messaging/certification.d.ts} +4 -4
  259. package/dist/transport/messaging/certification.d.ts.map +1 -0
  260. package/dist/{endpoint/protocol/index.js → transport/messaging/certification.js} +15 -10
  261. package/dist/transport/messaging/certification.js.map +1 -0
  262. package/dist/{endpoint/engine-dissemination.d.ts → transport/messaging/dissemination.d.ts} +3 -3
  263. package/dist/transport/messaging/dissemination.d.ts.map +1 -0
  264. package/dist/{endpoint/engine-dissemination.js → transport/messaging/dissemination.js} +7 -6
  265. package/dist/transport/messaging/dissemination.js.map +1 -0
  266. package/dist/transport/messaging/errors.d.ts +50 -0
  267. package/dist/transport/messaging/errors.d.ts.map +1 -0
  268. package/dist/transport/messaging/errors.js +64 -0
  269. package/dist/transport/messaging/errors.js.map +1 -0
  270. package/dist/{endpoint/protocol → transport/messaging}/evidence.d.ts +3 -3
  271. package/dist/transport/messaging/evidence.d.ts.map +1 -0
  272. package/dist/{endpoint/protocol → transport/messaging}/evidence.js +1 -1
  273. package/dist/transport/messaging/evidence.js.map +1 -0
  274. package/dist/{endpoint/engine.d.ts → transport/messaging/index.d.ts} +4 -4
  275. package/dist/transport/messaging/index.d.ts.map +1 -0
  276. package/dist/{endpoint/engine.js → transport/messaging/index.js} +25 -9
  277. package/dist/transport/messaging/index.js.map +1 -0
  278. package/dist/transport/messaging/message.d.ts +112 -0
  279. package/dist/transport/messaging/message.d.ts.map +1 -0
  280. package/dist/transport/messaging/message.js +38 -0
  281. package/dist/transport/messaging/message.js.map +1 -0
  282. package/dist/{endpoint/recovery → transport/messaging}/reanchor/empty.d.ts +5 -5
  283. package/dist/transport/messaging/reanchor/empty.d.ts.map +1 -0
  284. package/dist/{endpoint/recovery → transport/messaging}/reanchor/empty.js +3 -3
  285. package/dist/transport/messaging/reanchor/empty.js.map +1 -0
  286. package/dist/{endpoint/recovery → transport/messaging}/reanchor/index.d.ts +3 -3
  287. package/dist/transport/messaging/reanchor/index.d.ts.map +1 -0
  288. package/dist/{endpoint/recovery → transport/messaging}/reanchor/index.js +27 -12
  289. package/dist/transport/messaging/reanchor/index.js.map +1 -0
  290. package/dist/{endpoint/engine-durability.d.ts → transport/messaging/records/index.d.ts} +9 -6
  291. package/dist/transport/messaging/records/index.d.ts.map +1 -0
  292. package/dist/{endpoint/engine-durability.js → transport/messaging/records/index.js} +9 -15
  293. package/dist/transport/messaging/records/index.js.map +1 -0
  294. package/dist/{endpoint → transport/messaging}/recovery/barrier.d.ts +1 -1
  295. package/dist/transport/messaging/recovery/barrier.d.ts.map +1 -0
  296. package/dist/transport/messaging/recovery/barrier.js.map +1 -0
  297. package/dist/{endpoint/recovery/store-evidence.d.ts → transport/messaging/recovery/evidence.d.ts} +5 -5
  298. package/dist/transport/messaging/recovery/evidence.d.ts.map +1 -0
  299. package/dist/{endpoint/recovery/store-evidence.js → transport/messaging/recovery/evidence.js} +3 -3
  300. package/dist/transport/messaging/recovery/evidence.js.map +1 -0
  301. package/dist/{endpoint → transport/messaging}/recovery/index.d.ts +4 -4
  302. package/dist/transport/messaging/recovery/index.d.ts.map +1 -0
  303. package/dist/{endpoint → transport/messaging}/recovery/index.js +41 -32
  304. package/dist/transport/messaging/recovery/index.js.map +1 -0
  305. package/dist/{endpoint/recovery/store.d.ts → transport/messaging/recovery/persistence.d.ts} +5 -5
  306. package/dist/transport/messaging/recovery/persistence.d.ts.map +1 -0
  307. package/dist/{endpoint/recovery/store.js → transport/messaging/recovery/persistence.js} +4 -4
  308. package/dist/transport/messaging/recovery/persistence.js.map +1 -0
  309. package/dist/{endpoint/recovery/state.d.ts → transport/messaging/recovery-session/index.d.ts} +6 -6
  310. package/dist/transport/messaging/recovery-session/index.d.ts.map +1 -0
  311. package/dist/{endpoint/recovery/state.js → transport/messaging/recovery-session/index.js} +3 -3
  312. package/dist/transport/messaging/recovery-session/index.js.map +1 -0
  313. package/dist/{endpoint/engine-types.d.ts → transport/messaging/runtime/index.d.ts} +22 -5
  314. package/dist/transport/messaging/runtime/index.d.ts.map +1 -0
  315. package/dist/{endpoint/engine-types.js → transport/messaging/runtime/index.js} +1 -1
  316. package/dist/transport/messaging/runtime/index.js.map +1 -0
  317. package/dist/{endpoint/engine-send.d.ts → transport/messaging/send.d.ts} +5 -4
  318. package/dist/transport/messaging/send.d.ts.map +1 -0
  319. package/dist/{endpoint/engine-send.js → transport/messaging/send.js} +4 -4
  320. package/dist/transport/messaging/send.js.map +1 -0
  321. package/dist/transport/router/index.d.ts.map +1 -0
  322. package/dist/{endpoint/router-worker → transport/router}/index.js +1 -1
  323. package/dist/transport/router/index.js.map +1 -0
  324. package/dist/transport/router/outage.d.ts.map +1 -0
  325. package/dist/transport/router/outage.js.map +1 -0
  326. package/dist/{endpoint/router-worker → transport/router}/types.d.ts +3 -4
  327. package/dist/transport/router/types.d.ts.map +1 -0
  328. package/dist/transport/router/types.js.map +1 -0
  329. package/dist/{endpoint/representation-canonical.d.ts → transport/wire/encoding/canonical.d.ts} +1 -2
  330. package/dist/transport/wire/encoding/canonical.d.ts.map +1 -0
  331. package/dist/{endpoint/representation-canonical.js → transport/wire/encoding/canonical.js} +2 -2
  332. package/dist/transport/wire/encoding/canonical.js.map +1 -0
  333. package/dist/{endpoint/representation-codec.d.ts → transport/wire/encoding/codec.d.ts} +5 -9
  334. package/dist/transport/wire/encoding/codec.d.ts.map +1 -0
  335. package/dist/{endpoint/representation-codec.js → transport/wire/encoding/codec.js} +7 -27
  336. package/dist/transport/wire/encoding/codec.js.map +1 -0
  337. package/dist/transport/wire/encoding/index.d.ts +4 -0
  338. package/dist/transport/wire/encoding/index.d.ts.map +1 -0
  339. package/dist/transport/wire/encoding/index.js +6 -0
  340. package/dist/transport/wire/encoding/index.js.map +1 -0
  341. package/dist/transport/wire/index.d.ts +6 -0
  342. package/dist/transport/wire/index.d.ts.map +1 -0
  343. package/dist/transport/wire/index.js +9 -0
  344. package/dist/transport/wire/index.js.map +1 -0
  345. package/dist/{endpoint/representation-schemas.d.ts → transport/wire/schemas.d.ts} +76 -98
  346. package/dist/transport/wire/schemas.d.ts.map +1 -0
  347. package/dist/{endpoint/representation-schemas.js → transport/wire/schemas.js} +7 -19
  348. package/dist/transport/wire/schemas.js.map +1 -0
  349. package/dist/transport/wire/values.d.ts +114 -0
  350. package/dist/transport/wire/values.d.ts.map +1 -0
  351. package/dist/transport/wire/values.js +192 -0
  352. package/dist/transport/wire/values.js.map +1 -0
  353. package/dist/{endpoint/representation-verification.d.ts → transport/wire/verification.d.ts} +3 -4
  354. package/dist/transport/wire/verification.d.ts.map +1 -0
  355. package/dist/{endpoint/representation-verification.js → transport/wire/verification.js} +4 -4
  356. package/dist/transport/wire/verification.js.map +1 -0
  357. package/package.json +6 -6
  358. package/dist/client-runtime.d.ts.map +0 -1
  359. package/dist/client-runtime.js.map +0 -1
  360. package/dist/contract.d.ts +0 -721
  361. package/dist/contract.d.ts.map +0 -1
  362. package/dist/contract.js +0 -441
  363. package/dist/contract.js.map +0 -1
  364. package/dist/contract.types-check.d.ts.map +0 -1
  365. package/dist/contract.types-check.js.map +0 -1
  366. package/dist/daemon/configuration.d.ts.map +0 -1
  367. package/dist/daemon/configuration.js +0 -75
  368. package/dist/daemon/configuration.js.map +0 -1
  369. package/dist/daemon/management.d.ts.map +0 -1
  370. package/dist/daemon/management.js.map +0 -1
  371. package/dist/daemon/registration.d.ts.map +0 -1
  372. package/dist/daemon/registration.js.map +0 -1
  373. package/dist/daemon/runtime/activation.d.ts.map +0 -1
  374. package/dist/daemon/runtime/activation.js.map +0 -1
  375. package/dist/daemon/runtime/controller.d.ts.map +0 -1
  376. package/dist/daemon/runtime/controller.js +0 -138
  377. package/dist/daemon/runtime/controller.js.map +0 -1
  378. package/dist/daemon/runtime/history-export.d.ts +0 -33
  379. package/dist/daemon/runtime/history-export.d.ts.map +0 -1
  380. package/dist/daemon/runtime/history-export.js.map +0 -1
  381. package/dist/daemon/runtime/index.d.ts.map +0 -1
  382. package/dist/daemon/runtime/index.js.map +0 -1
  383. package/dist/daemon/runtime/pending-delivery.d.ts +0 -49
  384. package/dist/daemon/runtime/pending-delivery.d.ts.map +0 -1
  385. package/dist/daemon/runtime/pending-delivery.js.map +0 -1
  386. package/dist/daemon/runtime/protocol.d.ts.map +0 -1
  387. package/dist/daemon/runtime/protocol.js.map +0 -1
  388. package/dist/endpoint/addressing/index.d.ts.map +0 -1
  389. package/dist/endpoint/addressing/index.js.map +0 -1
  390. package/dist/endpoint/collective/operation.d.ts.map +0 -1
  391. package/dist/endpoint/collective/operation.js.map +0 -1
  392. package/dist/endpoint/collective/received-request.d.ts.map +0 -1
  393. package/dist/endpoint/collective/received-request.js.map +0 -1
  394. package/dist/endpoint/collective/request-sends.d.ts.map +0 -1
  395. package/dist/endpoint/collective/request-sends.js.map +0 -1
  396. package/dist/endpoint/collective/shared-answers.d.ts.map +0 -1
  397. package/dist/endpoint/collective/shared-answers.js.map +0 -1
  398. package/dist/endpoint/collective/validation.d.ts +0 -49
  399. package/dist/endpoint/collective/validation.d.ts.map +0 -1
  400. package/dist/endpoint/collective/validation.js +0 -97
  401. package/dist/endpoint/collective/validation.js.map +0 -1
  402. package/dist/endpoint/collective/wire.d.ts.map +0 -1
  403. package/dist/endpoint/collective/wire.js.map +0 -1
  404. package/dist/endpoint/engine-dissemination.d.ts.map +0 -1
  405. package/dist/endpoint/engine-dissemination.js.map +0 -1
  406. package/dist/endpoint/engine-durability.d.ts.map +0 -1
  407. package/dist/endpoint/engine-durability.js.map +0 -1
  408. package/dist/endpoint/engine-send.d.ts.map +0 -1
  409. package/dist/endpoint/engine-send.js.map +0 -1
  410. package/dist/endpoint/engine-types.d.ts.map +0 -1
  411. package/dist/endpoint/engine-types.js.map +0 -1
  412. package/dist/endpoint/engine.d.ts.map +0 -1
  413. package/dist/endpoint/engine.js.map +0 -1
  414. package/dist/endpoint/protocol/evidence.d.ts.map +0 -1
  415. package/dist/endpoint/protocol/evidence.js.map +0 -1
  416. package/dist/endpoint/protocol/index.d.ts.map +0 -1
  417. package/dist/endpoint/protocol/index.js.map +0 -1
  418. package/dist/endpoint/recovery/barrier.d.ts.map +0 -1
  419. package/dist/endpoint/recovery/barrier.js.map +0 -1
  420. package/dist/endpoint/recovery/index.d.ts.map +0 -1
  421. package/dist/endpoint/recovery/index.js.map +0 -1
  422. package/dist/endpoint/recovery/reanchor/empty.d.ts.map +0 -1
  423. package/dist/endpoint/recovery/reanchor/empty.js.map +0 -1
  424. package/dist/endpoint/recovery/reanchor/index.d.ts.map +0 -1
  425. package/dist/endpoint/recovery/reanchor/index.js.map +0 -1
  426. package/dist/endpoint/recovery/state.d.ts.map +0 -1
  427. package/dist/endpoint/recovery/state.js.map +0 -1
  428. package/dist/endpoint/recovery/store-evidence.d.ts.map +0 -1
  429. package/dist/endpoint/recovery/store-evidence.js.map +0 -1
  430. package/dist/endpoint/recovery/store.d.ts.map +0 -1
  431. package/dist/endpoint/recovery/store.js.map +0 -1
  432. package/dist/endpoint/representation-canonical.d.ts.map +0 -1
  433. package/dist/endpoint/representation-canonical.js.map +0 -1
  434. package/dist/endpoint/representation-codec.d.ts.map +0 -1
  435. package/dist/endpoint/representation-codec.js.map +0 -1
  436. package/dist/endpoint/representation-schemas.d.ts.map +0 -1
  437. package/dist/endpoint/representation-schemas.js.map +0 -1
  438. package/dist/endpoint/representation-verification.d.ts.map +0 -1
  439. package/dist/endpoint/representation-verification.js.map +0 -1
  440. package/dist/endpoint/representation.d.ts +0 -6
  441. package/dist/endpoint/representation.d.ts.map +0 -1
  442. package/dist/endpoint/representation.js +0 -8
  443. package/dist/endpoint/representation.js.map +0 -1
  444. package/dist/endpoint/router-worker/index.d.ts.map +0 -1
  445. package/dist/endpoint/router-worker/index.js.map +0 -1
  446. package/dist/endpoint/router-worker/outage.d.ts.map +0 -1
  447. package/dist/endpoint/router-worker/outage.js.map +0 -1
  448. package/dist/endpoint/router-worker/types.d.ts.map +0 -1
  449. package/dist/endpoint/router-worker/types.js.map +0 -1
  450. package/dist/endpoint/store/anchors.d.ts.map +0 -1
  451. package/dist/endpoint/store/anchors.js.map +0 -1
  452. package/dist/endpoint/store/database/index.d.ts.map +0 -1
  453. package/dist/endpoint/store/database/index.js.map +0 -1
  454. package/dist/endpoint/store/database/schema.d.ts.map +0 -1
  455. package/dist/endpoint/store/database/schema.js.map +0 -1
  456. package/dist/endpoint/store/database/values.d.ts.map +0 -1
  457. package/dist/endpoint/store/database/values.js.map +0 -1
  458. package/dist/endpoint/store/deliveries.d.ts.map +0 -1
  459. package/dist/endpoint/store/deliveries.js.map +0 -1
  460. package/dist/endpoint/store/dissemination.d.ts.map +0 -1
  461. package/dist/endpoint/store/dissemination.js.map +0 -1
  462. package/dist/endpoint/store/index.d.ts.map +0 -1
  463. package/dist/endpoint/store/index.js.map +0 -1
  464. package/dist/endpoint/store/management.d.ts.map +0 -1
  465. package/dist/endpoint/store/management.js.map +0 -1
  466. package/dist/endpoint/store/outbound.d.ts.map +0 -1
  467. package/dist/endpoint/store/outbound.js.map +0 -1
  468. package/dist/endpoint/store/records.d.ts.map +0 -1
  469. package/dist/endpoint/store/records.js.map +0 -1
  470. package/dist/endpoint/store/rows/index.d.ts.map +0 -1
  471. package/dist/endpoint/store/rows/index.js.map +0 -1
  472. package/dist/endpoint/store/types.d.ts.map +0 -1
  473. package/dist/endpoint/store/types.js.map +0 -1
  474. package/dist/endpoint/store.d.ts +0 -10
  475. package/dist/endpoint/store.d.ts.map +0 -1
  476. package/dist/endpoint/store.js +0 -6
  477. package/dist/endpoint/store.js.map +0 -1
  478. package/dist/harness-mcp-contract.d.ts.map +0 -1
  479. package/dist/harness-mcp-contract.js +0 -113
  480. package/dist/harness-mcp-contract.js.map +0 -1
  481. package/dist/harness-mcp-http.d.ts.map +0 -1
  482. package/dist/harness-mcp-http.js.map +0 -1
  483. package/dist/harness-mcp-subscription.d.ts +0 -30
  484. package/dist/harness-mcp-subscription.d.ts.map +0 -1
  485. package/dist/harness-mcp-subscription.js +0 -361
  486. package/dist/harness-mcp-subscription.js.map +0 -1
  487. package/dist/harness-mcp-wire.d.ts.map +0 -1
  488. package/dist/harness-mcp-wire.js.map +0 -1
  489. package/dist/management-runtime.d.ts.map +0 -1
  490. package/dist/management-runtime.js.map +0 -1
  491. package/dist/message-text.d.ts.map +0 -1
  492. package/dist/message-text.js.map +0 -1
  493. package/dist/server.d.ts.map +0 -1
  494. package/dist/server.js.map +0 -1
  495. package/dist/server.types-check.d.ts.map +0 -1
  496. package/dist/server.types-check.js.map +0 -1
  497. /package/dist/{endpoint/store → store}/anchors.d.ts +0 -0
  498. /package/dist/{endpoint/store → store}/anchors.js +0 -0
  499. /package/dist/{endpoint/store → store}/database/index.d.ts +0 -0
  500. /package/dist/{endpoint/store → store}/database/index.js +0 -0
  501. /package/dist/{endpoint/store → store}/database/schema.d.ts +0 -0
  502. /package/dist/{endpoint/store → store}/database/values.d.ts +0 -0
  503. /package/dist/{endpoint/store → store}/database/values.js +0 -0
  504. /package/dist/{endpoint/store → store}/records.d.ts +0 -0
  505. /package/dist/{endpoint/store → store}/rows/index.d.ts +0 -0
  506. /package/dist/{endpoint/store → store}/rows/index.js +0 -0
  507. /package/dist/{endpoint/store → store}/types.js +0 -0
  508. /package/dist/{endpoint/collective → transport/collectives}/received-request.js +0 -0
  509. /package/dist/{endpoint/collective → transport/collectives}/request-sends.js +0 -0
  510. /package/dist/{endpoint/collective → transport/collectives}/shared-answers.js +0 -0
  511. /package/dist/{endpoint → transport/messaging}/recovery/barrier.js +0 -0
  512. /package/dist/{endpoint/router-worker → transport/router}/index.d.ts +0 -0
  513. /package/dist/{endpoint/router-worker → transport/router}/outage.d.ts +0 -0
  514. /package/dist/{endpoint/router-worker → transport/router}/outage.js +0 -0
  515. /package/dist/{endpoint/router-worker → transport/router}/types.js +0 -0
@@ -0,0 +1,89 @@
1
+ /** @file MCP framing of the harness operations: send metadata 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 { HARNESS_SEND_META_KEY } from "./names.js";
5
+ const exact = {
6
+ exact: true,
7
+ onExcessProperty: "error",
8
+ };
9
+ const exactEmptyObject = Schema.Record({
10
+ key: Schema.String,
11
+ value: Schema.Never,
12
+ }).annotations({ parseOptions: exact });
13
+ const harnessEmptyResultSchema = exactEmptyObject;
14
+ const harnessSendMetadataSchema = Schema.Struct({
15
+ [HARNESS_SEND_META_KEY]: Schema.optionalWith(harnessSendOptionsSchema, {
16
+ exact: true,
17
+ }),
18
+ });
19
+ /** JSON Schema for the runtime inbox pagination arguments. */
20
+ export const harnessReadInboxRequestJsonSchema = JSONSchema.make(inboxRequestSchema, { target: "jsonSchema2020-12" });
21
+ /** JSON Schema for classified inbox pages. */
22
+ export const harnessReadInboxResultJsonSchema = JSONSchema.make(inboxResultSchema, { target: "jsonSchema2020-12" });
23
+ /** JSON Schema for keyed send lookup. */
24
+ export const harnessReadSendRequestJsonSchema = JSONSchema.make(readSendRequestSchema, { target: "jsonSchema2020-12" });
25
+ /** JSON Schema for observed send state. */
26
+ export const harnessReadSendResultJsonSchema = JSONSchema.make(readSendResultSchema, { target: "jsonSchema2020-12" });
27
+ /**
28
+ * Validate semantic arguments separately from runtime-owned send options.
29
+ * Unrelated SDK metadata belongs to the transport and is not interpreted here.
30
+ * @param toolArguments Model-visible arguments.
31
+ * @param metadata The SDK request metadata, if supplied.
32
+ * @returns One validated invocation for the daemon's existing store.
33
+ */
34
+ export function decodeHarnessSendCall(toolArguments, metadata) {
35
+ return Effect.gen(function* () {
36
+ const args = yield* Schema.decodeUnknown(harnessSendArgumentsSchema)(toolArguments);
37
+ const runtime = yield* Schema.decodeUnknown(harnessSendMetadataSchema)(metadata === undefined ? {} : metadata);
38
+ return { ...args, ...runtime[HARNESS_SEND_META_KEY] };
39
+ }).pipe(Effect.withSpan("decodeHarnessSendCall"));
40
+ }
41
+ /** JSON Schema advertised for the delivery acknowledgment operation. */
42
+ export const harnessAcknowledgeDeliveryRequestJsonSchema = JSONSchema.make(harnessAcknowledgeDeliveryRequestSchema, { target: "jsonSchema2020-12" });
43
+ /** JSON Schema advertised for `send_message` arguments. */
44
+ export const harnessSendArgumentsJsonSchema = JSONSchema.make(harnessSendArgumentsSchema, { target: "jsonSchema2020-12" });
45
+ /** JSON Schema advertised for `send_message` results. */
46
+ export const harnessSendResultJsonSchema = JSONSchema.make(harnessSendResultSchema, { target: "jsonSchema2020-12" });
47
+ /** JSON Schema advertised for empty adapter-operation results. */
48
+ export const harnessEmptyResultJsonSchema = JSONSchema.make(harnessEmptyResultSchema, { target: "jsonSchema2020-12" });
49
+ /** Closed wire failure vocabularies prevent internal diagnostics from escaping. */
50
+ export const harnessFailureReasons = {
51
+ RUNTIME_READ_REASONS: new Set([
52
+ "not-registered",
53
+ "invalid-continuation",
54
+ "invalid-event",
55
+ "unknown-event",
56
+ "persistence-failed",
57
+ ]),
58
+ REGISTER_REASONS: new Set([
59
+ "dependency-unavailable",
60
+ "persistence-failed",
61
+ "incompatible-daemon",
62
+ ]),
63
+ STATUS_REASONS: new Set(["persistence-failed", "incompatible-daemon"]),
64
+ SEARCH_AGENTS_REASONS: new Set([
65
+ "not-registered",
66
+ "dependency-unavailable",
67
+ "incompatible-daemon",
68
+ ]),
69
+ SEARCH_CONVERSATIONS_REASONS: new Set([
70
+ "not-registered",
71
+ "invalid-address",
72
+ "persistence-failed",
73
+ ]),
74
+ READ_CONVERSATION_REASONS: new Set([
75
+ "not-registered",
76
+ "invalid-address",
77
+ "unknown-agent",
78
+ "invalid-continuation",
79
+ "history-gap",
80
+ "persistence-failed",
81
+ ]),
82
+ ACKNOWLEDGE_DELIVERY_REASONS: new Set([
83
+ "unknown-delivery",
84
+ "delivery-conflict",
85
+ "persistence-failed",
86
+ "transport-failed",
87
+ ]),
88
+ };
89
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/endpoint/mcp/schemas.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EACL,MAAM,EACN,UAAU,EAEV,MAAM,GAEP,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,uCAAuC,EACvC,0BAA0B,EAC1B,wBAAwB,EAExB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,KAAK,GAA2B;IACpC,KAAK,EAAE,IAAI;IACX,gBAAgB,EAAE,OAAO;CAC1B,CAAC;AAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,KAAK,EAAE,MAAM,CAAC,KAAK;CACpB,CAAC,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;AAExC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAElD,MAAM,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,wBAAwB,EAAE;QACrE,KAAK,EAAE,IAAI;KACZ,CAAC;CACH,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC,IAAI,CAC9D,kBAAkB,EAClB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AACF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gCAAgC,GAAG,UAAU,CAAC,IAAI,CAC7D,iBAAiB,EACjB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AACF,yCAAyC;AACzC,MAAM,CAAC,MAAM,gCAAgC,GAAG,UAAU,CAAC,IAAI,CAC7D,qBAAqB,EACrB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AACF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,+BAA+B,GAAG,UAAU,CAAC,IAAI,CAC5D,oBAAoB,EACpB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAsB,EACtB,QAAiB;IAEjB,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAClE,aAAa,CACd,CAAC;QACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,yBAAyB,CAAC,CACpE,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CACvC,CAAC;QACF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,CAAC;AACpD,CAAC;AAKD,wEAAwE;AACxE,MAAM,CAAC,MAAM,2CAA2C,GAAG,UAAU,CAAC,IAAI,CACxE,uCAAuC,EACvC,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,8BAA8B,GAAG,UAAU,CAAC,IAAI,CAC3D,0BAA0B,EAC1B,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,UAAU,CAAC,IAAI,CACxD,uBAAuB,EACvB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC,IAAI,CACzD,wBAAwB,EACxB,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAChC,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,oBAAoB,EAAE,IAAI,GAAG,CAAC;QAC5B,gBAAgB;QAChB,sBAAsB;QACtB,eAAe;QACf,eAAe;QACf,oBAAoB;KACrB,CAAC;IACF,gBAAgB,EAAE,IAAI,GAAG,CAAC;QACxB,wBAAwB;QACxB,oBAAoB;QACpB,qBAAqB;KACtB,CAAC;IACF,cAAc,EAAE,IAAI,GAAG,CAAC,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;IACtE,qBAAqB,EAAE,IAAI,GAAG,CAAC;QAC7B,gBAAgB;QAChB,wBAAwB;QACxB,qBAAqB;KACtB,CAAC;IACF,4BAA4B,EAAE,IAAI,GAAG,CAAC;QACpC,gBAAgB;QAChB,iBAAiB;QACjB,oBAAoB;KACrB,CAAC;IACF,yBAAyB,EAAE,IAAI,GAAG,CAAC;QACjC,gBAAgB;QAChB,iBAAiB;QACjB,eAAe;QACf,sBAAsB;QACtB,aAAa;QACb,oBAAoB;KACrB,CAAC;IACF,4BAA4B,EAAE,IAAI,GAAG,CAAC;QACpC,kBAAkB;QAClB,mBAAmB;QACnB,oBAAoB;QACpB,kBAAkB;KACnB,CAAC;CACH,CAAC"}
@@ -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;AAgBnB,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;AAuB1B,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,12 @@
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 { HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, HARNESS_READ_EVENT_TOOL, HARNESS_READ_INBOX_TOOL, HARNESS_READ_SEND_TOOL, HARNESS_SEND_TOOL, } from "./names.js";
8
+ import { managementReadConversationRequestSchema, managementReadConversationResultSchema, managementRegisterRequestSchema, managementRegisterResultSchema, managementSearchAgentsRequestSchema, managementSearchAgentsResultSchema, managementSearchConversationsRequestSchema, managementSearchConversationsResultSchema, managementStatusResultSchema, } from "./owner-tools.js";
9
+ import { decodeHarnessSendCall, harnessAcknowledgeDeliveryRequestJsonSchema, harnessEmptyResultJsonSchema, harnessFailureReasons, harnessReadInboxRequestJsonSchema, harnessReadInboxResultJsonSchema, harnessReadSendRequestJsonSchema, harnessReadSendResultJsonSchema, harnessSendArgumentsJsonSchema, harnessSendResultJsonSchema, } from "./schemas.js";
7
10
  /* eslint-disable agent-code-guard/async-keyword -- Official MCP factories and callbacks are Promise-native. */
8
11
  const REGISTER_TOOL = "register";
9
12
  const STATUS_TOOL = "status";
@@ -29,40 +32,17 @@ const searchConversationsInput = makeStandardSchema(makeJsonSchema(managementSea
29
32
  const searchConversationsOutput = makeStandardSchema(makeJsonSchema(managementSearchConversationsResultSchema));
30
33
  const readConversationInput = makeStandardSchema(makeJsonSchema(managementReadConversationRequestSchema));
31
34
  const readConversationOutput = makeStandardSchema(makeJsonSchema(managementReadConversationResultSchema));
32
- const sendInput = makeStandardSchema(harnessSendRequestJsonSchema);
35
+ const sendInput = makeStandardSchema(harnessSendArgumentsJsonSchema);
33
36
  const acknowledgeDeliveryInput = makeStandardSchema(harnessAcknowledgeDeliveryRequestJsonSchema);
34
37
  const emptyOutput = makeStandardSchema(harnessEmptyResultJsonSchema);
35
38
  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
- ]);
39
+ const readEventInput = makeStandardSchema(makeJsonSchema(readEventRequestSchema));
40
+ const readEventOutput = makeStandardSchema(makeJsonSchema(readEventResultSchema));
41
+ const readInboxInput = makeStandardSchema(harnessReadInboxRequestJsonSchema);
42
+ const readInboxOutput = makeStandardSchema(harnessReadInboxResultJsonSchema);
43
+ const readSendInput = makeStandardSchema(harnessReadSendRequestJsonSchema);
44
+ const readSendOutput = makeStandardSchema(harnessReadSendResultJsonSchema);
45
+ const { RUNTIME_READ_REASONS, REGISTER_REASONS, STATUS_REASONS, SEARCH_AGENTS_REASONS, SEARCH_CONVERSATIONS_REASONS, READ_CONVERSATION_REASONS, ACKNOWLEDGE_DELIVERY_REASONS, } = harnessFailureReasons;
66
46
  const operationReason = (cause, allowed, fallback) => {
67
47
  if (typeof cause !== "object" || cause === null || !("reason" in cause)) {
68
48
  return fallback;
@@ -102,27 +82,6 @@ const runOperation = async (options) => {
102
82
  }
103
83
  return toolResult(outcome.value);
104
84
  };
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
85
  // #ignore-sloppy-code-next-line[async-keyword]: MCP tool handlers are Promise callbacks, so this edge awaits Effect before returning the SDK result.
127
86
  const runSendOperation = async (operation, signal) => {
128
87
  const outcome = await Effect.runPromiseExit(operation, { signal });
@@ -182,7 +141,7 @@ const registerRegistrationTool = (server, operations, state) => {
182
141
  return result;
183
142
  });
184
143
  };
185
- const registerReadTools = (server, operations) => {
144
+ const registerSearchAgentsTool = (server, operations) => {
186
145
  server.registerTool(SEARCH_AGENTS_TOOL, { inputSchema: searchAgentsInput, outputSchema: searchAgentsOutput }, (input, context) => runOperation({
187
146
  operation: operations.searchAgents(input),
188
147
  label: "Agent search",
@@ -190,6 +149,9 @@ const registerReadTools = (server, operations) => {
190
149
  fallbackReason: "dependency-unavailable",
191
150
  signal: context.mcpReq.signal,
192
151
  }));
152
+ };
153
+ const registerReadTools = (server, operations) => {
154
+ registerSearchAgentsTool(server, operations);
193
155
  server.registerTool(SEARCH_CONVERSATIONS_TOOL, {
194
156
  inputSchema: searchConversationsInput,
195
157
  outputSchema: searchConversationsOutput,
@@ -211,8 +173,44 @@ const registerReadTools = (server, operations) => {
211
173
  signal: context.mcpReq.signal,
212
174
  }));
213
175
  };
176
+ function registerSendTool(server, operations) {
177
+ server.registerTool(HARNESS_SEND_TOOL, { inputSchema: sendInput, outputSchema: sendOutput }, (input, context) => handleSendToolCall({
178
+ name: HARNESS_SEND_TOOL,
179
+ toolArguments: input,
180
+ metadata: context.mcpReq._meta,
181
+ signal: context.mcpReq.signal,
182
+ }, operations));
183
+ }
184
+ const registerEventReadTool = (server, operations) => {
185
+ server.registerTool(HARNESS_READ_EVENT_TOOL, {
186
+ description: "Read the original full content of a MoltZap event by eventId. This read has no delivery or acknowledgment side effects.",
187
+ inputSchema: readEventInput,
188
+ outputSchema: readEventOutput,
189
+ }, (input, context) => runOperation({
190
+ operation: operations.readEvent(input),
191
+ label: "Event read",
192
+ allowedReasons: RUNTIME_READ_REASONS,
193
+ fallbackReason: "persistence-failed",
194
+ signal: context.mcpReq.signal,
195
+ }));
196
+ };
214
197
  const registerAdapterTools = (server, operations) => {
215
- server.registerTool(HARNESS_SEND_TOOL, { inputSchema: sendInput, outputSchema: sendOutput }, (input, context) => runSendOperation(operations.send(input), context.mcpReq.signal));
198
+ server.registerTool(HARNESS_READ_INBOX_TOOL, { inputSchema: readInboxInput, outputSchema: readInboxOutput }, (input, context) => runOperation({
199
+ operation: operations.readInbox(input),
200
+ label: "Inbox read",
201
+ allowedReasons: RUNTIME_READ_REASONS,
202
+ fallbackReason: "persistence-failed",
203
+ signal: context.mcpReq.signal,
204
+ }));
205
+ server.registerTool(HARNESS_READ_SEND_TOOL, { inputSchema: readSendInput, outputSchema: readSendOutput }, (input, context) => runOperation({
206
+ operation: operations.readSend(input),
207
+ label: "Send lookup",
208
+ allowedReasons: RUNTIME_READ_REASONS,
209
+ fallbackReason: "persistence-failed",
210
+ signal: context.mcpReq.signal,
211
+ }));
212
+ registerSendTool(server, operations);
213
+ registerEventReadTool(server, operations);
216
214
  server.registerTool(HARNESS_ACKNOWLEDGE_DELIVERY_TOOL, { inputSchema: acknowledgeDeliveryInput, outputSchema: emptyOutput }, (input, context) => runVoidOperation({
217
215
  operation: operations.acknowledgeDelivery(input.deliveryToken),
218
216
  label: "Delivery acknowledgment",
@@ -221,7 +219,13 @@ const registerAdapterTools = (server, operations) => {
221
219
  signal: context.mcpReq.signal,
222
220
  }));
223
221
  };
224
- const registerActiveTools = (server, operations) => {
222
+ const registerActiveTools = (server, operations, role) => {
223
+ if (role === "runtime") {
224
+ registerSearchAgentsTool(server, operations);
225
+ registerSendTool(server, operations);
226
+ registerEventReadTool(server, operations);
227
+ return;
228
+ }
225
229
  registerReadTools(server, operations);
226
230
  registerAdapterTools(server, operations);
227
231
  };
@@ -293,11 +297,14 @@ const handleReadConversationToolCall = async (input, operations) => {
293
297
  signal: input.signal,
294
298
  });
295
299
  };
300
+ const decodeInvocationInput = (input, signal) => runEventOperation(input.pipe(Effect.catchTag("ParseError", () => Effect.fail(new ProtocolError(-32602, "Invalid invocation arguments", {
301
+ reason: "content-invalid",
302
+ })))), signal);
296
303
  // #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);
304
+ async function handleSendToolCall(input, operations) {
305
+ const decoded = await decodeInvocationInput(decodeHarnessSendCall(input.toolArguments, input.metadata), input.signal);
299
306
  return await validateToolOutput(sendOutput, await runSendOperation(operations.send(decoded), input.signal), input.name);
300
- };
307
+ }
301
308
  // #ignore-sloppy-code-next-line[async-keyword]: The low-level MCP request handler awaits schema validation and the Promise-native operation bridge.
302
309
  const handleAcknowledgeDeliveryToolCall = async (input, operations) => {
303
310
  const decoded = await decodeToolInput(acknowledgeDeliveryInput, input.toolArguments, input.name);
@@ -309,9 +316,43 @@ const handleAcknowledgeDeliveryToolCall = async (input, operations) => {
309
316
  signal: input.signal,
310
317
  });
311
318
  };
319
+ // #ignore-sloppy-code-next-line[async-keyword]: Runtime read dispatch validates the selected MCP schema before invoking the operation.
320
+ const handleInboxReadToolCall = async (input, operations) => {
321
+ switch (input.name) {
322
+ case HARNESS_READ_EVENT_TOOL:
323
+ return await runValidatedOperation(readEventOutput, input.name, {
324
+ operation: operations.readEvent(await decodeToolInput(readEventInput, input.toolArguments, input.name)),
325
+ label: "Event read",
326
+ allowedReasons: RUNTIME_READ_REASONS,
327
+ fallbackReason: "persistence-failed",
328
+ signal: input.signal,
329
+ });
330
+ case HARNESS_READ_INBOX_TOOL:
331
+ return await runValidatedOperation(readInboxOutput, input.name, {
332
+ operation: operations.readInbox(await decodeToolInput(readInboxInput, input.toolArguments, input.name)),
333
+ label: "Inbox read",
334
+ allowedReasons: RUNTIME_READ_REASONS,
335
+ fallbackReason: "persistence-failed",
336
+ signal: input.signal,
337
+ });
338
+ default:
339
+ return toolNotFound(input.name);
340
+ }
341
+ };
312
342
  // #ignore-sloppy-code-next-line[async-keyword]: Active tool dispatch returns the selected Promise-native MCP operation result.
313
343
  const handleActiveToolCall = async (input, operations) => {
344
+ if ([HARNESS_READ_EVENT_TOOL, HARNESS_READ_INBOX_TOOL].includes(input.name)) {
345
+ return await handleInboxReadToolCall(input, operations);
346
+ }
314
347
  switch (input.name) {
348
+ case HARNESS_READ_SEND_TOOL:
349
+ return await runValidatedOperation(readSendOutput, input.name, {
350
+ operation: operations.readSend(await decodeInvocationInput(decodeHarnessReadSendRequest(input.toolArguments), input.signal)),
351
+ label: "Send lookup",
352
+ allowedReasons: RUNTIME_READ_REASONS,
353
+ fallbackReason: "persistence-failed",
354
+ signal: input.signal,
355
+ });
315
356
  case SEARCH_AGENTS_TOOL:
316
357
  return await handleSearchAgentsToolCall(input, operations);
317
358
  case SEARCH_CONVERSATIONS_TOOL:
@@ -334,7 +375,10 @@ const handleInactiveToolCall = async (input, operations, state) => {
334
375
  return await handleRegistrationToolCall(input, operations, state);
335
376
  };
336
377
  // #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) => {
378
+ const handleToolCall = async (input, operations, state, role) => {
379
+ if (!mayInvokeHarnessTool(role, input.name)) {
380
+ return toolNotFound(input.name);
381
+ }
338
382
  if (input.name === STATUS_TOOL) {
339
383
  return await handleStatusToolCall(input, operations);
340
384
  }
@@ -343,61 +387,137 @@ const handleToolCall = async (input, operations, state) => {
343
387
  }
344
388
  return await handleActiveToolCall(input, operations);
345
389
  };
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));
390
+ const ownerEventDescriptions = {
391
+ event_subscription_status: "Inspect the runtime consumer and stalled delivery without exposing callback credentials.",
392
+ revoke_event_subscription: "Release the active runtime consumer. Pending inbox items remain unread.",
393
+ resume_event_subscription: "Resume transient callback retries. Terminal rejection requires revocation and reconfiguration.",
394
+ };
395
+ const ownerEventTools = [
396
+ "event_subscription_status",
397
+ "revoke_event_subscription",
398
+ "resume_event_subscription",
399
+ ];
400
+ const ownerEventOperation = (events, name) => {
401
+ switch (name) {
402
+ case "event_subscription_status":
403
+ return events.status;
404
+ case "revoke_event_subscription":
405
+ return events.revoke.pipe(Effect.as({}));
406
+ case "resume_event_subscription":
407
+ return events.resume.pipe(Effect.as({}));
408
+ default:
409
+ return undefined;
410
+ }
411
+ };
412
+ // #ignore-sloppy-code-next-line[async-keyword]: The MCP edge validates its Promise-native tool schema before running the owner operation.
413
+ const handleOwnerOperation = async (operation, input) => {
414
+ await decodeToolInput(emptyInput, input.toolArguments, input.name);
415
+ return toolResult(await runEventOperation(operation, input.signal));
363
416
  };
364
- const makeServer = (options, state) => {
365
- const server = new McpServer(options.implementation, {
366
- capabilities: {
367
- experimental: {
368
- [HARNESS_EVENTS_EXTENSION]: {},
369
- },
370
- },
417
+ /** Schema failures and refused operations stay on the JSON-RPC error channel. */
418
+ const installToolCallHandler = (server, operations, state, authority) => {
419
+ server.server.setRequestHandler("tools/call", (request, context) => {
420
+ const input = {
421
+ name: request.params.name,
422
+ toolArguments: request.params.arguments ?? {},
423
+ metadata: context.mcpReq._meta,
424
+ signal: context.mcpReq.signal,
425
+ };
426
+ const ownerOperation = ownerEventOperation(authority.events, input.name);
427
+ if (authority.role === "owner" && ownerOperation !== undefined) {
428
+ return handleOwnerOperation(ownerOperation, input);
429
+ }
430
+ return handleToolCall(input, operations, state, authority.role);
371
431
  });
372
- registerStatusTool(server, options.operations);
432
+ };
433
+ const registerOwnerEvents = (server) => {
434
+ for (const name of ownerEventTools) {
435
+ server.registerTool(name, {
436
+ description: ownerEventDescriptions[name],
437
+ inputSchema: emptyInput,
438
+ ...(name === "event_subscription_status"
439
+ ? { outputSchema: makeStandardSchema(webhookStatusJsonSchema) }
440
+ : {}),
441
+ }, () => toolResult({}));
442
+ }
443
+ };
444
+ const runtimeOperations = (operations, events) => ({
445
+ ...operations,
446
+ acknowledgeDelivery: (token) => operations
447
+ .acknowledgeDelivery(token)
448
+ .pipe(Effect.tap(() => Effect.sync(() => events.notifyPending()))),
449
+ });
450
+ const makeServer = (options, state, events, role) => {
451
+ const capabilities = { tools: {}, events: {} };
452
+ const server = new McpServer(options.implementation, { capabilities });
453
+ if (role !== "runtime") {
454
+ registerStatusTool(server, options.operations);
455
+ }
456
+ if (role === "owner") {
457
+ registerOwnerEvents(server);
458
+ }
373
459
  if (state.active) {
374
- registerActiveTools(server, options.operations);
460
+ registerActiveTools(server, options.operations, role);
375
461
  }
376
- else {
462
+ else if (role !== "runtime") {
377
463
  registerRegistrationTool(server, options.operations, state);
378
464
  }
379
- installToolCallHandler(server, options.operations, state);
465
+ installToolCallHandler(server, runtimeOperations(options.operations, events), state, { role, events });
466
+ events.install(server.server, role === "local" ? undefined : role);
380
467
  return server;
381
468
  };
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,
469
+ const officialHandler = (options, state, events) => createMcpHandler((context) => {
470
+ const request = context.requestInfo;
471
+ if (request === undefined) {
472
+ throw new ProtocolError(-32012, "Authentication required");
473
+ }
474
+ const role = authenticateHarnessRequest(request, options.credentials);
475
+ if (role === undefined) {
476
+ throw new ProtocolError(-32012, "Authentication required");
477
+ }
478
+ return makeServer(options, state, events, role);
479
+ }, { legacy: "reject", responseMode: "auto", onerror: options.onerror });
480
+ const guardedHandler = (options, delegate, events, scope) => ({
481
+ ...delegate,
482
+ hasActiveSubscription: events.hasActiveSubscription,
483
+ notifyPending: events.notifyPending,
484
+ fetch: (request, requestOptions) => authenticateHarnessRequest(request, options.credentials) === undefined
485
+ ? Promise.resolve(new Response("Unauthorized", {
486
+ status: 401,
487
+ headers: { "www-authenticate": "Bearer" },
488
+ }))
489
+ : delegate.fetch(request, requestOptions),
490
+ close: () => Effect.runPromise(events.close.pipe(Effect.ensuring(Effect.tryPromise(() => delegate.close()).pipe(Effect.ignore)), Effect.ensuring(Scope.close(scope, Exit.void)))),
491
+ });
492
+ const acquireWebhook = (options, scope, gate) => Effect.gen(function* () {
493
+ if (options.credentials === undefined || options.eventStore === undefined) {
494
+ return undefined;
495
+ }
496
+ const context = yield* Layer.buildWithScope(webhookHttpClientLayer, scope);
497
+ return yield* makeWebhookEvents(options.eventStore, gate).pipe(Effect.provide(context), Effect.mapError(() => ({ reason: "persistence-failed" })));
498
+ });
499
+ const acquireHandler = (options, state, scope) => Effect.gen(function* () {
500
+ const gate = yield* Effect.makeSemaphore(1);
501
+ const webhook = yield* acquireWebhook(options, scope, gate);
502
+ const events = yield* makeHarnessEvents({
503
+ ...(webhook === undefined ? {} : { webhook }),
504
+ summary: options.operations.readInboxSummary,
505
+ registered: () => state.active,
506
+ gate,
399
507
  keepAliveMillis: options.keepAliveMillis,
508
+ onActiveChange: options.onSubscriptionActiveChange,
400
509
  });
401
- }));
510
+ return guardedHandler(options, officialHandler(options, state, events), events, scope);
511
+ });
512
+ /**
513
+ * Create one official MCP handler with explicit event resource ownership.
514
+ * @param options Daemon operations, optional credentials and callback persistence.
515
+ * @returns Handler whose catalog changes in place after registration.
516
+ */
517
+ export const makeHarnessMcpHttpHandler = (options) => Effect.gen(function* () {
518
+ const status = yield* options.operations.readStatus();
519
+ const scope = yield* Scope.make();
520
+ return yield* acquireHandler(options, { active: status.kind === "active" }, scope).pipe(Effect.onError(() => Scope.close(scope, Exit.void)));
521
+ }).pipe(Effect.withSpan("makeHarnessMcpHttpHandler"));
402
522
  /* eslint-enable agent-code-guard/async-keyword -- Restore repository defaults after the MCP boundary. */
403
- //# sourceMappingURL=harness-mcp-wire.js.map
523
+ //# sourceMappingURL=tools.js.map