@animalabs/agent-framework 0.26.2 → 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 (371) hide show
  1. package/README.md +99 -8
  2. package/dist/src/agent.d.ts +291 -23
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +596 -61
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/server.d.ts.map +1 -1
  7. package/dist/src/api/server.js +5 -4
  8. package/dist/src/api/server.js.map +1 -1
  9. package/dist/src/auto-continue.d.ts +34 -0
  10. package/dist/src/auto-continue.d.ts.map +1 -0
  11. package/dist/src/auto-continue.js +36 -0
  12. package/dist/src/auto-continue.js.map +1 -0
  13. package/dist/src/code-execution/isolate/scripts.d.ts +11 -0
  14. package/dist/src/code-execution/isolate/scripts.d.ts.map +1 -1
  15. package/dist/src/code-execution/isolate/scripts.js +5 -1
  16. package/dist/src/code-execution/isolate/scripts.js.map +1 -1
  17. package/dist/src/cut-off-round.d.ts +24 -0
  18. package/dist/src/cut-off-round.d.ts.map +1 -0
  19. package/dist/src/cut-off-round.js +87 -0
  20. package/dist/src/cut-off-round.js.map +1 -0
  21. package/dist/src/framework.d.ts +1038 -193
  22. package/dist/src/framework.d.ts.map +1 -1
  23. package/dist/src/framework.js +5967 -1514
  24. package/dist/src/framework.js.map +1 -1
  25. package/dist/src/gate/event-gate.d.ts +405 -46
  26. package/dist/src/gate/event-gate.d.ts.map +1 -1
  27. package/dist/src/gate/event-gate.js +2646 -399
  28. package/dist/src/gate/event-gate.js.map +1 -1
  29. package/dist/src/gate/index.d.ts +3 -2
  30. package/dist/src/gate/index.d.ts.map +1 -1
  31. package/dist/src/gate/index.js +2 -1
  32. package/dist/src/gate/index.js.map +1 -1
  33. package/dist/src/gate/recipe-reconcile.d.ts +103 -0
  34. package/dist/src/gate/recipe-reconcile.d.ts.map +1 -0
  35. package/dist/src/gate/recipe-reconcile.js +325 -0
  36. package/dist/src/gate/recipe-reconcile.js.map +1 -0
  37. package/dist/src/gate/reply-judge.d.ts +116 -0
  38. package/dist/src/gate/reply-judge.d.ts.map +1 -0
  39. package/dist/src/gate/reply-judge.js +467 -0
  40. package/dist/src/gate/reply-judge.js.map +1 -0
  41. package/dist/src/gate/types.d.ts +229 -8
  42. package/dist/src/gate/types.d.ts.map +1 -1
  43. package/dist/src/heartbeat/heartbeat.d.ts +184 -0
  44. package/dist/src/heartbeat/heartbeat.d.ts.map +1 -0
  45. package/dist/src/heartbeat/heartbeat.js +752 -0
  46. package/dist/src/heartbeat/heartbeat.js.map +1 -0
  47. package/dist/src/heartbeat/reminder-time.d.ts +5 -0
  48. package/dist/src/heartbeat/reminder-time.d.ts.map +1 -0
  49. package/dist/src/heartbeat/reminder-time.js +107 -0
  50. package/dist/src/heartbeat/reminder-time.js.map +1 -0
  51. package/dist/src/index.d.ts +10 -4
  52. package/dist/src/index.d.ts.map +1 -1
  53. package/dist/src/index.js +7 -2
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/mcpl/capability-mask.d.ts.map +1 -1
  56. package/dist/src/mcpl/capability-mask.js +3 -2
  57. package/dist/src/mcpl/capability-mask.js.map +1 -1
  58. package/dist/src/mcpl/channel-registry.d.ts +433 -113
  59. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  60. package/dist/src/mcpl/channel-registry.js +1154 -435
  61. package/dist/src/mcpl/channel-registry.js.map +1 -1
  62. package/dist/src/mcpl/conversation-router.d.ts +16 -8
  63. package/dist/src/mcpl/conversation-router.d.ts.map +1 -1
  64. package/dist/src/mcpl/conversation-router.js +29 -15
  65. package/dist/src/mcpl/conversation-router.js.map +1 -1
  66. package/dist/src/mcpl/convert-block.d.ts.map +1 -1
  67. package/dist/src/mcpl/convert-block.js +14 -2
  68. package/dist/src/mcpl/convert-block.js.map +1 -1
  69. package/dist/src/mcpl/hook-orchestrator.d.ts +7 -1
  70. package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
  71. package/dist/src/mcpl/hook-orchestrator.js +32 -7
  72. package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
  73. package/dist/src/mcpl/inbound-source.d.ts +26 -10
  74. package/dist/src/mcpl/inbound-source.d.ts.map +1 -1
  75. package/dist/src/mcpl/inbound-source.js +40 -69
  76. package/dist/src/mcpl/inbound-source.js.map +1 -1
  77. package/dist/src/mcpl/index.d.ts +5 -1
  78. package/dist/src/mcpl/index.d.ts.map +1 -1
  79. package/dist/src/mcpl/index.js +4 -0
  80. package/dist/src/mcpl/index.js.map +1 -1
  81. package/dist/src/mcpl/inference-router.d.ts +14 -2
  82. package/dist/src/mcpl/inference-router.d.ts.map +1 -1
  83. package/dist/src/mcpl/inference-router.js +73 -28
  84. package/dist/src/mcpl/inference-router.js.map +1 -1
  85. package/dist/src/mcpl/prose-grammar.d.ts +4 -0
  86. package/dist/src/mcpl/prose-grammar.d.ts.map +1 -1
  87. package/dist/src/mcpl/prose-grammar.js +6 -0
  88. package/dist/src/mcpl/prose-grammar.js.map +1 -1
  89. package/dist/src/mcpl/protocol-family.d.ts.map +1 -1
  90. package/dist/src/mcpl/protocol-family.js +3 -0
  91. package/dist/src/mcpl/protocol-family.js.map +1 -1
  92. package/dist/src/mcpl/push-coalescer.d.ts +20 -2
  93. package/dist/src/mcpl/push-coalescer.d.ts.map +1 -1
  94. package/dist/src/mcpl/push-coalescer.js +33 -11
  95. package/dist/src/mcpl/push-coalescer.js.map +1 -1
  96. package/dist/src/mcpl/reference-fetcher.d.ts +63 -42
  97. package/dist/src/mcpl/reference-fetcher.d.ts.map +1 -1
  98. package/dist/src/mcpl/reference-fetcher.js +177 -145
  99. package/dist/src/mcpl/reference-fetcher.js.map +1 -1
  100. package/dist/src/mcpl/references.d.ts +380 -46
  101. package/dist/src/mcpl/references.d.ts.map +1 -1
  102. package/dist/src/mcpl/references.js +736 -77
  103. package/dist/src/mcpl/references.js.map +1 -1
  104. package/dist/src/mcpl/server-connection.d.ts +93 -4
  105. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  106. package/dist/src/mcpl/server-connection.js +176 -11
  107. package/dist/src/mcpl/server-connection.js.map +1 -1
  108. package/dist/src/mcpl/tags.d.ts +9 -2
  109. package/dist/src/mcpl/tags.d.ts.map +1 -1
  110. package/dist/src/mcpl/tags.js +12 -2
  111. package/dist/src/mcpl/tags.js.map +1 -1
  112. package/dist/src/mcpl/tool-lifecycle.d.ts +11 -0
  113. package/dist/src/mcpl/tool-lifecycle.d.ts.map +1 -1
  114. package/dist/src/mcpl/tool-lifecycle.js +21 -0
  115. package/dist/src/mcpl/tool-lifecycle.js.map +1 -1
  116. package/dist/src/mcpl/tool-presence.d.ts +311 -0
  117. package/dist/src/mcpl/tool-presence.d.ts.map +1 -0
  118. package/dist/src/mcpl/tool-presence.js +697 -0
  119. package/dist/src/mcpl/tool-presence.js.map +1 -0
  120. package/dist/src/mcpl/tool-result-normalize.d.ts +9 -3
  121. package/dist/src/mcpl/tool-result-normalize.d.ts.map +1 -1
  122. package/dist/src/mcpl/tool-result-normalize.js +14 -6
  123. package/dist/src/mcpl/tool-result-normalize.js.map +1 -1
  124. package/dist/src/mcpl/tool-signature.d.ts +46 -0
  125. package/dist/src/mcpl/tool-signature.d.ts.map +1 -0
  126. package/dist/src/mcpl/tool-signature.js +321 -0
  127. package/dist/src/mcpl/tool-signature.js.map +1 -0
  128. package/dist/src/mcpl/toolset-host.d.ts +251 -0
  129. package/dist/src/mcpl/toolset-host.d.ts.map +1 -0
  130. package/dist/src/mcpl/toolset-host.js +720 -0
  131. package/dist/src/mcpl/toolset-host.js.map +1 -0
  132. package/dist/src/mcpl/toolsets-module.d.ts +83 -0
  133. package/dist/src/mcpl/toolsets-module.d.ts.map +1 -0
  134. package/dist/src/mcpl/toolsets-module.js +523 -0
  135. package/dist/src/mcpl/toolsets-module.js.map +1 -0
  136. package/dist/src/mcpl/transport.d.ts +2 -2
  137. package/dist/src/mcpl/transport.d.ts.map +1 -1
  138. package/dist/src/mcpl/transport.js +3 -2
  139. package/dist/src/mcpl/transport.js.map +1 -1
  140. package/dist/src/mcpl/types.d.ts +24 -2
  141. package/dist/src/mcpl/types.d.ts.map +1 -1
  142. package/dist/src/mcpl/types.js.map +1 -1
  143. package/dist/src/mcpl/visible-content.d.ts +7 -9
  144. package/dist/src/mcpl/visible-content.d.ts.map +1 -1
  145. package/dist/src/mcpl/visible-content.js +21 -9
  146. package/dist/src/mcpl/visible-content.js.map +1 -1
  147. package/dist/src/module-registry.d.ts +27 -9
  148. package/dist/src/module-registry.d.ts.map +1 -1
  149. package/dist/src/module-registry.js +77 -17
  150. package/dist/src/module-registry.js.map +1 -1
  151. package/dist/src/modules/discord/index.js +1 -1
  152. package/dist/src/modules/discord/index.js.map +1 -1
  153. package/dist/src/modules/history/index.d.ts +2 -1
  154. package/dist/src/modules/history/index.d.ts.map +1 -1
  155. package/dist/src/modules/history/index.js +73 -28
  156. package/dist/src/modules/history/index.js.map +1 -1
  157. package/dist/src/modules/history/semantic.d.ts +108 -6
  158. package/dist/src/modules/history/semantic.d.ts.map +1 -1
  159. package/dist/src/modules/history/semantic.js +273 -57
  160. package/dist/src/modules/history/semantic.js.map +1 -1
  161. package/dist/src/modules/workspace/answers.d.ts +22 -0
  162. package/dist/src/modules/workspace/answers.d.ts.map +1 -0
  163. package/dist/src/modules/workspace/answers.js +123 -0
  164. package/dist/src/modules/workspace/answers.js.map +1 -0
  165. package/dist/src/modules/workspace/branch-intent.d.ts +5 -3
  166. package/dist/src/modules/workspace/branch-intent.d.ts.map +1 -1
  167. package/dist/src/modules/workspace/branch-intent.js +6 -2
  168. package/dist/src/modules/workspace/branch-intent.js.map +1 -1
  169. package/dist/src/modules/workspace/direct-write.d.ts +184 -0
  170. package/dist/src/modules/workspace/direct-write.d.ts.map +1 -0
  171. package/dist/src/modules/workspace/direct-write.js +417 -0
  172. package/dist/src/modules/workspace/direct-write.js.map +1 -0
  173. package/dist/src/modules/workspace/disk-agreement.d.ts +33 -11
  174. package/dist/src/modules/workspace/disk-agreement.d.ts.map +1 -1
  175. package/dist/src/modules/workspace/disk-agreement.js +48 -17
  176. package/dist/src/modules/workspace/disk-agreement.js.map +1 -1
  177. package/dist/src/modules/workspace/edit-text.d.ts +27 -12
  178. package/dist/src/modules/workspace/edit-text.d.ts.map +1 -1
  179. package/dist/src/modules/workspace/edit-text.js +61 -29
  180. package/dist/src/modules/workspace/edit-text.js.map +1 -1
  181. package/dist/src/modules/workspace/effects.d.ts +10 -0
  182. package/dist/src/modules/workspace/effects.d.ts.map +1 -1
  183. package/dist/src/modules/workspace/effects.js +21 -14
  184. package/dist/src/modules/workspace/effects.js.map +1 -1
  185. package/dist/src/modules/workspace/index.d.ts +308 -78
  186. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  187. package/dist/src/modules/workspace/index.js +2103 -720
  188. package/dist/src/modules/workspace/index.js.map +1 -1
  189. package/dist/src/modules/workspace/observe.d.ts +75 -63
  190. package/dist/src/modules/workspace/observe.d.ts.map +1 -1
  191. package/dist/src/modules/workspace/observe.js +366 -180
  192. package/dist/src/modules/workspace/observe.js.map +1 -1
  193. package/dist/src/modules/workspace/read-page.d.ts +41 -0
  194. package/dist/src/modules/workspace/read-page.d.ts.map +1 -0
  195. package/dist/src/modules/workspace/read-page.js +219 -0
  196. package/dist/src/modules/workspace/read-page.js.map +1 -0
  197. package/dist/src/modules/workspace/reconcile.d.ts.map +1 -1
  198. package/dist/src/modules/workspace/reconcile.js +26 -16
  199. package/dist/src/modules/workspace/reconcile.js.map +1 -1
  200. package/dist/src/modules/workspace/result-text.d.ts +68 -0
  201. package/dist/src/modules/workspace/result-text.d.ts.map +1 -0
  202. package/dist/src/modules/workspace/result-text.js +94 -0
  203. package/dist/src/modules/workspace/result-text.js.map +1 -0
  204. package/dist/src/modules/workspace/sync.d.ts +9 -0
  205. package/dist/src/modules/workspace/sync.d.ts.map +1 -1
  206. package/dist/src/modules/workspace/sync.js +14 -0
  207. package/dist/src/modules/workspace/sync.js.map +1 -1
  208. package/dist/src/modules/workspace/text.d.ts +29 -12
  209. package/dist/src/modules/workspace/text.d.ts.map +1 -1
  210. package/dist/src/modules/workspace/text.js +35 -33
  211. package/dist/src/modules/workspace/text.js.map +1 -1
  212. package/dist/src/modules/workspace/types.d.ts +137 -60
  213. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  214. package/dist/src/modules/workspace/types.js.map +1 -1
  215. package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
  216. package/dist/src/modules/workspace/watcher.js +8 -3
  217. package/dist/src/modules/workspace/watcher.js.map +1 -1
  218. package/dist/src/prose-drafts.d.ts +4 -3
  219. package/dist/src/prose-drafts.d.ts.map +1 -1
  220. package/dist/src/prose-drafts.js +3 -2
  221. package/dist/src/prose-drafts.js.map +1 -1
  222. package/dist/src/reasoning-loss-notice.d.ts +23 -0
  223. package/dist/src/reasoning-loss-notice.d.ts.map +1 -0
  224. package/dist/src/reasoning-loss-notice.js +50 -0
  225. package/dist/src/reasoning-loss-notice.js.map +1 -0
  226. package/dist/src/reasoning-loss.d.ts +24 -0
  227. package/dist/src/reasoning-loss.d.ts.map +1 -0
  228. package/dist/src/reasoning-loss.js +102 -0
  229. package/dist/src/reasoning-loss.js.map +1 -0
  230. package/dist/src/send-tools.d.ts +3 -2
  231. package/dist/src/send-tools.d.ts.map +1 -1
  232. package/dist/src/send-tools.js +3 -2
  233. package/dist/src/send-tools.js.map +1 -1
  234. package/dist/src/sent-rows.d.ts +59 -0
  235. package/dist/src/sent-rows.d.ts.map +1 -0
  236. package/dist/src/sent-rows.js +145 -0
  237. package/dist/src/sent-rows.js.map +1 -0
  238. package/dist/src/silent-heartbeat.d.ts +17 -10
  239. package/dist/src/silent-heartbeat.d.ts.map +1 -1
  240. package/dist/src/silent-heartbeat.js.map +1 -1
  241. package/dist/src/stable-hash.d.ts +3 -0
  242. package/dist/src/stable-hash.d.ts.map +1 -0
  243. package/dist/src/stable-hash.js +15 -0
  244. package/dist/src/stable-hash.js.map +1 -0
  245. package/dist/src/stored-injections.d.ts +99 -0
  246. package/dist/src/stored-injections.d.ts.map +1 -0
  247. package/dist/src/stored-injections.js +106 -0
  248. package/dist/src/stored-injections.js.map +1 -0
  249. package/dist/src/text-as-stored.d.ts +4 -3
  250. package/dist/src/text-as-stored.d.ts.map +1 -1
  251. package/dist/src/text-as-stored.js +4 -3
  252. package/dist/src/text-as-stored.js.map +1 -1
  253. package/dist/src/thinking-drops.d.ts +74 -0
  254. package/dist/src/thinking-drops.d.ts.map +1 -0
  255. package/dist/src/thinking-drops.js +96 -0
  256. package/dist/src/thinking-drops.js.map +1 -0
  257. package/dist/src/tool-args.d.ts +12 -0
  258. package/dist/src/tool-args.d.ts.map +1 -1
  259. package/dist/src/tool-args.js +35 -1
  260. package/dist/src/tool-args.js.map +1 -1
  261. package/dist/src/tool-image-ledger.d.ts +9 -8
  262. package/dist/src/tool-image-ledger.d.ts.map +1 -1
  263. package/dist/src/tool-image-ledger.js +9 -8
  264. package/dist/src/tool-image-ledger.js.map +1 -1
  265. package/dist/src/tool-presentation.d.ts.map +1 -1
  266. package/dist/src/tool-presentation.js +3 -1
  267. package/dist/src/tool-presentation.js.map +1 -1
  268. package/dist/src/tool-result-guard.d.ts +12 -6
  269. package/dist/src/tool-result-guard.d.ts.map +1 -1
  270. package/dist/src/tool-result-guard.js +44 -17
  271. package/dist/src/tool-result-guard.js.map +1 -1
  272. package/dist/src/tool-result-history.d.ts +176 -24
  273. package/dist/src/tool-result-history.d.ts.map +1 -1
  274. package/dist/src/tool-result-history.js +411 -91
  275. package/dist/src/tool-result-history.js.map +1 -1
  276. package/dist/src/tune-out/coordinator.d.ts +17 -9
  277. package/dist/src/tune-out/coordinator.d.ts.map +1 -1
  278. package/dist/src/tune-out/coordinator.js +84 -37
  279. package/dist/src/tune-out/coordinator.js.map +1 -1
  280. package/dist/src/tune-out/tools.d.ts +4 -1
  281. package/dist/src/tune-out/tools.d.ts.map +1 -1
  282. package/dist/src/types/agent.d.ts +217 -7
  283. package/dist/src/types/agent.d.ts.map +1 -1
  284. package/dist/src/types/events.d.ts +33 -9
  285. package/dist/src/types/events.d.ts.map +1 -1
  286. package/dist/src/types/framework.d.ts +39 -3
  287. package/dist/src/types/framework.d.ts.map +1 -1
  288. package/dist/src/types/module.d.ts +95 -9
  289. package/dist/src/types/module.d.ts.map +1 -1
  290. package/dist/src/types/trace.d.ts +91 -3
  291. package/dist/src/types/trace.d.ts.map +1 -1
  292. package/package.json +5 -4
  293. package/src/agent.ts +661 -67
  294. package/src/api/server.ts +5 -4
  295. package/src/auto-continue.ts +43 -0
  296. package/src/code-execution/isolate/scripts.ts +11 -3
  297. package/src/cut-off-round.ts +98 -0
  298. package/src/framework.ts +6168 -1540
  299. package/src/gate/event-gate.ts +2895 -405
  300. package/src/gate/index.ts +10 -1
  301. package/src/gate/recipe-reconcile.ts +355 -0
  302. package/src/gate/reply-judge.ts +512 -0
  303. package/src/gate/types.ts +234 -9
  304. package/src/heartbeat/heartbeat.ts +804 -0
  305. package/src/heartbeat/reminder-time.ts +107 -0
  306. package/src/index.ts +11 -4
  307. package/src/mcpl/capability-mask.ts +3 -2
  308. package/src/mcpl/channel-registry.ts +1222 -468
  309. package/src/mcpl/conversation-router.ts +34 -16
  310. package/src/mcpl/convert-block.ts +14 -1
  311. package/src/mcpl/hook-orchestrator.ts +33 -6
  312. package/src/mcpl/inbound-source.ts +42 -69
  313. package/src/mcpl/index.ts +6 -1
  314. package/src/mcpl/inference-router.ts +79 -34
  315. package/src/mcpl/prose-grammar.ts +7 -0
  316. package/src/mcpl/protocol-family.ts +2 -0
  317. package/src/mcpl/push-coalescer.ts +51 -13
  318. package/src/mcpl/reference-fetcher.ts +201 -162
  319. package/src/mcpl/references.ts +851 -77
  320. package/src/mcpl/server-connection.ts +189 -11
  321. package/src/mcpl/tags.ts +13 -2
  322. package/src/mcpl/tool-lifecycle.ts +21 -0
  323. package/src/mcpl/tool-presence.ts +716 -0
  324. package/src/mcpl/tool-result-normalize.ts +18 -6
  325. package/src/mcpl/tool-signature.ts +316 -0
  326. package/src/mcpl/toolset-host.ts +727 -0
  327. package/src/mcpl/toolsets-module.ts +545 -0
  328. package/src/mcpl/transport.ts +3 -2
  329. package/src/mcpl/types.ts +25 -2
  330. package/src/mcpl/visible-content.ts +22 -9
  331. package/src/module-registry.ts +85 -26
  332. package/src/modules/discord/index.ts +1 -1
  333. package/src/modules/history/index.ts +70 -30
  334. package/src/modules/history/semantic.ts +308 -54
  335. package/src/modules/workspace/answers.ts +133 -0
  336. package/src/modules/workspace/branch-intent.ts +10 -5
  337. package/src/modules/workspace/direct-write.ts +460 -0
  338. package/src/modules/workspace/disk-agreement.ts +52 -21
  339. package/src/modules/workspace/edit-text.ts +84 -35
  340. package/src/modules/workspace/effects.ts +22 -13
  341. package/src/modules/workspace/index.ts +2142 -723
  342. package/src/modules/workspace/observe.ts +381 -177
  343. package/src/modules/workspace/read-page.ts +228 -0
  344. package/src/modules/workspace/reconcile.ts +27 -15
  345. package/src/modules/workspace/result-text.ts +121 -0
  346. package/src/modules/workspace/sync.ts +16 -0
  347. package/src/modules/workspace/text.ts +58 -32
  348. package/src/modules/workspace/types.ts +137 -60
  349. package/src/modules/workspace/watcher.ts +8 -3
  350. package/src/prose-drafts.ts +4 -3
  351. package/src/reasoning-loss-notice.ts +62 -0
  352. package/src/reasoning-loss.ts +120 -0
  353. package/src/send-tools.ts +3 -2
  354. package/src/sent-rows.ts +162 -0
  355. package/src/silent-heartbeat.ts +17 -10
  356. package/src/stable-hash.ts +14 -0
  357. package/src/stored-injections.ts +131 -0
  358. package/src/text-as-stored.ts +4 -3
  359. package/src/thinking-drops.ts +135 -0
  360. package/src/tool-args.ts +34 -1
  361. package/src/tool-image-ledger.ts +9 -8
  362. package/src/tool-presentation.ts +3 -1
  363. package/src/tool-result-guard.ts +45 -17
  364. package/src/tool-result-history.ts +471 -90
  365. package/src/tune-out/coordinator.ts +80 -37
  366. package/src/tune-out/tools.ts +4 -1
  367. package/src/types/agent.ts +220 -7
  368. package/src/types/events.ts +33 -9
  369. package/src/types/framework.ts +36 -3
  370. package/src/types/module.ts +91 -9
  371. package/src/types/trace.ts +94 -3
