@aeolus-fleet/gateway 0.0.0-stage → 0.28.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 (528) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +105 -2
  3. package/dist/adapters/crypto/call-keys.d.ts +7 -0
  4. package/dist/adapters/crypto/call-keys.js +18 -0
  5. package/dist/adapters/crypto/call-keys.js.map +1 -0
  6. package/dist/adapters/crypto/oauth-secrets.d.ts +3 -0
  7. package/dist/adapters/crypto/oauth-secrets.js +10 -0
  8. package/dist/adapters/crypto/oauth-secrets.js.map +1 -0
  9. package/dist/adapters/crypto/page-sessions.d.ts +15 -0
  10. package/dist/adapters/crypto/page-sessions.js +40 -0
  11. package/dist/adapters/crypto/page-sessions.js.map +1 -0
  12. package/dist/adapters/crypto/request-hasher.d.ts +3 -0
  13. package/dist/adapters/crypto/request-hasher.js +4 -0
  14. package/dist/adapters/crypto/request-hasher.js.map +1 -0
  15. package/dist/adapters/crypto/request-ids.d.ts +4 -0
  16. package/dist/adapters/crypto/request-ids.js +7 -0
  17. package/dist/adapters/crypto/request-ids.js.map +1 -0
  18. package/dist/adapters/crypto/sealer.d.ts +14 -0
  19. package/dist/adapters/crypto/sealer.js +41 -0
  20. package/dist/adapters/crypto/sealer.js.map +1 -0
  21. package/dist/adapters/crypto/ship-aliases.d.ts +7 -0
  22. package/dist/adapters/crypto/ship-aliases.js +19 -0
  23. package/dist/adapters/crypto/ship-aliases.js.map +1 -0
  24. package/dist/adapters/crypto/sign-in-seals.d.ts +7 -0
  25. package/dist/adapters/crypto/sign-in-seals.js +25 -0
  26. package/dist/adapters/crypto/sign-in-seals.js.map +1 -0
  27. package/dist/adapters/crypto/waiting-seals.d.ts +3 -0
  28. package/dist/adapters/crypto/waiting-seals.js +24 -0
  29. package/dist/adapters/crypto/waiting-seals.js.map +1 -0
  30. package/dist/adapters/fleet/actor-door.d.ts +20 -0
  31. package/dist/adapters/fleet/actor-door.js +75 -0
  32. package/dist/adapters/fleet/actor-door.js.map +1 -0
  33. package/dist/adapters/fleet/console-sessions.d.ts +2 -0
  34. package/dist/adapters/fleet/console-sessions.js +23 -0
  35. package/dist/adapters/fleet/console-sessions.js.map +1 -0
  36. package/dist/adapters/fleet/core-version.d.ts +11 -0
  37. package/dist/adapters/fleet/core-version.js +18 -0
  38. package/dist/adapters/fleet/core-version.js.map +1 -0
  39. package/dist/adapters/fleet/fleet-network.d.ts +2 -0
  40. package/dist/adapters/fleet/fleet-network.js +34 -0
  41. package/dist/adapters/fleet/fleet-network.js.map +1 -0
  42. package/dist/adapters/fleet/logged-verified-facts.d.ts +13 -0
  43. package/dist/adapters/fleet/logged-verified-facts.js +18 -0
  44. package/dist/adapters/fleet/logged-verified-facts.js.map +1 -0
  45. package/dist/adapters/fleet/proxy-ship-reads.d.ts +7 -0
  46. package/dist/adapters/fleet/proxy-ship-reads.js +24 -0
  47. package/dist/adapters/fleet/proxy-ship-reads.js.map +1 -0
  48. package/dist/adapters/fleet/proxy-ships-as-actor.d.ts +3 -0
  49. package/dist/adapters/fleet/proxy-ships-as-actor.js +25 -0
  50. package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -0
  51. package/dist/adapters/fleet/rest-fleet-door.d.ts +14 -0
  52. package/dist/adapters/fleet/rest-fleet-door.js +205 -0
  53. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -0
  54. package/dist/adapters/http/add-server-page.d.ts +7 -0
  55. package/dist/adapters/http/add-server-page.js +175 -0
  56. package/dist/adapters/http/add-server-page.js.map +1 -0
  57. package/dist/adapters/http/delivery-page.d.ts +24 -0
  58. package/dist/adapters/http/delivery-page.js +115 -0
  59. package/dist/adapters/http/delivery-page.js.map +1 -0
  60. package/dist/adapters/http/html.d.ts +15 -0
  61. package/dist/adapters/http/html.js +53 -0
  62. package/dist/adapters/http/html.js.map +1 -0
  63. package/dist/adapters/http/live.d.ts +29 -0
  64. package/dist/adapters/http/live.js +100 -0
  65. package/dist/adapters/http/live.js.map +1 -0
  66. package/dist/adapters/http/mcp-endpoint.d.ts +20 -0
  67. package/dist/adapters/http/mcp-endpoint.js +164 -0
  68. package/dist/adapters/http/mcp-endpoint.js.map +1 -0
  69. package/dist/adapters/http/mcp-task.d.ts +45 -0
  70. package/dist/adapters/http/mcp-task.js +35 -0
  71. package/dist/adapters/http/mcp-task.js.map +1 -0
  72. package/dist/adapters/http/oauth-routes.d.ts +47 -0
  73. package/dist/adapters/http/oauth-routes.js +337 -0
  74. package/dist/adapters/http/oauth-routes.js.map +1 -0
  75. package/dist/adapters/http/outside-parties-page.d.ts +33 -0
  76. package/dist/adapters/http/outside-parties-page.js +153 -0
  77. package/dist/adapters/http/outside-parties-page.js.map +1 -0
  78. package/dist/adapters/http/outside-party-page.d.ts +7 -0
  79. package/dist/adapters/http/outside-party-page.js +212 -0
  80. package/dist/adapters/http/outside-party-page.js.map +1 -0
  81. package/dist/adapters/http/overview-page.d.ts +17 -0
  82. package/dist/adapters/http/overview-page.js +298 -0
  83. package/dist/adapters/http/overview-page.js.map +1 -0
  84. package/dist/adapters/http/parties-page.d.ts +7 -0
  85. package/dist/adapters/http/parties-page.js +139 -0
  86. package/dist/adapters/http/parties-page.js.map +1 -0
  87. package/dist/adapters/http/person-tools.d.ts +22 -0
  88. package/dist/adapters/http/person-tools.js +98 -0
  89. package/dist/adapters/http/person-tools.js.map +1 -0
  90. package/dist/adapters/http/scope-rows.d.ts +10 -0
  91. package/dist/adapters/http/scope-rows.js +30 -0
  92. package/dist/adapters/http/scope-rows.js.map +1 -0
  93. package/dist/adapters/http/signal.d.ts +61 -0
  94. package/dist/adapters/http/signal.js +263 -0
  95. package/dist/adapters/http/signal.js.map +1 -0
  96. package/dist/adapters/http/version.d.ts +6 -0
  97. package/dist/adapters/http/version.js +12 -0
  98. package/dist/adapters/http/version.js.map +1 -0
  99. package/dist/adapters/mcp/mcp-servers.d.ts +2 -0
  100. package/dist/adapters/mcp/mcp-servers.js +154 -0
  101. package/dist/adapters/mcp/mcp-servers.js.map +1 -0
  102. package/dist/adapters/oauth/client-metadata-documents.d.ts +9 -0
  103. package/dist/adapters/oauth/client-metadata-documents.js +25 -0
  104. package/dist/adapters/oauth/client-metadata-documents.js.map +1 -0
  105. package/dist/adapters/pagasae/pagasae-client.d.ts +8 -0
  106. package/dist/adapters/pagasae/pagasae-client.js +88 -0
  107. package/dist/adapters/pagasae/pagasae-client.js.map +1 -0
  108. package/dist/adapters/prisma/account-grants.d.ts +4 -0
  109. package/dist/adapters/prisma/account-grants.js +27 -0
  110. package/dist/adapters/prisma/account-grants.js.map +1 -0
  111. package/dist/adapters/prisma/calls.d.ts +4 -0
  112. package/dist/adapters/prisma/calls.js +35 -0
  113. package/dist/adapters/prisma/calls.js.map +1 -0
  114. package/dist/adapters/prisma/changes.d.ts +21 -0
  115. package/dist/adapters/prisma/changes.js +86 -0
  116. package/dist/adapters/prisma/changes.js.map +1 -0
  117. package/dist/adapters/prisma/client-calls.d.ts +4 -0
  118. package/dist/adapters/prisma/client-calls.js +59 -0
  119. package/dist/adapters/prisma/client-calls.js.map +1 -0
  120. package/dist/adapters/prisma/client.d.ts +8 -0
  121. package/dist/adapters/prisma/client.js +11 -0
  122. package/dist/adapters/prisma/client.js.map +1 -0
  123. package/dist/adapters/prisma/connection-store.d.ts +4 -0
  124. package/dist/adapters/prisma/connection-store.js +28 -0
  125. package/dist/adapters/prisma/connection-store.js.map +1 -0
  126. package/dist/adapters/prisma/fleet-forgetter.d.ts +4 -0
  127. package/dist/adapters/prisma/fleet-forgetter.js +10 -0
  128. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -0
  129. package/dist/adapters/prisma/fleet-switches.d.ts +4 -0
  130. package/dist/adapters/prisma/fleet-switches.js +10 -0
  131. package/dist/adapters/prisma/fleet-switches.js.map +1 -0
  132. package/dist/adapters/prisma/generated/browser.d.ts +108 -0
  133. package/dist/adapters/prisma/generated/browser.js +18 -0
  134. package/dist/adapters/prisma/generated/browser.js.map +1 -0
  135. package/dist/adapters/prisma/generated/client.d.ts +127 -0
  136. package/dist/adapters/prisma/generated/client.js +38 -0
  137. package/dist/adapters/prisma/generated/client.js.map +1 -0
  138. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +490 -0
  139. package/dist/adapters/prisma/generated/commonInputTypes.js +11 -0
  140. package/dist/adapters/prisma/generated/commonInputTypes.js.map +1 -0
  141. package/dist/adapters/prisma/generated/enums.d.ts +1 -0
  142. package/dist/adapters/prisma/generated/enums.js +12 -0
  143. package/dist/adapters/prisma/generated/enums.js.map +1 -0
  144. package/dist/adapters/prisma/generated/internal/class.d.ts +319 -0
  145. package/dist/adapters/prisma/generated/internal/class.js +50 -0
  146. package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
  147. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2102 -0
  148. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +294 -0
  149. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -0
  150. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +273 -0
  151. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +264 -0
  152. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
  153. package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +1088 -0
  154. package/dist/adapters/prisma/generated/models/AccountGrant.js +2 -0
  155. package/dist/adapters/prisma/generated/models/AccountGrant.js.map +1 -0
  156. package/dist/adapters/prisma/generated/models/AuthorizationCode.d.ts +1171 -0
  157. package/dist/adapters/prisma/generated/models/AuthorizationCode.js +2 -0
  158. package/dist/adapters/prisma/generated/models/AuthorizationCode.js.map +1 -0
  159. package/dist/adapters/prisma/generated/models/Call.d.ts +994 -0
  160. package/dist/adapters/prisma/generated/models/Call.js +2 -0
  161. package/dist/adapters/prisma/generated/models/Call.js.map +1 -0
  162. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +1119 -0
  163. package/dist/adapters/prisma/generated/models/ClientCall.js +2 -0
  164. package/dist/adapters/prisma/generated/models/ClientCall.js.map +1 -0
  165. package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +1129 -0
  166. package/dist/adapters/prisma/generated/models/ClientCallReply.js +2 -0
  167. package/dist/adapters/prisma/generated/models/ClientCallReply.js.map +1 -0
  168. package/dist/adapters/prisma/generated/models/Connection.d.ts +1011 -0
  169. package/dist/adapters/prisma/generated/models/Connection.js +2 -0
  170. package/dist/adapters/prisma/generated/models/Connection.js.map +1 -0
  171. package/dist/adapters/prisma/generated/models/FleetSwitch.d.ts +945 -0
  172. package/dist/adapters/prisma/generated/models/FleetSwitch.js +2 -0
  173. package/dist/adapters/prisma/generated/models/FleetSwitch.js.map +1 -0
  174. package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1030 -0
  175. package/dist/adapters/prisma/generated/models/InstallationRequest.js +2 -0
  176. package/dist/adapters/prisma/generated/models/InstallationRequest.js.map +1 -0
  177. package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +1224 -0
  178. package/dist/adapters/prisma/generated/models/IssuedToken.js +2 -0
  179. package/dist/adapters/prisma/generated/models/IssuedToken.js.map +1 -0
  180. package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +1005 -0
  181. package/dist/adapters/prisma/generated/models/OAuthClient.js +2 -0
  182. package/dist/adapters/prisma/generated/models/OAuthClient.js.map +1 -0
  183. package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +1087 -0
  184. package/dist/adapters/prisma/generated/models/OpenedDelivery.js +2 -0
  185. package/dist/adapters/prisma/generated/models/OpenedDelivery.js.map +1 -0
  186. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.d.ts +942 -0
  187. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js +2 -0
  188. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js.map +1 -0
  189. package/dist/adapters/prisma/generated/models/OwnerQuestion.d.ts +1035 -0
  190. package/dist/adapters/prisma/generated/models/OwnerQuestion.js +2 -0
  191. package/dist/adapters/prisma/generated/models/OwnerQuestion.js.map +1 -0
  192. package/dist/adapters/prisma/generated/models/Party.d.ts +1310 -0
  193. package/dist/adapters/prisma/generated/models/Party.js +2 -0
  194. package/dist/adapters/prisma/generated/models/Party.js.map +1 -0
  195. package/dist/adapters/prisma/generated/models/PendingRequest.d.ts +1252 -0
  196. package/dist/adapters/prisma/generated/models/PendingRequest.js +2 -0
  197. package/dist/adapters/prisma/generated/models/PendingRequest.js.map +1 -0
  198. package/dist/adapters/prisma/generated/models/PersonCrew.d.ts +974 -0
  199. package/dist/adapters/prisma/generated/models/PersonCrew.js +2 -0
  200. package/dist/adapters/prisma/generated/models/PersonCrew.js.map +1 -0
  201. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.d.ts +1120 -0
  202. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js +2 -0
  203. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js.map +1 -0
  204. package/dist/adapters/prisma/generated/models/ToolMark.d.ts +947 -0
  205. package/dist/adapters/prisma/generated/models/ToolMark.js +2 -0
  206. package/dist/adapters/prisma/generated/models/ToolMark.js.map +1 -0
  207. package/dist/adapters/prisma/generated/models.d.ts +19 -0
  208. package/dist/adapters/prisma/generated/models.js +2 -0
  209. package/dist/adapters/prisma/generated/models.js.map +1 -0
  210. package/dist/adapters/prisma/installation-requests.d.ts +4 -0
  211. package/dist/adapters/prisma/installation-requests.js +25 -0
  212. package/dist/adapters/prisma/installation-requests.js.map +1 -0
  213. package/dist/adapters/prisma/migrate.d.ts +5 -0
  214. package/dist/adapters/prisma/migrate.js +53 -0
  215. package/dist/adapters/prisma/migrate.js.map +1 -0
  216. package/dist/adapters/prisma/oauth-stores.d.ts +5 -0
  217. package/dist/adapters/prisma/oauth-stores.js +85 -0
  218. package/dist/adapters/prisma/oauth-stores.js.map +1 -0
  219. package/dist/adapters/prisma/opened-deliveries.d.ts +4 -0
  220. package/dist/adapters/prisma/opened-deliveries.js +29 -0
  221. package/dist/adapters/prisma/opened-deliveries.js.map +1 -0
  222. package/dist/adapters/prisma/outcome-notices.d.ts +4 -0
  223. package/dist/adapters/prisma/outcome-notices.js +24 -0
  224. package/dist/adapters/prisma/outcome-notices.js.map +1 -0
  225. package/dist/adapters/prisma/outside-party-switches.d.ts +4 -0
  226. package/dist/adapters/prisma/outside-party-switches.js +10 -0
  227. package/dist/adapters/prisma/outside-party-switches.js.map +1 -0
  228. package/dist/adapters/prisma/owner-questions.d.ts +8 -0
  229. package/dist/adapters/prisma/owner-questions.js +54 -0
  230. package/dist/adapters/prisma/owner-questions.js.map +1 -0
  231. package/dist/adapters/prisma/party-store.d.ts +7 -0
  232. package/dist/adapters/prisma/party-store.js +71 -0
  233. package/dist/adapters/prisma/party-store.js.map +1 -0
  234. package/dist/adapters/prisma/pending-requests.d.ts +11 -0
  235. package/dist/adapters/prisma/pending-requests.js +128 -0
  236. package/dist/adapters/prisma/pending-requests.js.map +1 -0
  237. package/dist/adapters/prisma/person-crews.d.ts +4 -0
  238. package/dist/adapters/prisma/person-crews.js +18 -0
  239. package/dist/adapters/prisma/person-crews.js.map +1 -0
  240. package/dist/adapters/prisma/tool-marks.d.ts +4 -0
  241. package/dist/adapters/prisma/tool-marks.js +15 -0
  242. package/dist/adapters/prisma/tool-marks.js.map +1 -0
  243. package/dist/adapters/timers/sleep.d.ts +3 -0
  244. package/dist/adapters/timers/sleep.js +11 -0
  245. package/dist/adapters/timers/sleep.js.map +1 -0
  246. package/dist/adapters/trpc/router.d.ts +606 -0
  247. package/dist/adapters/trpc/router.js +519 -0
  248. package/dist/adapters/trpc/router.js.map +1 -0
  249. package/dist/app.d.ts +43 -0
  250. package/dist/app.js +446 -0
  251. package/dist/app.js.map +1 -0
  252. package/dist/bin/aeolus-gateway.d.ts +2 -0
  253. package/dist/bin/aeolus-gateway.js +65 -0
  254. package/dist/bin/aeolus-gateway.js.map +1 -0
  255. package/dist/config.d.ts +41 -0
  256. package/dist/config.js +65 -0
  257. package/dist/config.js.map +1 -0
  258. package/dist/core/actors/authenticate-actor.d.ts +54 -0
  259. package/dist/core/actors/authenticate-actor.js +42 -0
  260. package/dist/core/actors/authenticate-actor.js.map +1 -0
  261. package/dist/core/actors/credential-of.d.ts +27 -0
  262. package/dist/core/actors/credential-of.js +25 -0
  263. package/dist/core/actors/credential-of.js.map +1 -0
  264. package/dist/core/connection/connect.d.ts +26 -0
  265. package/dist/core/connection/connect.js +58 -0
  266. package/dist/core/connection/connect.js.map +1 -0
  267. package/dist/core/connection/ports.d.ts +92 -0
  268. package/dist/core/connection/ports.js +2 -0
  269. package/dist/core/connection/ports.js.map +1 -0
  270. package/dist/core/connection/read-connection.d.ts +14 -0
  271. package/dist/core/connection/read-connection.js +24 -0
  272. package/dist/core/connection/read-connection.js.map +1 -0
  273. package/dist/core/installation/delete-fleet.d.ts +21 -0
  274. package/dist/core/installation/delete-fleet.js +21 -0
  275. package/dist/core/installation/delete-fleet.js.map +1 -0
  276. package/dist/core/installation/ports.d.ts +43 -0
  277. package/dist/core/installation/ports.js +2 -0
  278. package/dist/core/installation/ports.js.map +1 -0
  279. package/dist/core/installation/read-fleet.d.ts +18 -0
  280. package/dist/core/installation/read-fleet.js +9 -0
  281. package/dist/core/installation/read-fleet.js.map +1 -0
  282. package/dist/core/installation/request-id.d.ts +8 -0
  283. package/dist/core/installation/request-id.js +10 -0
  284. package/dist/core/installation/request-id.js.map +1 -0
  285. package/dist/core/installation/served.d.ts +12 -0
  286. package/dist/core/installation/served.js +8 -0
  287. package/dist/core/installation/served.js.map +1 -0
  288. package/dist/core/installation/set-fleet-enabled.d.ts +25 -0
  289. package/dist/core/installation/set-fleet-enabled.js +22 -0
  290. package/dist/core/installation/set-fleet-enabled.js.map +1 -0
  291. package/dist/core/mcp-in/call-tool.d.ts +42 -0
  292. package/dist/core/mcp-in/call-tool.js +82 -0
  293. package/dist/core/mcp-in/call-tool.js.map +1 -0
  294. package/dist/core/mcp-in/client-call.d.ts +51 -0
  295. package/dist/core/mcp-in/client-call.js +39 -0
  296. package/dist/core/mcp-in/client-call.js.map +1 -0
  297. package/dist/core/mcp-in/collect-replies.d.ts +22 -0
  298. package/dist/core/mcp-in/collect-replies.js +66 -0
  299. package/dist/core/mcp-in/collect-replies.js.map +1 -0
  300. package/dist/core/mcp-in/list-tools.d.ts +48 -0
  301. package/dist/core/mcp-in/list-tools.js +70 -0
  302. package/dist/core/mcp-in/list-tools.js.map +1 -0
  303. package/dist/core/mcp-in/ports.d.ts +108 -0
  304. package/dist/core/mcp-in/ports.js +2 -0
  305. package/dist/core/mcp-in/ports.js.map +1 -0
  306. package/dist/core/mcp-in/read-client-call.d.ts +23 -0
  307. package/dist/core/mcp-in/read-client-call.js +15 -0
  308. package/dist/core/mcp-in/read-client-call.js.map +1 -0
  309. package/dist/core/mcp-out/content-types.d.ts +12 -0
  310. package/dist/core/mcp-out/content-types.js +28 -0
  311. package/dist/core/mcp-out/content-types.js.map +1 -0
  312. package/dist/core/mcp-out/hand-call.d.ts +105 -0
  313. package/dist/core/mcp-out/hand-call.js +118 -0
  314. package/dist/core/mcp-out/hand-call.js.map +1 -0
  315. package/dist/core/mcp-out/mark-tool.d.ts +20 -0
  316. package/dist/core/mcp-out/mark-tool.js +17 -0
  317. package/dist/core/mcp-out/mark-tool.js.map +1 -0
  318. package/dist/core/mcp-out/ports.d.ts +66 -0
  319. package/dist/core/mcp-out/ports.js +2 -0
  320. package/dist/core/mcp-out/ports.js.map +1 -0
  321. package/dist/core/mcp-out/run-party.d.ts +26 -0
  322. package/dist/core/mcp-out/run-party.js +62 -0
  323. package/dist/core/mcp-out/run-party.js.map +1 -0
  324. package/dist/core/mcp-out/state-party.d.ts +39 -0
  325. package/dist/core/mcp-out/state-party.js +30 -0
  326. package/dist/core/mcp-out/state-party.js.map +1 -0
  327. package/dist/core/mcp-out/statement.d.ts +36 -0
  328. package/dist/core/mcp-out/statement.js +34 -0
  329. package/dist/core/mcp-out/statement.js.map +1 -0
  330. package/dist/core/oauth/authenticate-access-token.d.ts +25 -0
  331. package/dist/core/oauth/authenticate-access-token.js +19 -0
  332. package/dist/core/oauth/authenticate-access-token.js.map +1 -0
  333. package/dist/core/oauth/exchange-token.d.ts +32 -0
  334. package/dist/core/oauth/exchange-token.js +98 -0
  335. package/dist/core/oauth/exchange-token.js.map +1 -0
  336. package/dist/core/oauth/issue-code.d.ts +23 -0
  337. package/dist/core/oauth/issue-code.js +34 -0
  338. package/dist/core/oauth/issue-code.js.map +1 -0
  339. package/dist/core/oauth/ports.d.ts +105 -0
  340. package/dist/core/oauth/ports.js +2 -0
  341. package/dist/core/oauth/ports.js.map +1 -0
  342. package/dist/core/oauth/read-authorization.d.ts +43 -0
  343. package/dist/core/oauth/read-authorization.js +74 -0
  344. package/dist/core/oauth/read-authorization.js.map +1 -0
  345. package/dist/core/oauth/redirect-uri.d.ts +6 -0
  346. package/dist/core/oauth/redirect-uri.js +20 -0
  347. package/dist/core/oauth/redirect-uri.js.map +1 -0
  348. package/dist/core/oauth/register-client.d.ts +22 -0
  349. package/dist/core/oauth/register-client.js +20 -0
  350. package/dist/core/oauth/register-client.js.map +1 -0
  351. package/dist/core/operator/authenticate-operator.d.ts +22 -0
  352. package/dist/core/operator/authenticate-operator.js +26 -0
  353. package/dist/core/operator/authenticate-operator.js.map +1 -0
  354. package/dist/core/operator/ports.d.ts +15 -0
  355. package/dist/core/operator/ports.js +2 -0
  356. package/dist/core/operator/ports.js.map +1 -0
  357. package/dist/core/outside-parties/ports.d.ts +17 -0
  358. package/dist/core/outside-parties/ports.js +2 -0
  359. package/dist/core/outside-parties/ports.js.map +1 -0
  360. package/dist/core/outside-parties/set-outside-parties.d.ts +36 -0
  361. package/dist/core/outside-parties/set-outside-parties.js +38 -0
  362. package/dist/core/outside-parties/set-outside-parties.js.map +1 -0
  363. package/dist/core/parties/approve-party.d.ts +55 -0
  364. package/dist/core/parties/approve-party.js +127 -0
  365. package/dist/core/parties/approve-party.js.map +1 -0
  366. package/dist/core/parties/change-party.d.ts +42 -0
  367. package/dist/core/parties/change-party.js +49 -0
  368. package/dist/core/parties/change-party.js.map +1 -0
  369. package/dist/core/parties/check-server.d.ts +24 -0
  370. package/dist/core/parties/check-server.js +21 -0
  371. package/dist/core/parties/check-server.js.map +1 -0
  372. package/dist/core/parties/crew-party.d.ts +21 -0
  373. package/dist/core/parties/crew-party.js +29 -0
  374. package/dist/core/parties/crew-party.js.map +1 -0
  375. package/dist/core/parties/list-parties.d.ts +29 -0
  376. package/dist/core/parties/list-parties.js +39 -0
  377. package/dist/core/parties/list-parties.js.map +1 -0
  378. package/dist/core/parties/party.d.ts +52 -0
  379. package/dist/core/parties/party.js +24 -0
  380. package/dist/core/parties/party.js.map +1 -0
  381. package/dist/core/parties/ports.d.ts +74 -0
  382. package/dist/core/parties/ports.js +2 -0
  383. package/dist/core/parties/ports.js.map +1 -0
  384. package/dist/core/parties/read-party-tools.d.ts +22 -0
  385. package/dist/core/parties/read-party-tools.js +22 -0
  386. package/dist/core/parties/read-party-tools.js.map +1 -0
  387. package/dist/core/parties/retire-party.d.ts +29 -0
  388. package/dist/core/parties/retire-party.js +43 -0
  389. package/dist/core/parties/retire-party.js.map +1 -0
  390. package/dist/core/parties/shown-party.d.ts +27 -0
  391. package/dist/core/parties/shown-party.js +10 -0
  392. package/dist/core/parties/shown-party.js.map +1 -0
  393. package/dist/core/people/answer-delivery.d.ts +24 -0
  394. package/dist/core/people/answer-delivery.js +28 -0
  395. package/dist/core/people/answer-delivery.js.map +1 -0
  396. package/dist/core/people/crew-person-ship.d.ts +42 -0
  397. package/dist/core/people/crew-person-ship.js +59 -0
  398. package/dist/core/people/crew-person-ship.js.map +1 -0
  399. package/dist/core/people/done-delivery.d.ts +16 -0
  400. package/dist/core/people/done-delivery.js +9 -0
  401. package/dist/core/people/done-delivery.js.map +1 -0
  402. package/dist/core/people/inbox-entry.d.ts +14 -0
  403. package/dist/core/people/inbox-entry.js +11 -0
  404. package/dist/core/people/inbox-entry.js.map +1 -0
  405. package/dist/core/people/open-delivery.d.ts +30 -0
  406. package/dist/core/people/open-delivery.js +40 -0
  407. package/dist/core/people/open-delivery.js.map +1 -0
  408. package/dist/core/people/opened-of.d.ts +29 -0
  409. package/dist/core/people/opened-of.js +30 -0
  410. package/dist/core/people/opened-of.js.map +1 -0
  411. package/dist/core/people/person-crew.d.ts +39 -0
  412. package/dist/core/people/person-crew.js +61 -0
  413. package/dist/core/people/person-crew.js.map +1 -0
  414. package/dist/core/people/ports.d.ts +102 -0
  415. package/dist/core/people/ports.js +2 -0
  416. package/dist/core/people/ports.js.map +1 -0
  417. package/dist/core/people/read-inbox.d.ts +37 -0
  418. package/dist/core/people/read-inbox.js +36 -0
  419. package/dist/core/people/read-inbox.js.map +1 -0
  420. package/dist/core/requests/ask-for-client.d.ts +45 -0
  421. package/dist/core/requests/ask-for-client.js +33 -0
  422. package/dist/core/requests/ask-for-client.js.map +1 -0
  423. package/dist/core/requests/ask-for-server.d.ts +32 -0
  424. package/dist/core/requests/ask-for-server.js +42 -0
  425. package/dist/core/requests/ask-for-server.js.map +1 -0
  426. package/dist/core/requests/ask-owners.d.ts +28 -0
  427. package/dist/core/requests/ask-owners.js +85 -0
  428. package/dist/core/requests/ask-owners.js.map +1 -0
  429. package/dist/core/requests/decide-request.d.ts +53 -0
  430. package/dist/core/requests/decide-request.js +83 -0
  431. package/dist/core/requests/decide-request.js.map +1 -0
  432. package/dist/core/requests/expire-requests.d.ts +14 -0
  433. package/dist/core/requests/expire-requests.js +21 -0
  434. package/dist/core/requests/expire-requests.js.map +1 -0
  435. package/dist/core/requests/list-mine.d.ts +16 -0
  436. package/dist/core/requests/list-mine.js +20 -0
  437. package/dist/core/requests/list-mine.js.map +1 -0
  438. package/dist/core/requests/list-to-decide.d.ts +11 -0
  439. package/dist/core/requests/list-to-decide.js +13 -0
  440. package/dist/core/requests/list-to-decide.js.map +1 -0
  441. package/dist/core/requests/open-request.d.ts +21 -0
  442. package/dist/core/requests/open-request.js +26 -0
  443. package/dist/core/requests/open-request.js.map +1 -0
  444. package/dist/core/requests/outcome-notice.d.ts +13 -0
  445. package/dist/core/requests/outcome-notice.js +26 -0
  446. package/dist/core/requests/outcome-notice.js.map +1 -0
  447. package/dist/core/requests/ports.d.ts +191 -0
  448. package/dist/core/requests/ports.js +2 -0
  449. package/dist/core/requests/ports.js.map +1 -0
  450. package/dist/core/requests/read-waiting.d.ts +46 -0
  451. package/dist/core/requests/read-waiting.js +41 -0
  452. package/dist/core/requests/read-waiting.js.map +1 -0
  453. package/dist/core/requests/request-state.d.ts +5 -0
  454. package/dist/core/requests/request-state.js +10 -0
  455. package/dist/core/requests/request-state.js.map +1 -0
  456. package/dist/core/requests/tell-outcomes.d.ts +24 -0
  457. package/dist/core/requests/tell-outcomes.js +39 -0
  458. package/dist/core/requests/tell-outcomes.js.map +1 -0
  459. package/dist/core/requests/watch-waiting.d.ts +32 -0
  460. package/dist/core/requests/watch-waiting.js +31 -0
  461. package/dist/core/requests/watch-waiting.js.map +1 -0
  462. package/dist/core/shared/clock.d.ts +4 -0
  463. package/dist/core/shared/clock.js +2 -0
  464. package/dist/core/shared/clock.js.map +1 -0
  465. package/dist/core/shared/errors.d.ts +10 -0
  466. package/dist/core/shared/errors.js +6 -0
  467. package/dist/core/shared/errors.js.map +1 -0
  468. package/dist/core/shared/result.d.ts +16 -0
  469. package/dist/core/shared/result.js +7 -0
  470. package/dist/core/shared/result.js.map +1 -0
  471. package/dist/core/sign-in/account-token.d.ts +42 -0
  472. package/dist/core/sign-in/account-token.js +46 -0
  473. package/dist/core/sign-in/account-token.js.map +1 -0
  474. package/dist/core/sign-in/complete-sign-in.d.ts +66 -0
  475. package/dist/core/sign-in/complete-sign-in.js +73 -0
  476. package/dist/core/sign-in/complete-sign-in.js.map +1 -0
  477. package/dist/core/sign-in/end-sign-ins.d.ts +19 -0
  478. package/dist/core/sign-in/end-sign-ins.js +17 -0
  479. package/dist/core/sign-in/end-sign-ins.js.map +1 -0
  480. package/dist/core/sign-in/ports.d.ts +115 -0
  481. package/dist/core/sign-in/ports.js +2 -0
  482. package/dist/core/sign-in/ports.js.map +1 -0
  483. package/dist/core/sign-in/sign-out.d.ts +10 -0
  484. package/dist/core/sign-in/sign-out.js +9 -0
  485. package/dist/core/sign-in/sign-out.js.map +1 -0
  486. package/dist/core/sign-in/start-page-sign-in.d.ts +25 -0
  487. package/dist/core/sign-in/start-page-sign-in.js +30 -0
  488. package/dist/core/sign-in/start-page-sign-in.js.map +1 -0
  489. package/dist/core/sign-in/start-sign-in.d.ts +30 -0
  490. package/dist/core/sign-in/start-sign-in.js +25 -0
  491. package/dist/core/sign-in/start-sign-in.js.map +1 -0
  492. package/dist/core/vault/credential.d.ts +18 -0
  493. package/dist/core/vault/credential.js +2 -0
  494. package/dist/core/vault/credential.js.map +1 -0
  495. package/dist/outcome-worker.d.ts +29 -0
  496. package/dist/outcome-worker.js +60 -0
  497. package/dist/outcome-worker.js.map +1 -0
  498. package/dist/party-workers.d.ts +32 -0
  499. package/dist/party-workers.js +57 -0
  500. package/dist/party-workers.js.map +1 -0
  501. package/package.json +70 -4
  502. package/prisma.config.ts +18 -0
  503. package/src/adapters/prisma/migrations/20261018200000_init/migration.sql +35 -0
  504. package/src/adapters/prisma/migrations/20261018210000_parties/migration.sql +19 -0
  505. package/src/adapters/prisma/migrations/20261018220000_tool_marks/migration.sql +8 -0
  506. package/src/adapters/prisma/migrations/20261018230000_calls/migration.sql +13 -0
  507. package/src/adapters/prisma/migrations/20261019090000_oauth/migration.sql +60 -0
  508. package/src/adapters/prisma/migrations/20261019100000_client_parties/migration.sql +8 -0
  509. package/src/adapters/prisma/migrations/20261019110000_oauth_parties/migration.sql +5 -0
  510. package/src/adapters/prisma/migrations/20261019120000_client_calls/migration.sql +15 -0
  511. package/src/adapters/prisma/migrations/20261019130000_client_call_replies/migration.sql +20 -0
  512. package/src/adapters/prisma/migrations/20261019140000_identity_providers/migration.sql +10 -0
  513. package/src/adapters/prisma/migrations/20261020090000_no_identity_providers/migration.sql +2 -0
  514. package/src/adapters/prisma/migrations/20261020100000_account_grants_in_tokens/migration.sql +5 -0
  515. package/src/adapters/prisma/migrations/20261020110000_account_grants/migration.sql +15 -0
  516. package/src/adapters/prisma/migrations/20261020120000_person_crews/migration.sql +9 -0
  517. package/src/adapters/prisma/migrations/20261020130000_opened_deliveries/migration.sql +13 -0
  518. package/src/adapters/prisma/migrations/20261020140000_pending_requests/migration.sql +26 -0
  519. package/src/adapters/prisma/migrations/20261020150000_outside_party_switches/migration.sql +8 -0
  520. package/src/adapters/prisma/migrations/20261020160000_pending_requests_told/migration.sql +2 -0
  521. package/src/adapters/prisma/migrations/20261020170000_request_outcome_notices/migration.sql +17 -0
  522. package/src/adapters/prisma/migrations/20261020180000_owner_questions/migration.sql +11 -0
  523. package/src/adapters/prisma/migrations/20261020190000_request_changes/migration.sql +12 -0
  524. package/src/adapters/prisma/migrations/20261020200000_account_grant_scopes/migration.sql +2 -0
  525. package/src/adapters/prisma/migrations/20261020210000_party_owner_from_fleet/migration.sql +2 -0
  526. package/src/adapters/prisma/migrations/20261020220000_client_call_deadline_optional/migration.sql +2 -0
  527. package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
  528. package/src/adapters/prisma/schema.prisma +312 -0
