@animalabs/agent-framework 0.22.3 → 0.23.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 (234) hide show
  1. package/README.md +105 -3
  2. package/dist/src/agent.d.ts +36 -10
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +76 -32
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/code-execution/index.d.ts +1 -1
  7. package/dist/src/code-execution/index.d.ts.map +1 -1
  8. package/dist/src/code-execution/index.js.map +1 -1
  9. package/dist/src/code-execution/py-runner.d.ts +34 -2
  10. package/dist/src/code-execution/py-runner.d.ts.map +1 -1
  11. package/dist/src/code-execution/py-runner.js +72 -16
  12. package/dist/src/code-execution/py-runner.js.map +1 -1
  13. package/dist/src/code-execution/runtime-py.d.ts +3 -2
  14. package/dist/src/code-execution/runtime-py.d.ts.map +1 -1
  15. package/dist/src/code-execution/runtime-py.js +47 -7
  16. package/dist/src/code-execution/runtime-py.js.map +1 -1
  17. package/dist/src/code-execution/tool-definition.d.ts +12 -7
  18. package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
  19. package/dist/src/code-execution/tool-definition.js +59 -11
  20. package/dist/src/code-execution/tool-definition.js.map +1 -1
  21. package/dist/src/config-checks.d.ts +2 -2
  22. package/dist/src/config-checks.d.ts.map +1 -1
  23. package/dist/src/config-checks.js +6 -2
  24. package/dist/src/config-checks.js.map +1 -1
  25. package/dist/src/framework.d.ts +744 -120
  26. package/dist/src/framework.d.ts.map +1 -1
  27. package/dist/src/framework.js +3546 -906
  28. package/dist/src/framework.js.map +1 -1
  29. package/dist/src/gate/event-gate.d.ts.map +1 -1
  30. package/dist/src/gate/event-gate.js +13 -6
  31. package/dist/src/gate/event-gate.js.map +1 -1
  32. package/dist/src/held-writes.d.ts +16 -0
  33. package/dist/src/held-writes.d.ts.map +1 -0
  34. package/dist/src/held-writes.js +56 -0
  35. package/dist/src/held-writes.js.map +1 -0
  36. package/dist/src/index.d.ts +7 -3
  37. package/dist/src/index.d.ts.map +1 -1
  38. package/dist/src/index.js +8 -4
  39. package/dist/src/index.js.map +1 -1
  40. package/dist/src/mcpl/capability-grant.d.ts +4 -0
  41. package/dist/src/mcpl/capability-grant.d.ts.map +1 -1
  42. package/dist/src/mcpl/capability-grant.js +1 -1
  43. package/dist/src/mcpl/capability-grant.js.map +1 -1
  44. package/dist/src/mcpl/channel-registry.d.ts +95 -18
  45. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  46. package/dist/src/mcpl/channel-registry.js +578 -150
  47. package/dist/src/mcpl/channel-registry.js.map +1 -1
  48. package/dist/src/mcpl/convert-block.d.ts +2 -2
  49. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  50. package/dist/src/mcpl/convert-block.js +6 -7
  51. package/dist/src/mcpl/convert-block.js.map +1 -1
  52. package/dist/src/mcpl/index.d.ts +5 -1
  53. package/dist/src/mcpl/index.d.ts.map +1 -1
  54. package/dist/src/mcpl/index.js +3 -1
  55. package/dist/src/mcpl/index.js.map +1 -1
  56. package/dist/src/mcpl/inference-router.d.ts +4 -2
  57. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  58. package/dist/src/mcpl/inference-router.js +6 -7
  59. package/dist/src/mcpl/inference-router.js.map +1 -1
  60. package/dist/src/mcpl/log-value.d.ts +7 -0
  61. package/dist/src/mcpl/log-value.d.ts.map +1 -1
  62. package/dist/src/mcpl/log-value.js +9 -0
  63. package/dist/src/mcpl/log-value.js.map +1 -1
  64. package/dist/src/mcpl/modern-connection.d.ts +227 -0
  65. package/dist/src/mcpl/modern-connection.d.ts.map +1 -0
  66. package/dist/src/mcpl/modern-connection.js +1088 -0
  67. package/dist/src/mcpl/modern-connection.js.map +1 -0
  68. package/dist/src/mcpl/prefix-rule.d.ts +18 -0
  69. package/dist/src/mcpl/prefix-rule.d.ts.map +1 -0
  70. package/dist/src/mcpl/prefix-rule.js +25 -0
  71. package/dist/src/mcpl/prefix-rule.js.map +1 -0
  72. package/dist/src/mcpl/protocol-family.d.ts +179 -0
  73. package/dist/src/mcpl/protocol-family.d.ts.map +1 -0
  74. package/dist/src/mcpl/protocol-family.js +697 -0
  75. package/dist/src/mcpl/protocol-family.js.map +1 -0
  76. package/dist/src/mcpl/push-coalescer.d.ts +38 -19
  77. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  78. package/dist/src/mcpl/push-coalescer.js +52 -23
  79. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  80. package/dist/src/mcpl/reference-fetcher.d.ts +66 -15
  81. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  82. package/dist/src/mcpl/reference-fetcher.js +243 -76
  83. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  84. package/dist/src/mcpl/references.d.ts +63 -18
  85. package/dist/src/mcpl/references.d.ts.map +1 -1
  86. package/dist/src/mcpl/references.js +117 -32
  87. package/dist/src/mcpl/references.js.map +1 -1
  88. package/dist/src/mcpl/server-connection.d.ts +326 -30
  89. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  90. package/dist/src/mcpl/server-connection.js +995 -212
  91. package/dist/src/mcpl/server-connection.js.map +1 -1
  92. package/dist/src/mcpl/server-registry.d.ts +25 -5
  93. package/dist/src/mcpl/server-registry.d.ts.map +1 -1
  94. package/dist/src/mcpl/server-registry.js +51 -12
  95. package/dist/src/mcpl/server-registry.js.map +1 -1
  96. package/dist/src/mcpl/tool-result-normalize.d.ts +54 -0
  97. package/dist/src/mcpl/tool-result-normalize.d.ts.map +1 -0
  98. package/dist/src/mcpl/tool-result-normalize.js +232 -0
  99. package/dist/src/mcpl/tool-result-normalize.js.map +1 -0
  100. package/dist/src/mcpl/transport.d.ts +56 -13
  101. package/dist/src/mcpl/transport.d.ts.map +1 -1
  102. package/dist/src/mcpl/transport.js +206 -70
  103. package/dist/src/mcpl/transport.js.map +1 -1
  104. package/dist/src/mcpl/types.d.ts +66 -20
  105. package/dist/src/mcpl/types.d.ts.map +1 -1
  106. package/dist/src/mcpl/types.js.map +1 -1
  107. package/dist/src/mcpl/visible-content.d.ts +2 -1
  108. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  109. package/dist/src/mcpl/visible-content.js +2 -1
  110. package/dist/src/mcpl/visible-content.js.map +1 -1
  111. package/dist/src/module-registry.d.ts +16 -6
  112. package/dist/src/module-registry.d.ts.map +1 -1
  113. package/dist/src/module-registry.js +65 -6
  114. package/dist/src/module-registry.js.map +1 -1
  115. package/dist/src/modules/api/index.d.ts +1 -1
  116. package/dist/src/modules/api/index.d.ts.map +1 -1
  117. package/dist/src/modules/api/index.js +3 -2
  118. package/dist/src/modules/api/index.js.map +1 -1
  119. package/dist/src/modules/discord/discord-js-client.d.ts +42 -2
  120. package/dist/src/modules/discord/discord-js-client.d.ts.map +1 -1
  121. package/dist/src/modules/discord/discord-js-client.js +268 -65
  122. package/dist/src/modules/discord/discord-js-client.js.map +1 -1
  123. package/dist/src/modules/discord/index.d.ts +27 -5
  124. package/dist/src/modules/discord/index.d.ts.map +1 -1
  125. package/dist/src/modules/discord/index.js +366 -76
  126. package/dist/src/modules/discord/index.js.map +1 -1
  127. package/dist/src/modules/discord/refusal.d.ts +14 -0
  128. package/dist/src/modules/discord/refusal.d.ts.map +1 -0
  129. package/dist/src/modules/discord/refusal.js +14 -0
  130. package/dist/src/modules/discord/refusal.js.map +1 -0
  131. package/dist/src/modules/discord/types.d.ts +17 -7
  132. package/dist/src/modules/discord/types.d.ts.map +1 -1
  133. package/dist/src/modules/health/index.d.ts.map +1 -1
  134. package/dist/src/modules/health/index.js +6 -2
  135. package/dist/src/modules/health/index.js.map +1 -1
  136. package/dist/src/modules/index.d.ts +1 -1
  137. package/dist/src/modules/index.d.ts.map +1 -1
  138. package/dist/src/modules/index.js +1 -1
  139. package/dist/src/modules/index.js.map +1 -1
  140. package/dist/src/modules/workspace/disk-agreement.d.ts +25 -2
  141. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  142. package/dist/src/modules/workspace/disk-agreement.js +45 -5
  143. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  144. package/dist/src/modules/workspace/effects.d.ts +2 -1
  145. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  146. package/dist/src/modules/workspace/effects.js +19 -9
  147. package/dist/src/modules/workspace/effects.js.map +1 -1
  148. package/dist/src/modules/workspace/index.d.ts +214 -42
  149. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  150. package/dist/src/modules/workspace/index.js +667 -113
  151. package/dist/src/modules/workspace/index.js.map +1 -1
  152. package/dist/src/modules/workspace/observe.d.ts +240 -8
  153. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  154. package/dist/src/modules/workspace/observe.js +554 -24
  155. package/dist/src/modules/workspace/observe.js.map +1 -1
  156. package/dist/src/modules/workspace/types.d.ts +10 -1
  157. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  158. package/dist/src/modules/workspace/types.js.map +1 -1
  159. package/dist/src/modules/workspace/watcher.d.ts +42 -0
  160. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  161. package/dist/src/modules/workspace/watcher.js +130 -25
  162. package/dist/src/modules/workspace/watcher.js.map +1 -1
  163. package/dist/src/silent-heartbeat.d.ts +112 -39
  164. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  165. package/dist/src/silent-heartbeat.js +100 -29
  166. package/dist/src/silent-heartbeat.js.map +1 -1
  167. package/dist/src/tool-args.d.ts +40 -0
  168. package/dist/src/tool-args.d.ts.map +1 -0
  169. package/dist/src/tool-args.js +207 -0
  170. package/dist/src/tool-args.js.map +1 -0
  171. package/dist/src/tool-presentation.d.ts.map +1 -1
  172. package/dist/src/tool-presentation.js +9 -2
  173. package/dist/src/tool-presentation.js.map +1 -1
  174. package/dist/src/types/agent.d.ts +27 -17
  175. package/dist/src/types/agent.d.ts.map +1 -1
  176. package/dist/src/types/events.d.ts +8 -0
  177. package/dist/src/types/events.d.ts.map +1 -1
  178. package/dist/src/types/framework.d.ts +17 -2
  179. package/dist/src/types/framework.d.ts.map +1 -1
  180. package/dist/src/types/module.d.ts +54 -10
  181. package/dist/src/types/module.d.ts.map +1 -1
  182. package/dist/src/types/trace.d.ts +2 -2
  183. package/dist/src/types/trace.d.ts.map +1 -1
  184. package/package.json +3 -1
  185. package/src/agent.ts +99 -36
  186. package/src/code-execution/index.ts +1 -0
  187. package/src/code-execution/py-runner.ts +104 -17
  188. package/src/code-execution/runtime-py.ts +47 -7
  189. package/src/code-execution/tool-definition.ts +65 -11
  190. package/src/config-checks.ts +4 -2
  191. package/src/framework.ts +3633 -956
  192. package/src/gate/event-gate.ts +14 -6
  193. package/src/held-writes.ts +59 -0
  194. package/src/index.ts +19 -4
  195. package/src/mcpl/capability-grant.ts +1 -1
  196. package/src/mcpl/channel-registry.ts +613 -160
  197. package/src/mcpl/convert-block.ts +15 -7
  198. package/src/mcpl/index.ts +14 -1
  199. package/src/mcpl/inference-router.ts +8 -7
  200. package/src/mcpl/log-value.ts +10 -0
  201. package/src/mcpl/modern-connection.ts +1182 -0
  202. package/src/mcpl/prefix-rule.ts +32 -0
  203. package/src/mcpl/protocol-family.ts +691 -0
  204. package/src/mcpl/push-coalescer.ts +67 -29
  205. package/src/mcpl/reference-fetcher.ts +288 -82
  206. package/src/mcpl/references.ts +123 -33
  207. package/src/mcpl/server-connection.ts +1050 -221
  208. package/src/mcpl/server-registry.ts +50 -12
  209. package/src/mcpl/tool-result-normalize.ts +294 -0
  210. package/src/mcpl/transport.ts +204 -62
  211. package/src/mcpl/types.ts +67 -20
  212. package/src/mcpl/visible-content.ts +2 -1
  213. package/src/module-registry.ts +68 -13
  214. package/src/modules/api/index.ts +3 -2
  215. package/src/modules/discord/discord-js-client.ts +288 -72
  216. package/src/modules/discord/index.ts +380 -77
  217. package/src/modules/discord/refusal.ts +13 -0
  218. package/src/modules/discord/types.ts +17 -9
  219. package/src/modules/health/index.ts +6 -2
  220. package/src/modules/index.ts +1 -1
  221. package/src/modules/workspace/disk-agreement.ts +46 -5
  222. package/src/modules/workspace/effects.ts +18 -7
  223. package/src/modules/workspace/index.ts +722 -124
  224. package/src/modules/workspace/observe.ts +591 -22
  225. package/src/modules/workspace/types.ts +10 -1
  226. package/src/modules/workspace/watcher.ts +126 -25
  227. package/src/silent-heartbeat.ts +184 -59
  228. package/src/tool-args.ts +213 -0
  229. package/src/tool-presentation.ts +9 -2
  230. package/src/types/agent.ts +27 -17
  231. package/src/types/events.ts +8 -0
  232. package/src/types/framework.ts +17 -2
  233. package/src/types/module.ts +55 -10
  234. package/src/types/trace.ts +2 -2
