@aeolus-fleet/gateway 0.29.2 → 0.30.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 (694) hide show
  1. package/README.md +11 -3
  2. package/dist/adapters/a2a/a2a-agents.d.ts +6 -0
  3. package/dist/adapters/a2a/a2a-agents.js +238 -0
  4. package/dist/adapters/a2a/a2a-agents.js.map +1 -0
  5. package/dist/adapters/a2a/agent-cards.d.ts +4 -0
  6. package/dist/adapters/a2a/agent-cards.js +90 -0
  7. package/dist/adapters/a2a/agent-cards.js.map +1 -0
  8. package/dist/adapters/crypto/agent-keys.d.ts +3 -0
  9. package/dist/adapters/crypto/agent-keys.js +13 -0
  10. package/dist/adapters/crypto/agent-keys.js.map +1 -0
  11. package/dist/adapters/crypto/call-keys.js +2 -0
  12. package/dist/adapters/crypto/call-keys.js.map +1 -1
  13. package/dist/adapters/fleet/core-version.d.ts +1 -1
  14. package/dist/adapters/fleet/core-version.js +1 -1
  15. package/dist/adapters/fleet/fleet-ships.d.ts +3 -1
  16. package/dist/adapters/fleet/fleet-ships.js +19 -10
  17. package/dist/adapters/fleet/fleet-ships.js.map +1 -1
  18. package/dist/adapters/fleet/rest-fleet-door.d.ts +2 -2
  19. package/dist/adapters/fleet/rest-fleet-door.js +29 -5
  20. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  21. package/dist/adapters/http/a2a-cards.d.ts +24 -0
  22. package/dist/adapters/http/a2a-cards.js +62 -0
  23. package/dist/adapters/http/a2a-cards.js.map +1 -0
  24. package/dist/adapters/http/a2a-endpoint.d.ts +28 -0
  25. package/dist/adapters/http/a2a-endpoint.js +424 -0
  26. package/dist/adapters/http/a2a-endpoint.js.map +1 -0
  27. package/dist/adapters/http/a2a-streams.d.ts +28 -0
  28. package/dist/adapters/http/a2a-streams.js +74 -0
  29. package/dist/adapters/http/a2a-streams.js.map +1 -0
  30. package/dist/adapters/http/a2a-tasks.d.ts +18 -0
  31. package/dist/adapters/http/a2a-tasks.js +117 -0
  32. package/dist/adapters/http/a2a-tasks.js.map +1 -0
  33. package/dist/adapters/http/front-door.js +8 -4
  34. package/dist/adapters/http/front-door.js.map +1 -1
  35. package/dist/adapters/http/live.d.ts +3 -1
  36. package/dist/adapters/http/live.js +6 -2
  37. package/dist/adapters/http/live.js.map +1 -1
  38. package/dist/adapters/http/oauth-routes.d.ts +1 -1
  39. package/dist/adapters/http/oauth-routes.js +16 -3
  40. package/dist/adapters/http/oauth-routes.js.map +1 -1
  41. package/dist/adapters/mcp/mcp-servers.js +2 -0
  42. package/dist/adapters/mcp/mcp-servers.js.map +1 -1
  43. package/dist/adapters/pagasae/email-channel.d.ts +8 -0
  44. package/dist/adapters/pagasae/email-channel.js +37 -0
  45. package/dist/adapters/pagasae/email-channel.js.map +1 -0
  46. package/dist/adapters/pagasae/pagasae-client.js +6 -2
  47. package/dist/adapters/pagasae/pagasae-client.js.map +1 -1
  48. package/dist/adapters/prisma/agent-calls.d.ts +3 -0
  49. package/dist/adapters/prisma/agent-calls.js +49 -0
  50. package/dist/adapters/prisma/agent-calls.js.map +1 -0
  51. package/dist/adapters/prisma/changes.d.ts +17 -8
  52. package/dist/adapters/prisma/changes.js +18 -5
  53. package/dist/adapters/prisma/changes.js.map +1 -1
  54. package/dist/adapters/prisma/client-calls.d.ts +1 -1
  55. package/dist/adapters/prisma/client-calls.js +83 -21
  56. package/dist/adapters/prisma/client-calls.js.map +1 -1
  57. package/dist/adapters/prisma/email-channels.d.ts +4 -0
  58. package/dist/adapters/prisma/email-channels.js +14 -0
  59. package/dist/adapters/prisma/email-channels.js.map +1 -0
  60. package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
  61. package/dist/adapters/prisma/fleet-forgetter.js +2 -2
  62. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
  63. package/dist/adapters/prisma/focused-pages.d.ts +4 -0
  64. package/dist/adapters/prisma/focused-pages.js +13 -0
  65. package/dist/adapters/prisma/focused-pages.js.map +1 -0
  66. package/dist/adapters/prisma/generated/browser.d.ts +45 -0
  67. package/dist/adapters/prisma/generated/client.d.ts +45 -0
  68. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +54 -54
  69. package/dist/adapters/prisma/generated/internal/class.d.ts +99 -0
  70. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  71. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  72. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +783 -1
  73. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +101 -3
  74. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  75. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +107 -0
  76. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +101 -3
  77. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  78. package/dist/adapters/prisma/generated/models/A2aAgentCall.d.ts +1203 -0
  79. package/dist/adapters/prisma/generated/models/A2aAgentCall.js +2 -0
  80. package/dist/adapters/prisma/generated/models/A2aAgentCall.js.map +1 -0
  81. package/dist/adapters/prisma/generated/models/A2aAgentReply.d.ts +1003 -0
  82. package/dist/adapters/prisma/generated/models/A2aAgentReply.js +2 -0
  83. package/dist/adapters/prisma/generated/models/A2aAgentReply.js.map +1 -0
  84. package/dist/adapters/prisma/generated/models/A2aPush.d.ts +1413 -0
  85. package/dist/adapters/prisma/generated/models/A2aPush.js +2 -0
  86. package/dist/adapters/prisma/generated/models/A2aPush.js.map +1 -0
  87. package/dist/adapters/prisma/generated/models/A2aPushConfig.d.ts +1322 -0
  88. package/dist/adapters/prisma/generated/models/A2aPushConfig.js +2 -0
  89. package/dist/adapters/prisma/generated/models/A2aPushConfig.js.map +1 -0
  90. package/dist/adapters/prisma/generated/models/A2aTask.d.ts +1002 -0
  91. package/dist/adapters/prisma/generated/models/A2aTask.js +2 -0
  92. package/dist/adapters/prisma/generated/models/A2aTask.js.map +1 -0
  93. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +136 -15
  94. package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +0 -7
  95. package/dist/adapters/prisma/generated/models/EmailChannel.d.ts +946 -0
  96. package/dist/adapters/prisma/generated/models/EmailChannel.js +2 -0
  97. package/dist/adapters/prisma/generated/models/EmailChannel.js.map +1 -0
  98. package/dist/adapters/prisma/generated/models/FocusedPage.d.ts +974 -0
  99. package/dist/adapters/prisma/generated/models/FocusedPage.js +2 -0
  100. package/dist/adapters/prisma/generated/models/FocusedPage.js.map +1 -0
  101. package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +47 -41
  102. package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +32 -8
  103. package/dist/adapters/prisma/generated/models/Party.d.ts +90 -3
  104. package/dist/adapters/prisma/generated/models/WakeSent.d.ts +975 -0
  105. package/dist/adapters/prisma/generated/models/WakeSent.js +2 -0
  106. package/dist/adapters/prisma/generated/models/WakeSent.js.map +1 -0
  107. package/dist/adapters/prisma/generated/models/WebPushSubscription.d.ts +1115 -0
  108. package/dist/adapters/prisma/generated/models/WebPushSubscription.js +2 -0
  109. package/dist/adapters/prisma/generated/models/WebPushSubscription.js.map +1 -0
  110. package/dist/adapters/prisma/generated/models.d.ts +9 -0
  111. package/dist/adapters/prisma/oauth-stores.js +3 -2
  112. package/dist/adapters/prisma/oauth-stores.js.map +1 -1
  113. package/dist/adapters/prisma/party-store.js +35 -6
  114. package/dist/adapters/prisma/party-store.js.map +1 -1
  115. package/dist/adapters/prisma/person-crews.js +9 -0
  116. package/dist/adapters/prisma/person-crews.js.map +1 -1
  117. package/dist/adapters/prisma/push-store.d.ts +3 -0
  118. package/dist/adapters/prisma/push-store.js +102 -0
  119. package/dist/adapters/prisma/push-store.js.map +1 -0
  120. package/dist/adapters/prisma/waiter-locks.d.ts +4 -0
  121. package/dist/adapters/prisma/waiter-locks.js +72 -0
  122. package/dist/adapters/prisma/waiter-locks.js.map +1 -0
  123. package/dist/adapters/prisma/wakes-sent.d.ts +4 -0
  124. package/dist/adapters/prisma/wakes-sent.js +10 -0
  125. package/dist/adapters/prisma/wakes-sent.js.map +1 -0
  126. package/dist/adapters/prisma/web-push-subscriptions.d.ts +3 -0
  127. package/dist/adapters/prisma/web-push-subscriptions.js +33 -0
  128. package/dist/adapters/prisma/web-push-subscriptions.js.map +1 -0
  129. package/dist/adapters/trpc/router.d.ts +397 -9
  130. package/dist/adapters/trpc/router.js +237 -13
  131. package/dist/adapters/trpc/router.js.map +1 -1
  132. package/dist/adapters/web-push/web-push.d.ts +9 -0
  133. package/dist/adapters/web-push/web-push.js +70 -0
  134. package/dist/adapters/web-push/web-push.js.map +1 -0
  135. package/dist/adapters/webhooks/allowed-lookup.d.ts +14 -0
  136. package/dist/adapters/webhooks/allowed-lookup.js +28 -0
  137. package/dist/adapters/webhooks/allowed-lookup.js.map +1 -0
  138. package/dist/adapters/webhooks/host-resolver.d.ts +3 -0
  139. package/dist/adapters/webhooks/host-resolver.js +13 -0
  140. package/dist/adapters/webhooks/host-resolver.js.map +1 -0
  141. package/dist/adapters/webhooks/webhook-poster.d.ts +6 -0
  142. package/dist/adapters/webhooks/webhook-poster.js +67 -0
  143. package/dist/adapters/webhooks/webhook-poster.js.map +1 -0
  144. package/dist/app.d.ts +12 -0
  145. package/dist/app.js +273 -14
  146. package/dist/app.js.map +1 -1
  147. package/dist/bin/aeolus-gateway.js +3 -0
  148. package/dist/bin/aeolus-gateway.js.map +1 -1
  149. package/dist/config.d.ts +14 -0
  150. package/dist/config.js +24 -0
  151. package/dist/config.js.map +1 -1
  152. package/dist/core/a2a-in/authenticate-a2a-client.d.ts +23 -0
  153. package/dist/core/a2a-in/authenticate-a2a-client.js +21 -0
  154. package/dist/core/a2a-in/authenticate-a2a-client.js.map +1 -0
  155. package/dist/core/a2a-in/deliver-pushes.d.ts +24 -0
  156. package/dist/core/a2a-in/deliver-pushes.js +48 -0
  157. package/dist/core/a2a-in/deliver-pushes.js.map +1 -0
  158. package/dist/core/a2a-in/find-reached-ship.d.ts +18 -0
  159. package/dist/core/a2a-in/find-reached-ship.js +20 -0
  160. package/dist/core/a2a-in/find-reached-ship.js.map +1 -0
  161. package/dist/core/a2a-in/follow-a2a-task.d.ts +25 -0
  162. package/dist/core/a2a-in/follow-a2a-task.js +23 -0
  163. package/dist/core/a2a-in/follow-a2a-task.js.map +1 -0
  164. package/dist/core/a2a-in/inbound-message.d.ts +30 -0
  165. package/dist/core/a2a-in/inbound-message.js +33 -0
  166. package/dist/core/a2a-in/inbound-message.js.map +1 -0
  167. package/dist/core/a2a-in/list-a2a-tasks.d.ts +18 -0
  168. package/dist/core/a2a-in/list-a2a-tasks.js +14 -0
  169. package/dist/core/a2a-in/list-a2a-tasks.js.map +1 -0
  170. package/dist/core/a2a-in/list-push-configs.d.ts +20 -0
  171. package/dist/core/a2a-in/list-push-configs.js +18 -0
  172. package/dist/core/a2a-in/list-push-configs.js.map +1 -0
  173. package/dist/core/a2a-in/list-reached-ships.d.ts +25 -0
  174. package/dist/core/a2a-in/list-reached-ships.js +22 -0
  175. package/dist/core/a2a-in/list-reached-ships.js.map +1 -0
  176. package/dist/core/a2a-in/notice-task-changes.d.ts +19 -0
  177. package/dist/core/a2a-in/notice-task-changes.js +17 -0
  178. package/dist/core/a2a-in/notice-task-changes.js.map +1 -0
  179. package/dist/core/a2a-in/ports.d.ts +124 -0
  180. package/dist/core/a2a-in/ports.js +2 -0
  181. package/dist/core/a2a-in/ports.js.map +1 -0
  182. package/dist/core/a2a-in/push-config-view.d.ts +8 -0
  183. package/dist/core/a2a-in/push-config-view.js +2 -0
  184. package/dist/core/a2a-in/push-config-view.js.map +1 -0
  185. package/dist/core/a2a-in/push-to-webhooks.d.ts +19 -0
  186. package/dist/core/a2a-in/push-to-webhooks.js +19 -0
  187. package/dist/core/a2a-in/push-to-webhooks.js.map +1 -0
  188. package/dist/core/a2a-in/read-a2a-task.d.ts +12 -0
  189. package/dist/core/a2a-in/read-a2a-task.js +11 -0
  190. package/dist/core/a2a-in/read-a2a-task.js.map +1 -0
  191. package/dist/core/a2a-in/read-push-config.d.ts +16 -0
  192. package/dist/core/a2a-in/read-push-config.js +14 -0
  193. package/dist/core/a2a-in/read-push-config.js.map +1 -0
  194. package/dist/core/a2a-in/remove-push-config.d.ts +15 -0
  195. package/dist/core/a2a-in/remove-push-config.js +13 -0
  196. package/dist/core/a2a-in/remove-push-config.js.map +1 -0
  197. package/dist/core/a2a-in/send-a2a-message.d.ts +34 -0
  198. package/dist/core/a2a-in/send-a2a-message.js +106 -0
  199. package/dist/core/a2a-in/send-a2a-message.js.map +1 -0
  200. package/dist/core/a2a-in/set-push-config.d.ts +30 -0
  201. package/dist/core/a2a-in/set-push-config.js +27 -0
  202. package/dist/core/a2a-in/set-push-config.js.map +1 -0
  203. package/dist/core/a2a-in/subscribe-to-a2a-task.d.ts +18 -0
  204. package/dist/core/a2a-in/subscribe-to-a2a-task.js +17 -0
  205. package/dist/core/a2a-in/subscribe-to-a2a-task.js.map +1 -0
  206. package/dist/core/a2a-in/task-view.d.ts +51 -0
  207. package/dist/core/a2a-in/task-view.js +49 -0
  208. package/dist/core/a2a-in/task-view.js.map +1 -0
  209. package/dist/core/a2a-in/webhook-address.d.ts +7 -0
  210. package/dist/core/a2a-in/webhook-address.js +17 -0
  211. package/dist/core/a2a-in/webhook-address.js.map +1 -0
  212. package/dist/core/a2a-in/webhook.d.ts +6 -0
  213. package/dist/core/a2a-in/webhook.js +80 -0
  214. package/dist/core/a2a-in/webhook.js.map +1 -0
  215. package/dist/core/a2a-out/agent-endpoint.d.ts +10 -0
  216. package/dist/core/a2a-out/agent-endpoint.js +10 -0
  217. package/dist/core/a2a-out/agent-endpoint.js.map +1 -0
  218. package/dist/core/a2a-out/agent-event.d.ts +41 -0
  219. package/dist/core/a2a-out/agent-event.js +64 -0
  220. package/dist/core/a2a-out/agent-event.js.map +1 -0
  221. package/dist/core/a2a-out/agent-message.d.ts +36 -0
  222. package/dist/core/a2a-out/agent-message.js +36 -0
  223. package/dist/core/a2a-out/agent-message.js.map +1 -0
  224. package/dist/core/a2a-out/agent-statement.d.ts +10 -0
  225. package/dist/core/a2a-out/agent-statement.js +45 -0
  226. package/dist/core/a2a-out/agent-statement.js.map +1 -0
  227. package/dist/core/a2a-out/follow-agent-task.d.ts +40 -0
  228. package/dist/core/a2a-out/follow-agent-task.js +125 -0
  229. package/dist/core/a2a-out/follow-agent-task.js.map +1 -0
  230. package/dist/core/a2a-out/hand-a2a-message.d.ts +36 -0
  231. package/dist/core/a2a-out/hand-a2a-message.js +132 -0
  232. package/dist/core/a2a-out/hand-a2a-message.js.map +1 -0
  233. package/dist/core/a2a-out/mark-a2a-agent.d.ts +24 -0
  234. package/dist/core/a2a-out/mark-a2a-agent.js +24 -0
  235. package/dist/core/a2a-out/mark-a2a-agent.js.map +1 -0
  236. package/dist/core/a2a-out/ports.d.ts +200 -0
  237. package/dist/core/a2a-out/ports.js +2 -0
  238. package/dist/core/a2a-out/ports.js.map +1 -0
  239. package/dist/core/a2a-out/read-agent-statement.d.ts +13 -0
  240. package/dist/core/a2a-out/read-agent-statement.js +13 -0
  241. package/dist/core/a2a-out/read-agent-statement.js.map +1 -0
  242. package/dist/core/a2a-out/run-a2a-agent.d.ts +26 -0
  243. package/dist/core/a2a-out/run-a2a-agent.js +46 -0
  244. package/dist/core/a2a-out/run-a2a-agent.js.map +1 -0
  245. package/dist/core/a2a-out/state-a2a-agent.d.ts +26 -0
  246. package/dist/core/a2a-out/state-a2a-agent.js +31 -0
  247. package/dist/core/a2a-out/state-a2a-agent.js.map +1 -0
  248. package/dist/core/mcp-in/call-tool.js +2 -0
  249. package/dist/core/mcp-in/call-tool.js.map +1 -1
  250. package/dist/core/mcp-in/client-call.d.ts +35 -4
  251. package/dist/core/mcp-in/client-call.js +57 -10
  252. package/dist/core/mcp-in/client-call.js.map +1 -1
  253. package/dist/core/mcp-in/collect-replies.d.ts +4 -3
  254. package/dist/core/mcp-in/collect-replies.js +4 -0
  255. package/dist/core/mcp-in/collect-replies.js.map +1 -1
  256. package/dist/core/mcp-in/ports.d.ts +52 -3
  257. package/dist/core/mcp-out/hand-call.d.ts +5 -1
  258. package/dist/core/mcp-out/hand-call.js +9 -1
  259. package/dist/core/mcp-out/hand-call.js.map +1 -1
  260. package/dist/core/mcp-out/run-party.d.ts +29 -7
  261. package/dist/core/mcp-out/run-party.js +14 -6
  262. package/dist/core/mcp-out/run-party.js.map +1 -1
  263. package/dist/core/mcp-out/state-party.d.ts +4 -2
  264. package/dist/core/mcp-out/state-party.js +10 -3
  265. package/dist/core/mcp-out/state-party.js.map +1 -1
  266. package/dist/core/mcp-out/statement.d.ts +2 -1
  267. package/dist/core/mcp-out/statement.js.map +1 -1
  268. package/dist/core/oauth/exchange-id-jag.d.ts +28 -0
  269. package/dist/core/oauth/exchange-id-jag.js +66 -0
  270. package/dist/core/oauth/exchange-id-jag.js.map +1 -0
  271. package/dist/core/oauth/exchange-token.d.ts +25 -11
  272. package/dist/core/oauth/exchange-token.js +50 -3
  273. package/dist/core/oauth/exchange-token.js.map +1 -1
  274. package/dist/core/oauth/ports.d.ts +17 -6
  275. package/dist/core/oauth/register-client.js +1 -1
  276. package/dist/core/oauth/register-client.js.map +1 -1
  277. package/dist/core/parties/add-a2a-agent.d.ts +34 -0
  278. package/dist/core/parties/add-a2a-agent.js +45 -0
  279. package/dist/core/parties/add-a2a-agent.js.map +1 -0
  280. package/dist/core/parties/add-a2a-client.d.ts +30 -0
  281. package/dist/core/parties/add-a2a-client.js +47 -0
  282. package/dist/core/parties/add-a2a-client.js.map +1 -0
  283. package/dist/core/parties/add-client-party.d.ts +38 -0
  284. package/dist/core/parties/add-client-party.js +40 -0
  285. package/dist/core/parties/add-client-party.js.map +1 -0
  286. package/dist/core/parties/approve-party.d.ts +43 -2
  287. package/dist/core/parties/approve-party.js +9 -5
  288. package/dist/core/parties/approve-party.js.map +1 -1
  289. package/dist/core/parties/approver.d.ts +7 -0
  290. package/dist/core/parties/approver.js +9 -0
  291. package/dist/core/parties/approver.js.map +1 -0
  292. package/dist/core/parties/check-server.d.ts +2 -1
  293. package/dist/core/parties/check-server.js +1 -1
  294. package/dist/core/parties/check-server.js.map +1 -1
  295. package/dist/core/parties/crew-party.d.ts +18 -4
  296. package/dist/core/parties/crew-party.js +36 -4
  297. package/dist/core/parties/crew-party.js.map +1 -1
  298. package/dist/core/parties/party.d.ts +23 -1
  299. package/dist/core/parties/party.js +17 -4
  300. package/dist/core/parties/party.js.map +1 -1
  301. package/dist/core/parties/ports.d.ts +16 -0
  302. package/dist/core/parties/read-party-tools.d.ts +4 -3
  303. package/dist/core/parties/read-party-tools.js +4 -2
  304. package/dist/core/parties/read-party-tools.js.map +1 -1
  305. package/dist/core/parties/shown-party.d.ts +8 -0
  306. package/dist/core/parties/shown-party.js +4 -0
  307. package/dist/core/parties/shown-party.js.map +1 -1
  308. package/dist/core/parties/switch-tool.d.ts +29 -0
  309. package/dist/core/parties/switch-tool.js +33 -0
  310. package/dist/core/parties/switch-tool.js.map +1 -0
  311. package/dist/core/parties/tool-switches.d.ts +27 -0
  312. package/dist/core/parties/tool-switches.js +17 -0
  313. package/dist/core/parties/tool-switches.js.map +1 -0
  314. package/dist/core/people/answer-delivery.d.ts +2 -1
  315. package/dist/core/people/answer-delivery.js.map +1 -1
  316. package/dist/core/people/done-delivery.d.ts +2 -1
  317. package/dist/core/people/done-delivery.js.map +1 -1
  318. package/dist/core/people/focus-page.d.ts +18 -0
  319. package/dist/core/people/focus-page.js +20 -0
  320. package/dist/core/people/focus-page.js.map +1 -0
  321. package/dist/core/people/open-delivery.d.ts +3 -1
  322. package/dist/core/people/open-delivery.js +2 -0
  323. package/dist/core/people/open-delivery.js.map +1 -1
  324. package/dist/core/people/opened-of.d.ts +7 -2
  325. package/dist/core/people/opened-of.js +6 -1
  326. package/dist/core/people/opened-of.js.map +1 -1
  327. package/dist/core/people/person-crew.d.ts +2 -0
  328. package/dist/core/people/person-crew.js +6 -2
  329. package/dist/core/people/person-crew.js.map +1 -1
  330. package/dist/core/people/ports.d.ts +151 -3
  331. package/dist/core/people/read-wake-channels.d.ts +42 -0
  332. package/dist/core/people/read-wake-channels.js +21 -0
  333. package/dist/core/people/read-wake-channels.js.map +1 -0
  334. package/dist/core/people/turn-email-channel.d.ts +21 -0
  335. package/dist/core/people/turn-email-channel.js +22 -0
  336. package/dist/core/people/turn-email-channel.js.map +1 -0
  337. package/dist/core/people/turn-off-web-push.d.ts +13 -0
  338. package/dist/core/people/turn-off-web-push.js +14 -0
  339. package/dist/core/people/turn-off-web-push.js.map +1 -0
  340. package/dist/core/people/turn-on-web-push.d.ts +35 -0
  341. package/dist/core/people/turn-on-web-push.js +49 -0
  342. package/dist/core/people/turn-on-web-push.js.map +1 -0
  343. package/dist/core/people/wait-on-person-ship.d.ts +44 -0
  344. package/dist/core/people/wait-on-person-ship.js +92 -0
  345. package/dist/core/people/wait-on-person-ship.js.map +1 -0
  346. package/dist/core/people/wake-person.d.ts +40 -0
  347. package/dist/core/people/wake-person.js +74 -0
  348. package/dist/core/people/wake-person.js.map +1 -0
  349. package/dist/core/people/web-push-channel.d.ts +17 -0
  350. package/dist/core/people/web-push-channel.js +35 -0
  351. package/dist/core/people/web-push-channel.js.map +1 -0
  352. package/dist/core/requests/decide-request.d.ts +0 -2
  353. package/dist/core/requests/decide-request.js +3 -6
  354. package/dist/core/requests/decide-request.js.map +1 -1
  355. package/dist/core/requests/list-to-decide.js +1 -1
  356. package/dist/core/requests/list-to-decide.js.map +1 -1
  357. package/dist/core/shared/errors.d.ts +1 -1
  358. package/dist/core/shared/errors.js.map +1 -1
  359. package/dist/core/sign-in/ports.d.ts +13 -0
  360. package/dist/core/vault/credential.d.ts +6 -2
  361. package/dist/party-workers.d.ts +9 -1
  362. package/dist/party-workers.js +37 -5
  363. package/dist/party-workers.js.map +1 -1
  364. package/dist/person-waiters.d.ts +30 -0
  365. package/dist/person-waiters.js +89 -0
  366. package/dist/person-waiters.js.map +1 -0
  367. package/package.json +7 -3
  368. package/src/adapters/prisma/migrations/20261023120000_party_bearer_hash/migration.sql +4 -0
  369. package/src/adapters/prisma/migrations/20261023130000_client_credentials/migration.sql +5 -0
  370. package/src/adapters/prisma/migrations/20261023200000_a2a_tasks/migration.sql +20 -0
  371. package/src/adapters/prisma/migrations/20261023210000_tool_switches/migration.sql +2 -0
  372. package/src/adapters/prisma/migrations/20261024090000_a2a_pushes/migration.sql +37 -0
  373. package/src/adapters/prisma/migrations/20261024100000_party_is_repeatable/migration.sql +2 -0
  374. package/src/adapters/prisma/migrations/20261024110000_a2a_agent_calls/migration.sql +29 -0
  375. package/src/adapters/prisma/migrations/20261024115000_wakes/migration.sql +17 -0
  376. package/src/adapters/prisma/migrations/20261024120000_focused_pages/migration.sql +11 -0
  377. package/src/adapters/prisma/migrations/20261024130000_web_push_subscriptions/migration.sql +14 -0
  378. package/src/adapters/prisma/schema.prisma +159 -5
  379. package/web/.next/BUILD_ID +1 -1
  380. package/web/.next/app-path-routes-manifest.json +3 -0
  381. package/web/.next/build-manifest.json +27 -3
  382. package/web/.next/diagnostics/route-bundle-stats.json +75 -42
  383. package/web/.next/fallback-build-manifest.json +3 -3
  384. package/web/.next/next-minimal-server.js.nft.json +1 -1
  385. package/web/.next/next-server.js.nft.json +1 -1
  386. package/web/.next/prerender-manifest.json +3 -3
  387. package/web/.next/routes-manifest.json +18 -0
  388. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +23 -3
  389. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +10 -8
  390. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  391. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  392. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +22 -2
  393. package/web/.next/server/app/(console)/outside-parties/[name]/page.js +8 -5
  394. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  395. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  396. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +23 -3
  397. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +9 -6
  398. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  399. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  400. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +26 -6
  401. package/web/.next/server/app/(console)/outside-parties/add/page.js +10 -5
  402. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  403. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  404. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/app-paths-manifest.json +3 -0
  405. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/build-manifest.json +23 -0
  406. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/next-font-manifest.json +11 -0
  407. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/react-loadable-manifest.json +1 -0
  408. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +25 -0
  409. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +20 -0
  410. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.map +5 -0
  411. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -0
  412. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +3 -0
  413. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/app-paths-manifest.json +3 -0
  414. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/build-manifest.json +23 -0
  415. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/next-font-manifest.json +11 -0
  416. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/react-loadable-manifest.json +1 -0
  417. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +25 -0
  418. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +21 -0
  419. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.map +5 -0
  420. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -0
  421. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +3 -0
  422. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  423. package/web/.next/server/app/(console)/outside-parties/page.js +3 -3
  424. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  425. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  426. package/web/.next/server/app/(console)/overview/changes/route.js +3 -2
  427. package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
  428. package/web/.next/server/app/(console)/overview/focus/route/app-paths-manifest.json +3 -0
  429. package/web/.next/server/app/(console)/overview/focus/route/build-manifest.json +12 -0
  430. package/web/.next/server/app/(console)/overview/focus/route/server-reference-manifest.json +4 -0
  431. package/web/.next/server/app/(console)/overview/focus/route.js +7 -0
  432. package/web/.next/server/app/(console)/overview/focus/route.js.map +5 -0
  433. package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -0
  434. package/web/.next/server/app/(console)/overview/focus/route_client-reference-manifest.js +3 -0
  435. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +34 -4
  436. package/web/.next/server/app/(console)/overview/page.js +3 -3
  437. package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  438. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  439. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
  440. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +2 -2
  441. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
  442. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
  443. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
  444. package/web/.next/server/app/(console)/parties/page.js +2 -2
  445. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  446. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  447. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  448. package/web/.next/server/app/(console)/sign-in/failed/page.js +3 -3
  449. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  450. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  451. package/web/.next/server/app/_global-error/page.js +3 -3
  452. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  453. package/web/.next/server/app/_global-error.html +1 -1
  454. package/web/.next/server/app/_global-error.rsc +1 -1
  455. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  456. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  457. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  458. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  459. package/web/.next/server/app/_not-found/page.js +3 -3
  460. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  461. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  462. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  463. package/web/.next/server/app/authorize/failed/page.js +2 -2
  464. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  465. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  466. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  467. package/web/.next/server/app/authorize/pick/page.js +2 -2
  468. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  469. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  470. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  471. package/web/.next/server/app/authorize/waiting/approval/page.js +2 -2
  472. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  473. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  474. package/web/.next/server/app-paths-manifest.json +3 -0
  475. package/web/.next/server/chunks/0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js +3 -0
  476. package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js +3 -0
  477. package/web/.next/server/chunks/[externals]__0fgpzedhhntg9._.js.map +1 -0
  478. package/web/.next/server/chunks/{[root-of-the-server]__0k8jiujb_0xtx._.js → [root-of-the-server]__0ykc8bq_c06a1._.js} +22 -22
  479. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +1 -0
  480. package/web/.next/server/chunks/_04is-uopj3op9._.js +3 -0
  481. package/web/.next/server/chunks/_04is-uopj3op9._.js.map +1 -0
  482. package/web/.next/server/chunks/_1-fw4-pwzazl4._.js +3 -0
  483. package/web/.next/server/chunks/_1-fw4-pwzazl4._.js.map +1 -0
  484. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +3 -0
  485. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -0
  486. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +3 -0
  487. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -0
  488. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +3 -0
  489. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -0
  490. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +3 -0
  491. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -0
  492. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +3 -0
  493. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -0
  494. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
  495. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
  496. package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js → [root-of-the-server]__0-og0bl8lr2xq._.js} +2 -2
  497. package/web/.next/server/chunks/ssr/{[root-of-the-server]__12_to1hq55n1y._.js.map → [root-of-the-server]__0-og0bl8lr2xq._.js.map} +1 -1
  498. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +3 -0
  499. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1yydhn6iokbm4._.js.map → [root-of-the-server]__07udzu2zwg_74._.js.map} +1 -1
  500. package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js → [root-of-the-server]__0a68v9ynev4q6._.js} +2 -2
  501. package/web/.next/server/chunks/ssr/{[root-of-the-server]__197il4swfpq1a._.js.map → [root-of-the-server]__0a68v9ynev4q6._.js.map} +1 -1
  502. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +4 -0
  503. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -0
  504. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +3 -0
  505. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1vkw2kvzx6fpw._.js.map → [root-of-the-server]__0l2_dk9d4o01n._.js.map} +1 -1
  506. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js +3 -0
  507. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js.map +1 -0
  508. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +4 -0
  509. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +1 -0
  510. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +3 -0
  511. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1imel8atfb770._.js.map → [root-of-the-server]__0rr5u24i9tjyc._.js.map} +1 -1
  512. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +1 -1
  513. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +1 -1
  514. package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js +3 -0
  515. package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js.map +1 -0
  516. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +4 -0
  517. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +1 -0
  518. package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js +3 -0
  519. package/web/.next/server/chunks/ssr/[root-of-the-server]__1gb-3dttuacyz._.js.map +1 -0
  520. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js +3 -0
  521. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js.map +1 -0
  522. package/web/.next/server/chunks/ssr/[root-of-the-server]__1m9atpy0vkbmj._.js +3 -0
  523. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0dywrno7zb0r_._.js.map → [root-of-the-server]__1m9atpy0vkbmj._.js.map} +1 -1
  524. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +3 -0
  525. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +1 -0
  526. package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js +3 -0
  527. package/web/.next/server/chunks/ssr/{[root-of-the-server]__216xd8otb96uo._.js.map → [root-of-the-server]__1w5swo8gmjyx6._.js.map} +1 -1
  528. package/web/.next/server/chunks/ssr/[root-of-the-server]__1wl0vw-n8lbkn._.js +1 -1
  529. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js +3 -0
  530. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js.map +1 -0
  531. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js +3 -0
  532. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +1 -0
  533. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  534. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  535. package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js +4 -0
  536. package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js.map +1 -0
  537. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  538. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  539. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  540. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  541. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +4 -0
  542. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  544. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  545. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  546. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  547. package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js +3 -0
  548. package/web/.next/server/chunks/ssr/node_modules_1wdusod3fyk3s._.js.map +1 -0
  549. package/web/.next/server/chunks/ssr/node_modules_next_08hq6z46rczo0._.js +1 -1
  550. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +1 -1
  551. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +1 -1
  552. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +3 -0
  553. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +1 -0
  554. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +3 -0
  555. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +1 -0
  556. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +1 -1
  557. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +1 -1
  558. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +1 -1
  559. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +1 -1
  560. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +3 -0
  561. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +1 -0
  562. package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +3 -0
  563. package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js.map +1 -0
  564. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +3 -0
  565. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -0
  566. package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js +1 -1
  567. package/web/.next/server/chunks/ssr/web_1ga4pbv72m0ad._.js.map +1 -1
  568. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
  569. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
  570. package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js +1 -1
  571. package/web/.next/server/chunks/ssr/web_app_(console)_parties_page_tsx_0pp63ghly3eyp._.js.map +1 -1
  572. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +1 -1
  573. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js.map +1 -1
  574. package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js +3 -0
  575. package/web/.next/server/chunks/ssr/web_features_0ahlkugj7fu3n._.js.map +1 -0
  576. package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js +3 -0
  577. package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js.map +1 -0
  578. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +3 -0
  579. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +1 -0
  580. package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js +3 -0
  581. package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js.map +1 -0
  582. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +3 -0
  583. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js.map +1 -0
  584. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +3 -0
  585. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +1 -0
  586. package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js +3 -0
  587. package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js.map +1 -0
  588. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +3 -0
  589. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -0
  590. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +3 -0
  591. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -0
  592. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  593. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  594. package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js +3 -0
  595. package/web/.next/server/chunks/ssr/web_features_forms_1d1jyea2jni9o._.js.map +1 -0
  596. package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js +3 -0
  597. package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js.map +1 -0
  598. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +3 -0
  599. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -0
  600. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  601. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  602. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  603. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  604. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  605. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
  606. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js +3 -0
  607. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js.map +1 -0
  608. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +1 -1
  609. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js.map +1 -1
  610. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
  611. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
  612. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +3 -0
  613. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +1 -0
  614. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
  615. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
  616. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  617. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js.map +1 -1
  618. package/web/.next/server/middleware-build-manifest.js +27 -3
  619. package/web/.next/server/next-font-manifest.js +1 -1
  620. package/web/.next/server/next-font-manifest.json +8 -0
  621. package/web/.next/server/pages/500.html +1 -1
  622. package/web/.next/server/preview-props.json +3 -3
  623. package/web/.next/server/server-reference-manifest.js +1 -1
  624. package/web/.next/server/server-reference-manifest.json +124 -22
  625. package/web/.next/static/chunks/00njqo86bx2kb.js +1 -0
  626. package/web/.next/static/chunks/047i2x2j--shk.css +3 -0
  627. package/web/.next/static/chunks/0g4cpamshfwmn.js +1 -0
  628. package/web/.next/static/chunks/0j84uiid6fsim.js +1 -0
  629. package/web/.next/static/chunks/1aa1d23q1vokr.js +1 -0
  630. package/web/.next/static/chunks/1jvae6c-4jwji.js +1 -0
  631. package/web/.next/static/chunks/23ud2e13dn8f4.js +1 -0
  632. package/web/.next/static/chunks/2_41h3v090ur9.js +1 -0
  633. package/web/.next/static/chunks/31vy122d9fvme.js +1 -0
  634. package/web/.next/static/chunks/3apnqdh48__yw.js +1 -0
  635. package/web/.next/static/chunks/3okm5g88ig1l3.js +1 -0
  636. package/web/.next/trace +1 -1
  637. package/web/.next/trace-build +1 -1
  638. package/web/.next/types/routes.d.ts +5 -2
  639. package/web/.next/types/validator.ts +44 -0
  640. package/web/public/wake-worker.js +17 -0
  641. package/web/.next/server/chunks/[externals]__12s2uxrv8n30f._.js +0 -3
  642. package/web/.next/server/chunks/[root-of-the-server]__0k8jiujb_0xtx._.js.map +0 -1
  643. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js +0 -3
  644. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_10eg3jn_qq_u_.js.map +0 -1
  645. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js +0 -4
  646. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-liudmjwlqmo._.js.map +0 -1
  647. package/web/.next/server/chunks/ssr/[root-of-the-server]__0dywrno7zb0r_._.js +0 -3
  648. package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js +0 -3
  649. package/web/.next/server/chunks/ssr/[root-of-the-server]__0hosi33y5xecr._.js.map +0 -1
  650. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js +0 -3
  651. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k-sy-ven9f2f._.js.map +0 -1
  652. package/web/.next/server/chunks/ssr/[root-of-the-server]__1imel8atfb770._.js +0 -3
  653. package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js +0 -4
  654. package/web/.next/server/chunks/ssr/[root-of-the-server]__1rmy72sai5-kh._.js.map +0 -1
  655. package/web/.next/server/chunks/ssr/[root-of-the-server]__1vkw2kvzx6fpw._.js +0 -3
  656. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yydhn6iokbm4._.js +0 -3
  657. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js +0 -4
  658. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yyfc4xf3xa-s._.js.map +0 -1
  659. package/web/.next/server/chunks/ssr/[root-of-the-server]__216xd8otb96uo._.js +0 -3
  660. package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js +0 -4
  661. package/web/.next/server/chunks/ssr/_080ao10j8x4km._.js.map +0 -1
  662. package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js +0 -4
  663. package/web/.next/server/chunks/ssr/_1gb_kwx9jg1et._.js.map +0 -1
  664. package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js +0 -4
  665. package/web/.next/server/chunks/ssr/_1ulh8nd8_yv_3._.js.map +0 -1
  666. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js +0 -3
  667. package/web/.next/server/chunks/ssr/node_modules_next_dist_compiled_@opentelemetry_api_index_1oy1nwhip-98t.js.map +0 -1
  668. package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js +0 -3
  669. package/web/.next/server/chunks/ssr/web_06ue1l1ujajps._.js.map +0 -1
  670. package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js +0 -3
  671. package/web/.next/server/chunks/ssr/web_1_rm1ivvp726s._.js.map +0 -1
  672. package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js +0 -3
  673. package/web/.next/server/chunks/ssr/web_features_0k3zd1eymtkgq._.js.map +0 -1
  674. package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js +0 -3
  675. package/web/.next/server/chunks/ssr/web_features_forms_03k1kg82ux_ee._.js.map +0 -1
  676. package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js +0 -3
  677. package/web/.next/server/chunks/ssr/web_features_forms_1-88lvs4ivi73._.js.map +0 -1
  678. package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js +0 -3
  679. package/web/.next/server/chunks/ssr/web_features_forms_15gausi3cpweg._.js.map +0 -1
  680. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js +0 -3
  681. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_outside-party_tsx_06a94oekz1ckq._.js.map +0 -1
  682. package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js +0 -3
  683. package/web/.next/server/chunks/ssr/web_features_overview_state_inbox-panel_tsx_03hlegjsc27sb._.js.map +0 -1
  684. package/web/.next/static/chunks/1l1gmjf-hz7u_.css +0 -3
  685. package/web/.next/static/chunks/1ma7v1viiz247.js +0 -1
  686. package/web/.next/static/chunks/1tfvu44eel7g5.js +0 -1
  687. package/web/.next/static/chunks/2bg4wnfhuftsq.js +0 -1
  688. package/web/.next/static/chunks/2yplpvvjibfqw.js +0 -1
  689. package/web/.next/static/chunks/34syicr_5c5u1.js +0 -1
  690. package/web/.next/static/chunks/43zbq11isnos4.js +0 -1
  691. /package/web/.next/server/chunks/{[externals]__12s2uxrv8n30f._.js.map → 0b9d__next-internal_server_app_(console)_overview_focus_route_actions_10hgyjvv-6fus.js.map} +0 -0
  692. /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → Az1CqrzgGHMZVR4nw9717}/_buildManifest.js +0 -0
  693. /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → Az1CqrzgGHMZVR4nw9717}/_clientMiddlewareManifest.js +0 -0
  694. /package/web/.next/static/{ESz77-eaR5ViaU4LRqo0i → Az1CqrzgGHMZVR4nw9717}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -21,6 +21,9 @@ DATABASE_URL=postgresql://... FLEET_URL=https://fleet.example.com npm start
