@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
@@ -0,0 +1,13 @@
1
+ import { type Result } from '../shared/result.js';
2
+ import type { CrewPersonShip } from './crew-person-ship.js';
3
+ import { type PersonCaller, type PersonCrewError } from './person-crew.js';
4
+ import type { WebPushSubscriptions } from './ports.js';
5
+ export type TurnOffWebPush = (input: {
6
+ caller: PersonCaller;
7
+ endpoint: string;
8
+ }) => Promise<Result<undefined, PersonCrewError>>;
9
+ /** Use case: a person removes a browser they turned web push on in (wake a person, W8): it takes no wake again. */
10
+ export declare function createTurnOffWebPush(deps: {
11
+ crewPersonShip: CrewPersonShip;
12
+ subscriptions: WebPushSubscriptions;
13
+ }): TurnOffWebPush;
@@ -0,0 +1,14 @@
1
+ import { ok } from '../shared/result.js';
2
+ import { personCrewOf } from './person-crew.js';
3
+ /** Use case: a person removes a browser they turned web push on in (wake a person, W8): it takes no wake again. */
4
+ export function createTurnOffWebPush(deps) {
5
+ return async ({ caller, endpoint }) => {
6
+ const crew = await personCrewOf(deps.crewPersonShip, caller);
7
+ if (!crew.isOk) {
8
+ return crew;
9
+ }
10
+ await deps.subscriptions.remove(caller.fleetId, { shipId: crew.value.shipId, endpoint });
11
+ return ok(undefined);
12
+ };
13
+ }
14
+ //# sourceMappingURL=turn-off-web-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-off-web-push.js","sourceRoot":"","sources":["../../../src/core/people/turn-off-web-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAKzF,mHAAmH;AACnH,MAAM,UAAU,oBAAoB,CAAC,IAA6E;IAChH,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzF,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { HostResolver } from '../a2a-in/ports.js';
2
+ import type { Clock } from '../shared/clock.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { CrewPersonShip } from './crew-person-ship.js';
6
+ import { type PersonCaller, type PersonCrewError } from './person-crew.js';
7
+ import type { WebPushSubscriptions } from './ports.js';
8
+ export interface WebPushTurnedOn {
9
+ readonly caller: PersonCaller;
10
+ /** The fleet's name its wakes say, as the person's sign-in names it. */
11
+ readonly fleetName: string;
12
+ readonly endpoint: string;
13
+ readonly keys: {
14
+ readonly p256dh: string;
15
+ readonly auth: string;
16
+ };
17
+ readonly browser: string;
18
+ }
19
+ export type TurnOnWebPush = (input: WebPushTurnedOn) => Promise<Result<undefined, PersonCrewError | DomainError<'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION'>>>;
20
+ /**
21
+ * Use case: a person turns web push on for a browser (wake a person, W8),
22
+ * with the subscription the browser's push service gave it: kept for their
23
+ * person ship, a browser turned on again kept anew. A push service is
24
+ * reached over https at public addresses only, as A2A webhooks are: an
25
+ * endpoint whose host is, or resolves to, any private, loopback or
26
+ * link-local address is refused. Refused where the gateway holds no push
27
+ * keys.
28
+ */
29
+ export declare function createTurnOnWebPush(deps: {
30
+ crewPersonShip: CrewPersonShip;
31
+ subscriptions: WebPushSubscriptions;
32
+ resolver: HostResolver;
33
+ isWebPushOffered: boolean;
34
+ clock: Clock;
35
+ }): TurnOnWebPush;
@@ -0,0 +1,49 @@
1
+ import { reachOf } from '../a2a-in/webhook-address.js';
2
+ import { refuse } from '../shared/errors.js';
3
+ import { ok } from '../shared/result.js';
4
+ import { personCrewOf } from './person-crew.js';
5
+ /** The longest push service endpoint the gateway keeps. */
6
+ const ENDPOINT_MAX_LENGTH = 2048;
7
+ /** The longest browser name, as the page names it. */
8
+ const BROWSER_MAX_LENGTH = 100;
9
+ /** A browser's P-256 public key (65 bytes) and auth secret (16 bytes), base64url as its PushSubscription states them, padded or not. */
10
+ const P256DH = /^[A-Za-z0-9_-]{87}=?$/;
11
+ const AUTH = /^[A-Za-z0-9_-]{22}(==)?$/;
12
+ function isHttpsUrl(text) {
13
+ return URL.canParse(text) && new URL(text).protocol === 'https:';
14
+ }
15
+ /**
16
+ * Use case: a person turns web push on for a browser (wake a person, W8),
17
+ * with the subscription the browser's push service gave it: kept for their
18
+ * person ship, a browser turned on again kept anew. A push service is
19
+ * reached over https at public addresses only, as A2A webhooks are: an
20
+ * endpoint whose host is, or resolves to, any private, loopback or
21
+ * link-local address is refused. Refused where the gateway holds no push
22
+ * keys.
23
+ */
24
+ export function createTurnOnWebPush(deps) {
25
+ return async ({ caller, fleetName, endpoint, keys, browser }) => {
26
+ if (!deps.isWebPushOffered) {
27
+ return refuse('CHANNEL_NOT_OFFERED', 'This gateway sends no web push');
28
+ }
29
+ if (endpoint.length > ENDPOINT_MAX_LENGTH || !isHttpsUrl(endpoint)) {
30
+ return refuse('INVALID_SUBSCRIPTION', `The push service's endpoint must be an https URL of at most ${String(ENDPOINT_MAX_LENGTH)} characters`);
31
+ }
32
+ if (!P256DH.test(keys.p256dh) || !AUTH.test(keys.auth)) {
33
+ return refuse('INVALID_SUBSCRIPTION', "The browser's push keys are not a P-256 public key and an auth secret of 16 bytes");
34
+ }
35
+ if (browser.length === 0 || browser.length > BROWSER_MAX_LENGTH) {
36
+ return refuse('INVALID_SUBSCRIPTION', `The browser's name must hold 1 to ${String(BROWSER_MAX_LENGTH)} characters`);
37
+ }
38
+ if ((await reachOf(deps.resolver, new URL(endpoint))) !== 'public') {
39
+ return refuse('INVALID_SUBSCRIPTION', "The push service's endpoint must resolve to public addresses only");
40
+ }
41
+ const crew = await personCrewOf(deps.crewPersonShip, caller);
42
+ if (!crew.isOk) {
43
+ return crew;
44
+ }
45
+ await deps.subscriptions.save({ fleetId: caller.fleetId, shipId: crew.value.shipId, endpoint, keys, browser, fleetName, addedAt: deps.clock.now(), goneAt: null });
46
+ return ok(undefined);
47
+ };
48
+ }
49
+ //# sourceMappingURL=turn-on-web-push.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-on-web-push.js","sourceRoot":"","sources":["../../../src/core/people/turn-on-web-push.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAA2C,MAAM,kBAAkB,CAAC;AAGzF,2DAA2D;AAC3D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,sDAAsD;AACtD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,wIAAwI;AACxI,MAAM,MAAM,GAAG,uBAAuB,CAAC;AACvC,MAAM,IAAI,GAAG,0BAA0B,CAAC;AAaxC,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA8I;IAChL,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAC9D,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC,qBAAqB,EAAE,gCAAgC,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,mBAAmB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,OAAO,MAAM,CAAC,sBAAsB,EAAE,+DAA+D,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACjJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,MAAM,CAAC,sBAAsB,EAAE,mFAAmF,CAAC,CAAC;QAC7H,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;YAChE,OAAO,MAAM,CAAC,sBAAsB,EAAE,qCAAqC,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QACtH,CAAC;QACD,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;YACnE,OAAO,MAAM,CAAC,sBAAsB,EAAE,mEAAmE,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACnK,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,44 @@
1
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
2
+ import type { Sleep } from '../mcp-out/run-party.js';
3
+ import type { Clock } from '../shared/clock.js';
4
+ import type { InboxChanges, PersonCrews, PersonShipDoor } from './ports.js';
5
+ import type { WakePerson } from './wake-person.js';
6
+ /**
7
+ * Why a waiter ended: the ship's crew no longer works and was dropped, the
8
+ * gateway holds no crew for the ship, or it was stopped.
9
+ */
10
+ export type WaiterEnd = {
11
+ readonly reason: 'crewEnded';
12
+ } | {
13
+ readonly reason: 'noCrew';
14
+ } | {
15
+ readonly reason: 'stopped';
16
+ };
17
+ export type WaitOnPersonShip = (ship: {
18
+ fleetId: FleetId;
19
+ shipId: ShipId;
20
+ }, signal: AbortSignal) => Promise<WaiterEnd>;
21
+ /**
22
+ * Use case: the waiter of a person ship the gateway crews (wake a person,
23
+ * W5, W7). It looks once at the ship's inbox, then asks the fleet to wait
24
+ * while the count is the one it knows, and tells the person's pages at its
25
+ * first look and each time the count changed. When something waits at its
26
+ * first look, and each time the count rose, it wakes the person (W3); a
27
+ * wake a window held back is asked for again once the window ends, and one
28
+ * that failed after a wait, longer each time. It reads the crew it holds anew for every call, so
29
+ * a ship crewed again goes on with its new crew; a crew that no longer works
30
+ * is dropped, so the next sign-in crews again, and the waiter ends. While
31
+ * the fleet does not answer, it waits longer each time.
32
+ */
33
+ export declare function createWaitOnPersonShip(deps: {
34
+ crews: PersonCrews;
35
+ door: Pick<PersonShipDoor, 'inbox'>;
36
+ changes: InboxChanges;
37
+ wakePerson: WakePerson;
38
+ clock: Clock;
39
+ sleep: Sleep;
40
+ /** How long to wait after each refusal in a row; the last repeats. */
41
+ againWaitsMs: readonly number[];
42
+ /** How long to wait before a wake that failed is tried again, each in a row; the last repeats. */
43
+ wakeAgainWaitsMs: readonly number[];
44
+ }): WaitOnPersonShip;
@@ -0,0 +1,92 @@
1
+ import { isEndedCrew } from './person-crew.js';
2
+ /**
3
+ * Use case: the waiter of a person ship the gateway crews (wake a person,
4
+ * W5, W7). It looks once at the ship's inbox, then asks the fleet to wait
5
+ * while the count is the one it knows, and tells the person's pages at its
6
+ * first look and each time the count changed. When something waits at its
7
+ * first look, and each time the count rose, it wakes the person (W3); a
8
+ * wake a window held back is asked for again once the window ends, and one
9
+ * that failed after a wait, longer each time. It reads the crew it holds anew for every call, so
10
+ * a ship crewed again goes on with its new crew; a crew that no longer works
11
+ * is dropped, so the next sign-in crews again, and the waiter ends. While
12
+ * the fleet does not answer, it waits longer each time.
13
+ */
14
+ export function createWaitOnPersonShip(deps) {
15
+ return async (ship, signal) => {
16
+ const { fleetId, shipId } = ship;
17
+ let knownWaiting;
18
+ let refusedInARow = 0;
19
+ /** When to ask for a wake again though the count did not rise: a window ended, or a failed wake waited out. */
20
+ let wakeAgainAt;
21
+ let failedWakesInARow = 0;
22
+ // Read as a call, as the signal aborts between awaits.
23
+ const isStopped = () => signal.aborted;
24
+ /** Drops the crew that no longer works, unless the ship was crewed again meanwhile: whether it was dropped. */
25
+ const isDropped = async (crewToken) => {
26
+ const held = await deps.crews.find(fleetId, shipId);
27
+ if (held?.crewToken !== crewToken) {
28
+ return false;
29
+ }
30
+ await deps.crews.drop(fleetId, shipId);
31
+ return true;
32
+ };
33
+ const waitOf = (waitsMs, inARow) => waitsMs[Math.min(inARow, waitsMs.length - 1)] ?? 0;
34
+ while (!isStopped()) {
35
+ const crew = await deps.crews.find(fleetId, shipId);
36
+ if (crew === undefined) {
37
+ return { reason: 'noCrew' };
38
+ }
39
+ // A wake held back is asked for again once due, so the wait ends by then.
40
+ const atMostMs = wakeAgainAt === undefined ? undefined : Math.max(0, wakeAgainAt.getTime() - deps.clock.now().getTime());
41
+ const answered = await deps.door.inbox(crew.crewToken, knownWaiting === undefined ? undefined : { knownWaiting, signal, ...(atMostMs === undefined ? {} : { atMostMs }) });
42
+ if (isStopped()) {
43
+ break;
44
+ }
45
+ if (!answered.isOk) {
46
+ if (isEndedCrew(answered.error)) {
47
+ if (await isDropped(crew.crewToken)) {
48
+ return { reason: 'crewEnded' };
49
+ }
50
+ continue;
51
+ }
52
+ await deps.sleep(waitOf(deps.againWaitsMs, refusedInARow), signal);
53
+ refusedInARow += 1;
54
+ continue;
55
+ }
56
+ refusedInARow = 0;
57
+ const { waiting } = answered.value;
58
+ // The first look tells too: a page may have read the inbox before the waiter started.
59
+ if (waiting !== knownWaiting) {
60
+ await deps.changes.tell(ship);
61
+ }
62
+ const hasRisen = waiting > (knownWaiting ?? 0);
63
+ knownWaiting = waiting;
64
+ const isWakeDue = wakeAgainAt !== undefined && wakeAgainAt.getTime() <= deps.clock.now().getTime();
65
+ if (!hasRisen && !isWakeDue) {
66
+ continue;
67
+ }
68
+ const woken = await deps.wakePerson(ship, crew.crewToken);
69
+ if (!woken.isOk && isEndedCrew(woken.error) && (await isDropped(crew.crewToken))) {
70
+ return { reason: 'crewEnded' };
71
+ }
72
+ // A wake the fleet refused counts as one that failed: tried again after a wait.
73
+ const outcome = woken.isOk ? woken.value : { kind: 'failed' };
74
+ switch (outcome.kind) {
75
+ case 'settled':
76
+ wakeAgainAt = undefined;
77
+ failedWakesInARow = 0;
78
+ break;
79
+ case 'inWindow':
80
+ wakeAgainAt = outcome.until;
81
+ failedWakesInARow = 0;
82
+ break;
83
+ case 'failed':
84
+ wakeAgainAt = new Date(deps.clock.now().getTime() + waitOf(deps.wakeAgainWaitsMs, failedWakesInARow));
85
+ failedWakesInARow += 1;
86
+ break;
87
+ }
88
+ }
89
+ return { reason: 'stopped' };
90
+ };
91
+ }
92
+ //# sourceMappingURL=wait-on-person-ship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wait-on-person-ship.js","sourceRoot":"","sources":["../../../src/core/people/wait-on-person-ship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { FleetRefusal } from '../connection/ports.js';
2
+ import type { Clock } from '../shared/clock.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import type { FocusedPages, PersonShip, PersonShipDoor, WakeChannel, WakesSent } from './ports.js';
5
+ /**
6
+ * What a wake came to: nothing left to wake (settled), a wake held back
7
+ * until the earliest window of a channel turned on ends (inWindow), or no
8
+ * channel sent it, so it is tried again (failed).
9
+ */
10
+ export type WakeOutcome = {
11
+ readonly kind: 'settled';
12
+ } | {
13
+ readonly kind: 'inWindow';
14
+ readonly until: Date;
15
+ } | {
16
+ readonly kind: 'failed';
17
+ };
18
+ export type WakePerson = (ship: PersonShip, crewToken: string) => Promise<Result<WakeOutcome, FleetRefusal>>;
19
+ /**
20
+ * Use case: wakes a person for what waits on their person ship (wake a
21
+ * person, W3, W8). It takes the ship's deliveries with the gateway as their
22
+ * waker; those never handed are fresh. Each channel the person turned on
23
+ * whose window has passed sends one wake for all of them; each fresh
24
+ * delivery is then handed no. 1, naming the first channel that went out, so
25
+ * a delivery is woken once. A wake held back by a window, or that no
26
+ * channel sent, hands nothing. Each channel's window is kept after the
27
+ * hand-overs, so a gateway that stopped in between wakes again: one wake
28
+ * more, nothing lost. While a page of the person is in focus, the page
29
+ * shows what arrives (W6): each fresh delivery is handed through it and no
30
+ * wake goes out.
31
+ */
32
+ export declare function createWakePerson(deps: {
33
+ door: Pick<PersonShipDoor, 'pushReceive' | 'handed'>;
34
+ channels: readonly WakeChannel[];
35
+ wakesSent: WakesSent;
36
+ focused: FocusedPages;
37
+ /** How long a page counts in focus since it was last seen so. */
38
+ focusFreshMs: number;
39
+ clock: Clock;
40
+ }): WakePerson;
@@ -0,0 +1,74 @@
1
+ import { RECEIVE_MAX_UPPER_BOUND } from '@aeolus-fleet/common';
2
+ import { err, ok } from '../shared/result.js';
3
+ /**
4
+ * Use case: wakes a person for what waits on their person ship (wake a
5
+ * person, W3, W8). It takes the ship's deliveries with the gateway as their
6
+ * waker; those never handed are fresh. Each channel the person turned on
7
+ * whose window has passed sends one wake for all of them; each fresh
8
+ * delivery is then handed no. 1, naming the first channel that went out, so
9
+ * a delivery is woken once. A wake held back by a window, or that no
10
+ * channel sent, hands nothing. Each channel's window is kept after the
11
+ * hand-overs, so a gateway that stopped in between wakes again: one wake
12
+ * more, nothing lost. While a page of the person is in focus, the page
13
+ * shows what arrives (W6): each fresh delivery is handed through it and no
14
+ * wake goes out.
15
+ */
16
+ export function createWakePerson(deps) {
17
+ return async (ship, crewToken) => {
18
+ /** Hands each fresh delivery no. 1 through the channel, up to the first refusal: that refusal, or none. */
19
+ const handEach = async (fresh, channel) => {
20
+ for (const { deliveryId } of fresh) {
21
+ const handed = await deps.door.handed(crewToken, { deliveryId, handOverNumber: 1, channel });
22
+ if (!handed.isOk) {
23
+ return handed.error;
24
+ }
25
+ }
26
+ return undefined;
27
+ };
28
+ const taken = await deps.door.pushReceive(crewToken, { max: RECEIVE_MAX_UPPER_BOUND });
29
+ if (!taken.isOk) {
30
+ return taken;
31
+ }
32
+ const fresh = taken.value.filter(({ handOverNumber }) => handOverNumber === null);
33
+ if (fresh.length === 0) {
34
+ return ok({ kind: 'settled' });
35
+ }
36
+ if (await deps.focused.isAnyInFocus(ship, new Date(deps.clock.now().getTime() - deps.focusFreshMs))) {
37
+ const refused = await handEach(fresh, 'page');
38
+ return refused === undefined ? ok({ kind: 'settled' }) : err(refused);
39
+ }
40
+ const turnedOn = (await Promise.all(deps.channels.map(async (channel) => ((await channel.isOn(ship)) ? [channel] : [])))).flat();
41
+ if (turnedOn.length === 0) {
42
+ return ok({ kind: 'settled' });
43
+ }
44
+ const now = deps.clock.now();
45
+ const windows = await Promise.all(turnedOn.map(async (channel) => {
46
+ const lastSentAt = await deps.wakesSent.lastSentAt(ship, channel.name);
47
+ return { channel, endsAt: lastSentAt === undefined ? now : new Date(lastSentAt.getTime() + channel.windowMs) };
48
+ }));
49
+ const due = windows.filter(({ endsAt }) => endsAt.getTime() <= now.getTime()).map(({ channel }) => channel);
50
+ if (due.length === 0) {
51
+ return ok({ kind: 'inWindow', until: new Date(Math.min(...windows.map(({ endsAt }) => endsAt.getTime()))) });
52
+ }
53
+ const wentOut = [];
54
+ for (const channel of due) {
55
+ if ((await channel.wake(ship)).isOk) {
56
+ wentOut.push(channel.name);
57
+ }
58
+ }
59
+ const [firstOut] = wentOut;
60
+ if (firstOut === undefined) {
61
+ return ok({ kind: 'failed' });
62
+ }
63
+ const refused = await handEach(fresh, firstOut);
64
+ // The window is kept only after the hand-overs: a gateway that stopped in between wakes again, as the design says. A refusal keeps it, so no second email follows at once.
65
+ for (const channel of wentOut) {
66
+ await deps.wakesSent.record({ ship, channel, sentAt: now });
67
+ }
68
+ if (refused !== undefined) {
69
+ return err(refused);
70
+ }
71
+ return ok({ kind: 'settled' });
72
+ };
73
+ }
74
+ //# sourceMappingURL=wake-person.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wake-person.js","sourceRoot":"","sources":["../../../src/core/people/wake-person.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { Clock } from '../shared/clock.js';
3
+ import type { WakeChannel, WebPush, WebPushSubscriptions } from './ports.js';
4
+ /**
5
+ * Web push, a channel that wakes a person (wake a person, W1, W4, W8). It is
6
+ * on while a browser they turned it on in still takes wakes. A wake goes to
7
+ * each such browser, saying only the fleet by its name and the overview
8
+ * link; it went out once one push service took it. A subscription its push
9
+ * service says is gone takes no wake again.
10
+ */
11
+ export declare function createWebPushChannel(deps: {
12
+ subscriptions: WebPushSubscriptions;
13
+ webPush: WebPush;
14
+ clock: Clock;
15
+ windowMs: number;
16
+ overviewUrlOf: (fleetId: FleetId) => string;
17
+ }): WakeChannel;
@@ -0,0 +1,35 @@
1
+ import { err, ok } from '../shared/result.js';
2
+ /**
3
+ * Web push, a channel that wakes a person (wake a person, W1, W4, W8). It is
4
+ * on while a browser they turned it on in still takes wakes. A wake goes to
5
+ * each such browser, saying only the fleet by its name and the overview
6
+ * link; it went out once one push service took it. A subscription its push
7
+ * service says is gone takes no wake again.
8
+ */
9
+ export function createWebPushChannel(deps) {
10
+ const takingWakes = async ({ fleetId, shipId }) => (await deps.subscriptions.list(fleetId, shipId)).filter(({ goneAt }) => goneAt === null);
11
+ return {
12
+ name: 'web-push',
13
+ windowMs: deps.windowMs,
14
+ isOn: async (ship) => (await takingWakes(ship)).length > 0,
15
+ wake: async (ship) => {
16
+ const overviewUrl = deps.overviewUrlOf(ship.fleetId);
17
+ let isTaken = false;
18
+ for (const subscription of await takingWakes(ship)) {
19
+ const sent = await deps.webPush.send(subscription, { fleetName: subscription.fleetName, overviewUrl });
20
+ switch (sent) {
21
+ case 'sent':
22
+ isTaken = true;
23
+ break;
24
+ case 'gone':
25
+ await deps.subscriptions.markGone(ship.fleetId, { shipId: ship.shipId, endpoint: subscription.endpoint, goneAt: deps.clock.now() });
26
+ break;
27
+ case 'failed':
28
+ break;
29
+ }
30
+ }
31
+ return isTaken ? ok(undefined) : err({ reason: 'no push service took the wake' });
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=web-push-channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-push-channel.js","sourceRoot":"","sources":["../../../src/core/people/web-push-channel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAA4I;IAC/K,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAc,EAAkC,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACxL,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAC1D,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,KAAK,MAAM,YAAY,IAAI,MAAM,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;gBACvG,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,MAAM;wBACT,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;oBACR,KAAK,MAAM;wBACT,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACpI,MAAM;oBACR,KAAK,QAAQ;wBACX,MAAM;gBACV,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACpF,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -7,8 +7,6 @@ import { type DomainError } from '../shared/errors.js';
7
7
  import { type Result } from '../shared/result.js';
8
8
  import type { McpServerCredential } from '../vault/credential.js';
9
9
  import type { PendingRequests } from './ports.js';
10
- /** The scope the gateway declares for approving outside parties (decision 0056). */
11
- export declare const APPROVING_SCOPE = "gateway:approve";
12
10
  /** An approval: the proxy ship's name, its owner (a person ship) and its scopes; for a server, its credential and how many calls it takes at once. */
13
11
  export interface Approval {
14
12
  readonly kind: 'approve';
@@ -1,10 +1,7 @@
1
+ import { APPROVING_SCOPE, EVERY_APP_SHIP_SCOPES, scopeNotHeld } from '../parties/approver.js';
1
2
  import { refuse } from '../shared/errors.js';
2
3
  import { ok } from '../shared/result.js';
3
4
  import { noticesOf } from './outcome-notice.js';
4
- /** The scope the gateway declares for approving outside parties (decision 0056). */
5
- export const APPROVING_SCOPE = 'gateway:approve';
6
- /** The scopes every app ship gets (decision 0046), so an approver need not hold them to grant them. */
7
- const EVERY_APP_SHIP_SCOPES = new Set(['messages:send', 'messages:receive']);
8
5
  function decidedByOf(actor) {
9
6
  switch (actor.kind) {
10
7
  case 'ship':
@@ -37,7 +34,7 @@ export function createDecideRequest(deps) {
37
34
  }
38
35
  return approval.server === undefined
39
36
  ? Promise.resolve(refuse('SERVER_DETAILS_MISSING', 'Adding an outside MCP server needs its credential and how many calls it takes at once'))
40
- : deps.approveParty({ ...party, url: request.subject.url, ...approval.server });
37
+ : deps.approveParty({ ...party, url: request.subject.url, ...approval.server, toolSwitches: null });
41
38
  };
42
39
  return async ({ actor, requestId, decision }) => {
43
40
  if (!actor.scopes.includes(APPROVING_SCOPE)) {
@@ -59,7 +56,7 @@ export function createDecideRequest(deps) {
59
56
  const isDenied = await deps.requests.decide(actor.fleetId, { requestId, from: ['pending'], decision: decided, notices: noticesOf(request, { outcome: 'denied', partyName: null }) });
60
57
  return isDenied ? ok({ state: 'denied', party: null }) : refuse('ALREADY_DECIDED', 'This request is decided already');
61
58
  }
62
- const notHeld = decision.party.scopes.find((scope) => !EVERY_APP_SHIP_SCOPES.has(scope) && !actor.scopes.includes(scope));
59
+ const notHeld = scopeNotHeld(actor, decision.party.scopes);
63
60
  if (notHeld !== undefined) {
64
61
  return refuse('SCOPE_NOT_HELD', `You may grant only scopes you hold: not ${notHeld}`);
65
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decide-request.js","sourceRoot":"","sources":["../../../src/core/requests/decide-request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decide-request.js","sourceRoot":"","sources":["../../../src/core/requests/decide-request.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { refuse } from '../shared/errors.js';
2
2
  import { ok } from '../shared/result.js';
3
- import { APPROVING_SCOPE } from './decide-request.js';
3
+ import { APPROVING_SCOPE } from '../parties/approver.js';
4
4
  /** Use case: every open request of the fleet, for an actor holding gateway:approve (decision 0056: To decide on the overview). */
5
5
  export function createListToDecide(deps) {
6
6
  return async (actor) => {
@@ -1 +1 @@
1
- {"version":3,"file":"list-to-decide.js","sourceRoot":"","sources":["../../../src/core/requests/list-to-decide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,kIAAkI;AAClI,MAAM,UAAU,kBAAkB,CAAC,IAAiD;IAClF,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,eAAe,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"list-to-decide.js","sourceRoot":"","sources":["../../../src/core/requests/list-to-decide.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,kIAAkI;AAClI,MAAM,UAAU,kBAAkB,CAAC,IAAiD;IAClF,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,OAAO,MAAM,CAAC,iBAAiB,EAAE,2BAA2B,eAAe,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { type Err } from './result.js';
2
2
  /** Every reason the gateway's core refuses a request. */
3
- export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED';
3
+ export type DomainErrorKind = 'ALREADY_CONNECTED' | 'SECRET_REFUSED' | 'OTHER_FLEET' | 'MISSING_SCOPES' | 'SCOPE_REFUSED' | 'NOT_THE_OPERATOR' | 'NOT_AN_ACTOR' | 'NOT_AN_APPROVER' | 'NO_SUCH_REQUEST' | 'ALREADY_DECIDED' | 'EXPIRED' | 'SCOPE_NOT_HELD' | 'SERVER_DETAILS_MISSING' | 'REQUEST_ID_USED' | 'FLEET_UNAVAILABLE' | 'NOT_CONNECTED' | 'PARTY_EXISTS' | 'COMMISSION_REFUSED' | 'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED' | 'INVALID_REDIRECT_URIS' | 'CLIENT_HAS_PARTY' | 'PARTY_NOT_CREWED' | 'NO_SUCH_TOOL' | 'INVALID_ARGUMENTS' | 'NOT_REACHABLE' | 'SEND_REFUSED' | 'NO_SUCH_CALL' | 'NOT_A_PERSON' | 'SIGNED_OUT' | 'NO_SUCH_DELIVERY' | 'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'OUTSIDE_PARTIES_OFF' | 'INVALID_SERVER_URL' | 'NOT_A_MANAGER' | 'RETIRE_REFUSED' | 'NOT_AN_ACCOUNT' | 'PARTY_NOT_COMMISSIONED' | 'CHANGE_REFUSED' | 'UNKNOWN_ALIAS' | 'PAYLOAD_TOO_LARGE' | 'TASK_NOT_FOUND' | 'TASK_TERMINAL' | 'WEBHOOK_REFUSED' | 'PUSH_CONFIG_NOT_FOUND' | 'CONTEXT_MISMATCH' | 'CARD_UNREACHABLE' | 'CARD_INVALID' | 'NOT_A_MESSAGE' | 'CHANNEL_NOT_OFFERED' | 'INVALID_SUBSCRIPTION';
4
4
  /** Why the core refused a request. Adapters map the kind to their own error shape; the message is safe to show. */
5
5
  export interface DomainError<K extends DomainErrorKind = DomainErrorKind> {
6
6
  readonly kind: K;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAsD5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/shared/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAkE5C,qDAAqD;AACrD,MAAM,UAAU,MAAM,CAA4B,IAAO,EAAE,OAAe;IACxE,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAChC,CAAC"}
@@ -66,6 +66,19 @@ export interface Pagasae {
66
66
  kind: 'refused' | 'unavailable';
67
67
  reason: string;
68
68
  }>>;
69
+ /**
70
+ * The account's grant for an ID-JAG a client of the gateway brought
71
+ * (aeolus-fleet company sign-in design, slice 6): pagasae checks it against
72
+ * the organisation's identity provider, for the gateway and that client,
73
+ * once; refused as for any refusal there, unavailable when it did not answer.
74
+ */
75
+ exchangeIdJag(handed: {
76
+ idJag: string;
77
+ clientId: string;
78
+ }): Promise<Result<PagasaeTokens, {
79
+ kind: 'refused' | 'unavailable';
80
+ reason: string;
81
+ }>>;
69
82
  }
70
83
  /** A person's sign-in kept for their MCP client or the gateway's pages: the account in the fleet, and pagasae's tokens to act as it. */
71
84
  export interface AccountGrant {
@@ -1,10 +1,14 @@
1
1
  /**
2
- * The credential the gateway calls an outside MCP server with, kept in the
2
+ * The credential the gateway calls an outside MCP server or A2A agent with, kept in the
3
3
  * vault, the gateway's own database (as squadrons keeps crew tokens). The
4
4
  * server sees the gateway's credential, never the asker's: no rights travel
5
5
  * with a message.
6
6
  */
7
- export type McpServerCredential = {
7
+ export type McpServerCredential =
8
+ /** A server that asks for none, as one reached only on a private network: the gateway sends no Authorization header. */
9
+ {
10
+ readonly kind: 'none';
11
+ } | {
8
12
  readonly kind: 'bearer';
9
13
  readonly token: string;
10
14
  } | {
@@ -2,11 +2,16 @@
2
2
  * The gateway's workers, one per crewed party, each until the gateway stops
3
3
  * or the fleet refuses its crew token: an outside server's states its proxy
4
4
  * ship, then takes its calls (interop 5.2); an outside client's takes the
5
- * replies to its calls (Q9 a). A fleet's workers work only while its outside
5
+ * replies to its calls (Q9 a), and an A2A client's pushes its tasks' changes
6
+ * to its webhooks meanwhile (slice 4); an outside A2A agent's states its
7
+ * proxy ship from its card (slice 5), then takes its messages (slice 6). A fleet's workers work only while its outside
6
8
  * parties are on (interop I-3).
7
9
  */
8
10
  import type { FleetId } from '@aeolus-fleet/common';
9
11
  import type { FastifyBaseLogger } from 'fastify';
12
+ import type { PushToWebhooks } from './core/a2a-in/push-to-webhooks.js';
13
+ import type { RunA2aAgent } from './core/a2a-out/run-a2a-agent.js';
14
+ import type { StateA2aAgent } from './core/a2a-out/state-a2a-agent.js';
10
15
  import type { CollectReplies } from './core/mcp-in/collect-replies.js';
11
16
  import type { RunParty } from './core/mcp-out/run-party.js';
12
17
  import type { StateParty } from './core/mcp-out/state-party.js';
@@ -25,8 +30,11 @@ export interface PartyWorkers {
25
30
  export declare function createPartyWorkers(deps: {
26
31
  parties: PartyStore;
27
32
  stateParty: StateParty;
33
+ stateA2aAgent: StateA2aAgent;
28
34
  runParty: RunParty;
35
+ runA2aAgent: RunA2aAgent;
29
36
  collectReplies: CollectReplies;
37
+ pushToWebhooks: PushToWebhooks;
30
38
  servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
31
39
  log: FastifyBaseLogger;
32
40
  }): PartyWorkers;