@aeolus-fleet/gateway 0.30.0 → 0.32.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 (384) hide show
  1. package/dist/adapters/fleet/core-version.d.ts +1 -1
  2. package/dist/adapters/fleet/core-version.js +1 -1
  3. package/dist/adapters/fleet/proxy-ships-as-actor.js +5 -1
  4. package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -1
  5. package/dist/adapters/fleet/rest-fleet-door.d.ts +2 -0
  6. package/dist/adapters/fleet/rest-fleet-door.js +51 -7
  7. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  8. package/dist/adapters/http/mcp-endpoint.js +1 -1
  9. package/dist/adapters/http/mcp-endpoint.js.map +1 -1
  10. package/dist/adapters/http/person-tools.d.ts +4 -7
  11. package/dist/adapters/http/person-tools.js +76 -11
  12. package/dist/adapters/http/person-tools.js.map +1 -1
  13. package/dist/adapters/pagasae/email-channel.js +4 -2
  14. package/dist/adapters/pagasae/email-channel.js.map +1 -1
  15. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +50 -50
  16. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  17. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  18. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2 -0
  19. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +2 -0
  20. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  21. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +2 -0
  22. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +2 -0
  23. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  24. package/dist/adapters/prisma/generated/models/A2aPush.d.ts +0 -7
  25. package/dist/adapters/prisma/generated/models/Party.d.ts +70 -1
  26. package/dist/adapters/prisma/scope-requirements.d.ts +10 -0
  27. package/dist/adapters/prisma/scope-requirements.js +37 -0
  28. package/dist/adapters/prisma/scope-requirements.js.map +1 -0
  29. package/dist/adapters/trpc/router.d.ts +154 -8
  30. package/dist/adapters/trpc/router.js +130 -11
  31. package/dist/adapters/trpc/router.js.map +1 -1
  32. package/dist/app.js +38 -9
  33. package/dist/app.js.map +1 -1
  34. package/dist/core/a2a-out/agent-event.d.ts +1 -1
  35. package/dist/core/a2a-out/agent-event.js +2 -2
  36. package/dist/core/a2a-out/agent-event.js.map +1 -1
  37. package/dist/core/a2a-out/agent-statement.d.ts +2 -1
  38. package/dist/core/a2a-out/agent-statement.js +5 -2
  39. package/dist/core/a2a-out/agent-statement.js.map +1 -1
  40. package/dist/core/a2a-out/hand-a2a-message.d.ts +7 -2
  41. package/dist/core/a2a-out/hand-a2a-message.js +15 -1
  42. package/dist/core/a2a-out/hand-a2a-message.js.map +1 -1
  43. package/dist/core/a2a-out/read-agent-statement.d.ts +1 -0
  44. package/dist/core/a2a-out/read-agent-statement.js +1 -1
  45. package/dist/core/a2a-out/read-agent-statement.js.map +1 -1
  46. package/dist/core/a2a-out/state-a2a-agent.d.ts +3 -2
  47. package/dist/core/a2a-out/state-a2a-agent.js +3 -2
  48. package/dist/core/a2a-out/state-a2a-agent.js.map +1 -1
  49. package/dist/core/account-sign-in/account-in-view.d.ts +10 -1
  50. package/dist/core/account-sign-in/account-in-view.js +17 -4
  51. package/dist/core/account-sign-in/account-in-view.js.map +1 -1
  52. package/dist/core/connection/ports.d.ts +8 -0
  53. package/dist/core/mcp-out/hand-call.d.ts +6 -2
  54. package/dist/core/mcp-out/hand-call.js +14 -1
  55. package/dist/core/mcp-out/hand-call.js.map +1 -1
  56. package/dist/core/mcp-out/state-party.d.ts +3 -2
  57. package/dist/core/mcp-out/state-party.js +2 -2
  58. package/dist/core/mcp-out/state-party.js.map +1 -1
  59. package/dist/core/mcp-out/statement.d.ts +16 -0
  60. package/dist/core/mcp-out/statement.js +10 -3
  61. package/dist/core/mcp-out/statement.js.map +1 -1
  62. package/dist/core/meetings/change-own-mic.d.ts +24 -0
  63. package/dist/core/meetings/change-own-mic.js +21 -0
  64. package/dist/core/meetings/change-own-mic.js.map +1 -0
  65. package/dist/core/meetings/mic-standing.d.ts +18 -0
  66. package/dist/core/meetings/mic-standing.js +11 -0
  67. package/dist/core/meetings/mic-standing.js.map +1 -0
  68. package/dist/core/meetings/ports.d.ts +70 -0
  69. package/dist/core/meetings/ports.js +2 -0
  70. package/dist/core/meetings/ports.js.map +1 -0
  71. package/dist/core/meetings/read-meeting.d.ts +30 -0
  72. package/dist/core/meetings/read-meeting.js +26 -0
  73. package/dist/core/meetings/read-meeting.js.map +1 -0
  74. package/dist/core/operator/ports.d.ts +4 -4
  75. package/dist/core/parties/add-a2a-agent.js +1 -1
  76. package/dist/core/parties/add-a2a-agent.js.map +1 -1
  77. package/dist/core/parties/check-approving.d.ts +36 -0
  78. package/dist/core/parties/check-approving.js +48 -0
  79. package/dist/core/parties/check-approving.js.map +1 -0
  80. package/dist/core/parties/check-required-scopes.d.ts +34 -0
  81. package/dist/core/parties/check-required-scopes.js +27 -0
  82. package/dist/core/parties/check-required-scopes.js.map +1 -0
  83. package/dist/core/parties/ports.d.ts +21 -0
  84. package/dist/core/parties/read-listed-scopes.d.ts +17 -0
  85. package/dist/core/parties/read-listed-scopes.js +23 -0
  86. package/dist/core/parties/read-listed-scopes.js.map +1 -0
  87. package/dist/core/parties/read-scope-requirements.d.ts +18 -0
  88. package/dist/core/parties/read-scope-requirements.js +17 -0
  89. package/dist/core/parties/read-scope-requirements.js.map +1 -0
  90. package/dist/core/parties/scope-requirements.d.ts +34 -0
  91. package/dist/core/parties/scope-requirements.js +37 -0
  92. package/dist/core/parties/scope-requirements.js.map +1 -0
  93. package/dist/core/parties/set-scope-requirements.d.ts +45 -0
  94. package/dist/core/parties/set-scope-requirements.js +48 -0
  95. package/dist/core/parties/set-scope-requirements.js.map +1 -0
  96. package/dist/core/parties/switch-tools.d.ts +39 -0
  97. package/dist/core/parties/switch-tools.js +38 -0
  98. package/dist/core/parties/switch-tools.js.map +1 -0
  99. package/dist/core/parties/tool-switches.d.ts +4 -2
  100. package/dist/core/parties/tool-switches.js +2 -1
  101. package/dist/core/parties/tool-switches.js.map +1 -1
  102. package/dist/core/people/inbox-entry.d.ts +2 -2
  103. package/dist/core/people/inbox-entry.js +9 -2
  104. package/dist/core/people/inbox-entry.js.map +1 -1
  105. package/dist/core/people/open-delivery.d.ts +3 -1
  106. package/dist/core/people/open-delivery.js +1 -1
  107. package/dist/core/people/open-delivery.js.map +1 -1
  108. package/dist/core/people/ports.d.ts +11 -4
  109. package/dist/core/people/wake-person.d.ts +22 -10
  110. package/dist/core/people/wake-person.js +88 -20
  111. package/dist/core/people/wake-person.js.map +1 -1
  112. package/dist/core/people/web-push-channel.js +1 -1
  113. package/dist/core/people/web-push-channel.js.map +1 -1
  114. package/dist/core/shared/errors.d.ts +1 -1
  115. package/dist/core/shared/errors.js.map +1 -1
  116. package/package.json +3 -3
  117. package/src/adapters/prisma/migrations/20261025140000_scope_requirements/migration.sql +3 -0
  118. package/src/adapters/prisma/schema.prisma +69 -65
  119. package/web/.next/BUILD_ID +1 -1
  120. package/web/.next/app-path-routes-manifest.json +2 -0
  121. package/web/.next/build-manifest.json +27 -3
  122. package/web/.next/diagnostics/route-bundle-stats.json +122 -70
  123. package/web/.next/fallback-build-manifest.json +3 -3
  124. package/web/.next/prerender-manifest.json +3 -3
  125. package/web/.next/routes-manifest.json +14 -0
  126. package/web/.next/server/app/(console)/gateway-off/page/app-paths-manifest.json +3 -0
  127. package/web/.next/server/app/(console)/gateway-off/page/build-manifest.json +23 -0
  128. package/web/.next/server/app/(console)/gateway-off/page/next-font-manifest.json +11 -0
  129. package/web/.next/server/app/(console)/gateway-off/page/react-loadable-manifest.json +1 -0
  130. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +15 -0
  131. package/web/.next/server/app/(console)/gateway-off/page.js +19 -0
  132. package/web/.next/server/app/(console)/gateway-off/page.js.map +5 -0
  133. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -0
  134. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +3 -0
  135. package/web/.next/server/app/(console)/meetings/[meetingId]/page/app-paths-manifest.json +3 -0
  136. package/web/.next/server/app/(console)/meetings/[meetingId]/page/build-manifest.json +23 -0
  137. package/web/.next/server/app/(console)/meetings/[meetingId]/page/next-font-manifest.json +11 -0
  138. package/web/.next/server/app/(console)/meetings/[meetingId]/page/react-loadable-manifest.json +1 -0
  139. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +35 -0
  140. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +21 -0
  141. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.map +5 -0
  142. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -0
  143. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +3 -0
  144. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +17 -7
  145. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +4 -4
  146. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  147. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  148. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +15 -5
  149. package/web/.next/server/app/(console)/outside-parties/[name]/page.js +4 -4
  150. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  151. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  152. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +17 -7
  153. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +4 -4
  154. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  155. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  156. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +17 -7
  157. package/web/.next/server/app/(console)/outside-parties/add/page.js +3 -4
  158. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  159. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  160. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
  161. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  162. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  163. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
  164. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  165. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  166. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  167. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  168. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  169. package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
  170. package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -1
  171. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +7 -7
  172. package/web/.next/server/app/(console)/overview/page.js +3 -3
  173. package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  174. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  175. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
  176. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
  177. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
  178. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +7 -7
  179. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  180. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  181. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  182. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  183. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  184. package/web/.next/server/app/_global-error.html +1 -1
  185. package/web/.next/server/app/_global-error.rsc +1 -1
  186. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  187. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  188. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  189. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  190. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  191. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  192. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  193. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  194. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  195. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  196. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  197. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  198. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  199. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  200. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  201. package/web/.next/server/app-paths-manifest.json +2 -0
  202. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js +10 -10
  203. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +1 -1
  204. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
  205. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
  206. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
  207. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
  208. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
  209. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
  210. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
  211. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
  212. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
  213. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
  214. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
  215. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
  216. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-og0bl8lr2xq._.js +1 -1
  217. package/web/.next/server/chunks/ssr/[root-of-the-server]__0-og0bl8lr2xq._.js.map +1 -1
  218. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +3 -0
  219. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +1 -0
  220. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js +3 -0
  221. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js.map +1 -0
  222. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
  223. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
  224. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +1 -1
  225. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +1 -1
  226. package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js +4 -0
  227. package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js.map +1 -0
  228. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +4 -0
  229. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -0
  230. package/web/.next/server/chunks/ssr/{[root-of-the-server]__11w36a4le04vy._.js → [root-of-the-server]__1dc6okf5os70a._.js} +2 -2
  231. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js.map +1 -0
  232. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +1 -1
  233. package/web/.next/server/chunks/ssr/_0-lfpqqlgfhzj._.js.map +1 -1
  234. package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js +3 -0
  235. package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js.map +1 -0
  236. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  237. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  238. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +2 -2
  239. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
  240. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js +3 -0
  241. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +1 -0
  242. package/web/.next/server/chunks/ssr/_0bhvvyz0q_0ja._.js +1 -1
  243. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +4 -0
  244. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -0
  245. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  246. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  247. package/web/.next/server/chunks/ssr/_0w2ptjht34s6t._.js +3 -0
  248. package/web/.next/server/chunks/ssr/_0w2ptjht34s6t._.js.map +1 -0
  249. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  250. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  251. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
  252. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  253. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  254. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  255. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  256. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js +3 -0
  257. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js.map +1 -0
  258. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +3 -0
  259. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +1 -0
  260. package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js +3 -0
  261. package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js.map +1 -0
  262. package/web/.next/server/chunks/ssr/node_modules_0_cxkn6vujxay._.js +3 -0
  263. package/web/.next/server/chunks/ssr/node_modules_0_cxkn6vujxay._.js.map +1 -0
  264. package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js +3 -0
  265. package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js.map +1 -0
  266. package/web/.next/server/chunks/ssr/node_modules_15ceu3jhtifcw._.js +3 -0
  267. package/web/.next/server/chunks/ssr/node_modules_15ceu3jhtifcw._.js.map +1 -0
  268. package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js +1 -1
  269. package/web/.next/server/chunks/ssr/node_modules_@aeolus-fleet_common_dist_header_1jvz31plyg2f-._.js.map +1 -1
  270. package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_utils_FloatingPortalLite_mjs_1uzc1ezeugtex._.js +3 -0
  271. package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_utils_FloatingPortalLite_mjs_1uzc1ezeugtex._.js.map +1 -0
  272. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js +3 -0
  273. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js.map +1 -0
  274. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +3 -0
  275. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +1 -0
  276. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +1 -1
  277. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +1 -1
  278. package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js +3 -0
  279. package/web/.next/server/chunks/ssr/web_09zipglxee7tv._.js.map +1 -0
  280. package/web/.next/server/chunks/ssr/web_0v-7sowo0hupw._.js +1 -1
  281. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
  282. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
  283. package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js +3 -0
  284. package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js.map +1 -0
  285. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
  286. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
  287. package/web/.next/server/chunks/ssr/{web_features_0ahlkugj7fu3n._.js → web_features_0xbnkk4hfgr9v._.js} +2 -2
  288. package/web/.next/server/chunks/ssr/{web_features_0ahlkugj7fu3n._.js.map → web_features_0xbnkk4hfgr9v._.js.map} +1 -1
  289. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +1 -1
  290. package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js +3 -0
  291. package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js.map +1 -0
  292. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +1 -1
  293. package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js +3 -0
  294. package/web/.next/server/chunks/ssr/web_features_1k6q2m0sl54-8._.js.map +1 -0
  295. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  296. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  297. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  298. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  299. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  300. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  301. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js +3 -0
  302. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js.map +1 -0
  303. package/web/.next/server/chunks/ssr/web_features_frame_0pe8cwpxe1egb._.js +1 -1
  304. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  305. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  306. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +3 -0
  307. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -0
  308. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  309. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  310. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js +3 -0
  311. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js.map +1 -0
  312. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  313. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
  314. package/web/.next/server/chunks/ssr/web_features_overview_0udx5lm8igils._.js +3 -0
  315. package/web/.next/server/chunks/ssr/{web_features_overview_16dyz2ngvs14b._.js.map → web_features_overview_0udx5lm8igils._.js.map} +1 -1
  316. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
  317. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
  318. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +1 -1
  319. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +1 -1
  320. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
  321. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
  322. package/web/.next/server/chunks/ssr/web_features_overview_ui_10mb24kjiffea._.js +3 -0
  323. package/web/.next/server/chunks/ssr/web_features_overview_ui_10mb24kjiffea._.js.map +1 -0
  324. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  325. package/web/.next/server/middleware-build-manifest.js +27 -3
  326. package/web/.next/server/next-font-manifest.js +1 -1
  327. package/web/.next/server/next-font-manifest.json +8 -0
  328. package/web/.next/server/pages/500.html +1 -1
  329. package/web/.next/server/preview-props.json +3 -3
  330. package/web/.next/server/server-reference-manifest.js +1 -1
  331. package/web/.next/server/server-reference-manifest.json +76 -26
  332. package/web/.next/static/chunks/10wzmy096av_5.css +3 -0
  333. package/web/.next/static/chunks/{2_41h3v090ur9.js → 1ffk4chq_kmie.js} +1 -1
  334. package/web/.next/static/chunks/1nyfzf-d7kj96.js +1 -0
  335. package/web/.next/static/chunks/202avng4-d5jq.js +1 -0
  336. package/web/.next/static/chunks/{00njqo86bx2kb.js → 26kio8jl2dc6u.js} +1 -1
  337. package/web/.next/static/chunks/2cd4e71s711ad.js +1 -0
  338. package/web/.next/static/chunks/2i3ydqqupow_x.js +1 -0
  339. package/web/.next/static/chunks/2jvq5fses35mf.js +1 -0
  340. package/web/.next/static/chunks/2riya89_i0je8.js +1 -0
  341. package/web/.next/static/chunks/{31vy122d9fvme.js → 2sx1mxv2u71xx.js} +1 -1
  342. package/web/.next/static/chunks/3_pwm8b3mf4mf.js +1 -0
  343. package/web/.next/static/chunks/3f3s544ovqebz.js +1 -0
  344. package/web/.next/static/chunks/{2x00o45pdbkok.js → 3x_8doukmdfpu.js} +1 -1
  345. package/web/.next/static/chunks/{3apnqdh48__yw.js → 3yunex2p9do7t.js} +1 -1
  346. package/web/.next/static/chunks/{1aa1d23q1vokr.js → 40sj32h7okqjq.js} +1 -1
  347. package/web/.next/trace +1 -1
  348. package/web/.next/trace-build +1 -1
  349. package/web/.next/types/routes.d.ts +3 -1
  350. package/web/.next/types/validator.ts +34 -0
  351. package/dist/core/parties/switch-tool.d.ts +0 -29
  352. package/dist/core/parties/switch-tool.js +0 -33
  353. package/dist/core/parties/switch-tool.js.map +0 -1
  354. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js +0 -3
  355. package/web/.next/server/chunks/ssr/[root-of-the-server]__0m57jyae0dn_7._.js.map +0 -1
  356. package/web/.next/server/chunks/ssr/[root-of-the-server]__11w36a4le04vy._.js.map +0 -1
  357. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js +0 -3
  358. package/web/.next/server/chunks/ssr/[root-of-the-server]__1k25lo5ka4mgd._.js.map +0 -1
  359. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js +0 -3
  360. package/web/.next/server/chunks/ssr/[root-of-the-server]__1yjb00o7x58xv._.js.map +0 -1
  361. package/web/.next/server/chunks/ssr/node_modules_0cyjln1rocvt5._.js +0 -3
  362. package/web/.next/server/chunks/ssr/node_modules_0cyjln1rocvt5._.js.map +0 -1
  363. package/web/.next/server/chunks/ssr/node_modules_1ins1z8o_qrka._.js +0 -3
  364. package/web/.next/server/chunks/ssr/node_modules_1ins1z8o_qrka._.js.map +0 -1
  365. package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js +0 -3
  366. package/web/.next/server/chunks/ssr/web_features_0i_kwiszuiqcp._.js.map +0 -1
  367. package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js +0 -3
  368. package/web/.next/server/chunks/ssr/web_features_1--8ungjj--ht._.js.map +0 -1
  369. package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js +0 -3
  370. package/web/.next/server/chunks/ssr/web_features_1qq_ruz59ldc9._.js.map +0 -1
  371. package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js +0 -3
  372. package/web/.next/server/chunks/ssr/web_features_forms_form-state_ts_2142hiopykfk1._.js.map +0 -1
  373. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js +0 -3
  374. package/web/.next/server/chunks/ssr/web_features_outside-party_ui_20x5u9bhxeehi._.js.map +0 -1
  375. package/web/.next/server/chunks/ssr/web_features_overview_16dyz2ngvs14b._.js +0 -3
  376. package/web/.next/static/chunks/047i2x2j--shk.css +0 -3
  377. package/web/.next/static/chunks/0g4cpamshfwmn.js +0 -1
  378. package/web/.next/static/chunks/0j84uiid6fsim.js +0 -1
  379. package/web/.next/static/chunks/1ca21kggixrjz.js +0 -1
  380. package/web/.next/static/chunks/23ud2e13dn8f4.js +0 -1
  381. package/web/.next/static/chunks/3okm5g88ig1l3.js +0 -1
  382. /package/web/.next/static/{Az1CqrzgGHMZVR4nw9717 → JmnMsO8U6uK0nukLKdccI}/_buildManifest.js +0 -0
  383. /package/web/.next/static/{Az1CqrzgGHMZVR4nw9717 → JmnMsO8U6uK0nukLKdccI}/_clientMiddlewareManifest.js +0 -0
  384. /package/web/.next/static/{Az1CqrzgGHMZVR4nw9717 → JmnMsO8U6uK0nukLKdccI}/_ssgManifest.js +0 -0
