@aeolus-fleet/gateway 0.0.0-stage → 0.0.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 (474) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +104 -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/request-hasher.d.ts +3 -0
  10. package/dist/adapters/crypto/request-hasher.js +4 -0
  11. package/dist/adapters/crypto/request-hasher.js.map +1 -0
  12. package/dist/adapters/crypto/request-ids.d.ts +4 -0
  13. package/dist/adapters/crypto/request-ids.js +14 -0
  14. package/dist/adapters/crypto/request-ids.js.map +1 -0
  15. package/dist/adapters/crypto/sealer.d.ts +14 -0
  16. package/dist/adapters/crypto/sealer.js +41 -0
  17. package/dist/adapters/crypto/sealer.js.map +1 -0
  18. package/dist/adapters/crypto/ship-aliases.d.ts +7 -0
  19. package/dist/adapters/crypto/ship-aliases.js +19 -0
  20. package/dist/adapters/crypto/ship-aliases.js.map +1 -0
  21. package/dist/adapters/crypto/sign-in-seals.d.ts +7 -0
  22. package/dist/adapters/crypto/sign-in-seals.js +27 -0
  23. package/dist/adapters/crypto/sign-in-seals.js.map +1 -0
  24. package/dist/adapters/crypto/waiting-seals.d.ts +3 -0
  25. package/dist/adapters/crypto/waiting-seals.js +24 -0
  26. package/dist/adapters/crypto/waiting-seals.js.map +1 -0
  27. package/dist/adapters/fleet/console-sessions.d.ts +2 -0
  28. package/dist/adapters/fleet/console-sessions.js +23 -0
  29. package/dist/adapters/fleet/console-sessions.js.map +1 -0
  30. package/dist/adapters/fleet/core-version.d.ts +11 -0
  31. package/dist/adapters/fleet/core-version.js +59 -0
  32. package/dist/adapters/fleet/core-version.js.map +1 -0
  33. package/dist/adapters/fleet/fleet-network.d.ts +2 -0
  34. package/dist/adapters/fleet/fleet-network.js +44 -0
  35. package/dist/adapters/fleet/fleet-network.js.map +1 -0
  36. package/dist/adapters/fleet/rest-fleet-door.d.ts +14 -0
  37. package/dist/adapters/fleet/rest-fleet-door.js +189 -0
  38. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -0
  39. package/dist/adapters/http/html.d.ts +15 -0
  40. package/dist/adapters/http/html.js +53 -0
  41. package/dist/adapters/http/html.js.map +1 -0
  42. package/dist/adapters/http/live.d.ts +29 -0
  43. package/dist/adapters/http/live.js +100 -0
  44. package/dist/adapters/http/live.js.map +1 -0
  45. package/dist/adapters/http/mcp-endpoint.d.ts +20 -0
  46. package/dist/adapters/http/mcp-endpoint.js +164 -0
  47. package/dist/adapters/http/mcp-endpoint.js.map +1 -0
  48. package/dist/adapters/http/mcp-task.d.ts +45 -0
  49. package/dist/adapters/http/mcp-task.js +35 -0
  50. package/dist/adapters/http/mcp-task.js.map +1 -0
  51. package/dist/adapters/http/oauth-routes.d.ts +35 -0
  52. package/dist/adapters/http/oauth-routes.js +305 -0
  53. package/dist/adapters/http/oauth-routes.js.map +1 -0
  54. package/dist/adapters/http/outside-parties-page.d.ts +6 -0
  55. package/dist/adapters/http/outside-parties-page.js +149 -0
  56. package/dist/adapters/http/outside-parties-page.js.map +1 -0
  57. package/dist/adapters/http/overview-page.d.ts +16 -0
  58. package/dist/adapters/http/overview-page.js +255 -0
  59. package/dist/adapters/http/overview-page.js.map +1 -0
  60. package/dist/adapters/http/parties-page.d.ts +6 -0
  61. package/dist/adapters/http/parties-page.js +141 -0
  62. package/dist/adapters/http/parties-page.js.map +1 -0
  63. package/dist/adapters/http/person-tools.d.ts +22 -0
  64. package/dist/adapters/http/person-tools.js +98 -0
  65. package/dist/adapters/http/person-tools.js.map +1 -0
  66. package/dist/adapters/http/signal.d.ts +52 -0
  67. package/dist/adapters/http/signal.js +220 -0
  68. package/dist/adapters/http/signal.js.map +1 -0
  69. package/dist/adapters/http/version.d.ts +6 -0
  70. package/dist/adapters/http/version.js +12 -0
  71. package/dist/adapters/http/version.js.map +1 -0
  72. package/dist/adapters/mcp/mcp-servers.d.ts +2 -0
  73. package/dist/adapters/mcp/mcp-servers.js +154 -0
  74. package/dist/adapters/mcp/mcp-servers.js.map +1 -0
  75. package/dist/adapters/oauth/client-metadata-documents.d.ts +9 -0
  76. package/dist/adapters/oauth/client-metadata-documents.js +25 -0
  77. package/dist/adapters/oauth/client-metadata-documents.js.map +1 -0
  78. package/dist/adapters/pagasae/pagasae-client.d.ts +8 -0
  79. package/dist/adapters/pagasae/pagasae-client.js +90 -0
  80. package/dist/adapters/pagasae/pagasae-client.js.map +1 -0
  81. package/dist/adapters/prisma/account-grants.d.ts +4 -0
  82. package/dist/adapters/prisma/account-grants.js +27 -0
  83. package/dist/adapters/prisma/account-grants.js.map +1 -0
  84. package/dist/adapters/prisma/calls.d.ts +4 -0
  85. package/dist/adapters/prisma/calls.js +35 -0
  86. package/dist/adapters/prisma/calls.js.map +1 -0
  87. package/dist/adapters/prisma/changes.d.ts +21 -0
  88. package/dist/adapters/prisma/changes.js +86 -0
  89. package/dist/adapters/prisma/changes.js.map +1 -0
  90. package/dist/adapters/prisma/client-calls.d.ts +4 -0
  91. package/dist/adapters/prisma/client-calls.js +50 -0
  92. package/dist/adapters/prisma/client-calls.js.map +1 -0
  93. package/dist/adapters/prisma/client.d.ts +8 -0
  94. package/dist/adapters/prisma/client.js +11 -0
  95. package/dist/adapters/prisma/client.js.map +1 -0
  96. package/dist/adapters/prisma/connection-store.d.ts +4 -0
  97. package/dist/adapters/prisma/connection-store.js +28 -0
  98. package/dist/adapters/prisma/connection-store.js.map +1 -0
  99. package/dist/adapters/prisma/fleet-forgetter.d.ts +4 -0
  100. package/dist/adapters/prisma/fleet-forgetter.js +10 -0
  101. package/dist/adapters/prisma/fleet-forgetter.js.map +1 -0
  102. package/dist/adapters/prisma/fleet-switches.d.ts +4 -0
  103. package/dist/adapters/prisma/fleet-switches.js +10 -0
  104. package/dist/adapters/prisma/fleet-switches.js.map +1 -0
  105. package/dist/adapters/prisma/generated/browser.d.ts +108 -0
  106. package/dist/adapters/prisma/generated/browser.js +18 -0
  107. package/dist/adapters/prisma/generated/browser.js.map +1 -0
  108. package/dist/adapters/prisma/generated/client.d.ts +127 -0
  109. package/dist/adapters/prisma/generated/client.js +38 -0
  110. package/dist/adapters/prisma/generated/client.js.map +1 -0
  111. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +490 -0
  112. package/dist/adapters/prisma/generated/commonInputTypes.js +11 -0
  113. package/dist/adapters/prisma/generated/commonInputTypes.js.map +1 -0
  114. package/dist/adapters/prisma/generated/enums.d.ts +1 -0
  115. package/dist/adapters/prisma/generated/enums.js +12 -0
  116. package/dist/adapters/prisma/generated/enums.js.map +1 -0
  117. package/dist/adapters/prisma/generated/internal/class.d.ts +319 -0
  118. package/dist/adapters/prisma/generated/internal/class.js +50 -0
  119. package/dist/adapters/prisma/generated/internal/class.js.map +1 -0
  120. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +2102 -0
  121. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +294 -0
  122. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -0
  123. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +273 -0
  124. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +264 -0
  125. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
  126. package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +1056 -0
  127. package/dist/adapters/prisma/generated/models/AccountGrant.js +2 -0
  128. package/dist/adapters/prisma/generated/models/AccountGrant.js.map +1 -0
  129. package/dist/adapters/prisma/generated/models/AuthorizationCode.d.ts +1171 -0
  130. package/dist/adapters/prisma/generated/models/AuthorizationCode.js +2 -0
  131. package/dist/adapters/prisma/generated/models/AuthorizationCode.js.map +1 -0
  132. package/dist/adapters/prisma/generated/models/Call.d.ts +994 -0
  133. package/dist/adapters/prisma/generated/models/Call.js +2 -0
  134. package/dist/adapters/prisma/generated/models/Call.js.map +1 -0
  135. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +1119 -0
  136. package/dist/adapters/prisma/generated/models/ClientCall.js +2 -0
  137. package/dist/adapters/prisma/generated/models/ClientCall.js.map +1 -0
  138. package/dist/adapters/prisma/generated/models/ClientCallReply.d.ts +1129 -0
  139. package/dist/adapters/prisma/generated/models/ClientCallReply.js +2 -0
  140. package/dist/adapters/prisma/generated/models/ClientCallReply.js.map +1 -0
  141. package/dist/adapters/prisma/generated/models/Connection.d.ts +1011 -0
  142. package/dist/adapters/prisma/generated/models/Connection.js +2 -0
  143. package/dist/adapters/prisma/generated/models/Connection.js.map +1 -0
  144. package/dist/adapters/prisma/generated/models/FleetSwitch.d.ts +945 -0
  145. package/dist/adapters/prisma/generated/models/FleetSwitch.js +2 -0
  146. package/dist/adapters/prisma/generated/models/FleetSwitch.js.map +1 -0
  147. package/dist/adapters/prisma/generated/models/InstallationRequest.d.ts +1030 -0
  148. package/dist/adapters/prisma/generated/models/InstallationRequest.js +2 -0
  149. package/dist/adapters/prisma/generated/models/InstallationRequest.js.map +1 -0
  150. package/dist/adapters/prisma/generated/models/IssuedToken.d.ts +1224 -0
  151. package/dist/adapters/prisma/generated/models/IssuedToken.js +2 -0
  152. package/dist/adapters/prisma/generated/models/IssuedToken.js.map +1 -0
  153. package/dist/adapters/prisma/generated/models/OAuthClient.d.ts +1005 -0
  154. package/dist/adapters/prisma/generated/models/OAuthClient.js +2 -0
  155. package/dist/adapters/prisma/generated/models/OAuthClient.js.map +1 -0
  156. package/dist/adapters/prisma/generated/models/OpenedDelivery.d.ts +1087 -0
  157. package/dist/adapters/prisma/generated/models/OpenedDelivery.js +2 -0
  158. package/dist/adapters/prisma/generated/models/OpenedDelivery.js.map +1 -0
  159. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.d.ts +942 -0
  160. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js +2 -0
  161. package/dist/adapters/prisma/generated/models/OutsidePartySwitch.js.map +1 -0
  162. package/dist/adapters/prisma/generated/models/OwnerQuestion.d.ts +1035 -0
  163. package/dist/adapters/prisma/generated/models/OwnerQuestion.js +2 -0
  164. package/dist/adapters/prisma/generated/models/OwnerQuestion.js.map +1 -0
  165. package/dist/adapters/prisma/generated/models/Party.d.ts +1338 -0
  166. package/dist/adapters/prisma/generated/models/Party.js +2 -0
  167. package/dist/adapters/prisma/generated/models/Party.js.map +1 -0
  168. package/dist/adapters/prisma/generated/models/PendingRequest.d.ts +1252 -0
  169. package/dist/adapters/prisma/generated/models/PendingRequest.js +2 -0
  170. package/dist/adapters/prisma/generated/models/PendingRequest.js.map +1 -0
  171. package/dist/adapters/prisma/generated/models/PersonCrew.d.ts +974 -0
  172. package/dist/adapters/prisma/generated/models/PersonCrew.js +2 -0
  173. package/dist/adapters/prisma/generated/models/PersonCrew.js.map +1 -0
  174. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.d.ts +1120 -0
  175. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js +2 -0
  176. package/dist/adapters/prisma/generated/models/RequestOutcomeNotice.js.map +1 -0
  177. package/dist/adapters/prisma/generated/models/ToolMark.d.ts +947 -0
  178. package/dist/adapters/prisma/generated/models/ToolMark.js +2 -0
  179. package/dist/adapters/prisma/generated/models/ToolMark.js.map +1 -0
  180. package/dist/adapters/prisma/generated/models.d.ts +19 -0
  181. package/dist/adapters/prisma/generated/models.js +2 -0
  182. package/dist/adapters/prisma/generated/models.js.map +1 -0
  183. package/dist/adapters/prisma/installation-requests.d.ts +4 -0
  184. package/dist/adapters/prisma/installation-requests.js +25 -0
  185. package/dist/adapters/prisma/installation-requests.js.map +1 -0
  186. package/dist/adapters/prisma/migrate.d.ts +5 -0
  187. package/dist/adapters/prisma/migrate.js +53 -0
  188. package/dist/adapters/prisma/migrate.js.map +1 -0
  189. package/dist/adapters/prisma/oauth-stores.d.ts +5 -0
  190. package/dist/adapters/prisma/oauth-stores.js +82 -0
  191. package/dist/adapters/prisma/oauth-stores.js.map +1 -0
  192. package/dist/adapters/prisma/opened-deliveries.d.ts +4 -0
  193. package/dist/adapters/prisma/opened-deliveries.js +29 -0
  194. package/dist/adapters/prisma/opened-deliveries.js.map +1 -0
  195. package/dist/adapters/prisma/outcome-notices.d.ts +4 -0
  196. package/dist/adapters/prisma/outcome-notices.js +24 -0
  197. package/dist/adapters/prisma/outcome-notices.js.map +1 -0
  198. package/dist/adapters/prisma/outside-party-switches.d.ts +4 -0
  199. package/dist/adapters/prisma/outside-party-switches.js +10 -0
  200. package/dist/adapters/prisma/outside-party-switches.js.map +1 -0
  201. package/dist/adapters/prisma/owner-questions.d.ts +8 -0
  202. package/dist/adapters/prisma/owner-questions.js +54 -0
  203. package/dist/adapters/prisma/owner-questions.js.map +1 -0
  204. package/dist/adapters/prisma/party-store.d.ts +7 -0
  205. package/dist/adapters/prisma/party-store.js +73 -0
  206. package/dist/adapters/prisma/party-store.js.map +1 -0
  207. package/dist/adapters/prisma/pending-requests.d.ts +11 -0
  208. package/dist/adapters/prisma/pending-requests.js +122 -0
  209. package/dist/adapters/prisma/pending-requests.js.map +1 -0
  210. package/dist/adapters/prisma/person-crews.d.ts +4 -0
  211. package/dist/adapters/prisma/person-crews.js +18 -0
  212. package/dist/adapters/prisma/person-crews.js.map +1 -0
  213. package/dist/adapters/prisma/tool-marks.d.ts +4 -0
  214. package/dist/adapters/prisma/tool-marks.js +15 -0
  215. package/dist/adapters/prisma/tool-marks.js.map +1 -0
  216. package/dist/adapters/timers/sleep.d.ts +3 -0
  217. package/dist/adapters/timers/sleep.js +11 -0
  218. package/dist/adapters/timers/sleep.js.map +1 -0
  219. package/dist/adapters/trpc/router.d.ts +408 -0
  220. package/dist/adapters/trpc/router.js +367 -0
  221. package/dist/adapters/trpc/router.js.map +1 -0
  222. package/dist/app.d.ts +43 -0
  223. package/dist/app.js +400 -0
  224. package/dist/app.js.map +1 -0
  225. package/dist/bin/aeolus-gateway.d.ts +2 -0
  226. package/dist/bin/aeolus-gateway.js +65 -0
  227. package/dist/bin/aeolus-gateway.js.map +1 -0
  228. package/dist/config.d.ts +41 -0
  229. package/dist/config.js +65 -0
  230. package/dist/config.js.map +1 -0
  231. package/dist/core/actors/authenticate-actor.d.ts +38 -0
  232. package/dist/core/actors/authenticate-actor.js +30 -0
  233. package/dist/core/actors/authenticate-actor.js.map +1 -0
  234. package/dist/core/connection/connect.d.ts +26 -0
  235. package/dist/core/connection/connect.js +57 -0
  236. package/dist/core/connection/connect.js.map +1 -0
  237. package/dist/core/connection/ports.d.ts +87 -0
  238. package/dist/core/connection/ports.js +2 -0
  239. package/dist/core/connection/ports.js.map +1 -0
  240. package/dist/core/connection/read-connection.d.ts +14 -0
  241. package/dist/core/connection/read-connection.js +24 -0
  242. package/dist/core/connection/read-connection.js.map +1 -0
  243. package/dist/core/installation/delete-fleet.d.ts +21 -0
  244. package/dist/core/installation/delete-fleet.js +21 -0
  245. package/dist/core/installation/delete-fleet.js.map +1 -0
  246. package/dist/core/installation/ports.d.ts +43 -0
  247. package/dist/core/installation/ports.js +2 -0
  248. package/dist/core/installation/ports.js.map +1 -0
  249. package/dist/core/installation/read-fleet.d.ts +18 -0
  250. package/dist/core/installation/read-fleet.js +9 -0
  251. package/dist/core/installation/read-fleet.js.map +1 -0
  252. package/dist/core/installation/request-id.d.ts +8 -0
  253. package/dist/core/installation/request-id.js +10 -0
  254. package/dist/core/installation/request-id.js.map +1 -0
  255. package/dist/core/installation/served.d.ts +12 -0
  256. package/dist/core/installation/served.js +8 -0
  257. package/dist/core/installation/served.js.map +1 -0
  258. package/dist/core/installation/set-fleet-enabled.d.ts +25 -0
  259. package/dist/core/installation/set-fleet-enabled.js +22 -0
  260. package/dist/core/installation/set-fleet-enabled.js.map +1 -0
  261. package/dist/core/mcp-in/call-tool.d.ts +42 -0
  262. package/dist/core/mcp-in/call-tool.js +82 -0
  263. package/dist/core/mcp-in/call-tool.js.map +1 -0
  264. package/dist/core/mcp-in/client-call.d.ts +51 -0
  265. package/dist/core/mcp-in/client-call.js +39 -0
  266. package/dist/core/mcp-in/client-call.js.map +1 -0
  267. package/dist/core/mcp-in/collect-replies.d.ts +29 -0
  268. package/dist/core/mcp-in/collect-replies.js +44 -0
  269. package/dist/core/mcp-in/collect-replies.js.map +1 -0
  270. package/dist/core/mcp-in/list-tools.d.ts +44 -0
  271. package/dist/core/mcp-in/list-tools.js +70 -0
  272. package/dist/core/mcp-in/list-tools.js.map +1 -0
  273. package/dist/core/mcp-in/ports.d.ts +85 -0
  274. package/dist/core/mcp-in/ports.js +2 -0
  275. package/dist/core/mcp-in/ports.js.map +1 -0
  276. package/dist/core/mcp-in/read-client-call.d.ts +23 -0
  277. package/dist/core/mcp-in/read-client-call.js +15 -0
  278. package/dist/core/mcp-in/read-client-call.js.map +1 -0
  279. package/dist/core/mcp-out/content-types.d.ts +12 -0
  280. package/dist/core/mcp-out/content-types.js +28 -0
  281. package/dist/core/mcp-out/content-types.js.map +1 -0
  282. package/dist/core/mcp-out/hand-call.d.ts +103 -0
  283. package/dist/core/mcp-out/hand-call.js +116 -0
  284. package/dist/core/mcp-out/hand-call.js.map +1 -0
  285. package/dist/core/mcp-out/mark-tool.d.ts +20 -0
  286. package/dist/core/mcp-out/mark-tool.js +17 -0
  287. package/dist/core/mcp-out/mark-tool.js.map +1 -0
  288. package/dist/core/mcp-out/ports.d.ts +66 -0
  289. package/dist/core/mcp-out/ports.js +2 -0
  290. package/dist/core/mcp-out/ports.js.map +1 -0
  291. package/dist/core/mcp-out/run-party.d.ts +26 -0
  292. package/dist/core/mcp-out/run-party.js +62 -0
  293. package/dist/core/mcp-out/run-party.js.map +1 -0
  294. package/dist/core/mcp-out/state-party.d.ts +38 -0
  295. package/dist/core/mcp-out/state-party.js +30 -0
  296. package/dist/core/mcp-out/state-party.js.map +1 -0
  297. package/dist/core/mcp-out/statement.d.ts +26 -0
  298. package/dist/core/mcp-out/statement.js +32 -0
  299. package/dist/core/mcp-out/statement.js.map +1 -0
  300. package/dist/core/oauth/authenticate-access-token.d.ts +25 -0
  301. package/dist/core/oauth/authenticate-access-token.js +19 -0
  302. package/dist/core/oauth/authenticate-access-token.js.map +1 -0
  303. package/dist/core/oauth/exchange-token.d.ts +32 -0
  304. package/dist/core/oauth/exchange-token.js +98 -0
  305. package/dist/core/oauth/exchange-token.js.map +1 -0
  306. package/dist/core/oauth/issue-code.d.ts +23 -0
  307. package/dist/core/oauth/issue-code.js +34 -0
  308. package/dist/core/oauth/issue-code.js.map +1 -0
  309. package/dist/core/oauth/ports.d.ts +103 -0
  310. package/dist/core/oauth/ports.js +2 -0
  311. package/dist/core/oauth/ports.js.map +1 -0
  312. package/dist/core/oauth/read-authorization.d.ts +43 -0
  313. package/dist/core/oauth/read-authorization.js +74 -0
  314. package/dist/core/oauth/read-authorization.js.map +1 -0
  315. package/dist/core/oauth/redirect-uri.d.ts +6 -0
  316. package/dist/core/oauth/redirect-uri.js +20 -0
  317. package/dist/core/oauth/redirect-uri.js.map +1 -0
  318. package/dist/core/oauth/register-client.d.ts +22 -0
  319. package/dist/core/oauth/register-client.js +20 -0
  320. package/dist/core/oauth/register-client.js.map +1 -0
  321. package/dist/core/operator/authenticate-operator.d.ts +22 -0
  322. package/dist/core/operator/authenticate-operator.js +26 -0
  323. package/dist/core/operator/authenticate-operator.js.map +1 -0
  324. package/dist/core/operator/ports.d.ts +15 -0
  325. package/dist/core/operator/ports.js +2 -0
  326. package/dist/core/operator/ports.js.map +1 -0
  327. package/dist/core/outside-parties/ports.d.ts +21 -0
  328. package/dist/core/outside-parties/ports.js +2 -0
  329. package/dist/core/outside-parties/ports.js.map +1 -0
  330. package/dist/core/outside-parties/set-outside-parties.d.ts +34 -0
  331. package/dist/core/outside-parties/set-outside-parties.js +34 -0
  332. package/dist/core/outside-parties/set-outside-parties.js.map +1 -0
  333. package/dist/core/parties/approve-party.d.ts +55 -0
  334. package/dist/core/parties/approve-party.js +111 -0
  335. package/dist/core/parties/approve-party.js.map +1 -0
  336. package/dist/core/parties/crew-party.d.ts +21 -0
  337. package/dist/core/parties/crew-party.js +29 -0
  338. package/dist/core/parties/crew-party.js.map +1 -0
  339. package/dist/core/parties/list-parties.d.ts +8 -0
  340. package/dist/core/parties/list-parties.js +8 -0
  341. package/dist/core/parties/list-parties.js.map +1 -0
  342. package/dist/core/parties/party.d.ts +46 -0
  343. package/dist/core/parties/party.js +2 -0
  344. package/dist/core/parties/party.js.map +1 -0
  345. package/dist/core/parties/ports.d.ts +39 -0
  346. package/dist/core/parties/ports.js +2 -0
  347. package/dist/core/parties/ports.js.map +1 -0
  348. package/dist/core/parties/shown-party.d.ts +21 -0
  349. package/dist/core/parties/shown-party.js +10 -0
  350. package/dist/core/parties/shown-party.js.map +1 -0
  351. package/dist/core/people/answer-delivery.d.ts +24 -0
  352. package/dist/core/people/answer-delivery.js +28 -0
  353. package/dist/core/people/answer-delivery.js.map +1 -0
  354. package/dist/core/people/crew-person-ship.d.ts +42 -0
  355. package/dist/core/people/crew-person-ship.js +59 -0
  356. package/dist/core/people/crew-person-ship.js.map +1 -0
  357. package/dist/core/people/done-delivery.d.ts +16 -0
  358. package/dist/core/people/done-delivery.js +9 -0
  359. package/dist/core/people/done-delivery.js.map +1 -0
  360. package/dist/core/people/inbox-entry.d.ts +14 -0
  361. package/dist/core/people/inbox-entry.js +11 -0
  362. package/dist/core/people/inbox-entry.js.map +1 -0
  363. package/dist/core/people/open-delivery.d.ts +30 -0
  364. package/dist/core/people/open-delivery.js +40 -0
  365. package/dist/core/people/open-delivery.js.map +1 -0
  366. package/dist/core/people/opened-of.d.ts +29 -0
  367. package/dist/core/people/opened-of.js +30 -0
  368. package/dist/core/people/opened-of.js.map +1 -0
  369. package/dist/core/people/person-crew.d.ts +39 -0
  370. package/dist/core/people/person-crew.js +61 -0
  371. package/dist/core/people/person-crew.js.map +1 -0
  372. package/dist/core/people/ports.d.ts +102 -0
  373. package/dist/core/people/ports.js +2 -0
  374. package/dist/core/people/ports.js.map +1 -0
  375. package/dist/core/people/read-inbox.d.ts +37 -0
  376. package/dist/core/people/read-inbox.js +36 -0
  377. package/dist/core/people/read-inbox.js.map +1 -0
  378. package/dist/core/requests/ask-for-client.d.ts +45 -0
  379. package/dist/core/requests/ask-for-client.js +33 -0
  380. package/dist/core/requests/ask-for-client.js.map +1 -0
  381. package/dist/core/requests/ask-for-server.d.ts +32 -0
  382. package/dist/core/requests/ask-for-server.js +42 -0
  383. package/dist/core/requests/ask-for-server.js.map +1 -0
  384. package/dist/core/requests/ask-owners.d.ts +28 -0
  385. package/dist/core/requests/ask-owners.js +85 -0
  386. package/dist/core/requests/ask-owners.js.map +1 -0
  387. package/dist/core/requests/decide-request.d.ts +53 -0
  388. package/dist/core/requests/decide-request.js +75 -0
  389. package/dist/core/requests/decide-request.js.map +1 -0
  390. package/dist/core/requests/expire-requests.d.ts +14 -0
  391. package/dist/core/requests/expire-requests.js +21 -0
  392. package/dist/core/requests/expire-requests.js.map +1 -0
  393. package/dist/core/requests/list-to-decide.d.ts +11 -0
  394. package/dist/core/requests/list-to-decide.js +13 -0
  395. package/dist/core/requests/list-to-decide.js.map +1 -0
  396. package/dist/core/requests/open-request.d.ts +21 -0
  397. package/dist/core/requests/open-request.js +26 -0
  398. package/dist/core/requests/open-request.js.map +1 -0
  399. package/dist/core/requests/outcome-notice.d.ts +13 -0
  400. package/dist/core/requests/outcome-notice.js +26 -0
  401. package/dist/core/requests/outcome-notice.js.map +1 -0
  402. package/dist/core/requests/ports.d.ts +186 -0
  403. package/dist/core/requests/ports.js +2 -0
  404. package/dist/core/requests/ports.js.map +1 -0
  405. package/dist/core/requests/read-waiting.d.ts +46 -0
  406. package/dist/core/requests/read-waiting.js +41 -0
  407. package/dist/core/requests/read-waiting.js.map +1 -0
  408. package/dist/core/requests/request-state.d.ts +5 -0
  409. package/dist/core/requests/request-state.js +10 -0
  410. package/dist/core/requests/request-state.js.map +1 -0
  411. package/dist/core/requests/tell-outcomes.d.ts +24 -0
  412. package/dist/core/requests/tell-outcomes.js +39 -0
  413. package/dist/core/requests/tell-outcomes.js.map +1 -0
  414. package/dist/core/requests/watch-waiting.d.ts +32 -0
  415. package/dist/core/requests/watch-waiting.js +31 -0
  416. package/dist/core/requests/watch-waiting.js.map +1 -0
  417. package/dist/core/shared/clock.d.ts +4 -0
  418. package/dist/core/shared/clock.js +2 -0
  419. package/dist/core/shared/clock.js.map +1 -0
  420. package/dist/core/shared/errors.d.ts +10 -0
  421. package/dist/core/shared/errors.js +6 -0
  422. package/dist/core/shared/errors.js.map +1 -0
  423. package/dist/core/shared/result.d.ts +16 -0
  424. package/dist/core/shared/result.js +7 -0
  425. package/dist/core/shared/result.js.map +1 -0
  426. package/dist/core/sign-in/account-token.d.ts +38 -0
  427. package/dist/core/sign-in/account-token.js +46 -0
  428. package/dist/core/sign-in/account-token.js.map +1 -0
  429. package/dist/core/sign-in/complete-sign-in.d.ts +55 -0
  430. package/dist/core/sign-in/complete-sign-in.js +50 -0
  431. package/dist/core/sign-in/complete-sign-in.js.map +1 -0
  432. package/dist/core/sign-in/end-sign-ins.d.ts +19 -0
  433. package/dist/core/sign-in/end-sign-ins.js +17 -0
  434. package/dist/core/sign-in/end-sign-ins.js.map +1 -0
  435. package/dist/core/sign-in/ports.d.ts +85 -0
  436. package/dist/core/sign-in/ports.js +2 -0
  437. package/dist/core/sign-in/ports.js.map +1 -0
  438. package/dist/core/sign-in/start-sign-in.d.ts +30 -0
  439. package/dist/core/sign-in/start-sign-in.js +25 -0
  440. package/dist/core/sign-in/start-sign-in.js.map +1 -0
  441. package/dist/core/vault/credential.d.ts +18 -0
  442. package/dist/core/vault/credential.js +2 -0
  443. package/dist/core/vault/credential.js.map +1 -0
  444. package/dist/outcome-worker.d.ts +29 -0
  445. package/dist/outcome-worker.js +60 -0
  446. package/dist/outcome-worker.js.map +1 -0
  447. package/dist/party-workers.d.ts +32 -0
  448. package/dist/party-workers.js +57 -0
  449. package/dist/party-workers.js.map +1 -0
  450. package/package.json +70 -4
  451. package/prisma.config.ts +18 -0
  452. package/src/adapters/prisma/migrations/20261018200000_init/migration.sql +35 -0
  453. package/src/adapters/prisma/migrations/20261018210000_parties/migration.sql +19 -0
  454. package/src/adapters/prisma/migrations/20261018220000_tool_marks/migration.sql +8 -0
  455. package/src/adapters/prisma/migrations/20261018230000_calls/migration.sql +13 -0
  456. package/src/adapters/prisma/migrations/20261019090000_oauth/migration.sql +60 -0
  457. package/src/adapters/prisma/migrations/20261019100000_client_parties/migration.sql +8 -0
  458. package/src/adapters/prisma/migrations/20261019110000_oauth_parties/migration.sql +5 -0
  459. package/src/adapters/prisma/migrations/20261019120000_client_calls/migration.sql +15 -0
  460. package/src/adapters/prisma/migrations/20261019130000_client_call_replies/migration.sql +20 -0
  461. package/src/adapters/prisma/migrations/20261019140000_identity_providers/migration.sql +10 -0
  462. package/src/adapters/prisma/migrations/20261020090000_no_identity_providers/migration.sql +2 -0
  463. package/src/adapters/prisma/migrations/20261020100000_account_grants_in_tokens/migration.sql +5 -0
  464. package/src/adapters/prisma/migrations/20261020110000_account_grants/migration.sql +15 -0
  465. package/src/adapters/prisma/migrations/20261020120000_person_crews/migration.sql +9 -0
  466. package/src/adapters/prisma/migrations/20261020130000_opened_deliveries/migration.sql +13 -0
  467. package/src/adapters/prisma/migrations/20261020140000_pending_requests/migration.sql +26 -0
  468. package/src/adapters/prisma/migrations/20261020150000_outside_party_switches/migration.sql +8 -0
  469. package/src/adapters/prisma/migrations/20261020160000_pending_requests_told/migration.sql +2 -0
  470. package/src/adapters/prisma/migrations/20261020170000_request_outcome_notices/migration.sql +17 -0
  471. package/src/adapters/prisma/migrations/20261020180000_owner_questions/migration.sql +11 -0
  472. package/src/adapters/prisma/migrations/20261020190000_request_changes/migration.sql +12 -0
  473. package/src/adapters/prisma/migrations/migration_lock.toml +3 -0
  474. package/src/adapters/prisma/schema.prisma +311 -0