21
21
  | `INSTALLATION_TOKEN` | unset | The token a hosting service presents to the installation procedures (at least 32 characters, decision 0021). Unset: they are off and every fleet is served, as a self-hosted gateway needs; set: a fleet is served once switched on |
22
22
  | `PAGASAE_URL`, `PAGASAE_CLIENT_ID`, `PAGASAE_CLIENT_SECRET` | unset | pagasae, where people sign in (decision 0054), and the gateway's client there, registered with the redirect URI `<GATEWAY_PUBLIC_URL>/pagasae/callback`. All three or none; unset, nobody signs in, so no MCP client connects (only an account asks for one) |
23
23
  | `PAGASAE_APP_CLIENT_ID`, `PAGASAE_APP_CLIENT_SECRET` | unset | The gateway's pages as an app at pagasae (its `APP_CLIENTS`, redirect URI `<GATEWAY_PUBLIC_URL>/sign-in/done`), apart from the client for outside MCP clients: people sign in to the pages with the account sign-in every Aeolus app shares (aeolus-fleet's header design, H5). Both or neither, beside `PAGASAE_URL`; unset, nobody signs in to the web app's pages |
24
+ | `EMAIL_WAKE_WINDOW_MINUTES` | `60` | At least 1. The email channel sends one person ship at most one wake per this many minutes; what waits meanwhile goes in the next wake (aeolus-fleet's wake a person design, W3, W10). Email wakes need `PAGASAE_URL` and `INSTALLATION_TOKEN`, which the gateway presents to pagasae's `/api/wakes` |
25
+ | `WEB_PUSH_PUBLIC_KEY`, `WEB_PUSH_PRIVATE_KEY`, `WEB_PUSH_SUBJECT` | unset | The gateway's push keys (VAPID, as `npx web-push generate-vapid-keys` makes them), which sign each web push wake, and the `mailto:` or `https:` URL a push service may contact about them. All three or none; unset, the overview offers no web push |
26
+ | `WEB_PUSH_WAKE_WINDOW_MINUTES` | `10` | At least 1. Web push sends one person ship at most one wake per this many minutes; what waits meanwhile goes in the next wake (W3, W10) |
24
27
  | `LOG_LEVEL` | `info` | `fatal`, `error`, `warn`, `info`, `debug`, `trace` or `silent` |
25
28
 
26
29
  | Command | Does |
@@ -40,7 +43,7 @@ The API is tRPC at `/trpc`. Its procedures take an actor (decision 0057): an acc
40
43
 
41
44
  ## Parties
42
45
 
43
- argo approves an outside MCP server as a party with `parties.approve` (argo's console session): its name, its Streamable HTTP URL, the credential the gateway calls it with (a static bearer, or OAuth client credentials with their issuer), the owner argo picks for it (a person's ship or argo) and how many calls it takes at once (1 to 10, the most core's pushReceive hands at once; 4 by default). The gateway, as its own ship, commissions the party's app proxy ship of type `mcp-server` with that owner, crews it, and keeps its crew token. argo labels the proxy ship in the console, as any ship, for the network rules to select it. `parties.list` shows each party without its credential or crew token, with its proxy ship's owner and scopes as the fleet holds them, read as the actor who asked (decision 0056: the owner is core's, and the gateway keeps none of its own; null outside the actor's read reach, while there is no proxy ship, or while the fleet does not answer). `parties.get {name}` shows one. `parties.changeOwner {name, ownerShipId}` (needs `fleet:owner`) and `parties.changeScopes {name, grant, revoke}` (needs `scopes:grant`, only scopes the actor holds) change the proxy ship in the fleet as the actor, so the fleet checks its manage reach (decision 0056); the gateway keeps neither. `parties.retire` retires a party (decision 0056): it needs `fleet:manage`, and the gateway retires the proxy ship in the fleet as the actor who asked, so the fleet checks its manage reach; only then does the gateway forget the party and revoke its client's tokens. A proxy ship retired already counts as retired. Adding it again is a new request. A proxy ship left awaiting crew (the commission's answer was lost, and its secret with it) takes a new secret from a new starting prompt with `parties.crew`.
46
+ argo approves an outside MCP server as a party with `parties.approve` (argo's console session): its name, its Streamable HTTP URL, the credential the gateway calls it with (none, for a server reached only on a private network, so the gateway sends no Authorization header; a static bearer; or OAuth client credentials with their issuer), the owner argo picks for it (a person's ship or argo), how many calls it takes at once (1 to 10, the most core's pushReceive hands at once; 4 by default) and, from an actor that also holds `gateway:approve`, `tools`: each tool the check answered, switched on or off. The gateway, as its own ship, commissions the party's app proxy ship of type `mcp-server` with that owner, crews it, and keeps its crew token. argo labels the proxy ship in the console, as any ship, for the network rules to select it. `parties.list` shows each party without its credential or crew token, with its proxy ship's owner and scopes as the fleet holds them, read as the actor who asked (decision 0056: the owner is core's, and the gateway keeps none of its own; null outside the actor's read reach, while there is no proxy ship, or while the fleet does not answer). `parties.get {name}` shows one. `parties.changeOwner {name, ownerShipId}` (needs `fleet:owner`) and `parties.changeScopes {name, grant, revoke}` (needs `scopes:grant`, only scopes the actor holds) change the proxy ship in the fleet as the actor, so the fleet checks its manage reach (decision 0056); the gateway keeps neither. `parties.retire` retires a party (decision 0056): it needs `fleet:manage`, and the gateway retires the proxy ship in the fleet as the actor who asked, so the fleet checks its manage reach; only then does the gateway forget the party and revoke its client's tokens. A proxy ship retired already counts as retired. Adding it again is a new request. A proxy ship left awaiting crew (the commission's answer was lost, and its secret with it) takes a new secret from a new starting prompt with `parties.crew`.
44
47
 
45
48
  Once a proxy ship is crewed, the gateway's ship writes what the gateway checked about it as verified facts (`fleet:verify`, decision 0059), which discovery shows beside its statement: `tlsHost` for an MCP server reached over https, `clientIdDocumentDomain` for an MCP client known by an https metadata document. A write the fleet refuses is logged and leaves the approval as it is; in a fleet that applies its own network rules the gateway's ship has no manage reach over its proxy ships, so the fleet refuses them there. The gateway's ship needs `fleet:verify` to connect.
46
49
 
@@ -48,14 +51,18 @@ The gateway keeps outside credentials and crew tokens as they are in its own dat
48
51
 
49
52
  `parties.state` states the proxy ship anew from the server's `tools/list`: each tool is one capability with its MCP fields and annotations, called with `application/vnd.aeolus.mcp-tool+json; name=<tool>` (the tool arguments as a JSON object) and answered with `application/vnd.aeolus.mcp-result+json; name=<tool>` (the tool result). The summary names the party only, never its URL or credential. Each capability states the gateway's own timing: `waitMs`, how long an outside client waits for the answer (`MCP_WAIT_MAX_MS`), and `deadlineMs`, when the gateway gives up on the server's `tools/call` (`TOOL_CALL_TIMEOUT_MS`). `parties.markTool` marks a tool repeatable, or takes the mark off, and states it at once: only argo's mark lets the gateway hand a call that died unanswered again; the server's hints never do.
50
53
 
54
+ Each tool of a server has a switch, per party: every ship that may reach the party reaches the same tools (aeolus-fleet#1151). The statement holds only the tools switched on, and a call to a tool not switched on is answered the error result `tool not enabled for this party` and never reaches the server. `parties.switchTool {name, tool, isOn}` (needs `gateway:approve`) keeps one switch, then states the proxy ship at once; while it cannot be stated, the switch waits for its next statement, and calls are refused at once all the same. `parties.tools` answers each tool the server lists now with its switch, `isNew` for one listed after the switches were kept, and `isReadOnly` when its annotations say so. A tool the server adds later starts off. A party added with no tool choice (before switches, through a request, or by an actor without `gateway:approve`) keeps every tool it lists at its next statement on.
55
+
51
56
  ## The parties pages
52
57
 
53
- The parties pages are the web app's, for accounts by scope, in the fleet their address names (`?fleet=<fleet id>`): `/parties` (the parties with their state, and for an account holding `fleet:manage` a form to approve an MCP server and per party the forms to hand over a new secret, state its tools and mark a tool repeatable), `/outside-parties` (the switch, for `fleet:network`, and every outside party), one outside party at `/outside-parties/<name>` (changing its owner and scopes, retiring it) and adding a server at `/outside-parties/add`. Each page asks the API, from the web app's server at the gateway's own port on this machine, as the browser that asked; each form is a server action the same server answers, and the API checks every scope.
58
+ The parties pages are the web app's, for accounts by scope, in the fleet their address names (`?fleet=<fleet id>`): `/parties` (the parties with their state, and for an account holding `fleet:manage` a form to approve an MCP server and per party the forms to hand over a new secret, state its tools and mark a tool repeatable), `/outside-parties` (the switch, for `fleet:network`, and every outside party), one outside party at `/outside-parties/<name>` (changing its owner and scopes, retiring it, and for an account holding `gateway:approve` a switch per tool of a server, each saying what it did) and adding a server at `/outside-parties/add` (its tools to switch for an account holding `gateway:approve`). Each page asks the API, from the web app's server at the gateway's own port on this machine, as the browser that asked; each form is a server action the same server answers, and the API checks every scope.
54
59
 
55
60
  ## The Overview
56
61
 
57
62
  `/overview?fleet=<fleet id>` is the web app's, for an account signed in with the shared sign-in: what waits on them, their inbox in two groups (what waits, and what they opened and have not answered or done), the requests to decide for a holder of `gateway:approve`, each decided at `/overview/requests/<request id>`, and the requests they asked. Opening a delivery acknowledges it and shows it whole once; it is answered or done in place. The page reads itself again whenever its fleet's requests change, following the API's `requests.changes` (server-sent events) through `/overview/changes`.
58
63
 
64
+ While an Overview page is in focus it holds `/overview/focus` open (the API's `people.focus`), and the gateway hands what arrives for the person through channel `page`, sending no wake (wake a person, W6). Its section When something waits turns web push on for a browser (asking the browser's permission), lists the browsers turned on and removes one, where the gateway holds push keys; nothing is on by default. A web push wake says only the fleet's name, that something waits and the Overview's link, shown by the `/wake-worker.js` service worker. A browser whose push service answers 404 or 410 takes no wake again, and the section says it is gone.
65
+
59
66
  ## MCP out
60
67
 
61
68
  From its start, and as soon as a party is crewed, the gateway takes the calls of each crewed party's proxy ship as its crew (interop 5.2). A ship of the fleet calls a tool by sending the proxy ship the tool's input type, `application/vnd.aeolus.mcp-tool+json; name=<tool>`, with the tool arguments as a JSON object. The gateway reports it handed, makes the `tools/call` with the vault's credential, and replies with the result (an error result included) naming the request, then acknowledges and reports it handled. It keeps each call in its database, so a restart replies again and never calls again what may have run.
@@ -73,10 +80,11 @@ The gateway is an OAuth 2.1 authorization server for outside MCP clients, such a
73
80
  - `/.well-known/oauth-protected-resource` (RFC 9728) names the gateway as the authorization server of its MCP endpoint, `<GATEWAY_PUBLIC_URL>/mcp`; `/.well-known/oauth-authorization-server` (RFC 8414) states what it serves.
74
81
  - A client is pre-registered by argo with `oauth.registerClient` (its name, its redirect URIs, and whether it keeps a secret, answered once), or known by its client metadata document (CIMD): its client id is the https URL of that document. There is no dynamic registration.
75
82
  - `/authorize` checks the request and sends the browser to the web app's `/authorize/pick`, which shows the client and two picks (decision 0056, Q1 a): sign in as yourself, or ask for access for this client. Either sends the person to pagasae to sign in. Whatever stops the browser, an unknown client or a sign-in from another browser among them, is the web app's page `/authorize/failed`. Only the authorization code flow with PKCE S256 is served, and the `resource` must be the gateway's MCP endpoint (RFC 8707).
76
- - A person signs in through pagasae (decision 0054). pagasae answers their only fleet, or asks which, and sends them back to `/pagasae/callback`; signed in as themselves, the gateway keeps their account's grant (the account, its fleet, its person ship and pagasae's tokens) and sends their client back with its code, with no approval. The sign-in under way travels sealed in pagasae's `state`, so nothing is stored before the fleet is known. The browser that starts it holds a secret sealed with it, in an HttpOnly cookie sent only to `/pagasae/callback` for its 10 minutes, so no other browser finishes it (login CSRF). A fleet the gateway does not serve is refused. A person's client is served their person ship's tools: `aeolus_inbox` (what waits, by titles only, at most 10), `aeolus_open` (one delivery whole; opening it acknowledges it), `aeolus_answer` (a reply to its sender, then it is handled) and `aeolus_done` (handled with no answer). The gateway makes these calls as the crew of the account's own person ship, with the account's token (decision 0057): it crews the ship once, shared by every client of the person, and crews it again when its lease ended. An account with no person ship is told so, and the fleet is asked nothing. `aeolus_ask_for_server` asks for an outside MCP server by its http or https address, as the account (decision 0056): it opens a pending request, or joins the one pending for the same server, and an approver adds the server with its credential. A server that is a party already is said so. While the fleet's outside parties are off, nobody asks.
83
+ - A person signs in through pagasae (decision 0054). pagasae answers their only fleet, or asks which, and sends them back to `/pagasae/callback`; signed in as themselves, the gateway keeps their account's grant (the account, its fleet, its person ship and pagasae's tokens) and sends their client back with its code, with no approval. The sign-in under way travels sealed in pagasae's `state`, so nothing is stored before the fleet is known. The browser that starts it holds a secret sealed with it, in an HttpOnly cookie sent only to `/pagasae/callback` for its 10 minutes, so no other browser finishes it (login CSRF). A fleet the gateway does not serve is refused. A person's client is served their person ship's tools: `aeolus_inbox` (what waits, by titles only, at most 10), `aeolus_open` (one delivery whole; opening it acknowledges it), `aeolus_answer` (a reply to its sender, then it is handled) and `aeolus_done` (handled with no answer). The gateway makes these calls as the crew of the account's own person ship, with the account's token (decision 0057): it crews the ship once, shared by every client of the person, and crews it again when its lease ended. An account with no person ship is told so, and the fleet is asked nothing. `aeolus_ask_for_server` asks for an outside MCP server by its http or https address, as the account (decision 0056): it opens a pending request, or joins the one pending for the same server, and an approver adds the server with its credential. A server that is a party already is said so. While the fleet's outside parties are off, nobody asks. The overview's When something waits section turns email on and off for the person's person ship, nothing on by default (aeolus-fleet's wake a person design, W8). The gateway waits on every person ship it crews; once a delivery that was never handed waits and email is on, it asks pagasae to send the person's account a wake, which says only that something waits in the fleet, with the overview's link, at most once per `EMAIL_WAKE_WINDOW_MINUTES`; each delivery it covers is then handed no. 1 with channel `email`. A wake pagasae refuses or does not answer hands nothing and is tried again, after 1, 5, then every 15 minutes.
77
84
  - The web app's pages sign people in with the shared account sign-in (header design H5): `/sign-in/start?return_to=<a path of the gateway's>` sends the browser to pagasae with the code flow and PKCE, naming no fleet, and `/sign-in/done` takes it back to the page; the gateway keeps nothing, as pagasae keeps the sign-in in its own cookie `aeolus_account_session` on the domain every Aeolus app shares. A page names its fleet in its address (`?fleet=<fleet id>`) and the web app's server forwards that sign-in alone and that fleet in the `aeolus-fleet` header; the API then acts as the account by the token pagasae exchanges the sign-in for in that fleet, kept until a minute before it ends. `account.inView` answers the page who it shows the fleet as (its account and scopes), the fleet to go to when it names none (the first whose gateway the account may open), or the app to go to where the account may not open the gateway (H9); UNAUTHORIZED with no shared sign-in. What went wrong is the page `/sign-in/failed`. A form posting to `/sign-in/end` from the gateway's own pages ends the shared sign-in at pagasae, signing the person out of every Aeolus app.
78
85
  - A person who asks for access for the client asks as their account. A client that is a party already is sent back with its party's code at once. Otherwise the account opens a pending request for the client, or joins the one pending, and its browser waits at the web app's `/authorize/waiting/approval`, which follows the request on `/authorize/waiting/live` and goes back to `/authorize/waiting` once it no longer waits, there to be sent on: approved and its proxy ship crewed, the client gets its party's code; denied or expired, `access_denied`. Closed meanwhile, the next try after a deny or expiry ends with `access_denied` once, and a later try asks anew. The waiting travels sealed in the page's address, and the browser holds the sign-in's secret in an HttpOnly cookie sent only to the waiting addresses, for the request's 7 days. While the fleet's outside parties are off, nobody asks. Each client party has its own app proxy ship, of type `mcp-client`; every token of a client party names its party, so every fleet call the client makes is its proxy ship's, within its reach; a person's token names their account's grant. `parties.list` shows client parties beside server parties.
79
86
  - `/token` takes a code once, within its minute, for an access token (one hour) and a refresh token (30 days). Refreshing rotates the pair; a code or a refresh token used twice revokes what it gave.
87
+ - ID-JAG (aeolus-fleet company sign-in design, slice 6): a person's MCP client whose company manages it (enterprise-managed authorization) posts to `/token` the ID-JAG its company identity provider issued for the gateway's issuer, with the JWT bearer grant (`urn:ietf:params:oauth:grant-type:jwt-bearer`, the ID-JAG as `assertion`), and needs no browser. Only a client argo registered for the code flow does, with its secret if it has one; anyone else is `invalid_client`. The gateway hands the ID-JAG to pagasae by token exchange with its own client, naming the client, and pagasae checks it against the organisation's connected Okta and finds the account a sign-in there recorded. The account's grant is kept as after a browser sign-in, and the client gets an access token (one hour) acting as the account in the client's fleet, with no refresh token: it asks its identity provider for a new ID-JAG. ID-JAG is only available for accounts in one fleet: pagasae refuses an account with rights in several (`invalid_grant`), and the person signs in at the gateway's address to choose. A refusal at pagasae is `invalid_grant`; pagasae not answering is `temporarily_unavailable` (503). The metadata states the grant and `authorization_grant_profiles_supported: ["urn:ietf:params:oauth:grant-profile:id-jag"]` where people sign in through pagasae.
80
88
 
81
89
  Codes and tokens are kept only as hashes, and so are client secrets.
82
90
 
@@ -0,0 +1,6 @@
1
+ import type { A2aAgents, GatewayStatuses } from '../../core/a2a-out/ports.js';
2
+ export declare function createA2aAgents(deps: {
3
+ timeoutMs: number;
4
+ }): A2aAgents;
5
+ /** The gateway's own statuses, as the A2A JSON the sender reads: the state, with the reason as the agent's message. */
6
+ export declare const gatewayStatuses: GatewayStatuses;
@@ -0,0 +1,238 @@
1
+ /**
2
+ * The outside A2A agents the gateway calls (slice 6), through @a2a-js/sdk's
3
+ * client over JSON-RPC or HTTP+JSON (A11), one client per call with the
4
+ * credential from the vault: none, a bearer, or a token the issuer gives
5
+ * for client credentials. A failure reads as where it happened, so the core
6
+ * decides whether it may hand the message again: an A2A error or an HTTP
7
+ * 4xx is the agent's refusal; a 5xx, a timeout or a connection broken mid
8
+ * answer is no answer, and it may have run; a credential the issuer would
9
+ * not give, or an agent no connection reached, sent nothing. Each task,
10
+ * status, artifact and message reads as the A2A JSON it came as.
11
+ */
12
+ import { AgentCard, GetTaskRequest, Message, SendMessageRequest, StreamResponse, SubscribeToTaskRequest, TaskState } from '@a2a-js/sdk';
13
+ import { Client, JsonRpcTransportFactory, RestTransportFactory } from '@a2a-js/sdk/client';
14
+ import { A2AError, TaskNotFoundError } from '@a2a-js/sdk/errors';
15
+ import { z } from 'zod';
16
+ /** The A2A version the gateway speaks to an agent. */
17
+ const A2A_VERSION = '1.0';
18
+ const HTTP_SERVER_ERROR = 500;
19
+ const HTTP_CLIENT_ERROR = 400;
20
+ /** A token kept until this long before it expires. */
21
+ const TOKEN_MARGIN_MS = 30_000;
22
+ const MS_PER_SECOND = 1_000;
23
+ /** The gateway reached no agent: its credential could not be had, or no connection was made. Nothing ran. */
24
+ class NotSentError extends Error {
25
+ }
26
+ /** The agent answered a 5xx: it may have run. */
27
+ class NoAnswerError extends Error {
28
+ }
29
+ const STATES = {
30
+ [TaskState.TASK_STATE_UNSPECIFIED]: 'unspecified',
31
+ [TaskState.TASK_STATE_SUBMITTED]: 'submitted',
32
+ [TaskState.TASK_STATE_WORKING]: 'working',
33
+ [TaskState.TASK_STATE_COMPLETED]: 'completed',
34
+ [TaskState.TASK_STATE_FAILED]: 'failed',
35
+ [TaskState.TASK_STATE_CANCELED]: 'canceled',
36
+ [TaskState.TASK_STATE_INPUT_REQUIRED]: 'inputRequired',
37
+ [TaskState.TASK_STATE_REJECTED]: 'rejected',
38
+ [TaskState.TASK_STATE_AUTH_REQUIRED]: 'authRequired',
39
+ [TaskState.UNRECOGNIZED]: 'unspecified',
40
+ };
41
+ function partsOf(parts) {
42
+ return parts.map((part) => {
43
+ switch (part.content?.$case) {
44
+ case 'text':
45
+ return { kind: 'text', text: part.content.value, mediaType: part.mediaType === '' ? 'text/plain' : part.mediaType };
46
+ case 'data':
47
+ return { kind: 'data', data: part.content.value, mediaType: part.mediaType === '' ? 'application/json' : part.mediaType };
48
+ case 'raw':
49
+ case 'url':
50
+ case undefined:
51
+ return { kind: 'other' };
52
+ }
53
+ });
54
+ }
55
+ const jsonOf = (event) => JSON.stringify(StreamResponse.toJSON(event));
56
+ function statusEvent(update) {
57
+ return { kind: 'status', state: STATES[update.status?.state ?? TaskState.TASK_STATE_UNSPECIFIED], timestamp: update.status?.timestamp ?? null, json: jsonOf({ payload: { $case: 'statusUpdate', value: { ...update, metadata: undefined } } }) };
58
+ }
59
+ function artifactEvent(update) {
60
+ return { kind: 'artifact', artifactId: update.artifact?.artifactId ?? '', isAppended: update.append, parts: partsOf(update.artifact?.parts ?? []), json: jsonOf({ payload: { $case: 'artifactUpdate', value: update } }) };
61
+ }
62
+ const messageEvent = (message) => ({ kind: 'message', messageId: message.messageId, parts: partsOf(message.parts), json: jsonOf({ payload: { $case: 'message', value: message } }) });
63
+ /** A task as it stands: each artifact, then its status. */
64
+ function eventsOfTask(task) {
65
+ return [...task.artifacts.map((artifact) => artifactEvent({ taskId: task.id, contextId: task.contextId, artifact, append: false, lastChunk: true, metadata: undefined })), statusEvent({ taskId: task.id, contextId: task.contextId, status: task.status })];
66
+ }
67
+ function eventsOfStream(response) {
68
+ switch (response.payload?.$case) {
69
+ case 'task':
70
+ return eventsOfTask(response.payload.value);
71
+ case 'message':
72
+ return [messageEvent(response.payload.value)];
73
+ case 'statusUpdate':
74
+ return [statusEvent(response.payload.value)];
75
+ case 'artifactUpdate':
76
+ return [artifactEvent(response.payload.value)];
77
+ case undefined:
78
+ return [];
79
+ }
80
+ }
81
+ function partJsonOf(part) {
82
+ switch (part.kind) {
83
+ case 'text':
84
+ return { text: part.text, mediaType: part.mediaType };
85
+ case 'data':
86
+ return { data: part.data, mediaType: part.mediaType };
87
+ case 'other':
88
+ return {};
89
+ }
90
+ }
91
+ /** The SDK's Message for the gateway's: its parts, or the sender's own A2A Message with the gateway's ids put in. */
92
+ function sdkMessageOf(message) {
93
+ const ids = { messageId: message.messageId, ...(message.taskId === null ? {} : { taskId: message.taskId }), ...(message.contextId === null ? {} : { contextId: message.contextId }) };
94
+ return message.content.kind === 'whole'
95
+ ? Message.fromJSON({ role: 'ROLE_USER', ...message.content.message, ...ids })
96
+ : Message.fromJSON({ ...ids, role: 'ROLE_USER', parts: message.content.parts.map(partJsonOf) });
97
+ }
98
+ const systemError = z.object({ code: z.string() });
99
+ /** No connection was made, so nothing was sent. */
100
+ function isConnectionRefused(error) {
101
+ const cause = error instanceof Error ? error.cause : undefined;
102
+ const failure = systemError.safeParse(cause);
103
+ return failure.success && ['ECONNREFUSED', 'ENOTFOUND', 'EHOSTUNREACH'].includes(failure.data.code);
104
+ }
105
+ const reasonOf = (error) => (error instanceof Error ? error.message : String(error));
106
+ const metadataSchema = z.object({ token_endpoint: z.url() });
107
+ const tokenSchema = z.object({ access_token: z.string().min(1), expires_in: z.number().optional() });
108
+ /** A token the issuer gives for client credentials, kept until it nearly expires. */
109
+ function createTokens() {
110
+ const kept = new Map();
111
+ return async (credential, signal) => {
112
+ const key = JSON.stringify([credential.issuer, credential.clientId, credential.scope ?? '']);
113
+ const held = kept.get(key);
114
+ if (held !== undefined && held.until > Date.now()) {
115
+ return held.token;
116
+ }
117
+ try {
118
+ const metadata = metadataSchema.parse(await (await fetch(`${credential.issuer.replace(/\/$/, '')}/.well-known/oauth-authorization-server`, { signal })).json());
119
+ const answer = await fetch(metadata.token_endpoint, {
120
+ method: 'POST',
121
+ signal,
122
+ headers: { 'content-type': 'application/x-www-form-urlencoded', authorization: `Basic ${Buffer.from(`${credential.clientId}:${credential.clientSecret}`).toString('base64')}` },
123
+ body: new URLSearchParams({ grant_type: 'client_credentials', ...(credential.scope === undefined ? {} : { scope: credential.scope }) }),
124
+ });
125
+ if (!answer.ok) {
126
+ throw new Error(`the issuer answered ${String(answer.status)}`);
127
+ }
128
+ const given = tokenSchema.parse(await answer.json());
129
+ kept.set(key, { token: given.access_token, until: Date.now() + (given.expires_in ?? 0) * MS_PER_SECOND - TOKEN_MARGIN_MS });
130
+ return given.access_token;
131
+ }
132
+ catch (error) {
133
+ throw new NotSentError(`The issuer gave no token for the client credentials: ${reasonOf(error)}`);
134
+ }
135
+ };
136
+ }
137
+ export function createA2aAgents(deps) {
138
+ const tokenOf = createTokens();
139
+ /** A client for one call, its every request signed in and timed out, and what the agent's HTTP answer was. */
140
+ const clientFor = async (connection, signal) => {
141
+ const observed = { status: undefined };
142
+ const { credential } = connection;
143
+ const authorization = credential.kind === 'none' ? undefined : credential.kind === 'bearer' ? `Bearer ${credential.token}` : `Bearer ${await tokenOf(credential, signal)}`;
144
+ const fetchImpl = async (input, init) => {
145
+ const headers = new Headers(init?.headers);
146
+ if (authorization !== undefined) {
147
+ headers.set('authorization', authorization);
148
+ }
149
+ let response;
150
+ try {
151
+ response = await fetch(input, { ...init, headers, signal: init?.signal ? AbortSignal.any([init.signal, signal]) : signal });
152
+ }
153
+ catch (error) {
154
+ throw isConnectionRefused(error) ? new NotSentError(reasonOf(error)) : error;
155
+ }
156
+ observed.status = response.status;
157
+ if (response.status >= HTTP_SERVER_ERROR) {
158
+ await response.body?.cancel();
159
+ throw new NoAnswerError(`The agent answered ${String(response.status)}`);
160
+ }
161
+ return response;
162
+ };
163
+ const card = AgentCard.fromJSON({ name: 'outside agent', supportedInterfaces: [{ url: connection.endpoint.url, protocolBinding: connection.endpoint.protocolBinding, protocolVersion: A2A_VERSION }] });
164
+ const factory = connection.endpoint.protocolBinding === 'HTTP+JSON' ? new RestTransportFactory({ fetchImpl }) : new JsonRpcTransportFactory({ fetchImpl });
165
+ return { client: new Client(await factory.create(connection.endpoint.url, card), card), observed };
166
+ };
167
+ /** Where a failure happened: refused by the agent, never sent, or unanswered; a task the agent knows no more is gone. */
168
+ const failureOf = (error, observed) => {
169
+ if (error instanceof NotSentError) {
170
+ return { kind: 'notSent', reason: error.message };
171
+ }
172
+ if (error instanceof NoAnswerError) {
173
+ return { kind: 'unanswered', reason: error.message };
174
+ }
175
+ if (error instanceof TaskNotFoundError) {
176
+ return { kind: 'gone', reason: reasonOf(error) };
177
+ }
178
+ if (error instanceof A2AError || (observed.status !== undefined && observed.status >= HTTP_CLIENT_ERROR)) {
179
+ return { kind: 'refused', reason: observed.status !== undefined && observed.status >= HTTP_CLIENT_ERROR ? `The agent answered ${String(observed.status)}: ${reasonOf(error)}` : reasonOf(error) };
180
+ }
181
+ return { kind: 'unanswered', reason: reasonOf(error) };
182
+ };
183
+ return {
184
+ send: async (connection, message) => {
185
+ const signal = AbortSignal.timeout(deps.timeoutMs);
186
+ let observed = { status: undefined };
187
+ try {
188
+ const made = await clientFor(connection, signal);
189
+ observed = made.observed;
190
+ const answer = await made.client.sendMessage(SendMessageRequest.fromJSON({ message: Message.toJSON(sdkMessageOf(message)), configuration: { returnImmediately: true } }), { signal });
191
+ return 'messageId' in answer ? { kind: 'message', event: messageEvent(answer) } : { kind: 'task', taskId: answer.id, contextId: answer.contextId, events: eventsOfTask(answer) };
192
+ }
193
+ catch (error) {
194
+ const failure = failureOf(error, observed);
195
+ return failure.kind === 'gone' ? { kind: 'refused', reason: failure.reason } : failure;
196
+ }
197
+ },
198
+ getTask: async (connection, taskId) => {
199
+ const signal = AbortSignal.timeout(deps.timeoutMs);
200
+ let observed = { status: undefined };
201
+ try {
202
+ const made = await clientFor(connection, signal);
203
+ observed = made.observed;
204
+ return { kind: 'read', events: eventsOfTask(await made.client.getTask(GetTaskRequest.fromJSON({ id: taskId }), { signal })) };
205
+ }
206
+ catch (error) {
207
+ const failure = failureOf(error, observed);
208
+ return failure.kind === 'gone' || failure.kind === 'refused' ? failure : { kind: 'unanswered', reason: failure.reason };
209
+ }
210
+ },
211
+ subscribe: async (connection, { taskId, timeoutMs, signal, onEvent }) => {
212
+ const until = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);
213
+ let observed = { status: undefined };
214
+ try {
215
+ const made = await clientFor(connection, until);
216
+ observed = made.observed;
217
+ for await (const response of made.client.resubscribeTask(SubscribeToTaskRequest.fromJSON({ id: taskId }), { signal: until })) {
218
+ for (const event of eventsOfStream(response)) {
219
+ await onEvent(event);
220
+ }
221
+ }
222
+ return { kind: 'closed' };
223
+ }
224
+ catch (error) {
225
+ const failure = failureOf(error, observed);
226
+ return failure.kind === 'gone' || failure.kind === 'refused' ? failure : { kind: 'broken', reason: failure.reason };
227
+ }
228
+ },
229
+ };
230
+ }
231
+ /** The gateway's own statuses, as the A2A JSON the sender reads: the state, with the reason as the agent's message. */
232
+ export const gatewayStatuses = {
233
+ statusOf: ({ taskId, contextId, state, reason, messageId }) => {
234
+ const message = Message.fromJSON({ messageId, taskId, contextId, role: 'ROLE_AGENT', parts: [{ text: reason }] });
235
+ return statusEvent({ taskId, contextId, status: { state: state === 'failed' ? TaskState.TASK_STATE_FAILED : TaskState.TASK_STATE_REJECTED, message, timestamp: undefined } });
236
+ },
237
+ };
238
+ //# sourceMappingURL=a2a-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-agents.js","sourceRoot":"","sources":["../../../src/adapters/a2a/a2a-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AgentCards } from '../../core/a2a-out/ports.js';
2
+ export declare function createHttpAgentCards(deps: {
3
+ timeoutMs: number;
4
+ }): AgentCards;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The reader of an outside A2A agent's public card (slice 5): a GET at the
3
+ * address an approver typed, with no credential, as a public card is read.
4
+ * The answer is the proto's AgentCard as JSON: proto JSON leaves an empty
5
+ * list out, so a list left out reads as empty. Only the fields the gateway
6
+ * uses are kept. It follows no redirect, so the card is read where the
7
+ * approver said, as the domain written as its fact is that one. The whole
8
+ * read takes at most the timeout, and at most 1 MB of the answer is read.
9
+ */
10
+ import { z } from 'zod';
11
+ import { err, ok } from '../../core/shared/result.js';
12
+ /** The most of an answer read as a card. */
13
+ const CARD_MAX_BYTES = 1024 * 1024;
14
+ const listOf = (item) => z.array(item).default([]);
15
+ const agentCardSchema = z.object({
16
+ name: z.string().min(1),
17
+ description: z.string(),
18
+ version: z.string().min(1),
19
+ supportedInterfaces: listOf(z.object({ url: z.string(), protocolBinding: z.string(), protocolVersion: z.string() })),
20
+ capabilities: z.object({ streaming: z.boolean().optional() }),
21
+ defaultInputModes: listOf(z.string()),
22
+ defaultOutputModes: listOf(z.string()),
23
+ skills: listOf(z.object({ id: z.string(), name: z.string(), description: z.string(), tags: listOf(z.string()), inputModes: listOf(z.string()), outputModes: listOf(z.string()) })),
24
+ });
25
+ /** The answer's body as text, or none once it is over the cap. */
26
+ async function cappedTextOf(response) {
27
+ if (response.body === null) {
28
+ return '';
29
+ }
30
+ const reader = response.body.getReader();
31
+ const chunks = [];
32
+ let read = 0;
33
+ for (let next = await reader.read(); !next.done; next = await reader.read()) {
34
+ // A fetch body yields bytes; Node's types name its chunks any.
35
+ const chunk = next.value;
36
+ if (!(chunk instanceof Uint8Array)) {
37
+ throw new TypeError('A fetch body yielded no bytes');
38
+ }
39
+ read += chunk.byteLength;
40
+ if (read > CARD_MAX_BYTES) {
41
+ await reader.cancel();
42
+ return undefined;
43
+ }
44
+ chunks.push(chunk);
45
+ }
46
+ return Buffer.concat(chunks).toString('utf8');
47
+ }
48
+ function cardOf(text) {
49
+ let json;
50
+ try {
51
+ json = JSON.parse(text);
52
+ }
53
+ catch {
54
+ return err({ kind: 'NOT_A_CARD', reason: 'the answer is no JSON' });
55
+ }
56
+ const parsed = agentCardSchema.safeParse(json);
57
+ if (!parsed.success) {
58
+ return err({ kind: 'NOT_A_CARD', reason: parsed.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`).join('; ') });
59
+ }
60
+ const { name, description, supportedInterfaces, capabilities, defaultInputModes, defaultOutputModes, skills } = parsed.data;
61
+ return ok({
62
+ name,
63
+ description,
64
+ supportedInterfaces,
65
+ defaultInputModes,
66
+ defaultOutputModes,
67
+ isStreaming: capabilities.streaming === true,
68
+ skills: skills.map(({ id, name: skillName, description: skillDescription, inputModes, outputModes }) => ({ id, name: skillName, description: skillDescription, inputModes, outputModes })),
69
+ });
70
+ }
71
+ export function createHttpAgentCards(deps) {
72
+ return {
73
+ read: async (cardUrl) => {
74
+ const signal = AbortSignal.timeout(deps.timeoutMs);
75
+ try {
76
+ const response = await fetch(cardUrl, { headers: { accept: 'application/json' }, redirect: 'manual', signal });
77
+ if (!response.ok) {
78
+ await response.body?.cancel();
79
+ return err({ kind: 'UNREACHABLE', reason: `the card address answered ${String(response.status)}` });
80
+ }
81
+ const text = await cappedTextOf(response);
82
+ return text === undefined ? err({ kind: 'NOT_A_CARD', reason: 'the answer is over 1 MB' }) : cardOf(text);
83
+ }
84
+ catch (error) {
85
+ return err({ kind: 'UNREACHABLE', reason: signal.aborted ? `no card within ${String(deps.timeoutMs)} ms` : error instanceof Error ? error.message : String(error) });
86
+ }
87
+ },
88
+ };
89
+ }
90
+ //# sourceMappingURL=agent-cards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cards.js","sourceRoot":"","sources":["../../../src/adapters/a2a/agent-cards.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,6BAA6B,CAAC;AAEnE,4CAA4C;AAC5C,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnC,MAAM,MAAM,GAAG,CAAsB,IAAO,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAE3E,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpH,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7D,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtC,MAAM,EAAE,MAAM,CACZ,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CACnK;CACF,CAAC,CAAC;AAEH,kEAAkE;AAClE,KAAK,UAAU,YAAY,CAAC,QAAkB;IAC5C,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5E,+DAA+D;QAC/D,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC;QACzB,IAAI,IAAI,GAAG,cAAc,EAAE,CAAC;YAC1B,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzI,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5H,OAAO,EAAE,CAAC;QACR,IAAI;QACJ,WAAW;QACX,mBAAmB;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,WAAW,EAAE,YAAY,CAAC,SAAS,KAAK,IAAI;QAC5C,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;KAC3L,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA2B;IAC9D,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/G,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;oBAC9B,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,6BAA6B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtG,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC1C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC5G,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvK,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AgentKeys } from '../../core/a2a-out/ports.js';
2
+ /** The ids of A2A out as an HMAC under the gateway's secret, of the parts as a JSON array so no part runs into the next. */
3
+ export declare function createAgentKeys(secret: string): AgentKeys;
@@ -0,0 +1,13 @@
1
+ import { createHmac } from 'node:crypto';
2
+ /** Each derivation under its own label, so a reply key is never also a messageId. */
3
+ const MESSAGE_LABEL = 'a2a-message';
4
+ const REPLY_LABEL = 'a2a-reply';
5
+ /** The ids of A2A out as an HMAC under the gateway's secret, of the parts as a JSON array so no part runs into the next. */
6
+ export function createAgentKeys(secret) {
7
+ const derived = (parts) => createHmac('sha256', secret).update(JSON.stringify(parts)).digest('base64url');
8
+ return {
9
+ messageIdOf: (fleetId, messageId) => derived([MESSAGE_LABEL, fleetId, messageId]),
10
+ replyKeyOf: (fleetId, { taskId, event }) => derived([REPLY_LABEL, fleetId, taskId, event]),
11
+ };
12
+ }
13
+ //# sourceMappingURL=agent-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-keys.js","sourceRoot":"","sources":["../../../src/adapters/crypto/agent-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,qFAAqF;AACrF,MAAM,aAAa,GAAG,aAAa,CAAC;AACpC,MAAM,WAAW,GAAG,WAAW,CAAC;AAEhC,4HAA4H;AAC5H,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpH,OAAO;QACL,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACjF,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;KAC3F,CAAC;AACJ,CAAC"}
@@ -2,6 +2,7 @@ import { createHmac, randomUUID } from 'node:crypto';
2
2
  /** Each derivation under its own label, so a key is never also a handle. */
