@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,82 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { IDEMPOTENCY_ARGUMENT } from './list-tools.js';
4
+ import { readCallOf } from './read-client-call.js';
5
+ /** The message's payload: the arguments as JSON, or a text tool's one text; none for arguments that do not fit the tool. */
6
+ function payloadOf(tool, values) {
7
+ if (tool.target.isText) {
8
+ return typeof values.text === 'string' ? values.text : undefined;
9
+ }
10
+ return JSON.stringify(values);
11
+ }
12
+ function refusalOf(refused) {
13
+ switch (refused.code) {
14
+ // No reason why: the fleet's network rules are not the outside's to read.
15
+ case 'NOT_REACHABLE':
16
+ return refuse('NOT_REACHABLE', 'This party may not call that tool now');
17
+ case 'UNAVAILABLE':
18
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not answer, so the call may have been sent: call again with the same ${IDEMPOTENCY_ARGUMENT} to send it at most once`);
19
+ default:
20
+ return refuse('SEND_REFUSED', `The fleet refused the call: ${refused.message}`);
21
+ }
22
+ }
23
+ /** No signal ends a wait early: it is bounded by its own time. */
24
+ const UNENDING = new AbortController().signal;
25
+ /** The call as it stands once its answer came or the wait passed, read after each poll; it never sleeps past the wait's end. */
26
+ async function answerWithin(deps, sent) {
27
+ const waitEnd = sent.since.getTime() + deps.waitMs;
28
+ for (;;) {
29
+ const call = await deps.calls.findByMessage(sent.fleetId, sent.messageId);
30
+ const read = call ? readCallOf(call, deps.clock.now()) : { handle: sent.handle, createdAt: sent.since, updatedAt: sent.since, state: 'submitted' };
31
+ const left = waitEnd - deps.clock.now().getTime();
32
+ if (read.state === 'completed' || read.state === 'failed' || left <= 0) {
33
+ return read;
34
+ }
35
+ await deps.sleep(Math.min(deps.waitPollMs, left), UNENDING);
36
+ }
37
+ }
38
+ export function createCallTool(deps) {
39
+ return async (caller, call) => {
40
+ const listed = await deps.listTools(caller);
41
+ if (!listed.isOk) {
42
+ return listed;
43
+ }
44
+ const tool = listed.value.find((each) => each.name === call.name);
45
+ if (!tool) {
46
+ return refuse('NO_SUCH_TOOL', `No tool ${call.name} is offered to this party now`);
47
+ }
48
+ const { [IDEMPOTENCY_ARGUMENT]: key, ...values } = call.arguments;
49
+ if (key !== undefined && (typeof key !== 'string' || key.length === 0)) {
50
+ return refuse('INVALID_ARGUMENTS', `${IDEMPOTENCY_ARGUMENT} is a string of at least one character`);
51
+ }
52
+ const payload = payloadOf(tool, values);
53
+ if (payload === undefined) {
54
+ return refuse('INVALID_ARGUMENTS', 'This tool takes one text argument, a string');
55
+ }
56
+ const party = await deps.parties.find(caller.fleetId, caller.party);
57
+ if (party?.crewToken == null) {
58
+ return refuse('PARTY_NOT_CREWED', `The party ${caller.party} is not crewed: argo crews it on the parties page`);
59
+ }
60
+ const idempotencyKey = key === undefined ? deps.keys.newIdempotencyKey() : deps.keys.idempotencyKeyOf({ ...caller, key });
61
+ const sent = await deps.sender.send(party.crewToken, { to: tool.target.shipId, contentType: tool.target.contentType, payload, idempotencyKey });
62
+ if (!sent.isOk) {
63
+ return refusalOf(sent.error);
64
+ }
65
+ const { messageId } = sent.value;
66
+ const handle = deps.keys.handleOf(caller.fleetId, messageId);
67
+ const sentAt = deps.clock.now();
68
+ await deps.calls.save({
69
+ fleetId: caller.fleetId,
70
+ party: caller.party,
71
+ messageId,
72
+ handle,
73
+ shipId: tool.target.shipId,
74
+ capability: tool.target.capability,
75
+ outputContentType: tool.target.outputContentType,
76
+ sentAt,
77
+ deadlineAt: new Date(sentAt.getTime() + deps.deadlineMs),
78
+ });
79
+ return ok(await answerWithin(deps, { fleetId: caller.fleetId, messageId, handle, since: sentAt }));
80
+ };
81
+ }
82
+ //# sourceMappingURL=call-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-tool.js","sourceRoot":"","sources":["../../../src/core/mcp-in/call-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * An outside client's call (interop 3.4): the message its proxy ship sent,
3
+ * the replies naming it, and the one rule for its state. Core keeps no state
4
+ * of a call: submitted, working, completed and failed are the gateway's,
5
+ * derived from what it kept and the time.
6
+ */
7
+ import type { DeliveryId, FleetId, MessageId, ShipId } from '@aeolus-fleet/common';
8
+ /** A reply naming the call's message, as the gateway kept it before acknowledging its delivery. */
9
+ export interface CallReply {
10
+ deliveryId: DeliveryId;
11
+ messageId: MessageId;
12
+ contentType: string;
13
+ payload: string;
14
+ receivedAt: Date;
15
+ }
16
+ export interface ClientCall {
17
+ fleetId: FleetId;
18
+ party: string;
19
+ messageId: MessageId;
20
+ handle: string;
21
+ shipId: ShipId;
22
+ capability: string;
23
+ /** The capability's stated output type, its first output mode; none when it states none. */
24
+ outputContentType: string | null;
25
+ sentAt: Date;
26
+ /** When the call fails without its answer: a gateway default while statements carry none. */
27
+ deadlineAt: Date;
28
+ /** In the order the gateway kept them. */
29
+ replies: CallReply[];
30
+ }
31
+ export type CallState = {
32
+ state: 'submitted';
33
+ } | {
34
+ state: 'working';
35
+ } | {
36
+ state: 'completed';
37
+ answer: {
38
+ contentType: string;
39
+ payload: string;
40
+ };
41
+ } | {
42
+ state: 'failed';
43
+ };
44
+ /**
45
+ * Completed by the first reply of the stated output type, kept before the
46
+ * deadline; failed at the deadline without one, and a later reply changes
47
+ * nothing; working once any other reply came; submitted before that.
48
+ */
49
+ export declare function stateOf(call: ClientCall, now: Date): CallState;
50
+ /** Since when the call is in its state: its sending, its first reply, its answer, or its deadline. */
51
+ export declare function stateSince(call: ClientCall, now: Date): Date;
@@ -0,0 +1,39 @@
1
+ /** The type a plain text answer comes in, which completes a call to a ship that stated no output type. */
2
+ const PLAIN_TEXT = 'text/plain';
3
+ /** A media type as compared: lower case, with no spaces around its parameters. */
4
+ const normalized = (contentType) => contentType
5
+ .split(';')
6
+ .map((part) => part.trim().toLowerCase())
7
+ .join(';');
8
+ const essenceOf = (contentType) => normalized(contentType).split(';')[0] ?? '';
9
+ function isAnswer(call, reply) {
10
+ if (reply.receivedAt.getTime() >= call.deadlineAt.getTime()) {
11
+ return false;
12
+ }
13
+ return call.outputContentType === null ? essenceOf(reply.contentType) === PLAIN_TEXT : normalized(reply.contentType) === normalized(call.outputContentType);
14
+ }
15
+ /** The call's state with since when it holds, by the one rule below. */
16
+ function standing(call, now) {
17
+ const answer = call.replies.find((reply) => isAnswer(call, reply));
18
+ if (answer) {
19
+ return { state: { state: 'completed', answer: { contentType: answer.contentType, payload: answer.payload } }, since: answer.receivedAt };
20
+ }
21
+ if (now.getTime() >= call.deadlineAt.getTime()) {
22
+ return { state: { state: 'failed' }, since: call.deadlineAt };
23
+ }
24
+ const [first] = call.replies;
25
+ return first ? { state: { state: 'working' }, since: first.receivedAt } : { state: { state: 'submitted' }, since: call.sentAt };
26
+ }
27
+ /**
28
+ * Completed by the first reply of the stated output type, kept before the
29
+ * deadline; failed at the deadline without one, and a later reply changes
30
+ * nothing; working once any other reply came; submitted before that.
31
+ */
32
+ export function stateOf(call, now) {
33
+ return standing(call, now).state;
34
+ }
35
+ /** Since when the call is in its state: its sending, its first reply, its answer, or its deadline. */
36
+ export function stateSince(call, now) {
37
+ return standing(call, now).since;
38
+ }
39
+ //# sourceMappingURL=client-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-call.js","sourceRoot":"","sources":["../../../src/core/mcp-in/client-call.ts"],"names":[],"mappings":"AAmCA,0GAA0G;AAC1G,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC,kFAAkF;AAClF,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAE,EAAE,CACzC,WAAW;KACR,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;KACxC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEvF,SAAS,QAAQ,CAAC,IAAgB,EAAE,KAAgB;IAClD,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC9J,CAAC;AAED,wEAAwE;AACxE,SAAS,QAAQ,CAAC,IAAgB,EAAE,GAAS;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACnE,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3I,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAChE,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAClI,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,IAAgB,EAAE,GAAS;IACjD,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AACnC,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,GAAS;IACpD,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AACnC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Use case: the gateway takes the replies to an outside client's calls, as
3
+ * the crew of the client's proxy ship (Q9 a), until it is stopped. A reply
4
+ * naming a call is kept on it, then acknowledged and handled: the gateway's
5
+ * store is the confirmation, so nothing is acknowledged before it is kept.
6
+ * Any other delivery stays unacknowledged, for the inbox of a later slice.
7
+ * Core 0.28's receiveReply (aeolus-fleet#953) takes this one's place.
8
+ */
9
+ import type { ProxyShipCrew } from '../mcp-out/hand-call.js';
10
+ import type { Sleep } from '../mcp-out/run-party.js';
11
+ import type { McpClientParty } from '../parties/party.js';
12
+ import type { Clock } from '../shared/clock.js';
13
+ import type { ClientCalls } from './ports.js';
14
+ export type CollectReplies = (input: {
15
+ party: McpClientParty;
16
+ signal: AbortSignal;
17
+ }) => Promise<{
18
+ ended: 'stopped' | 'crewRefused';
19
+ }>;
20
+ interface CollectRepliesDeps {
21
+ crew: Pick<ProxyShipCrew, 'pushReceive' | 'ack' | 'handled'>;
22
+ calls: ClientCalls;
23
+ clock: Clock;
24
+ sleep: Sleep;
25
+ /** How long it waits before it looks again, once a round took no reply. */
26
+ pollMs: number;
27
+ }
28
+ export declare function createCollectReplies(deps: CollectRepliesDeps): CollectReplies;
29
+ export {};
@@ -0,0 +1,44 @@
1
+ /** The fleet's codes for a crew token it no longer takes. */
2
+ const CREW_REFUSED = new Set(['UNAUTHORIZED', 'LEASE_ENDED']);
3
+ /** The most deliveries core's pushReceive takes at once. */
4
+ const PUSH_RECEIVE_MAX = 10;
5
+ export function createCollectReplies(deps) {
6
+ /** Keeps a reply that names one of the party's calls, then confirms it: whether it was taken. */
7
+ const taken = async ({ party, crewToken }, delivery) => {
8
+ if (delivery.inReplyTo === null) {
9
+ return false;
10
+ }
11
+ const call = await deps.calls.findByMessage(party.fleetId, delivery.inReplyTo);
12
+ if (call?.party !== party.name) {
13
+ return false;
14
+ }
15
+ const { deliveryId, messageId, contentType, payload } = delivery;
16
+ await deps.calls.addReply({ fleetId: party.fleetId, messageId: call.messageId }, { deliveryId, messageId, contentType, payload, receivedAt: deps.clock.now() });
17
+ const acked = await deps.crew.ack(crewToken, deliveryId);
18
+ if (!acked.isOk) {
19
+ // Kept already: the fleet hands it again, and keeping it again changes nothing.
20
+ return false;
21
+ }
22
+ await deps.crew.handled(crewToken, deliveryId);
23
+ return true;
24
+ };
25
+ return async ({ party, signal }) => {
26
+ const crewToken = party.crewToken;
27
+ if (crewToken === null) {
28
+ return { ended: 'crewRefused' };
29
+ }
30
+ while (!signal.aborted) {
31
+ const received = await deps.crew.pushReceive(crewToken, { max: PUSH_RECEIVE_MAX, signal });
32
+ if (!received.isOk && CREW_REFUSED.has(received.error.code)) {
33
+ return { ended: 'crewRefused' };
34
+ }
35
+ const deliveries = received.isOk ? received.value : [];
36
+ const outcomes = await Promise.all(deliveries.map((delivery) => taken({ party, crewToken }, delivery)));
37
+ if (!outcomes.includes(true)) {
38
+ await deps.sleep(deps.pollMs, signal);
39
+ }
40
+ }
41
+ return { ended: 'stopped' };
42
+ };
43
+ }
44
+ //# sourceMappingURL=collect-replies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect-replies.js","sourceRoot":"","sources":["../../../src/core/mcp-in/collect-replies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Use case: the tools an outside MCP client sees (interop 3.3). Each is a
3
+ * capability of a ship its party's proxy ship may send to now, as the fleet's
4
+ * discover answers it: the gateway shows exactly what core answers, and adds
5
+ * no reach of its own.
6
+ */
7
+ import type { FleetId, ShipId } from '@aeolus-fleet/common';
8
+ import type { PartyStore } from '../parties/ports.js';
9
+ import { type DomainError } from '../shared/errors.js';
10
+ import { type Result } from '../shared/result.js';
11
+ import type { Discovery, ShipAliases } from './ports.js';
12
+ /** The optional argument a client gives so that the same call again sends no second message. */
13
+ export declare const IDEMPOTENCY_ARGUMENT = "aeolus_idempotency_key";
14
+ /** The longest tool name MCP clients take. */
15
+ export declare const TOOL_NAME_MAX_LENGTH = 128;
16
+ /** Where a tool's call goes: the ship, its capability, and the content type of the message. */
17
+ export interface ToolTarget {
18
+ shipId: ShipId;
19
+ capability: string;
20
+ contentType: string;
21
+ /** Whether the message is the call's one text argument, as plain text, rather than its arguments as JSON. */
22
+ isText: boolean;
23
+ /** The type the answer comes in, the capability's first output mode; none when it states none. */
24
+ outputContentType: string | null;
25
+ }
26
+ /** A tool as an MCP client lists it, with where its call goes. */
27
+ export interface ListedTool {
28
+ name: string;
29
+ title?: string;
30
+ description: string;
31
+ inputSchema: Record<string, unknown>;
32
+ target: ToolTarget;
33
+ }
34
+ export type ListToolsRefusal = DomainError<'PARTY_NOT_CREWED' | 'FLEET_UNAVAILABLE'>;
35
+ /** Who lists: the fleet and the party its access token names. */
36
+ export type ListTools = (caller: {
37
+ fleetId: FleetId;
38
+ party: string;
39
+ }) => Promise<Result<ListedTool[], ListToolsRefusal>>;
40
+ export declare function createListTools(deps: {
41
+ parties: PartyStore;
42
+ discovery: Discovery;
43
+ aliases: ShipAliases;
44
+ }): ListTools;
@@ -0,0 +1,70 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ /** The optional argument a client gives so that the same call again sends no second message. */
4
+ export const IDEMPOTENCY_ARGUMENT = 'aeolus_idempotency_key';
5
+ const IDEMPOTENCY_PROPERTY = {
6
+ type: 'string',
7
+ description: 'Optional. The same key again sends no second message: give one when you may call again after a lost answer.',
8
+ };
9
+ /** The longest tool name MCP clients take. */
10
+ export const TOOL_NAME_MAX_LENGTH = 128;
11
+ /** Between a ship's alias and its capability's name in a tool name. */
12
+ const TOOL_NAME_SEPARATOR = '__';
13
+ /** The media type a capability that names none takes and answers. */
14
+ const DEFAULT_MODE = 'application/json';
15
+ const TEXT_MODE = 'text/plain';
16
+ /** A media type without its parameters, in lower case. */
17
+ const essenceOf = (mode) => (mode.split(';')[0] ?? '').trim().toLowerCase();
18
+ const isJson = (mode) => essenceOf(mode) === DEFAULT_MODE || essenceOf(mode).endsWith('+json');
19
+ const isObjectSchema = (schema) => schema.type === 'object';
20
+ /** The arguments a capability takes, with the idempotency argument; none for a schema MCP cannot carry. */
21
+ function inputSchemaOf(capability, isText) {
22
+ if (isText) {
23
+ return { type: 'object', properties: { text: { type: 'string' }, [IDEMPOTENCY_ARGUMENT]: IDEMPOTENCY_PROPERTY }, required: ['text'] };
24
+ }
25
+ const schema = capability.inputSchema ?? { type: 'object' };
26
+ if (!isObjectSchema(schema)) {
27
+ return undefined;
28
+ }
29
+ const properties = typeof schema.properties === 'object' && schema.properties !== null ? schema.properties : {};
30
+ return { ...schema, properties: { ...properties, [IDEMPOTENCY_ARGUMENT]: IDEMPOTENCY_PROPERTY } };
31
+ }
32
+ function toolOf({ alias, summary, shipId }, capability) {
33
+ const contentType = capability.inputModes?.[0] ?? DEFAULT_MODE;
34
+ const isText = essenceOf(contentType) === TEXT_MODE;
35
+ const name = `${alias}${TOOL_NAME_SEPARATOR}${capability.name}`;
36
+ const inputSchema = inputSchemaOf(capability, isText);
37
+ if ((!isText && !isJson(contentType)) || inputSchema === undefined || name.length > TOOL_NAME_MAX_LENGTH) {
38
+ return undefined;
39
+ }
40
+ // No output schema: a call may answer a handle, and MCP clients check every answer against it.
41
+ return {
42
+ name,
43
+ ...(capability.title === undefined ? {} : { title: capability.title }),
44
+ description: [capability.description, `Offered by: ${summary}`].filter((part) => part !== undefined).join('\n\n'),
45
+ inputSchema,
46
+ target: { shipId, capability: capability.name, contentType, isText, outputContentType: capability.outputModes?.[0] ?? null },
47
+ };
48
+ }
49
+ /** argo is left out: every ship may send to argo, and argo is no tool (Q12). */
50
+ function toolsOf(ship, alias) {
51
+ const { statement } = ship;
52
+ if (ship.kind === 'operator' || statement?.by !== 'crew') {
53
+ return [];
54
+ }
55
+ return statement.capabilities.flatMap((capability) => toolOf({ alias, summary: statement.summary, shipId: ship.shipId }, capability) ?? []);
56
+ }
57
+ export function createListTools(deps) {
58
+ return async ({ fleetId, party: name }) => {
59
+ const party = await deps.parties.find(fleetId, name);
60
+ if (party?.kind !== 'mcpClient' || party.state !== 'crewed' || party.crewToken === null) {
61
+ return refuse('PARTY_NOT_CREWED', `The party ${name} is not crewed: argo crews it on the parties page`);
62
+ }
63
+ const discovered = await deps.discovery.discover(party.crewToken);
64
+ if (!discovered.isOk) {
65
+ return refuse('FLEET_UNAVAILABLE', `The fleet did not answer which ships the party reaches: ${discovered.error.message}`);
66
+ }
67
+ return ok(discovered.value.flatMap((ship) => toolsOf(ship, deps.aliases.aliasOf(fleetId, ship.shipId))));
68
+ };
69
+ }
70
+ //# sourceMappingURL=list-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tools.js","sourceRoot":"","sources":["../../../src/core/mcp-in/list-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import type { FleetId, MessageId, ShipId, ShipKind } from '@aeolus-fleet/common';
2
+ import type { FleetRefusal } from '../connection/ports.js';
3
+ import type { Result } from '../shared/result.js';
4
+ import type { CallReply, ClientCall } from './client-call.js';
5
+ /** One thing a ship offers, as its statement says it (decision 0047): MCP's tool fields and A2A's modes. */
6
+ export interface Capability {
7
+ name: string;
8
+ title?: string;
9
+ description?: string;
10
+ inputSchema?: Record<string, unknown>;
11
+ outputSchema?: Record<string, unknown>;
12
+ /** The media types to send it, the first the one to use. */
13
+ inputModes?: string[];
14
+ /** The media types that come back, the first the one to expect. */
15
+ outputModes?: string[];
16
+ }
17
+ /** A ship's statement as discovery shows it: its crew's, the note it was commissioned with, or none. */
18
+ export type DiscoveredStatement = {
19
+ by: 'crew';
20
+ summary: string;
21
+ capabilities: Capability[];
22
+ } | {
23
+ by: 'commission';
24
+ } | null;
25
+ /** A ship the caller may send to now, as discover answers it. */
26
+ export interface DiscoveredShip {
27
+ shipId: ShipId;
28
+ kind: ShipKind;
29
+ statement: DiscoveredStatement;
30
+ }
31
+ /** Outbound port: the fleet's discover, as a proxy ship's crew calls it. */
32
+ export interface Discovery {
33
+ discover(crewToken: string): Promise<Result<DiscoveredShip[], FleetRefusal>>;
34
+ }
35
+ /**
36
+ * Outbound port: the name an outside client knows a ship by. Derived, never
37
+ * stored, the same for the same ship, and telling nothing of the ship's name
38
+ * or id: the gateway translates both ways, as NAT does.
39
+ */
40
+ export interface ShipAliases {
41
+ aliasOf(fleetId: FleetId, shipId: ShipId): string;
42
+ }
43
+ /** Outbound port: the fleet's send, as a proxy ship's crew calls it. The same idempotency key answers the same message. */
44
+ export interface CallSender {
45
+ send(crewToken: string, message: {
46
+ to: ShipId;
47
+ contentType: string;
48
+ payload: string;
49
+ idempotencyKey: string;
50
+ }): Promise<Result<{
51
+ messageId: MessageId;
52
+ }, FleetRefusal>>;
53
+ }
54
+ /**
55
+ * Outbound port: the keys of an outside client's call, derived under the
56
+ * gateway's own key. The outside sees only opaque ids, never a `msg_` id.
57
+ */
58
+ export interface CallKeys {
59
+ /** The send's key for a client's own idempotency key: the same for the same party and key. */
60
+ idempotencyKeyOf(given: {
61
+ fleetId: FleetId;
62
+ party: string;
63
+ key: string;
64
+ }): string;
65
+ /** A new send key, for a call the client gave none. */
66
+ newIdempotencyKey(): string;
67
+ /** The handle the client reads its call by. */
68
+ handleOf(fleetId: FleetId, messageId: MessageId): string;
69
+ }
70
+ /** Outbound port: outside clients' calls, one per message, each with the replies naming it. */
71
+ export interface ClientCalls {
72
+ /** Keeps a call with no replies; a call kept for its message already stays as it was. */
73
+ save(call: Omit<ClientCall, 'replies'>): Promise<void>;
74
+ /** Keeps a reply on the call its message names, once per delivery. */
75
+ addReply(call: {
76
+ fleetId: FleetId;
77
+ messageId: MessageId;
78
+ }, reply: CallReply): Promise<void>;
79
+ findByMessage(fleetId: FleetId, messageId: MessageId): Promise<ClientCall | undefined>;
80
+ /** The party's call by its handle; none of another party's. */
81
+ findByHandle(caller: {
82
+ fleetId: FleetId;
83
+ party: string;
84
+ }, handle: string): Promise<ClientCall | undefined>;
85
+ }
@@ -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-in/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { Clock } from '../shared/clock.js';
3
+ import { type DomainError } from '../shared/errors.js';
4
+ import { type Result } from '../shared/result.js';
5
+ import { type CallState, type ClientCall } from './client-call.js';
6
+ import type { ClientCalls } from './ports.js';
7
+ /** A call as its client reads it (interop 3.4): its handle, when it was sent, its state and since when, with its answer once completed. */
8
+ export type ReadCall = {
9
+ handle: string;
10
+ createdAt: Date;
11
+ updatedAt: Date;
12
+ } & CallState;
13
+ /** The call as its client reads it now. */
14
+ export declare function readCallOf(call: ClientCall, now: Date): ReadCall;
15
+ export type ReadClientCall = (caller: {
16
+ fleetId: FleetId;
17
+ party: string;
18
+ }, handle: string) => Promise<Result<ReadCall, DomainError<'NO_SUCH_CALL'>>>;
19
+ /** Use case: an outside client reads its own call by the handle it was answered; no other party's. */
20
+ export declare function createReadClientCall(deps: {
21
+ calls: ClientCalls;
22
+ clock: Clock;
23
+ }): ReadClientCall;
@@ -0,0 +1,15 @@
1
+ import { refuse } from '../shared/errors.js';
2
+ import { ok } from '../shared/result.js';
3
+ import { stateOf, stateSince } from './client-call.js';
4
+ /** The call as its client reads it now. */
5
+ export function readCallOf(call, now) {
6
+ return { handle: call.handle, createdAt: call.sentAt, updatedAt: stateSince(call, now), ...stateOf(call, now) };
7
+ }
8
+ /** Use case: an outside client reads its own call by the handle it was answered; no other party's. */
9
+ export function createReadClientCall(deps) {
10
+ return async ({ fleetId, party }, handle) => {
11
+ const call = await deps.calls.findByHandle({ fleetId, party }, handle);
12
+ return call ? ok(readCallOf(call, deps.clock.now())) : refuse('NO_SUCH_CALL', 'This party made no call with that handle');
13
+ };
14
+ }
15
+ //# sourceMappingURL=read-client-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-client-call.js","sourceRoot":"","sources":["../../../src/core/mcp-in/read-client-call.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAmC,MAAM,kBAAkB,CAAC;AAMxF,2CAA2C;AAC3C,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,GAAS;IACpD,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;AAClH,CAAC;AAID,sGAAsG;AACtG,MAAM,UAAU,oBAAoB,CAAC,IAA0C;IAC7E,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAC;IAC5H,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The content types that carry an outside tool's call and its result over
3
+ * the fleet (orchestrator-1 on aeolus-fleet#876, Q7): the input type names
4
+ * the tool, and its payload is the tool's arguments as a JSON object; the
5
+ * result type names the tool too, and its payload is the tool's result.
6
+ */
7
+ export declare function toolInputType(tool: string): string;
8
+ export declare function toolResultType(tool: string): string;
9
+ /** The tool a message of this content type calls; none for another type, or the input type without a name. */
10
+ export declare function toolCalledBy(contentType: string): string | undefined;
11
+ /** Whether a message of this content type carries a tool's result. */
12
+ export declare function isToolResultType(contentType: string): boolean;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The content types that carry an outside tool's call and its result over
3
+ * the fleet (orchestrator-1 on aeolus-fleet#876, Q7): the input type names
4
+ * the tool, and its payload is the tool's arguments as a JSON object; the
5
+ * result type names the tool too, and its payload is the tool's result.
6
+ */
7
+ const TOOL_INPUT = 'application/vnd.aeolus.mcp-tool+json';
8
+ const TOOL_RESULT = 'application/vnd.aeolus.mcp-result+json';
9
+ export function toolInputType(tool) {
10
+ return `${TOOL_INPUT}; name=${tool}`;
11
+ }
12
+ export function toolResultType(tool) {
13
+ return `${TOOL_RESULT}; name=${tool}`;
14
+ }
15
+ /** The tool a message of this content type calls; none for another type, or the input type without a name. */
16
+ export function toolCalledBy(contentType) {
17
+ const [type, ...parameters] = contentType.split(';').map((part) => part.trim());
18
+ if (type?.toLowerCase() !== TOOL_INPUT) {
19
+ return undefined;
20
+ }
21
+ const name = parameters.find((parameter) => parameter.toLowerCase().startsWith('name='))?.slice('name='.length);
22
+ return name === undefined || name === '' ? undefined : name;
23
+ }
24
+ /** Whether a message of this content type carries a tool's result. */
25
+ export function isToolResultType(contentType) {
26
+ return contentType.split(';')[0]?.trim().toLowerCase() === TOOL_RESULT;
27
+ }
28
+ //# sourceMappingURL=content-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-types.js","sourceRoot":"","sources":["../../../src/core/mcp-out/content-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,UAAU,GAAG,sCAAsC,CAAC;AAC1D,MAAM,WAAW,GAAG,wCAAwC,CAAC;AAE7D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,UAAU,UAAU,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,GAAG,WAAW,UAAU,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,CAAC,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAChF,IAAI,IAAI,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChH,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC;AACzE,CAAC"}