@aeolus-fleet/gateway 0.0.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +11 -10
  2. package/dist/adapters/crypto/page-sessions.d.ts +15 -0
  3. package/dist/adapters/crypto/page-sessions.js +40 -0
  4. package/dist/adapters/crypto/page-sessions.js.map +1 -0
  5. package/dist/adapters/crypto/request-ids.d.ts +1 -1
  6. package/dist/adapters/crypto/request-ids.js +2 -9
  7. package/dist/adapters/crypto/request-ids.js.map +1 -1
  8. package/dist/adapters/crypto/sign-in-seals.d.ts +1 -1
  9. package/dist/adapters/crypto/sign-in-seals.js +7 -9
  10. package/dist/adapters/crypto/sign-in-seals.js.map +1 -1
  11. package/dist/adapters/fleet/actor-door.d.ts +20 -0
  12. package/dist/adapters/fleet/actor-door.js +75 -0
  13. package/dist/adapters/fleet/actor-door.js.map +1 -0
  14. package/dist/adapters/fleet/core-version.d.ts +8 -8
  15. package/dist/adapters/fleet/core-version.js +6 -47
  16. package/dist/adapters/fleet/core-version.js.map +1 -1
  17. package/dist/adapters/fleet/fleet-network.js +7 -17
  18. package/dist/adapters/fleet/fleet-network.js.map +1 -1
  19. package/dist/adapters/fleet/logged-verified-facts.d.ts +13 -0
  20. package/dist/adapters/fleet/logged-verified-facts.js +18 -0
  21. package/dist/adapters/fleet/logged-verified-facts.js.map +1 -0
  22. package/dist/adapters/fleet/proxy-ship-reads.d.ts +7 -0
  23. package/dist/adapters/fleet/proxy-ship-reads.js +24 -0
  24. package/dist/adapters/fleet/proxy-ship-reads.js.map +1 -0
  25. package/dist/adapters/fleet/proxy-ships-as-actor.d.ts +3 -0
  26. package/dist/adapters/fleet/proxy-ships-as-actor.js +25 -0
  27. package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -0
  28. package/dist/adapters/fleet/rest-fleet-door.d.ts +2 -2
  29. package/dist/adapters/fleet/rest-fleet-door.js +23 -7
  30. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  31. package/dist/adapters/http/add-server-page.d.ts +7 -0
  32. package/dist/adapters/http/add-server-page.js +175 -0
  33. package/dist/adapters/http/add-server-page.js.map +1 -0
  34. package/dist/adapters/http/delivery-page.d.ts +24 -0
  35. package/dist/adapters/http/delivery-page.js +115 -0
  36. package/dist/adapters/http/delivery-page.js.map +1 -0
  37. package/dist/adapters/http/oauth-routes.d.ts +15 -3
  38. package/dist/adapters/http/oauth-routes.js +33 -1
  39. package/dist/adapters/http/oauth-routes.js.map +1 -1
  40. package/dist/adapters/http/outside-parties-page.d.ts +29 -2
  41. package/dist/adapters/http/outside-parties-page.js +15 -11
  42. package/dist/adapters/http/outside-parties-page.js.map +1 -1
  43. package/dist/adapters/http/outside-party-page.d.ts +7 -0
  44. package/dist/adapters/http/outside-party-page.js +212 -0
  45. package/dist/adapters/http/outside-party-page.js.map +1 -0
  46. package/dist/adapters/http/overview-page.d.ts +2 -1
  47. package/dist/adapters/http/overview-page.js +79 -36
  48. package/dist/adapters/http/overview-page.js.map +1 -1
  49. package/dist/adapters/http/parties-page.d.ts +2 -1
  50. package/dist/adapters/http/parties-page.js +8 -10
  51. package/dist/adapters/http/parties-page.js.map +1 -1
  52. package/dist/adapters/http/scope-rows.d.ts +10 -0
  53. package/dist/adapters/http/scope-rows.js +30 -0
  54. package/dist/adapters/http/scope-rows.js.map +1 -0
  55. package/dist/adapters/http/signal.d.ts +10 -1
  56. package/dist/adapters/http/signal.js +50 -7
  57. package/dist/adapters/http/signal.js.map +1 -1
  58. package/dist/adapters/pagasae/pagasae-client.js +7 -9
  59. package/dist/adapters/pagasae/pagasae-client.js.map +1 -1
  60. package/dist/adapters/prisma/account-grants.js +2 -2
  61. package/dist/adapters/prisma/account-grants.js.map +1 -1
  62. package/dist/adapters/prisma/client-calls.js +9 -0
  63. package/dist/adapters/prisma/client-calls.js.map +1 -1
  64. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  65. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  66. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +1 -1
  67. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +1 -1
  68. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  69. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +1 -1
  70. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +1 -1
  71. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  72. package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +33 -1
  73. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +14 -14
  74. package/dist/adapters/prisma/generated/models/Party.d.ts +1 -29
  75. package/dist/adapters/prisma/oauth-stores.js +3 -0
  76. package/dist/adapters/prisma/oauth-stores.js.map +1 -1
  77. package/dist/adapters/prisma/party-store.js +0 -2
  78. package/dist/adapters/prisma/party-store.js.map +1 -1
  79. package/dist/adapters/prisma/pending-requests.js +7 -1
  80. package/dist/adapters/prisma/pending-requests.js.map +1 -1
  81. package/dist/adapters/trpc/router.d.ts +210 -12
  82. package/dist/adapters/trpc/router.js +159 -7
  83. package/dist/adapters/trpc/router.js.map +1 -1
  84. package/dist/app.js +65 -19
  85. package/dist/app.js.map +1 -1
  86. package/dist/core/actors/authenticate-actor.d.ts +21 -5
  87. package/dist/core/actors/authenticate-actor.js +14 -2
  88. package/dist/core/actors/authenticate-actor.js.map +1 -1
  89. package/dist/core/actors/credential-of.d.ts +27 -0
  90. package/dist/core/actors/credential-of.js +25 -0
  91. package/dist/core/actors/credential-of.js.map +1 -0
  92. package/dist/core/connection/connect.js +5 -4
  93. package/dist/core/connection/connect.js.map +1 -1
  94. package/dist/core/connection/ports.d.ts +6 -1
  95. package/dist/core/mcp-in/call-tool.d.ts +6 -6
  96. package/dist/core/mcp-in/call-tool.js +3 -3
  97. package/dist/core/mcp-in/call-tool.js.map +1 -1
  98. package/dist/core/mcp-in/client-call.d.ts +2 -2
  99. package/dist/core/mcp-in/client-call.js +2 -2
  100. package/dist/core/mcp-in/client-call.js.map +1 -1
  101. package/dist/core/mcp-in/collect-replies.d.ts +4 -11
  102. package/dist/core/mcp-in/collect-replies.js +52 -30
  103. package/dist/core/mcp-in/collect-replies.js.map +1 -1
  104. package/dist/core/mcp-in/list-tools.d.ts +4 -0
  105. package/dist/core/mcp-in/list-tools.js +1 -1
  106. package/dist/core/mcp-in/list-tools.js.map +1 -1
  107. package/dist/core/mcp-in/ports.d.ts +24 -1
  108. package/dist/core/mcp-out/hand-call.d.ts +2 -0
  109. package/dist/core/mcp-out/hand-call.js +4 -2
  110. package/dist/core/mcp-out/hand-call.js.map +1 -1
  111. package/dist/core/mcp-out/state-party.d.ts +2 -1
  112. package/dist/core/mcp-out/state-party.js +1 -1
  113. package/dist/core/mcp-out/state-party.js.map +1 -1
  114. package/dist/core/mcp-out/statement.d.ts +10 -0
  115. package/dist/core/mcp-out/statement.js +7 -5
  116. package/dist/core/mcp-out/statement.js.map +1 -1
  117. package/dist/core/oauth/ports.d.ts +2 -0
  118. package/dist/core/outside-parties/ports.d.ts +1 -5
  119. package/dist/core/outside-parties/set-outside-parties.d.ts +5 -3
  120. package/dist/core/outside-parties/set-outside-parties.js +6 -2
  121. package/dist/core/outside-parties/set-outside-parties.js.map +1 -1
  122. package/dist/core/parties/approve-party.js +24 -8
  123. package/dist/core/parties/approve-party.js.map +1 -1
  124. package/dist/core/parties/change-party.d.ts +42 -0
  125. package/dist/core/parties/change-party.js +49 -0
  126. package/dist/core/parties/change-party.js.map +1 -0
  127. package/dist/core/parties/check-server.d.ts +24 -0
  128. package/dist/core/parties/check-server.js +21 -0
  129. package/dist/core/parties/check-server.js.map +1 -0
  130. package/dist/core/parties/list-parties.d.ts +28 -7
  131. package/dist/core/parties/list-parties.js +35 -4
  132. package/dist/core/parties/list-parties.js.map +1 -1
  133. package/dist/core/parties/party.d.ts +12 -6
  134. package/dist/core/parties/party.js +23 -1
  135. package/dist/core/parties/party.js.map +1 -1
  136. package/dist/core/parties/ports.d.ts +36 -1
  137. package/dist/core/parties/read-party-tools.d.ts +22 -0
  138. package/dist/core/parties/read-party-tools.js +22 -0
  139. package/dist/core/parties/read-party-tools.js.map +1 -0
  140. package/dist/core/parties/retire-party.d.ts +29 -0
  141. package/dist/core/parties/retire-party.js +43 -0
  142. package/dist/core/parties/retire-party.js.map +1 -0
  143. package/dist/core/parties/shown-party.d.ts +8 -2
  144. package/dist/core/parties/shown-party.js +3 -3
  145. package/dist/core/parties/shown-party.js.map +1 -1
  146. package/dist/core/requests/decide-request.js +9 -1
  147. package/dist/core/requests/decide-request.js.map +1 -1
  148. package/dist/core/requests/list-mine.d.ts +16 -0
  149. package/dist/core/requests/list-mine.js +20 -0
  150. package/dist/core/requests/list-mine.js.map +1 -0
  151. package/dist/core/requests/ports.d.ts +5 -0
  152. package/dist/core/shared/errors.d.ts +1 -1
  153. package/dist/core/shared/errors.js.map +1 -1
  154. package/dist/core/sign-in/account-token.d.ts +8 -4
  155. package/dist/core/sign-in/account-token.js +4 -4
  156. package/dist/core/sign-in/account-token.js.map +1 -1
  157. package/dist/core/sign-in/complete-sign-in.d.ts +15 -4
  158. package/dist/core/sign-in/complete-sign-in.js +27 -4
  159. package/dist/core/sign-in/complete-sign-in.js.map +1 -1
  160. package/dist/core/sign-in/ports.d.ts +37 -7
  161. package/dist/core/sign-in/sign-out.d.ts +10 -0
  162. package/dist/core/sign-in/sign-out.js +9 -0
  163. package/dist/core/sign-in/sign-out.js.map +1 -0
  164. package/dist/core/sign-in/start-page-sign-in.d.ts +25 -0
  165. package/dist/core/sign-in/start-page-sign-in.js +30 -0
  166. package/dist/core/sign-in/start-page-sign-in.js.map +1 -0
  167. package/package.json +3 -3
  168. package/src/adapters/prisma/migrations/20261020200000_account_grant_scopes/migration.sql +2 -0
  169. package/src/adapters/prisma/migrations/20261020210000_party_owner_from_fleet/migration.sql +2 -0
  170. package/src/adapters/prisma/migrations/20261020220000_client_call_deadline_optional/migration.sql +2 -0
  171. package/src/adapters/prisma/schema.prisma +3 -2
