sealbridge 0.2.2 → 0.3.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 (251) hide show
  1. package/README.ja.md +492 -30
  2. package/README.md +522 -109
  3. package/dist/cli/dist/accept.d.ts +13 -0
  4. package/dist/cli/dist/accept.js +115 -0
  5. package/dist/cli/dist/accept.js.map +1 -0
  6. package/dist/cli/dist/approval-summary.d.ts +1 -1
  7. package/dist/cli/dist/board.d.ts +10 -9
  8. package/dist/cli/dist/board.js +62 -31
  9. package/dist/cli/dist/board.js.map +1 -1
  10. package/dist/cli/dist/command-identity.d.ts +6 -0
  11. package/dist/cli/dist/command-identity.js +13 -0
  12. package/dist/cli/dist/command-identity.js.map +1 -0
  13. package/dist/cli/dist/config.d.ts +3 -0
  14. package/dist/cli/dist/config.js +29 -0
  15. package/dist/cli/dist/config.js.map +1 -0
  16. package/dist/cli/dist/connections.d.ts +15 -0
  17. package/dist/cli/dist/connections.js +191 -0
  18. package/dist/cli/dist/connections.js.map +1 -0
  19. package/dist/cli/dist/contacts.d.ts +4 -3
  20. package/dist/cli/dist/contacts.js +39 -28
  21. package/dist/cli/dist/contacts.js.map +1 -1
  22. package/dist/cli/dist/doctor.d.ts +9 -0
  23. package/dist/cli/dist/doctor.js +46 -5
  24. package/dist/cli/dist/doctor.js.map +1 -1
  25. package/dist/cli/dist/error-messages.js +22 -0
  26. package/dist/cli/dist/error-messages.js.map +1 -1
  27. package/dist/cli/dist/index.js +44 -6
  28. package/dist/cli/dist/index.js.map +1 -1
  29. package/dist/cli/dist/invite-output.d.ts +14 -0
  30. package/dist/cli/dist/invite-output.js +66 -0
  31. package/dist/cli/dist/invite-output.js.map +1 -0
  32. package/dist/cli/dist/invite-share.d.ts +6 -3
  33. package/dist/cli/dist/invite-share.js +40 -15
  34. package/dist/cli/dist/invite-share.js.map +1 -1
  35. package/dist/cli/dist/invites-migrate.d.ts +3 -0
  36. package/dist/cli/dist/invites-migrate.js +33 -0
  37. package/dist/cli/dist/invites-migrate.js.map +1 -0
  38. package/dist/cli/dist/mcp.d.ts +7 -5
  39. package/dist/cli/dist/mcp.js +23 -18
  40. package/dist/cli/dist/mcp.js.map +1 -1
  41. package/dist/cli/dist/network.d.ts +11 -1
  42. package/dist/cli/dist/network.js +150 -87
  43. package/dist/cli/dist/network.js.map +1 -1
  44. package/dist/cli/dist/pending.d.ts +8 -0
  45. package/dist/cli/dist/pending.js +50 -0
  46. package/dist/cli/dist/pending.js.map +1 -0
  47. package/dist/cli/dist/public-settings.d.ts +5 -4
  48. package/dist/cli/dist/public-settings.js +13 -15
  49. package/dist/cli/dist/public-settings.js.map +1 -1
  50. package/dist/cli/dist/receipt.d.ts +1 -1
  51. package/dist/cli/dist/relay-auth.d.ts +3 -0
  52. package/dist/cli/dist/relay-auth.js +23 -0
  53. package/dist/cli/dist/relay-auth.js.map +1 -0
  54. package/dist/cli/dist/requests.d.ts +10 -0
  55. package/dist/cli/dist/requests.js +91 -0
  56. package/dist/cli/dist/requests.js.map +1 -0
  57. package/dist/cli/dist/sdk.d.ts +10 -0
  58. package/dist/cli/dist/sdk.js +7 -0
  59. package/dist/cli/dist/sdk.js.map +1 -0
  60. package/dist/cli/dist/setup-files.d.ts +24 -0
  61. package/dist/cli/dist/setup-files.js +190 -0
  62. package/dist/cli/dist/setup-files.js.map +1 -0
  63. package/dist/cli/dist/setup-hosts.d.ts +29 -0
  64. package/dist/cli/dist/setup-hosts.js +75 -0
  65. package/dist/cli/dist/setup-hosts.js.map +1 -0
  66. package/dist/cli/dist/setup.d.ts +61 -0
  67. package/dist/cli/dist/setup.js +243 -0
  68. package/dist/cli/dist/setup.js.map +1 -0
  69. package/dist/cli/dist/task-input.d.ts +1 -1
  70. package/dist/cli/dist/wake-hook.d.ts +1 -1
  71. package/dist/cli/dist/worker-json.d.ts +4 -0
  72. package/dist/cli/dist/worker-json.js +87 -0
  73. package/dist/cli/dist/worker-json.js.map +1 -0
  74. package/dist/examples/two-owner-demo/dist/run-demo.d.ts +13 -13
  75. package/dist/package.json +1 -1
  76. package/dist/packages/adapters/dist/command.d.ts +2 -2
  77. package/dist/packages/adapters/dist/credential-proxy.d.ts +2 -2
  78. package/dist/packages/adapters/dist/index.d.ts +1 -1
  79. package/dist/packages/adapters/dist/mcp.d.ts +2 -2
  80. package/dist/packages/adapters/dist/openai.d.ts +2 -2
  81. package/dist/packages/adapters/dist/sandbox.d.ts +2 -2
  82. package/dist/packages/core/dist/connection.d.ts +58 -0
  83. package/dist/packages/core/dist/connection.js +132 -0
  84. package/dist/packages/core/dist/connection.js.map +1 -0
  85. package/dist/packages/core/dist/delivery-status.d.ts +22 -0
  86. package/dist/packages/core/dist/delivery-status.js +53 -0
  87. package/dist/packages/core/dist/delivery-status.js.map +1 -0
  88. package/dist/packages/core/dist/discovery.d.ts +7 -6
  89. package/dist/packages/core/dist/discovery.js +19 -20
  90. package/dist/packages/core/dist/discovery.js.map +1 -1
  91. package/dist/packages/core/dist/edge.d.ts +1 -0
  92. package/dist/packages/core/dist/edge.js +1 -0
  93. package/dist/packages/core/dist/edge.js.map +1 -1
  94. package/dist/packages/core/dist/index.d.ts +3 -0
  95. package/dist/packages/core/dist/index.js +3 -0
  96. package/dist/packages/core/dist/index.js.map +1 -1
  97. package/dist/packages/core/dist/protocol.d.ts +24 -0
  98. package/dist/packages/core/dist/protocol.js +54 -0
  99. package/dist/packages/core/dist/protocol.js.map +1 -0
  100. package/dist/packages/core/dist/receipts.d.ts +1 -0
  101. package/dist/packages/core/dist/receipts.js +1 -1
  102. package/dist/packages/core/dist/receipts.js.map +1 -1
  103. package/dist/packages/core/dist/schema.d.ts +1 -0
  104. package/dist/packages/core/dist/schema.js +13 -2
  105. package/dist/packages/core/dist/schema.js.map +1 -1
  106. package/dist/packages/ledger/dist/index.d.ts +1 -1
  107. package/dist/packages/relay/dist/admission.d.ts +14 -0
  108. package/dist/packages/relay/dist/admission.js +70 -0
  109. package/dist/packages/relay/dist/admission.js.map +1 -0
  110. package/dist/packages/relay/dist/fetch.d.ts +8 -2
  111. package/dist/packages/relay/dist/fetch.js +41 -12
  112. package/dist/packages/relay/dist/fetch.js.map +1 -1
  113. package/dist/packages/relay/dist/index.d.ts +23 -12
  114. package/dist/packages/relay/dist/index.js +130 -78
  115. package/dist/packages/relay/dist/index.js.map +1 -1
  116. package/dist/packages/relay/dist/journal.d.ts +1 -1
  117. package/dist/packages/relay/dist/notifications.d.ts +1 -1
  118. package/dist/packages/relay/dist/retry.d.ts +23 -0
  119. package/dist/packages/relay/dist/retry.js +43 -1
  120. package/dist/packages/relay/dist/retry.js.map +1 -1
  121. package/dist/packages/relay/dist/ssrf.d.ts +3 -2
  122. package/dist/packages/relay/dist/ssrf.js.map +1 -1
  123. package/dist/packages/relay/dist/worker.js +1 -1
  124. package/dist/packages/relay/dist/worker.js.map +1 -1
  125. package/dist/packages/runtime/dist/a2a.d.ts +1 -1
  126. package/dist/packages/runtime/dist/a2a.js +1 -1
  127. package/dist/packages/runtime/dist/adapter.d.ts +2 -2
  128. package/dist/packages/runtime/dist/application-config.d.ts +20 -0
  129. package/dist/packages/runtime/dist/application-config.js +222 -0
  130. package/dist/packages/runtime/dist/application-config.js.map +1 -0
  131. package/dist/packages/runtime/dist/approval-providers.d.ts +24 -3
  132. package/dist/packages/runtime/dist/approval-providers.js +79 -3
  133. package/dist/packages/runtime/dist/approval-providers.js.map +1 -1
  134. package/dist/packages/runtime/dist/connection-admission-review.d.ts +39 -0
  135. package/dist/packages/runtime/dist/connection-admission-review.js +86 -0
  136. package/dist/packages/runtime/dist/connection-admission-review.js.map +1 -0
  137. package/dist/packages/runtime/dist/connection-persistence.d.ts +35 -0
  138. package/dist/packages/runtime/dist/connection-persistence.js +181 -0
  139. package/dist/packages/runtime/dist/connection-persistence.js.map +1 -0
  140. package/dist/packages/runtime/dist/connection-records.d.ts +167 -0
  141. package/dist/packages/runtime/dist/connection-records.js +132 -0
  142. package/dist/packages/runtime/dist/connection-records.js.map +1 -0
  143. package/dist/packages/runtime/dist/connection-router.d.ts +45 -0
  144. package/dist/packages/runtime/dist/connection-router.js +130 -0
  145. package/dist/packages/runtime/dist/connection-router.js.map +1 -0
  146. package/dist/packages/runtime/dist/connection-service.d.ts +159 -0
  147. package/dist/packages/runtime/dist/connection-service.js +239 -0
  148. package/dist/packages/runtime/dist/connection-service.js.map +1 -0
  149. package/dist/packages/runtime/dist/connection-transport.d.ts +14 -0
  150. package/dist/packages/runtime/dist/connection-transport.js +89 -0
  151. package/dist/packages/runtime/dist/connection-transport.js.map +1 -0
  152. package/dist/packages/runtime/dist/delivery-records.d.ts +180 -0
  153. package/dist/packages/runtime/dist/delivery-records.js +205 -0
  154. package/dist/packages/runtime/dist/delivery-records.js.map +1 -0
  155. package/dist/packages/runtime/dist/delivery-status-router.d.ts +27 -0
  156. package/dist/packages/runtime/dist/delivery-status-router.js +150 -0
  157. package/dist/packages/runtime/dist/delivery-status-router.js.map +1 -0
  158. package/dist/packages/runtime/dist/delivery-status.d.ts +43 -0
  159. package/dist/packages/runtime/dist/delivery-status.js +193 -0
  160. package/dist/packages/runtime/dist/delivery-status.js.map +1 -0
  161. package/dist/packages/runtime/dist/delivery-store.d.ts +125 -0
  162. package/dist/packages/runtime/dist/delivery-store.js +1047 -0
  163. package/dist/packages/runtime/dist/delivery-store.js.map +1 -0
  164. package/dist/packages/runtime/dist/gateway.d.ts +4 -3
  165. package/dist/packages/runtime/dist/gateway.js.map +1 -1
  166. package/dist/packages/runtime/dist/held-request-review.d.ts +49 -0
  167. package/dist/packages/runtime/dist/held-request-review.js +122 -0
  168. package/dist/packages/runtime/dist/held-request-review.js.map +1 -0
  169. package/dist/packages/runtime/dist/held-request-store.d.ts +112 -0
  170. package/dist/packages/runtime/dist/held-request-store.js +290 -0
  171. package/dist/packages/runtime/dist/held-request-store.js.map +1 -0
  172. package/dist/packages/runtime/dist/idempotency-store.d.ts +53 -0
  173. package/dist/packages/runtime/dist/idempotency-store.js +331 -0
  174. package/dist/packages/runtime/dist/idempotency-store.js.map +1 -0
  175. package/dist/packages/runtime/dist/inbox.d.ts +1 -1
  176. package/dist/packages/runtime/dist/index.d.ts +27 -1
  177. package/dist/packages/runtime/dist/index.js +26 -0
  178. package/dist/packages/runtime/dist/index.js.map +1 -1
  179. package/dist/packages/runtime/dist/invite-store.d.ts +76 -0
  180. package/dist/packages/runtime/dist/invite-store.js +337 -0
  181. package/dist/packages/runtime/dist/invite-store.js.map +1 -0
  182. package/dist/packages/runtime/dist/key-store.d.ts +77 -0
  183. package/dist/packages/runtime/dist/key-store.js +226 -0
  184. package/dist/packages/runtime/dist/key-store.js.map +1 -0
  185. package/dist/packages/runtime/dist/local-identity.d.ts +33 -0
  186. package/dist/packages/runtime/dist/local-identity.js +278 -0
  187. package/dist/packages/runtime/dist/local-identity.js.map +1 -0
  188. package/dist/packages/runtime/dist/mcp-rpc.d.ts +19 -0
  189. package/dist/packages/runtime/dist/mcp-rpc.js +175 -0
  190. package/dist/packages/runtime/dist/mcp-rpc.js.map +1 -0
  191. package/dist/packages/runtime/dist/mcp-server.d.ts +46 -19
  192. package/dist/packages/runtime/dist/mcp-server.js +427 -184
  193. package/dist/packages/runtime/dist/mcp-server.js.map +1 -1
  194. package/dist/packages/runtime/dist/mcp-tool-catalog.d.ts +1 -1
  195. package/dist/packages/runtime/dist/mcp-tool-catalog.js +172 -13
  196. package/dist/packages/runtime/dist/mcp-tool-catalog.js.map +1 -1
  197. package/dist/packages/runtime/dist/mcp.d.ts +2 -2
  198. package/dist/packages/runtime/dist/message-status.d.ts +32 -0
  199. package/dist/packages/runtime/dist/message-status.js +29 -0
  200. package/dist/packages/runtime/dist/message-status.js.map +1 -0
  201. package/dist/packages/runtime/dist/outbox.d.ts +91 -0
  202. package/dist/packages/runtime/dist/outbox.js +462 -0
  203. package/dist/packages/runtime/dist/outbox.js.map +1 -0
  204. package/dist/packages/runtime/dist/policy.d.ts +1 -1
  205. package/dist/packages/runtime/dist/protocol-peer-store.d.ts +40 -0
  206. package/dist/packages/runtime/dist/protocol-peer-store.js +176 -0
  207. package/dist/packages/runtime/dist/protocol-peer-store.js.map +1 -0
  208. package/dist/packages/runtime/dist/protocol-release.d.ts +26 -0
  209. package/dist/packages/runtime/dist/protocol-release.js +76 -0
  210. package/dist/packages/runtime/dist/protocol-release.js.map +1 -0
  211. package/dist/packages/runtime/dist/quota.d.ts +1 -1
  212. package/dist/packages/runtime/dist/relay-selection.d.ts +20 -0
  213. package/dist/packages/runtime/dist/relay-selection.js +34 -0
  214. package/dist/packages/runtime/dist/relay-selection.js.map +1 -0
  215. package/dist/packages/runtime/dist/requester-pending-store.d.ts +59 -0
  216. package/dist/packages/runtime/dist/requester-pending-store.js +266 -0
  217. package/dist/packages/runtime/dist/requester-pending-store.js.map +1 -0
  218. package/dist/packages/runtime/dist/secret-store.d.ts +19 -0
  219. package/dist/packages/runtime/dist/secret-store.js +51 -0
  220. package/dist/packages/runtime/dist/secret-store.js.map +1 -0
  221. package/dist/packages/runtime/dist/session-audit.d.ts +29 -7
  222. package/dist/packages/runtime/dist/session-audit.js +149 -29
  223. package/dist/packages/runtime/dist/session-audit.js.map +1 -1
  224. package/dist/packages/runtime/dist/session.d.ts +101 -9
  225. package/dist/packages/runtime/dist/session.js +696 -96
  226. package/dist/packages/runtime/dist/session.js.map +1 -1
  227. package/dist/packages/runtime/dist/task-journal.d.ts +18 -3
  228. package/dist/packages/runtime/dist/task-journal.js +271 -18
  229. package/dist/packages/runtime/dist/task-journal.js.map +1 -1
  230. package/dist/packages/runtime/dist/verifier.d.ts +3 -2
  231. package/dist/packages/runtime/dist/verifier.js +1 -0
  232. package/dist/packages/runtime/dist/verifier.js.map +1 -1
  233. package/dist/packages/runtime/dist/worker-trust-store.d.ts +111 -0
  234. package/dist/packages/runtime/dist/worker-trust-store.js +592 -0
  235. package/dist/packages/runtime/dist/worker-trust-store.js.map +1 -0
  236. package/dist/packages/sandbox/dist/container.d.ts +1 -1
  237. package/dist/packages/sandbox/dist/index.d.ts +1 -1
  238. package/dist/spec/README.ja.md +21 -1
  239. package/dist/spec/README.md +20 -1
  240. package/dist/spec/agent-card.schema.json +11 -1
  241. package/dist/spec/delivery-status.schema.json +106 -0
  242. package/dist/spec/examples/protocol-versions/sample-agent-card.json +35 -0
  243. package/dist/spec/examples/sample-delivery-status.json +21 -0
  244. package/dist/spec/examples/sample-task-manifest.0.1.0.json +173 -0
  245. package/dist/spec/examples/sample-task-manifest.0.2.0.json +173 -0
  246. package/dist/spec/task-manifest.0.1.0.schema.json +422 -0
  247. package/dist/spec/task-manifest.0.2.0.schema.json +422 -0
  248. package/dist/spec/task-manifest.schema.json +9 -418
  249. package/docs/sdk.ja.md +133 -0
  250. package/docs/sdk.md +138 -0
  251. package/package.json +15 -3