@@ -8,8 +8,10 @@
8
8
  * not fetch third-party origins at all (deferred with declared reference
9
9
  * origins); the connection credential is applied as an Authorization
10
10
  * header by this code alone and never surfaces to model, script, or URI.
11
- * - **scheme allowlist (§7.1, vector 11):** https; http only when the dialed
12
- * origin itself is plaintext (a ws:// server references its own origin).
11
+ * - **scheme allowlist (§7.1, vector 11):** the uri's own scheme is http: or
12
+ * https:, and since origins compare with their schemes, http only from a
13
+ * server dialed in plaintext (ws://), https only from one dialed over TLS
14
+ * (wss://).
13
15
  * - **no redirect traversal (§7.2, vector 12):** any 3xx refuses.
14
16
  * - **actual-byte ceiling (§7.3 list, vector 10):** streamed with abort the
15
17
  * moment real octets exceed the ceiling, regardless of claimed sizeBytes.
@@ -29,8 +31,10 @@
29
31
  * that the bytes are wanted). Per-server budgets cap cumulative appetite.
30
32
  */
31
33
  import { createHash } from 'node:crypto';
32
- import { EXPIRY_REASON, isReferenceExpired, referenceExpiry, REFERENCE_LIMITS, sanitizeLabel, UNBOUND_REASON } from './references.js';
33
- /** Per-fetch hard ceiling on actual bytes (overridable per server / call). */
34
+ import { boundedForLog, describeCause } from './errors.js';
35
+ import { EXPIRY_REASON, noAddressReason, referenceExpiry, REFERENCE_LIMITS, sanitizeLabel, UNBOUND_REASON } from './references.js';
36
+ /** Per-fetch hard ceiling on actual bytes. A call can lower it for itself
37
+ * (fetch_reference's max_bytes, which it clamps to this); nothing raises it. */
34
38
  export const DEFAULT_FETCH_MAX_BYTES = 256 * 1024 * 1024;
35
39
  /** Eager (autofetch) threshold: at most what could have shipped inline. */
36
40
  export const DEFAULT_EAGER_FETCH_MAX_BYTES = 256 * 1024;
@@ -39,12 +43,78 @@ export const DEFAULT_EAGER_FETCH_MAX_BYTES = 256 * 1024;
39
43
  * kept. */
40
44
  export const DEFAULT_MAX_TOTAL_BYTES = 1024 * 1024 * 1024;
41
45
  const FETCH_TIMEOUT_MS = 60_000;
42
- /** What a refusal by the per-server budget adds. The total lives as long as
43
- * this fetcher, one per framework, so only someone running the host renews
44
- * it, by starting a new one, or raises the budget (the server's config's
45
- * autofetch.maxTotalBytes, which each fetch reads afresh). */
46
- const BUDGET_LASTS = "the budget doesn't renew on its own, so calling again won't change that unless whoever runs this host raises or renews it";
47
46
  const EAGER_FETCH_TIMEOUT_MS = 10_000;
47
+ // What calling again can do, as each failure's remedy says it. The fetcher
48
+ // doesn't know where a reference came from (a tool result, a push, a channel
49
+ // message), so none names a tool, and fetch_reference's max_bytes is named
50
+ // only where a larger one can fetch it.
51
+ const NOTHING_TO_DO = "Calling again won't change that.";
52
+ /** The registry keys a record by its uri, so a fresh reference to the same
53
+ * uri arrives as this very id and refreshes its record. */
54
+ const FRESH_REFERENCE = "Once a fresh reference to it arrives, fetching may work; until then, fetching it again won't.";
55
+ const TRY_LATER = 'Trying again later may work.';
56
+ /** A request that failed before an answer: a refused or reset connection
57
+ * can clear, and a cause that repeats on every try (a port fetch refuses, a
58
+ * name that doesn't resolve, a certificate this host doesn't trust) is
59
+ * whoever runs the host's to change, so the remedy names both. */
60
+ const REQUEST_FAILED = "Trying again later may work; if it fails the same way, whoever runs this host can check its connection to the server.";
61
+ const CREDENTIALS = "Calling again won't change that; whoever runs this host can check its credentials for the server.";
62
+ const FRESH_OR_CREDENTIALS = "Once a fresh reference to it arrives, fetching may work; if that's refused too, whoever runs this host can check its credentials for the server.";
63
+ /** The total lives as long as this fetcher, one per framework, so only
64
+ * someone running the host renews it, by starting a new one, or raises the
65
+ * budget (the server's config's autofetch.maxTotalBytes, which each fetch
66
+ * reads afresh). */
67
+ const BUDGET = "The budget doesn't renew on its own, so calling again won't change that unless whoever runs this host raises or renews it.";
68
+ /** The host's own ceiling: fetch_reference clamps max_bytes to it, and no
69
+ * config sets another. */
70
+ const HOST_CEILING = "No max_bytes or setting lifts that limit, so calling again won't change it.";
71
+ /** The resolver reads the host's server configs as they are at each fetch. */
72
+ const SERVER_BACK = "Calling again won't change that unless whoever runs this host adds that server back.";
73
+ const refused = (error, remedy) => ({ refusal: { error, remedy } });
74
+ const fail = (error, remedy) => ({ ok: false, error, remedy });
75
+ /** What calling again can do about a server's HTTP status. A later try can
76
+ * work after a timeout, a conflict or lock the server's state can clear, a
77
+ * request it calls too early, a rate limit or a server's passing trouble,
78
+ * though not after 501 or 505, which say the server doesn't support the
79
+ * request. A 401 is about this host's credentials for the server, which a
80
+ * fresh reference doesn't change, and a 403 can be either those or this
81
+ * reference. The rest of 4xx is about this reference, which a fresh one may
82
+ * not share. */
83
+ function statusRemedy(status) {
84
+ if (status === 501 || status === 505)
85
+ return NOTHING_TO_DO;
86
+ if (status === 408 || status === 409 || status === 423 || status === 425 || status === 429 || status >= 500)
87
+ return TRY_LATER;
88
+ if (status === 401)
89
+ return CREDENTIALS;
90
+ if (status === 403)
91
+ return FRESH_OR_CREDENTIALS;
92
+ return FRESH_REFERENCE;
93
+ }
94
+ /** What a download stopped at a call's own ceiling, below the host's, can do.
95
+ * Its whole size is unknown, only that it's past what arrived, and a fetch
96
+ * again reads it from the start, within the host's ceiling and what the
97
+ * server's budget has left after this one's bytes. The read loop stops a
98
+ * download past the host's ceiling before it asks, so what arrived is within
99
+ * it, and only the budget can be what binds. */
100
+ function largerMaxBytes(received, left, server) {
101
+ const most = Math.min(DEFAULT_FETCH_MAX_BYTES, left);
102
+ if (received <= most)
103
+ return `It's at least ${received} bytes; a larger max_bytes, up to ${most}, may fetch it.`;
104
+ return `It's at least ${received} bytes, more than the ${left} bytes left of this host's fetch budget for ${server}. ${BUDGET}`;
105
+ }
106
+ /** What a thrown fetch says went wrong. fetch's own "fetch failed" says only
107
+ * that, so its cause's words come first. A cause from trying each of a
108
+ * host's addresses (an AggregateError) has no words of its own, so its
109
+ * attempts' stand in. */
110
+ function whyFetchFailed(e) {
111
+ const source = e?.cause ?? e;
112
+ const own = describeCause(source);
113
+ if (own !== '')
114
+ return own;
115
+ const attempts = source?.errors;
116
+ return Array.isArray(attempts) && attempts.length > 0 ? attempts.map(describeCause).join('; ') : describeCause(e);
117
+ }
48
118
  /** Magic-byte sniff for the formats this pipeline actually moves. The
49
119
  * header is testimony too (vector 13): sniffed type wins for the storage
50
120
  * extension and the record's verified type; header, then testimony, are
@@ -86,6 +156,14 @@ const EXT_BY_MIME = new Map(Object.entries({
86
156
  'video/mp4': 'mp4', 'application/json': 'json', 'text/plain': 'txt',
87
157
  'application/pdf': 'pdf', 'application/zip': 'zip',
88
158
  }));
159
+ /** A server's address as it's configured, its scheme and host, for a
160
+ * clause: never its userinfo, path or query. URL's own origin is 'null' for
161
+ * a scheme that isn't special, which normalizedOrigin accepts. The caller
162
+ * has already parsed it. */
163
+ function configuredOrigin(url) {
164
+ const u = new URL(url);
165
+ return `${u.protocol}//${u.host}`;
166
+ }
89
167
  /** ws→http / wss→https with default ports elided, for origin comparison. */
90
168
  export function normalizedOrigin(url) {
91
169
  try {
@@ -115,55 +193,138 @@ export class ReferenceFetcher {
115
193
  this.resolveServer = resolveServer;
116
194
  this.saveFile = saveFile;
117
195
  }
118
- /** Would the eager (autofetch) default fetch this record? Not one the
119
- * fetcher refuses as expired, which would only take an eager slot. It
120
- * takes the eager limit of the server the fetch would dial. */
196
+ /** Would the eager (autofetch) default fetch this record? Not one the fetch
197
+ * would refuse before dialing, asked as the eager fetch asks it, with the
198
+ * default ceiling, so such a record takes no eager slot; and only one whose
199
+ * claimed size is within the eager limit of the server it dials. For one
200
+ * whose fetch is already under way, which the eager fetch would join as
201
+ * fetch() does, only the server and its eager limit enter: the expiry,
202
+ * the budget and the ceiling were checked when that fetch began. */
121
203
  isEagerEligible(record) {
122
204
  if (record.fetchedPath)
123
205
  return false;
124
- if (isReferenceExpired(record.testimony))
206
+ const check = this.inFlight.has(record.refId) ? this.serverFor(record) : this.beforeDial(record);
207
+ if ('refusal' in check)
125
208
  return false;
126
- const server = this.serverFor(record);
127
- if ('refusal' in server)
128
- return false;
129
- const cap = server.binding.autofetch?.maxBytes ?? DEFAULT_EAGER_FETCH_MAX_BYTES;
209
+ const cap = check.binding.autofetch?.maxBytes ?? DEFAULT_EAGER_FETCH_MAX_BYTES;
130
210
  return record.testimony.sizeBytes !== undefined && record.testimony.sizeBytes <= cap;
131
211
  }
132
212
  /** The server to dial for a record (§6.2): the first, in the order they
133
213
  * delivered it, whose address is on the uri's origin. When none is, the
134
- * first server's refusal (unknown to this host, or the origin check's),
135
- * and for a record no server delivered, that it's unbound. */
214
+ * first server's refusal (unknown to this host, with no address to dial,
215
+ * or the origin check's), and for a record no server delivered, that it's
216
+ * unbound. */
136
217
  serverFor(record) {
137
218
  let refusal;
138
219
  for (const serverId of record.serverIds) {
139
220
  const binding = this.resolveServer(serverId);
140
221
  if (!binding) {
141
- refusal ??= `unknown server: ${serverId}`;
222
+ refusal ??= refused(`this host no longer has the "${serverId}" server it came from`, SERVER_BACK);
223
+ continue;
224
+ }
225
+ if (binding === 'no-address') {
226
+ refusal ??= refused(noAddressReason(serverId), NOTHING_TO_DO);
142
227
  continue;
143
228
  }
144
- const offOrigin = this.originCheck(record, binding);
229
+ const offOrigin = this.originCheck(record, binding, serverId);
145
230
  if (offOrigin === null)
146
231
  return { serverId, binding };
147
232
  refusal ??= offOrigin;
148
233
  }
149
- return { refusal: refusal ?? `reference ${UNBOUND_REASON}` };
234
+ // A later delivery of the same uri by a server binds this record.
235
+ return refusal ?? refused(`it's ${UNBOUND_REASON}`, FRESH_REFERENCE);
236
+ }
237
+ /** Every check the fetch makes before it dials, in its order: the server
238
+ * (none, unknown, no address, an address of its own or the reference's
239
+ * that doesn't parse, a reference address carrying a user name or
240
+ * password, a scheme other than http: or https:, off the uri's origin),
241
+ * the expiry, a claimed size over the host's own ceiling, the server's
242
+ * spent budget, a claimed size over a call's ceiling. For a record with no
243
+ * saved copy and no fetch under way, the fetch, `refusal()` and the eager
244
+ * check all ask this, so what save_recent_image says is the reason the
245
+ * fetch would refuse with, and no eager slot goes to a fetch that would be
246
+ * refused. */
247
+ beforeDial(record, opts) {
248
+ const server = this.serverFor(record);
249
+ if ('refusal' in server)
250
+ return server;
251
+ const { serverId, binding } = server;
252
+ const t = record.testimony;
253
+ const expiry = referenceExpiry(t);
254
+ if (expiry)
255
+ return refused(`the reference is ${EXPIRY_REASON[expiry]}`, FRESH_REFERENCE);
256
+ const ceiling = opts?.maxBytes ?? DEFAULT_FETCH_MAX_BYTES;
257
+ // A claim past the host's own ceiling is refused first: nothing lifts
258
+ // it, not even a budget whoever runs the host raises.
259
+ if (t.sizeBytes !== undefined && t.sizeBytes > DEFAULT_FETCH_MAX_BYTES) {
260
+ return refused(`it claims ${t.sizeBytes} bytes, over the ${DEFAULT_FETCH_MAX_BYTES} bytes this host fetches at most`, HOST_CEILING);
261
+ }
262
+ // The budget is checked before a call's ceiling, here and while reading:
263
+ // a larger max_bytes lifts that ceiling, and nothing the caller does lifts
264
+ // the budget, so a fetch past both is told about the budget.
265
+ const budget = binding.autofetch?.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES;
266
+ const used = this.totals.get(serverId) ?? 0;
267
+ if (used >= budget) {
268
+ return refused(`this host's fetch budget for the "${serverId}" server is used up (${used} of ${budget} bytes)`, BUDGET);
269
+ }
270
+ // Vector 4: a claim already over the ceiling refuses without dialing. One
271
+ // that's also over what's left of the budget is told about the budget,
272
+ // which no max_bytes lifts. A claim over what's left but within the
273
+ // ceiling still dials, and the budget stops it at its first chunk past.
274
+ if (t.sizeBytes !== undefined && t.sizeBytes > ceiling) {
275
+ if (t.sizeBytes > budget - used) {
276
+ return refused(`it claims ${t.sizeBytes} bytes, more than the ${budget - used} bytes left of this host's fetch budget for the "${serverId}" server`, BUDGET);
277
+ }
278
+ // Within what's left of the budget and the host's ceiling, so a
279
+ // ceiling of the call's own is what a larger max_bytes lifts.
280
+ return refused(`it claims ${t.sizeBytes} bytes, over the ${ceiling} bytes this call allows`, `Pass max_bytes of at least ${t.sizeBytes} to fetch it.`);
281
+ }
282
+ return { serverId, binding, ceiling, budget };
283
+ }
284
+ /** Why a fetch of this record would be refused before dialing, with the
285
+ * default ceiling, which a fetch_reference call naming no max_bytes has.
286
+ * Null where the fetch would serve a saved copy, join a fetch of it
287
+ * already under way, or dial (where it can still fail), the same three
288
+ * steps fetch() takes. */
289
+ refusal(record) {
290
+ if (record.fetchedPath || this.inFlight.has(record.refId))
291
+ return null;
292
+ const check = this.beforeDial(record);
293
+ return 'refusal' in check ? check.refusal : null;
150
294
  }
151
- /** §6.1/§7.1 policy check; returns a refusal reason or null. */
152
- originCheck(record, binding) {
295
+ /** §6.1/§7.1 policy check; returns a refusal or null. */
296
+ originCheck(record, binding, serverId) {
153
297
  const refOrigin = normalizedOrigin(record.testimony.uri);
154
- const dialedOrigin = normalizedOrigin(binding.url);
155
298
  if (!refOrigin)
156
- return 'reference uri does not parse';
157
- if (!dialedOrigin)
158
- return 'server url does not parse';
159
- const scheme = refOrigin.split('//')[0];
160
- if (scheme !== 'https:' && scheme !== 'http:')
161
- return `scheme not allowed: ${scheme}`;
162
- if (refOrigin !== dialedOrigin) {
163
- return `third-party origin (${refOrigin} != dialed ${dialedOrigin}); not fetched by this host`;
299
+ return refused("its address doesn't parse as a URL", NOTHING_TO_DO);
300
+ // A server's address that doesn't parse leaves nothing to dial. The
301
+ // framework's resolver gives only an address its transport dials, so this
302
+ // guards other resolvers.
303
+ const dialedOrigin = normalizedOrigin(binding.url);
304
+ if (!dialedOrigin) {
305
+ return refused(`the "${serverId}" server's address doesn't parse as a URL, so there's nowhere to fetch it from`, "Calling again won't change that unless whoever runs this host corrects the server's address.");
306
+ }
307
+ const refUrl = new URL(record.testimony.uri);
308
+ // A user name or password in the uri is a credential embedded in it,
309
+ // which RFC-005 §6.1 forbids a server to mint and lets a host refuse
310
+ // (vector 6). This host neither sends nor repeats it: fetch refuses such
311
+ // a url with a message that holds it whole.
312
+ if (refUrl.username !== '' || refUrl.password !== '') {
313
+ return refused("its address carries a user name or password, which this host doesn't send", NOTHING_TO_DO);
164
314
  }
165
- if (scheme === 'http:' && dialedOrigin.startsWith('https:')) {
166
- return 'plaintext reference from a secure origin';
315
+ // The uri's own scheme, not its origin's: an origin reads ws: as http:
316
+ // and wss: as https:, and fetch refuses a ws: or wss: uri ('unknown
317
+ // scheme') before connecting, which would read as a failed request a
318
+ // later try can mend.
319
+ const scheme = refUrl.protocol;
320
+ if (scheme !== 'https:' && scheme !== 'http:') {
321
+ return refused(`its address uses ${scheme}, and this host fetches only http: and https: addresses`, NOTHING_TO_DO);
322
+ }
323
+ // Origins compare with their schemes, so this also refuses an http:
324
+ // reference from a server dialed over TLS (wss://).
325
+ if (refOrigin !== dialedOrigin) {
326
+ return refused(`it points to ${refOrigin}, not to the "${serverId}" server's own address (${configuredOrigin(binding.url)}), ` +
327
+ 'and this host fetches only from the server itself', NOTHING_TO_DO);
167
328
  }
168
329
  return null;
169
330
  }
@@ -183,49 +344,26 @@ export class ReferenceFetcher {
183
344
  }
184
345
  async doFetch(record, opts) {
185
346
  const t = record.testimony;
186
- const server = this.serverFor(record);
187
- if ('refusal' in server)
188
- return { ok: false, error: server.refusal };
189
- const { serverId, binding } = server;
190
- const expiry = referenceExpiry(t);
191
- if (expiry)
192
- return { ok: false, error: `reference ${EXPIRY_REASON[expiry]}` };
193
- const ceiling = opts?.maxBytes ?? DEFAULT_FETCH_MAX_BYTES;
194
- // The budget is checked before the ceiling, here and while reading: a
195
- // larger max_bytes lifts the ceiling, and nothing the caller does lifts
196
- // the budget, so a fetch past both is told about the budget.
197
- const budget = binding.autofetch?.maxTotalBytes ?? DEFAULT_MAX_TOTAL_BYTES;
198
- const used = this.totals.get(serverId) ?? 0;
199
- if (used >= budget) {
200
- return { ok: false, error: `per-server fetch budget exhausted (${used}/${budget} bytes); ${BUDGET_LASTS}` };
201
- }
202
- // Vector 4: a claim already over the ceiling refuses without dialing. One
203
- // that's also over what's left of the budget is told about the budget,
204
- // which no max_bytes lifts. A claim over what's left but within the
205
- // ceiling still dials, and the budget stops it at its first chunk past.
206
- if (t.sizeBytes !== undefined && t.sizeBytes > ceiling) {
207
- if (t.sizeBytes > budget - used) {
208
- return {
209
- ok: false,
210
- error: `claimed ${t.sizeBytes} bytes exceeds what's left of the per-server fetch budget (${used}/${budget} bytes); ${BUDGET_LASTS}`,
211
- };
212
- }
213
- return { ok: false, error: `claimed ${t.sizeBytes} bytes exceeds fetch ceiling ${ceiling}` };
214
- }
347
+ const check = this.beforeDial(record, opts);
348
+ if ('refusal' in check)
349
+ return { ok: false, ...check.refusal };
350
+ const { serverId, binding, ceiling, budget } = check;
351
+ const server = `the "${serverId}" server`;
352
+ const timeoutMs = opts?.timeoutMs ?? FETCH_TIMEOUT_MS;
215
353
  const controller = new AbortController();
216
- const timer = setTimeout(() => controller.abort(), opts?.timeoutMs ?? FETCH_TIMEOUT_MS);
354
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
217
355
  try {
218
356
  const headers = {};
219
357
  if (binding.token)
220
358
  headers.authorization = `Bearer ${binding.token}`;
221
359
  const resp = await fetch(t.uri, { headers, redirect: 'manual', signal: controller.signal });
222
360
  if (resp.status >= 300 && resp.status < 400) {
223
- return { ok: false, error: `redirect refused (HTTP ${resp.status}) — no redirect traversal` };
361
+ return fail(`${server} answered HTTP ${resp.status}, a redirect, and this host doesn't follow redirects`, NOTHING_TO_DO);
224
362
  }
225
363
  if (!resp.ok)
226
- return { ok: false, error: `HTTP ${resp.status}` };
364
+ return fail(`${server} answered HTTP ${resp.status}`, statusRemedy(resp.status));
227
365
  if (!resp.body)
228
- return { ok: false, error: 'no response body' };
366
+ return fail(`${server} answered without any content`, FRESH_REFERENCE);
229
367
  const hash = createHash('sha256');
230
368
  const chunks = [];
231
369
  let received = 0;
@@ -239,13 +377,24 @@ export class ReferenceFetcher {
239
377
  // this server read the same total, so none spends what another took.
240
378
  const total = (this.totals.get(serverId) ?? 0) + value.byteLength;
241
379
  this.totals.set(serverId, total);
380
+ // The limit nothing lifts first, as before dialing: the host's
381
+ // ceiling, then the budget, then a call's own ceiling.
382
+ if (received > DEFAULT_FETCH_MAX_BYTES) {
383
+ controller.abort();
384
+ return fail(`the download had reached ${received} bytes, past the ${DEFAULT_FETCH_MAX_BYTES} bytes this host fetches at most, ` +
385
+ 'so it was stopped and nothing was kept', HOST_CEILING);
386
+ }
242
387
  if (total > budget) {
243
388
  controller.abort();
244
- return { ok: false, error: `aborted: per-server fetch budget exhausted (${total}/${budget} bytes); ${BUDGET_LASTS}` };
389
+ // The server's running total, as the next fetch's refusal gives it:
390
+ // other fetches through the server may have spent part of it.
391
+ return fail(`this host's fetch budget for ${server} ran out during the download (${total} of ${budget} bytes), ` +
392
+ 'so it was stopped and nothing was kept', BUDGET);
245
393
  }
246
394
  if (received > ceiling) {
247
395
  controller.abort();
248
- return { ok: false, error: `aborted: actual bytes exceeded ceiling at ${received}` };
396
+ return fail(`the download had reached ${received} bytes, past the ${ceiling} bytes this call allows, ` +
397
+ 'so it was stopped and nothing was kept', largerMaxBytes(received, budget - total, server));
249
398
  }
250
399
  const buf = Buffer.from(value);
251
400
  hash.update(buf);
@@ -257,7 +406,8 @@ export class ReferenceFetcher {
257
406
  const got = 'sha256:' + hash.digest('base64url');
258
407
  if (got !== t.digest) {
259
408
  // Vector 5: never presented as the described content.
260
- return { ok: false, error: `digest mismatch (claimed ${t.digest.slice(0, 20)}…, got ${got.slice(0, 20)}…)` };
409
+ return fail(`the bytes that arrived don't match the reference's digest (${t.digest.slice(0, 20)}…, against ${got.slice(0, 20)}…), ` +
410
+ "so they weren't kept", "Trying again may work; if it fails the same way, fetching may work once a fresh reference to it arrives.");
261
411
  }
262
412
  digestVerified = true;
263
413
  }
@@ -271,9 +421,21 @@ export class ReferenceFetcher {
271
421
  const observedMime = sniffMime(data) ?? headerMime ?? claimedMime ?? 'application/octet-stream';
272
422
  const ext = EXT_BY_MIME.get(observedMime) ?? EXT_BY_MIME.get(headerMime ?? '') ?? EXT_BY_MIME.get(claimedMime ?? '') ?? 'bin';
273
423
  // §7.3: host-generated storage name; the server's `name` is display-only.
274
- const path = await this.saveFile(`${record.refId}.${ext}`, data, observedMime);
275
- if (path === null)
276
- return { ok: false, error: 'no writable workspace mount to store the payload' };
424
+ // A null from the save hook covers no workspace, no writable mount and
425
+ // a failed write, and the hook logs which. A throw is the save's failure
426
+ // too, not the fetch's, so it's logged here.
427
+ const fileName = `${record.refId}.${ext}`;
428
+ let path;
429
+ try {
430
+ path = await this.saveFile(fileName, data, observedMime);
431
+ }
432
+ catch (e) {
433
+ console.error(`[refs] couldn't store ${fileName}: ${boundedForLog(describeCause(e))}`);
434
+ path = null;
435
+ }
436
+ if (path === null) {
437
+ return fail("it was fetched, but this host couldn't store it in its workspace, so nothing was kept", 'Calling again is likely to fail the same way; whoever runs this host can see why in its log.');
438
+ }
277
439
  record.fetchedPath = path;
278
440
  record.verifiedBytes = data.length;
279
441
  record.verifiedMimeType = observedMime;
@@ -281,8 +443,13 @@ export class ReferenceFetcher {
281
443
  return { ok: true, path, bytes: data.length, mimeType: observedMime, digestVerified };
282
444
  }
283
445
  catch (e) {
284
- const msg = e.name === 'AbortError' ? 'fetch timed out or aborted' : e.message;
285
- return { ok: false, error: msg };
446
+ // The timer is the only abort that throws: the budget and the ceiling
447
+ // abort the download and return at once.
448
+ if (e?.name === 'AbortError') {
449
+ const seconds = timeoutMs / 1000;
450
+ return fail(`it took longer than ${seconds} second${seconds === 1 ? '' : 's'}`, TRY_LATER);
451
+ }
452
+ return fail(`the request to ${server} failed: ${boundedForLog(whyFetchFailed(e))}`, REQUEST_FAILED);
286
453
  }
287
454
  finally {
288
455
  clearTimeout(timer);
@@ -1 +1 @@
1
- {"version":3,"file":"reference-fetcher.js","sourceRoot":"","sources":["../../../src/mcpl/reference-fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reference-fetcher.js","sourceRoot":"","sources":["../../../src/mcpl/reference-fetcher.ts"],"names":[],"mappings":"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"}
@@ -52,9 +52,11 @@ export type BlockClassification = {
52
52
  } | {
53
53
  kind: 'reference';
54
54
  testimony: ReferenceTestimony;
55
- } | {
55
+ }
56
+ /** `shown` is what the model-visible lanes put in the block's place. */
57
+ | {
56
58
  kind: 'invalid';
57
- reason: string;
59
+ shown: string;
58
60
  };
59
61
  export declare function classifyBlock(block: unknown): BlockClassification;
60
62
  /** RFC-005 vector 2: an inline-data block claiming bulk disposition (or
@@ -62,7 +64,21 @@ export declare function classifyBlock(block: unknown): BlockClassification;
62
64
  * fails closed by withholding the inline data from context. Every lane that
63
65
  * handles inline media MUST consult this before its data branch. */
64
66
  export declare function isInlineContradiction(block: unknown): boolean;
65
- export declare const INLINE_WITHHELD_TEXT = "[inline content withheld: inline data that also claims a uri or a bulk disposition]";
67
+ export declare const INLINE_WITHHELD_TEXT = "[Content not shown: its inline data arrived marked as a reference too, so this host withheld it.]";
68
+ export declare const IMAGE_NO_MEDIA_TYPE_TEXT = "[Image not shown: its data arrived without a media type.]";
69
+ export declare const IMAGE_NO_DATA_TEXT = "[Image not shown: it arrived with no usable data or link.]";
70
+ export declare const AUDIO_NO_MEDIA_TYPE_TEXT = "[Audio not shown: its data arrived without a media type.]";
71
+ /** On the push, channel and context-injection lanes, audio shows only as
72
+ * inline data, so a plain link isn't enough either. (A tool result's audio
73
+ * with a link is a reference, as any block with one is there.) */
74
+ export declare const AUDIO_NO_DATA_TEXT = "[Audio not shown: it arrived with no usable inline data.]";
75
+ export declare const REFERENCE_NO_LINK_TEXT = "[Reference not shown: it arrived without a link.]";
76
+ export declare const REFERENCE_LINK_TOO_LONG_TEXT = "[Reference not shown: its link is longer than this host accepts.]";
77
+ /** A block of a type the host doesn't show, of no type at all, or no block.
78
+ * The type is the sender's word, so it's shown as a label is: bounded, with
79
+ * its controls removed. One that isn't a string is no type, and is never
80
+ * converted to one. */
81
+ export declare function unknownBlockText(block: unknown): string;
66
82
  /**
67
83
  * Why a reference counts as expired, or null when it doesn't: its expiresAt
68
84
  * has passed, doesn't parse, or was rejected as a field (§7.4, §8). A
@@ -74,16 +90,24 @@ export declare const INLINE_WITHHELD_TEXT = "[inline content withheld: inline da
74
90
  */
75
91
  export declare function referenceExpiry(t: Pick<ReferenceTestimony, 'expiresAt' | 'rejectedFields'>, nowMs?: number): 'rejected' | 'unparseable' | 'passed' | null;
76
92
  export declare function isReferenceExpired(t: Pick<ReferenceTestimony, 'expiresAt' | 'rejectedFields'>, nowMs?: number): boolean;
77
- /** Each expiry case as the stub and the fetcher's refusal both say it. */
93
+ /** Each expiry case in the agent's words, as the stub, the fetcher's refusal
94
+ * and save_recent_image's refusal all say it. */
78
95
  export declare const EXPIRY_REASON: {
79
- readonly passed: 'expired: its expiresAt has passed';
80
- readonly unparseable: 'treated as expired: its expiresAt does not parse (fail closed)';
81
- readonly rejected: "treated as expired: its expiresAt was rejected as a field, over 64 characters or not a string (fail closed)";
96
+ readonly passed: 'expired';
97
+ readonly unparseable: "treated as expired, since its expiry time can't be read";
98
+ readonly rejected: "treated as expired, since its expiry time isn't in a form this host accepts";
82
99
  };
83
- /** A reference registered with no server, as the stub, the fetcher's refusal
84
- * and save_recent_image's all say it: the fetcher dials only through a
85
- * server that delivered the reference. */
86
- export declare const UNBOUND_REASON = "unbound: no server is recorded to fetch it from";
100
+ /** A reference registered with no server, in the agent's words, as the stub,
101
+ * the fetcher's refusal and save_recent_image's all say it: the fetcher dials
102
+ * only through a server that delivered the reference. */
103
+ export declare const UNBOUND_REASON = "not tied to any server, so there's nowhere to fetch it from";
104
+ /** The fetcher's refusal for a server it has no address to dial, one the
105
+ * host doesn't connect to over a network, such as a stdio server, as a
106
+ * clause that completes "couldn't fetch <ref>: " and says so of the server;
107
+ * the fetcher dials only through a server's address. save_recent_image gives
108
+ * it too. A stub can't know it, since only the framework holds its servers'
109
+ * configs. */
110
+ export declare function noAddressReason(serverId: string): string;
87
111
  /** Strip control characters (C0, DEL, C1) and every bidi control (marks,
88
112
  * embeddings, overrides, isolates, and the Arabic letter mark), trim the
89
113
  * whitespace (a BOM included) left at either end, and bound the length.
@@ -165,13 +189,15 @@ export declare const REFERENCE_STUB_MAX_CHARS: number;
165
189
  */
166
190
  export declare function buildReferenceStub(t: ReferenceTestimony, provenance?: string, serverId?: string): string;
167
191
  /**
168
- * Why the fetcher would refuse a reference, as far as its record shows: no
169
- * server registered for it, which the fetcher checks first, or its expiry.
170
- * Null for a saved copy, which the fetcher serves before any check, and when
171
- * the record shows neither. The fetcher's other refusals rest on what a record
172
- * doesn't hold: whether any of its servers is still known to the host and on
173
- * the uri's origin, a claimed size over the ceiling a fetch is given, or the
174
- * dialed server's fetch budget spent, and it gives those in its own words.
192
+ * Why the fetcher would refuse a reference, as far as its record alone shows,
193
+ * for its stub: no server registered for it, which the fetcher checks first,
194
+ * or its expiry. Null for a saved copy, which the fetcher serves before any
195
+ * check, and when the record shows neither. The fetcher's other refusals rest
196
+ * on what a record doesn't hold: whether any of its servers is known to the
197
+ * host, has an address and is on the uri's origin, the dialed server's fetch
198
+ * budget spent, or a claimed size over the ceiling a fetch is given. The
199
+ * fetcher gives those in its own words, and save_recent_image, in the
200
+ * framework where it can ask the fetcher, says them too.
175
201
  */
176
202
  export declare function unfetchableReason(record: ReferenceRecord, nowMs?: number): string | null;
177
203
  /**
@@ -180,4 +206,23 @@ export declare function unfetchableReason(record: ReferenceRecord, nowMs?: numbe
180
206
  * its existing (inline/text) handling.
181
207
  */
182
208
  export declare function referenceStubOrNull(block: unknown, provenance?: string, serverId?: string): string | null;
209
+ /**
210
+ * RFC-005 treatment for one MCPL wire block, for a script's structured
211
+ * result, which carries blocks rather than text. It makes the decision
212
+ * referenceStubOrNull makes for the model's lanes, since what a script prints
213
+ * comes back to the model. A reference becomes the stub's facts as data,
214
+ * without its URI: the host's reference id, what the server said about it in
215
+ * this block (its labels stripped and bounded as in the stub), and `savedTo`,
216
+ * the workspace path its payload was fetched to, or null when it wasn't
217
+ * (`fetch_reference` takes the id as `ref_id`). An unsaved reference that
218
+ * counts as expired also carries `expired`, the reason the stub gives in
219
+ * place of advising fetch_reference. The reference is registered bound to
220
+ * `serverId`, the server whose tool returned it, as the model's lanes bind
221
+ * a tool result's references, so the fetch its id offers can be made. A
222
+ * block the classifier
223
+ * rejects becomes the notice the model's lanes show, and inline data that
224
+ * also claims a bulk disposition the withheld notice, each as a text block.
225
+ * A text block, or inline data that claims nothing, is returned as sent.
226
+ */
227
+ export declare function referenceBlockForScript(block: unknown, serverId: string): unknown;
183
228
  //# sourceMappingURL=references.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../../src/mcpl/references.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,eAAO,MAAM,gBAAgB;aAAK,GAAG,EAAE,IAAI;aAAE,QAAQ,EAAE,GAAG;aAAE,IAAI,EAAE,GAAG;aAAE,SAAS,EAAE,EAAE;CAAW,CAAC;AAChG,eAAO,MAAM,cAAc,QAA+B,CAAC;AAQ3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,kBAAkB,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAyBxC,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,CA0BjE;AAsCD;;;qEAGqE;AACrE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG7D;AAED,eAAO,MAAM,oBAAoB,wFACsD,CAAC;AAExF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,gBAAgB,CAAC,EAAE,KAAK,SAAa,GAC9E,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,IAAI,CAM9C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,gBAAgB,CAAC,EAAE,KAAK,SAAa,GAAG,OAAO,CAE3H;AAED,0EAA0E;AAC1E,eAAO,MAAM,aAAa;aACxB,MAAM,EAAE,mCAAmC;aAC3C,WAAW,EAAE,gEAAgE;aAC7E,QAAQ;CACA,CAAC;AAEX;;2CAE2C;AAC3C,eAAO,MAAM,cAAc,oDAAoD,CAAC;AAEhF;;;6EAG6E;AAC7E,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQjE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKjD;AAMD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd;;;yCAGqC;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAID;;;;;;;;;;;GAWG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAsC;IACrD;;;;;;;;;;;;;;;kDAe8C;IAC9C,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,OAAO,CAAK;IAEpB,QAAQ,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,eAAe,CAgC1E;IAED,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE9C;IAED,iCAAiC;IACjC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAGlD;CACF;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AAMzD;uDACuD;AACvD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEvE;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,QAKiB,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAuBxG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,SAAa,GAAG,MAAM,GAAG,IAAI,CAK5F;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASzG"}
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../../src/mcpl/references.ts"],"names":[],"mappings":"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"}