3
3
  const IDEMPOTENCY_LABEL = 'idempotency-key';
4
4
  const HANDLE_LABEL = 'handle';
5
+ const CONTEXT_LABEL = 'context';
5
6
  /**
6
7
  * Keys as an HMAC under the gateway's secret, of the parts as a JSON array so
7
8
  * no part's colon or comma runs into the next. A client's key is never sent
@@ -13,6 +14,7 @@ export function createCallKeys(secret) {
13
14
  idempotencyKeyOf: ({ fleetId, party, key }) => derived([IDEMPOTENCY_LABEL, fleetId, party, key]),
14
15
  newIdempotencyKey: () => randomUUID(),
15
16
  handleOf: (fleetId, messageId) => derived([HANDLE_LABEL, fleetId, messageId]),
17
+ contextIdOf: (fleetId, messageId) => derived([CONTEXT_LABEL, fleetId, messageId]),
16
18
  };
17
19
  }
18
20
  //# sourceMappingURL=call-keys.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-keys.js","sourceRoot":"","sources":["../../../src/adapters/crypto/call-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIrD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC;AAE9B;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpH,OAAO;QACL,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAChG,iBAAiB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;QACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KAC9E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"call-keys.js","sourceRoot":"","sources":["../../../src/adapters/crypto/call-keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIrD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,iBAAiB,CAAC;AAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B,MAAM,aAAa,GAAG,SAAS,CAAC;AAEhC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,OAAO,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACpH,OAAO;QACL,gBAAgB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAChG,iBAAiB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;QACrC,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7E,WAAW,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KAClF,CAAC;AACJ,CAAC"}
@@ -6,6 +6,6 @@
6
6
  import { type VersionFetch } from '@aeolus-fleet/common';
7
7
  export type { VersionFetch };
8
8
  /** The oldest core the gateway runs against: the ship contract it calls (docs/compatibility.md). */