@@ -31,9 +31,14 @@ export interface FleetDoor {
31
31
  name: string;
32
32
  type: string;
33
33
  }, FleetRefusal>>;
34
- /** A ship of the fleet, retired ones included; needs fleet:read. */
34
+ /**
35
+ * A ship of the fleet, retired ones included; needs fleet:read. Read on
36
+ * behalf of a ship (fleet:on-behalf), it answers within that ship's read
37
+ * reach; outside the reader's read reach it is refused.
38
+ */
35
39
  getShip(crewToken: string, ship: {
36
40
  shipId: ShipId;
41
+ onBehalfOf?: ShipId;
37
42
  }): Promise<Result<FleetShip, FleetRefusal>>;
38
43
  /** Ends this session's crew of its ship: the lease and the secret it claimed with. */
39
44
  deregister(crewToken: string): Promise<Result<undefined, FleetRefusal>>;
@@ -3,8 +3,10 @@
3
3
  * message the party's proxy ship sends to the tool's ship, and the client is
4
4
  * answered a handle only once the fleet's send answered OK: the message is
5
5
  * stored before any answer, and the gateway never answers OK itself. It
6
- * then waits a bounded time for the answer (interop 3.3): answered within
7
- * it, the client gets the answer itself; else its handle and the state.
6
+ * then waits for the answer as long as the capability states, at most the
7
+ * gateway's own most (interop 3.3, 5.3): answered within it, the client gets
8
+ * the answer itself; else its handle and the state. The call fails at the
9
+ * capability's deadline, and never by time when it states none (3.4).
8
10
  */