@@ -35,6 +35,7 @@
35
35
  */
36
36
  import type { ContextStrategy } from '@animalabs/context-manager';
37
37
  import type { ChannelDescriptor } from './types.js';
38
+ import { type ChannelRef } from './channel-registry.js';
38
39
  /** When an unbound channel acquires a fork. */
39
40
  export type BindRule = 'always' | 'mention' | 'never';
40
41
  /** When a message on a bound channel triggers inference (it always lands in
@@ -93,6 +94,9 @@ export interface ConversationRouterConfig {
93
94
  }
94
95
  export interface ConversationBinding {
95
96
  channelId: string;
97
+ /** The channel's server: channel ids are unique only within one server's
98
+ * connection (MCPL §14.2), so each server's channel has its own binding. */
99
+ serverId: string;
96
100
  agentName: string;
97
101
  /** Engagement counter per channel — fresh forks get a new generation. */
98
102
  generation: number;
@@ -139,10 +143,14 @@ export declare const DEFAULT_CLOSURE_PROMPT: string;
139
143
  */
140
144
  export declare class ConversationRouter {
141
145
  private config;
142
- /** Active bindings, keyed by channelId. */
146
+ /** Active bindings, keyed by the channel's server and id (destinationKey):
147
+ * two servers' channels with one id are two conversations. */
143
148
  private bindings;
144
- /** Engagement counter per channel — survives unbind, so a re-bound channel
145
- * gets a distinct fork agent name. */
149
+ /** Engagement counter per channel id — survives unbind, so a re-bound
150
+ * channel gets a distinct fork agent name. Kept by bare id, as it's
151
+ * persisted: two servers sharing an id share a counter, which still never
152
+ * repeats a name, and their forks' names differ anyway, since each hashes
153
+ * its server (forkAgentName). */
146
154
  private generations;
147
155
  constructor(config: ConversationRouterConfig);
148
156
  get templateAgent(): string;
@@ -160,15 +168,15 @@ export declare class ConversationRouter {
160
168
  * Record a binding after the framework successfully spawned the fork.
161
169
  * Returns the new binding.
162
170
  */
163
- bind(channelId: string, agentName: string, generation: number, now?: number): ConversationBinding;
171
+ bind(channel: ChannelRef, agentName: string, generation: number, now?: number): ConversationBinding;
164
172
  /** Record delivered activity on an existing binding. Does not bind a
165
173
  * channel or advance its generation. Call after successful delivery, not
166
174
  * when previewing a route. The optional clock supports deterministic use. */
167
- touch(channelId: string, now?: number): void;
168
- unbind(channelId: string): void;
169
- getBinding(channelId: string): ConversationBinding | undefined;
175
+ touch(channel: ChannelRef, now?: number): void;
176
+ unbind(channel: ChannelRef): void;
177
+ getBinding(channel: ChannelRef): ConversationBinding | undefined;
170
178
  /** Reverse lookup: the channel an agent is bound to, if any. */
171
- channelForAgent(agentName: string): string | undefined;
179
+ channelForAgent(agentName: string): ChannelRef | undefined;
172
180
  getBindings(): ConversationBinding[];
173
181
  /** Bindings whose idle TTL has elapsed. Does not unbind: the framework
174
182
  * unbinds each one first, so the channel's next message goes to a newer
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-router.d.ts","sourceRoot":"","sources":["../../../src/mcpl/conversation-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-router.d.ts","sourceRoot":"","sources":["../../../src/mcpl/conversation-router.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@
34
34
  * follow-up.
35
35
  */
36
36
  import { createHash } from 'node:crypto';
37
+ import { destinationKey } from './channel-registry.js';
37
38
  /** Logged once by the framework when `FrameworkConfig.conversations` is set. */
38
39
  export const CONVERSATION_ROUTING_DEPRECATION_NOTICE = 'Per-channel conversation routing (FrameworkConfig.conversations) is deprecated and will ' +
39
40
  'be removed in a future release. Its \'mention\' bind/trigger rule reads ' +
@@ -55,10 +56,14 @@ export const DEFAULT_CLOSURE_PROMPT = '[system] This engagement is closing due t
55
56
  */
56
57
  export class ConversationRouter {
57
58
  config;
58
- /** Active bindings, keyed by channelId. */
59
+ /** Active bindings, keyed by the channel's server and id (destinationKey):
60
+ * two servers' channels with one id are two conversations. */
59
61
  bindings = new Map();
60
- /** Engagement counter per channel — survives unbind, so a re-bound channel
61
- * gets a distinct fork agent name. */
62
+ /** Engagement counter per channel id — survives unbind, so a re-bound
63
+ * channel gets a distinct fork agent name. Kept by bare id, as it's
64
+ * persisted: two servers sharing an id share a counter, which still never
65
+ * repeats a name, and their forks' names differ anyway, since each hashes
66
+ * its server (forkAgentName). */
62
67
  generations = new Map();
63
68
  constructor(config) {
64
69
  this.config = config;
@@ -82,7 +87,7 @@ export class ConversationRouter {
82
87
  * unchanged; a failed spawn doesn't leave a dangling route.
83
88
  */
84
89
  route(facts) {
85
- const existing = this.bindings.get(facts.channelId);
90
+ const existing = this.bindings.get(bindingKey({ serverId: facts.serverId ?? '', channelId: facts.channelId }));
86
91
  if (existing) {
87
92
  return {
88
93
  kind: 'existing',
@@ -108,37 +113,42 @@ export class ConversationRouter {
108
113
  * Record a binding after the framework successfully spawned the fork.
109
114
  * Returns the new binding.
110
115
  */
111
- bind(channelId, agentName, generation, now = Date.now()) {
112
- this.generations.set(channelId, generation);
116
+ bind(channel, agentName, generation, now = Date.now()) {
117
+ // The counter is kept by bare id, and two servers' spawns on one id run
118
+ // beside each other, so a bind can finish after a later spawn's: the
119
+ // counter keeps the higher, or the next spawn would propose a fork name
120
+ // already used.
121
+ this.generations.set(channel.channelId, Math.max(this.generations.get(channel.channelId) ?? 0, generation));
113
122
  const binding = {
114
- channelId,
123
+ channelId: channel.channelId,
124
+ serverId: channel.serverId,
115
125
  agentName,
116
126
  generation,
117
127
  boundAt: now,
118
128
  lastActivity: now,
119
129
  };
120
- this.bindings.set(channelId, binding);
130
+ this.bindings.set(bindingKey(channel), binding);
121
131
  return binding;
122
132
  }
123
133
  /** Record delivered activity on an existing binding. Does not bind a
124
134
  * channel or advance its generation. Call after successful delivery, not
125
135
  * when previewing a route. The optional clock supports deterministic use. */
126
- touch(channelId, now = Date.now()) {
127
- const binding = this.bindings.get(channelId);
136
+ touch(channel, now = Date.now()) {
137
+ const binding = this.bindings.get(bindingKey(channel));
128
138
  if (binding)
129
139
  binding.lastActivity = now;
130
140
  }
131
- unbind(channelId) {
132
- this.bindings.delete(channelId);
141
+ unbind(channel) {
142
+ this.bindings.delete(bindingKey(channel));
133
143
  }
134
- getBinding(channelId) {
135
- return this.bindings.get(channelId);
144
+ getBinding(channel) {
145
+ return this.bindings.get(bindingKey(channel));
136
146
  }
137
147
  /** Reverse lookup: the channel an agent is bound to, if any. */
138
148
  channelForAgent(agentName) {
139
149
  for (const binding of this.bindings.values()) {
140
150
  if (binding.agentName === agentName)
141
- return binding.channelId;
151
+ return { serverId: binding.serverId, channelId: binding.channelId };
142
152
  }
143
153
  return undefined;
144
154
  }
@@ -200,6 +210,10 @@ export class ConversationRouter {
200
210
  }
201
211
  /** The readable part of a fork's name stops here: uniqueness rides on the hash. */
202
212
  const FORK_NAME_READABLE_MAX = 64;
213
+ /** A binding's key: its channel's server and id (destinationKey). */
214
+ function bindingKey(channel) {
215
+ return destinationKey(channel);
216
+ }
203
217
  /**
204
218
  * A fork's agent name: `<prefix>-<readable>-g<generation>-<hash>`, such as
205
219
  * `conversation-C123-g2-e08e564271867d16` for Slack's channel `C123` on the
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-router.js","sourceRoot":"","sources":["../../../src/mcpl/conversation-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversation-router.js","sourceRoot":"","sources":["../../../src/mcpl/conversation-router.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"convert-block.d.ts","sourceRoot":"","sources":["../../../src/mcpl/convert-block.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAYxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAqExG"}
1
+ {"version":3,"file":"convert-block.d.ts","sourceRoot":"","sources":["../../../src/mcpl/convert-block.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAaxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAiFxG"}
@@ -3,7 +3,7 @@
3
3
  * for pushed events, channel messages and context injections alike, so a rule
4
4
  * about a malformed block holds on all three.
5
5
  */
6
- import { AUDIO_NO_DATA_TEXT, AUDIO_NO_MEDIA_TYPE_TEXT, IMAGE_NO_DATA_TEXT, IMAGE_NO_MEDIA_TYPE_TEXT, INLINE_WITHHELD_TEXT, isInlineContradiction, referenceStubOrNull, unknownBlockText, } from './references.js';
6
+ import { AUDIO_NO_DATA_TEXT, AUDIO_NO_MEDIA_TYPE_TEXT, IMAGE_NO_DATA_TEXT, IMAGE_NO_MEDIA_TYPE_TEXT, INLINE_WITHHELD_TEXT, classifyBlock, isInlineContradiction, referenceStubOrNull, unknownBlockText, } from './references.js';
7
7
  import { NON_STRING_TEXT_PLACEHOLDER } from './visible-content.js';
8
8
  /**
9
9
  * Convert a single MCPL wire-format content block to a membrane ContentBlock.
@@ -69,11 +69,23 @@ export function convertBlock(block, provenance, serverId) {
69
69
  };
70
70
  }
71
71
  return { type: 'text', text: isFilledString(block.data) ? AUDIO_NO_MEDIA_TYPE_TEXT : AUDIO_NO_DATA_TEXT };
72
- case 'resource':
72
+ case 'resource': {
73
+ // MCP's embedded resource shows as the block its contents make would
74
+ // show here (RFC-005 §8.1), its uri never.
75
+ const c = classifyBlock(block);
76
+ if (c.kind === 'embedded' && c.contents.kind === 'block') {
77
+ return convertBlock(c.contents.block, provenance, serverId);
78
+ }
73
79
  // RFC-005: reference blocks become bounded stubs — never raw URIs
74
80
  // (a signed URL is a bearer credential that looks like a location).
75
81
  return { type: 'text', text: referenceStubOrNull(block, provenance, serverId) ?? '[reference]' };
82
+ }
76
83
  default: {
84
+ // MCP's link to a resource isn't one of MCPL's own blocks, but a server
85
+ // can send one, and RFC-005 §8.1 makes it a reference, shown as one.
86
+ if (block.type === 'resource_link') {
87
+ return { type: 'text', text: referenceStubOrNull(block, provenance, serverId) ?? '[reference]' };
88
+ }
77
89
  // Unknown wire block types previously fell off the exhaustive switch
78
90
  // and propagated `undefined` into ContentBlock[]. Fail visibly. A type
79
91
  // that isn't a string is no type, and is never converted to one: an
@@ -1 +1 @@
1
- {"version":3,"file":"convert-block.js","sourceRoot":"","sources":["../../../src/mcpl/convert-block.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"convert-block.js","sourceRoot":"","sources":["../../../src/mcpl/convert-block.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAGnE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAuB,EAAE,UAAkB,EAAE,QAAgB;IACxF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,qEAAqE;YACrE,kEAAkE;YAClE,8DAA8D;YAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,2BAA2B,EAAE,CAAC;QAE3G,KAAK,OAAO;YACV,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,iEAAiE;gBACjE,8DAA8D;gBAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;YACtD,CAAC;YACD,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACjE,gEAAgE;gBAChE,mEAAmE;gBACnE,mEAAmE;gBACnE,kEAAkE;gBAClE,sEAAsE;gBACtE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;YACnG,CAAC;YACD,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjE,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE;iBACxD,CAAC;YACpB,CAAC;YACD,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE;iBACxB,CAAC;YACpB,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAE5G,KAAK,OAAO;YACV,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,iEAAiE;gBACjE,8DAA8D;gBAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;YACtD,CAAC;YACD,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACjE,+DAA+D;gBAC/D,kEAAkE;gBAClE,6BAA6B;gBAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;YACnG,CAAC;YACD,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjE,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE;iBACxD,CAAC;YACpB,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAE5G,KAAK,UAAU,EAAE,CAAC;YAChB,qEAAqE;YACrE,2CAA2C;YAC3C,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzD,OAAO,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAyB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YAClF,CAAC;YACD,kEAAkE;YAClE,oEAAoE;YACpE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;QACnG,CAAC;QAED,SAAS,CAAC;YACR,wEAAwE;YACxE,qEAAqE;YACrE,IAAK,KAA4B,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;YACnG,CAAC;YACD,qEAAqE;YACrE,uEAAuE;YACvE,oEAAoE;YACpE,+BAA+B;YAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;4CAG4C;AAC5C,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC;AACnD,CAAC"}
@@ -36,8 +36,14 @@ export declare class HookOrchestrator {
36
36
  *
37
37
  * Returns aggregated ContextInjection[] ready for context-manager's compile().
38
38
  * Fail-open: servers that time out or error are silently skipped.
39
+ *
40
+ * `channelsFor` gives each server its own channel context (§14.4), in
41
+ * place of `params.channels`: channel ids are unique only within one
42
+ * server's connection (§14.2), so each server is told only of its own
43
+ * channels (ChannelRegistry.buildChannelContext). Undefined from it leaves
44
+ * the field out for that server.
39
45
  */
40
- beforeInference(params: BeforeInferenceParams): Promise<ContextInjection[]>;
46
+ beforeInference(params: BeforeInferenceParams, channelsFor?: (serverId: string) => BeforeInferenceParams['channels']): Promise<ContextInjection[]>;
41
47
  /**
42
48
  * Fan out `inference/lifecycle` (§10.5) — the metadata-only replacement
43
49
  * for context/afterInference. Notifications, fire-and-forget, gated on the
@@ -1 +1 @@
1
- {"version":3,"file":"hook-orchestrator.d.ts","sourceRoot":"","sources":["../../../src/mcpl/hook-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAGV,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA4DlE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAC1B,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD,YAAY,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAG7E;IAED;;;;OAIG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;;OAKG;IACG,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqBhF;IAED;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CASpD;YAMa,qBAAqB;IAqFnC;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
1
+ {"version":3,"file":"hook-orchestrator.d.ts","sourceRoot":"","sources":["../../../src/mcpl/hook-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAGV,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AA8DlE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAC1B,0EAA0E;IAC1E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqB;IACrD,oGAAoG;IACpG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;IAEpD,YAAY,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAG7E;IAED;;;;OAIG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;;;;;;;;OAWG;IACG,eAAe,CACnB,MAAM,EAAE,qBAAqB,EAC7B,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,qBAAqB,CAAC,UAAU,CAAC,GACpE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqB7B;IAED;;;;;;OAMG;IACH,aAAa,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CASpD;YAMa,qBAAqB;IAqGnC;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;CAY3B"}
@@ -49,7 +49,9 @@ function convertContent(content, serverId) {
49
49
  }
50
50
  /**
51
51
  * Convert an MCPL wire-format context injection, from the server `serverId`,
52
- * to a context-manager ContextInjection.
52
+ * to a context-manager ContextInjection. It builds only these four fields,
53
+ * so a server can't opt an injection out of being stored
54
+ * (ModuleContextInjection.placedEachCompile, which only a module may set).
53
55
  */
54
56
  function convertMcplInjection(mcplInj, serverId) {
55
57
  return {
@@ -87,8 +89,14 @@ export class HookOrchestrator {
87
89
  *
88
90
  * Returns aggregated ContextInjection[] ready for context-manager's compile().
89
91
  * Fail-open: servers that time out or error are silently skipped.
92
+ *
93
+ * `channelsFor` gives each server its own channel context (§14.4), in
94
+ * place of `params.channels`: channel ids are unique only within one
95
+ * server's connection (§14.2), so each server is told only of its own
96
+ * channels (ChannelRegistry.buildChannelContext). Undefined from it leaves
97
+ * the field out for that server.
90
98
  */
91
- async beforeInference(params) {
99
+ async beforeInference(params, channelsFor) {
92
100
  // §5.4: the GRANT decides fan-out, not the raw advertisement — which
93
101
  // also fixes selection for the recursive §5.1 shape, where
94
102
  // `beforeInference: {observe: true, …}` is an object, not `true`. A
@@ -102,7 +110,7 @@ export class HookOrchestrator {
102
110
  }
103
111
  this._isInHook = true;
104
112
  try {
105
- return await this.fanOutBeforeInference(servers, params);
113
+ return await this.fanOutBeforeInference(servers, params, channelsFor);
106
114
  }
107
115
  finally {
108
116
  this._isInHook = false;
@@ -130,15 +138,32 @@ export class HookOrchestrator {
130
138
  // ==========================================================================
131
139
  // Private: beforeInference fan-out
132
140
  // ==========================================================================
133
- async fanOutBeforeInference(servers, params) {
134
- const results = await Promise.allSettled(servers.map((server) => {
141
+ async fanOutBeforeInference(servers, params, channelsFor) {
142
+ const results = await Promise.allSettled(
143
+ // Async, so a throw building one server's channel context fails that
144
+ // server alone, as its timeout or transport error would.
145
+ servers.map(async (server) => {
146
+ let base = params;
147
+ if (channelsFor) {
148
+ const { channels: _shared, ...rest } = params;
149
+ let channels;
150
+ try {
151
+ channels = channelsFor(server.id);
152
+ }
153
+ catch (err) {
154
+ // A bug, not a server's failure: said, then this server is skipped.
155
+ console.error(`[beforeInference] the channel context for "${server.id}" couldn't be built, so it isn't called:`, err);
156
+ throw err;
157
+ }
158
+ base = channels ? { ...rest, channels } : rest;
159
+ }
135
160
  // §10.1: a server not granted observe MUST receive
136
161
  // `userMessage: null` — the field is ABSENT authority, not merely
137
162
  // discouraged — while the hook is still invoked so granted
138
163
  // injection positions keep working (write-without-read).
139
164
  const perServer = CapabilityGrant.of(server).has('contextHooks.beforeInference.observe')
140
- ? params
141
- : { ...params, userMessage: null };
165
+ ? base
166
+ : { ...base, userMessage: null };
142
167
  return withTimeout(server.sendBeforeInference(perServer), BEFORE_INFERENCE_TIMEOUT_MS, `beforeInference to "${server.id}"`).then((result) => ({ server, result }));
143
168
  }));
144
169
  const injections = [];
@@ -1 +1 @@
1
- {"version":3,"file":"hook-orchestrator.js","sourceRoot":"","sources":["../../../src/mcpl/hook-orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-orchestrator.js","sourceRoot":"","sources":["../../../src/mcpl/hook-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -139,23 +139,39 @@ export declare function canonicalJson(value: unknown): string;
139
139
  * room-220 #46752–#47210): SHA-256 hex of `canonicalJson([blocks])` over the
140
140
  * ContentBlock[] the framework stores for the body — after MCPL conversion,
141
141
  * before any host decoration is added and before storage shards it — with
142
- * each block as the store keeps it (storedBlock, canonicalJson). So a body
143
- * hashes alike as delivered, as handed to storage, and as read back from
144
- * the store. The one-element array keeps the framing an undecorated,
145
- * unsharded stored copy has always hashed to, so a stamped copy and an
146
- * older copy of the same body share a version.
142
+ * each block as the store keeps it, which context-manager's `blockAsStored`
143
+ * gives. So a body hashes alike as delivered, as handed to storage, and as
144
+ * read back unsharded from the store with its blobs resolved, except one
145
+ * whose blocks the store changes together: when it mends a `tool_use` whose
146
+ * input isn't an object, it also releases a raw replay form (`rawXml`,
147
+ * `rawItem`) that the message's other blocks share, which no one block's
148
+ * stored form shows. A body an MCPL lane stamps is never one. A block the
149
+ * store refuses on write, a `blob_ref` among them, is digested as given. The
150
+ * one-element array keeps the framing an undecorated, unsharded stored copy
151
+ * has always hashed to, so a stamped copy and an older copy of the same body
152
+ * share a version where the store keeps the body as it did then.
153
+ *
154
+ * A digest is a digest under the context-manager release that computed it: a
155
+ * release that changes what the store keeps, such as its set of image
156
+ * signatures, changes the digest of a body it touches.
147
157
  *
148
158
  * Ingestion stamps it as `metadata.sourceBodyDigest`, and the same function
149
159
  * over exactly the blocks handed to storage (decorations included) as
150
160
  * `metadata.storedBodyDigest`, on both MCPL lanes. Both live outside the
151
161
  * frozen admission envelope: they describe the body actually delivered (a
152
162
  * materialization, a correction), not the admission. Neither proves later
153
- * presence or completeness; an unsharded stored copy that no longer hashes
163
+ * presence or completeness. An unsharded stored copy that no longer hashes
154
164
  * to its storedBodyDigest was changed after delivery (editMessage keeps
155
- * metadata). A body the store shards carries the whole body's two digests
156
- * on every shard, and no shard hashes to them. Check a copy read back with
157
- * its blobs resolved (getAllMessages, getMessage, or getMessageWindow
158
- * without `resolveBlobs: false`): a blob reference never matches.
165
+ * metadata), or holds blocks the store changes together, or its digest was
166
+ * taken under a release that kept some block of it differently: a
167
+ * context-manager release that changed a stored form, or an agent-framework
168
+ * release from 0.24.0 up to the one that brought in blockAsStored, which
169
+ * took stored forms from a copy of the store's transform. Digests already
170
+ * stamped are never recomputed. A body the store shards carries the whole
171
+ * body's two digests on every shard, and no shard hashes to them. Check a
172
+ * copy read back with its blobs resolved (getAllMessages, getMessage, or
173
+ * getMessageWindow without `resolveBlobs: false`): a blob reference never
174
+ * matches.
159
175
  *
160
176
  * Exported from the package root, so a consumer checks a copy against either
161
177
  * field with this same function rather than a copy of it.
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-source.d.ts","sourceRoot":"","sources":["../../../src/mcpl/inbound-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH;;;;+CAI+C;AAC/C,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,YAAY,CAAC;AAE7D,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,6DAA6D;IAC7D,IAAI,EAAE,WAAW,CAAC;IAClB,oDAAoD;IACpD,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB;;qFAEiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB;gFAC4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,uEAAuE;IACvE,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AAEhG;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9C;AAED,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAMlD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAwB9E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAMzE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUpD;AAmED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAEnE"}
1
+ {"version":3,"file":"inbound-source.d.ts","sourceRoot":"","sources":["../../../src/mcpl/inbound-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;;;+CAI+C;AAC/C,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,YAAY,CAAC;AAE7D,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,6DAA6D;IAC7D,IAAI,EAAE,WAAW,CAAC;IAClB,oDAAoD;IACpD,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB;;qFAEiF;IACjF,OAAO,EAAE,MAAM,CAAC;IAChB;gFAC4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,uEAAuE;IACvE,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB;AAED,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,oBAAoB,CAAC;AAEhG;;;;;;;GAOG;AACH,MAAM,WAAW,yBAAyB;IACxC,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9C;AAED,yCAAyC;AACzC,eAAO,MAAM,kBAAkB,kBAAkB,CAAC;AAMlD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAwB9E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAMzE;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUpD;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAEnE"}
@@ -21,6 +21,8 @@
21
21
  * key: `eventId` is present only when the producer supplied one.
22
22
  */
23
23
  import { createHash } from 'node:crypto';
24
+ import { blockAsStored, MalformedContentError } from '@animalabs/context-manager';
25
+ import { logDetail, logValue } from './log-value.js';
24
26
  /** Metadata key the framework stamps. */
25
27
  export const INBOUND_SOURCE_KEY = 'inboundSource';
26
28
  const isText = (v) => typeof v === 'string' && v.length > 0;
@@ -117,92 +119,61 @@ export function canonicalJson(value) {
117
119
  return JSON.stringify(value) ?? 'null';
118
120
  }
119
121
  /**
120
- * A block as the store hands it back. Context-manager keeps inline media as
121
- * blobs (blob-manager.ts): an image whose source isn't a URL, and every
122
- * document, audio or video block, comes back as `{ type, source: { type:
123
- * 'base64', data, mediaType } }` and nothing else, its data re-encoded from
124
- * the decoded bytes, and an image's media type taken from its bytes'
125
- * signature where they have one. Any other block comes back as it was given,
126
- * except a store-internal `blob_ref` from an unresolved read, which resolves
127
- * to inline media by default. It is digested as given here, so an unresolved
128
- * read and its resolved form differ. Context-manager refuses caller-supplied
129
- * blob_ref writes; the MCPL lanes never store one.
122
+ * blockAsStored throws a `MalformedContentError` for a block the store
123
+ * refuses on write, a caller-supplied `blob_ref` among them. Such a block
124
+ * has no stored form, and whatever is thrown, it is digested as given.
130
125
  */
131
126
  function storedBlock(block) {
132
- const media = block;
133
- const blob = media?.type === 'image'
134
- ? media.source?.type !== 'url'
135
- : media?.type === 'document' || media?.type === 'audio' || media?.type === 'video';
136
- const source = media?.source;
137
- if (!blob || typeof source?.data !== 'string')
138
- return block;
139
- const data = canonicalBase64(source.data);
140
- const mediaType = media.type === 'image'
141
- ? sniffRasterImageMediaType(Buffer.from(data.slice(0, 32), 'base64')) ?? source.mediaType
142
- : source.mediaType;
143
- return { type: media.type, source: { type: 'base64', data, mediaType } };
144
- }
145
- /**
146
- * Base64 as the store writes it back from the decoded bytes: padded, with no
147
- * whitespace, the standard alphabet and zero unused bits. Data already in
148
- * that form, as every stored copy's is, is returned without decoding it all.
149
- */
150
- function canonicalBase64(data) {
151
- if (data.length % 4 === 0 && /^[A-Za-z0-9+/]*={0,2}$/.test(data)) {
152
- const last = data.slice(-4);
153
- if (Buffer.from(last, 'base64').toString('base64') === last)
154
- return data;
127
+ try {
128
+ return blockAsStored(block);
155
129
  }
156
- return Buffer.from(data, 'base64').toString('base64');
157
- }
158
- /**
159
- * The store's own test for raster image types with an unambiguous byte
160
- * signature, copied from context-manager's blob-manager.ts (it isn't
161
- * exported): the store relabels an image whose bytes match one of these.
162
- */
163
- function sniffRasterImageMediaType(bytes) {
164
- if (bytes.length >= 8 &&
165
- bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47 &&
166
- bytes[4] === 0x0d && bytes[5] === 0x0a && bytes[6] === 0x1a && bytes[7] === 0x0a) {
167
- return 'image/png';
168
- }
169
- if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {
170
- return 'image/jpeg';
171
- }
172
- if (bytes.length >= 6) {
173
- const signature = Buffer.from(bytes.subarray(0, 6)).toString('ascii');
174
- if (signature === 'GIF87a' || signature === 'GIF89a')
175
- return 'image/gif';
176
- }
177
- if (bytes.length >= 12 &&
178
- Buffer.from(bytes.subarray(0, 4)).toString('ascii') === 'RIFF' &&
179
- Buffer.from(bytes.subarray(8, 12)).toString('ascii') === 'WEBP') {
180
- return 'image/webp';
130
+ catch (err) {
131
+ if (!(err instanceof MalformedContentError)) {
132
+ const { name, message } = (err ?? {});
133
+ console.error(`[stored-digest-as-given] error=${logValue(typeof name === 'string' ? name : typeof err)}: ` +
134
+ logDetail(typeof message === 'string' ? message : ''));
135
+ }
136
+ return block;
181
137
  }
182
- return null;
183
138
  }
184
139
  /**
185
140
  * The version identity of a delivered body (agreed with the receipts lane,
186
141
  * room-220 #46752–#47210): SHA-256 hex of `canonicalJson([blocks])` over the
187
142
  * ContentBlock[] the framework stores for the body — after MCPL conversion,
188
143
  * before any host decoration is added and before storage shards it — with
189
- * each block as the store keeps it (storedBlock, canonicalJson). So a body
190
- * hashes alike as delivered, as handed to storage, and as read back from
191
- * the store. The one-element array keeps the framing an undecorated,
192
- * unsharded stored copy has always hashed to, so a stamped copy and an
193
- * older copy of the same body share a version.
144
+ * each block as the store keeps it, which context-manager's `blockAsStored`
145
+ * gives. So a body hashes alike as delivered, as handed to storage, and as
146
+ * read back unsharded from the store with its blobs resolved, except one
147
+ * whose blocks the store changes together: when it mends a `tool_use` whose
148
+ * input isn't an object, it also releases a raw replay form (`rawXml`,
149
+ * `rawItem`) that the message's other blocks share, which no one block's
150
+ * stored form shows. A body an MCPL lane stamps is never one. A block the
151
+ * store refuses on write, a `blob_ref` among them, is digested as given. The
152
+ * one-element array keeps the framing an undecorated, unsharded stored copy
153
+ * has always hashed to, so a stamped copy and an older copy of the same body
154
+ * share a version where the store keeps the body as it did then.
155
+ *
156
+ * A digest is a digest under the context-manager release that computed it: a
157
+ * release that changes what the store keeps, such as its set of image
158
+ * signatures, changes the digest of a body it touches.
194
159
  *
195
160
  * Ingestion stamps it as `metadata.sourceBodyDigest`, and the same function
196
161
  * over exactly the blocks handed to storage (decorations included) as
197
162
  * `metadata.storedBodyDigest`, on both MCPL lanes. Both live outside the
198
163
  * frozen admission envelope: they describe the body actually delivered (a
199
164
  * materialization, a correction), not the admission. Neither proves later
200
- * presence or completeness; an unsharded stored copy that no longer hashes
165
+ * presence or completeness. An unsharded stored copy that no longer hashes
201
166
  * to its storedBodyDigest was changed after delivery (editMessage keeps
202
- * metadata). A body the store shards carries the whole body's two digests
203
- * on every shard, and no shard hashes to them. Check a copy read back with
204
- * its blobs resolved (getAllMessages, getMessage, or getMessageWindow
205
- * without `resolveBlobs: false`): a blob reference never matches.
167
+ * metadata), or holds blocks the store changes together, or its digest was
168
+ * taken under a release that kept some block of it differently: a
169
+ * context-manager release that changed a stored form, or an agent-framework
170
+ * release from 0.24.0 up to the one that brought in blockAsStored, which
171
+ * took stored forms from a copy of the store's transform. Digests already
172
+ * stamped are never recomputed. A body the store shards carries the whole
173
+ * body's two digests on every shard, and no shard hashes to them. Check a
174
+ * copy read back with its blobs resolved (getAllMessages, getMessage, or
175
+ * getMessageWindow without `resolveBlobs: false`): a blob reference never
176
+ * matches.
206
177
  *
207
178
  * Exported from the package root, so a consumer checks a copy against either
208
179
  * field with this same function rather than a copy of it.