9
- export declare const MINIMUM_CORE_VERSION = "0.29.1";
9
+ export declare const MINIMUM_CORE_VERSION = "0.30.0";
10
10
  /** Stops the start when the fleet's core is older than the gateway needs, or does not say its version. */
11
11
  export declare function requireCoreVersion(fleetUrl: string, fetch?: VersionFetch): Promise<void>;
@@ -7,7 +7,7 @@ import { coreVersionRefusal } from '@aeolus-fleet/common';
7
7
  import { ConfigError } from '../../config.js';
8
8
  import { runningVersion } from '../http/version.js';
9
9
  /** The oldest core the gateway runs against: the ship contract it calls (docs/compatibility.md). */
10
- export const MINIMUM_CORE_VERSION = '0.29.1';
10
+ export const MINIMUM_CORE_VERSION = '0.30.0';
11
11
  /** Stops the start when the fleet's core is older than the gateway needs, or does not say its version. */
12
12
  export async function requireCoreVersion(fleetUrl, fetch = globalThis.fetch) {
13
13
  const refusal = await coreVersionRefusal({ packageName: 'gateway', version: runningVersion(), minimum: MINIMUM_CORE_VERSION, fleetUrl, fetch });
@@ -1,6 +1,8 @@
1
1
  import type { FleetShips } from '../../core/parties/ports.js';
2
2
  /**
3
3
  * The fleet's ships as the actor reads them (fleet.list, decision 0057):
4
- * those within its read reach, as only they carry their kind.
4
+ * those within its read reach, as only they carry their kind. The fleet
5
+ * answers a page at a time (performance S6), so the list reads on from each
6
+ * page's next cursor until it is null.
5
7
  */
6
8
  export declare function createFleetShips(fleetUrl: string): FleetShips;
@@ -1,22 +1,31 @@
1
1
  import { fleetListOutputSchema } from '@aeolus-fleet/common';
2
+ import { PAGE_SIZE_MAX } from '@aeolus-fleet/common/rules';
2
3
  import { err, ok } from '../../core/shared/result.js';
3
4
  import { readAs } from './actor-door.js';
4
5
  /**
5
6
  * The fleet's ships as the actor reads them (fleet.list, decision 0057):
6
- * those within its read reach, as only they carry their kind.
7
+ * those within its read reach, as only they carry their kind. The fleet
8
+ * answers a page at a time (performance S6), so the list reads on from each
9
+ * page's next cursor until it is null.
7
10
  */
8
11
  export function createFleetShips(fleetUrl) {
9
12
  return {
10
13
  list: async (as) => {
11
- const read = await readAs(fleetUrl, { as, procedure: 'list', input: {} });
12
- if (!read.isOk) {
13
- return read;
14
- }
15
- const ships = fleetListOutputSchema.safeParse(read.value);
16
- if (!ships.success) {
17
- return err({ code: 'UNAVAILABLE', message: 'The fleet answered no ships' });
18
- }
19
- return ok(ships.data.flatMap((ship) => ('isInReadReach' in ship ? [] : [{ shipId: ship.id, name: ship.name, kind: ship.kind, status: ship.status }])));
14
+ const ships = [];
15
+ let cursor;
16
+ do {
17
+ const read = await readAs(fleetUrl, { as, procedure: 'list', input: { ...(cursor === undefined ? {} : { cursor }), limit: PAGE_SIZE_MAX } });
18
+ if (!read.isOk) {
19
+ return read;
20
+ }
21
+ const page = fleetListOutputSchema.safeParse(read.value);
22
+ if (!page.success) {
23
+ return err({ code: 'UNAVAILABLE', message: 'The fleet answered no ships' });
24
+ }
25
+ ships.push(...page.data.items.flatMap((ship) => ('isInReadReach' in ship ? [] : [{ shipId: ship.id, name: ship.name, kind: ship.kind, status: ship.status }])));
26
+ cursor = page.data.nextCursor ?? undefined;
27
+ } while (cursor !== undefined);
28
+ return ok(ships);
20
29
  },
21
30
  };
22
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-ships.js","sourceRoot":"","sources":["../../../src/adapters/fleet/fleet-ships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnB,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzJ,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fleet-ships.js","sourceRoot":"","sources":["../../../src/adapters/fleet/fleet-ships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAG3D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACjB,MAAM,KAAK,GAAgB,EAAE,CAAC;YAC9B,IAAI,MAA0B,CAAC;YAC/B,GAAG,CAAC;gBACF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;gBAC7I,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,GAAG,qBAAqB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBAClB,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBAC9E,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC;YAC7C,CAAC,QAAQ,MAAM,KAAK,SAAS,EAAE;YAC/B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { FleetDoor, GatewayInbox } from '../../core/connection/ports.js';
2
- import type { CallSender, Discovery, ReplyReceiver } from '../../core/mcp-in/ports.js';
2
+ import type { CallSender, Discovery, ReplyReceiver, SentMessages } from '../../core/mcp-in/ports.js';
3
3
  import type { ProxyShipCrew } from '../../core/mcp-out/hand-call.js';
4
4
  import type { StatementDoor } from '../../core/mcp-out/state-party.js';
5
5
  import type { ProxyShipDoor } from '../../core/parties/ports.js';
@@ -9,7 +9,7 @@ export declare function createRestFleetDoor(fleetUrl: string, options?: {
9
9
  busyWaitsMs?: readonly number[];
10
10
  random?: () => number;
11
11
  wait?: (waitMs: number) => Promise<void>;
12
- }): FleetDoor & ProxyShipDoor & StatementDoor & ProxyShipCrew & Discovery & CallSender & ReplyReceiver & AccountDoor & Owners & {
12
+ }): FleetDoor & ProxyShipDoor & StatementDoor & ProxyShipCrew & Discovery & CallSender & ReplyReceiver & SentMessages & AccountDoor & Owners & {
13
13
  person: PersonShipDoor;
14
14
  gatewayInbox: GatewayInbox;
15
15
  };