@@ -0,0 +1,175 @@
1
+ const MAX_BYTES = 1024 * 1024;
2
+ const MAX_CALLS = 32;
3
+ const aborted = () => new Error('APPROVAL_ABORTED');
4
+ /** Duplex routing keeps replies and cancellation moving while tools await the host. */
5
+ export class McpRpc {
6
+ output;
7
+ handle;
8
+ framed;
9
+ serial = 0;
10
+ closed = false;
11
+ pending = new Map();
12
+ calls = new Map();
13
+ writes = Promise.resolve();
14
+ constructor(output, handle) {
15
+ this.output = output;
16
+ this.handle = handle;
17
+ }
18
+ request(method, params, signal) {
19
+ if (this.closed || signal.aborted)
20
+ return Promise.reject(aborted());
21
+ if (this.pending.size >= MAX_CALLS)
22
+ return Promise.reject(new Error('MCP_TOO_MANY_REQUESTS'));
23
+ const id = 'sealbridge:' + ++this.serial;
24
+ return new Promise((resolve, reject) => {
25
+ const cleanup = () => {
26
+ this.pending.delete(id);
27
+ signal.removeEventListener('abort', cancel);
28
+ };
29
+ const cancel = () => {
30
+ cleanup();
31
+ void this.write({ jsonrpc: '2.0', method: 'notifications/cancelled', params: { requestId: id } });
32
+ reject(signal.reason instanceof Error ? signal.reason : aborted());
33
+ };
34
+ this.pending.set(id, {
35
+ resolve: (value) => { cleanup(); resolve(value); },
36
+ reject: (error) => { cleanup(); reject(error); },
37
+ });
38
+ signal.addEventListener('abort', cancel, { once: true });
39
+ void this.write({ jsonrpc: '2.0', id, method, params }).catch((error) => {
40
+ this.pending.get(id)?.reject(error);
41
+ });
42
+ });
43
+ }
44
+ write(value) {
45
+ if (this.closed)
46
+ return Promise.resolve();
47
+ const json = JSON.stringify(value);
48
+ const frame = this.framed
49
+ ? 'Content-Length: ' + Buffer.byteLength(json) + '\r\n\r\n' + json
50
+ : json + '\n';
51
+ const write = this.writes.then(() => new Promise((resolve, reject) => {
52
+ if (this.closed) {
53
+ resolve();
54
+ return;
55
+ }
56
+ this.output.write(frame, (error) => error ? reject(error) : resolve());
57
+ }));
58
+ this.writes = write.catch(() => undefined);
59
+ return write;
60
+ }
61
+ route(body) {
62
+ let message;
63
+ try {
64
+ message = JSON.parse(body);
65
+ }
66
+ catch {
67
+ void this.write({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } });
68
+ return;
69
+ }
70
+ if (message && message.jsonrpc === '2.0' && !Object.hasOwn(message, 'method')) {
71
+ if (typeof message.id === 'string') {
72
+ const pending = this.pending.get(message.id);
73
+ if (Object.hasOwn(message, 'error'))
74
+ pending?.reject(new Error('APPROVAL_REJECTED'));
75
+ else if (Object.hasOwn(message, 'result'))
76
+ pending?.resolve(message.result);
77
+ }
78
+ return;
79
+ }
80
+ if (message?.method === 'notifications/cancelled') {
81
+ const id = message.params?.requestId;
82
+ if (id !== undefined)
83
+ this.calls.get(id)?.abort(aborted());
84
+ return;
85
+ }
86
+ const id = message?.id;
87
+ const hasId = typeof id === 'string' || typeof id === 'number';
88
+ if (hasId && (this.calls.size >= MAX_CALLS || this.calls.has(id))) {
89
+ void this.write({ jsonrpc: '2.0', id, error: { code: -32000, message: 'MCP_TOO_MANY_REQUESTS' } });
90
+ return;
91
+ }
92
+ if (!hasId && message?.method !== 'notifications/initialized')
93
+ return;
94
+ const controller = new AbortController();
95
+ if (hasId)
96
+ this.calls.set(id, controller);
97
+ void this.handle(message, controller.signal).then((response) => {
98
+ if (response !== undefined)
99
+ return this.write(response);
100
+ }).catch(() => this.close()).finally(() => { if (hasId)
101
+ this.calls.delete(id); });
102
+ }
103
+ close() {
104
+ if (this.closed)
105
+ return;
106
+ this.closed = true;
107
+ for (const pending of this.pending.values())
108
+ pending.reject(aborted());
109
+ for (const call of this.calls.values())
110
+ call.abort(aborted());
111
+ this.calls.clear();
112
+ }
113
+ async serve(input) {
114
+ let buffer = Buffer.alloc(0);
115
+ const onClose = () => { this.close(); input.destroy(); };
116
+ this.output.once('close', onClose);
117
+ this.output.once('error', onClose);
118
+ try {
119
+ for await (const chunk of input) {
120
+ buffer = Buffer.concat([buffer, Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)]);
121
+ while (buffer.length) {
122
+ if (this.framed === undefined) {
123
+ const preview = buffer.toString('utf8');
124
+ if (preview.startsWith('Content-Length'))
125
+ this.framed = true;
126
+ else if (preview.trimStart().startsWith('{') || preview.includes('\n'))
127
+ this.framed = false;
128
+ else
129
+ break;
130
+ }
131
+ let body;
132
+ if (this.framed) {
133
+ const end = buffer.indexOf('\r\n\r\n');
134
+ if (end < 0)
135
+ break;
136
+ const match = /^Content-Length:\s*(\d+)\s*$/im.exec(buffer.subarray(0, end).toString('utf8'));
137
+ if (!match)
138
+ throw new Error('INVALID_FRAMING');
139
+ const length = Number(match[1]);
140
+ if (!Number.isSafeInteger(length) || length > MAX_BYTES)
141
+ throw new Error('MCP_MESSAGE_TOO_LARGE');
142
+ if (buffer.length < end + 4 + length)
143
+ break;
144
+ body = buffer.subarray(end + 4, end + 4 + length).toString('utf8');
145
+ buffer = buffer.subarray(end + 4 + length);
146
+ }
147
+ else {
148
+ const end = buffer.indexOf(10);
149
+ if (end < 0)
150
+ break;
151
+ if (end > MAX_BYTES)
152
+ throw new Error('MCP_MESSAGE_TOO_LARGE');
153
+ body = buffer.subarray(0, end).toString('utf8').replace(/\r$/, '');
154
+ buffer = buffer.subarray(end + 1);
155
+ }
156
+ if (body.trim())
157
+ this.route(body);
158
+ }
159
+ if (buffer.length > MAX_BYTES)
160
+ throw new Error('MCP_MESSAGE_TOO_LARGE');
161
+ }
162
+ }
163
+ catch (error) {
164
+ if (!this.closed)
165
+ throw error;
166
+ }
167
+ finally {
168
+ this.close();
169
+ this.output.removeListener('close', onClose);
170
+ this.output.removeListener('error', onClose);
171
+ await this.writes;
172
+ }
173
+ }
174
+ }
175
+ //# sourceMappingURL=mcp-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-rpc.js","sourceRoot":"","sources":["../src/mcp-rpc.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,25 @@
1
- import type { Json, KeyPair } from '@acp/core';
2
- import { RevocationRegistry } from '@acp/core';
3
- import type { RelayTransport } from '@acp/relay';
1
+ import type { Json, KeyPair } from '../../core/dist/index.js';
2
+ import { RevocationRegistry } from '../../core/dist/index.js';
3
+ import type { RelayAuthRecoveryOptions } from '../../relay/dist/index.js';
4
+ import type { RelayTransport } from '../../relay/dist/index.js';
4
5
  import type { Readable, Writable } from 'node:stream';