@@ -0,0 +1,103 @@
1
+ import { type DeliveryId, type FleetId, type MessageId, type ShipId } from '@aeolus-fleet/common';
2
+ import type { FleetRefusal } from '../connection/ports.js';
3
+ import type { McpServerParty } from '../parties/party.js';
4
+ import type { Result } from '../shared/result.js';
5
+ import type { McpServers } from './ports.js';
6
+ import type { ToolMarks } from './state-party.js';
7
+ /** A delivery to a proxy ship, as its pushReceive hands it: received, or handed before under this lease with its last number. */
8
+ export interface PushedDelivery {
9
+ readonly deliveryId: DeliveryId;
10
+ readonly messageId: MessageId;
11
+ readonly senderShipId: ShipId;
12
+ readonly contentType: string;
13
+ readonly payload: string;
14
+ readonly state: 'received' | 'handed';
15
+ readonly handOverNumber: number | null;
16
+ /** The message this one replies to, if any. */
17
+ readonly inReplyTo: MessageId | null;
18
+ }
19
+ /** A reply naming the request, sent as the proxy ship. */
20
+ export interface Reply {
21
+ readonly to: ShipId;
22
+ readonly inReplyTo: MessageId;
23
+ readonly contentType: string;
24
+ readonly payload: string;
25
+ readonly idempotencyKey: string;
26
+ }
27
+ /** Outbound port: the fleet's calls a proxy ship's crew makes (decision 0040), each with its crew token. */
28
+ export interface ProxyShipCrew {
29
+ /** Its deliveries, up to max: its own in flight first, then pending ones, each received; it waits a while for one, or less once the signal aborts. */
30
+ pushReceive(crewToken: string, take: {
31
+ max: number;
32
+ signal: AbortSignal;
33
+ }): Promise<Result<PushedDelivery[], FleetRefusal>>;
34
+ handed(crewToken: string, handOver: {
35
+ deliveryId: DeliveryId;
36
+ handOverNumber: number;
37
+ }): Promise<Result<'handed' | 'acknowledged' | 'undeliverable', FleetRefusal>>;
38
+ reply(crewToken: string, reply: Reply): Promise<Result<void, FleetRefusal>>;
39
+ ack(crewToken: string, deliveryId: DeliveryId): Promise<Result<void, FleetRefusal>>;
40
+ handled(crewToken: string, deliveryId: DeliveryId): Promise<Result<void, FleetRefusal>>;
41
+ notHandled(crewToken: string, report: {
42
+ deliveryId: DeliveryId;
43
+ reason: string;
44
+ }): Promise<Result<void, FleetRefusal>>;
45
+ }
46
+ /**
47
+ * What the gateway keeps of a call, so a restart never calls again what may have run:
48
+ * - calling: handed, and its `tools/call` sent or about to be;
49
+ * - notSent: the server was not reached, so nothing ran;
50
+ * - answered: the server answered, and its reply is kept until it is sent;
51
+ * - mayHaveRun: sent with no answer, and its tool is not marked repeatable;
52
+ * - done: replied, acknowledged and handled.
53
+ */
54
+ export interface Call {
55
+ readonly deliveryId: DeliveryId;
56
+ readonly fleetId: FleetId;
57
+ readonly party: string;
58
+ readonly state: 'calling' | 'notSent' | 'answered' | 'mayHaveRun' | 'done';
59
+ readonly reply: Reply | null;
60
+ }
61
+ /** Outbound port: the gateway's calls, by delivery. */
62
+ export interface CallStore {
63
+ find(deliveryId: DeliveryId): Promise<Call | undefined>;
64
+ save(call: Call): Promise<void>;
65
+ }
66
+ /**
67
+ * How handing one delivery ended:
68
+ * - handled: replied, acknowledged and handled;
69
+ * - again: nothing ran, or running it again is safe: the delivery comes again in flight, to be handed with the next number;
70
+ * - notHandled: the call may have run and its answer was lost, so a human decides (5.2, option a);
71
+ * - undeliverable: the fifth attempt; nothing is handed.
72
+ */
73
+ export type HandOutcome = {
74
+ readonly kind: 'handled';
75
+ } | {
76
+ readonly kind: 'again';
77
+ } | {
78
+ readonly kind: 'notHandled';
79
+ } | {
80
+ readonly kind: 'undeliverable';
81
+ };
82
+ export type HandCall = (input: {
83
+ party: McpServerParty;
84
+ delivery: PushedDelivery;
85
+ }) => Promise<HandOutcome>;
86
+ /** The reason a call that may have run is not handled, as Needs attention shows it. */
87
+ export declare const MAY_HAVE_RUN = "The call may have run; its answer was lost. Check the outside system, then resend or dismiss.";
88
+ /**
89
+ * Use case: the gateway hands one delivery of a party's proxy ship to its
90
+ * outside MCP server, as 0040 hands one to an agent (interop 5.2): handed
91
+ * with the next number, then `tools/call`; the server's answer confirms it,
92
+ * so it is replied, acknowledged and handled at once. The answer is kept
93
+ * before the reply, so a restart replies again under the same key and calls
94
+ * nothing. A call that died unanswered is handed again only where argo
95
+ * marked its tool repeatable; otherwise it is reported not handled.
96
+ */
97
+ export declare function createHandCall(deps: {
98
+ crew: ProxyShipCrew;
99
+ servers: McpServers;
100
+ calls: CallStore;
101
+ marks: ToolMarks;
102
+ timeoutMs: number;
103
+ }): HandCall;
@@ -0,0 +1,116 @@
1
+ import { PAYLOAD_MAX_BYTES, payloadBytes } from '@aeolus-fleet/common';
2
+ import { toolCalledBy, toolInputType, toolResultType } from './content-types.js';
3
+ /** The reason a call that may have run is not handled, as Needs attention shows it. */
4
+ export const MAY_HAVE_RUN = 'The call may have run; its answer was lost. Check the outside system, then resend or dismiss.';
5
+ const AGAIN = { kind: 'again' };
6
+ function isArguments(value) {
7
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
8
+ }
9
+ function argumentsOf(payload) {
10
+ try {
11
+ const parsed = JSON.parse(payload);
12
+ return isArguments(parsed) ? parsed : undefined;
13
+ }
14
+ catch {
15
+ return undefined;
16
+ }
17
+ }
18
+ function errorResult(text) {
19
+ return { content: [{ type: 'text', text }], isError: true };
20
+ }
21
+ /** The reply carrying a tool's result; one too large for a message is replaced by an error result that says so. */
22
+ function resultReply(delivery, call) {
23
+ const payload = JSON.stringify(call.result);
24
+ const bytes = payloadBytes(payload);
25
+ return {
26
+ to: delivery.senderShipId,
27
+ inReplyTo: delivery.messageId,
28
+ contentType: toolResultType(call.tool),
29
+ payload: bytes > PAYLOAD_MAX_BYTES ? JSON.stringify(errorResult(`The tool result is ${String(bytes)} bytes as JSON, over the ${String(PAYLOAD_MAX_BYTES)} a message holds.`)) : payload,
30
+ idempotencyKey: `mcp-result:${delivery.messageId}`,
31
+ };
32
+ }
33
+ function notACallReply(party, delivery) {
34
+ return {
35
+ to: delivery.senderShipId,
36
+ inReplyTo: delivery.messageId,
37
+ contentType: 'text/plain',
38
+ payload: `${party.name} takes only tool calls: send a capability's input type, ${toolInputType('<tool>')}, with the tool arguments as a JSON object.`,
39
+ idempotencyKey: `mcp-result:${delivery.messageId}`,
40
+ };
41
+ }
42
+ /**
43
+ * Use case: the gateway hands one delivery of a party's proxy ship to its
44
+ * outside MCP server, as 0040 hands one to an agent (interop 5.2): handed
45
+ * with the next number, then `tools/call`; the server's answer confirms it,
46
+ * so it is replied, acknowledged and handled at once. The answer is kept
47
+ * before the reply, so a restart replies again under the same key and calls
48
+ * nothing. A call that died unanswered is handed again only where argo
49
+ * marked its tool repeatable; otherwise it is reported not handled.
50
+ */
51
+ export function createHandCall(deps) {
52
+ return async ({ party, delivery }) => {
53
+ const crewToken = party.crewToken;
54
+ if (crewToken === null) {
55
+ return AGAIN;
56
+ }
57
+ const kept = { deliveryId: delivery.deliveryId, fleetId: party.fleetId, party: party.name };
58
+ const finish = async (reply) => {
59
+ for (const step of [() => deps.crew.reply(crewToken, reply), () => deps.crew.ack(crewToken, delivery.deliveryId), () => deps.crew.handled(crewToken, delivery.deliveryId)]) {
60
+ if (!(await step()).isOk) {
61
+ return AGAIN;
62
+ }
63
+ }
64
+ await deps.calls.save({ ...kept, state: 'done', reply });
65
+ return { kind: 'handled' };
66
+ };
67
+ const mayHaveRun = async () => {
68
+ await deps.calls.save({ ...kept, state: 'mayHaveRun', reply: null });
69
+ // Core 0.27 refuses this for a delivery never handed once more (aeolus-fleet#955); the call stays judged, and is reported again each time it comes.
70
+ await deps.crew.notHandled(crewToken, { deliveryId: delivery.deliveryId, reason: MAY_HAVE_RUN });
71
+ return { kind: 'notHandled' };
72
+ };
73
+ const call = await deps.calls.find(delivery.deliveryId);
74
+ if (call?.state === 'mayHaveRun') {
75
+ return mayHaveRun();
76
+ }
77
+ if (call?.reply) {
78
+ return finish(call.reply);
79
+ }
80
+ const tool = toolCalledBy(delivery.contentType);
81
+ if (tool === undefined) {
82
+ return finish(notACallReply(party, delivery));
83
+ }
84
+ const args = argumentsOf(delivery.payload);
85
+ if (args === undefined) {
86
+ return finish(resultReply(delivery, { tool, result: errorResult('The tool arguments must be a JSON object.') }));
87
+ }
88
+ const isRepeatable = (await deps.marks.repeatable(party.fleetId, party.name)).has(tool);
89
+ // Handed before with no answer kept and not judged unsent: the gateway stopped mid call, so it may have run.
90
+ if (delivery.state === 'handed' && call?.state !== 'notSent' && !isRepeatable) {
91
+ return mayHaveRun();
92
+ }
93
+ const handed = await deps.crew.handed(crewToken, { deliveryId: delivery.deliveryId, handOverNumber: (delivery.handOverNumber ?? 0) + 1 });
94
+ if (!handed.isOk) {
95
+ return AGAIN;
96
+ }
97
+ if (handed.value === 'undeliverable') {
98
+ return { kind: 'undeliverable' };
99
+ }
100
+ await deps.calls.save({ ...kept, state: 'calling', reply: null });
101
+ const outcome = await deps.servers.callTool({ url: party.url, credential: party.credential }, { name: tool, arguments: args, timeoutMs: deps.timeoutMs });
102
+ switch (outcome.kind) {
103
+ case 'answered': {
104
+ const reply = resultReply(delivery, { tool, result: outcome.result });
105
+ await deps.calls.save({ ...kept, state: 'answered', reply });
106
+ return finish(reply);
107
+ }
108
+ case 'notSent':
109
+ await deps.calls.save({ ...kept, state: 'notSent', reply: null });
110
+ return AGAIN;
111
+ case 'unanswered':
112
+ return isRepeatable ? AGAIN : mayHaveRun();
113
+ }
114
+ };
115
+ }
116
+ //# sourceMappingURL=hand-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hand-call.js","sourceRoot":"","sources":["../../../src/core/mcp-out/hand-call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { PartyStore } from '../parties/ports.js';
3
+ import type { StateParty, ToolMarks } from './state-party.js';
4
+ export type MarkTool = (input: {
5
+ fleetId: FleetId;
6
+ name: string;
7
+ tool: string;
8
+ isRepeatable: boolean;
9
+ }) => ReturnType<StateParty>;
10
+ /**
11
+ * Use case: argo marks a party's tool repeatable, or takes the mark off
12
+ * (interop 5.2): a call to it that died unanswered may then be handed
13
+ * again. The mark is kept first and stated at once; while the statement
14
+ * cannot be made, the mark waits for the next.
15
+ */
16
+ export declare function createMarkTool(deps: {
17
+ parties: PartyStore;
18
+ marks: ToolMarks;
19
+ stateParty: StateParty;
20
+ }): MarkTool;
@@ -0,0 +1,17 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ /**
3
+ * Use case: argo marks a party's tool repeatable, or takes the mark off
4
+ * (interop 5.2): a call to it that died unanswered may then be handed
5
+ * again. The mark is kept first and stated at once; while the statement
6
+ * cannot be made, the mark waits for the next.
7
+ */
8
+ export function createMarkTool(deps) {
9
+ return async ({ fleetId, name, tool, isRepeatable }) => {
10
+ if (!(await deps.parties.find(fleetId, name))) {
11
+ return refuse('NO_SUCH_PARTY', `No party named ${name}`);
12
+ }
13
+ await deps.marks.mark(fleetId, { party: name, tool, isRepeatable });
14
+ return deps.stateParty({ fleetId, name });
15
+ };
16
+ }
17
+ //# sourceMappingURL=mark-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mark-tool.js","sourceRoot":"","sources":["../../../src/core/mcp-out/mark-tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK7C;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAuE;IACpG,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE;QACrD,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,MAAM,CAAC,eAAe,EAAE,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The outside MCP server behind an app proxy ship, as MCP out sees it
3
+ * (interop 3.3, 5.2): its tools, and one call at a time.
4
+ */
5
+ import type { Result } from '../shared/result.js';
6
+ import type { McpServerCredential } from '../vault/credential.js';
7
+ /** Where an outside MCP server is, and how the gateway signs in to it. */
8
+ export interface McpServerConnection {
9
+ /** Its Streamable HTTP endpoint. */
10
+ readonly url: string;
11
+ readonly credential: McpServerCredential;
12
+ }
13
+ /** MCP's tool annotations (2026-07-28), as the server states them: hints, never trusted on their own. */
14
+ export interface ToolAnnotations {
15
+ readonly title?: string;
16
+ readonly readOnlyHint?: boolean;
17
+ readonly destructiveHint?: boolean;
18
+ readonly idempotentHint?: boolean;
19
+ readonly openWorldHint?: boolean;
20
+ }
21
+ /** One tool of an outside MCP server, as its `tools/list` answers it. */
22
+ export interface OutsideTool {
23
+ readonly name: string;
24
+ readonly title?: string;
25
+ readonly description?: string;
26
+ readonly inputSchema: Readonly<Record<string, unknown>>;
27
+ readonly outputSchema?: Readonly<Record<string, unknown>>;
28
+ readonly annotations?: ToolAnnotations;
29
+ }
30
+ /** A tool's answer: its result, an error result included (`isError`). */
31
+ export interface ToolResult {
32
+ readonly content: readonly unknown[];
33
+ readonly structuredContent?: Readonly<Record<string, unknown>>;
34
+ readonly isError: boolean;
35
+ }
36
+ /**
37
+ * How one `tools/call` ended (5.2):
38
+ * - answered: the server's answer, which confirms the hand-over;
39
+ * - notSent: the gateway never sent it (the server was unreachable, or refused the gateway's credential), so it did not run;
40
+ * - unanswered: sent, and no answer came (a broken stream, a timeout): whether the server ran it is unknown.
41
+ */
42
+ export type ToolCallOutcome = {
43
+ readonly kind: 'answered';
44
+ readonly result: ToolResult;
45
+ } | {
46
+ readonly kind: 'notSent';
47
+ readonly reason: string;
48
+ } | {
49
+ readonly kind: 'unanswered';
50
+ readonly reason: string;
51
+ };
52
+ export interface ToolCall {
53
+ readonly name: string;
54
+ readonly arguments: Readonly<Record<string, unknown>>;
55
+ /** How long the gateway waits for the answer before it counts the call as unanswered. */
56
+ readonly timeoutMs: number;
57
+ }
58
+ /** The outside MCP servers the gateway calls. */
59
+ export interface McpServers {
60
+ /** The server's tools, every page of them; unreachable when it cannot be listed. */
61
+ listTools(connection: McpServerConnection): Promise<Result<readonly OutsideTool[], {
62
+ readonly kind: 'unreachable';
63
+ readonly reason: string;
64
+ }>>;
65
+ callTool(connection: McpServerConnection, call: ToolCall): Promise<ToolCallOutcome>;
66
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../../src/core/mcp-out/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { McpServerParty } from '../parties/party.js';
2
+ import type { HandCall, ProxyShipCrew } from './hand-call.js';
3
+ /** Outbound port: waits the given time, or less once the signal aborts. */
4
+ export type Sleep = (ms: number, signal: AbortSignal) => Promise<void>;
5
+ export type RunParty = (input: {
6
+ party: McpServerParty;
7
+ signal: AbortSignal;
8
+ }) => Promise<{
9
+ ended: 'stopped' | 'crewRefused';
10
+ }>;
11
+ /**
12
+ * Use case: the gateway takes the calls of a party's proxy ship, as its
13
+ * crew, until it is stopped (interop 5.2). Each delivery pushReceive takes
14
+ * is handed to the server once while in flight, with no more calls at once
15
+ * than the party takes. A delivery answered again waits, longer each time,
16
+ * before it is handed with the next number; the fleet counts each an
17
+ * attempt and stops at the fifth. While the fleet answers only what the
18
+ * gateway already holds, or does not answer, it looks again after a while.
19
+ */
20
+ export declare function createRunParty(deps: {
21
+ crew: ProxyShipCrew;
22
+ handCall: HandCall;
23
+ sleep: Sleep;
24
+ pollMs: number;
25
+ againWaitsMs: readonly number[];
26
+ }): RunParty;
@@ -0,0 +1,62 @@
1
+ /** The fleet's codes for a crew token it no longer takes: the gateway does not crew the proxy ship any more. */
2
+ const CREW_REFUSED = new Set(['UNAUTHORIZED', 'LEASE_ENDED']);
3
+ /**
4
+ * Use case: the gateway takes the calls of a party's proxy ship, as its
5
+ * crew, until it is stopped (interop 5.2). Each delivery pushReceive takes
6
+ * is handed to the server once while in flight, with no more calls at once
7
+ * than the party takes. A delivery answered again waits, longer each time,
8
+ * before it is handed with the next number; the fleet counts each an
9
+ * attempt and stops at the fifth. While the fleet answers only what the
10
+ * gateway already holds, or does not answer, it looks again after a while.
11
+ */
12
+ export function createRunParty(deps) {
13
+ return async ({ party, signal }) => {
14
+ const crewToken = party.crewToken;
15
+ if (crewToken === null) {
16
+ return { ended: 'crewRefused' };
17
+ }
18
+ const max = party.concurrencyLimit;
19
+ const inFlight = new Map();
20
+ const agains = new Map();
21
+ const hand = async (delivery) => {
22
+ let outcome;
23
+ try {
24
+ outcome = await deps.handCall({ party, delivery });
25
+ }
26
+ catch {
27
+ // A failure of the gateway's own (its database): nothing was decided, so the delivery comes again.
28
+ outcome = { kind: 'again' };
29
+ }
30
+ if (outcome.kind === 'again') {
31
+ const count = (agains.get(delivery.deliveryId) ?? 0) + 1;
32
+ agains.set(delivery.deliveryId, count);
33
+ await deps.sleep(deps.againWaitsMs[Math.min(count, deps.againWaitsMs.length) - 1] ?? deps.pollMs, signal);
34
+ }
35
+ else {
36
+ agains.delete(delivery.deliveryId);
37
+ }
38
+ };
39
+ const start = (delivery) => {
40
+ inFlight.set(delivery.deliveryId, hand(delivery).finally(() => inFlight.delete(delivery.deliveryId)));
41
+ };
42
+ while (!signal.aborted) {
43
+ if (inFlight.size >= max) {
44
+ await Promise.race(inFlight.values());
45
+ continue;
46
+ }
47
+ const received = await deps.crew.pushReceive(crewToken, { max, signal });
48
+ if (!received.isOk && CREW_REFUSED.has(received.error.code)) {
49
+ await Promise.all(inFlight.values());
50
+ return { ended: 'crewRefused' };
51
+ }
52
+ const fresh = received.isOk ? received.value.filter((delivery) => !inFlight.has(delivery.deliveryId)).slice(0, max - inFlight.size) : [];
53
+ fresh.forEach(start);
54
+ if (fresh.length === 0) {
55
+ await Promise.race([deps.sleep(deps.pollMs, signal), ...inFlight.values()]);
56
+ }
57
+ }
58
+ await Promise.all(inFlight.values());
59
+ return { ended: 'stopped' };
60
+ };
61
+ }
62
+ //# sourceMappingURL=run-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-party.js","sourceRoot":"","sources":["../../../src/core/mcp-out/run-party.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { FleetRefusal } from '../connection/ports.js';
3
+ import type { PartyStore } from '../parties/ports.js';
4
+ import { type DomainError } from '../shared/errors.js';
5
+ import { type Result } from '../shared/result.js';
6
+ import type { McpServers } from './ports.js';
7
+ import { type Statement } from './statement.js';
8
+ /** Outbound port: the fleet's `setStatement`, called as a proxy ship's crew. */
9
+ export interface StatementDoor {
10
+ setStatement(crewToken: string, statement: Statement): Promise<Result<void, FleetRefusal>>;
11
+ }
12
+ /** Outbound port: argo's repeatable marks, by party and tool. */
13
+ export interface ToolMarks {
14
+ /** The tools of the party argo marked repeatable. */
15
+ repeatable(fleetId: FleetId, party: string): Promise<ReadonlySet<string>>;
16
+ mark(fleetId: FleetId, mark: {
17
+ party: string;
18
+ tool: string;
19
+ isRepeatable: boolean;
20
+ }): Promise<void>;
21
+ }
22
+ export type StateParty = (input: {
23
+ fleetId: FleetId;
24
+ name: string;
25
+ }) => Promise<Result<{
26
+ capabilities: string[];
27
+ }, DomainError<'NO_SUCH_PARTY' | 'NOT_CREWED' | 'SERVER_UNREACHABLE' | 'STATEMENT_REFUSED'>>>;
28
+ /**
29
+ * Use case: the gateway states what a party's proxy ship offers, as its
30
+ * crew: the tools its server lists now, with argo's marks. The whole
31
+ * statement replaces the one before, so a tool the server dropped is gone.
32
+ */
33
+ export declare function createStateParty(deps: {
34
+ parties: PartyStore;
35
+ servers: McpServers;
36
+ door: StatementDoor;
37
+ marks: ToolMarks;
38
+ }): StateParty;
@@ -0,0 +1,30 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { statementOf } from './statement.js';
4
+ /**
5
+ * Use case: the gateway states what a party's proxy ship offers, as its
6
+ * crew: the tools its server lists now, with argo's marks. The whole
7
+ * statement replaces the one before, so a tool the server dropped is gone.
8
+ */
9
+ export function createStateParty(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', `No party named ${name}`);
14
+ }
15
+ if (party.state !== 'crewed' || party.crewToken === null) {
16
+ return refuse('NOT_CREWED', `The gateway does not crew the proxy ship of ${name} yet`);
17
+ }
18
+ const listed = await deps.servers.listTools({ url: party.url, credential: party.credential });
19
+ if (!listed.isOk) {
20
+ return refuse('SERVER_UNREACHABLE', `The MCP server of ${name} could not be listed: ${listed.error.reason}`);
21
+ }
22
+ const statement = statementOf({ partyName: name, tools: listed.value, repeatable: await deps.marks.repeatable(fleetId, name) });
23
+ const stated = await deps.door.setStatement(party.crewToken, statement);
24
+ if (!stated.isOk) {
25
+ return refuse('STATEMENT_REFUSED', `The fleet refused the statement: ${stated.error.message}`);
26
+ }
27
+ return ok({ capabilities: statement.capabilities.map((capability) => capability.name) });
28
+ };
29
+ }
30
+ //# sourceMappingURL=state-party.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-party.js","sourceRoot":"","sources":["../../../src/core/mcp-out/state-party.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAkB7D;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAyF;IACxH,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,kBAAkB,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YACzD,OAAO,MAAM,CAAC,YAAY,EAAE,+CAA+C,IAAI,MAAM,CAAC,CAAC;QACzF,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,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAChI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,mBAAmB,EAAE,oCAAoC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { OutsideTool, ToolAnnotations } from './ports.js';
2
+ export interface Capability {
3
+ readonly name: string;
4
+ readonly title?: string;
5
+ readonly description?: string;
6
+ readonly inputSchema: Readonly<Record<string, unknown>>;
7
+ readonly outputSchema?: Readonly<Record<string, unknown>>;
8
+ readonly inputModes: readonly string[];
9
+ readonly outputModes: readonly string[];
10
+ readonly annotations?: ToolAnnotations;
11
+ /** argo's mark that a call may be handed again when it died unanswered; the server's hints never set it. */
12
+ readonly repeatable?: true;
13
+ }
14
+ export interface Statement {
15
+ readonly summary: string;
16
+ readonly capabilities: readonly Capability[];
17
+ }
18
+ /**
19
+ * The statement of a party's proxy ship. Its summary names the party only:
20
+ * the server's URL and credential stay in the gateway (NAT both ways).
21
+ */
22
+ export declare function statementOf(input: {
23
+ partyName: string;
24
+ tools: readonly OutsideTool[];
25
+ repeatable: ReadonlySet<string>;
26
+ }): Statement;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A proxy ship's statement (decision 0047), written from its outside MCP
3
+ * server's `tools/list`: each tool is one capability, with MCP's fields as
4
+ * the server states them (decision 0048), the content types that call it
5
+ * and carry its result, and argo's repeatable mark (interop 5.2). The fields
6
+ * `annotations` and `repeatable` are core 0.28's (aeolus-fleet#956).
7
+ */
8
+ import { toolInputType, toolResultType } from './content-types.js';
9
+ function capabilityOf(tool, isRepeatable) {
10
+ return {
11
+ name: tool.name,
12
+ ...(tool.title === undefined ? {} : { title: tool.title }),
13
+ ...(tool.description === undefined ? {} : { description: tool.description }),
14
+ inputSchema: tool.inputSchema,
15
+ ...(tool.outputSchema === undefined ? {} : { outputSchema: tool.outputSchema }),
16
+ inputModes: [toolInputType(tool.name)],
17
+ outputModes: [toolResultType(tool.name)],
18
+ ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),
19
+ ...(isRepeatable ? { repeatable: true } : {}),
20
+ };
21
+ }
22
+ /**
23
+ * The statement of a party's proxy ship. Its summary names the party only:
24
+ * the server's URL and credential stay in the gateway (NAT both ways).
25
+ */
26
+ export function statementOf(input) {
27
+ return {
28
+ summary: `${input.partyName}, an outside MCP server reached through the Aeolus gateway. Each capability is one of its tools: send its input type with the tool arguments as a JSON object, and the reply carries the tool result.`,
29
+ capabilities: input.tools.map((tool) => capabilityOf(tool, input.repeatable.has(tool.name))),
30
+ };
31
+ }
32
+ //# sourceMappingURL=statement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statement.js","sourceRoot":"","sources":["../../../src/core/mcp-out/statement.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAsBnE,SAAS,YAAY,CAAC,IAAiB,EAAE,YAAqB;IAC5D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/E,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,WAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QAC5E,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAA4F;IACtH,OAAO;QACL,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,uMAAuM;QAClO,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { Clock } from '../shared/clock.js';
3
+ import { type Result } from '../shared/result.js';
4
+ import type { IssuedTokens, OAuthSecrets, TokenHolder } from './ports.js';
5
+ /** Who calls with an access token: the fleet and the client it was issued to, and whom it stands for. */
6
+ export type AccessTokenHolder = {
7
+ readonly fleetId: FleetId;
8
+ readonly clientId: string;
9
+ readonly scope: string | null;
10
+ } & TokenHolder;
11
+ export type AuthenticateAccessToken = (accessToken: string) => Promise<Result<AccessTokenHolder, {
12
+ kind: 'invalidToken';
13
+ }>>;
14
+ /** Whom a code or a pair stands for, alone. */
15
+ export declare function holderOf(held: TokenHolder): TokenHolder;
16
+ /**
17
+ * Use case: the gateway knows an MCP client by its access token: active,
18
+ * not expired, and issued for the gateway's own MCP endpoint (RFC 8707).
19
+ */
20
+ export declare function createAuthenticateAccessToken(deps: {
21
+ tokens: IssuedTokens;
22
+ secrets: OAuthSecrets;
23
+ clock: Clock;
24
+ resource: string;
25
+ }): AuthenticateAccessToken;
@@ -0,0 +1,19 @@
1
+ import { err, ok } from '../shared/result.js';
2
+ /** Whom a code or a pair stands for, alone. */
3
+ export function holderOf(held) {
4
+ return held.kind === 'party' ? { kind: 'party', party: held.party } : { kind: 'account', grantId: held.grantId };
5
+ }
6
+ /**
7
+ * Use case: the gateway knows an MCP client by its access token: active,
8
+ * not expired, and issued for the gateway's own MCP endpoint (RFC 8707).
9
+ */
10
+ export function createAuthenticateAccessToken(deps) {
11
+ return async (accessToken) => {
12
+ const pair = await deps.tokens.findByAccess(deps.secrets.hashOf(accessToken));
13
+ if (pair?.state !== 'active' || pair.resource !== deps.resource || pair.accessExpiresAt.getTime() <= deps.clock.now().getTime()) {
14
+ return err({ kind: 'invalidToken' });
15
+ }
16
+ return ok({ fleetId: pair.fleetId, clientId: pair.clientId, scope: pair.scope, ...holderOf(pair) });
17
+ };
18
+ }
19
+ //# sourceMappingURL=authenticate-access-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticate-access-token.js","sourceRoot":"","sources":["../../../src/core/oauth/authenticate-access-token.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAY3D,+CAA+C;AAC/C,MAAM,UAAU,QAAQ,CAAC,IAAiB;IACxC,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACnH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,IAAqF;IACjI,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9E,IAAI,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;YAChI,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC;AACJ,CAAC"}