@@ -26,7 +26,11 @@ import type { MarkTool } from '../../core/mcp-out/mark-tool.js';
26
26
  import type { StateParty } from '../../core/mcp-out/state-party.js';
27
27
  import type { CheckServer } from '../../core/parties/check-server.js';
28
28
  import type { ReadPartyTools } from '../../core/parties/read-party-tools.js';
29
- import type { SwitchTool } from '../../core/parties/switch-tool.js';
29
+ import type { SwitchTools } from '../../core/parties/switch-tools.js';
30
+ import type { CheckApproving } from '../../core/parties/check-approving.js';
31
+ import type { ReadListedScopes } from '../../core/parties/read-listed-scopes.js';
32
+ import type { ReadScopeRequirements } from '../../core/parties/read-scope-requirements.js';
33
+ import type { SetScopeRequirements } from '../../core/parties/set-scope-requirements.js';
30
34
  import type { RegisterClient } from '../../core/oauth/register-client.js';
31
35
  import type { DecideRequest } from '../../core/requests/decide-request.js';
32
36
  import type { ListMine } from '../../core/requests/list-mine.js';
@@ -35,6 +39,9 @@ import type { EndSignIns } from '../../core/sign-in/end-sign-ins.js';
35
39
  import type { AnswerDelivery } from '../../core/people/answer-delivery.js';