9
11
  import type { FleetId } from '@aeolus-fleet/common';
10
12
  import type { Sleep } from '../mcp-out/run-party.js';
@@ -30,11 +32,9 @@ interface CallToolDeps {
30
32
  calls: ClientCalls;
31
33
  keys: CallKeys;
32
34
  clock: Clock;
33
- /** How long a call waits for its answer before it fails: the gateway default, while statements state none. */
34
- deadlineMs: number;
35
35
  sleep: Sleep;
36
- /** How long a call waits for its answer before it is answered its handle. */
37
- waitMs: number;
36
+ /** The most a call waits for its answer before it is answered its handle, whatever its capability states. */
37
+ waitMaxMs: number;
38
38
  /** How often it reads the call while it waits. */
39
39
  waitPollMs: number;
40
40
  }
@@ -24,7 +24,7 @@ function refusalOf(refused) {
24
24
  const UNENDING = new AbortController().signal;
25
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
26
  async function answerWithin(deps, sent) {
27
- const waitEnd = sent.since.getTime() + deps.waitMs;
27
+ const waitEnd = sent.since.getTime() + Math.min(sent.waitMs, deps.waitMaxMs);
28
28
  for (;;) {
29
29
  const call = await deps.calls.findByMessage(sent.fleetId, sent.messageId);
30
30
  const read = call ? readCallOf(call, deps.clock.now()) : { handle: sent.handle, createdAt: sent.since, updatedAt: sent.since, state: 'submitted' };
@@ -74,9 +74,9 @@ export function createCallTool(deps) {
74
74
  capability: tool.target.capability,
75
75
  outputContentType: tool.target.outputContentType,
76
76
  sentAt,
77
- deadlineAt: new Date(sentAt.getTime() + deps.deadlineMs),
77
+ deadlineAt: tool.target.deadlineMs === null ? null : new Date(sentAt.getTime() + tool.target.deadlineMs),
78
78
  });
79
- return ok(await answerWithin(deps, { fleetId: caller.fleetId, messageId, handle, since: sentAt }));
79
+ return ok(await answerWithin(deps, { fleetId: caller.fleetId, messageId, handle, since: sentAt, waitMs: tool.target.waitMs }));
80
80
  };
81
81
  }