5
6
  import type { ApprovalProvider } from './approval-providers.js';
6
- export interface AcpMcpServerOptions {
7
- owner: KeyPair;
7
+ import type { ProtocolReleaseOptions } from './protocol-release.js';
8
+ import type { ConnectionHumanReviewProvider } from './connection-service.js';
9
+ import type { IdempotencyStoreOptions } from './idempotency-store.js';
10
+ import { GatewayDeliveryService } from './outbox.js';
11
+ import type { GatewayDeliveryOptions } from './outbox.js';
12
+ import type { InviteStoreOptions } from './invite-store.js';
13
+ export interface AcpMcpServerOptions extends RelayAuthRecoveryOptions, ProtocolReleaseOptions {
14
+ idempotencyOptions?: IdempotencyStoreOptions;
15
+ deliveryService?: GatewayDeliveryService;
16
+ deliveryOptions?: GatewayDeliveryOptions;
17
+ connectionReview?: ConnectionHumanReviewProvider;
18
+ owner?: KeyPair;
19
+ /** Data-root and filesystem options shared by local application state. */
20
+ identityOptions?: InviteStoreOptions;
21
+ /** Constructs transports after relay policy checks; useful for offline hosts/tests. */
22
+ transportFactory?: (url: string, owner?: KeyPair) => RelayTransport;
8
23
  relay?: RelayTransport | string;
9
24
  revocation?: RevocationRegistry;
10
25
  name?: string;
@@ -39,34 +54,47 @@ export interface AcpMcpServerOptions {
39
54
  */
40
55
  approvalWebhookUrl?: string;
41
56
  approvalWebhookFetcher?: typeof fetch;
42
- /** Use InteractiveCliApprovalProvider instead of policy auto-approval. */
57
+ /** Request host form elicitation for outbound and final approvals. */
43
58
  requireInteractiveApproval?: boolean;
44
- /** Streams for `requireInteractiveApproval`. Default to process stdin and stdout. */
45
- approvalInput?: Readable;
46
- approvalOutput?: Writable;
59
+ /** Internal form timeout; defaults to 60000 ms and is bounded by the task deadline. */
60
+ approvalTimeoutMs?: number;
47
61
  }
48
62
  /** Origin plus pathname, without a trailing slash. Query and fragment are dropped. */
49
63
  export declare function normalizeMcpRelayUrl(value: string): string;
50
64
  /** Dependency-free MCP server for ACP delegation, discovery, audit verification, and revocation. */
51
65
  export declare class AcpMcpServer {
52
66
  readonly options: AcpMcpServerOptions;
67
+ private idempotency?;
68
+ private readonly deliveryTransports;
69
+ private deliveryService?;
70
+ private deliveryStarted;
71
+ private delivery;
72
+ startDelivery(): Promise<void>;
73
+ stopDelivery(): void;
53
74
  readonly revocation: RevocationRegistry;
54
75
  private readonly allowedWorkers?;
55
76
  private readonly allowedRelays?;
56
- private readonly approval;
57
- private framed;
77
+ private selectedApproval?;
78
+ private selectedPending?;
79
+ private pending;
80
+ private selectedOwner?;
81
+ private owner;
82
+ private approval;
83
+ private rpc?;
84
+ private formSupported;
58
85
  constructor(options: AcpMcpServerOptions);
59
- handle(message: unknown): Promise<Json | undefined>;
86
+ handle(message: unknown, signal?: AbortSignal): Promise<Json | undefined>;
60
87
  /** Read newline-delimited JSON or Content-Length frames and answer in the same framing. */
61
88
  serve(input: Readable, output: Writable): Promise<void>;
62
- private drain;
63
- private reply;
64
- private write;
65
89
  private dispatch;
66
90
  private toolsCall;
91
+ private idempotencyAction;
92
+ private normalizedCall;
67
93
  private callTool;
94
+ private inviteStore;
95
+ private selectedRelay;
96
+ private transport;
68
97
  private client;
69
- private isInvite;
70
98
  private parseInvite;
71
99
  /** Reject unlisted workers before any relay dial. */
72
100
  private assertWorker;
@@ -77,11 +105,10 @@ export declare class AcpMcpServer {
77
105
  */
78
106
  private assertRelays;
79
107
  private outboundApprovalRequired;
80
- /** Ask the configured provider before task input is written to the relay. */
81
- private approveOutbound;
108
+ /** Bind pre-send consent to the resolved task, without including invitation tokens. */
109
+ private beforePropose;
82
110
  private delegateTask;
83
111
  private delegateMulti;
84
- private relayList;
85
112
  private verifyBundle;
86
113
  private createInvite;
87
114
  private revokeToken;