@aeolus-fleet/gateway 0.32.2 → 0.34.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 (880) hide show
  1. package/README.md +34 -5
  2. package/dist/adapters/crypto/party-sign-in-seals.d.ts +3 -0
  3. package/dist/adapters/crypto/party-sign-in-seals.js +15 -0
  4. package/dist/adapters/crypto/party-sign-in-seals.js.map +1 -0
  5. package/dist/adapters/crypto/slack-install-seals.d.ts +3 -0
  6. package/dist/adapters/crypto/slack-install-seals.js +15 -0
  7. package/dist/adapters/crypto/slack-install-seals.js.map +1 -0
  8. package/dist/adapters/crypto/slack-link-seals.d.ts +3 -0
  9. package/dist/adapters/crypto/slack-link-seals.js +15 -0
  10. package/dist/adapters/crypto/slack-link-seals.js.map +1 -0
  11. package/dist/adapters/crypto/slack-signatures.d.ts +3 -0
  12. package/dist/adapters/crypto/slack-signatures.js +14 -0
  13. package/dist/adapters/crypto/slack-signatures.js.map +1 -0
  14. package/dist/adapters/fleet/rest-fleet-door.js +2 -2
  15. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  16. package/dist/adapters/fleet/ship-names.d.ts +7 -0
  17. package/dist/adapters/fleet/ship-names.js +25 -0
  18. package/dist/adapters/fleet/ship-names.js.map +1 -0
  19. package/dist/adapters/fleet/slack-ships.d.ts +15 -0
  20. package/dist/adapters/fleet/slack-ships.js +32 -0
  21. package/dist/adapters/fleet/slack-ships.js.map +1 -0
  22. package/dist/adapters/http/mcp-endpoint.js +1 -1
  23. package/dist/adapters/http/mcp-endpoint.js.map +1 -1
  24. package/dist/adapters/http/oauth-routes.d.ts +4 -1
  25. package/dist/adapters/http/oauth-routes.js +21 -9
  26. package/dist/adapters/http/oauth-routes.js.map +1 -1
  27. package/dist/adapters/http/openai-apps-challenge.d.ts +10 -0
  28. package/dist/adapters/http/openai-apps-challenge.js +9 -0
  29. package/dist/adapters/http/openai-apps-challenge.js.map +1 -0
  30. package/dist/adapters/http/party-sign-in-routes.d.ts +25 -0
  31. package/dist/adapters/http/party-sign-in-routes.js +45 -0
  32. package/dist/adapters/http/party-sign-in-routes.js.map +1 -0
  33. package/dist/adapters/http/person-tools.d.ts +24 -1
  34. package/dist/adapters/http/person-tools.js +43 -11
  35. package/dist/adapters/http/person-tools.js.map +1 -1
  36. package/dist/adapters/http/slack-routes.d.ts +15 -0
  37. package/dist/adapters/http/slack-routes.js +188 -0
  38. package/dist/adapters/http/slack-routes.js.map +1 -0
  39. package/dist/adapters/mcp/mcp-servers.js +22 -4
  40. package/dist/adapters/mcp/mcp-servers.js.map +1 -1
  41. package/dist/adapters/oauth/authorization-servers.d.ts +2 -0
  42. package/dist/adapters/oauth/authorization-servers.js +127 -0
  43. package/dist/adapters/oauth/authorization-servers.js.map +1 -0
  44. package/dist/adapters/oauth/party-sign-ins.d.ts +2 -0
  45. package/dist/adapters/oauth/party-sign-ins.js +152 -0
  46. package/dist/adapters/oauth/party-sign-ins.js.map +1 -0
  47. package/dist/adapters/prisma/fleet-forgetter.d.ts +1 -1
  48. package/dist/adapters/prisma/fleet-forgetter.js +2 -2
  49. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -1
  50. package/dist/adapters/prisma/generated/browser.d.ts +35 -0
  51. package/dist/adapters/prisma/generated/client.d.ts +35 -0
  52. package/dist/adapters/prisma/generated/internal/class.d.ts +77 -0
  53. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  54. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  55. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +629 -1
  56. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +97 -1
  57. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  58. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +103 -0
  59. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +97 -1
  60. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  61. package/dist/adapters/prisma/generated/models/PartyGrant.d.ts +1276 -0
  62. package/dist/adapters/prisma/generated/models/PartyGrant.js +2 -0
  63. package/dist/adapters/prisma/generated/models/PartyGrant.js.map +1 -0
  64. package/dist/adapters/prisma/generated/models/PartySignInNotice.d.ts +1003 -0
  65. package/dist/adapters/prisma/generated/models/PartySignInNotice.js +2 -0
  66. package/dist/adapters/prisma/generated/models/PartySignInNotice.js.map +1 -0
  67. package/dist/adapters/prisma/generated/models/SlackApp.d.ts +1229 -0
  68. package/dist/adapters/prisma/generated/models/SlackApp.js +2 -0
  69. package/dist/adapters/prisma/generated/models/SlackApp.js.map +1 -0
  70. package/dist/adapters/prisma/generated/models/SlackEvent.d.ts +1232 -0
  71. package/dist/adapters/prisma/generated/models/SlackEvent.js +2 -0
  72. package/dist/adapters/prisma/generated/models/SlackEvent.js.map +1 -0
  73. package/dist/adapters/prisma/generated/models/SlackLink.d.ts +1126 -0
  74. package/dist/adapters/prisma/generated/models/SlackLink.js +2 -0
  75. package/dist/adapters/prisma/generated/models/SlackLink.js.map +1 -0
  76. package/dist/adapters/prisma/generated/models/SlackPost.d.ts +1174 -0
  77. package/dist/adapters/prisma/generated/models/SlackPost.js +2 -0
  78. package/dist/adapters/prisma/generated/models/SlackPost.js.map +1 -0
  79. package/dist/adapters/prisma/generated/models/SlackWorkspace.d.ts +1143 -0
  80. package/dist/adapters/prisma/generated/models/SlackWorkspace.js +2 -0
  81. package/dist/adapters/prisma/generated/models/SlackWorkspace.js.map +1 -0
  82. package/dist/adapters/prisma/generated/models.d.ts +7 -0
  83. package/dist/adapters/prisma/party-grants.d.ts +10 -0
  84. package/dist/adapters/prisma/party-grants.js +118 -0
  85. package/dist/adapters/prisma/party-grants.js.map +1 -0
  86. package/dist/adapters/prisma/party-store.js +21 -2
  87. package/dist/adapters/prisma/party-store.js.map +1 -1
  88. package/dist/adapters/prisma/sign-in-notices.d.ts +8 -0
  89. package/dist/adapters/prisma/sign-in-notices.js +22 -0
  90. package/dist/adapters/prisma/sign-in-notices.js.map +1 -0
  91. package/dist/adapters/prisma/slack-events.d.ts +8 -0
  92. package/dist/adapters/prisma/slack-events.js +55 -0
  93. package/dist/adapters/prisma/slack-events.js.map +1 -0
  94. package/dist/adapters/prisma/slack-links.d.ts +8 -0
  95. package/dist/adapters/prisma/slack-links.js +49 -0
  96. package/dist/adapters/prisma/slack-links.js.map +1 -0
  97. package/dist/adapters/prisma/slack-posts.d.ts +4 -0
  98. package/dist/adapters/prisma/slack-posts.js +38 -0
  99. package/dist/adapters/prisma/slack-posts.js.map +1 -0
  100. package/dist/adapters/prisma/slack-stores.d.ts +6 -0
  101. package/dist/adapters/prisma/slack-stores.js +115 -0
  102. package/dist/adapters/prisma/slack-stores.js.map +1 -0
  103. package/dist/adapters/slack/slack-call.d.ts +15 -0
  104. package/dist/adapters/slack/slack-call.js +41 -0
  105. package/dist/adapters/slack/slack-call.js.map +1 -0
  106. package/dist/adapters/slack/slack-messages.d.ts +4 -0
  107. package/dist/adapters/slack/slack-messages.js +53 -0
  108. package/dist/adapters/slack/slack-messages.js.map +1 -0
  109. package/dist/adapters/slack/slack-sign-in.d.ts +4 -0
  110. package/dist/adapters/slack/slack-sign-in.js +33 -0
  111. package/dist/adapters/slack/slack-sign-in.js.map +1 -0
  112. package/dist/adapters/slack/slack-tooling.d.ts +6 -0
  113. package/dist/adapters/slack/slack-tooling.js +68 -0
  114. package/dist/adapters/slack/slack-tooling.js.map +1 -0
  115. package/dist/adapters/trpc/router.d.ts +286 -10
  116. package/dist/adapters/trpc/router.js +263 -11
  117. package/dist/adapters/trpc/router.js.map +1 -1
  118. package/dist/app.d.ts +6 -0
  119. package/dist/app.js +225 -21
  120. package/dist/app.js.map +1 -1
  121. package/dist/bin/aeolus-gateway.js +2 -0
  122. package/dist/bin/aeolus-gateway.js.map +1 -1
  123. package/dist/config.d.ts +8 -0
  124. package/dist/config.js +4 -0
  125. package/dist/config.js.map +1 -1
  126. package/dist/core/connection/connect.d.ts +12 -0
  127. package/dist/core/connection/connect.js +11 -4
  128. package/dist/core/connection/connect.js.map +1 -1
  129. package/dist/core/connection/declare-gateway-scopes.d.ts +15 -0
  130. package/dist/core/connection/declare-gateway-scopes.js +23 -0
  131. package/dist/core/connection/declare-gateway-scopes.js.map +1 -0
  132. package/dist/core/connection/ports.d.ts +5 -0
  133. package/dist/core/mcp-out/grant-calls.d.ts +69 -0
  134. package/dist/core/mcp-out/grant-calls.js +98 -0
  135. package/dist/core/mcp-out/grant-calls.js.map +1 -0
  136. package/dist/core/mcp-out/hand-call.d.ts +6 -1
  137. package/dist/core/mcp-out/hand-call.js +23 -2
  138. package/dist/core/mcp-out/hand-call.js.map +1 -1
  139. package/dist/core/mcp-out/ports.d.ts +6 -2
  140. package/dist/core/mcp-out/state-party.d.ts +5 -2
  141. package/dist/core/mcp-out/state-party.js +7 -2
  142. package/dist/core/mcp-out/state-party.js.map +1 -1
  143. package/dist/core/oauth/exchange-token.d.ts +1 -0
  144. package/dist/core/oauth/exchange-token.js +4 -3
  145. package/dist/core/oauth/exchange-token.js.map +1 -1
  146. package/dist/core/oauth/read-authorization.d.ts +3 -3
  147. package/dist/core/oauth/read-authorization.js +6 -5
  148. package/dist/core/oauth/read-authorization.js.map +1 -1
  149. package/dist/core/parties/add-sign-in-server.d.ts +25 -0
  150. package/dist/core/parties/add-sign-in-server.js +70 -0
  151. package/dist/core/parties/add-sign-in-server.js.map +1 -0
  152. package/dist/core/parties/approve-party.d.ts +2 -2
  153. package/dist/core/parties/check-approving.d.ts +3 -3
  154. package/dist/core/parties/check-approving.js +2 -2
  155. package/dist/core/parties/check-approving.js.map +1 -1
  156. package/dist/core/parties/party.d.ts +3 -2
  157. package/dist/core/parties/party.js +4 -1
  158. package/dist/core/parties/party.js.map +1 -1
  159. package/dist/core/parties/ports.d.ts +49 -0
  160. package/dist/core/parties/read-party-tools.d.ts +5 -2
  161. package/dist/core/parties/read-party-tools.js +7 -2
  162. package/dist/core/parties/read-party-tools.js.map +1 -1
  163. package/dist/core/parties/retire-party.d.ts +5 -1
  164. package/dist/core/parties/retire-party.js +6 -1
  165. package/dist/core/parties/retire-party.js.map +1 -1
  166. package/dist/core/parties/shown-party.d.ts +2 -2
  167. package/dist/core/parties/sign-in-servers.d.ts +4 -0
  168. package/dist/core/parties/sign-in-servers.js +13 -0
  169. package/dist/core/parties/sign-in-servers.js.map +1 -0
  170. package/dist/core/parties/switch-tools.d.ts +3 -1
  171. package/dist/core/parties/switch-tools.js +5 -1
  172. package/dist/core/parties/switch-tools.js.map +1 -1
  173. package/dist/core/party-grants/approved-sign-in-party.d.ts +17 -0
  174. package/dist/core/party-grants/approved-sign-in-party.js +21 -0
  175. package/dist/core/party-grants/approved-sign-in-party.js.map +1 -0
  176. package/dist/core/party-grants/call-grant.d.ts +46 -0
  177. package/dist/core/party-grants/call-grant.js +30 -0
  178. package/dist/core/party-grants/call-grant.js.map +1 -0
  179. package/dist/core/party-grants/complete-party-sign-in.d.ts +52 -0
  180. package/dist/core/party-grants/complete-party-sign-in.js +95 -0
  181. package/dist/core/party-grants/complete-party-sign-in.js.map +1 -0
  182. package/dist/core/party-grants/end-account-grants.d.ts +18 -0
  183. package/dist/core/party-grants/end-account-grants.js +16 -0
  184. package/dist/core/party-grants/end-account-grants.js.map +1 -0
  185. package/dist/core/party-grants/end-grant.d.ts +23 -0
  186. package/dist/core/party-grants/end-grant.js +33 -0
  187. package/dist/core/party-grants/end-grant.js.map +1 -0
  188. package/dist/core/party-grants/end-party-grants.d.ts +19 -0
  189. package/dist/core/party-grants/end-party-grants.js +31 -0
  190. package/dist/core/party-grants/end-party-grants.js.map +1 -0
  191. package/dist/core/party-grants/end-retired-persons-grants.d.ts +19 -0
  192. package/dist/core/party-grants/end-retired-persons-grants.js +30 -0
  193. package/dist/core/party-grants/end-retired-persons-grants.js.map +1 -0
  194. package/dist/core/party-grants/keep-grants-alive.d.ts +18 -0
  195. package/dist/core/party-grants/keep-grants-alive.js +19 -0
  196. package/dist/core/party-grants/keep-grants-alive.js.map +1 -0
  197. package/dist/core/party-grants/list-grants.d.ts +30 -0
  198. package/dist/core/party-grants/list-grants.js +34 -0
  199. package/dist/core/party-grants/list-grants.js.map +1 -0
  200. package/dist/core/party-grants/listing-connection.d.ts +29 -0
  201. package/dist/core/party-grants/listing-connection.js +17 -0
  202. package/dist/core/party-grants/listing-connection.js.map +1 -0
  203. package/dist/core/party-grants/party-grant.d.ts +50 -0
  204. package/dist/core/party-grants/party-grant.js +26 -0
  205. package/dist/core/party-grants/party-grant.js.map +1 -0
  206. package/dist/core/party-grants/ports.d.ts +180 -0
  207. package/dist/core/party-grants/ports.js +2 -0
  208. package/dist/core/party-grants/ports.js.map +1 -0
  209. package/dist/core/party-grants/read-own-grant.d.ts +33 -0
  210. package/dist/core/party-grants/read-own-grant.js +23 -0
  211. package/dist/core/party-grants/read-own-grant.js.map +1 -0
  212. package/dist/core/party-grants/refresh-grant.d.ts +41 -0
  213. package/dist/core/party-grants/refresh-grant.js +58 -0
  214. package/dist/core/party-grants/refresh-grant.js.map +1 -0
  215. package/dist/core/party-grants/remove-grant.d.ts +21 -0
  216. package/dist/core/party-grants/remove-grant.js +25 -0
  217. package/dist/core/party-grants/remove-grant.js.map +1 -0
  218. package/dist/core/party-grants/remove-own-grant.d.ts +17 -0
  219. package/dist/core/party-grants/remove-own-grant.js +21 -0
  220. package/dist/core/party-grants/remove-own-grant.js.map +1 -0
  221. package/dist/core/party-grants/sign-in-party.d.ts +23 -0
  222. package/dist/core/party-grants/sign-in-party.js +22 -0
  223. package/dist/core/party-grants/sign-in-party.js.map +1 -0
  224. package/dist/core/party-grants/start-party-sign-in.d.ts +31 -0
  225. package/dist/core/party-grants/start-party-sign-in.js +31 -0
  226. package/dist/core/party-grants/start-party-sign-in.js.map +1 -0
  227. package/dist/core/party-grants/tell-sign-in-needed.d.ts +29 -0
  228. package/dist/core/party-grants/tell-sign-in-needed.js +27 -0
  229. package/dist/core/party-grants/tell-sign-in-needed.js.map +1 -0
  230. package/dist/core/people/ports.d.ts +23 -2
  231. package/dist/core/people/wake-person.d.ts +9 -2
  232. package/dist/core/people/wake-person.js +33 -9
  233. package/dist/core/people/wake-person.js.map +1 -1
  234. package/dist/core/shared/errors.d.ts +1 -1
  235. package/dist/core/shared/errors.js.map +1 -1
  236. package/dist/core/sign-in/start-sign-in.d.ts +4 -1
  237. package/dist/core/sign-in/start-sign-in.js +8 -2
  238. package/dist/core/sign-in/start-sign-in.js.map +1 -1
  239. package/dist/core/slack/answer-in-slack.d.ts +41 -0
  240. package/dist/core/slack/answer-in-slack.js +59 -0
  241. package/dist/core/slack/answer-in-slack.js.map +1 -0
  242. package/dist/core/slack/complete-install.d.ts +27 -0
  243. package/dist/core/slack/complete-install.js +36 -0
  244. package/dist/core/slack/complete-install.js.map +1 -0
  245. package/dist/core/slack/complete-link.d.ts +41 -0
  246. package/dist/core/slack/complete-link.js +64 -0
  247. package/dist/core/slack/complete-link.js.map +1 -0
  248. package/dist/core/slack/connect-slack.d.ts +34 -0
  249. package/dist/core/slack/connect-slack.js +54 -0
  250. package/dist/core/slack/connect-slack.js.map +1 -0
  251. package/dist/core/slack/disconnect-slack.d.ts +21 -0
  252. package/dist/core/slack/disconnect-slack.js +31 -0
  253. package/dist/core/slack/disconnect-slack.js.map +1 -0
  254. package/dist/core/slack/expose-ship.d.ts +35 -0
  255. package/dist/core/slack/expose-ship.js +59 -0
  256. package/dist/core/slack/expose-ship.js.map +1 -0
  257. package/dist/core/slack/follow-exposed-ships.d.ts +20 -0
  258. package/dist/core/slack/follow-exposed-ships.js +43 -0
  259. package/dist/core/slack/follow-exposed-ships.js.map +1 -0
  260. package/dist/core/slack/gateway-bot.d.ts +20 -0
  261. package/dist/core/slack/gateway-bot.js +22 -0
  262. package/dist/core/slack/gateway-bot.js.map +1 -0
  263. package/dist/core/slack/kept-slack-event.d.ts +32 -0
  264. package/dist/core/slack/kept-slack-event.js +5 -0
  265. package/dist/core/slack/kept-slack-event.js.map +1 -0
  266. package/dist/core/slack/list-exposable.d.ts +25 -0
  267. package/dist/core/slack/list-exposable.js +32 -0
  268. package/dist/core/slack/list-exposable.js.map +1 -0
  269. package/dist/core/slack/ports.d.ts +287 -0
  270. package/dist/core/slack/ports.js +2 -0
  271. package/dist/core/slack/ports.js.map +1 -0
  272. package/dist/core/slack/read-slack-link.d.ts +23 -0
  273. package/dist/core/slack/read-slack-link.js +20 -0
  274. package/dist/core/slack/read-slack-link.js.map +1 -0
  275. package/dist/core/slack/read-slack.d.ts +42 -0
  276. package/dist/core/slack/read-slack.js +35 -0
  277. package/dist/core/slack/read-slack.js.map +1 -0
  278. package/dist/core/slack/remove-bot.d.ts +24 -0
  279. package/dist/core/slack/remove-bot.js +33 -0
  280. package/dist/core/slack/remove-bot.js.map +1 -0
  281. package/dist/core/slack/rotate-configuration-tokens.d.ts +13 -0
  282. package/dist/core/slack/rotate-configuration-tokens.js +14 -0
  283. package/dist/core/slack/rotate-configuration-tokens.js.map +1 -0
  284. package/dist/core/slack/send-slack-events.d.ts +32 -0
  285. package/dist/core/slack/send-slack-events.js +106 -0
  286. package/dist/core/slack/send-slack-events.js.map +1 -0
  287. package/dist/core/slack/ship-bot.d.ts +23 -0
  288. package/dist/core/slack/ship-bot.js +25 -0
  289. package/dist/core/slack/ship-bot.js.map +1 -0
  290. package/dist/core/slack/show-all-in-slack.d.ts +16 -0
  291. package/dist/core/slack/show-all-in-slack.js +18 -0
  292. package/dist/core/slack/show-all-in-slack.js.map +1 -0
  293. package/dist/core/slack/show-in-slack.d.ts +38 -0
  294. package/dist/core/slack/show-in-slack.js +154 -0
  295. package/dist/core/slack/show-in-slack.js.map +1 -0
  296. package/dist/core/slack/slack-app.d.ts +77 -0
  297. package/dist/core/slack/slack-app.js +53 -0
  298. package/dist/core/slack/slack-app.js.map +1 -0
  299. package/dist/core/slack/slack-event.d.ts +51 -0
  300. package/dist/core/slack/slack-event.js +18 -0
  301. package/dist/core/slack/slack-event.js.map +1 -0
  302. package/dist/core/slack/slack-link.d.ts +20 -0
  303. package/dist/core/slack/slack-link.js +2 -0
  304. package/dist/core/slack/slack-link.js.map +1 -0
  305. package/dist/core/slack/slack-markdown.d.ts +13 -0
  306. package/dist/core/slack/slack-markdown.js +27 -0
  307. package/dist/core/slack/slack-markdown.js.map +1 -0
  308. package/dist/core/slack/slack-post-of.d.ts +27 -0
  309. package/dist/core/slack/slack-post-of.js +71 -0
  310. package/dist/core/slack/slack-post-of.js.map +1 -0
  311. package/dist/core/slack/slack-post.d.ts +40 -0
  312. package/dist/core/slack/slack-post.js +13 -0
  313. package/dist/core/slack/slack-post.js.map +1 -0
  314. package/dist/core/slack/slack-request.d.ts +17 -0
  315. package/dist/core/slack/slack-request.js +10 -0
  316. package/dist/core/slack/slack-request.js.map +1 -0
  317. package/dist/core/slack/slack-workspace.d.ts +36 -0
  318. package/dist/core/slack/slack-workspace.js +7 -0
  319. package/dist/core/slack/slack-workspace.js.map +1 -0
  320. package/dist/core/slack/start-install.d.ts +43 -0
  321. package/dist/core/slack/start-install.js +57 -0
  322. package/dist/core/slack/start-install.js.map +1 -0
  323. package/dist/core/slack/start-link.d.ts +32 -0
  324. package/dist/core/slack/start-link.js +46 -0
  325. package/dist/core/slack/start-link.js.map +1 -0
  326. package/dist/core/slack/stop-slack-link.d.ts +16 -0
  327. package/dist/core/slack/stop-slack-link.js +9 -0
  328. package/dist/core/slack/stop-slack-link.js.map +1 -0
  329. package/dist/core/slack/take-access-token.d.ts +25 -0
  330. package/dist/core/slack/take-access-token.js +45 -0
  331. package/dist/core/slack/take-access-token.js.map +1 -0
  332. package/dist/core/slack/take-slack-event.d.ts +49 -0
  333. package/dist/core/slack/take-slack-event.js +81 -0
  334. package/dist/core/slack/take-slack-event.js.map +1 -0
  335. package/dist/core/slack/unlink-slack.d.ts +9 -0
  336. package/dist/core/slack/unlink-slack.js +9 -0
  337. package/dist/core/slack/unlink-slack.js.map +1 -0
  338. package/dist/core/vault/credential.d.ts +34 -0
  339. package/dist/grant-worker.d.ts +20 -0
  340. package/dist/grant-worker.js +24 -0
  341. package/dist/grant-worker.js.map +1 -0
  342. package/dist/slack-event-worker.d.ts +21 -0
  343. package/dist/slack-event-worker.js +38 -0
  344. package/dist/slack-event-worker.js.map +1 -0
  345. package/dist/slack-token-worker.d.ts +19 -0
  346. package/dist/slack-token-worker.js +24 -0
  347. package/dist/slack-token-worker.js.map +1 -0
  348. package/package.json +3 -2
  349. package/src/adapters/prisma/migrations/20261027090000_slack_workspaces/migration.sql +30 -0
  350. package/src/adapters/prisma/migrations/20261027150000_slack_bots/migration.sql +6 -0
  351. package/src/adapters/prisma/migrations/20261027200000_slack_links/migration.sql +15 -0
  352. package/src/adapters/prisma/migrations/20261028090000_slack_events/migration.sql +18 -0
  353. package/src/adapters/prisma/migrations/20261028150000_slack_posts/migration.sql +25 -0
  354. package/src/adapters/prisma/migrations/20261028230000_party_grants/migration.sql +18 -0
  355. package/src/adapters/prisma/migrations/20261029080000_party_sign_in_notices/migration.sql +10 -0
  356. package/src/adapters/prisma/migrations/20261029120000_party_grants_lost/migration.sql +3 -0
  357. package/src/adapters/prisma/migrations/20261029130000_party_grants_refreshed/migration.sql +6 -0
  358. package/src/adapters/prisma/migrations/20261030090000_party_grants_of_account/migration.sql +2 -0
  359. package/src/adapters/prisma/migrations/20261030100000_slack_events_unmatched_answers/migration.sql +2 -0
  360. package/src/adapters/prisma/schema.prisma +148 -0
  361. package/web/.next/BUILD_ID +1 -1
  362. package/web/.next/app-path-routes-manifest.json +8 -1
  363. package/web/.next/build-manifest.json +51 -3
  364. package/web/.next/diagnostics/route-bundle-stats.json +145 -72
  365. package/web/.next/fallback-build-manifest.json +3 -3
  366. package/web/.next/prerender-manifest.json +67 -3
  367. package/web/.next/routes-manifest.json +42 -0
  368. package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
  369. package/web/.next/server/app/(console)/gateway-off/page.js +6 -6
  370. package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
  371. package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
  372. package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
  373. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js +6 -6
  374. package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
  375. package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
  376. package/web/.next/server/app/(console)/outside-parties/[name]/change/page/server-reference-manifest.json +48 -8
  377. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js +8 -8
  378. package/web/.next/server/app/(console)/outside-parties/[name]/change/page.js.nft.json +1 -1
  379. package/web/.next/server/app/(console)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
  380. package/web/.next/server/app/(console)/outside-parties/[name]/page/server-reference-manifest.json +44 -4
  381. package/web/.next/server/app/(console)/outside-parties/[name]/page.js +8 -8
  382. package/web/.next/server/app/(console)/outside-parties/[name]/page.js.nft.json +1 -1
  383. package/web/.next/server/app/(console)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
  384. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page/server-reference-manifest.json +48 -8
  385. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js +8 -8
  386. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page.js.nft.json +1 -1
  387. package/web/.next/server/app/(console)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
  388. package/web/.next/server/app/(console)/outside-parties/add/page/server-reference-manifest.json +46 -6
  389. package/web/.next/server/app/(console)/outside-parties/add/page.js +9 -8
  390. package/web/.next/server/app/(console)/outside-parties/add/page.js.nft.json +1 -1
  391. package/web/.next/server/app/(console)/outside-parties/add/page_client-reference-manifest.js +1 -1
  392. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +2 -2
  393. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js +7 -7
  394. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
  395. package/web/.next/server/app/(console)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
  396. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page/server-reference-manifest.json +2 -2
  397. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js +7 -7
  398. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
  399. package/web/.next/server/app/(console)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
  400. package/web/.next/server/app/(console)/outside-parties/page/server-reference-manifest.json +2 -2
  401. package/web/.next/server/app/(console)/outside-parties/page.js +6 -6
  402. package/web/.next/server/app/(console)/outside-parties/page.js.nft.json +1 -1
  403. package/web/.next/server/app/(console)/outside-parties/page_client-reference-manifest.js +1 -1
  404. package/web/.next/server/app/(console)/overview/changes/route.js +3 -2
  405. package/web/.next/server/app/(console)/overview/changes/route.js.nft.json +1 -1
  406. package/web/.next/server/app/(console)/overview/focus/route.js +3 -2
  407. package/web/.next/server/app/(console)/overview/focus/route.js.nft.json +1 -1
  408. package/web/.next/server/app/(console)/overview/page/server-reference-manifest.json +27 -7
  409. package/web/.next/server/app/(console)/overview/page.js +8 -8
  410. package/web/.next/server/app/(console)/overview/page.js.nft.json +1 -1
  411. package/web/.next/server/app/(console)/overview/page_client-reference-manifest.js +1 -1
  412. package/web/.next/server/app/(console)/overview/requests/[requestId]/page/server-reference-manifest.json +2 -2
  413. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js +6 -6
  414. package/web/.next/server/app/(console)/overview/requests/[requestId]/page.js.nft.json +1 -1
  415. package/web/.next/server/app/(console)/overview/requests/[requestId]/page_client-reference-manifest.js +1 -1
  416. package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +8 -8
  417. package/web/.next/server/app/(console)/parties/page.js +7 -7
  418. package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
  419. package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
  420. package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
  421. package/web/.next/server/app/(console)/sign-in/failed/page.js +6 -6
  422. package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
  423. package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
  424. package/web/.next/server/app/(console)/slack/disconnect/page/app-paths-manifest.json +3 -0
  425. package/web/.next/server/app/(console)/slack/disconnect/page/build-manifest.json +23 -0
  426. package/web/.next/server/app/(console)/slack/disconnect/page/next-font-manifest.json +11 -0
  427. package/web/.next/server/app/(console)/slack/disconnect/page/react-loadable-manifest.json +1 -0
  428. package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +65 -0
  429. package/web/.next/server/app/(console)/slack/disconnect/page.js +22 -0
  430. package/web/.next/server/app/(console)/slack/disconnect/page.js.map +5 -0
  431. package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -0
  432. package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +3 -0
  433. package/web/.next/server/app/(console)/slack/expose/page/app-paths-manifest.json +3 -0
  434. package/web/.next/server/app/(console)/slack/expose/page/build-manifest.json +23 -0
  435. package/web/.next/server/app/(console)/slack/expose/page/next-font-manifest.json +11 -0
  436. package/web/.next/server/app/(console)/slack/expose/page/react-loadable-manifest.json +1 -0
  437. package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +65 -0
  438. package/web/.next/server/app/(console)/slack/expose/page.js +22 -0
  439. package/web/.next/server/app/(console)/slack/expose/page.js.map +5 -0
  440. package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -0
  441. package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +3 -0
  442. package/web/.next/server/app/(console)/slack/link/route/app-paths-manifest.json +3 -0
  443. package/web/.next/server/app/(console)/slack/link/route/build-manifest.json +12 -0
  444. package/web/.next/server/app/(console)/slack/link/route/server-reference-manifest.json +4 -0
  445. package/web/.next/server/app/(console)/slack/link/route.js +8 -0
  446. package/web/.next/server/app/(console)/slack/link/route.js.map +5 -0
  447. package/web/.next/server/app/(console)/slack/link/route.js.nft.json +1 -0
  448. package/web/.next/server/app/(console)/slack/link/route_client-reference-manifest.js +3 -0
  449. package/web/.next/server/app/(console)/slack/page/app-paths-manifest.json +3 -0
  450. package/web/.next/server/app/(console)/slack/page/build-manifest.json +23 -0
  451. package/web/.next/server/app/(console)/slack/page/next-font-manifest.json +11 -0
  452. package/web/.next/server/app/(console)/slack/page/react-loadable-manifest.json +1 -0
  453. package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +65 -0
  454. package/web/.next/server/app/(console)/slack/page.js +22 -0
  455. package/web/.next/server/app/(console)/slack/page.js.map +5 -0
  456. package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -0
  457. package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +3 -0
  458. package/web/.next/server/app/(console)/slack/remove/page/app-paths-manifest.json +3 -0
  459. package/web/.next/server/app/(console)/slack/remove/page/build-manifest.json +23 -0
  460. package/web/.next/server/app/(console)/slack/remove/page/next-font-manifest.json +11 -0
  461. package/web/.next/server/app/(console)/slack/remove/page/react-loadable-manifest.json +1 -0
  462. package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +65 -0
  463. package/web/.next/server/app/(console)/slack/remove/page.js +22 -0
  464. package/web/.next/server/app/(console)/slack/remove/page.js.map +5 -0
  465. package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -0
  466. package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +3 -0
  467. package/web/.next/server/app/_global-error/page.js +1 -1
  468. package/web/.next/server/app/_global-error/page.js.nft.json +1 -1
  469. package/web/.next/server/app/_global-error.html +1 -1
  470. package/web/.next/server/app/_global-error.rsc +1 -1
  471. package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  472. package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  473. package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  474. package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
  475. package/web/.next/server/app/_not-found/page.js +6 -6
  476. package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
  477. package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  478. package/web/.next/server/app/apple-icon.png/route/app-paths-manifest.json +3 -0
  479. package/web/.next/server/app/apple-icon.png/route/build-manifest.json +12 -0
  480. package/web/.next/server/app/apple-icon.png/route.js +8 -0
  481. package/web/.next/server/app/apple-icon.png/route.js.map +5 -0
  482. package/web/.next/server/app/apple-icon.png/route.js.nft.json +1 -0
  483. package/web/.next/server/app/apple-icon.png.body +0 -0
  484. package/web/.next/server/app/apple-icon.png.meta +1 -0
  485. package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
  486. package/web/.next/server/app/authorize/failed/page.js +5 -5
  487. package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
  488. package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
  489. package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
  490. package/web/.next/server/app/authorize/pick/page.js +4 -4
  491. package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
  492. package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
  493. package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
  494. package/web/.next/server/app/authorize/waiting/approval/page.js +6 -6
  495. package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
  496. package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
  497. package/web/.next/server/app/icon.svg/route/app-paths-manifest.json +3 -0
  498. package/web/.next/server/app/icon.svg/route/build-manifest.json +12 -0
  499. package/web/.next/server/app/icon.svg/route.js +8 -0
  500. package/web/.next/server/app/icon.svg/route.js.map +5 -0
  501. package/web/.next/server/app/icon.svg/route.js.nft.json +1 -0
  502. package/web/.next/server/app/icon.svg.body +19 -0
  503. package/web/.next/server/app/icon.svg.meta +1 -0
  504. package/web/.next/server/app-paths-manifest.json +8 -1
  505. package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js +315 -0
  506. package/web/.next/server/chunks/[root-of-the-server]__1j0sdz18lzulo._.js.map +1 -0
  507. package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js +315 -0
  508. package/web/.next/server/chunks/[root-of-the-server]__1o2xxi_001xql._.js.map +1 -0
  509. package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js +3 -0
  510. package/web/.next/server/chunks/[root-of-the-server]__1tfyrijwfgqlk._.js.map +1 -0
  511. package/web/.next/server/chunks/_0_um96p6psnqx._.js +57 -0
  512. package/web/.next/server/chunks/_0_um96p6psnqx._.js.map +1 -0
  513. package/web/.next/server/chunks/_0xw0b7avhvg75._.js +3 -0
  514. package/web/.next/server/chunks/_0xw0b7avhvg75._.js.map +1 -0
  515. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js +3 -0
  516. package/web/.next/server/chunks/_1w2t6c0hpdsrn._.js.map +1 -0
  517. package/web/.next/server/chunks/_1xf83h9norhws._.js +57 -0
  518. package/web/.next/server/chunks/_1xf83h9norhws._.js.map +1 -0
  519. package/web/.next/server/chunks/_20ne4s-e_jzxp._.js +3 -0
  520. package/web/.next/server/chunks/_20ne4s-e_jzxp._.js.map +1 -0
  521. package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js +10 -0
  522. package/web/.next/server/chunks/node_modules_next_1zdbrneapig6o._.js.map +1 -0
  523. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js +1 -1
  524. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_change_page_actions_04td11fxohsfm.js.map +1 -1
  525. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js +1 -1
  526. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_page_actions_0u-45itza1ls7.js.map +1 -1
  527. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js +1 -1
  528. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_[name]_retire_page_actions_0s7ps6i0ts7v5.js.map +1 -1
  529. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js +1 -1
  530. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add-a2a-client_page_actions_0d_wgiu94c32e.js.map +1 -1
  531. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js +1 -1
  532. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_outside-parties_add_page_actions_0yfz_dfn-8uo7.js.map +1 -1
  533. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js +1 -1
  534. package/web/.next/server/chunks/ssr/0vkm_server_app_(console)_overview_requests_[requestId]_page_actions_0uki9j3mtuz9e.js.map +1 -1
  535. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js +4 -0
  536. package/web/.next/server/chunks/ssr/[root-of-the-server]__001xx3sm5ur-e._.js.map +1 -0
  537. package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js +3 -0
  538. package/web/.next/server/chunks/ssr/[root-of-the-server]__03w-pkh4_8jv_._.js.map +1 -0
  539. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js +3 -0
  540. package/web/.next/server/chunks/ssr/[root-of-the-server]__048-rfvdrnoze._.js.map +1 -0
  541. package/web/.next/server/chunks/ssr/{[root-of-the-server]__14w0fxvc_of17._.js → [root-of-the-server]__07ba2bfe20c_p._.js} +2 -2
  542. package/web/.next/server/chunks/ssr/[root-of-the-server]__07ba2bfe20c_p._.js.map +1 -0
  543. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js +4 -0
  544. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a6a1yc_ac-qt._.js.map +1 -0
  545. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0-og0bl8lr2xq._.js → [root-of-the-server]__0a8db18tyk__5._.js} +2 -2
  546. package/web/.next/server/chunks/ssr/{[root-of-the-server]__0-og0bl8lr2xq._.js.map → [root-of-the-server]__0a8db18tyk__5._.js.map} +1 -1
  547. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js +3 -0
  548. package/web/.next/server/chunks/ssr/[root-of-the-server]__0f732g7ojc5-a._.js.map +1 -0
  549. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js +3 -0
  550. package/web/.next/server/chunks/ssr/[root-of-the-server]__0fz0817_b9ljl._.js.map +1 -0
  551. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js +3 -0
  552. package/web/.next/server/chunks/ssr/[root-of-the-server]__0i_m5r9lyffk8._.js.map +1 -0
  553. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js +4 -0
  554. package/web/.next/server/chunks/ssr/[root-of-the-server]__0icm7kndx480o._.js.map +1 -0
  555. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js +1 -1
  556. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k3g0p3t9t0c-._.js.map +1 -1
  557. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js +3 -0
  558. package/web/.next/server/chunks/ssr/[root-of-the-server]__0k6a9o0872_0x._.js.map +1 -0
  559. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js +3 -0
  560. package/web/.next/server/chunks/ssr/[root-of-the-server]__0pj38h6qumggc._.js.map +1 -0
  561. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1gb-3dttuacyz._.js → [root-of-the-server]__0y0jwufd7xjsv._.js} +1 -1
  562. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js +4 -0
  563. package/web/.next/server/chunks/ssr/[root-of-the-server]__10s9e8g5x-ws8._.js.map +1 -0
  564. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js +4 -0
  565. package/web/.next/server/chunks/ssr/[root-of-the-server]__13yoncr_nx3jc._.js.map +1 -0
  566. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
  567. package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
  568. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1m9atpy0vkbmj._.js → [root-of-the-server]__19ecatcacd6t9._.js} +1 -1
  569. package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js +3 -0
  570. package/web/.next/server/chunks/ssr/[root-of-the-server]__1aojrh3-9jh9r._.js.map +1 -0
  571. package/web/.next/server/chunks/ssr/{[root-of-the-server]__1w5swo8gmjyx6._.js → [root-of-the-server]__1kynqd8xcwg2b._.js} +2 -2
  572. package/web/.next/server/chunks/ssr/[root-of-the-server]__1kynqd8xcwg2b._.js.map +1 -0
  573. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js +3 -0
  574. package/web/.next/server/chunks/ssr/[root-of-the-server]__1nxy_j9eswr3i._.js.map +1 -0
  575. package/web/.next/server/chunks/ssr/{[root-of-the-server]__160zc0ja_jjnu._.js → [root-of-the-server]__1q14l5_4hp9h3._.js} +2 -2
  576. package/web/.next/server/chunks/ssr/[root-of-the-server]__1q14l5_4hp9h3._.js.map +1 -0
  577. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js +3 -0
  578. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qnls-4cj-7oh._.js.map +1 -0
  579. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js +4 -0
  580. package/web/.next/server/chunks/ssr/[root-of-the-server]__1qpow96uit9t8._.js.map +1 -0
  581. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js +3 -0
  582. package/web/.next/server/chunks/ssr/[root-of-the-server]__1r1t1q3fzoqey._.js.map +1 -0
  583. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js +3 -0
  584. package/web/.next/server/chunks/ssr/[root-of-the-server]__1xmvo3lr1_qyo._.js.map +1 -0
  585. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js +3 -0
  586. package/web/.next/server/chunks/ssr/[root-of-the-server]__1zlq3zji9v53h._.js.map +1 -0
  587. package/web/.next/server/chunks/ssr/_0-boiqan2j4tr._.js +3 -0
  588. package/web/.next/server/chunks/ssr/{_0w2ptjht34s6t._.js.map → _0-boiqan2j4tr._.js.map} +1 -1
  589. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
  590. package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
  591. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js +1 -1
  592. package/web/.next/server/chunks/ssr/_03lk54yp-yhw3._.js.map +1 -1
  593. package/web/.next/server/chunks/ssr/_0bizyb21i2sl8._.js +3 -0
  594. package/web/.next/server/chunks/ssr/{_00dg5cvqofspn._.js.map → _0bizyb21i2sl8._.js.map} +1 -1
  595. package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js +3 -0
  596. package/web/.next/server/chunks/ssr/_0eu-76mbv16oa._.js.map +1 -0
  597. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
  598. package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
  599. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
  600. package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
  601. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
  602. package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
  603. package/web/.next/server/chunks/ssr/_1_wav28san6dm._.js +1 -1
  604. package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js +3 -0
  605. package/web/.next/server/chunks/ssr/_1cnvrfjlqx00k._.js.map +1 -0
  606. package/web/.next/server/chunks/ssr/{_0bhvvyz0q_0ja._.js → _1e2o809f0ekry._.js} +2 -2
  607. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
  608. package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
  609. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
  610. package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
  611. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js +3 -0
  612. package/web/.next/server/chunks/ssr/_1yqu7dcxs2-so._.js.map +1 -0
  613. package/web/.next/server/chunks/ssr/node_modules_0ettht2so2tkh._.js +3 -0
  614. package/web/.next/server/chunks/ssr/node_modules_0ettht2so2tkh._.js.map +1 -0
  615. package/web/.next/server/chunks/ssr/node_modules_0keape0zsobyj._.js +3 -0
  616. package/web/.next/server/chunks/ssr/node_modules_0keape0zsobyj._.js.map +1 -0
  617. package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js +3 -0
  618. package/web/.next/server/chunks/ssr/node_modules_@base-ui_0jlwmxa9rk8p_._.js.map +1 -0
  619. package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js +3 -0
  620. package/web/.next/server/chunks/ssr/node_modules_@base-ui_19e_nxxf4a88q._.js.map +1 -0
  621. package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js +3 -0
  622. package/web/.next/server/chunks/ssr/node_modules_@base-ui_react_1lbvjrzg8s2ox._.js.map +1 -0
  623. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js +3 -0
  624. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_00i8qu9x65r6w.js.map +1 -0
  625. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js +3 -0
  626. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_045k03anc7fhh.js.map +1 -0
  627. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js +3 -0
  628. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0a3qpq0qt_bi4.js.map +1 -0
  629. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js +3 -0
  630. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0tpm7qi6un9x2.js.map +1 -0
  631. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js +3 -0
  632. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0uyk6p-2ofqw3.js.map +1 -0
  633. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js +3 -0
  634. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0w8e__21f7qvg.js.map +1 -0
  635. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js +3 -0
  636. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0ynno0usi0bwx.js.map +1 -0
  637. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js +3 -0
  638. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0za9__u5ytp2s.js.map +1 -0
  639. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js +3 -0
  640. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0zyzdu1detzlm.js.map +1 -0
  641. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js +3 -0
  642. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_11t1sej48_ec4.js.map +1 -0
  643. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js +3 -0
  644. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_128zox167vtjm.js.map +1 -0
  645. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js +3 -0
  646. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18uz1icr303zj.js.map +1 -0
  647. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js +3 -0
  648. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19_qkbe8796m6.js.map +1 -0
  649. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js +3 -0
  650. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19uoij8es9z19.js.map +1 -0
  651. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js +3 -0
  652. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1auju5fur8z6x.js.map +1 -0
  653. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js +3 -0
  654. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1c7_m2ii9lash.js.map +1 -0
  655. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js +3 -0
  656. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1chb4qpzj_l1t.js.map +1 -0
  657. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js +3 -0
  658. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qa52eylhjmki.js.map +1 -0
  659. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js +3 -0
  660. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1qw59-auzd_zx.js.map +1 -0
  661. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js +3 -0
  662. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1xzq9xckazj3u.js.map +1 -0
  663. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js +3 -0
  664. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1yis85alzg6hk.js.map +1 -0
  665. package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js +3 -0
  666. package/web/.next/server/chunks/ssr/web_00e7-_y92losl._.js.map +1 -0
  667. package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js +3 -0
  668. package/web/.next/server/chunks/ssr/web_09rcfto3dw4wd._.js.map +1 -0
  669. package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js +3 -0
  670. package/web/.next/server/chunks/ssr/web_0plvx3c_1cozb._.js.map +1 -0
  671. package/web/.next/server/chunks/ssr/web_0qgev3ti257yj._.js +3 -0
  672. package/web/.next/server/chunks/ssr/{web_0_jk9eione6lx._.js.map → web_0qgev3ti257yj._.js.map} +1 -1
  673. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js +1 -1
  674. package/web/.next/server/chunks/ssr/web_0wys4l6za8umr._.js.map +1 -1
  675. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js +1 -1
  676. package/web/.next/server/chunks/ssr/web__next-internal_server_app_(console)_overview_page_actions_18on1ziyg1nzy.js.map +1 -1
  677. package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js +3 -0
  678. package/web/.next/server/chunks/ssr/web_app_(console)_slack_page_tsx_0ts7fo7pqicq6._.js.map +1 -0
  679. package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js +3 -0
  680. package/web/.next/server/chunks/ssr/web_app_(console)_slack_remove_page_tsx_15q4ril_on0ed._.js.map +1 -0
  681. package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js +3 -0
  682. package/web/.next/server/chunks/ssr/web_features_077oo3gzcibvf._.js.map +1 -0
  683. package/web/.next/server/chunks/ssr/web_features_08yw0utky5j17._.js +3 -0
  684. package/web/.next/server/chunks/ssr/{web_features_19v3mlx8c_h1-._.js.map → web_features_08yw0utky5j17._.js.map} +1 -1
  685. package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js +3 -0
  686. package/web/.next/server/chunks/ssr/web_features_0d48z2epb6oie._.js.map +1 -0
  687. package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js +3 -0
  688. package/web/.next/server/chunks/ssr/web_features_0f6r-m-dq36vf._.js.map +1 -0
  689. package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js +3 -0
  690. package/web/.next/server/chunks/ssr/web_features_0mi9a9pdzkdji._.js.map +1 -0
  691. package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js +3 -0
  692. package/web/.next/server/chunks/ssr/web_features_0rd6357w-eo50._.js.map +1 -0
  693. package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js +3 -0
  694. package/web/.next/server/chunks/ssr/web_features_19r68thirqv1n._.js.map +1 -0
  695. package/web/.next/server/chunks/ssr/web_features_1m5g9a6mwrsd-._.js +3 -0
  696. package/web/.next/server/chunks/ssr/{web_features_085cv0gogrxxf._.js.map → web_features_1m5g9a6mwrsd-._.js.map} +1 -1
  697. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js +3 -0
  698. package/web/.next/server/chunks/ssr/web_features_1utnezwv0xr-l._.js.map +1 -0
  699. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
  700. package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
  701. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
  702. package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
  703. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
  704. package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
  705. package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js → web_features_forms_1muc8tmsxjj_k._.js} +2 -2
  706. package/web/.next/server/chunks/ssr/{web_features_forms_1d1jyea2jni9o._.js.map → web_features_forms_1muc8tmsxjj_k._.js.map} +1 -1
  707. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js +1 -1
  708. package/web/.next/server/chunks/ssr/web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map +1 -1
  709. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js +1 -1
  710. package/web/.next/server/chunks/ssr/web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map +1 -1
  711. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
  712. package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
  713. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
  714. package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
  715. package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js +3 -0
  716. package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js.map +1 -0
  717. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
  718. package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js.map +1 -1
  719. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js +3 -0
  720. package/web/.next/server/chunks/ssr/web_features_overview_144fx4a-r9_wn._.js.map +1 -0
  721. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js +1 -1
  722. package/web/.next/server/chunks/ssr/web_features_overview_hooks_overview-actions_ts_0-wrat07d1y5g._.js.map +1 -1
  723. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js +3 -0
  724. package/web/.next/server/chunks/ssr/web_features_overview_state_00l0wkgvv9y6j._.js.map +1 -0
  725. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js +1 -1
  726. package/web/.next/server/chunks/ssr/web_features_overview_state_decision-panel_tsx_0kpd26ggtr6h_._.js.map +1 -1
  727. package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
  728. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +3 -0
  729. package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js.map +1 -0
  730. package/web/.next/server/chunks/web__next-internal_server_app_(console)_slack_link_route_actions_16zgisics858w.js +3 -0
  731. package/web/.next/server/chunks/web__next-internal_server_app_(console)_slack_link_route_actions_16zgisics858w.js.map +1 -0
  732. package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js +3 -0
  733. package/web/.next/server/chunks/web__next-internal_server_app_apple-icon_png_route_actions_1yyo-ix0n2rsy.js.map +1 -0
  734. package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js +3 -0
  735. package/web/.next/server/chunks/web__next-internal_server_app_icon_svg_route_actions_0xhoz0ftyz5p3.js.map +1 -0
  736. package/web/.next/server/middleware-build-manifest.js +51 -3
  737. package/web/.next/server/next-font-manifest.js +1 -1
  738. package/web/.next/server/next-font-manifest.json +16 -0
  739. package/web/.next/server/pages/500.html +1 -1
  740. package/web/.next/server/preview-props.json +3 -3
  741. package/web/.next/server/server-reference-manifest.js +1 -1
  742. package/web/.next/server/server-reference-manifest.json +264 -30
  743. package/web/.next/static/chunks/015ume9uk4hla.js +1 -0
  744. package/web/.next/static/chunks/0ji7rkz0ll9gh.js +1 -0
  745. package/web/.next/static/chunks/0nhopjmnw_dqt.js +1 -0
  746. package/web/.next/static/chunks/0psup8zn8e6k5.js +1 -0
  747. package/web/.next/static/chunks/0vlawcs6_kjs1.js +1 -0
  748. package/web/.next/static/chunks/0zbcy0_3jemrv.js +1 -0
  749. package/web/.next/static/chunks/1s8b8jpg4jai9.js +1 -0
  750. package/web/.next/static/chunks/20t1nmdiq805b.js +1 -0
  751. package/web/.next/static/chunks/26vlpatu47xtw.css +3 -0
  752. package/web/.next/static/chunks/2gghdkr64z9f9.js +1 -0
  753. package/web/.next/static/chunks/2s_dov6h7kus5.js +1 -0
  754. package/web/.next/static/chunks/{1jvae6c-4jwji.js → 2x86i673xcv4t.js} +1 -1
  755. package/web/.next/static/chunks/{1tgs1j0j-1qlh.js → 31-hltzmw_9fi.js} +1 -1
  756. package/web/.next/static/chunks/35bmc8wm29tr6.js +1 -0
  757. package/web/.next/static/chunks/3hvo3apdq-ckk.js +1 -0
  758. package/web/.next/static/chunks/3rxg2mdhxd6yt.js +1 -0
  759. package/web/.next/static/chunks/42cpzi5s1o44m.js +1 -0
  760. package/web/.next/static/media/apple-icon.3jccaq3p5-lh-.png +0 -0
  761. package/web/.next/static/media/icon.0h5hy2etdmq_n.svg +19 -0
  762. package/web/.next/trace +1 -1
  763. package/web/.next/trace-build +1 -1
  764. package/web/.next/types/routes.d.ts +7 -2
  765. package/web/.next/types/validator.ts +78 -0
  766. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js +0 -369
  767. package/web/.next/server/chunks/[root-of-the-server]__0ykc8bq_c06a1._.js.map +0 -1
  768. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js +0 -3
  769. package/web/.next/server/chunks/ssr/[root-of-the-server]__00erqdm9cmhh7._.js.map +0 -1
  770. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js +0 -3
  771. package/web/.next/server/chunks/ssr/[root-of-the-server]__00q22dte1g2ww._.js.map +0 -1
  772. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js +0 -3
  773. package/web/.next/server/chunks/ssr/[root-of-the-server]__07udzu2zwg_74._.js.map +0 -1
  774. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js +0 -3
  775. package/web/.next/server/chunks/ssr/[root-of-the-server]__0a68v9ynev4q6._.js.map +0 -1
  776. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js +0 -3
  777. package/web/.next/server/chunks/ssr/[root-of-the-server]__0l2_dk9d4o01n._.js.map +0 -1
  778. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js +0 -4
  779. package/web/.next/server/chunks/ssr/[root-of-the-server]__0n2us07jk-78w._.js.map +0 -1
  780. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js +0 -3
  781. package/web/.next/server/chunks/ssr/[root-of-the-server]__0rr5u24i9tjyc._.js.map +0 -1
  782. package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js +0 -4
  783. package/web/.next/server/chunks/ssr/[root-of-the-server]__1-c9wugbbwsp3._.js.map +0 -1
  784. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js +0 -3
  785. package/web/.next/server/chunks/ssr/[root-of-the-server]__10y66e1xx8xiq._.js.map +0 -1
  786. package/web/.next/server/chunks/ssr/[root-of-the-server]__14w0fxvc_of17._.js.map +0 -1
  787. package/web/.next/server/chunks/ssr/[root-of-the-server]__160zc0ja_jjnu._.js.map +0 -1
  788. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js +0 -3
  789. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dc6okf5os70a._.js.map +0 -1
  790. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js +0 -4
  791. package/web/.next/server/chunks/ssr/[root-of-the-server]__1dtyycvqa6uht._.js.map +0 -1
  792. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js +0 -3
  793. package/web/.next/server/chunks/ssr/[root-of-the-server]__1n_sq_58wdluh._.js.map +0 -1
  794. package/web/.next/server/chunks/ssr/[root-of-the-server]__1w5swo8gmjyx6._.js.map +0 -1
  795. package/web/.next/server/chunks/ssr/_00dg5cvqofspn._.js +0 -3
  796. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js +0 -3
  797. package/web/.next/server/chunks/ssr/_0_kakdt7lb6z-._.js.map +0 -1
  798. package/web/.next/server/chunks/ssr/_0w2ptjht34s6t._.js +0 -3
  799. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js +0 -3
  800. package/web/.next/server/chunks/ssr/_1uuy6gkkhq6bx._.js.map +0 -1
  801. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js +0 -3
  802. package/web/.next/server/chunks/ssr/_1y1ovmdhl9_ml._.js.map +0 -1
  803. package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js +0 -3
  804. package/web/.next/server/chunks/ssr/node_modules_07sxnbglqc5q9._.js.map +0 -1
  805. package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js +0 -3
  806. package/web/.next/server/chunks/ssr/node_modules_0qlo87g8tugr4._.js.map +0 -1
  807. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js +0 -3
  808. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_06etuymo2azrg.js.map +0 -1
  809. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js +0 -3
  810. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_08lcy-jnk5o43.js.map +0 -1
  811. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js +0 -3
  812. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0bnypafopxsfl.js.map +0 -1
  813. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js +0 -3
  814. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0e8cobt3o_8ur.js.map +0 -1
  815. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js +0 -3
  816. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0gzed-epom5si.js.map +0 -1
  817. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js +0 -3
  818. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0k0-b63ptvbl5.js.map +0 -1
  819. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js +0 -3
  820. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0pik0g65vv-wi.js.map +0 -1
  821. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js +0 -3
  822. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_0xccr6d8xcb1p.js.map +0 -1
  823. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js +0 -3
  824. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_13agc620bnznv.js.map +0 -1
  825. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js +0 -3
  826. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_184-gj4lz41i-.js.map +0 -1
  827. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js +0 -3
  828. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_18gq8l27vkevg.js.map +0 -1
  829. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js +0 -3
  830. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1bt2ioufqh6fl.js.map +0 -1
  831. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js +0 -3
  832. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1d613l6zsee_e.js.map +0 -1
  833. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js +0 -3
  834. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1o0-ipfysjmro.js.map +0 -1
  835. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js +0 -3
  836. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1s46s8vlfx01v.js.map +0 -1
  837. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js +0 -3
  838. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1x-0vplt44lez.js.map +0 -1
  839. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js +0 -3
  840. package/web/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_20d8hq6wsqwh_.js.map +0 -1
  841. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js +0 -3
  842. package/web/.next/server/chunks/ssr/web_0-ufi2al5ubig._.js.map +0 -1
  843. package/web/.next/server/chunks/ssr/web_0_jk9eione6lx._.js +0 -3
  844. package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js +0 -3
  845. package/web/.next/server/chunks/ssr/web_1wcpaty_bz55q._.js.map +0 -1
  846. package/web/.next/server/chunks/ssr/web_features_085cv0gogrxxf._.js +0 -3
  847. package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js +0 -3
  848. package/web/.next/server/chunks/ssr/web_features_0xbnkk4hfgr9v._.js.map +0 -1
  849. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js +0 -3
  850. package/web/.next/server/chunks/ssr/web_features_0xnlgtw8bfqaa._.js.map +0 -1
  851. package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js +0 -3
  852. package/web/.next/server/chunks/ssr/web_features_10xz3ojtvfi7h._.js.map +0 -1
  853. package/web/.next/server/chunks/ssr/web_features_19v3mlx8c_h1-._.js +0 -3
  854. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js +0 -3
  855. package/web/.next/server/chunks/ssr/web_features_1_2m6l73qk7qw._.js.map +0 -1
  856. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js +0 -3
  857. package/web/.next/server/chunks/ssr/web_features_forms_1u0akr22eh_x_._.js.map +0 -1
  858. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js +0 -3
  859. package/web/.next/server/chunks/ssr/web_features_outside-party_0_9c27knfvw7u._.js.map +0 -1
  860. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js +0 -3
  861. package/web/.next/server/chunks/ssr/web_features_overview_state_1wuk95dw2_whp._.js.map +0 -1
  862. package/web/.next/static/chunks/0ke_2_la1glwa.js +0 -1
  863. package/web/.next/static/chunks/0ul9rtulfiph6.js +0 -1
  864. package/web/.next/static/chunks/19wvmglfgof0u.js +0 -1
  865. package/web/.next/static/chunks/1yj875esaesyh.css +0 -3
  866. package/web/.next/static/chunks/2d283cu3en9cy.js +0 -1
  867. package/web/.next/static/chunks/2hj3-kl1ggnu_.js +0 -1
  868. package/web/.next/static/chunks/2i3ydqqupow_x.js +0 -1
  869. package/web/.next/static/chunks/2n4bf_2r9lysd.js +0 -1
  870. package/web/.next/static/chunks/2ngyis59r3qta.js +0 -1
  871. package/web/.next/static/chunks/2riya89_i0je8.js +0 -1
  872. package/web/.next/static/chunks/3_pwm8b3mf4mf.js +0 -1
  873. package/web/.next/static/chunks/3bl-e3zhidrrz.js +0 -1
  874. package/web/.next/static/chunks/3x_8doukmdfpu.js +0 -1
  875. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1gb-3dttuacyz._.js.map → [root-of-the-server]__0y0jwufd7xjsv._.js.map} +0 -0
  876. /package/web/.next/server/chunks/ssr/{[root-of-the-server]__1m9atpy0vkbmj._.js.map → [root-of-the-server]__19ecatcacd6t9._.js.map} +0 -0
  877. /package/web/.next/server/chunks/ssr/{_0bhvvyz0q_0ja._.js.map → _1e2o809f0ekry._.js.map} +0 -0
  878. /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → yf1Q3fTAV4eQiroxoYbih}/_buildManifest.js +0 -0
  879. /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → yf1Q3fTAV4eQiroxoYbih}/_clientMiddlewareManifest.js +0 -0
  880. /package/web/.next/static/{tQFXrUWi6vEZq4Cp-U5tk → yf1Q3fTAV4eQiroxoYbih}/_ssgManifest.js +0 -0
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[13930,a=>{let b=(0,a.i(11857).registerClientReference)(function(){throw Error("Attempted to call ActionForm() from the server but ActionForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"[project]/web/features/forms/ui/action-form.tsx","ActionForm");a.s(["ActionForm",0,b])},69372,a=>{var b=a.i(13930);a.n(b)},49144,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},69912,a=>{var b=a.i(7997),c=a.i(49144);a.s(["f",0,function({choices:a,current:d,help:e,refusal:f}){let g=null===d||a.some(a=>a.shipId===d.shipId)?a:[d,...a];return(0,b.jsxs)("label",{className:c.z,children:[(0,b.jsx)("span",{children:"Owner"}),(0,b.jsxs)("select",{className:c.w,name:"ownerShipId",defaultValue:d?.shipId??"",required:!0,"data-testid":"owner-field",children:[null===d?(0,b.jsx)("option",{value:"",disabled:!0,children:"Pick its owner"}):null,g.map(a=>(0,b.jsx)("option",{value:a.shipId,children:a.name},a.shipId))]}),(0,b.jsx)("span",{className:"text-muted-foreground",children:f??e})]})}])},65253,a=>{let b={mcpServer:{protocol:"MCP",side:"server"},mcpClient:{protocol:"MCP",side:"client"},a2aClient:{protocol:"A2A",side:"client"},a2aAgent:{protocol:"A2A",side:"server"}};a.s(["G",0,b,"Y",0,{commissioning:{tone:"active",label:"Commissioning"},awaitingCrew:{tone:"waiting",label:"Awaiting crew"},crewed:{tone:"ok",label:"Crewed"}},"N",0,{server:{one:"server",many:"servers"},client:{one:"client",many:"clients"}},"R",0,function(a){let c=a.map(a=>b[a.kind]),d=[...new Set(c.map(a=>a.protocol))];return{total:a.length,sides:{server:c.filter(a=>"server"===a.side).length,client:c.filter(a=>"client"===a.side).length},protocols:d.map(a=>({protocol:a,count:c.filter(b=>b.protocol===a).length}))}},"M",0,function(a){switch(a.kind){case"mcpServer":return a.url;case"mcpClient":return a.clientId;case"a2aClient":return null;case"a2aAgent":return a.cardUrl}}])},98323,a=>{var b=a.i(7997);let c={waiting:"border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg",active:"border-tone-active-border bg-tone-active-bg text-tone-active-fg",ok:"border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg",attention:"border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg",ended:"border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg"};a.s(["T",0,function({tone:a,label:d}){return(0,b.jsx)("span",{className:`inline-flex items-center rounded-full border px-2 text-caption ${c[a]}`,children:d})},"E",0,function({children:a,isMono:c=!1}){return(0,b.jsx)("span",{className:`inline-flex items-center rounded-md border border-border px-2 text-caption ${c?"font-mono":""}`,children:a})}])},22126,a=>{var b=a.i(7997),c=a.i(49144);a.s(["f",0,function(){return(0,b.jsxs)("section",{className:c.r,"data-testid":"no-sign-in",children:[(0,b.jsx)("h2",{className:"text-heading font-semibold",children:"Nobody signs in here"}),(0,b.jsx)("p",{className:"mt-2 text-muted-foreground",children:"This gateway signs no one in to its pages: it is no app at pagasae."})]})}])}]})();
2
+
3
+ //# sourceMappingURL=web_features_1m5g9a6mwrsd-._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/forms/ui/action-form.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20%3D%3E%20%22%5Bproject%5D/web/features/forms/ui/action-form.tsx%22%20%7D","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/outside-parties/party-kinds.ts","../../../../../web/features/outside-parties/ui/status-badge.tsx","../../../../../web/features/sign-in/ui/no-sign-in.tsx"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ActionForm = registerClientReference(\n function() { throw new Error(\"Attempted to call ActionForm() from the server but ActionForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/web/features/forms/ui/action-form.tsx\",\n \"ActionForm\",\n);\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","/**\n * An outside party is a party and its protocol (design B, How A2A slots\n * in): the protocol is a tag on every card and the list counts per\n * protocol, so an A2A agent joins as one more kind here.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../src/adapters/trpc/router.js';\n\n/** An outside party as the API lists it. */\nexport type ListedParty = inferRouterOutputs<GatewayRouter>['parties']['list'][number];\n\n/** Which side an outside party is on: a server the fleet's ships call, or a client that calls them. */\nexport type Side = 'server' | 'client';\n\nexport const PARTY_KINDS: Record<ListedParty['kind'], { protocol: string; side: Side }> = {\n mcpServer: { protocol: 'MCP', side: 'server' },\n mcpClient: { protocol: 'MCP', side: 'client' },\n a2aClient: { protocol: 'A2A', side: 'client' },\n a2aAgent: { protocol: 'A2A', side: 'server' },\n};\n\n/** Where a party is reached or named outside: an MCP server's URL, an MCP client's id, an A2A agent's card address; an A2A client has none. */\nexport function outsideAddressOf(party: ListedParty): string | null {\n switch (party.kind) {\n case 'mcpServer':\n return party.url;\n case 'mcpClient':\n return party.clientId;\n case 'a2aClient':\n return null;\n case 'a2aAgent':\n return party.cardUrl;\n }\n}\n\nexport const SIDES: Record<Side, { one: string; many: string }> = {\n server: { one: 'server', many: 'servers' },\n client: { one: 'client', many: 'clients' },\n};\n\n/** The tones the design tokens colour a status by. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\n/** A proxy ship's state as the console shows a status. */\nexport const PARTY_STATES: Record<ListedParty['state'], { tone: Tone; label: string }> = {\n commissioning: { tone: 'active', label: 'Commissioning' },\n awaitingCrew: { tone: 'waiting', label: 'Awaiting crew' },\n crewed: { tone: 'ok', label: 'Crewed' },\n};\n\nexport interface Counts {\n total: number;\n sides: Record<Side, number>;\n protocols: { protocol: string; count: number }[];\n}\n\n/** How many outside parties the fleet has, per side and per protocol. */\nexport function countsOf(parties: readonly Pick<ListedParty, 'kind'>[]): Counts {\n const kinds = parties.map((party) => PARTY_KINDS[party.kind]);\n const protocols = [...new Set(kinds.map((kind) => kind.protocol))];\n return {\n total: parties.length,\n sides: { server: kinds.filter((kind) => kind.side === 'server').length, client: kinds.filter((kind) => kind.side === 'client').length },\n protocols: protocols.map((protocol) => ({ protocol, count: kinds.filter((kind) => kind.protocol === protocol).length })),\n };\n}\n","import type { Tone } from '../party-kinds';\n\nconst TONES: Record<Tone, string> = {\n waiting: 'border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg',\n active: 'border-tone-active-border bg-tone-active-bg text-tone-active-fg',\n ok: 'border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg',\n attention: 'border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg',\n ended: 'border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg',\n};\n\n/** A status in its tone, as the console shows one. */\nexport function StatusBadge({ tone, label }: { tone: Tone; label: string }) {\n return <span className={`inline-flex items-center rounded-full border px-2 text-caption ${TONES[tone]}`}>{label}</span>;\n}\n\n/** A plain tag: a protocol, a side, an id. */\nexport function Tag({ children, isMono = false }: { children: React.ReactNode; isMono?: boolean }) {\n return <span className={`inline-flex items-center rounded-md border border-border px-2 text-caption ${isMono ? 'font-mono' : ''}`}>{children}</span>;\n}\n","import { CARD } from '../../forms/ui/look';\n\n/** A gateway that is no app at pagasae signs no one in to its pages (header design H5). */\nexport function NoSignIn() {\n return (\n <section className={CARD} data-testid=\"no-sign-in\">\n <h2 className=\"text-heading font-semibold\">Nobody signs in here</h2>\n <p className=\"mt-2 text-muted-foreground\">This gateway signs no one in to its pages: it is no app at pagasae.</p>\n </section>\n );\n}\n"],"names":["ActionForm","Error","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","className","name","defaultValue","required","value","disabled","map","PARTY_KINDS","mcpServer","protocol","side","mcpClient","a2aClient","a2aAgent","outsideAddressOf","party","kind","url","clientId","cardUrl","SIDES","server","one","many","client","PARTY_STATES","commissioning","tone","label","awaitingCrew","crewed","countsOf","parties","kinds","protocols","Set","total","length","sides","filter","count","NoSignIn"],"mappings":"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","ignoreList":[0]}
1
+ {"version":3,"sources":["../../../../../web/features/forms/ui/action-form.tsx/__nextjs-internal-proxy.mjs%20%7B%20server%20%3D%3E%20%22%5Bproject%5D/web/features/forms/ui/action-form.tsx%22%20%7D","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/outside-parties/party-kinds.ts","../../../../../web/features/outside-parties/ui/status-badge.tsx","../../../../../web/features/sign-in/ui/no-sign-in.tsx"],"sourcesContent":["// This file is generated by next-core EcmascriptClientReferenceModule.\nimport { registerClientReference } from \"react-server-dom-turbopack/server\";\nexport const ActionForm = registerClientReference(\n function() { throw new Error(\"Attempted to call ActionForm() from the server but ActionForm is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.\"); },\n \"[project]/web/features/forms/ui/action-form.tsx\",\n \"ActionForm\",\n);\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","/**\n * An outside party is a party and its protocol (design B, How A2A slots\n * in): the protocol is a tag on every card and the list counts per\n * protocol, so an A2A agent joins as one more kind here.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../src/adapters/trpc/router.js';\n\n/** An outside party as the API lists it. */\nexport type ListedParty = inferRouterOutputs<GatewayRouter>['parties']['list'][number];\n\n/** Which side an outside party is on: a server the fleet's ships call, or a client that calls them. */\nexport type Side = 'server' | 'client';\n\nexport const PARTY_KINDS: Record<ListedParty['kind'], { protocol: string; side: Side }> = {\n mcpServer: { protocol: 'MCP', side: 'server' },\n mcpClient: { protocol: 'MCP', side: 'client' },\n a2aClient: { protocol: 'A2A', side: 'client' },\n a2aAgent: { protocol: 'A2A', side: 'server' },\n};\n\n/** Where a party is reached or named outside: an MCP server's URL, an MCP client's id, an A2A agent's card address; an A2A client has none. */\nexport function outsideAddressOf(party: ListedParty): string | null {\n switch (party.kind) {\n case 'mcpServer':\n return party.url;\n case 'mcpClient':\n return party.clientId;\n case 'a2aClient':\n return null;\n case 'a2aAgent':\n return party.cardUrl;\n }\n}\n\nexport const SIDES: Record<Side, { one: string; many: string }> = {\n server: { one: 'server', many: 'servers' },\n client: { one: 'client', many: 'clients' },\n};\n\n/** The tones the design tokens colour a status by. */\nexport type Tone = 'waiting' | 'active' | 'ok' | 'attention' | 'ended';\n\n/** A proxy ship's state as the console shows a status. */\nexport const PARTY_STATES: Record<ListedParty['state'], { tone: Tone; label: string }> = {\n commissioning: { tone: 'active', label: 'Commissioning' },\n awaitingCrew: { tone: 'waiting', label: 'Awaiting crew' },\n crewed: { tone: 'ok', label: 'Crewed' },\n};\n\nexport interface Counts {\n total: number;\n sides: Record<Side, number>;\n protocols: { protocol: string; count: number }[];\n}\n\n/** How many outside parties the fleet has, per side and per protocol. */\nexport function countsOf(parties: readonly Pick<ListedParty, 'kind'>[]): Counts {\n const kinds = parties.map((party) => PARTY_KINDS[party.kind]);\n const protocols = [...new Set(kinds.map((kind) => kind.protocol))];\n return {\n total: parties.length,\n sides: { server: kinds.filter((kind) => kind.side === 'server').length, client: kinds.filter((kind) => kind.side === 'client').length },\n protocols: protocols.map((protocol) => ({ protocol, count: kinds.filter((kind) => kind.protocol === protocol).length })),\n };\n}\n","import type { Tone } from '../party-kinds';\n\nconst TONES: Record<Tone, string> = {\n waiting: 'border-tone-waiting-border bg-tone-waiting-bg text-tone-waiting-fg',\n active: 'border-tone-active-border bg-tone-active-bg text-tone-active-fg',\n ok: 'border-tone-ok-border bg-tone-ok-bg text-tone-ok-fg',\n attention: 'border-tone-attention-border bg-tone-attention-bg text-tone-attention-fg',\n ended: 'border-tone-ended-border bg-tone-ended-bg text-tone-ended-fg',\n};\n\n/** A status in its tone, as the console shows one. */\nexport function StatusBadge({ tone, label }: { tone: Tone; label: string }) {\n return <span className={`inline-flex items-center rounded-full border px-2 text-caption ${TONES[tone]}`}>{label}</span>;\n}\n\n/** A plain tag: a protocol, a side, an id. */\nexport function Tag({ children, isMono = false }: { children: React.ReactNode; isMono?: boolean }) {\n return <span className={`inline-flex items-center rounded-md border border-border px-2 text-caption ${isMono ? 'font-mono' : ''}`}>{children}</span>;\n}\n","import { CARD } from '../../forms/ui/look';\n\n/** A gateway that is no app at pagasae signs no one in to its pages (header design H5). */\nexport function NoSignIn() {\n return (\n <section className={CARD} data-testid=\"no-sign-in\">\n <h2 className=\"text-heading font-semibold\">Nobody signs in here</h2>\n <p className=\"mt-2 text-muted-foreground\">This gateway signs no one in to its pages: it is no app at pagasae.</p>\n </section>\n );\n}\n"],"names":["ActionForm","Error","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","className","name","defaultValue","required","value","disabled","map","PARTY_KINDS","mcpServer","protocol","side","mcpClient","a2aClient","a2aAgent","outsideAddressOf","party","kind","url","clientId","cardUrl","SIDES","server","one","many","client","PARTY_STATES","commissioning","tone","label","awaitingCrew","crewed","countsOf","parties","kinds","protocols","Set","total","length","sides","filter","count","TONES","waiting","active","ok","attention","ended","StatusBadge","Tag","children","isMono","NoSignIn"],"mappings":"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","ignoreList":[0]}
@@ -0,0 +1,3 @@
1
+ (()=>{"use strict";module.exports=[51636,a=>{let b=[{kind:"none",label:"No credential"},{kind:"bearer",label:"Bearer token"},{kind:"clientCredentials",label:"OAuth client credentials"}],c={kind:"personSignIn",label:"Each person signs in"},d=[...b,c];a.s(["a",0,d,"x",0,b,"m",0,c,"G",0,function(a){return d.find(({kind:b})=>b===a)?.kind??"bearer"},"C",0,function(a){return b.find(({kind:b})=>b===a)?.kind??"bearer"}])},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},35149,a=>{var b=a.i(87924),c=a.i(88412);a.s(["f",0,function({choices:a,current:d,help:e,refusal:f}){let g=null===d||a.some(a=>a.shipId===d.shipId)?a:[d,...a];return(0,b.jsxs)("label",{className:c.z,children:[(0,b.jsx)("span",{children:"Owner"}),(0,b.jsxs)("select",{className:c.w,name:"ownerShipId",defaultValue:d?.shipId??"",required:!0,"data-testid":"owner-field",children:[null===d?(0,b.jsx)("option",{value:"",disabled:!0,children:"Pick its owner"}):null,g.map(a=>(0,b.jsx)("option",{value:a.shipId,children:a.name},a.shipId))]}),(0,b.jsx)("span",{className:"text-muted-foreground",children:f??e})]})}])},1542,a=>{var b=a.i(87924);let c={primary:"bg-primary text-primary-foreground hover:bg-primary-hover",secondary:"border border-border bg-card text-card-foreground hover:bg-accent"};a.s(["f",0,function({isPending:a,pendingLabel:d,variant:e="secondary",children:f,className:g="",disabled:h,...i}){return(0,b.jsx)("button",{...i,disabled:!0===h||a,"aria-busy":a,className:`inline-flex h-9 items-center gap-2 rounded-md px-4 disabled:cursor-not-allowed disabled:opacity-70 ${c[e]} ${g}`,children:a?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{"aria-hidden":"true",className:"size-3.5 animate-spin rounded-full border-2 border-current border-t-transparent"}),d]}):f})}])}]})();
2
+
3
+ //# sourceMappingURL=web_features_1utnezwv0xr-l._.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../web/features/forms/server-credential.ts","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/owner-field.tsx","../../../../../web/features/overview/ui/action-button.tsx"],"sourcesContent":["/**\n * An outside MCP server's credential, as the add, Parties and decision forms\n * take it: none for a server reached only on a private network, a static\n * bearer, or OAuth client credentials. A server being added may instead\n * have each person sign in to it for themselves (decision 0067).\n */\n\n/** The credential kinds a form offers, with the words it shows. */\nexport const CREDENTIAL_KINDS = [\n { kind: 'none', label: 'No credential' },\n { kind: 'bearer', label: 'Bearer token' },\n { kind: 'clientCredentials', label: 'OAuth client credentials' },\n] as const;\n\nexport type CredentialKind = (typeof CREDENTIAL_KINDS)[number]['kind'];\n\nexport type ServerCredential =\n | { kind: 'none' }\n | { kind: 'bearer'; token: string }\n | { kind: 'clientCredentials'; clientId: string; clientSecret: string; issuer: string; scope?: string };\n\n/** The kind only adding a server offers: the gateway registers the party's client, and each person signs in (decision 0067). */\nexport const SIGN_IN_CREDENTIAL = { kind: 'personSignIn', label: 'Each person signs in' } as const;\n\n/** The credential kinds the add page offers, with the words it shows. */\nexport const ADDED_CREDENTIAL_KINDS = [...CREDENTIAL_KINDS, SIGN_IN_CREDENTIAL] as const;\n\nexport type AddedCredentialKind = (typeof ADDED_CREDENTIAL_KINDS)[number]['kind'];\n\nexport type AddedServerCredential = ServerCredential | { kind: typeof SIGN_IN_CREDENTIAL.kind };\n\n/** The kind a form sent, a bearer when it sent none it knows. */\nexport function credentialKindOf(sent: string): CredentialKind {\n return CREDENTIAL_KINDS.find(({ kind }) => kind === sent)?.kind ?? 'bearer';\n}\n\n/** The credential the fields name: only the fields of its kind are read. */\nexport function serverCredentialOf(fields: { credentialKind: string; token: string; clientId: string; clientSecret: string; issuer: string; scope: string }): ServerCredential {\n const kind = credentialKindOf(fields.credentialKind);\n switch (kind) {\n case 'none':\n return { kind };\n case 'bearer':\n return { kind, token: fields.token };\n case 'clientCredentials':\n return { kind, clientId: fields.clientId, clientSecret: fields.clientSecret, issuer: fields.issuer, ...(fields.scope === '' ? {} : { scope: fields.scope }) };\n }\n}\n\n/** The kind the add page sent, a bearer when it sent none it knows. */\nexport function addedCredentialKindOf(sent: string): AddedCredentialKind {\n return ADDED_CREDENTIAL_KINDS.find(({ kind }) => kind === sent)?.kind ?? 'bearer';\n}\n\n/** The credential the add page's fields name: each person signing in takes no field. */\nexport function addedServerCredentialOf(fields: Parameters<typeof serverCredentialOf>[0]): AddedServerCredential {\n return addedCredentialKindOf(fields.credentialKind) === SIGN_IN_CREDENTIAL.kind ? { kind: SIGN_IN_CREDENTIAL.kind } : serverCredentialOf(fields);\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import { INPUT, LABEL } from './look';\n\n/** A ship a party's owner may be picked from, by its name. */\nexport interface OwnerChoice {\n shipId: string;\n name: string;\n}\n\n/** The owner choices as a page read them, or why they could not be read. */\nexport type OwnerChoices = { isOk: true; value: OwnerChoice[] } | { isOk: false; refusal: string };\n\n/**\n * The owner of a party, picked by name from the ships the fleet takes as an\n * owner. The owner it has now stays a choice, though the fleet no longer\n * lists it, so saving leaves it as it is. Where the choices could not be\n * read, it says why, with nothing to pick.\n */\nexport function OwnerField({ choices, current, help, refusal }: { choices: readonly OwnerChoice[]; current: OwnerChoice | null; help: string; refusal?: string | undefined }) {\n const shown = current === null || choices.some((choice) => choice.shipId === current.shipId) ? choices : [current, ...choices];\n return (\n <label className={LABEL}>\n <span>Owner</span>\n <select className={INPUT} name=\"ownerShipId\" defaultValue={current?.shipId ?? ''} required data-testid=\"owner-field\">\n {current === null ? (\n <option value=\"\" disabled>\n Pick its owner\n </option>\n ) : null}\n {shown.map((choice) => (\n <option key={choice.shipId} value={choice.shipId}>\n {choice.name}\n </option>\n ))}\n </select>\n <span className=\"text-muted-foreground\">{refusal ?? help}</span>\n </label>\n );\n}\n","import type { ButtonHTMLAttributes, ReactNode } from 'react';\n\nconst VARIANTS = {\n primary: 'bg-primary text-primary-foreground hover:bg-primary-hover',\n secondary: 'border border-border bg-card text-card-foreground hover:bg-accent',\n} as const;\n\n/**\n * A button for an action: the moment it is pressed and until the answer\n * comes, it shows a spinner and its working label, and cannot run twice.\n */\nexport function ActionButton({\n isPending,\n pendingLabel,\n variant = 'secondary',\n children,\n className = '',\n disabled,\n ...button\n}: ButtonHTMLAttributes<HTMLButtonElement> & { isPending: boolean; pendingLabel: string; variant?: keyof typeof VARIANTS; children: ReactNode }) {\n return (\n <button\n {...button}\n disabled={disabled === true || isPending}\n aria-busy={isPending}\n className={`inline-flex h-9 items-center gap-2 rounded-md px-4 disabled:cursor-not-allowed disabled:opacity-70 ${VARIANTS[variant]} ${className}`}\n >\n {isPending ? (\n <>\n <span aria-hidden=\"true\" className=\"size-3.5 animate-spin rounded-full border-2 border-current border-t-transparent\" />\n {pendingLabel}\n </>\n ) : (\n children\n )}\n </button>\n );\n}\n"],"names":["CREDENTIAL_KINDS","kind","label","SIGN_IN_CREDENTIAL","ADDED_CREDENTIAL_KINDS","credentialKindOf","sent","find","serverCredentialOf","fields","credentialKind","token","clientId","clientSecret","issuer","scope","addedCredentialKindOf","addedServerCredentialOf","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","OwnerField","choices","current","help","refusal","shown","some","choice","shipId","className","name","defaultValue","required","value","disabled","map","VARIANTS","ActionButton","isPending","pendingLabel","variant","children","button"],"mappings":"6CAQO,IAAMA,EAAmB,CAC9B,CAAEC,KAAM,OAAQC,MAAO,eAAgB,EACvC,CAAED,KAAM,SAAUC,MAAO,cAAe,EACxC,CAAED,KAAM,oBAAqBC,MAAO,0BAA2B,EAChE,CAUYC,EAAqB,CAAEF,KAAM,eAAgBC,MAAO,sBAAuB,EAG3EE,EAAyB,IAAIJ,EAAkBG,EAAmB,oCAyBxE,SAASa,AAAsBV,CAAY,EAChD,OAAOF,EAAuBG,IAAI,CAAC,CAAC,MAAEN,CAAI,CAAE,GAAKA,IAASK,IAAOL,MAAQ,QAC3E,QApBO,SAASI,AAAiBC,CAAY,EAC3C,OAAON,EAAiBO,IAAI,CAAC,CAAC,MAAEN,CAAI,CAAE,GAAKA,IAASK,IAAOL,MAAQ,QACrE,eC/BA,IAAMkB,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,2CCfrB,EAAA,EAAA,CAAA,CAAA,kBAiBO,SAASO,AAAW,CAAEC,SAAO,SAAEC,CAAO,MAAEC,CAAI,SAAEC,CAAO,CAAgH,EAC1K,IAAMC,EAAoB,OAAZH,GAAoBD,EAAQK,IAAI,CAAC,AAACC,GAAWA,EAAOC,MAAM,GAAKN,EAAQM,MAAM,EAAIP,EAAU,CAACC,KAAYD,EAAQ,CAC9H,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMQ,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,IAAA,EAAC,SAAA,CAAOA,UAAW,EAAA,CAAK,CAAEC,KAAK,cAAcC,aAAcT,GAASM,QAAU,GAAII,QAAQ,CAAA,CAAA,EAAC,cAAY,wBACxF,OAAZV,EACC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOW,MAAM,GAAGC,QAAQ,CAAA,CAAA,WAAC,mBAGxB,KACHT,EAAMU,GAAG,CAAC,AAACR,GACV,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAA2BM,MAAON,EAAOC,MAAM,UAC7CD,EAAOG,IAAI,EADDH,EAAOC,MAAM,MAK9B,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAKC,UAAU,iCAAyBL,GAAWD,MAG1D,+BCnCA,IAAMa,EAAW,CACfrB,QAAS,4DACTC,UAAW,mEACb,aAMO,SAASqB,AAAa,WAC3BC,CAAS,cACTC,CAAY,SACZC,EAAU,WAAW,UACrBC,CAAQ,WACRZ,EAAY,EAAE,CACdK,UAAQ,CACR,GAAGQ,EAC0I,EAC7I,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CACE,GAAGA,CAAM,CACVR,UAAuB,IAAbA,GAAqBI,EAC/B,YAAWA,EACXT,UAAW,CAAC,mGAAmG,EAAEO,CAAQ,CAACI,EAAQ,CAAC,CAAC,EAAEX,EAAAA,CAAW,UAEhJS,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,CAAK,cAAY,OAAOT,UAAU,oFAClCU,KAGHE,GAIR"}
@@ -1,3 +1,3 @@
1
- module.exports=[96001,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("60085c6e7b7c0bfc028c33ee4ff6ce087eb0592373",k.callServer,void 0,k.findSourceMapURL,"addA2aAgent"),m={kind:"idle"};a.s(["A2aAgentForm",0,function({fleetId:a,requestId:k,owners:n,scopes:o}){let[p,q]=(0,c.useActionState)(l,m),r="refused"===p.kind?p.fields:{};return(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-agent-form",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:k}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A agent"}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",defaultValue:r.name??"",required:!0})]}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Card address"}),(0,b.jsx)("input",{className:f.w,type:"url",name:"cardUrl",defaultValue:r.cardUrl??"",placeholder:"https://agent.example.com/.well-known/agent-card.json",required:!0}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"The gateway reads the card first: an agent whose card it cannot state is not added."})]}),(0,b.jsx)(e.f,{legend:"The agent's credential",fields:r,noneHelp:"The gateway sends no credential: for an agent that asks for none."}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Messages in flight at once"}),(0,b.jsx)("input",{className:f.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:r.concurrencyLimit??"4"})]}),(0,b.jsx)(h.f,{choices:n.isOk?n.value:[],current:null,help:"A person ship or argo. It answers for this agent.",refusal:n.isOk?void 0:n.refusal}),0===o.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),o.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${j.f}${a}`,defaultChecked:void 0!==r[`${j.f}${a}`]}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Reading the card…",children:"Add"})})]})}],96001)}];
1
+ module.exports=[96001,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("60441535fb5f957bb3ee35ed3eb76b6a02f3318313",k.callServer,void 0,k.findSourceMapURL,"addA2aAgent"),m={kind:"idle"};a.s(["A2aAgentForm",0,function({fleetId:a,requestId:k,owners:n,scopes:o}){let[p,q]=(0,c.useActionState)(l,m),r="refused"===p.kind?p.fields:{};return(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-agent-form",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:k}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A agent"}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",defaultValue:r.name??"",required:!0})]}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Card address"}),(0,b.jsx)("input",{className:f.w,type:"url",name:"cardUrl",defaultValue:r.cardUrl??"",placeholder:"https://agent.example.com/.well-known/agent-card.json",required:!0}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:"The gateway reads the card first: an agent whose card it cannot state is not added."})]}),(0,b.jsx)(e.f,{legend:"The agent's credential",fields:r,noneHelp:"The gateway sends no credential: for an agent that asks for none."}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Messages in flight at once"}),(0,b.jsx)("input",{className:f.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:r.concurrencyLimit??"4"})]}),(0,b.jsx)(h.f,{choices:n.isOk?n.value:[],current:null,help:"A person ship or argo. It answers for this agent.",refusal:n.isOk?void 0:n.refusal}),0===o.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),o.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${j.f}${a}`,defaultChecked:void 0!==r[`${j.f}${a}`]}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Reading the card…",children:"Add"})})]})}],96001)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/add-a2a-agent/ui/a2a-agent-form.tsx","../../../../../web/features/add-a2a-agent/data%3Ac78b3a%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aAgent, type AddA2aAgentState } from '../actions';\n\nconst IDLE: AddA2aAgentState = { kind: 'idle' };\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The form that adds an A2A agent: its name, card address, credential and calls at once, its owner and the approver's own scopes to tick. */\nexport function A2aAgentForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aAgent, IDLE);\n const fields = state.kind === 'refused' ? state.fields : {};\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-agent-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A agent</h1>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" defaultValue={fields.name ?? ''} required />\n </label>\n <label className={LABEL}>\n <span>Card address</span>\n <input className={INPUT} type=\"url\" name=\"cardUrl\" defaultValue={fields.cardUrl ?? ''} placeholder=\"https://agent.example.com/.well-known/agent-card.json\" required />\n <span className=\"text-caption text-muted-foreground\">The gateway reads the card first: an agent whose card it cannot state is not added.</span>\n </label>\n <CredentialFields legend=\"The agent's credential\" fields={fields} noneHelp=\"The gateway sends no credential: for an agent that asks for none.\" />\n <label className={LABEL}>\n <span>Messages in flight at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this agent.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} defaultChecked={fields[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Reading the card…\">Add</SubmitButton>\n </div>\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60085c6e7b7c0bfc028c33ee4ff6ce087eb0592373\":{\"name\":\"addA2aAgent\"}},\"web/features/add-a2a-agent/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60085c6e7b7c0bfc028c33ee4ff6ce087eb0592373\",callServer,void 0,findSourceMapURL,\"addA2aAgent\");export{$$RSC_SERVER_ACTION_0 as addA2aAgent};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/add-a2a-agent/ui/a2a-agent-form.tsx","../../../../../web/features/add-a2a-agent/data%3Abae063%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aAgent, type AddA2aAgentState } from '../actions';\n\nconst IDLE: AddA2aAgentState = { kind: 'idle' };\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The form that adds an A2A agent: its name, card address, credential and calls at once, its owner and the approver's own scopes to tick. */\nexport function A2aAgentForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aAgent, IDLE);\n const fields = state.kind === 'refused' ? state.fields : {};\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-agent-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A agent</h1>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" defaultValue={fields.name ?? ''} required />\n </label>\n <label className={LABEL}>\n <span>Card address</span>\n <input className={INPUT} type=\"url\" name=\"cardUrl\" defaultValue={fields.cardUrl ?? ''} placeholder=\"https://agent.example.com/.well-known/agent-card.json\" required />\n <span className=\"text-caption text-muted-foreground\">The gateway reads the card first: an agent whose card it cannot state is not added.</span>\n </label>\n <CredentialFields legend=\"The agent's credential\" fields={fields} noneHelp=\"The gateway sends no credential: for an agent that asks for none.\" />\n <label className={LABEL}>\n <span>Messages in flight at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this agent.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} defaultChecked={fields[`${SCOPE_FIELD_PREFIX}${scope}`] !== undefined} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Reading the card…\">Add</SubmitButton>\n </div>\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60441535fb5f957bb3ee35ed3eb76b6a02f3318313\":{\"name\":\"addA2aAgent\"}},\"web/features/add-a2a-agent/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60441535fb5f957bb3ee35ed3eb76b6a02f3318313\",callServer,void 0,findSourceMapURL,\"addA2aAgent\");export{$$RSC_SERVER_ACTION_0 as addA2aAgent};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[90344,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(25959),e=a.i(30587),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(64943),k=a.i(5050);let l=(0,k.createServerReference)("60508bb3094441c88475ec484f81a0c6c47c0812a1",k.callServer,void 0,k.findSourceMapURL,"addA2aClient"),m={kind:"idle"};function n({name:a,bearer:c,fleetId:e}){return(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-added",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," is added"]}),(0,b.jsx)("p",{children:"Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again."}),(0,b.jsx)("code",{className:"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code","data-testid":"add-a2a-client-bearer",children:c}),(0,b.jsx)("p",{children:(0,b.jsx)("a",{href:(0,d.f)(`/outside-parties/${encodeURIComponent(a)}`,e),className:"text-primary hover:underline",children:"Its card addresses"})})]})}a.s(["A2aClientForm",0,function({fleetId:a,requestId:d,owners:k,scopes:o}){let[p,q]=(0,c.useActionState)(l,m);return"added"===p.kind?(0,b.jsx)(n,{name:p.name,bearer:p.bearer,fleetId:a}):(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-form",children:[(0,b.jsx)("input",{type:"hidden",name:e.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:d}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A client"}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",required:!0})]}),(0,b.jsx)(h.f,{choices:k.isOk?k.value:[],current:null,help:"A person ship or argo. It answers for this client.",refusal:k.isOk?void 0:k.refusal}),0===o.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),o.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${j.f}${a}`}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Adding…",children:"Add"})}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}})]})}],90344)}];
1
+ module.exports=[90344,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(25959),e=a.i(30587),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(48242),k=a.i(64943),l=a.i(5050);let m=(0,l.createServerReference)("603e8c3f824e1a0f93b5c528fcd5a56924652a6ba8",l.callServer,void 0,l.findSourceMapURL,"addA2aClient"),n={kind:"idle"};function o({name:a,bearer:c,fleetId:e}){return(0,b.jsxs)("section",{className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-added",children:[(0,b.jsxs)("h2",{className:"text-section font-semibold",children:[a," is added"]}),(0,b.jsx)("p",{children:"Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again."}),(0,b.jsx)("code",{className:"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code","data-testid":"add-a2a-client-bearer",children:c}),(0,b.jsx)("p",{children:(0,b.jsx)("a",{href:(0,d.f)((0,j.f)(a),e),className:"text-primary hover:underline",children:"Its card addresses"})})]})}a.s(["A2aClientForm",0,function({fleetId:a,requestId:d,owners:j,scopes:l}){let[p,q]=(0,c.useActionState)(m,n);return"added"===p.kind?(0,b.jsx)(o,{name:p.name,bearer:p.bearer,fleetId:a}):(0,b.jsxs)("form",{action:q,className:`${f.r} grid gap-3`,"data-testid":"add-a2a-client-form",children:[(0,b.jsx)("input",{type:"hidden",name:e.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:d}),(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add an A2A client"}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Name, the proxy ship's"}),(0,b.jsx)("input",{className:f.w,name:"name",required:!0})]}),(0,b.jsx)(h.f,{choices:j.isOk?j.value:[],current:null,help:"A person ship or argo. It answers for this client.",refusal:j.isOk?void 0:j.refusal}),0===l.length?null:(0,b.jsxs)("fieldset",{className:"grid gap-2",children:[(0,b.jsx)("legend",{className:"font-medium",children:"Scopes, beside sending and receiving"}),l.map(a=>(0,b.jsxs)("label",{className:"flex items-center gap-2",children:[(0,b.jsx)("input",{type:"checkbox",name:`${k.f}${a}`}),(0,b.jsx)("span",{className:"font-mono text-code",children:a})]},a))]}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Adding…",children:"Add"})}),(0,b.jsx)(g.f,{state:"refused"===p.kind?p:{kind:"idle"}})]})}],90344)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/add-a2a-client/ui/a2a-client-form.tsx","../../../../../web/features/outside-parties/paths.ts","../../../../../web/features/add-a2a-client/data%3A353f22%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { partyPath } from '../../outside-parties/paths';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aClient, type AddA2aClientState } from '../actions';\n\nconst IDLE: AddA2aClientState = { kind: 'idle' };\n\n/** The bearer, shown this once: the gateway keeps only its hash. */\nfunction Added({ name, bearer, fleetId }: { name: string; bearer: string; fleetId: string }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-added\">\n <h2 className=\"text-section font-semibold\">{name} is added</h2>\n <p>Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again.</p>\n <code className=\"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code\" data-testid=\"add-a2a-client-bearer\">\n {bearer}\n </code>\n <p>\n <a href={inFleet(partyPath(name), fleetId)} className=\"text-primary hover:underline\">\n Its card addresses\n </a>\n </p>\n </section>\n );\n}\n\n/** The form that adds an A2A client: its name, owner and the approver's own scopes to tick; then its bearer. */\nexport function A2aClientForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aClient, IDLE);\n if (state.kind === 'added') {\n return <Added name={state.name} bearer={state.bearer} fleetId={fleetId} />;\n }\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A client</h1>\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this client.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Adding…\">Add</SubmitButton>\n </div>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n </form>\n );\n}\n","/** The outside parties' pages. */\nexport const OUTSIDE_PARTIES_PATH = '/outside-parties';\n\nexport const ADD_SERVER_PATH = `${OUTSIDE_PARTIES_PATH}/add`;\n\nexport const ADD_A2A_CLIENT_PATH = `${OUTSIDE_PARTIES_PATH}/add-a2a-client`;\n\nexport const ADD_A2A_AGENT_PATH = `${OUTSIDE_PARTIES_PATH}/add-a2a-agent`;\n\n/** One outside party's page, or one of its own: changing it, retiring it. */\nexport function partyPath(name: string, action?: 'change' | 'retire'): string {\n return `${OUTSIDE_PARTIES_PATH}/${encodeURIComponent(name)}${action === undefined ? '' : `/${action}`}`;\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60508bb3094441c88475ec484f81a0c6c47c0812a1\":{\"name\":\"addA2aClient\"}},\"web/features/add-a2a-client/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60508bb3094441c88475ec484f81a0c6c47c0812a1\",callServer,void 0,findSourceMapURL,\"addA2aClient\");export{$$RSC_SERVER_ACTION_0 as addA2aClient};"],"names":["OUTSIDE_PARTIES_PATH","ADD_SERVER_PATH","ADD_A2A_CLIENT_PATH","ADD_A2A_AGENT_PATH","partyPath","name","action","encodeURIComponent","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/add-a2a-client/ui/a2a-client-form.tsx","../../../../../web/features/add-a2a-client/data%3A11c8fc%20%3Ctext/javascript%3E"],"sourcesContent":["'use client';\n\nimport { useActionState } from 'react';\n\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField, type OwnerChoices } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { partyPath } from '../../outside-parties/paths';\nimport { SCOPE_FIELD_PREFIX } from '../../outside-party/scope-changes';\nimport { addA2aClient, type AddA2aClientState } from '../actions';\n\nconst IDLE: AddA2aClientState = { kind: 'idle' };\n\n/** The bearer, shown this once: the gateway keeps only its hash. */\nfunction Added({ name, bearer, fleetId }: { name: string; bearer: string; fleetId: string }) {\n return (\n <section className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-added\">\n <h2 className=\"text-section font-semibold\">{name} is added</h2>\n <p>Hand its client this bearer now. It is shown only once: the gateway keeps no copy it can show again.</p>\n <code className=\"break-all rounded-md border border-border bg-background px-3 py-2 font-mono text-code\" data-testid=\"add-a2a-client-bearer\">\n {bearer}\n </code>\n <p>\n <a href={inFleet(partyPath(name), fleetId)} className=\"text-primary hover:underline\">\n Its card addresses\n </a>\n </p>\n </section>\n );\n}\n\n/** The form that adds an A2A client: its name, owner and the approver's own scopes to tick; then its bearer. */\nexport function A2aClientForm({ fleetId, requestId, owners, scopes }: { fleetId: string; requestId: string; owners: OwnerChoices; scopes: readonly string[] }) {\n const [state, action] = useActionState(addA2aClient, IDLE);\n if (state.kind === 'added') {\n return <Added name={state.name} bearer={state.bearer} fleetId={fleetId} />;\n }\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-a2a-client-form\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={requestId} />\n <h1 className=\"text-title font-semibold\">Add an A2A client</h1>\n <label className={LABEL}>\n <span>Name, the proxy ship&apos;s</span>\n <input className={INPUT} name=\"name\" required />\n </label>\n <OwnerField choices={owners.isOk ? owners.value : []} current={null} help=\"A person ship or argo. It answers for this client.\" refusal={owners.isOk ? undefined : owners.refusal} />\n {scopes.length === 0 ? null : (\n <fieldset className=\"grid gap-2\">\n <legend className=\"font-medium\">Scopes, beside sending and receiving</legend>\n {scopes.map((scope) => (\n <label key={scope} className=\"flex items-center gap-2\">\n <input type=\"checkbox\" name={`${SCOPE_FIELD_PREFIX}${scope}`} />\n <span className=\"font-mono text-code\">{scope}</span>\n </label>\n ))}\n </fieldset>\n )}\n <div>\n <SubmitButton pending=\"Adding…\">Add</SubmitButton>\n </div>\n <Outcome state={state.kind === 'refused' ? state : { kind: 'idle' }} />\n </form>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"603e8c3f824e1a0f93b5c528fcd5a56924652a6ba8\":{\"name\":\"addA2aClient\"}},\"web/features/add-a2a-client/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"603e8c3f824e1a0f93b5c528fcd5a56924652a6ba8\",callServer,void 0,findSourceMapURL,\"addA2aClient\");export{$$RSC_SERVER_ACTION_0 as addA2aClient};"],"names":["$$RSC_SERVER_ACTION_0"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(60224),f=a.i(88412),g=a.i(36855),h=a.i(35149),i=a.i(77237),j=a.i(10020),k=a.i(47763);function l({tool:a,control:c,testId:d}){let{name:e,description:f,isReadOnly:g,isNew:h=!1}=a,i=void 0===f?"":f.split("\n").map(a=>a.trim()).find(a=>""!==a)??"",j=void 0!==f&&f.trim()!==i;return(0,b.jsxs)("li",{className:"grid gap-1 border-b border-border py-2 last:border-b-0","data-testid":d,children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[c,(0,b.jsx)("span",{className:"font-mono",children:e}),g?(0,b.jsx)(k.E,{children:"reads only"}):null,h?(0,b.jsx)(k.T,{tone:"attention",label:"New"}):null]}),""===i?null:j?(0,b.jsxs)("details",{className:"text-muted-foreground",children:[(0,b.jsx)("summary",{className:"cursor-pointer",children:i}),(0,b.jsx)("p",{className:"mt-1 whitespace-pre-line",children:f})]}):(0,b.jsx)("p",{className:"text-muted-foreground",children:i})]})}var m=a.i(5050);let n=(0,m.createServerReference)("60393d4a3f1c34cc08eecf43779c328ad1fb18e7c7",m.callServer,void 0,m.findSourceMapURL,"approveServer"),o=(0,m.createServerReference)("60af6631f33744be859489a17cadd5ebe9823d4309",m.callServer,void 0,m.findSourceMapURL,"checkServer"),p=["Address","Check","Owner"],q=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function r({at:a}){return(0,b.jsx)("ol",{className:"flex gap-4",children:p.map((c,d)=>(0,b.jsxs)("li",{"aria-current":d===a?"step":void 0,className:d<=a?"font-medium":"text-muted-foreground",children:[d+1," ",c]},c))})}function s({refusal:a}){return void 0===a?null:(0,b.jsx)(g.f,{state:{kind:"refused",message:a}})}function t({state:a,action:c,fleetId:g}){return(0,b.jsxs)("form",{action:c,className:`${f.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:g}),(0,b.jsx)(s,{refusal:a.refusal}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:f.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsx)(e.f,{legend:"The server's credential",fields:a.fields,noneHelp:"The gateway sends no credential: for a server reached only on a private network."}),(0,b.jsx)("div",{children:(0,b.jsx)(i.f,{pending:"Checking the server…",testId:"add-server-check",children:"Check the server"})})]})}function u({tools:a,canSwitch:d}){let[e,f]=(0,c.useState)(new Set),g=a.length-e.size;return(0,b.jsxs)("section",{className:"grid gap-2","data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"flex flex-wrap justify-between gap-2 text-section font-semibold",children:[(0,b.jsxs)("span",{children:["The server answers: ",a.length," ",1===a.length?"tool":"tools"]}),d?(0,b.jsxs)("span",{role:"status",className:"font-normal text-muted-foreground","data-testid":"add-server-tools-on",children:[g," of ",a.length," on"]}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:d?"The fleet may call only the tools switched on. A tool the server adds later starts off.":"Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page."}),(0,b.jsx)("ul",{className:"grid",children:a.map(a=>{let c=!e.has(a.name);return(0,b.jsx)(l,{tool:a,testId:"add-server-tool",control:d?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("input",{type:"hidden",name:"toolShown",value:a.name}),c?(0,b.jsx)("input",{type:"hidden",name:"toolOn",value:a.name}):null,(0,b.jsx)(j.f,{isOn:c,label:a.name,onClick:()=>{var b;b=a.name,f(a=>{let c=new Set(a);return c.delete(b)||c.add(b),c})}})]}):null},a.name)})})]})}function v({state:a,refused:e,action:g,onBack:j,fleetId:k,canSwitchTools:l}){let m,n="refused"===e.kind&&e.requestId===a.requestId,o=n?e.fields:a.fields,p=o.url??"",[r,t]=(0,c.useState)(o.name??function(a){if(!URL.canParse(a))return"";let{hostname:b}=new URL(a);return/^\d+(\.\d+){3}$/.test(b)||b.startsWith("[")?"":(b.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,"")}(p));return(0,b.jsx)(b.Fragment,{children:(0,b.jsxs)("form",{action:g,className:`${f.r} grid gap-3`,"data-testid":"add-server-owner",children:[(0,b.jsx)(u,{tools:a.tools,canSwitch:l}),(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(s,{refusal:n?e.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:d.H,value:k}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),q.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:o[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:p}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:f.w,type:"text",name:"name",value:r,onChange:a=>{t(a.target.value)},required:!0})]}),(0,b.jsx)(h.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===o.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:f.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:f.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:o.concurrencyLimit??"4"})]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(i.f,{pending:"Adding…",testId:"add-server-approve",children:""===(m=r.trim())?"Add as outside party":m.length>20?`Add ${m.slice(0,20)}…`:`Add ${m}`}),(0,b.jsx)("button",{type:"button",className:f.x.secondary,onClick:j,children:"Back to the address"})]})]})})}a.s(["AddServer",0,function({fleetId:a,canSwitchTools:d}){let[e,f]=(0,c.useActionState)(o,{step:"address",fields:{}}),[g,h]=(0,c.useActionState)(n,{kind:"idle"}),[i,j]=(0,c.useState)(void 0),k="owner"===e.step&&i!==e.requestId?e:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add MCP server"}),(0,b.jsx)(r,{at:2*(void 0!==k)}),void 0===k?(0,b.jsx)(t,{state:e,action:f,fleetId:a}):(0,b.jsx)(v,{state:k,refused:g,action:h,onBack:()=>{j(k.requestId)},fleetId:a,canSwitchTools:d})]})}],29372)}];
1
+ module.exports=[29372,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(5050);let e=(0,d.createServerReference)("6016f937a1369b6859c9c0fd2f9becfa3697def235",d.callServer,void 0,d.findSourceMapURL,"approveServer"),f=(0,d.createServerReference)("605ccee1941cfb893bf04e87e68a064ea6aafbe3eb",d.callServer,void 0,d.findSourceMapURL,"checkServer");var g=a.i(30587),h=a.i(51636),i=a.i(60224),j=a.i(88412),k=a.i(77237);let l=["Address","Check","Owner"],m=["Address","Owner","Sign in"];var n=a.i(36855);function o({refusal:a}){return void 0===a?null:(0,b.jsx)(n.f,{state:{kind:"refused",message:a}})}function p({names:a,at:c}){return(0,b.jsx)("ol",{className:"flex gap-4",children:a.map((a,d)=>(0,b.jsxs)("li",{"aria-current":d===c?"step":void 0,className:d<=c?"font-medium":"text-muted-foreground",children:[d+1," ",a]},a))})}function q({state:a,action:d,fleetId:e}){let[f,n]=(0,c.useState)((0,h.G)(a.fields.credentialKind??"")),r=f===h.m.kind;return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:f===h.m.kind?m:l,at:0}),(0,b.jsxs)("form",{action:d,className:`${j.r} grid gap-3`,"data-testid":"add-server-address",children:[(0,b.jsx)("input",{type:"hidden",name:g.H,value:e}),(0,b.jsx)(o,{refusal:a.refusal}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Streamable HTTP address"}),(0,b.jsx)("input",{className:j.w,type:"url",name:"url",defaultValue:a.fields.url??"",placeholder:"https://mcp.example.com/mcp",required:!0})]}),(0,b.jsx)(i.f,{legend:"The server's credential",fields:a.fields,noneHelp:"The gateway sends no credential: for a server reached only on a private network.",canEachPersonSignIn:!0,onKindChange:n}),(0,b.jsx)("div",{children:(0,b.jsx)(k.f,{pending:r?"Next…":"Checking the server…",testId:"add-server-check",children:r?"Next":"Check the server"})})]})]})}var r=a.i(35149),s=a.i(10020),t=a.i(47763);function u({tool:a,control:c,testId:d}){let{name:e,description:f,isReadOnly:g,isNew:h=!1}=a,i=void 0===f?"":f.split("\n").map(a=>a.trim()).find(a=>""!==a)??"",j=void 0!==f&&f.trim()!==i;return(0,b.jsxs)("li",{className:"grid gap-1 border-b border-border py-2 last:border-b-0","data-testid":d,children:[(0,b.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[c,(0,b.jsx)("span",{className:"font-mono",children:e}),g?(0,b.jsx)(t.E,{children:"reads only"}):null,h?(0,b.jsx)(t.T,{tone:"attention",label:"New"}):null]}),""===i?null:j?(0,b.jsxs)("details",{className:"text-muted-foreground",children:[(0,b.jsx)("summary",{className:"cursor-pointer",children:i}),(0,b.jsx)("p",{className:"mt-1 whitespace-pre-line",children:f})]}):(0,b.jsx)("p",{className:"text-muted-foreground",children:i})]})}function v({tools:a,canSwitch:d}){let[e,f]=(0,c.useState)(new Set),g=a.length-e.size;return(0,b.jsxs)("section",{className:"grid gap-2","data-testid":"add-server-tools",children:[(0,b.jsxs)("h2",{className:"flex flex-wrap justify-between gap-2 text-section font-semibold",children:[(0,b.jsxs)("span",{children:["The server answers: ",a.length," ",1===a.length?"tool":"tools"]}),d?(0,b.jsxs)("span",{role:"status",className:"font-normal text-muted-foreground","data-testid":"add-server-tools-on",children:[g," of ",a.length," on"]}):null]}),(0,b.jsx)("p",{className:"text-muted-foreground",children:d?"The fleet may call only the tools switched on. A tool the server adds later starts off.":"Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page."}),(0,b.jsx)("ul",{className:"grid",children:a.map(a=>{let c=!e.has(a.name);return(0,b.jsx)(u,{tool:a,testId:"add-server-tool",control:d?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("input",{type:"hidden",name:"toolShown",value:a.name}),c?(0,b.jsx)("input",{type:"hidden",name:"toolOn",value:a.name}):null,(0,b.jsx)(s.f,{isOn:c,label:a.name,onClick:()=>{var b;b=a.name,f(a=>{let c=new Set(a);return c.delete(b)||c.add(b),c})}})]}):null},a.name)})})]})}let w=["url","credentialKind","token","clientId","clientSecret","issuer","scope"];function x({state:a,refused:d,action:e,onBack:f,fleetId:h,canSwitchTools:i}){let n,q="refused"===d.kind&&d.requestId===a.requestId,s=q?d.fields:a.fields,t=s.url??"",[u,y]=(0,c.useState)(s.name??function(a){if(!URL.canParse(a))return"";let{hostname:b}=new URL(a);return/^\d+(\.\d+){3}$/.test(b)||b.startsWith("[")?"":(b.split(".").filter(a=>"mcp"!==a&&"www"!==a)[0]??"").toLowerCase().replaceAll(/[^a-z0-9]+/g,"-").replaceAll(/^-+|-+$/g,"")}(t)),z=a.tools;return(0,b.jsxs)(b.Fragment,{children:[null===z?(0,b.jsx)(p,{names:m,at:1}):(0,b.jsx)(p,{names:l,at:2}),(0,b.jsxs)("form",{action:e,className:`${j.r} grid gap-3`,"data-testid":"add-server-owner",children:[null===z?null:(0,b.jsx)(v,{tools:z,canSwitch:i}),(0,b.jsx)("h2",{className:"text-section font-semibold",children:"Its owner"}),(0,b.jsx)(o,{refusal:q?d.message:void 0}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:h}),(0,b.jsx)("input",{type:"hidden",name:"requestId",value:a.requestId}),w.map(a=>(0,b.jsx)("input",{type:"hidden",name:a,value:s[a]??""},a)),(0,b.jsx)("p",{className:"font-mono text-muted-foreground",children:t}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Proxy ship's name"}),(0,b.jsx)("input",{className:j.w,type:"text",name:"name",value:u,onChange:a=>{y(a.target.value)},required:!0})]}),(0,b.jsx)(r.f,{choices:a.owners,current:a.owners.find(a=>a.shipId===s.ownerShipId)??null,help:"A person ship or argo. It answers for this server."}),(0,b.jsxs)("label",{className:j.z,children:[(0,b.jsx)("span",{children:"Calls at once"}),(0,b.jsx)("input",{className:j.w,type:"number",name:"concurrencyLimit",min:1,max:10,defaultValue:s.concurrencyLimit??"4"})]}),null===z?(0,b.jsx)("p",{className:"text-muted-foreground",children:"Its tools show once someone signs in."}):null,(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsx)(k.f,{pending:null===z?"Checking the sign-in…":"Adding…",testId:"add-server-approve",children:""===(n=u.trim())?"Add as outside party":n.length>20?`Add ${n.slice(0,20)}…`:`Add ${n}`}),(0,b.jsx)("button",{type:"button",className:j.x.secondary,onClick:f,children:"Back to the address"})]})]})]})}var y=a.i(25959),z=a.i(48242),A=a.i(94423);function B({fleetId:a,name:d}){let[e,f]=(0,c.useActionState)(A.f,g.Q);return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(p,{names:m,at:2}),(0,b.jsxs)("form",{action:f,className:`${j.r} grid gap-3`,"data-testid":"add-server-sign-in",children:[(0,b.jsx)(n.f,{state:{kind:"done",message:`${d} is added.`}}),(0,b.jsx)(n.f,{state:e}),(0,b.jsx)("input",{type:"hidden",name:g.H,value:a}),(0,b.jsx)("input",{type:"hidden",name:"name",value:d}),(0,b.jsxs)("p",{children:["Sign in to ",d," for yourself. Its tools show after the first sign-in."]}),(0,b.jsxs)("div",{className:"flex gap-2",children:[(0,b.jsxs)(k.f,{pending:`Opening ${d}…`,testId:"add-server-sign-in-start",children:["Sign in to ",d]}),(0,b.jsx)("a",{href:(0,y.f)((0,z.f)(d),a),className:j.x.secondary,children:"Later"})]})]})]})}a.s(["AddServer",0,function({fleetId:a,canSwitchTools:d}){let[g,h]=(0,c.useActionState)(f,{step:"address",fields:{}}),[i,j]=(0,c.useActionState)(e,{kind:"idle"}),[k,l]=(0,c.useState)(void 0),m="owner"===g.step&&k!==g.requestId?g:void 0;return(0,b.jsxs)("div",{className:"grid gap-4",children:[(0,b.jsx)("h1",{className:"text-title font-semibold",children:"Add MCP server"}),"added"===i.kind?(0,b.jsx)(B,{fleetId:a,name:i.name}):void 0===m?(0,b.jsx)(q,{state:g,action:h,fleetId:a}):(0,b.jsx)(x,{state:m,refused:i,action:j,onBack:()=>{l(m.requestId)},fleetId:a,canSwitchTools:d})]})}],29372)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/tool-choice.ts","../../../../../web/features/outside-parties/ui/tool-row.tsx","../../../../../web/features/add-server/data%3Aea63b8%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A418cac%20%3Ctext/javascript%3E","../../../../../web/features/add-server/suggested-name.ts"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { Switch } from '../../forms/ui/switch';\nimport { ToolRow } from '../../outside-parties/ui/tool-row';\nimport { approveServer, checkServer, type AddServerState, type ApproveState, type CheckedTool } from '../actions';\nimport { addButtonLabel, suggestedName } from '../suggested-name';\nimport { TOOL_ON_FIELD, TOOL_SHOWN_FIELD } from '../tool-choice';\n\n/** The steps of adding a server, as the design numbers them. */\nconst STEPS = ['Address', 'Check', 'Owner'] as const;\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\nfunction Steps({ at }: { at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {STEPS.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n\nfunction Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n\nfunction AddressStep({ state, action, fleetId }: { state: Extract<AddServerState, { step: 'address' }> | { fields: Record<string, string>; refusal?: string }; action: (form: FormData) => void; fleetId: string }) {\n return (\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <CredentialFields legend=\"The server's credential\" fields={state.fields} noneHelp=\"The gateway sends no credential: for a server reached only on a private network.\" />\n <div>\n <SubmitButton pending=\"Checking the server…\" testId=\"add-server-check\">\n Check the server\n </SubmitButton>\n </div>\n </form>\n );\n}\n\n/**\n * The tools the check answered, one row each. An approver switches each on\n * or off, all on to start; the fleet may call only those on (aeolus-fleet#1151).\n * Without gateway:approve they show without switches, and every tool starts on.\n */\nfunction ToolsSection({ tools, canSwitch }: { tools: CheckedTool[]; canSwitch: boolean }) {\n const [off, setOff] = useState<ReadonlySet<string>>(new Set());\n const onCount = tools.length - off.size;\n const flip = (name: string) => {\n setOff((current) => {\n const next = new Set(current);\n if (!next.delete(name)) {\n next.add(name);\n }\n return next;\n });\n };\n return (\n <section className=\"grid gap-2\" data-testid=\"add-server-tools\">\n <h2 className=\"flex flex-wrap justify-between gap-2 text-section font-semibold\">\n <span>\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </span>\n {canSwitch ? (\n <span role=\"status\" className=\"font-normal text-muted-foreground\" data-testid=\"add-server-tools-on\">\n {onCount} of {tools.length} on\n </span>\n ) : null}\n </h2>\n <p className=\"text-muted-foreground\">{canSwitch ? 'The fleet may call only the tools switched on. A tool the server adds later starts off.' : 'Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page.'}</p>\n <ul className=\"grid\">\n {tools.map((tool) => {\n const isOn = !off.has(tool.name);\n return (\n <ToolRow\n key={tool.name}\n tool={tool}\n testId=\"add-server-tool\"\n control={\n canSwitch ? (\n <>\n <input type=\"hidden\" name={TOOL_SHOWN_FIELD} value={tool.name} />\n {isOn ? <input type=\"hidden\" name={TOOL_ON_FIELD} value={tool.name} /> : null}\n <Switch isOn={isOn} label={tool.name} onClick={() => { flip(tool.name); }} />\n </>\n ) : null\n }\n />\n );\n })}\n </ul>\n </section>\n );\n}\n\nfunction OwnerStep({ state, refused, action, onBack, fleetId, canSwitchTools }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string; canSwitchTools: boolean }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const url = fields.url ?? '';\n const [name, setName] = useState(fields.name ?? suggestedName(url));\n return (\n <>\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n <ToolsSection tools={state.tools} canSwitch={canSwitchTools} />\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship&apos;s name</span>\n <input className={INPUT} type=\"text\" name=\"name\" value={name} onChange={(event) => { setName(event.target.value); }} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n <div className=\"flex gap-2\">\n <SubmitButton pending=\"Adding…\" testId=\"add-server-approve\">\n {addButtonLabel(name)}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. Each\n * button says at once that its step is on its way.\n */\nexport function AddServer({ fleetId, canSwitchTools }: { fleetId: string; canSwitchTools: boolean }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [refused, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n <Steps at={owner === undefined ? 0 : 2} />\n {owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={refused} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} canSwitchTools={canSwitchTools} />\n )}\n </div>\n );\n}\n","/**\n * The tools an approver switched when adding a server (aeolus-fleet#1151):\n * each tool the check answered is sent as shown, and the ticked ones as on.\n */\n\n/** The field naming each tool whose switch the form showed. */\nexport const TOOL_SHOWN_FIELD = 'toolShown';\n\n/** The field naming each tool ticked on. */\nexport const TOOL_ON_FIELD = 'toolOn';\n\nfunction namesIn(form: FormData, field: string): string[] {\n return form.getAll(field).filter((value) => typeof value === 'string');\n}\n\n/** Each tool shown, on or off; none when the form showed no switch, so the server keeps every tool on. */\nexport function toolChoiceOf(form: FormData): { name: string; isOn: boolean }[] | undefined {\n const shown = namesIn(form, TOOL_SHOWN_FIELD);\n if (shown.length === 0) {\n return undefined;\n }\n const on = new Set(namesIn(form, TOOL_ON_FIELD));\n return shown.map((name) => ({ name, isOn: on.has(name) }));\n}\n\n/** A description's first line with words, as a tool's row shows it before it is opened. */\nexport function firstLineOf(description: string): string {\n return description.split('\\n').map((line) => line.trim()).find((line) => line !== '') ?? '';\n}\n","import type { ReactNode } from 'react';\n\nimport { firstLineOf } from '../../add-server/tool-choice';\nimport { StatusBadge, Tag } from './status-badge';\n\n/** A tool of an outside MCP server, as its row shows it. */\nexport interface ShownTool {\n name: string;\n description?: string | undefined;\n isReadOnly: boolean;\n isNew?: boolean;\n}\n\n/**\n * One tool in a list an approver scans (aeolus-fleet#1151): its switch, its\n * name, whether the server says it reads only, whether it is new, and its\n * description's first line, the whole description folded open on a click.\n */\nexport function ToolRow({ tool, control, testId }: { tool: ShownTool; control: ReactNode; testId?: string }) {\n const { name, description, isReadOnly, isNew = false } = tool;\n const firstLine = description === undefined ? '' : firstLineOf(description);\n const isFolded = description !== undefined && description.trim() !== firstLine;\n return (\n <li className=\"grid gap-1 border-b border-border py-2 last:border-b-0\" data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {control}\n <span className=\"font-mono\">{name}</span>\n {isReadOnly ? <Tag>reads only</Tag> : null}\n {isNew ? <StatusBadge tone=\"attention\" label=\"New\" /> : null}\n </div>\n {firstLine === '' ? null : isFolded ? (\n <details className=\"text-muted-foreground\">\n <summary className=\"cursor-pointer\">{firstLine}</summary>\n <p className=\"mt-1 whitespace-pre-line\">{description}</p>\n </details>\n ) : (\n <p className=\"text-muted-foreground\">{firstLine}</p>\n )}\n </li>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"60393d4a3f1c34cc08eecf43779c328ad1fb18e7c7\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"60393d4a3f1c34cc08eecf43779c328ad1fb18e7c7\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"60af6631f33744be859489a17cadd5ebe9823d4309\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"60af6631f33744be859489a17cadd5ebe9823d4309\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","/** The most characters of the proxy ship's name the add button shows. */\nconst BUTTON_NAME_MAX_LENGTH = 20;\n\n/** A proxy ship's name offered from a server's address: its host's first name that says whose it is; none for an IP address, whose numbers say nothing of it. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const { hostname } = new URL(url);\n // URL writes every IPv4 host as four numbers, and keeps an IPv6 host in its brackets; the browser runs this too, so no node:net.\n if (/^\\d+(\\.\\d+){3}$/.test(hostname) || hostname.startsWith('[')) {\n return '';\n }\n const labels = hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n\n/** The add button's words: the proxy ship's name as typed, cut at 20 characters, or the plain words while none is typed. */\nexport function addButtonLabel(name: string): string {\n const typed = name.trim();\n if (typed === '') {\n return 'Add as outside party';\n }\n return typed.length > BUTTON_NAME_MAX_LENGTH ? `Add ${typed.slice(0, BUTTON_NAME_MAX_LENGTH)}…` : `Add ${typed}`;\n}\n"],"names":["TOOL_SHOWN_FIELD","TOOL_ON_FIELD","namesIn","form","field","getAll","filter","value","toolChoiceOf","shown","length","undefined","on","Set","map","name","isOn","has","firstLineOf","description","split","line","trim","find"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../web/features/add-server/ui/add-server.tsx","../../../../../web/features/add-server/data%3A5eb7f7%20%3Ctext/javascript%3E","../../../../../web/features/add-server/data%3A51c923%20%3Ctext/javascript%3E","../../../../../web/features/add-server/ui/address-step.tsx","../../../../../web/features/add-server/steps.ts","../../../../../web/features/add-server/ui/refused.tsx","../../../../../web/features/add-server/ui/steps.tsx","../../../../../web/features/add-server/ui/owner-step.tsx","../../../../../web/features/add-server/suggested-name.ts","../../../../../web/features/add-server/ui/tools-section.tsx","../../../../../web/features/add-server/tool-choice.ts","../../../../../web/features/outside-parties/ui/tool-row.tsx","../../../../../web/features/add-server/ui/sign-in-step.tsx"],"sourcesContent":["'use client';\n\nimport { useActionState, useState } from 'react';\n\nimport { approveServer, checkServer } from '../actions';\nimport { AddressStep } from './address-step';\nimport { OwnerStep } from './owner-step';\nimport { SignInStep } from './sign-in-step';\n\n/**\n * Adding an outside MCP server in three steps: its address and credential,\n * the gateway's check of the tools it answers with, then its owner. A server\n * where each person signs in is added unchecked, then the approver signs in\n * to it for themselves (M1, decision 0067). Each button says at once that its\n * step is on its way.\n */\nexport function AddServer({ fleetId, canSwitchTools }: { fleetId: string; canSwitchTools: boolean }) {\n const [checked, check] = useActionState(checkServer, { step: 'address', fields: {} });\n const [approved, approve] = useActionState(approveServer, { kind: 'idle' });\n // Going back shows the address step again, with what was sent, until the next check answers.\n const [backFrom, setBackFrom] = useState<string | undefined>(undefined);\n const owner = checked.step === 'owner' && backFrom !== checked.requestId ? checked : undefined;\n return (\n <div className=\"grid gap-4\">\n <h1 className=\"text-title font-semibold\">Add MCP server</h1>\n {approved.kind === 'added' ? (\n <SignInStep fleetId={fleetId} name={approved.name} />\n ) : owner === undefined ? (\n <AddressStep state={checked} action={check} fleetId={fleetId} />\n ) : (\n <OwnerStep state={owner} refused={approved} action={approve} onBack={() => { setBackFrom(owner.requestId); }} fleetId={fleetId} canSwitchTools={canSwitchTools} />\n )}\n </div>\n );\n}\n","/* __next_internal_action_entry_do_not_use__ [{\"6016f937a1369b6859c9c0fd2f9becfa3697def235\":{\"name\":\"approveServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_1=/*#__PURE__*/createServerReference(\"6016f937a1369b6859c9c0fd2f9becfa3697def235\",callServer,void 0,findSourceMapURL,\"approveServer\");export{$$RSC_SERVER_ACTION_1 as approveServer};","/* __next_internal_action_entry_do_not_use__ [{\"605ccee1941cfb893bf04e87e68a064ea6aafbe3eb\":{\"name\":\"checkServer\"}},\"web/features/add-server/actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_0=/*#__PURE__*/createServerReference(\"605ccee1941cfb893bf04e87e68a064ea6aafbe3eb\",callServer,void 0,findSourceMapURL,\"checkServer\");export{$$RSC_SERVER_ACTION_0 as checkServer};","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { addedCredentialKindOf, SIGN_IN_CREDENTIAL } from '../../forms/server-credential';\nimport { CredentialFields } from '../../forms/ui/credential-fields';\nimport { CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { stepsOf } from '../steps';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\n\n/**\n * The first step: the server's address and its credential, with the check's\n * refusal where it was refused. A server where each person signs in goes on\n * to its owner with Next, unchecked; any other is checked first.\n */\nexport function AddressStep({ state, action, fleetId }: { state: { fields: Readonly<Record<string, string>>; refusal?: string | undefined }; action: (form: FormData) => void; fleetId: string }) {\n const [kind, setKind] = useState(addedCredentialKindOf(state.fields.credentialKind ?? ''));\n const isSignIn = kind === SIGN_IN_CREDENTIAL.kind;\n return (\n <>\n <Steps names={stepsOf(kind)} at={0} />\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-address\">\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <Refused refusal={state.refusal} />\n <label className={LABEL}>\n <span>Streamable HTTP address</span>\n <input className={INPUT} type=\"url\" name=\"url\" defaultValue={state.fields.url ?? ''} placeholder=\"https://mcp.example.com/mcp\" required />\n </label>\n <CredentialFields legend=\"The server's credential\" fields={state.fields} noneHelp=\"The gateway sends no credential: for a server reached only on a private network.\" canEachPersonSignIn onKindChange={setKind} />\n <div>\n <SubmitButton pending={isSignIn ? 'Next…' : 'Checking the server…'} testId=\"add-server-check\">\n {isSignIn ? 'Next' : 'Check the server'}\n </SubmitButton>\n </div>\n </form>\n </>\n );\n}\n","/**\n * The steps of adding a server, as M1 numbers them. A server where each\n * person signs in has no tools to check before someone signs in, so the\n * gateway checks its sign-in when it is added, and the approver's own sign-in\n * comes last (decision 0067, Q15).\n */\nimport { SIGN_IN_CREDENTIAL, type AddedCredentialKind } from '../forms/server-credential';\n\nexport const CHECKED_STEPS = ['Address', 'Check', 'Owner'] as const;\n\nexport const SIGN_IN_STEPS = ['Address', 'Owner', 'Sign in'] as const;\n\n/** The steps for a server with this credential. */\nexport function stepsOf(kind: AddedCredentialKind): typeof CHECKED_STEPS | typeof SIGN_IN_STEPS {\n return kind === SIGN_IN_CREDENTIAL.kind ? SIGN_IN_STEPS : CHECKED_STEPS;\n}\n","import { Outcome } from '../../forms/ui/outcome';\n\n/** Why the API refused a step, said on that step; nothing while it was not refused. */\nexport function Refused({ refusal }: { refusal: string | undefined }) {\n return refusal === undefined ? null : <Outcome state={{ kind: 'refused', message: refusal }} />;\n}\n","/** The steps of adding a server, as the design numbers them, the one at marked current. */\nexport function Steps({ names, at }: { names: readonly string[]; at: number }) {\n return (\n <ol className=\"flex gap-4\">\n {names.map((step, index) => (\n <li key={step} aria-current={index === at ? 'step' : undefined} className={index <= at ? 'font-medium' : 'text-muted-foreground'}>\n {index + 1} {step}\n </li>\n ))}\n </ol>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { FLEET_FIELD } from '../../forms/form-state';\nimport { BUTTONS, CARD, INPUT, LABEL } from '../../forms/ui/look';\nimport { OwnerField } from '../../forms/ui/owner-field';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport type { AddServerState, ApproveState } from '../actions';\nimport { CHECKED_STEPS, SIGN_IN_STEPS } from '../steps';\nimport { addButtonLabel, suggestedName } from '../suggested-name';\nimport { Refused } from './refused';\nimport { Steps } from './steps';\nimport { ToolsSection } from './tools-section';\n\nconst CONCURRENCY_LIMIT_DEFAULT = '4';\n\n/** The credential fields, carried on from the address step to the owner step. */\nconst CARRIED_FIELDS = ['url', 'credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'] as const;\n\n/**\n * The step that names the server's proxy ship and its owner, below the tools\n * the check answered. A server where each person signs in has no tools to\n * show yet: Add checks its sign-in, and says a refusal in place.\n */\nexport function OwnerStep({ state, refused, action, onBack, fleetId, canSwitchTools }: { state: Extract<AddServerState, { step: 'owner' }>; refused: ApproveState; action: (form: FormData) => void; onBack: () => void; fleetId: string; canSwitchTools: boolean }) {\n // A refused approval of this check shows what the browser sent, and why.\n const isRefused = refused.kind === 'refused' && refused.requestId === state.requestId;\n const fields = isRefused ? refused.fields : state.fields;\n const url = fields.url ?? '';\n const [name, setName] = useState(fields.name ?? suggestedName(url));\n const tools = state.tools;\n return (\n <>\n {tools === null ? <Steps names={SIGN_IN_STEPS} at={1} /> : <Steps names={CHECKED_STEPS} at={2} />}\n <form action={action} className={`${CARD} grid gap-3`} data-testid=\"add-server-owner\">\n {tools === null ? null : <ToolsSection tools={tools} canSwitch={canSwitchTools} />}\n <h2 className=\"text-section font-semibold\">Its owner</h2>\n <Refused refusal={isRefused ? refused.message : undefined} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"requestId\" value={state.requestId} />\n {CARRIED_FIELDS.map((field) => (\n <input key={field} type=\"hidden\" name={field} value={fields[field] ?? ''} />\n ))}\n <p className=\"font-mono text-muted-foreground\">{url}</p>\n <label className={LABEL}>\n <span>Proxy ship&apos;s name</span>\n <input className={INPUT} type=\"text\" name=\"name\" value={name} onChange={(event) => { setName(event.target.value); }} required />\n </label>\n <OwnerField choices={state.owners} current={state.owners.find((owner) => owner.shipId === fields.ownerShipId) ?? null} help=\"A person ship or argo. It answers for this server.\" />\n <label className={LABEL}>\n <span>Calls at once</span>\n <input className={INPUT} type=\"number\" name=\"concurrencyLimit\" min={1} max={10} defaultValue={fields.concurrencyLimit ?? CONCURRENCY_LIMIT_DEFAULT} />\n </label>\n {tools === null ? <p className=\"text-muted-foreground\">Its tools show once someone signs in.</p> : null}\n <div className=\"flex gap-2\">\n <SubmitButton pending={tools === null ? 'Checking the sign-in…' : 'Adding…'} testId=\"add-server-approve\">\n {addButtonLabel(name)}\n </SubmitButton>\n <button type=\"button\" className={BUTTONS.secondary} onClick={onBack}>\n Back to the address\n </button>\n </div>\n </form>\n </>\n );\n}\n","/** The most characters of the proxy ship's name the add button shows. */\nconst BUTTON_NAME_MAX_LENGTH = 20;\n\n/** A proxy ship's name offered from a server's address: its host's first name that says whose it is; none for an IP address, whose numbers say nothing of it. */\nexport function suggestedName(url: string): string {\n if (!URL.canParse(url)) {\n return '';\n }\n const { hostname } = new URL(url);\n // URL writes every IPv4 host as four numbers, and keeps an IPv6 host in its brackets; the browser runs this too, so no node:net.\n if (/^\\d+(\\.\\d+){3}$/.test(hostname) || hostname.startsWith('[')) {\n return '';\n }\n const labels = hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');\n return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');\n}\n\n/** The add button's words: the proxy ship's name as typed, cut at 20 characters, or the plain words while none is typed. */\nexport function addButtonLabel(name: string): string {\n const typed = name.trim();\n if (typed === '') {\n return 'Add as outside party';\n }\n return typed.length > BUTTON_NAME_MAX_LENGTH ? `Add ${typed.slice(0, BUTTON_NAME_MAX_LENGTH)}…` : `Add ${typed}`;\n}\n","'use client';\n\nimport { useState } from 'react';\n\nimport { Switch } from '../../forms/ui/switch';\nimport { ToolRow } from '../../outside-parties/ui/tool-row';\nimport type { CheckedTool } from '../actions';\nimport { TOOL_ON_FIELD, TOOL_SHOWN_FIELD } from '../tool-choice';\n\n/**\n * The tools the check answered, one row each. An approver switches each on\n * or off, all on to start; the fleet may call only those on (aeolus-fleet#1151).\n * Without gateway:approve they show without switches, and every tool starts on.\n */\nexport function ToolsSection({ tools, canSwitch }: { tools: CheckedTool[]; canSwitch: boolean }) {\n const [off, setOff] = useState<ReadonlySet<string>>(new Set());\n const onCount = tools.length - off.size;\n const flip = (name: string) => {\n setOff((current) => {\n const next = new Set(current);\n if (!next.delete(name)) {\n next.add(name);\n }\n return next;\n });\n };\n return (\n <section className=\"grid gap-2\" data-testid=\"add-server-tools\">\n <h2 className=\"flex flex-wrap justify-between gap-2 text-section font-semibold\">\n <span>\n The server answers: {tools.length} {tools.length === 1 ? 'tool' : 'tools'}\n </span>\n {canSwitch ? (\n <span role=\"status\" className=\"font-normal text-muted-foreground\" data-testid=\"add-server-tools-on\">\n {onCount} of {tools.length} on\n </span>\n ) : null}\n </h2>\n <p className=\"text-muted-foreground\">{canSwitch ? 'The fleet may call only the tools switched on. A tool the server adds later starts off.' : 'Switching tools needs gateway:approve: every tool starts on, and an approver switches them on its page.'}</p>\n <ul className=\"grid\">\n {tools.map((tool) => {\n const isOn = !off.has(tool.name);\n return (\n <ToolRow\n key={tool.name}\n tool={tool}\n testId=\"add-server-tool\"\n control={\n canSwitch ? (\n <>\n <input type=\"hidden\" name={TOOL_SHOWN_FIELD} value={tool.name} />\n {isOn ? <input type=\"hidden\" name={TOOL_ON_FIELD} value={tool.name} /> : null}\n <Switch isOn={isOn} label={tool.name} onClick={() => { flip(tool.name); }} />\n </>\n ) : null\n }\n />\n );\n })}\n </ul>\n </section>\n );\n}\n","/**\n * The tools an approver switched when adding a server (aeolus-fleet#1151):\n * each tool the check answered is sent as shown, and the ticked ones as on.\n */\n\n/** The field naming each tool whose switch the form showed. */\nexport const TOOL_SHOWN_FIELD = 'toolShown';\n\n/** The field naming each tool ticked on. */\nexport const TOOL_ON_FIELD = 'toolOn';\n\nfunction namesIn(form: FormData, field: string): string[] {\n return form.getAll(field).filter((value) => typeof value === 'string');\n}\n\n/** Each tool shown, on or off; none when the form showed no switch, so the server keeps every tool on. */\nexport function toolChoiceOf(form: FormData): { name: string; isOn: boolean }[] | undefined {\n const shown = namesIn(form, TOOL_SHOWN_FIELD);\n if (shown.length === 0) {\n return undefined;\n }\n const on = new Set(namesIn(form, TOOL_ON_FIELD));\n return shown.map((name) => ({ name, isOn: on.has(name) }));\n}\n\n/** A description's first line with words, as a tool's row shows it before it is opened. */\nexport function firstLineOf(description: string): string {\n return description.split('\\n').map((line) => line.trim()).find((line) => line !== '') ?? '';\n}\n","import type { ReactNode } from 'react';\n\nimport { firstLineOf } from '../../add-server/tool-choice';\nimport { StatusBadge, Tag } from './status-badge';\n\n/** A tool of an outside MCP server, as its row shows it. */\nexport interface ShownTool {\n name: string;\n description?: string | undefined;\n isReadOnly: boolean;\n isNew?: boolean;\n}\n\n/**\n * One tool in a list an approver scans (aeolus-fleet#1151): its switch, its\n * name, whether the server says it reads only, whether it is new, and its\n * description's first line, the whole description folded open on a click.\n */\nexport function ToolRow({ tool, control, testId }: { tool: ShownTool; control: ReactNode; testId?: string }) {\n const { name, description, isReadOnly, isNew = false } = tool;\n const firstLine = description === undefined ? '' : firstLineOf(description);\n const isFolded = description !== undefined && description.trim() !== firstLine;\n return (\n <li className=\"grid gap-1 border-b border-border py-2 last:border-b-0\" data-testid={testId}>\n <div className=\"flex flex-wrap items-center gap-2\">\n {control}\n <span className=\"font-mono\">{name}</span>\n {isReadOnly ? <Tag>reads only</Tag> : null}\n {isNew ? <StatusBadge tone=\"attention\" label=\"New\" /> : null}\n </div>\n {firstLine === '' ? null : isFolded ? (\n <details className=\"text-muted-foreground\">\n <summary className=\"cursor-pointer\">{firstLine}</summary>\n <p className=\"mt-1 whitespace-pre-line\">{description}</p>\n </details>\n ) : (\n <p className=\"text-muted-foreground\">{firstLine}</p>\n )}\n </li>\n );\n}\n","'use client';\n\nimport { useActionState } from 'react';\n\nimport { FLEET_FIELD, IDLE } from '../../forms/form-state';\nimport { BUTTONS, CARD } from '../../forms/ui/look';\nimport { Outcome } from '../../forms/ui/outcome';\nimport { SubmitButton } from '../../forms/ui/submit-button';\nimport { inFleet } from '../../../lib/gateway-api/page-account';\nimport { partyPath } from '../../outside-parties/paths';\nimport { signInToParty } from '../../outside-party/actions';\nimport { SIGN_IN_STEPS } from '../steps';\nimport { Steps } from './steps';\n\n/**\n * The last step of adding a server where each person signs in: the\n * approver signs in to it for themselves, and their sign-in reads its tools\n * (Q15). Later goes to its page, where they sign in when they choose.\n */\nexport function SignInStep({ fleetId, name }: { fleetId: string; name: string }) {\n const [refused, signIn] = useActionState(signInToParty, IDLE);\n return (\n <>\n <Steps names={SIGN_IN_STEPS} at={2} />\n <form action={signIn} className={`${CARD} grid gap-3`} data-testid=\"add-server-sign-in\">\n <Outcome state={{ kind: 'done', message: `${name} is added.` }} />\n <Outcome state={refused} />\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n <input type=\"hidden\" name=\"name\" value={name} />\n <p>Sign in to {name} for yourself. Its tools show after the first sign-in.</p>\n <div className=\"flex gap-2\">\n <SubmitButton pending={`Opening ${name}…`} testId=\"add-server-sign-in-start\">\n Sign in to {name}\n </SubmitButton>\n <a href={inFleet(partyPath(name), fleetId)} className={BUTTONS.secondary}>\n Later\n </a>\n </div>\n </form>\n </>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_1"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- (()=>{"use strict";module.exports=[30587,a=>{a.s(["H",0,"fleet","Q",0,{kind:"idle"}])},31614,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(36855),f=a.i(77237);a.s(["ActionForm",0,function({action:a,fleetId:g,children:h,submit:i,className:j="grid gap-3",testId:k}){let[l,m]=(0,c.useActionState)(a,d.Q);return(0,b.jsxs)("form",{action:m,className:j,"data-testid":k,children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:g}),h,(0,b.jsx)("div",{children:(0,b.jsx)(f.f,{pending:i.pending,...void 0===i.kind?{}:{kind:i.kind},children:i.label})}),(0,b.jsx)(e.f,{state:l})]})}])},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},36855,77237,a=>{var b=a.i(87924);a.s(["f",0,function({state:a,testId:c}){switch(a.kind){case"idle":return null;case"done":return(0,b.jsx)("p",{role:"status","data-testid":c,className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg",children:a.message});case"refused":case"openNetwork":return(0,b.jsx)("p",{role:"alert","data-testid":c,className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a.message})}}],36855);var c=a.i(35112),d=a.i(88412);a.s(["f",0,function({children:a,pending:e,kind:f="primary",testId:g}){let h=(0,c.useFormStatus)();return(0,b.jsx)("button",{type:"submit",className:d.x[f],disabled:h.pending,"aria-busy":h.pending,"data-testid":g,children:h.pending?e:a})}],77237)}]})();
1
+ (()=>{"use strict";module.exports=[30587,a=>{a.s(["H",0,"fleet","Q",0,{kind:"idle"}])},31614,a=>{var b=a.i(87924),c=a.i(72131),d=a.i(30587),e=a.i(36855),f=a.i(77237);a.s(["ActionForm",0,function({action:a,fleetId:g,children:h,submit:i,className:j="grid gap-3",testId:k}){let[l,m]=(0,c.useActionState)(a,d.Q);return(0,b.jsxs)("form",{action:m,className:j,"data-testid":k,children:[(0,b.jsx)("input",{type:"hidden",name:d.H,value:g}),h,(0,b.jsx)("div",{children:(0,b.jsx)(f.f,{pending:i.pending,...void 0===i.kind?{}:{kind:i.kind},children:i.label})}),(0,b.jsx)(e.f,{state:l})]})}])},88412,a=>{let b="inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60",c={primary:`${b} bg-primary text-primary-foreground hover:bg-primary-hover`,secondary:`${b} border border-border bg-card hover:bg-accent`,destructive:`${b} bg-destructive text-destructive-foreground`};a.s(["x",0,c,"r",0,"rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm","w",0,"h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code","z",0,"grid gap-1"])},36855,a=>{var b=a.i(87924);a.s(["f",0,function({state:a,testId:c}){switch(a.kind){case"idle":return null;case"done":return(0,b.jsx)("p",{role:"status","data-testid":c,className:"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg",children:a.message});case"refused":case"openNetwork":return(0,b.jsx)("p",{role:"alert","data-testid":c,className:"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg",children:a.message})}}])},77237,a=>{var b=a.i(87924),c=a.i(35112),d=a.i(88412);a.s(["f",0,function({children:a,pending:e,kind:f="primary",testId:g}){let h=(0,c.useFormStatus)();return(0,b.jsx)("button",{type:"submit",className:d.x[f],disabled:h.pending,"aria-busy":h.pending,"data-testid":g,children:h.pending?e:a})}])}]})();
2
2
 
3
- //# sourceMappingURL=web_features_forms_1d1jyea2jni9o._.js.map
3
+ //# sourceMappingURL=web_features_forms_1muc8tmsxjj_k._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/action-form.tsx","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/submit-button.tsx"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","'use client';\n\nimport { useActionState, type ReactNode } from 'react';\n\nimport { FLEET_FIELD, IDLE, type FormState } from '../form-state';\nimport type { ButtonKind } from './look';\nimport { Outcome } from './outcome';\nimport { SubmitButton } from './submit-button';\n\n/** A page's form: its fields, the fleet it is for, its button, and how it ended. */\nexport function ActionForm({\n action,\n fleetId,\n children,\n submit,\n className = 'grid gap-3',\n testId,\n}: {\n action: (previous: FormState, form: FormData) => Promise<FormState>;\n fleetId: string;\n children?: ReactNode;\n submit: { label: ReactNode; pending: string; kind?: ButtonKind };\n className?: string;\n testId?: string;\n}) {\n const [state, formAction] = useActionState(action, IDLE);\n return (\n <form action={formAction} className={className} data-testid={testId}>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n {children}\n <div>\n <SubmitButton pending={submit.pending} {...(submit.kind === undefined ? {} : { kind: submit.kind })}>\n {submit.label}\n </SubmitButton>\n </div>\n <Outcome state={state} />\n </form>\n );\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","ActionForm","action","fleetId","children","submit","className","testId","state","formAction","type","pending","undefined","label","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","Outcome","role","message"],"mappings":"wDAyB2B,cAdI,CAAEC,KAAM,MAAO,gCCT9C,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,2BAGO,SAAoB,AAAXY,QACdC,CAAM,SACNC,CAAO,UACPC,CAAQ,QACRC,CAAM,CACNC,YAAY,YAAY,QACxBC,CAAM,CAQP,EACC,GAAM,CAACC,EAAOC,EAAW,CAAG,CAAA,EAAA,EAAA,cAAc,AAAd,EAAeP,EAAQ,EAAA,CAAI,EACvD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKA,OAAQO,EAAYH,UAAWA,EAAW,cAAaC,YAC3D,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMG,KAAK,SAASlB,KAAM,EAAA,CAAW,CAAEC,MAAOU,IAC9CC,EACD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAACO,QAASN,EAAOM,OAAO,CAAG,QAAoBC,IAAhBP,EAAOhB,IAAI,CAAiB,CAAC,EAAI,CAAEA,KAAMgB,EAAOhB,IAAI,AAAC,CAAC,UAC/FgB,EAAOQ,KAAK,KAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,CAAA,CAACL,MAAOA,MAGtB,eCnCA,IAAMO,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,4DCZd,SAASO,AAAQ,OAAEd,CAAK,QAAED,CAAM,CAAyC,EAC9E,OAAQC,EAAMnB,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEkC,KAAK,SAAS,cAAahB,EAAQD,UAAU,2FAC7CE,EAAMgB,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAED,KAAK,QAAQ,cAAahB,EAAQD,UAAU,gHAC5CE,EAAMgB,OAAO,EAGtB,CACF,UClBA,IAAA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAAS,AAAa,UAAE,CAAQ,SAAE,CAAO,CAAE,OAAO,SAAS,QAAE,CAAM,CAAgF,EACxJ,IAAM,EAAS,CAAA,EAAA,EAAA,aAAA,AAAa,IAC5B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAO,KAAK,SAAS,UAAW,EAAA,CAAO,CAAC,EAAK,CAAE,SAAU,EAAO,OAAO,CAAE,YAAW,EAAO,OAAO,CAAE,cAAa,WAC/G,EAAO,OAAO,CAAGjB,EAAU,GAGlC"}
1
+ {"version":3,"sources":["../../../../../web/features/forms/form-state.ts","../../../../../web/features/forms/ui/action-form.tsx","../../../../../web/features/forms/ui/look.ts","../../../../../web/features/forms/ui/outcome.tsx","../../../../../web/features/forms/ui/submit-button.tsx"],"sourcesContent":["/**\n * What a page's form (a server action) answers the browser: nothing yet,\n * done with what changed, or refused with why, as the API said it. The\n * open network's warning asks for a confirm (interop I-3).\n */\nexport type FormState =\n | { kind: 'idle' }\n | { kind: 'done'; message: string }\n | { kind: 'refused'; message: string }\n | { kind: 'openNetwork'; message: string };\n\nexport const IDLE: FormState = { kind: 'idle' };\n\n/** A form's text field, empty when it was not sent. */\nexport function fieldOf(form: FormData, name: string): string {\n const value = form.get(name);\n return typeof value === 'string' ? value : '';\n}\n\n/** The form's fields as text, files left out. */\nexport function fieldsOf(form: FormData): Record<string, string> {\n return Object.fromEntries([...form.entries()].flatMap(([name, value]) => (typeof value === 'string' ? [[name, value]] : [])));\n}\n\n/** The fleet a page's form names: the page's own, sent in a hidden field. */\nexport const FLEET_FIELD = 'fleet';\n","'use client';\n\nimport { useActionState, type ReactNode } from 'react';\n\nimport { FLEET_FIELD, IDLE, type FormState } from '../form-state';\nimport type { ButtonKind } from './look';\nimport { Outcome } from './outcome';\nimport { SubmitButton } from './submit-button';\n\n/** A page's form: its fields, the fleet it is for, its button, and how it ended. */\nexport function ActionForm({\n action,\n fleetId,\n children,\n submit,\n className = 'grid gap-3',\n testId,\n}: {\n action: (previous: FormState, form: FormData) => Promise<FormState>;\n fleetId: string;\n children?: ReactNode;\n submit: { label: ReactNode; pending: string; kind?: ButtonKind };\n className?: string;\n testId?: string;\n}) {\n const [state, formAction] = useActionState(action, IDLE);\n return (\n <form action={formAction} className={className} data-testid={testId}>\n <input type=\"hidden\" name={FLEET_FIELD} value={fleetId} />\n {children}\n <div>\n <SubmitButton pending={submit.pending} {...(submit.kind === undefined ? {} : { kind: submit.kind })}>\n {submit.label}\n </SubmitButton>\n </div>\n <Outcome state={state} />\n </form>\n );\n}\n","/** The classes the pages share, on the design tokens: a card and the button kinds. */\nexport const CARD = 'rounded-lg border border-border bg-card p-6 text-card-foreground shadow-sm';\n\nconst BUTTON = 'inline-flex h-9 items-center justify-center gap-2 rounded-md px-4 font-medium disabled:opacity-60';\n\nexport const BUTTONS = {\n primary: `${BUTTON} bg-primary text-primary-foreground hover:bg-primary-hover`,\n secondary: `${BUTTON} border border-border bg-card hover:bg-accent`,\n destructive: `${BUTTON} bg-destructive text-destructive-foreground`,\n} as const;\n\nexport type ButtonKind = keyof typeof BUTTONS;\n\nexport const INPUT = 'h-9 w-full rounded-md border border-input bg-background px-3 font-mono text-code';\n\nexport const LABEL = 'grid gap-1';\n","import type { FormState } from '../form-state';\n\n/** How a form ended: what changed, or why it was refused. Nothing while it has not been sent. */\nexport function Outcome({ state, testId }: { state: FormState; testId?: string }) {\n switch (state.kind) {\n case 'idle':\n return null;\n case 'done':\n return (\n <p role=\"status\" data-testid={testId} className=\"rounded-md border border-tone-ok-border bg-tone-ok-bg px-3 py-2 text-tone-ok-fg\">\n {state.message}\n </p>\n );\n case 'refused':\n case 'openNetwork':\n return (\n <p role=\"alert\" data-testid={testId} className=\"rounded-md border border-tone-attention-border bg-tone-attention-bg px-3 py-2 text-tone-attention-fg\">\n {state.message}\n </p>\n );\n }\n}\n","'use client';\n\nimport type { ReactNode } from 'react';\nimport { useFormStatus } from 'react-dom';\n\nimport { BUTTONS, type ButtonKind } from './look';\n\n/** A form's button: it says the form is on its way at once, and takes no second press meanwhile. */\nexport function SubmitButton({ children, pending, kind = 'primary', testId }: { children: ReactNode; pending: string; kind?: ButtonKind; testId?: string }) {\n const status = useFormStatus();\n return (\n <button type=\"submit\" className={BUTTONS[kind]} disabled={status.pending} aria-busy={status.pending} data-testid={testId}>\n {status.pending ? pending : children}\n </button>\n );\n}\n"],"names":["IDLE","kind","fieldOf","form","name","value","get","fieldsOf","Object","fromEntries","entries","flatMap","FLEET_FIELD","ActionForm","action","fleetId","children","submit","className","testId","state","formAction","type","pending","undefined","label","CARD","BUTTON","BUTTONS","primary","secondary","destructive","INPUT","LABEL","Outcome","role","message","SubmitButton","status","disabled"],"mappings":"wDAyB2B,cAdI,CAAEC,KAAM,MAAO,gCCT9C,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,2BAGO,SAAoB,AAAXY,QACdC,CAAM,SACNC,CAAO,UACPC,CAAQ,QACRC,CAAM,CACNC,YAAY,YAAY,QACxBC,CAAM,CAQP,EACC,GAAM,CAACC,EAAOC,EAAW,CAAG,CAAA,EAAA,EAAA,cAAc,AAAd,EAAeP,EAAQ,EAAA,CAAI,EACvD,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,OAAA,CAAKA,OAAQO,EAAYH,UAAWA,EAAW,cAAaC,YAC3D,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMG,KAAK,SAASlB,KAAM,EAAA,CAAW,CAAEC,MAAOU,IAC9CC,EACD,CAAA,EAAA,EAAA,GAAA,EAAC,MAAA,UACC,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAY,CAAA,CAACO,QAASN,EAAOM,OAAO,CAAG,QAAoBC,IAAhBP,EAAOhB,IAAI,CAAiB,CAAC,EAAI,CAAEA,KAAMgB,EAAOhB,IAAI,AAAC,CAAC,UAC/FgB,EAAOQ,KAAK,KAGjB,CAAA,EAAA,EAAA,GAAA,EAAC,EAAA,CAAO,CAAA,CAACL,MAAOA,MAGtB,eCnCA,IAAMO,EAAS,oGAEFC,EAAU,CACrBC,QAAS,CAAA,EAAGF,EAAO,0DAA0D,CAAC,CAC9EG,UAAW,CAAA,EAAGH,EAAO,6CAA6C,CAAC,CACnEI,YAAa,CAAA,EAAGJ,EAAO,2CAA2C,CAAC,AACrE,qBARoB,mFAYC,yFAEA,sDCZd,SAASO,AAAQ,CAAEd,OAAK,QAAED,CAAM,CAAyC,EAC9E,OAAQC,EAAMnB,IAAI,EAChB,IAAK,OACH,OAAO,IACT,KAAK,OACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAEkC,KAAK,SAAS,cAAahB,EAAQD,UAAU,2FAC7CE,EAAMgB,OAAO,EAGpB,KAAK,UACL,IAAK,cACH,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAED,KAAK,QAAQ,cAAahB,EAAQD,UAAU,gHAC5CE,EAAMgB,OAAO,EAGtB,CACF,gCClBA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,kBAGO,SAASC,AAAa,UAAErB,CAAQ,SAAEO,CAAO,MAAEtB,EAAO,SAAS,QAAEkB,CAAM,CAAgF,EACxJ,IAAMmB,EAAS,CAAA,EAAA,EAAA,aAAA,AAAa,IAC5B,MACE,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOhB,KAAK,SAASJ,UAAW,EAAA,CAAO,CAACjB,EAAK,CAAEsC,SAAUD,EAAOf,OAAO,CAAE,YAAWe,EAAOf,OAAO,CAAE,cAAaJ,WAC/GmB,EAAOf,OAAO,CAAGA,EAAUP,GAGlC"}
@@ -1,3 +1,3 @@
1
- module.exports=[60224,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(51636),e=a.i(88412);a.s(["f",0,function({legend:a,fields:f,noneHelp:g}){let[h,i]=(0,c.useState)((0,d.C)(f.credentialKind??""));return(0,b.jsxs)("fieldset",{className:"grid gap-3",children:[(0,b.jsx)("legend",{className:"font-medium",children:a}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsx)("select",{className:e.w,name:"credentialKind",value:h,onChange:a=>{i((0,d.C)(a.target.value))},children:d.x.map(({kind:a,label:c})=>(0,b.jsx)("option",{value:a,children:c},a))})]}),"clientCredentials"===h?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"clientId",defaultValue:f.clientId??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"clientSecret"})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:e.w,type:"url",name:"issuer",defaultValue:f.issuer??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"scope",defaultValue:f.scope??""})]})]}):"bearer"===h?(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"token"})]}):(0,b.jsx)("p",{className:"text-muted-foreground",children:g})]})}])}];
1
+ module.exports=[60224,a=>{"use strict";var b=a.i(87924),c=a.i(72131),d=a.i(51636),e=a.i(88412);a.s(["f",0,function({legend:a,fields:f,noneHelp:g,canEachPersonSignIn:h=!1,onKindChange:i}){let j=h?d.G:d.C,[k,l]=(0,c.useState)(j(f.credentialKind??""));return(0,b.jsxs)("fieldset",{className:"grid gap-3",children:[(0,b.jsx)("legend",{className:"font-medium",children:a}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Credential"}),(0,b.jsx)("select",{className:e.w,name:"credentialKind",value:k,onChange:a=>{let b=j(a.target.value);l(b),i?.(b)},children:(h?d.a:d.x).map(({kind:a,label:c})=>(0,b.jsx)("option",{value:a,children:c},a))})]}),"clientCredentials"===k?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client id"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"clientId",defaultValue:f.clientId??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Client secret"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"clientSecret"})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Issuer"}),(0,b.jsx)("input",{className:e.w,type:"url",name:"issuer",defaultValue:f.issuer??""})]}),(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Scope"}),(0,b.jsx)("input",{className:e.w,type:"text",name:"scope",defaultValue:f.scope??""})]})]}):"bearer"===k?(0,b.jsxs)("label",{className:e.z,children:[(0,b.jsx)("span",{children:"Bearer token"}),(0,b.jsx)("input",{className:e.w,type:"password",name:"token"})]}):k===d.m.kind?(0,b.jsx)("p",{className:"text-muted-foreground",children:"Each person signs in for themselves. A ship calls under its owner's sign-in."}):(0,b.jsx)("p",{className:"text-muted-foreground",children:g})]})}])}];
2
2
 
3
3
  //# sourceMappingURL=web_features_forms_ui_credential-fields_tsx_0l-w19zg-7x4b._.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../web/features/forms/ui/credential-fields.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { CREDENTIAL_KINDS, credentialKindOf } from '../server-credential';\nimport { INPUT, LABEL } from './look';\n\n/**\n * The credential the vault keeps for an outside party the gateway calls: its\n * kind, then only the fields of that kind. A secret is never shown back, so\n * it is typed again after a refusal.\n */\nexport function CredentialFields({ legend, fields, noneHelp }: { legend: string; fields: Readonly<Record<string, string>>; noneHelp: string }) {\n const [credentialKind, setCredentialKind] = useState(credentialKindOf(fields.credentialKind ?? ''));\n return (\n <fieldset className=\"grid gap-3\">\n <legend className=\"font-medium\">{legend}</legend>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" value={credentialKind} onChange={(event) => { setCredentialKind(credentialKindOf(event.target.value)); }}>\n {CREDENTIAL_KINDS.map(({ kind, label }) => (\n <option key={kind} value={kind}>\n {label}\n </option>\n ))}\n </select>\n </label>\n {credentialKind === 'clientCredentials' ? (\n <>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} type=\"text\" name=\"clientId\" defaultValue={fields.clientId ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} type=\"password\" name=\"clientSecret\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} type=\"url\" name=\"issuer\" defaultValue={fields.issuer ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} type=\"text\" name=\"scope\" defaultValue={fields.scope ?? ''} />\n </label>\n </>\n ) : credentialKind === 'bearer' ? (\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} type=\"password\" name=\"token\" />\n </label>\n ) : (\n <p className=\"text-muted-foreground\">{noneHelp}</p>\n )}\n </fieldset>\n );\n}\n"],"names":["CredentialFields","legend","fields","noneHelp","credentialKind","setCredentialKind","className","name","value","onChange","event","target","map","kind","label","type","defaultValue","clientId","issuer","scope"],"mappings":"wDAEA,EAAA,EAAA,CAAA,CAAA,OAEA,EAAA,EAAA,CAAA,CAAA,OACA,EAAA,EAAA,CAAA,CAAA,kBAOO,SAASA,AAAiB,QAAEC,CAAM,QAAEC,CAAM,UAAEC,CAAQ,CAAkF,EAC3I,GAAM,CAACC,EAAgBC,EAAkB,CAAG,CAAA,EAAA,EAAA,QAAA,AAAQ,EAAC,CAAA,EAAA,EAAA,CAAgB,AAAhB,EAAiBH,EAAOE,cAAc,EAAI,KAC/F,MACE,CAAA,EAAA,EAAA,IAAA,EAAC,WAAA,CAASE,UAAU,uBAClB,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOA,UAAU,uBAAeL,IACjC,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMK,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,eACN,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAOA,UAAW,EAAA,CAAK,CAAEC,KAAK,iBAAiBC,MAAOJ,EAAgBK,SAAU,AAACC,IAAYL,EAAkB,CAAA,EAAA,EAAA,CAAA,AAAgB,EAACK,EAAMC,MAAM,CAACH,KAAK,EAAI,WACpJ,EAAA,CAAgB,CAACI,GAAG,CAAC,CAAC,MAAEC,CAAI,OAAEC,CAAK,CAAE,GACpC,CAAA,EAAA,EAAA,GAAA,EAAC,SAAA,CAAkBN,MAAOK,WACvBC,GADUD,SAMC,sBAAnBT,EACC,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,QAAA,CAAA,WACE,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAME,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,cACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMA,UAAW,EAAA,CAAK,CAAES,KAAK,OAAOR,KAAK,WAAWS,aAAcd,EAAOe,QAAQ,EAAI,QAExF,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMX,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,kBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMA,UAAW,EAAA,CAAK,CAAES,KAAK,WAAWR,KAAK,oBAEhD,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMD,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,WACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMA,UAAW,EAAA,CAAK,CAAES,KAAK,MAAMR,KAAK,SAASS,aAAcd,EAAOgB,MAAM,EAAI,QAEnF,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAMZ,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,UACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMA,UAAW,EAAA,CAAK,CAAES,KAAK,OAAOR,KAAK,QAAQS,aAAcd,EAAOiB,KAAK,EAAI,WAG/D,WAAnBf,EACF,CAAA,EAAA,EAAA,IAAA,EAAC,QAAA,CAAME,UAAW,EAAA,CAAK,WACrB,CAAA,EAAA,EAAA,GAAA,EAAC,OAAA,UAAK,iBACN,CAAA,EAAA,EAAA,GAAA,EAAC,QAAA,CAAMA,UAAW,EAAA,CAAK,CAAES,KAAK,WAAWR,KAAK,aAGhD,CAAA,EAAA,EAAA,GAAA,EAAC,IAAA,CAAED,UAAU,iCAAyBH,MAI9C"}
1
+ {"version":3,"sources":["../../../../../web/features/forms/ui/credential-fields.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { ADDED_CREDENTIAL_KINDS, addedCredentialKindOf, CREDENTIAL_KINDS, credentialKindOf, SIGN_IN_CREDENTIAL, type AddedCredentialKind } from '../server-credential';\nimport { INPUT, LABEL } from './look';\n\n/**\n * The credential the vault keeps for an outside party the gateway calls: its\n * kind, then only the fields of that kind. A secret is never shown back, so\n * it is typed again after a refusal. Only adding a server offers each person\n * signing in, which takes no field (decision 0067).\n */\nexport function CredentialFields({ legend, fields, noneHelp, canEachPersonSignIn = false, onKindChange }: { legend: string; fields: Readonly<Record<string, string>>; noneHelp: string; canEachPersonSignIn?: boolean; onKindChange?: (kind: AddedCredentialKind) => void }) {\n const kindOf = canEachPersonSignIn ? addedCredentialKindOf : credentialKindOf;\n const [credentialKind, setCredentialKind] = useState<AddedCredentialKind>(kindOf(fields.credentialKind ?? ''));\n return (\n <fieldset className=\"grid gap-3\">\n <legend className=\"font-medium\">{legend}</legend>\n <label className={LABEL}>\n <span>Credential</span>\n <select className={INPUT} name=\"credentialKind\" value={credentialKind} onChange={(event) => { const kind = kindOf(event.target.value); setCredentialKind(kind); onKindChange?.(kind); }}>\n {(canEachPersonSignIn ? ADDED_CREDENTIAL_KINDS : CREDENTIAL_KINDS).map(({ kind, label }) => (\n <option key={kind} value={kind}>\n {label}\n </option>\n ))}\n </select>\n </label>\n {credentialKind === 'clientCredentials' ? (\n <>\n <label className={LABEL}>\n <span>Client id</span>\n <input className={INPUT} type=\"text\" name=\"clientId\" defaultValue={fields.clientId ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Client secret</span>\n <input className={INPUT} type=\"password\" name=\"clientSecret\" />\n </label>\n <label className={LABEL}>\n <span>Issuer</span>\n <input className={INPUT} type=\"url\" name=\"issuer\" defaultValue={fields.issuer ?? ''} />\n </label>\n <label className={LABEL}>\n <span>Scope</span>\n <input className={INPUT} type=\"text\" name=\"scope\" defaultValue={fields.scope ?? ''} />\n </label>\n </>\n ) : credentialKind === 'bearer' ? (\n <label className={LABEL}>\n <span>Bearer token</span>\n <input className={INPUT} type=\"password\" name=\"token\" />\n </label>\n ) : credentialKind === SIGN_IN_CREDENTIAL.kind ? (\n <p className=\"text-muted-foreground\">Each person signs in for themselves. A ship calls under its owner&apos;s sign-in.</p>\n ) : (\n <p className=\"text-muted-foreground\">{noneHelp}</p>\n )}\n </fieldset>\n );\n}\n"],"names":["CredentialFields","legend","fields","noneHelp","canEachPersonSignIn","onKindChange","kindOf","credentialKind","setCredentialKind","className","name","value","onChange","event","kind","target","map","label","type","defaultValue","clientId","issuer","scope"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- module.exports=[45648,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};d.node;let e=(0,c.f)(d);var f=a.i(78400),g=a.i(21244),h=a.i(95725),i=a.i(6158),j=a.i(18486);function k({switcher:a,account:c,onSearch:d,searchLabel:l="Search or jump to",children:m,actions:n,className:o}){return(0,b.jsxs)("header",{"data-slot":"app-header",className:(0,j.f)("sticky top-0 z-30 flex h-(--size-header) shrink-0 items-center justify-between gap-4 border-b border-border bg-background px-6",o),children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[void 0===a?(0,b.jsx)("span",{"data-testid":"app-switcher-loading","aria-hidden":!0,className:"h-4 w-36 shrink-0 animate-pulse rounded bg-muted motion-reduce:animate-none"}):(0,b.jsx)(f.AppSwitcher,{switcher:a,layout:"full",className:"shrink-0"}),m]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-3",children:[n,d?(0,b.jsxs)(g.f,{size:"sm",icon:(0,b.jsx)(e,{"aria-hidden":!0}),"data-testid":"header-search",className:"w-60 justify-start font-normal text-muted-foreground max-lg:w-auto",onClick:d,children:[(0,b.jsx)("span",{className:"grow text-left max-lg:sr-only",children:l}),(0,b.jsx)(h.f,{children:"⌘K"})]}):null,(0,b.jsx)(i.AvatarMenu,{...c})]})]})}var l=a.i(50944),m=a.i(72131),n=a.i(5050);let o=(0,n.createServerReference)("400e6ee91aede8cbbee59174183b1c251fd5c04c2f",n.callServer,void 0,n.findSourceMapURL,"setTheme"),p=["light","dark","system"];var q=a.i(25959);let r=[{key:"overview",label:"Overview",path:"/overview"},{key:"outside-parties",label:"Outside parties",path:"/outside-parties"},{key:"parties",label:"Parties",path:"/parties"}];function s({fleetId:a}){let c=(0,l.usePathname)();return(0,b.jsx)("nav",{"aria-label":"Gateway",className:"flex shrink-0 items-center gap-1",children:r.map(({key:d,label:e,path:f})=>{let g=c===f||c.startsWith(`${f}/`);return(0,b.jsx)("a",{href:(0,q.f)(f,a),"data-testid":`frame-tab-${d}`,"aria-current":g?"page":void 0,className:`whitespace-nowrap rounded-md px-2 py-1 text-sm ${g?"bg-accent font-semibold":"text-muted-foreground hover:bg-accent"}`,children:e},d)})})}a.s(["GatewayHeader",0,function({switchers:a,email:c,accountUrl:d,theme:e}){let g=(0,l.useSearchParams)().get("fleet"),h=a.find(({fleet:a})=>a.id===g)??a[0],[j,n]=(0,m.useState)(e),[q,r]=(0,m.useState)(!1),t=(0,m.useRef)(null),u={name:c,signedInAs:"account",accountUrl:d,theme:j,themes:p,hasTheme:!0,onThemeChange:a=>{let b;n(a),document.documentElement.dataset.theme=a,b="dark"===a||"system"===a&&window.matchMedia("(prefers-color-scheme: dark)").matches,document.documentElement.classList.toggle("dark",b),o(a)},shortcuts:[],helpUrl:"https://github.com/ThomasHendrickx/aeolus-fleet",onSignOut:()=>{r(!0),t.current?.requestSubmit()},isSigningOut:q};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("form",{ref:t,method:"post",action:"/sign-in/end",hidden:!0}),(0,b.jsx)(k,{switcher:h,account:u,className:"max-sm:hidden",children:void 0===h?null:(0,b.jsx)(s,{fleetId:h.fleet.id})}),(0,b.jsxs)("header",{className:"sticky top-0 z-30 flex h-14 shrink-0 items-center gap-3 border-b border-border bg-background px-4 sm:hidden",children:[void 0===h?null:(0,b.jsx)(f.AppSwitcher,{switcher:h,layout:"compact",className:"min-w-0"}),void 0===h?null:(0,b.jsx)(s,{fleetId:h.fleet.id}),(0,b.jsx)("span",{className:"grow"}),(0,b.jsx)(i.AvatarMenuSheet,{...u})]})]})}],45648)}];
1
+ module.exports=[45648,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};d.node;let e=(0,c.f)(d);var f=a.i(78400),g=a.i(21244),h=a.i(95725),i=a.i(6158),j=a.i(18486);function k({switcher:a,account:c,onSearch:d,searchLabel:l="Search or jump to",children:m,actions:n,className:o}){return(0,b.jsxs)("header",{"data-slot":"app-header",className:(0,j.f)("sticky top-0 z-30 flex h-(--size-header) shrink-0 items-center justify-between gap-4 border-b border-border bg-background px-6",o),children:[(0,b.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[void 0===a?(0,b.jsx)("span",{"data-testid":"app-switcher-loading","aria-hidden":!0,className:"h-4 w-36 shrink-0 animate-pulse rounded bg-muted motion-reduce:animate-none"}):(0,b.jsx)(f.AppSwitcher,{switcher:a,layout:"full",className:"shrink-0"}),m]}),(0,b.jsxs)("div",{className:"flex shrink-0 items-center gap-3",children:[n,d?(0,b.jsxs)(g.f,{size:"sm",icon:(0,b.jsx)(e,{"aria-hidden":!0}),"data-testid":"header-search",className:"w-60 justify-start font-normal text-muted-foreground max-lg:w-auto",onClick:d,children:[(0,b.jsx)("span",{className:"grow text-left max-lg:sr-only",children:l}),(0,b.jsx)(h.f,{children:"⌘K"})]}):null,(0,b.jsx)(i.AvatarMenu,{...c})]})]})}var l=a.i(50944),m=a.i(72131),n=a.i(5050);let o=(0,n.createServerReference)("40b0e21d7f8b4005429ff4b05df18463f1064fb7f0",n.callServer,void 0,n.findSourceMapURL,"setTheme"),p=["light","dark","system"];var q=a.i(25959);let r=[{key:"overview",label:"Overview",path:"/overview"},{key:"outside-parties",label:"Outside parties",path:"/outside-parties"},{key:"parties",label:"Parties",path:"/parties"},{key:"slack",label:"Slack",path:"/slack"}];function s({fleetId:a}){let c=(0,l.usePathname)();return(0,b.jsx)("nav",{"aria-label":"Gateway",className:"flex min-w-0 items-center gap-1 overflow-x-auto",children:r.map(({key:d,label:e,path:f})=>{let g=c===f||c.startsWith(`${f}/`);return(0,b.jsx)("a",{href:(0,q.f)(f,a),"data-testid":`frame-tab-${d}`,"aria-current":g?"page":void 0,className:`whitespace-nowrap rounded-md px-2 py-1 text-sm ${g?"bg-accent font-semibold":"text-muted-foreground hover:bg-accent"}`,children:e},d)})})}a.s(["GatewayHeader",0,function({switchers:a,email:c,accountUrl:d,theme:e}){let g=(0,l.useSearchParams)().get("fleet"),h=a.find(({fleet:a})=>a.id===g)??a[0],[j,n]=(0,m.useState)(e),[q,r]=(0,m.useState)(!1),t=(0,m.useRef)(null),u={name:c,signedInAs:"account",accountUrl:d,theme:j,themes:p,hasTheme:!0,onThemeChange:a=>{let b;n(a),document.documentElement.dataset.theme=a,b="dark"===a||"system"===a&&window.matchMedia("(prefers-color-scheme: dark)").matches,document.documentElement.classList.toggle("dark",b),o(a)},shortcuts:[],helpUrl:"https://github.com/ThomasHendrickx/aeolus-fleet",onSignOut:()=>{r(!0),t.current?.requestSubmit()},isSigningOut:q};return(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("form",{ref:t,method:"post",action:"/sign-in/end",hidden:!0}),(0,b.jsx)(k,{switcher:h,account:u,className:"max-sm:hidden",children:void 0===h?null:(0,b.jsx)(s,{fleetId:h.fleet.id})}),(0,b.jsxs)("header",{className:"sticky top-0 z-30 flex h-14 shrink-0 items-center gap-3 border-b border-border bg-background px-4 sm:hidden",children:[void 0===h?null:(0,b.jsx)(f.AppSwitcher,{switcher:h,layout:"compact",className:"min-w-0"}),void 0===h?null:(0,b.jsx)(s,{fleetId:h.fleet.id}),(0,b.jsx)("span",{className:"grow"}),(0,b.jsx)(i.AvatarMenuSheet,{...u})]})]})}],45648)}];
2
2
 
3
3
  //# sourceMappingURL=web_features_frame_ui_gateway-header_tsx_0e9tekx4jf7ng._.js.map