36
40
  import type { DoneDelivery } from '../../core/people/done-delivery.js';
37
41
  import type { OpenDelivery } from '../../core/people/open-delivery.js';
42
+ import type { ChangeOwnMic } from '../../core/meetings/change-own-mic.js';
43
+ import type { ReadMeeting } from '../../core/meetings/read-meeting.js';
44
+ import type { SendMessage } from '../../core/people/send-message.js';
38
45
  import type { ReadInbox } from '../../core/people/read-inbox.js';
39
46
  import type { ReadWakeChannels } from '../../core/people/read-wake-channels.js';
40
47
  import type { FocusPage } from '../../core/people/focus-page.js';
@@ -96,7 +103,11 @@ export interface Context {
96
103
  cardAddressOf: (alias: string) => string;
97
104
  stateParty: StateParty;
98
105
  markTool: MarkTool;
99
- switchTool: SwitchTool;
106
+ switchTools: SwitchTools;
107
+ readScopeRequirements: ReadScopeRequirements;
108
+ readListedScopes: ReadListedScopes;
109
+ checkApproving: CheckApproving;
110
+ setScopeRequirements: SetScopeRequirements;
100
111
  registerClient: RegisterClient;
101
112
  /** An MCP client's authorization request, as the gateway reads it before it signs the person in. */
102
113
  readAuthorization?: ReadAuthorization;
@@ -118,6 +129,9 @@ export interface Context {
118
129
  turnOnWebPush: TurnOnWebPush;
119
130
  turnOffWebPush: TurnOffWebPush;
120
131
  focusPage: FocusPage;
132
+ sendMessage: SendMessage;
133
+ readMeeting: ReadMeeting;
134
+ changeOwnMic: ChangeOwnMic;
121
135
  };
122
136
  readOutsideParties: ReadOutsideParties;
123
137
  setOutsideParties: SetOutsideParties;
@@ -140,7 +154,8 @@ export declare const gatewayRouter: import("@trpc/server").TRPCBuiltRouter<{
140
154
  * The account a page of the web app shows the fleet in its address as,
141
155
  * by the shared sign-in its server forwarded (header design H5): signed
142
156
  * in, with its scopes and never its token; the fleet to go to when the
143
- * page names none; or the app to go to where the account may not open
157
+ * page names none; that the gateway is off for the account's fleet when
158
+ * it may open the gateway in none; or the app to go to where the account may not open
144
159
  * the gateway (H9). No shared sign-in, or one that ended, is UNAUTHORIZED.
145
160
  */
146
161
  inView: import("@trpc/server").TRPCQueryProcedure<{
@@ -153,6 +168,10 @@ export declare const gatewayRouter: import("@trpc/server").TRPCBuiltRouter<{
153
168
  } | {
154
169
  kind: "goTo";
155
170
  fleetId: string;
171
+ } | {
172
+ kind: "off";
173
+ fleetName: string;
174
+ accountUrl: string;
156
175
  } | {
157
176
  kind: "elsewhere";
158
177
  url: string;
@@ -355,10 +374,11 @@ export declare const gatewayRouter: import("@trpc/server").TRPCBuiltRouter<{
355
374
  output: {
356
375
  tools: {
357
376
  name: string;
358
- isReadOnly: boolean;
359
377
  isOn: boolean;
360
378
  isNew: boolean;
361
379
  description?: string | undefined;
380
+ isReadOnly?: boolean | undefined;
381
+ isDestructive?: boolean | undefined;
362
382
  }[];
363
383
  };
364
384
  meta: object;
@@ -721,20 +741,89 @@ export declare const gatewayRouter: import("@trpc/server").TRPCBuiltRouter<{
721
741
  };
722
742
  meta: object;
723
743
  }>;
724
- /** An actor holding gateway:approve switches one tool of an outside MCP server on or off for the party (aeolus-fleet#1151): kept, then stated at once. */
725
- switchTool: import("@trpc/server").TRPCMutationProcedure<{
744
+ /** An actor holding gateway:approve within manage reach of the proxy ship switches tools of an outside MCP server on or off for the party (aeolus-fleet#1151), one or a selection (gateway scopes 4.3): kept in one change, then stated at once. */
745
+ switchTools: import("@trpc/server").TRPCMutationProcedure<{
726
746
  input: {
727
747
  name: string;
728
- tool: string;
748
+ tools: string[];
729
749
  isOn: boolean;
730
750
  };
731
751
  output: {
732
- tool: string;
752
+ tools: string[];
733
753
  isOn: boolean;
734
754
  statementRefusal: string | null;
735
755
  };
736
756
  meta: object;
737
757
  }>;
758
+ /** Every scope the fleet lists now, with its description: the scopes an approver may require (gateway scopes 4.3). Only an approver reads them. */
759
+ listedScopes: import("@trpc/server").TRPCQueryProcedure<{
760
+ input: void;
761
+ output: {
762
+ scopes: {
763
+ scope: string;
764
+ description: string;
765
+ }[];
766
+ };
767
+ meta: object;
768
+ }>;
769
+ /**
770
+ * Whether the actor approves the party: gateway:approve within manage
771
+ * reach of its proxy ship (gateway scopes 4.3, A2). Its page shows the
772
+ * controls then, and otherwise the same table read-only, saying why.
773
+ */
774
+ approving: import("@trpc/server").TRPCQueryProcedure<{
775
+ input: {
776
+ name: string;
777
+ };
778
+ output: {
779
+ isApproving: boolean;
780
+ reason: string | null;
781
+ };
782
+ meta: object;
783
+ }>;
784
+ /** Which scopes a calling ship needs for an outside MCP server or A2A agent, and the version to change them on (gateway scopes 4.2). Any actor reads them. */
785
+ scopeRequirements: import("@trpc/server").TRPCQueryProcedure<{
786
+ input: {
787
+ name: string;
788
+ };
789
+ output: {
790
+ version: number;
791
+ party: string[];
792
+ tools: {
793
+ tool: string;
794
+ scopes: string[];
795
+ }[];
796
+ };
797
+ meta: object;
798
+ }>;
799
+ /**
800
+ * An actor holding gateway:approve sets the scopes a calling ship needs
801
+ * (gateway scopes 4.2, A2): the party's set when sent, and each tool's
802
+ * sent, an empty one dropping it, all at once on the version it read;
803
+ * then stated at once, as a tool switch is.
804
+ */
805
+ setScopeRequirements: import("@trpc/server").TRPCMutationProcedure<{
806
+ input: {
807
+ name: string;
808
+ version: number;
809
+ tools: {
810
+ tool: string;
811
+ scopes: string[];
812
+ }[];
813
+ party?: string[] | undefined;
814
+ };
815
+ output: {
816
+ version: number;
817
+ party: string[];
818
+ tools: {
819
+ tool: string;
820
+ scopes: string[];
821
+ }[];
822
+ } & {
823
+ statementRefusal: string | null;
824
+ };
825
+ meta: object;
826
+ }>;
738
827
  /** argo marks a party's tool repeatable, or takes the mark off (interop 5.2): kept, then stated at once. */
739
828
  markTool: import("@trpc/server").TRPCMutationProcedure<{
740
829
  input: {
@@ -848,6 +937,63 @@ export declare const gatewayRouter: import("@trpc/server").TRPCBuiltRouter<{
848
937
  }, void, any>;
849
938
  meta: object;
850
939
  }>;
940
+ /** A meeting they take part in, with a page of its contributions, newest first, and where they stand on its mic (decision 0061). */
941
+ meeting: import("@trpc/server").TRPCQueryProcedure<{
942
+ input: {
943
+ meetingId: unknown;
944
+ cursor?: unknown;
945
+ };
946
+ output: {
947
+ openedAt: string;
948
+ endedAt: string | null;
949
+ mic: {
950
+ requests: {
951
+ ship: import("../../core/meetings/ports.js").MeetingShip;
952
+ requestedAt: string;
953
+ }[];
954
+ holder: import("../../core/meetings/ports.js").MeetingShip | null;
955
+ pattern: import("../../core/meetings/ports.js").MicPattern;
956
+ };
957
+ contributions: {
958
+ items: {
959
+ sentAt: string;
960
+ messageId: import("@aeolus-fleet/common").MessageId;
961
+ sender: import("../../core/meetings/ports.js").MeetingShip;
962
+ contentType: string;
963
+ payload: string;
964
+ }[];
965
+ nextCursor: `msg_${string}` | null;
966
+ };
967
+ yourMic: import("../../core/meetings/mic-standing.js").MicStanding;
968
+ meetingId: import("@aeolus-fleet/common").MeetingId;
969
+ title: string | null;
970
+ owner: import("../../core/meetings/ports.js").MeetingShip;
971
+ moderator: import("../../core/meetings/ports.js").MeetingShip;
972
+ participants: readonly import("../../core/meetings/ports.js").MeetingParticipant[];
973
+ };
974
+ meta: object;
975
+ }>;
976
+ /** Contributes to a meeting, once under the page's key; the fleet takes it while they hold the mic or moderate. */
977
+ contribute: import("@trpc/server").TRPCMutationProcedure<{
978
+ input: {
979
+ meetingId: unknown;
980
+ payload: string;
981
+ idempotencyKey: string;
982
+ };
983
+ output: {
984
+ messageId: import("@aeolus-fleet/common").MessageId;
985
+ };
986
+ meta: object;
987
+ }>;
988
+ /** Their own mic call: request it, withdraw the request, or release the mic they hold. */
989
+ mic: import("@trpc/server").TRPCMutationProcedure<{
990
+ input: {
991
+ meetingId: unknown;
992
+ change: "request" | "withdraw" | "release";
993
+ };
994
+ output: {};
995
+ meta: object;
996
+ }>;
851
997
  }>>;
852
998
  requests: import("@trpc/server").TRPCBuiltRouter<{
853
999
  ctx: Context;
@@ -10,7 +10,7 @@
10
10
  * installation procedures take the installation token instead (decision 0021).
11
11
  */
12
12
  import { randomUUID, timingSafeEqual } from 'node:crypto';
13
- import { idempotencyKeySchema, idSchema, shipHandleSchema } from '@aeolus-fleet/common';
13
+ import { idempotencyKeySchema, idSchema, scopeNameSchema, shipHandleSchema } from '@aeolus-fleet/common';
14
14
  import { initTRPC, TRPCError } from '@trpc/server';
15
15
  import { z } from 'zod';
16
16
  import { APPROVING_SCOPE } from '../../core/parties/approver.js';
@@ -166,13 +166,40 @@ const TOOLS_CODES = {
166
166
  NO_SUCH_PARTY: 'NOT_FOUND',
167
167
  SERVER_UNREACHABLE: 'BAD_GATEWAY',
168
168
  };
169
- /** The refusals of switching an outside MCP server's tool, as the API states them. */
170
- const SWITCH_TOOL_CODES = {
169
+ /** The refusals of reading the scopes the fleet lists, as the API states them. */
170
+ const LISTED_SCOPES_CODES = {
171
+ NOT_AN_APPROVER: 'FORBIDDEN',
172
+ NOT_CONNECTED: 'PRECONDITION_FAILED',
173
+ FLEET_UNAVAILABLE: 'BAD_GATEWAY',
174
+ };
175
+ /** The refusals of switching an outside MCP server's tools, as the API states them. */
176
+ const SWITCH_TOOLS_CODES = {
171
177
  NOT_AN_APPROVER: 'FORBIDDEN',
172
178
  NO_SUCH_PARTY: 'NOT_FOUND',
179
+ PARTY_NOT_COMMISSIONED: 'PRECONDITION_FAILED',
180
+ NOT_REACHABLE: 'FORBIDDEN',
181
+ NOT_CONNECTED: 'PRECONDITION_FAILED',
182
+ FLEET_UNAVAILABLE: 'BAD_GATEWAY',
173
183
  SERVER_UNREACHABLE: 'BAD_GATEWAY',
174
184
  NO_SUCH_TOOL: 'NOT_FOUND',
175
185
  };
186
+ /** The refusals of setting the scopes an outside party needs, as the API states them. */
187
+ const SET_SCOPE_REQUIREMENTS_CODES = {
188
+ NOT_AN_APPROVER: 'FORBIDDEN',
189
+ NO_SUCH_PARTY: 'NOT_FOUND',
190
+ PARTY_NOT_COMMISSIONED: 'PRECONDITION_FAILED',
191
+ NOT_REACHABLE: 'FORBIDDEN',
192
+ NO_SUCH_TOOL: 'BAD_REQUEST',
193
+ NOT_CONNECTED: 'PRECONDITION_FAILED',
194
+ FLEET_UNAVAILABLE: 'BAD_GATEWAY',
195
+ SCOPE_NOT_LISTED: 'BAD_REQUEST',
196
+ CONFLICT: 'CONFLICT',
197
+ };
198
+ /** A party's required scopes as the API states them: its own set, and each tool's set by name. */
199
+ const scopeRequirementsSchema = z.object({ version: z.int().min(0), party: z.array(z.string()), tools: z.array(z.object({ tool: z.string(), scopes: z.array(z.string()) })) });
200
+ function scopeRequirementsOutputOf(requirements) {
201
+ return { version: requirements.version, party: [...requirements.party], tools: [...requirements.tools].map(([tool, scopes]) => ({ tool, scopes: [...scopes] })) };
202
+ }
176
203
  /** The refusals of checking an outside MCP server, as the API states them. */
177
204
  const CHECK_CODES = {
178
205
  OUTSIDE_PARTIES_OFF: 'PRECONDITION_FAILED',
@@ -290,7 +317,24 @@ const PERSON_CODES = {
290
317
  SEND_REFUSED: 'BAD_REQUEST',
291
318
  CHANNEL_NOT_OFFERED: 'PRECONDITION_FAILED',
292
319
  INVALID_SUBSCRIPTION: 'BAD_REQUEST',
320
+ NO_SUCH_MEETING: 'NOT_FOUND',
321
+ MIC_REFUSED: 'CONFLICT',
293
322
  };
323
+ /** A contribution a person writes on the pages: plain text. */
324
+ const CONTRIBUTION_CONTENT_TYPE = 'text/plain';
325
+ /** A meeting as the pages read it, its times in ISO 8601 as every answer of the API states them. */
326
+ function meetingViewOf({ meeting, mic }) {
327
+ const at = (time) => time.toISOString();
328
+ const { openedAt, endedAt, contributions, ...rest } = meeting;
329
+ return {
330
+ ...rest,
331
+ openedAt: at(openedAt),
332
+ endedAt: endedAt === null ? null : at(endedAt),
333
+ mic: { ...meeting.mic, requests: meeting.mic.requests.map(({ ship, requestedAt }) => ({ ship, requestedAt: at(requestedAt) })) },
334
+ contributions: { items: contributions.items.map(({ sentAt, ...contribution }) => ({ ...contribution, sentAt: at(sentAt) })), nextCursor: contributions.nextCursor },
335
+ yourMic: mic,
336
+ };
337
+ }
294
338
  function personAnswerOf(answered) {
295
339
  if (!answered.isOk) {
296
340
  throw new TRPCError({ code: PERSON_CODES[answered.error.kind], message: answered.error.message });
@@ -347,6 +391,7 @@ async function fleetNameOf(ctx) {
347
391
  const accountInViewOutputSchema = z.discriminatedUnion('kind', [
348
392
  z.object({ kind: z.literal('signedIn'), fleetId: z.string(), accountId: z.string(), scopes: z.array(z.string()) }),
349
393
  z.object({ kind: z.literal('goTo'), fleetId: z.string() }),
394
+ z.object({ kind: z.literal('off'), fleetName: z.string(), accountUrl: z.string() }),
350
395
  z.object({ kind: z.literal('elsewhere'), url: z.string() }),
351
396
  ]);
352
397
  const appLinkOutputSchema = z.object({ app: z.string(), url: z.string() });
@@ -361,7 +406,8 @@ export const gatewayRouter = t.router({
361
406
  * The account a page of the web app shows the fleet in its address as,
362
407
  * by the shared sign-in its server forwarded (header design H5): signed
363
408
  * in, with its scopes and never its token; the fleet to go to when the
364
- * page names none; or the app to go to where the account may not open
409
+ * page names none; that the gateway is off for the account's fleet when
410
+ * it may open the gateway in none; or the app to go to where the account may not open
365
411
  * the gateway (H9). No shared sign-in, or one that ended, is UNAUTHORIZED.
366
412
  */
367
413
  inView: t.procedure.output(accountInViewOutputSchema).query(async ({ ctx }) => {
@@ -450,7 +496,7 @@ export const gatewayRouter = t.router({
450
496
  /** An outside MCP server's tools, as the server lists them now, asked with the credential the gateway keeps, each with its switch. Any actor reads them. */
451
497
  tools: servedProcedure
452
498
  .input(z.strictObject({ name: shipHandleSchema }))
453
- .output(z.object({ tools: z.array(z.object({ name: z.string(), description: z.string().optional(), isReadOnly: z.boolean(), isOn: z.boolean(), isNew: z.boolean() })) }))
499
+ .output(z.object({ tools: z.array(z.object({ name: z.string(), description: z.string().optional(), isReadOnly: z.boolean().optional(), isDestructive: z.boolean().optional(), isOn: z.boolean(), isNew: z.boolean() })) }))
454
500
  .query(async ({ ctx, input }) => {
455
501
  const read = await ctx.readPartyTools({ fleetId: ctx.fleetId, ...input });
456
502
  if (!read.isOk) {
@@ -651,17 +697,75 @@ export const gatewayRouter = t.router({
651
697
  }
652
698
  return stated.value;
653
699
  }),
654
- /** An actor holding gateway:approve switches one tool of an outside MCP server on or off for the party (aeolus-fleet#1151): kept, then stated at once. */
655
- switchTool: servedProcedure
656
- .input(z.strictObject({ name: shipHandleSchema, tool: z.string().min(1).max(TOOL_NAME_MAX_LENGTH), isOn: z.boolean() }))
657
- .output(z.object({ tool: z.string(), isOn: z.boolean(), statementRefusal: z.string().nullable() }))
700
+ /** An actor holding gateway:approve within manage reach of the proxy ship switches tools of an outside MCP server on or off for the party (aeolus-fleet#1151), one or a selection (gateway scopes 4.3): kept in one change, then stated at once. */
701
+ switchTools: servedProcedure
702
+ .input(z.strictObject({ name: shipHandleSchema, tools: z.array(z.string().min(1).max(TOOL_NAME_MAX_LENGTH)).min(1), isOn: z.boolean() }))
703
+ .output(z.object({ tools: z.array(z.string()), isOn: z.boolean(), statementRefusal: z.string().nullable() }))
658
704
  .mutation(async ({ ctx, input }) => {
659
- const switched = await ctx.switchTool({ actor: ctx.actor, ...input });
705
+ const switched = await ctx.switchTools({ actor: ctx.actor, as: { cookie: ctx.cookie, crewToken: ctx.crewToken }, ...input });
660
706
  if (!switched.isOk) {
661
- throw new TRPCError({ code: SWITCH_TOOL_CODES[switched.error.kind], message: switched.error.message });
707
+ throw new TRPCError({ code: SWITCH_TOOLS_CODES[switched.error.kind], message: switched.error.message });
662
708
  }
663
709
  return switched.value;
664
710
  }),
711
+ /** Every scope the fleet lists now, with its description: the scopes an approver may require (gateway scopes 4.3). Only an approver reads them. */
712
+ listedScopes: servedProcedure.output(z.object({ scopes: z.array(z.object({ scope: z.string(), description: z.string() })) })).query(async ({ ctx }) => {
713
+ const read = await ctx.readListedScopes({ actor: ctx.actor });
714
+ if (!read.isOk) {
715
+ throw new TRPCError({ code: LISTED_SCOPES_CODES[read.error.kind], message: read.error.message });
716
+ }
717
+ return { scopes: read.value };
718
+ }),
719
+ /**
720
+ * Whether the actor approves the party: gateway:approve within manage
721
+ * reach of its proxy ship (gateway scopes 4.3, A2). Its page shows the
722
+ * controls then, and otherwise the same table read-only, saying why.
723
+ */
724
+ approving: servedProcedure
725
+ .input(z.strictObject({ name: shipHandleSchema }))
726
+ .output(z.object({ isApproving: z.boolean(), reason: z.string().nullable() }))
727
+ .query(async ({ ctx, input }) => {
728
+ const checked = await ctx.checkApproving({ actor: ctx.actor, as: { cookie: ctx.cookie, crewToken: ctx.crewToken }, ...input });
729
+ if (checked.isOk) {
730
+ return { isApproving: true, reason: null };
731
+ }
732
+ if (checked.error.kind === 'NO_SUCH_PARTY') {
733
+ throw new TRPCError({ code: 'NOT_FOUND', message: checked.error.message });
734
+ }
735
+ return { isApproving: false, reason: checked.error.message };
736
+ }),
737
+ /** Which scopes a calling ship needs for an outside MCP server or A2A agent, and the version to change them on (gateway scopes 4.2). Any actor reads them. */
738
+ scopeRequirements: servedProcedure
739
+ .input(z.strictObject({ name: shipHandleSchema }))
740
+ .output(scopeRequirementsSchema)
741
+ .query(async ({ ctx, input }) => {
742
+ const read = await ctx.readScopeRequirements({ fleetId: ctx.fleetId, ...input });
743
+ if (!read.isOk) {
744
+ throw new TRPCError({ code: 'NOT_FOUND', message: read.error.message });
745
+ }
746
+ return scopeRequirementsOutputOf(read.value);
747
+ }),
748
+ /**
749
+ * An actor holding gateway:approve sets the scopes a calling ship needs
750
+ * (gateway scopes 4.2, A2): the party's set when sent, and each tool's
751
+ * sent, an empty one dropping it, all at once on the version it read;
752
+ * then stated at once, as a tool switch is.
753
+ */
754
+ setScopeRequirements: servedProcedure
755
+ .input(z.strictObject({
756
+ name: shipHandleSchema,
757
+ version: z.int().min(0),
758
+ party: z.array(scopeNameSchema).optional(),
759
+ tools: z.array(z.strictObject({ tool: z.string().min(1).max(TOOL_NAME_MAX_LENGTH), scopes: z.array(scopeNameSchema) })),
760
+ }))
761
+ .output(z.intersection(scopeRequirementsSchema, z.object({ statementRefusal: z.string().nullable() })))
762
+ .mutation(async ({ ctx, input }) => {
763
+ const set = await ctx.setScopeRequirements({ actor: ctx.actor, as: { cookie: ctx.cookie, crewToken: ctx.crewToken }, name: input.name, version: input.version, ...(input.party === undefined ? {} : { party: input.party }), tools: new Map(input.tools.map(({ tool, scopes }) => [tool, scopes])) });
764
+ if (!set.isOk) {
765
+ throw new TRPCError({ code: SET_SCOPE_REQUIREMENTS_CODES[set.error.kind], message: set.error.message });
766
+ }
767
+ return { ...scopeRequirementsOutputOf(set.value.requirements), statementRefusal: set.value.statementRefusal };
768
+ }),
665
769
  /** argo marks a party's tool repeatable, or takes the mark off (interop 5.2): kept, then stated at once. */
666
770
  markTool: managing(servedProcedure)
667
771
  .input(z.strictObject({ name: shipHandleSchema, tool: z.string().min(1).max(TOOL_NAME_MAX_LENGTH), isRepeatable: z.boolean() }))
@@ -721,6 +825,21 @@ export const gatewayRouter = t.router({
721
825
  await held;
722
826
  }
723
827
  }),
828
+ /** A meeting they take part in, with a page of its contributions, newest first, and where they stand on its mic (decision 0061). */
829
+ meeting: personProcedure
830
+ .input(z.strictObject({ meetingId: idSchema('meeting'), cursor: idSchema('message').optional() }))
831
+ .query(async ({ ctx, input: { meetingId, cursor } }) => meetingViewOf(personAnswerOf(await ctx.person.readMeeting({ caller: ctx.caller, meetingId, ...(cursor === undefined ? {} : { cursor }) })))),
832
+ /** Contributes to a meeting, once under the page's key; the fleet takes it while they hold the mic or moderate. */
833
+ contribute: personProcedure
834
+ .input(z.strictObject({ meetingId: idSchema('meeting'), payload: z.string().min(1).max(PAYLOAD_MAX_BYTES), idempotencyKey: z.string().min(1) }))
835
+ .mutation(async ({ ctx, input: { meetingId, payload, idempotencyKey } }) => personAnswerOf(await ctx.person.sendMessage({ caller: ctx.caller, to: { kind: 'meeting', meetingId }, contentType: CONTRIBUTION_CONTENT_TYPE, payload, idempotencyKey }))),
836
+ /** Their own mic call: request it, withdraw the request, or release the mic they hold. */
837
+ mic: personProcedure
838
+ .input(z.strictObject({ meetingId: idSchema('meeting'), change: z.enum(['request', 'withdraw', 'release']) }))
839
+ .mutation(async ({ ctx, input }) => {
840
+ personAnswerOf(await ctx.person.changeOwnMic({ caller: ctx.caller, ...input }));
841
+ return {};
842
+ }),
724
843
  }),
725
844
  requests: t.router({
726
845
  /** The requests the account asked, in any state, the newest first (decision 0056: Your requests). */