@@ -0,0 +1,49 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { err, ok } from '../shared/result.js';
3
+ /** The scope that changes an outside party's owner (0053). */
4
+ export const OWNING_SCOPE = 'fleet:owner';
5
+ /** The scope that grants and revokes an outside party's scopes (0046). */
6
+ export const GRANTING_SCOPE = 'scopes:grant';
7
+ /** The party's proxy ship and the credential to call the fleet on it with as the actor, who holds the call's scope. */
8
+ async function proxyShipFor(deps, call) {
9
+ const { actor, as, name, scope } = call;
10
+ if (!actor.scopes.includes(scope)) {
11
+ return refuse('SCOPE_NOT_HELD', `Changing an outside party this way needs ${scope}`);
12
+ }
13
+ const party = await deps.parties.find(actor.fleetId, name);
14
+ if (party === undefined) {
15
+ return refuse('NO_SUCH_PARTY', `There is no outside party ${name}`);
16
+ }
17
+ if (party.proxyShipId === null) {
18
+ return refuse('PARTY_NOT_COMMISSIONED', `${name}'s proxy ship is not commissioned yet`);
19
+ }
20
+ const credential = await deps.credentialOf(actor, as);
21
+ return credential.isOk ? ok({ shipId: party.proxyShipId, credential: credential.value }) : credential;
22
+ }
23
+ /** The fleet's refusal of a change, as the gateway states it. */
24
+ function refusalOf(refusal) {
25
+ return refusal.code === 'UNAVAILABLE' ? { kind: 'FLEET_UNAVAILABLE', message: `The fleet did not answer: ${refusal.message}` } : { kind: 'CHANGE_REFUSED', message: refusal.message };
26
+ }
27
+ /** Use case: an actor holding fleet:owner sets the owner of an outside party's proxy ship, as itself. */
28
+ export function createChangePartyOwner(deps) {
29
+ return async ({ ownerShipId, ...call }) => {
30
+ const target = await proxyShipFor(deps, { ...call, scope: OWNING_SCOPE });
31
+ if (!target.isOk) {
32
+ return target;
33
+ }
34
+ const set = await deps.fleet.setOwner(target.value.credential, { shipId: target.value.shipId, ownerShipId });
35
+ return set.isOk ? ok(undefined) : err(refusalOf(set.error));
36
+ };
37
+ }
38
+ /** Use case: an actor holding scopes:grant grants and revokes scopes on an outside party's proxy ship, as itself: every scope it holds now. */
39
+ export function createChangePartyScopes(deps) {
40
+ return async ({ grant, revoke, ...call }) => {
41
+ const target = await proxyShipFor(deps, { ...call, scope: GRANTING_SCOPE });
42
+ if (!target.isOk) {
43
+ return target;
44
+ }
45
+ const changed = await deps.fleet.grantScopes(target.value.credential, { shipId: target.value.shipId, grant, revoke });
46
+ return changed.isOk ? ok(changed.value) : err(refusalOf(changed.error));
47
+ };
48
+ }
49
+ //# sourceMappingURL=change-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"change-party.js","sourceRoot":"","sources":["../../../src/core/parties/change-party.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAG3D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;AAE1C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAoB7C,uHAAuH;AACvH,KAAK,UAAU,YAAY,CAAC,IAAgB,EAAE,IAAoC;IAChF,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,gBAAgB,EAAE,4CAA4C,KAAK,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,eAAe,EAAE,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,wBAAwB,EAAE,GAAG,IAAI,uCAAuC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACxG,CAAC;AAED,iEAAiE;AACjE,SAAS,SAAS,CAAC,OAAqB;IACtC,OAAO,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,6BAA6B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AACxL,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,sBAAsB,CAAC,IAAgB;IACrD,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7G,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC;AAED,+IAA+I;AAC/I,MAAM,UAAU,uBAAuB,CAAC,IAAgB;IACtD,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { McpServerConnection, McpServers } from '../mcp-out/ports.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ /** A tool as the check shows it: its name, and its short description when the server gives one. */
6
+ export interface CheckedTool {
7
+ name: string;
8
+ description?: string;
9
+ }
10
+ export type CheckServer = (input: {
11
+ fleetId: FleetId;
12
+ } & McpServerConnection) => Promise<Result<{
13
+ tools: CheckedTool[];
14
+ }, DomainError<'OUTSIDE_PARTIES_OFF' | 'SERVER_UNREACHABLE'>>>;
15
+ /**
16
+ * Use case: the gateway checks an outside MCP server before it is added
17
+ * (flow F10): the tools its server lists, with the credential the approver
18
+ * typed. It keeps nothing and commissions nothing; approving does that.
19
+ * Only while the fleet's outside parties are on, as approving.
20
+ */
21
+ export declare function createCheckServer(deps: {
22
+ servers: McpServers;
23
+ servesOutsideParties: (fleetId: FleetId) => Promise<boolean>;
24
+ }): CheckServer;
@@ -0,0 +1,21 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /**
4
+ * Use case: the gateway checks an outside MCP server before it is added
5
+ * (flow F10): the tools its server lists, with the credential the approver
6
+ * typed. It keeps nothing and commissions nothing; approving does that.
7
+ * Only while the fleet's outside parties are on, as approving.
8
+ */
9
+ export function createCheckServer(deps) {
10
+ return async ({ fleetId, url, credential }) => {
11
+ if (!(await deps.servesOutsideParties(fleetId))) {
12
+ return refuse('OUTSIDE_PARTIES_OFF', "This fleet's outside parties are off: turn them on first");
13
+ }
14
+ const listed = await deps.servers.listTools({ url, credential });
15
+ if (!listed.isOk) {
16
+ return refuse('SERVER_UNREACHABLE', `The MCP server could not be listed: ${listed.error.reason}`);
17
+ }
18
+ return ok({ tools: listed.value.map(({ name, description }) => ({ name, ...(description === undefined ? {} : { description }) })) });
19
+ };
20
+ }
21
+ //# sourceMappingURL=check-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-server.js","sourceRoot":"","sources":["../../../src/core/parties/check-server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAUtD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA2F;IAC3H,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;QAC5C,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAChD,OAAO,MAAM,CAAC,qBAAqB,EAAE,0DAA0D,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,oBAAoB,EAAE,uCAAuC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACvI,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import { type DomainError } from '../shared/errors.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import { type ShownParty } from './shown-party.js';
5
+ import type { PartyStore, ProxyShipDoor } from './ports.js';
6
+ export type CrewParty = (input: {
7
+ operatorFleetId: FleetId;
8
+ name: string;
9
+ secret: string;
10
+ }) => Promise<Result<ShownParty, DomainError<'NO_SUCH_PARTY' | 'NOT_AWAITING_CREW' | 'SECRET_REFUSED'>>>;
11
+ /**
12
+ * Use case: argo hands over a new secret for a party's proxy ship that awaits
13
+ * crew, taken from a new starting prompt in the console: the commission's
14
+ * answer was lost, and its secret with it, and the gateway's ship may not ask
15
+ * for a new one (orchestrator-1 on aeolus-fleet#876, Q6). The gateway crews
16
+ * the ship with it and keeps the crew token; the secret is never kept.
17
+ */
18
+ export declare function createCrewParty(deps: {
19
+ parties: PartyStore;
20
+ door: ProxyShipDoor;
21
+ }): CrewParty;
@@ -0,0 +1,29 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { shownPartyOf } from './shown-party.js';
4
+ /**
5
+ * Use case: argo hands over a new secret for a party's proxy ship that awaits
6
+ * crew, taken from a new starting prompt in the console: the commission's
7
+ * answer was lost, and its secret with it, and the gateway's ship may not ask
8
+ * for a new one (orchestrator-1 on aeolus-fleet#876, Q6). The gateway crews
9
+ * the ship with it and keeps the crew token; the secret is never kept.
10
+ */
11
+ export function createCrewParty(deps) {
12
+ return async ({ operatorFleetId, name, secret }) => {
13
+ const party = await deps.parties.find(operatorFleetId, name);
14
+ if (!party) {
15
+ return refuse('NO_SUCH_PARTY', `No party named ${name}`);
16
+ }
17
+ if (party.state !== 'awaitingCrew' || party.proxyShipId === null) {
18
+ return refuse('NOT_AWAITING_CREW', `The proxy ship of ${name} does not await crew`);
19
+ }
20
+ const registered = await deps.door.register({ shipId: party.proxyShipId, secret });
21
+ if (!registered.isOk) {
22
+ return refuse('SECRET_REFUSED', `The fleet refused the secret: ${registered.error.message}`);
23
+ }
24
+ const crewed = { ...party, state: 'crewed', secret: null, crewToken: registered.value.crewToken };
25
+ await deps.parties.save(crewed);
26
+ return ok(shownPartyOf(crewed));
27
+ };
28
+ }
29
+ //# sourceMappingURL=crew-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crew-party.js","sourceRoot":"","sources":["../../../src/core/parties/crew-party.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAmB,MAAM,kBAAkB,CAAC;AAQjE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAkD;IAChF,OAAO,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;QACjD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CAAC,eAAe,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YACjE,OAAO,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,IAAI,sBAAsB,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,gBAAgB,EAAE,iCAAiC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,MAAM,GAAU,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACzG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import { type ListedParty } from './shown-party.js';
6
+ import type { PartyStore, ProxyShipReads } from './ports.js';
7
+ interface ReadCall {
8
+ actor: Actor;
9
+ as: ActorCredential;
10
+ }
11
+ export type ListParties = (call: ReadCall) => Promise<ListedParty[]>;
12
+ export type ReadParty = (call: ReadCall & {
13
+ name: string;
14
+ }) => Promise<Result<ListedParty, DomainError<'NO_SUCH_PARTY'>>>;
15
+ interface ReadDeps {
16
+ parties: PartyStore;
17
+ fleet: ProxyShipReads;
18
+ credentialOf: CredentialOf;
19
+ }
20
+ /**
21
+ * Use case: the actor's fleet's outside parties, by name: never a credential
22
+ * or a crew token. Each proxy ship's owner and scopes are the fleet's alone
23
+ * (decision 0056), read as the actor, so the fleet answers within its read
24
+ * reach.
25
+ */
26
+ export declare function createListParties(deps: ReadDeps): ListParties;
27
+ /** Use case: one outside party by name, as the list shows it. */
28
+ export declare function createReadParty(deps: ReadDeps): ReadParty;
29
+ export {};
@@ -0,0 +1,39 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { shownPartyOf } from './shown-party.js';
4
+ const UNKNOWN = { ownerShipId: null, scopes: null };
5
+ /** The parties with what the fleet holds for each proxy ship, read as the actor; unknown outside its read reach, or while it cannot be read. */
6
+ async function listed(deps, call) {
7
+ const credential = await deps.credentialOf(call.actor, call.as);
8
+ return Promise.all(call.parties.map(async (party) => {
9
+ if (party.proxyShipId === null || !credential.isOk) {
10
+ return { ...shownPartyOf(party), ...UNKNOWN };
11
+ }
12
+ const read = await deps.fleet.read(credential.value, { shipId: party.proxyShipId });
13
+ return { ...shownPartyOf(party), ...(read.isOk ? read.value : UNKNOWN) };
14
+ }));
15
+ }
16
+ /**
17
+ * Use case: the actor's fleet's outside parties, by name: never a credential
18
+ * or a crew token. Each proxy ship's owner and scopes are the fleet's alone
19
+ * (decision 0056), read as the actor, so the fleet answers within its read
20
+ * reach.
21
+ */
22
+ export function createListParties(deps) {
23
+ return async ({ actor, as }) => {
24
+ const parties = (await deps.parties.list(actor.fleetId)).sort((left, right) => left.name.localeCompare(right.name));
25
+ return listed(deps, { actor, as, parties });
26
+ };
27
+ }
28
+ /** Use case: one outside party by name, as the list shows it. */
29
+ export function createReadParty(deps) {
30
+ return async ({ actor, as, name }) => {
31
+ const party = await deps.parties.find(actor.fleetId, name);
32
+ if (party === undefined) {
33
+ return refuse('NO_SUCH_PARTY', `There is no outside party ${name}`);
34
+ }
35
+ const [shown] = await listed(deps, { actor, as, parties: [party] });
36
+ return shown === undefined ? refuse('NO_SUCH_PARTY', `There is no outside party ${name}`) : ok(shown);
37
+ };
38
+ }
39
+ //# sourceMappingURL=list-parties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-parties.js","sourceRoot":"","sources":["../../../src/core/parties/list-parties.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAoC,MAAM,kBAAkB,CAAC;AAkBlF,MAAM,OAAO,GAAc,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAE/D,gJAAgJ;AAChJ,KAAK,UAAU,MAAM,CAAC,IAAc,EAAE,IAAqC;IACzE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,GAAG,CAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QAChD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACpF,OAAO,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3E,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACpH,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC;AACJ,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,IAAc;IAC5C,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,eAAe,EAAE,6BAA6B,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,6BAA6B,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACxG,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ import type { FleetId, ShipId, VerifiedFact } from '@aeolus-fleet/common';
2
+ import type { McpServerCredential } from '../vault/credential.js';
3
+ /**
4
+ * Where an approved party's proxy ship stands (interop I-5):
5
+ * - commissioning: argo approved it; the gateway has not seen the fleet commission its ship yet;
6
+ * - awaitingCrew: its ship is commissioned, and the gateway does not hold its crew token;
7
+ * - crewed: the gateway crews its ship.
8
+ */
9
+ export type PartyState = 'commissioning' | 'awaitingCrew' | 'crewed';
10
+ /**
11
+ * What every party has: one app proxy ship (decision 0044), crewed by the
12
+ * gateway. Known by its ship's name, unique in the fleet. Its owner, the
13
+ * person inside who answers for it (0045), is the fleet's alone: the gateway
14
+ * names it at the commission and reads it after (decision 0056).
15
+ */
16
+ interface PartyBase {
17
+ readonly fleetId: FleetId;
18
+ readonly name: string;
19
+ readonly state: PartyState;
20
+ readonly proxyShipId: ShipId | null;
21
+ /** The proxy ship's secret, kept only from its commission until the gateway crews it, so a crash between them loses nothing. */
22
+ readonly secret: string | null;
23
+ readonly crewToken: string | null;
24
+ /** argo's request id for the approval: the commission's idempotency key, and how a repeat is told from another approval. */
25
+ readonly requestId: string;
26
+ readonly requestHash: string;
27
+ readonly approvedAt: Date;
28
+ }
29
+ /** An outside MCP server argo approved for its fleet: fleet ships call its tools through its proxy ship (MCP out). */
30
+ export interface McpServerParty extends PartyBase {
31
+ readonly kind: 'mcpServer';
32
+ /** The server's Streamable HTTP endpoint. */
33
+ readonly url: string;
34
+ readonly credential: McpServerCredential;
35
+ /** The most calls the gateway has in flight to the server at once. */
36
+ readonly concurrencyLimit: number;
37
+ }
38
+ /** An outside MCP client argo approved at /authorize: it calls fleet ships as its proxy ship (MCP in). */
39
+ export interface McpClientParty extends PartyBase {
40
+ readonly kind: 'mcpClient';
41
+ /** Its OAuth client id: pre-registered, or its metadata document's URL. */
42
+ readonly clientId: string;
43
+ }
44
+ export type Party = McpServerParty | McpClientParty;
45
+ /**
46
+ * What the gateway checked about the party behind a proxy ship (decision
47
+ * 0059): the host it reached an MCP server at over TLS, and the domain of the
48
+ * metadata document it read an MCP client's id from over TLS. A client argo
49
+ * registered has no document, and an address without TLS proves no host.
50
+ */
51
+ export declare function verifiedFactsOf(party: Party): VerifiedFact[];
52
+ export {};
@@ -0,0 +1,24 @@
1
+ /** The host of an https address, or none: only an address reached over TLS shows who answers it. */
2
+ function tlsHostOf(address) {
3
+ try {
4
+ const url = new URL(address);
5
+ return url.protocol === 'https:' ? url.hostname : undefined;
6
+ }
7
+ catch {
8
+ return undefined;
9
+ }
10
+ }
11
+ /**
12
+ * What the gateway checked about the party behind a proxy ship (decision
13
+ * 0059): the host it reached an MCP server at over TLS, and the domain of the
14
+ * metadata document it read an MCP client's id from over TLS. A client argo
15
+ * registered has no document, and an address without TLS proves no host.
16
+ */
17
+ export function verifiedFactsOf(party) {
18
+ const host = tlsHostOf(party.kind === 'mcpServer' ? party.url : party.clientId);
19
+ if (host === undefined) {
20
+ return [];
21
+ }
22
+ return [party.kind === 'mcpServer' ? { checked: 'tlsHost', value: host } : { checked: 'clientIdDocumentDomain', value: host }];
23
+ }
24
+ //# sourceMappingURL=party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"party.js","sourceRoot":"","sources":["../../../src/core/parties/party.ts"],"names":[],"mappings":"AAmDA,oGAAoG;AACpG,SAAS,SAAS,CAAC,OAAe;IAChC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAY;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACjI,CAAC"}
@@ -0,0 +1,74 @@
1
+ import type { FleetId, ShipId, VerifiedFact } from '@aeolus-fleet/common';
2
+ import type { ActorCredential } from '../actors/credential-of.js';
3
+ import type { FleetRefusal } from '../connection/ports.js';
4
+ import type { Result } from '../shared/result.js';
5
+ import type { Party } from './party.js';
6
+ /** Outbound port: the parties argo approved, one per proxy ship name in a fleet. */
7
+ export interface PartyStore {
8
+ find(fleetId: FleetId, name: string): Promise<Party | undefined>;
9
+ list(fleetId: FleetId): Promise<Party[]>;
10
+ /** The party an MCP client is in the fleet, if argo approved it. */
11
+ findByClient(fleetId: FleetId, clientId: string): Promise<Party | undefined>;
12
+ save(party: Party): Promise<void>;
13
+ remove(fleetId: FleetId, name: string): Promise<void>;
14
+ }
15
+ /** Outbound port: the fleet's calls the gateway makes for a party's proxy ship. */
16
+ export interface ProxyShipDoor {
17
+ /**
18
+ * Commissions an app ship as the gateway's ship (fleet:commission and
19
+ * fleet:on-behalf, decision 0044), owned by the owner argo picked (0045),
20
+ * with the scopes granted, only ones the gateway's ship holds (0053),
21
+ * under the gateway's idempotency key: its id, and on the first commission
22
+ * its secret. A repeat under the same key answers the same ship without one.
23
+ */
24
+ commissionAppShip(crewToken: string, ship: {
25
+ name: string;
26
+ type: string;
27
+ owner: ShipId;
28
+ idempotencyKey: string;
29
+ scopes: readonly string[];
30
+ }): Promise<Result<{
31
+ shipId: ShipId;
32
+ secret: string | null;
33
+ }, FleetRefusal>>;
34
+ register(claim: {
35
+ shipId: ShipId;
36
+ secret: string;
37
+ }): Promise<Result<{
38
+ crewToken: string;
39
+ }, FleetRefusal>>;
40
+ /** Sets the gateway's facts about the proxy ship whole (fleet.setVerifiedFacts, fleet:verify, decision 0059). */
41
+ setVerifiedFacts(crewToken: string, written: {
42
+ shipId: ShipId;
43
+ facts: readonly VerifiedFact[];
44
+ }): Promise<Result<undefined, FleetRefusal>>;
45
+ }
46
+ /** Outbound port: the fleet's calls on a party's proxy ship made as the actor (decision 0057), so the fleet checks its scopes and reach. */
47
+ export interface ProxyShipsAsActor {
48
+ /** Retires the proxy ship (fleet.retire); a ship retired already is refused with CONFLICT. */
49
+ retire(as: ActorCredential, ship: {
50
+ shipId: ShipId;
51
+ }): Promise<Result<undefined, FleetRefusal>>;
52
+ /** Sets the proxy ship's owner (fleet.setOwner, fleet:owner). */
53
+ setOwner(as: ActorCredential, ship: {
54
+ shipId: ShipId;
55
+ ownerShipId: ShipId;
56
+ }): Promise<Result<undefined, FleetRefusal>>;
57
+ /** Grants and revokes the proxy ship's scopes (fleet.grantScopes, scopes:grant): every scope it holds now. */
58
+ grantScopes(as: ActorCredential, change: {
59
+ shipId: ShipId;
60
+ grant: readonly string[];
61
+ revoke: readonly string[];
62
+ }): Promise<Result<{
63
+ scopes: string[];
64
+ }, FleetRefusal>>;
65
+ }
66
+ /** Outbound port: what the fleet holds for a proxy ship, read as the actor (fleet:read): its owner and scopes, neither outside the actor's read reach. */
67
+ export interface ProxyShipReads {
68
+ read(as: ActorCredential, ship: {
69
+ shipId: ShipId;
70
+ }): Promise<Result<{
71
+ ownerShipId: ShipId | null;
72
+ scopes: string[] | null;
73
+ }, FleetRefusal>>;
74
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/parties/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,22 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { McpServers } from '../mcp-out/ports.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import type { CheckedTool } from './check-server.js';
6
+ import type { PartyStore } from './ports.js';
7
+ export type ReadPartyTools = (party: {
8
+ fleetId: FleetId;
9
+ name: string;
10
+ }) => Promise<Result<{
11
+ tools: CheckedTool[];
12
+ }, DomainError<'NO_SUCH_PARTY' | 'SERVER_UNREACHABLE'>>>;
13
+ /**
14
+ * Use case: an outside MCP server's tools, as the server lists them now,
15
+ * asked with the credential the gateway keeps for it. It keeps nothing:
16
+ * the proxy ship's statement in the fleet is where the tools live, and
17
+ * core does not answer a statement to a reader yet, so the server is asked.
18
+ */
19
+ export declare function createReadPartyTools(deps: {
20
+ parties: PartyStore;
21
+ servers: McpServers;
22
+ }): ReadPartyTools;
@@ -0,0 +1,22 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /**
4
+ * Use case: an outside MCP server's tools, as the server lists them now,
5
+ * asked with the credential the gateway keeps for it. It keeps nothing:
6
+ * the proxy ship's statement in the fleet is where the tools live, and
7
+ * core does not answer a statement to a reader yet, so the server is asked.
8
+ */
9
+ export function createReadPartyTools(deps) {
10
+ return async ({ fleetId, name }) => {
11
+ const party = await deps.parties.find(fleetId, name);
12
+ if (party?.kind !== 'mcpServer') {
13
+ return refuse('NO_SUCH_PARTY', `There is no outside MCP server ${name}`);
14
+ }
15
+ const listed = await deps.servers.listTools({ url: party.url, credential: party.credential });
16
+ if (!listed.isOk) {
17
+ return refuse('SERVER_UNREACHABLE', `The MCP server of ${name} could not be listed: ${listed.error.reason}`);
18
+ }
19
+ return ok({ tools: listed.value.map(({ name: tool, description }) => ({ name: tool, ...(description === undefined ? {} : { description }) })) });
20
+ };
21
+ }
22
+ //# sourceMappingURL=read-party-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-party-tools.js","sourceRoot":"","sources":["../../../src/core/parties/read-party-tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAMtD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAkD;IACrF,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,eAAe,EAAE,kCAAkC,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,oBAAoB,EAAE,qBAAqB,IAAI,yBAAyB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { Actor } from '../actors/authenticate-actor.js';
2
+ import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
3
+ import type { IssuedTokens } from '../oauth/ports.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { PartyStore, ProxyShipsAsActor } from './ports.js';
7
+ /** The scope that retires an outside party, as it retires any ship (decision 0056). */
8
+ export declare const RETIRING_SCOPE = "fleet:manage";
9
+ export type RetirePartyRefusal = DomainError<'NOT_A_MANAGER' | 'NO_SUCH_PARTY' | 'RETIRE_REFUSED' | 'FLEET_UNAVAILABLE' | 'NOT_AN_ACTOR'>;
10
+ export type RetireParty = (input: {
11
+ actor: Actor;
12
+ as: ActorCredential;
13
+ name: string;
14
+ }) => Promise<Result<undefined, RetirePartyRefusal>>;
15
+ /**
16
+ * Use case: an actor holding fleet:manage retires an outside party (decision
17
+ * 0056). Its proxy ship is retired in the fleet as the actor, so the fleet
18
+ * checks its manage reach, and only then does the gateway forget the party
19
+ * and revoke its client's tokens; its worker ends as the fleet ends the
20
+ * proxy ship's crew. A proxy ship retired already is retired. A party whose
21
+ * ship the gateway never learned asks the fleet nothing. Adding it again is
22
+ * a new request.
23
+ */
24
+ export declare function createRetireParty(deps: {
25
+ parties: PartyStore;
26
+ fleet: ProxyShipsAsActor;
27
+ tokens: Pick<IssuedTokens, 'revokeParty'>;
28
+ credentialOf: CredentialOf;
29
+ }): RetireParty;
@@ -0,0 +1,43 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /** The scope that retires an outside party, as it retires any ship (decision 0056). */
4
+ export const RETIRING_SCOPE = 'fleet:manage';
5
+ /** The fleet's code for a ship retired already: the only conflict a retire answers. */
6
+ const RETIRED_ALREADY = 'CONFLICT';
7
+ /**
8
+ * Use case: an actor holding fleet:manage retires an outside party (decision
9
+ * 0056). Its proxy ship is retired in the fleet as the actor, so the fleet
10
+ * checks its manage reach, and only then does the gateway forget the party
11
+ * and revoke its client's tokens; its worker ends as the fleet ends the
12
+ * proxy ship's crew. A proxy ship retired already is retired. A party whose
13
+ * ship the gateway never learned asks the fleet nothing. Adding it again is
14
+ * a new request.
15
+ */
16
+ export function createRetireParty(deps) {
17
+ return async ({ actor, as, name }) => {
18
+ if (!actor.scopes.includes(RETIRING_SCOPE)) {
19
+ return refuse('NOT_A_MANAGER', `Retiring an outside party needs ${RETIRING_SCOPE}`);
20
+ }
21
+ const party = await deps.parties.find(actor.fleetId, name);
22
+ if (party === undefined) {
23
+ return refuse('NO_SUCH_PARTY', `There is no outside party ${name}`);
24
+ }
25
+ if (party.proxyShipId !== null) {
26
+ const credential = await deps.credentialOf(actor, as);
27
+ if (!credential.isOk) {
28
+ return credential;
29
+ }
30
+ const retired = await deps.fleet.retire(credential.value, { shipId: party.proxyShipId });
31
+ if (!retired.isOk && retired.error.code === 'UNAVAILABLE') {
32
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not retire ${name}'s proxy ship: ${retired.error.message}`);
33
+ }
34
+ if (!retired.isOk && retired.error.code !== RETIRED_ALREADY) {
35
+ return refuse('RETIRE_REFUSED', retired.error.message);
36
+ }
37
+ }
38
+ await deps.parties.remove(actor.fleetId, name);
39
+ await deps.tokens.revokeParty(actor.fleetId, name);
40
+ return ok(undefined);
41
+ };
42
+ }
43
+ //# sourceMappingURL=retire-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retire-party.js","sourceRoot":"","sources":["../../../src/core/parties/retire-party.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAGtD,uFAAuF;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC;AAE7C,uFAAuF;AACvF,MAAM,eAAe,GAAG,UAAU,CAAC;AAMnC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAA8H;IAC9J,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,eAAe,EAAE,mCAAmC,cAAc,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,eAAe,EAAE,6BAA6B,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACrB,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YACzF,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC1D,OAAO,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,IAAI,kBAAkB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChH,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC5D,OAAO,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ShipId } from '@aeolus-fleet/common';
2
+ import type { McpServerCredential } from '../vault/credential.js';
3
+ import type { Party, PartyState } from './party.js';
4
+ interface ShownPartyBase {
5
+ name: string;
6
+ state: PartyState;
7
+ proxyShipId: ShipId | null;
8
+ }
9
+ /** A party as the gateway keeps it, for any actor to read: never its credential, secret or crew token. */
10
+ export type ShownParty = (ShownPartyBase & {
11
+ kind: 'mcpServer';
12
+ url: string;
13
+ credentialKind: McpServerCredential['kind'];
14
+ concurrencyLimit: number;
15
+ }) | (ShownPartyBase & {
16
+ kind: 'mcpClient';
17
+ clientId: string;
18
+ });
19
+ /** What the fleet holds for a party's proxy ship (decision 0056): none while it has no proxy ship, or the fleet does not answer. */
20
+ export interface FromFleet {
21
+ ownerShipId: ShipId | null;
22
+ scopes: string[] | null;
23
+ }
24
+ /** A party with its proxy ship's owner and scopes, read from the fleet. */
25
+ export type ListedParty = ShownParty & FromFleet;
26
+ export declare function shownPartyOf(party: Party): ShownParty;
27
+ export {};
@@ -0,0 +1,10 @@
1
+ export function shownPartyOf(party) {
2
+ const { name, state, proxyShipId } = party;
3
+ switch (party.kind) {
4
+ case 'mcpServer':
5
+ return { name, kind: party.kind, url: party.url, credentialKind: party.credential.kind, concurrencyLimit: party.concurrencyLimit, state, proxyShipId };
6
+ case 'mcpClient':
7
+ return { name, kind: party.kind, clientId: party.clientId, state, proxyShipId };
8
+ }
9
+ }
10
+ //# sourceMappingURL=shown-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shown-party.js","sourceRoot":"","sources":["../../../src/core/parties/shown-party.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC3C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QACzJ,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACpF,CAAC;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { type DomainError } from '../shared/errors.js';
2
+ import type { Result } from '../shared/result.js';
3
+ import type { CrewPersonShip } from './crew-person-ship.js';
4
+ import { type Dealt, type DealtError } from './opened-of.js';
5
+ import { type PersonCaller } from './person-crew.js';
6
+ import type { OpenedDeliveries, PersonCrews, PersonShipDoor } from './ports.js';
7
+ export type AnswerDelivery = (input: {
8
+ caller: PersonCaller;
9
+ deliveryId: string;
10
+ contentType: string;
11
+ payload: string;
12
+ }) => Promise<Result<Dealt, DealtError | DomainError<'SEND_REFUSED'>>>;
13
+ /**
14
+ * Use case: a person answers a delivery they opened (Q20): a reply to its
15
+ * sender, in reply to its message, then it is handled. The reply's key is
16
+ * the delivery's, so an answer tried again after the fleet did not take
17
+ * handled is sent once.
18
+ */
19
+ export declare function createAnswerDelivery(deps: {
20
+ crewPersonShip: CrewPersonShip;
21
+ crews: PersonCrews;
22
+ door: PersonShipDoor;
23
+ opened: OpenedDeliveries;
24
+ }): AnswerDelivery;