82
82
  //# sourceMappingURL=call-tool.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call-tool.js","sourceRoot":"","sources":["../../../src/core/mcp-in/call-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call-tool.js","sourceRoot":"","sources":["../../../src/core/mcp-in/call-tool.ts"],"names":[],"mappings":"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"}
@@ -23,8 +23,8 @@ export interface ClientCall {
23
23
  /** The capability's stated output type, its first output mode; none when it states none. */
24
24
  outputContentType: string | null;
25
25
  sentAt: Date;
26
- /** When the call fails without its answer: a gateway default while statements carry none. */
27
- deadlineAt: Date;
26
+ /** When the call fails without its answer, from its capability's deadline; none never fails by time. */
27
+ deadlineAt: Date | null;
28
28
  /** In the order the gateway kept them. */
29
29
  replies: CallReply[];
30
30
  }
@@ -7,7 +7,7 @@ const normalized = (contentType) => contentType
7
7
  .join(';');
8
8
  const essenceOf = (contentType) => normalized(contentType).split(';')[0] ?? '';
9
9
  function isAnswer(call, reply) {
10
- if (reply.receivedAt.getTime() >= call.deadlineAt.getTime()) {
10
+ if (call.deadlineAt !== null && reply.receivedAt.getTime() >= call.deadlineAt.getTime()) {
11
11
  return false;
12
12
  }
13
13
  return call.outputContentType === null ? essenceOf(reply.contentType) === PLAIN_TEXT : normalized(reply.contentType) === normalized(call.outputContentType);
@@ -18,7 +18,7 @@ function standing(call, now) {
18
18
  if (answer) {
19
19
  return { state: { state: 'completed', answer: { contentType: answer.contentType, payload: answer.payload } }, since: answer.receivedAt };
20
20
  }
21
- if (now.getTime() >= call.deadlineAt.getTime()) {
21
+ if (call.deadlineAt !== null && now.getTime() >= call.deadlineAt.getTime()) {
22
22
  return { state: { state: 'failed' }, since: call.deadlineAt };
23
23
  }
24
24
  const [first] = call.replies;
@@ -1 +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"}
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,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACxF,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,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3E,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"}
@@ -1,16 +1,8 @@
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
1
  import type { ProxyShipCrew } from '../mcp-out/hand-call.js';
10
2
  import type { Sleep } from '../mcp-out/run-party.js';
11
3
  import type { McpClientParty } from '../parties/party.js';
12
4
  import type { Clock } from '../shared/clock.js';
13
- import type { ClientCalls } from './ports.js';
5
+ import type { ClientCalls, ReplyReceiver } from './ports.js';
14
6
  export type CollectReplies = (input: {
15
7
  party: McpClientParty;
16
8
  signal: AbortSignal;
@@ -18,11 +10,12 @@ export type CollectReplies = (input: {
18
10
  ended: 'stopped' | 'crewRefused';
19
11
  }>;
20
12
  interface CollectRepliesDeps {
21
- crew: Pick<ProxyShipCrew, 'pushReceive' | 'ack' | 'handled'>;
13
+ crew: Pick<ProxyShipCrew, 'ack' | 'handled'>;
14
+ replies: ReplyReceiver;
22
15
  calls: ClientCalls;
23
16
  clock: Clock;
24
17
  sleep: Sleep;
25
- /** How long it waits before it looks again, once a round took no reply. */
18
+ /** How long it waits before it looks again for calls to wait on. */
26
19
  pollMs: number;
27
20
  }
28
21
  export declare function createCollectReplies(deps: CollectRepliesDeps): CollectReplies;
@@ -1,44 +1,66 @@
1
+ import { stateOf } from './client-call.js';
1
2
  /** The fleet's codes for a crew token it no longer takes. */
2
3
  const CREW_REFUSED = new Set(['UNAUTHORIZED', 'LEASE_ENDED']);
3
- /** The most deliveries core's pushReceive takes at once. */
4
- const PUSH_RECEIVE_MAX = 10;
4
+ /** The most calls whose reply the gateway waits on at once, for one party. */
5
+ const WAITING_MAX = 10;
6
+ /** Whether the call still waits for its answer: neither completed nor failed at its deadline. */
7
+ function isWaiting(call, now) {
8
+ const { state } = stateOf(call, now);
9
+ return state === 'submitted' || state === 'working';
10
+ }
5
11
  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
12
  return async ({ party, signal }) => {
26
13
  const crewToken = party.crewToken;
27
14
  if (crewToken === null) {
28
15
  return { ended: 'crewRefused' };
29
16
  }
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' };
17
+ const caller = { fleetId: party.fleetId, party: party.name };
18
+ const waiting = new Map();
19
+ /** When each call was last asked for, so every call waited on gets its turn. */
20
+ const askedAt = new Map();
21
+ let asks = 0;
22
+ /** Whether the fleet refused the crew token: set by a wait, read by the run. */
23
+ const run = { isCrewRefused: false };
24
+ /** Asks the fleet once for the call's reply, and keeps it, then confirms it. */
25
+ const waitOn = async (call) => {
26
+ asks += 1;
27
+ askedAt.set(call.messageId, asks);
28
+ const received = await deps.replies.receiveReply(crewToken, { messageId: call.messageId, signal });
29
+ if (!received.isOk) {
30
+ if (CREW_REFUSED.has(received.error.code)) {
31
+ run.isCrewRefused = true;
32
+ }
33
+ return;
34
+ }
35
+ const reply = received.value;
36
+ if (reply === undefined) {
37
+ return;
38
+ }
39
+ await deps.calls.addReply({ fleetId: call.fleetId, messageId: call.messageId }, { ...reply, receivedAt: deps.clock.now() });
40
+ // Kept already: an acknowledgement the fleet did not take hands the reply again, and keeping it again changes nothing.
41
+ if ((await deps.crew.ack(crewToken, reply.deliveryId)).isOk) {
42
+ await deps.crew.handled(crewToken, reply.deliveryId);
34
43
  }
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);
44
+ };
45
+ /** A wait whose reply could not be kept: the run ends, and answers its failure. */
46
+ const failed = [];
47
+ while (!signal.aborted && !run.isCrewRefused && failed.length === 0) {
48
+ const now = deps.clock.now();
49
+ const open = (await deps.calls.waitedOn(caller, now))
50
+ .filter((call) => isWaiting(call, now) && !waiting.has(call.messageId))
51
+ .sort((left, right) => (askedAt.get(left.messageId) ?? 0) - (askedAt.get(right.messageId) ?? 0));
52
+ for (const call of open.slice(0, WAITING_MAX - waiting.size)) {
53
+ const waited = waitOn(call);
54
+ waiting.set(call.messageId, waited
55
+ .catch(() => {
56
+ failed.push(waited);
57
+ })
58
+ .finally(() => waiting.delete(call.messageId)));
39
59
  }
60
+ await deps.sleep(deps.pollMs, signal);
40
61
  }
41
- return { ended: 'stopped' };
62
+ await Promise.all([...waiting.values(), ...failed]);
63
+ return { ended: run.isCrewRefused ? 'crewRefused' : 'stopped' };
42
64
  };
43
65
  }
44
66
  //# sourceMappingURL=collect-replies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"collect-replies.js","sourceRoot":"","sources":["../../../src/core/mcp-in/collect-replies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"collect-replies.js","sourceRoot":"","sources":["../../../src/core/mcp-in/collect-replies.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,10 @@ export interface ToolTarget {
22
22
  isText: boolean;
23
23
  /** The type the answer comes in, the capability's first output mode; none when it states none. */
24
24
  outputContentType: string | null;
25
+ /** How long a call waits for its answer, as the capability states it; 0 when it states none. */
26
+ waitMs: number;
27
+ /** How long a call may take before it fails, as the capability states it; none when it states none. */
28
+ deadlineMs: number | null;
25
29
  }
26
30
  /** A tool as an MCP client lists it, with where its call goes. */
27
31
  export interface ListedTool {
@@ -43,7 +43,7 @@ function toolOf({ alias, summary, shipId }, capability) {
43
43
  ...(capability.title === undefined ? {} : { title: capability.title }),
44
44
  description: [capability.description, `Offered by: ${summary}`].filter((part) => part !== undefined).join('\n\n'),
45
45
  inputSchema,
46
- target: { shipId, capability: capability.name, contentType, isText, outputContentType: capability.outputModes?.[0] ?? null },
46
+ target: { shipId, capability: capability.name, contentType, isText, outputContentType: capability.outputModes?.[0] ?? null, waitMs: capability.waitMs ?? 0, deadlineMs: capability.deadlineMs ?? null },
47
47
  };
48
48
  }
49
49
  /** argo is left out: every ship may send to argo, and argo is no tool (Q12). */
@@ -1 +1 @@
1
- {"version":3,"file":"list-tools.js","sourceRoot":"","sources":["../../../src/core/mcp-in/list-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list-tools.js","sourceRoot":"","sources":["../../../src/core/mcp-in/list-tools.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { FleetId, MessageId, ShipId, ShipKind } from '@aeolus-fleet/common';
1
+ import type { DeliveryId, FleetId, MessageId, ShipId, ShipKind } from '@aeolus-fleet/common';
2
2
  import type { FleetRefusal } from '../connection/ports.js';
3
3
  import type { Result } from '../shared/result.js';
4
4
  import type { CallReply, ClientCall } from './client-call.js';
@@ -13,6 +13,10 @@ export interface Capability {
13
13
  inputModes?: string[];
14
14
  /** The media types that come back, the first the one to expect. */
15
15
  outputModes?: string[];
16
+ /** How long a call waits for its answer before the caller is answered a handle or task; none is no wait (interop 5.3). */
17
+ waitMs?: number;
18
+ /** How long a call may take before it fails; none is no deadline (interop 3.4). */
19
+ deadlineMs?: number;
16
20
  }
17
21
  /** A ship's statement as discovery shows it: its crew's, the note it was commissioned with, or none. */
18
22
  export type DiscoveredStatement = {
@@ -77,9 +81,28 @@ export interface ClientCalls {
77
81
  messageId: MessageId;
78
82
  }, reply: CallReply): Promise<void>;
79
83
  findByMessage(fleetId: FleetId, messageId: MessageId): Promise<ClientCall | undefined>;
84
+ /** The party's calls whose deadline has not passed by now, or that have none: those whose answer may still come. */
85
+ waitedOn(caller: {
86
+ fleetId: FleetId;
87
+ party: string;
88
+ }, now: Date): Promise<ClientCall[]>;
80
89
  /** The party's call by its handle; none of another party's. */
81
90
  findByHandle(caller: {
82
91
  fleetId: FleetId;
83
92
  party: string;
84
93
  }, handle: string): Promise<ClientCall | undefined>;
85
94
  }
95
+ /** A reply the fleet hands a proxy ship's crew: its delivery and its message. */
96
+ export interface ReceivedReply {
97
+ deliveryId: DeliveryId;
98
+ messageId: MessageId;
99
+ contentType: string;
100
+ payload: string;
101
+ }
102
+ /** Outbound port: the fleet's receiveReply, as a proxy ship's crew calls it: the reply to one message, if one came within the fleet's wait. */
103
+ export interface ReplyReceiver {
104
+ receiveReply(crewToken: string, wait: {
105
+ messageId: MessageId;
106
+ signal: AbortSignal;
107
+ }): Promise<Result<ReceivedReply | undefined, FleetRefusal>>;
108
+ }
@@ -31,9 +31,11 @@ export interface ProxyShipCrew {
31
31
  max: number;
32
32
  signal: AbortSignal;
33
33
  }): Promise<Result<PushedDelivery[], FleetRefusal>>;
34
+ /** Hands the delivery over with its number, naming the channel it went through (interop 5.1). */
34
35
  handed(crewToken: string, handOver: {
35
36
  deliveryId: DeliveryId;
36
37
  handOverNumber: number;
38
+ channel: string;
37
39
  }): Promise<Result<'handed' | 'acknowledged' | 'undeliverable', FleetRefusal>>;
38
40
  reply(crewToken: string, reply: Reply): Promise<Result<void, FleetRefusal>>;
39
41
  ack(crewToken: string, deliveryId: DeliveryId): Promise<Result<void, FleetRefusal>>;
@@ -1,5 +1,7 @@
1
1
  import { PAYLOAD_MAX_BYTES, payloadBytes } from '@aeolus-fleet/common';
2
2
  import { toolCalledBy, toolInputType, toolResultType } from './content-types.js';
3
+ /** The channel the gateway hands a proxy ship's delivery through: its outside MCP server (interop 5.1). */
4
+ const MCP_CHANNEL = 'mcp';
3
5
  /** The reason a call that may have run is not handled, as Needs attention shows it. */
4
6
  export const MAY_HAVE_RUN = 'The call may have run; its answer was lost. Check the outside system, then resend or dismiss.';
5
7
  const AGAIN = { kind: 'again' };
@@ -66,7 +68,7 @@ export function createHandCall(deps) {
66
68
  };
67
69
  const mayHaveRun = async () => {
68
70
  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.
71
+ // A refused report leaves the call judged: it is reported again each time it comes, and never called again.
70
72
  await deps.crew.notHandled(crewToken, { deliveryId: delivery.deliveryId, reason: MAY_HAVE_RUN });
71
73
  return { kind: 'notHandled' };
72
74
  };
@@ -90,7 +92,7 @@ export function createHandCall(deps) {
90
92
  if (delivery.state === 'handed' && call?.state !== 'notSent' && !isRepeatable) {
91
93
  return mayHaveRun();
92
94
  }
93
- const handed = await deps.crew.handed(crewToken, { deliveryId: delivery.deliveryId, handOverNumber: (delivery.handOverNumber ?? 0) + 1 });
95
+ const handed = await deps.crew.handed(crewToken, { deliveryId: delivery.deliveryId, handOverNumber: (delivery.handOverNumber ?? 0) + 1, channel: MCP_CHANNEL });
94
96
  if (!handed.isOk) {
95
97
  return AGAIN;
96
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hand-call.js","sourceRoot":"","sources":["../../../src/core/mcp-out/hand-call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hand-call.js","sourceRoot":"","sources":["../../../src/core/mcp-out/hand-call.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import type { PartyStore } from '../parties/ports.js';
4
4
  import { type DomainError } from '../shared/errors.js';
5
5
  import { type Result } from '../shared/result.js';
6
6
  import type { McpServers } from './ports.js';
7
- import { type Statement } from './statement.js';
7
+ import { type CallTiming, type Statement } from './statement.js';
8
8
  /** Outbound port: the fleet's `setStatement`, called as a proxy ship's crew. */
9
9
  export interface StatementDoor {
10
10
  setStatement(crewToken: string, statement: Statement): Promise<Result<void, FleetRefusal>>;
@@ -35,4 +35,5 @@ export declare function createStateParty(deps: {
35
35
  servers: McpServers;
36
36
  door: StatementDoor;
37
37
  marks: ToolMarks;
38
+ timing: CallTiming;
38
39
  }): StateParty;
@@ -19,7 +19,7 @@ export function createStateParty(deps) {
19
19
  if (!listed.isOk) {
20
20
  return refuse('SERVER_UNREACHABLE', `The MCP server of ${name} could not be listed: ${listed.error.reason}`);
21
21
  }
22
- const statement = statementOf({ partyName: name, tools: listed.value, repeatable: await deps.marks.repeatable(fleetId, name) });
22
+ const statement = statementOf({ partyName: name, tools: listed.value, repeatable: await deps.marks.repeatable(fleetId, name), timing: deps.timing });
23
23
  const stated = await deps.door.setStatement(party.crewToken, statement);
24
24
  if (!stated.isOk) {
25
25
  return refuse('STATEMENT_REFUSED', `The fleet refused the statement: ${stated.error.message}`);
@@ -1 +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"}
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,EAAmC,MAAM,gBAAgB,CAAC;AAkB9E;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAA6G;IAC5I,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,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACrJ,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"}
@@ -8,6 +8,10 @@ export interface Capability {
8
8
  readonly inputModes: readonly string[];
9
9
  readonly outputModes: readonly string[];
10
10
  readonly annotations?: ToolAnnotations;
11
+ /** How long a caller waits for the answer before it is answered a handle or task (interop 5.3). */
12
+ readonly waitMs: number;
13
+ /** How long a call may take before it fails: when the gateway gives up on the server (interop 3.4). */
14
+ readonly deadlineMs: number;
11
15
  /** argo's mark that a call may be handed again when it died unanswered; the server's hints never set it. */
12
16
  readonly repeatable?: true;
13
17
  }
@@ -15,6 +19,11 @@ export interface Statement {
15
19
  readonly summary: string;
16
20
  readonly capabilities: readonly Capability[];
17
21
  }
22
+ /** The gateway's own timing for a call to an outside server: how long a caller waits, and when the call fails. */
23
+ export interface CallTiming {
24
+ readonly waitMs: number;
25
+ readonly deadlineMs: number;
26
+ }
18
27
  /**
19
28
  * The statement of a party's proxy ship. Its summary names the party only:
20
29
  * the server's URL and credential stay in the gateway (NAT both ways).
@@ -23,4 +32,5 @@ export declare function statementOf(input: {
23
32
  partyName: string;
24
33
  tools: readonly OutsideTool[];
25
34
  repeatable: ReadonlySet<string>;
35
+ timing: CallTiming;
26
36
  }): Statement;
@@ -2,11 +2,11 @@
2
2
  * A proxy ship's statement (decision 0047), written from its outside MCP
3
3
  * server's `tools/list`: each tool is one capability, with MCP's fields as
4
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).
5
+ * and carry its result, argo's repeatable mark (interop 5.2), and the
6
+ * gateway's own wait and deadline for a call (interop 3.4, 5.3).
7
7
  */
8
8
  import { toolInputType, toolResultType } from './content-types.js';
9
- function capabilityOf(tool, isRepeatable) {
9
+ function capabilityOf(tool, marked) {
10
10
  return {
11
11
  name: tool.name,
12
12
  ...(tool.title === undefined ? {} : { title: tool.title }),
@@ -16,7 +16,9 @@ function capabilityOf(tool, isRepeatable) {
16
16
  inputModes: [toolInputType(tool.name)],
17
17
  outputModes: [toolResultType(tool.name)],
18
18
  ...(tool.annotations === undefined ? {} : { annotations: tool.annotations }),
19
- ...(isRepeatable ? { repeatable: true } : {}),
19
+ ...(marked.isRepeatable ? { repeatable: true } : {}),
20
+ waitMs: marked.timing.waitMs,
21
+ deadlineMs: marked.timing.deadlineMs,
20
22
  };
21
23
  }
22
24
  /**
@@ -26,7 +28,7 @@ function capabilityOf(tool, isRepeatable) {
26
28
  export function statementOf(input) {
27
29
  return {
28
30
  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))),
31
+ capabilities: input.tools.map((tool) => capabilityOf(tool, { isRepeatable: input.repeatable.has(tool.name), timing: input.timing })),
30
32
  };
31
33
  }
32
34
  //# sourceMappingURL=statement.js.map
@@ -1 +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"}
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;AAgCnE,SAAS,YAAY,CAAC,IAAiB,EAAE,MAAqD;IAC5F,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,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;QAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgH;IAC1I,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,EAAE,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KACrI,CAAC;AACJ,CAAC"}
@@ -83,6 +83,8 @@ export interface IssuedTokens {
83
83
  revokeIssuedBy(codeHash: string): Promise<void>;
84
84
  /** Revokes every pair that stands for the account grant in the fleet: its person signs in again. */
85
85
  revokeGrant(fleetId: FleetId, grantId: string): Promise<void>;
86
+ /** Revokes every pair that stands for the party in the fleet: its client is refused at its next call. */
87
+ revokeParty(fleetId: FleetId, party: string): Promise<void>;
86
88
  }
87
89
  /** active: in use; rotated: its refresh token was traded for a new pair; revoked: refused for good. */
88
90
  export type TokenState = 'active' | 'rotated' | 'revoked';
@@ -1,4 +1,5 @@
1
1
  import type { FleetId } from '@aeolus-fleet/common';
2
+ import type { ActorCredential } from '../actors/credential-of.js';
2
3
  import type { FleetRefusal } from '../connection/ports.js';
3
4
  import type { Result } from '../shared/result.js';
4
5
  /** Whether a fleet's outside parties are on, and when it was last set; off for a fleet never set (interop I-3). */
@@ -9,11 +10,6 @@ export interface OutsidePartySwitches {
9
10
  at: Date;
10
11
  }): Promise<void>;
11
12
  }
12
- /** The credential an actor called the gateway with, passed on so the fleet answers as that actor. */
13
- export interface ActorCredential {
14
- cookie?: string;
15
- crewToken?: string;
16
- }
17
13
  /** Outbound port: the fleet's network, as the actor reads it. */
18
14
  export interface FleetNetwork {
19
15
  /** Whether the fleet applies no network rules, so every ship reaches every ship. */
@@ -1,8 +1,9 @@
1
1
  import type { Actor } from '../actors/authenticate-actor.js';
2
+ import type { ActorCredential, CredentialOf } from '../actors/credential-of.js';
2
3
  import type { Clock } from '../shared/clock.js';
3
4
  import { type DomainError } from '../shared/errors.js';
4
5
  import { type Result } from '../shared/result.js';
5
- import type { ActorCredential, FleetNetwork, OutsidePartySwitches } from './ports.js';
6
+ import type { FleetNetwork, OutsidePartySwitches } from './ports.js';
6
7
  /** The scope that switches a fleet's outside parties, as it changes the fleet's network. */
7
8
  export declare const SWITCHING_SCOPE = "fleet:network";
8
9
  export type ReadOutsideParties = (actor: Actor) => Promise<{
@@ -15,7 +16,7 @@ export type SetOutsideParties = (input: {
15
16
  isOpenNetworkConfirmed: boolean;
16
17
  }) => Promise<Result<{
17
18
  isOn: boolean;
18
- }, DomainError<'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'FLEET_UNAVAILABLE'>>>;
19
+ }, DomainError<'NOT_A_NETWORKER' | 'OPEN_NETWORK' | 'FLEET_UNAVAILABLE' | 'NOT_AN_ACTOR'>>>;
19
20
  /** Use case: whether the actor's fleet's outside parties are on. */
20
21
  export declare function createReadOutsideParties(deps: {
21
22
  switches: OutsidePartySwitches;
@@ -25,10 +26,11 @@ export declare function createReadOutsideParties(deps: {
25
26
  * on or off (interop I-3). The gateway sets no policy but warns: turning
26
27
  * them on while the fleet applies no network rules needs the warning
27
28
  * confirmed. The rules are read as the actor, so the fleet answers what that
28
- * actor may see. Turning off reads nothing.
29
+ * actor may see, an account by its account token. Turning off reads nothing.
29
30
  */
30
31
  export declare function createSetOutsideParties(deps: {
31
32
  switches: OutsidePartySwitches;
32
33
  network: FleetNetwork;
33
34
  clock: Clock;
35
+ credentialOf: CredentialOf;
34
36
  }): SetOutsideParties;