agentfootprint 10.3.1 → 10.4.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 (414) hide show
  1. package/AGENTS.md +2 -2
  2. package/CAPABILITIES.md +6 -0
  3. package/README.md +44 -0
  4. package/ai-instructions/claude-code/SKILL.md +2 -2
  5. package/dist/adapters/mcp/agentcoreRuntime/errorType.js +24 -0
  6. package/dist/adapters/mcp/agentcoreRuntime/errorType.js.map +1 -0
  7. package/dist/adapters/mcp/agentcoreRuntime/invoke.js +265 -0
  8. package/dist/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -0
  9. package/dist/adapters/mcp/agentcoreRuntime/safeAnswer.js +415 -0
  10. package/dist/adapters/mcp/agentcoreRuntime/safeAnswer.js.map +1 -0
  11. package/dist/adapters/mcp/agentcoreRuntime/session.js +179 -0
  12. package/dist/adapters/mcp/agentcoreRuntime/session.js.map +1 -0
  13. package/dist/adapters/mcp/agentcoreRuntime/sessionBusy.js +117 -0
  14. package/dist/adapters/mcp/agentcoreRuntime/sessionBusy.js.map +1 -0
  15. package/dist/adapters/mcp/agentcoreRuntime/strictJson.js +220 -0
  16. package/dist/adapters/mcp/agentcoreRuntime/strictJson.js.map +1 -0
  17. package/dist/adapters/mcp/agentcoreRuntime/transport.js +204 -0
  18. package/dist/adapters/mcp/agentcoreRuntime/transport.js.map +1 -0
  19. package/dist/adapters/memory/agentcore.js +435 -20
  20. package/dist/adapters/memory/agentcore.js.map +1 -1
  21. package/dist/adapters/memory/memoryBank.js +16 -3
  22. package/dist/adapters/memory/memoryBank.js.map +1 -1
  23. package/dist/adapters/memory/pgVector.js +10 -4
  24. package/dist/adapters/memory/pgVector.js.map +1 -1
  25. package/dist/adapters/memory/redis.js +11 -3
  26. package/dist/adapters/memory/redis.js.map +1 -1
  27. package/dist/adapters/memory/s3Vectors.js +8 -3
  28. package/dist/adapters/memory/s3Vectors.js.map +1 -1
  29. package/dist/adapters/memory/sqliteVector.js +10 -4
  30. package/dist/adapters/memory/sqliteVector.js.map +1 -1
  31. package/dist/ag-ui/adapter.js +71 -0
  32. package/dist/ag-ui/adapter.js.map +1 -0
  33. package/dist/ag-ui/framing.js +66 -0
  34. package/dist/ag-ui/framing.js.map +1 -0
  35. package/dist/ag-ui/frontendTools.js +69 -0
  36. package/dist/ag-ui/frontendTools.js.map +1 -0
  37. package/dist/ag-ui/ids.js +54 -0
  38. package/dist/ag-ui/ids.js.map +1 -0
  39. package/dist/ag-ui/index.js +27 -0
  40. package/dist/ag-ui/index.js.map +1 -0
  41. package/dist/ag-ui/request.js +356 -0
  42. package/dist/ag-ui/request.js.map +1 -0
  43. package/dist/ag-ui/serializer.js +899 -0
  44. package/dist/ag-ui/serializer.js.map +1 -0
  45. package/dist/ag-ui/types.js +22 -0
  46. package/dist/ag-ui/types.js.map +1 -0
  47. package/dist/core/Agent.js +38 -5
  48. package/dist/core/Agent.js.map +1 -1
  49. package/dist/core/RunnerBase.js +16 -2
  50. package/dist/core/RunnerBase.js.map +1 -1
  51. package/dist/core/agent/buildAgentChart.js +4 -0
  52. package/dist/core/agent/buildAgentChart.js.map +1 -1
  53. package/dist/core/agent/buildDynamicAgentChart.js +4 -0
  54. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  55. package/dist/core/agent/callerIdentity.js +2 -1
  56. package/dist/core/agent/callerIdentity.js.map +1 -1
  57. package/dist/core/agent/stages/routeTurn.js +3 -3
  58. package/dist/core/agent/stages/routeTurn.js.map +1 -1
  59. package/dist/core/agent/stages/seed.js +49 -8
  60. package/dist/core/agent/stages/seed.js.map +1 -1
  61. package/dist/core/agent/stages/timeLayer.js +2 -2
  62. package/dist/core/agent/stages/timeLayer.js.map +1 -1
  63. package/dist/core/agent/stages/toolCalls.js +26 -5
  64. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  65. package/dist/core/memberRun.js +244 -0
  66. package/dist/core/memberRun.js.map +1 -0
  67. package/dist/core/slots/buildToolsSlot.js +1 -1
  68. package/dist/core/slots/buildToolsSlot.js.map +1 -1
  69. package/dist/core-flow/Conditional.js +29 -8
  70. package/dist/core-flow/Conditional.js.map +1 -1
  71. package/dist/core-flow/Graph.js +38 -13
  72. package/dist/core-flow/Graph.js.map +1 -1
  73. package/dist/core-flow/Loop.js +29 -9
  74. package/dist/core-flow/Loop.js.map +1 -1
  75. package/dist/core-flow/Parallel.js +35 -14
  76. package/dist/core-flow/Parallel.js.map +1 -1
  77. package/dist/core-flow/Sequence.js +29 -8
  78. package/dist/core-flow/Sequence.js.map +1 -1
  79. package/dist/core-flow/Workflow.js +34 -10
  80. package/dist/core-flow/Workflow.js.map +1 -1
  81. package/dist/doors/ag-ui.js +36 -0
  82. package/dist/doors/ag-ui.js.map +1 -0
  83. package/dist/esm/adapters/mcp/agentcoreRuntime/errorType.d.ts +12 -0
  84. package/dist/esm/adapters/mcp/agentcoreRuntime/errorType.js +20 -0
  85. package/dist/esm/adapters/mcp/agentcoreRuntime/errorType.js.map +1 -0
  86. package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.d.ts +116 -0
  87. package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js +260 -0
  88. package/dist/esm/adapters/mcp/agentcoreRuntime/invoke.js.map +1 -0
  89. package/dist/esm/adapters/mcp/agentcoreRuntime/safeAnswer.d.ts +49 -0
  90. package/dist/esm/adapters/mcp/agentcoreRuntime/safeAnswer.js +409 -0
  91. package/dist/esm/adapters/mcp/agentcoreRuntime/safeAnswer.js.map +1 -0
  92. package/dist/esm/adapters/mcp/agentcoreRuntime/session.d.ts +80 -0
  93. package/dist/esm/adapters/mcp/agentcoreRuntime/session.js +175 -0
  94. package/dist/esm/adapters/mcp/agentcoreRuntime/session.js.map +1 -0
  95. package/dist/esm/adapters/mcp/agentcoreRuntime/sessionBusy.d.ts +61 -0
  96. package/dist/esm/adapters/mcp/agentcoreRuntime/sessionBusy.js +112 -0
  97. package/dist/esm/adapters/mcp/agentcoreRuntime/sessionBusy.js.map +1 -0
  98. package/dist/esm/adapters/mcp/agentcoreRuntime/strictJson.d.ts +37 -0
  99. package/dist/esm/adapters/mcp/agentcoreRuntime/strictJson.js +215 -0
  100. package/dist/esm/adapters/mcp/agentcoreRuntime/strictJson.js.map +1 -0
  101. package/dist/esm/adapters/mcp/agentcoreRuntime/transport.d.ts +176 -0
  102. package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js +199 -0
  103. package/dist/esm/adapters/mcp/agentcoreRuntime/transport.js.map +1 -0
  104. package/dist/esm/adapters/memory/agentcore.d.ts +152 -7
  105. package/dist/esm/adapters/memory/agentcore.js +433 -19
  106. package/dist/esm/adapters/memory/agentcore.js.map +1 -1
  107. package/dist/esm/adapters/memory/memoryBank.d.ts +3 -2
  108. package/dist/esm/adapters/memory/memoryBank.js +16 -3
  109. package/dist/esm/adapters/memory/memoryBank.js.map +1 -1
  110. package/dist/esm/adapters/memory/pgVector.js +10 -4
  111. package/dist/esm/adapters/memory/pgVector.js.map +1 -1
  112. package/dist/esm/adapters/memory/redis.d.ts +8 -3
  113. package/dist/esm/adapters/memory/redis.js +11 -3
  114. package/dist/esm/adapters/memory/redis.js.map +1 -1
  115. package/dist/esm/adapters/memory/s3Vectors.js +8 -3
  116. package/dist/esm/adapters/memory/s3Vectors.js.map +1 -1
  117. package/dist/esm/adapters/memory/sqliteVector.js +10 -4
  118. package/dist/esm/adapters/memory/sqliteVector.js.map +1 -1
  119. package/dist/esm/ag-ui/adapter.d.ts +68 -0
  120. package/dist/esm/ag-ui/adapter.js +67 -0
  121. package/dist/esm/ag-ui/adapter.js.map +1 -0
  122. package/dist/esm/ag-ui/framing.d.ts +51 -0
  123. package/dist/esm/ag-ui/framing.js +62 -0
  124. package/dist/esm/ag-ui/framing.js.map +1 -0
  125. package/dist/esm/ag-ui/frontendTools.d.ts +37 -0
  126. package/dist/esm/ag-ui/frontendTools.js +64 -0
  127. package/dist/esm/ag-ui/frontendTools.js.map +1 -0
  128. package/dist/esm/ag-ui/ids.d.ts +43 -0
  129. package/dist/esm/ag-ui/ids.js +49 -0
  130. package/dist/esm/ag-ui/ids.js.map +1 -0
  131. package/dist/esm/ag-ui/index.d.ts +17 -0
  132. package/dist/esm/ag-ui/index.js +17 -0
  133. package/dist/esm/ag-ui/index.js.map +1 -0
  134. package/dist/esm/ag-ui/request.d.ts +72 -0
  135. package/dist/esm/ag-ui/request.js +350 -0
  136. package/dist/esm/ag-ui/request.js.map +1 -0
  137. package/dist/esm/ag-ui/serializer.d.ts +173 -0
  138. package/dist/esm/ag-ui/serializer.js +895 -0
  139. package/dist/esm/ag-ui/serializer.js.map +1 -0
  140. package/dist/esm/ag-ui/types.d.ts +305 -0
  141. package/dist/esm/ag-ui/types.js +19 -0
  142. package/dist/esm/ag-ui/types.js.map +1 -0
  143. package/dist/esm/core/Agent.d.ts +2 -0
  144. package/dist/esm/core/Agent.js +38 -5
  145. package/dist/esm/core/Agent.js.map +1 -1
  146. package/dist/esm/core/RunnerBase.js +17 -3
  147. package/dist/esm/core/RunnerBase.js.map +1 -1
  148. package/dist/esm/core/agent/buildAgentChart.js +4 -0
  149. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  150. package/dist/esm/core/agent/buildDynamicAgentChart.js +4 -0
  151. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  152. package/dist/esm/core/agent/callerIdentity.js +2 -1
  153. package/dist/esm/core/agent/callerIdentity.js.map +1 -1
  154. package/dist/esm/core/agent/stages/routeTurn.d.ts +1 -1
  155. package/dist/esm/core/agent/stages/routeTurn.js +3 -3
  156. package/dist/esm/core/agent/stages/routeTurn.js.map +1 -1
  157. package/dist/esm/core/agent/stages/seed.d.ts +11 -1
  158. package/dist/esm/core/agent/stages/seed.js +49 -8
  159. package/dist/esm/core/agent/stages/seed.js.map +1 -1
  160. package/dist/esm/core/agent/stages/timeLayer.js +2 -2
  161. package/dist/esm/core/agent/stages/timeLayer.js.map +1 -1
  162. package/dist/esm/core/agent/stages/toolCalls.d.ts +11 -1
  163. package/dist/esm/core/agent/stages/toolCalls.js +26 -5
  164. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  165. package/dist/esm/core/agent/types.d.ts +16 -6
  166. package/dist/esm/core/memberRun.d.ts +132 -0
  167. package/dist/esm/core/memberRun.js +227 -0
  168. package/dist/esm/core/memberRun.js.map +1 -0
  169. package/dist/esm/core/slots/buildToolsSlot.d.ts +1 -1
  170. package/dist/esm/core/slots/buildToolsSlot.js +1 -1
  171. package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
  172. package/dist/esm/core-flow/Conditional.d.ts +8 -0
  173. package/dist/esm/core-flow/Conditional.js +29 -8
  174. package/dist/esm/core-flow/Conditional.js.map +1 -1
  175. package/dist/esm/core-flow/Graph.js +38 -13
  176. package/dist/esm/core-flow/Graph.js.map +1 -1
  177. package/dist/esm/core-flow/Loop.d.ts +8 -0
  178. package/dist/esm/core-flow/Loop.js +29 -9
  179. package/dist/esm/core-flow/Loop.js.map +1 -1
  180. package/dist/esm/core-flow/Parallel.d.ts +8 -0
  181. package/dist/esm/core-flow/Parallel.js +35 -14
  182. package/dist/esm/core-flow/Parallel.js.map +1 -1
  183. package/dist/esm/core-flow/Sequence.d.ts +8 -0
  184. package/dist/esm/core-flow/Sequence.js +29 -8
  185. package/dist/esm/core-flow/Sequence.js.map +1 -1
  186. package/dist/esm/core-flow/Workflow.js +34 -10
  187. package/dist/esm/core-flow/Workflow.js.map +1 -1
  188. package/dist/esm/doors/ag-ui.d.ts +19 -0
  189. package/dist/esm/doors/ag-ui.js +20 -0
  190. package/dist/esm/doors/ag-ui.js.map +1 -0
  191. package/dist/esm/hosting/envelope.js +5 -0
  192. package/dist/esm/hosting/envelope.js.map +1 -1
  193. package/dist/esm/hosting/httpHost.js +5 -78
  194. package/dist/esm/hosting/httpHost.js.map +1 -1
  195. package/dist/esm/hosting/index.d.ts +4 -1
  196. package/dist/esm/hosting/index.js +2 -0
  197. package/dist/esm/hosting/index.js.map +1 -1
  198. package/dist/esm/hosting/pendingAsk.d.ts +19 -0
  199. package/dist/esm/hosting/pendingAsk.js +38 -0
  200. package/dist/esm/hosting/pendingAsk.js.map +1 -0
  201. package/dist/esm/hosting/protocolAdapter.d.ts +229 -0
  202. package/dist/esm/hosting/protocolAdapter.js +23 -0
  203. package/dist/esm/hosting/protocolAdapter.js.map +1 -0
  204. package/dist/esm/hosting/refusalStatus.d.ts +30 -0
  205. package/dist/esm/hosting/refusalStatus.js +81 -0
  206. package/dist/esm/hosting/refusalStatus.js.map +1 -0
  207. package/dist/esm/hosting/standingAgent.js +1 -31
  208. package/dist/esm/hosting/standingAgent.js.map +1 -1
  209. package/dist/esm/hosting/stream.d.ts +39 -0
  210. package/dist/esm/hosting/stream.js +34 -2
  211. package/dist/esm/hosting/stream.js.map +1 -1
  212. package/dist/esm/hosting/streamHandler.d.ts +134 -0
  213. package/dist/esm/hosting/streamHandler.js +493 -0
  214. package/dist/esm/hosting/streamHandler.js.map +1 -0
  215. package/dist/esm/hosting/types.d.ts +15 -0
  216. package/dist/esm/hosting/types.js.map +1 -1
  217. package/dist/esm/hosting/verifiedThreads.d.ts +29 -0
  218. package/dist/esm/hosting/verifiedThreads.js +46 -0
  219. package/dist/esm/hosting/verifiedThreads.js.map +1 -0
  220. package/dist/esm/index.d.ts +1 -0
  221. package/dist/esm/index.js +3 -0
  222. package/dist/esm/index.js.map +1 -1
  223. package/dist/esm/lib/humanizeLLMError.d.ts +15 -0
  224. package/dist/esm/lib/humanizeLLMError.js +22 -7
  225. package/dist/esm/lib/humanizeLLMError.js.map +1 -1
  226. package/dist/esm/mcp/throttleRetry.d.ts +51 -0
  227. package/dist/esm/mcp/throttleRetry.js +37 -4
  228. package/dist/esm/mcp/throttleRetry.js.map +1 -1
  229. package/dist/esm/memory/define.js +45 -1
  230. package/dist/esm/memory/define.js.map +1 -1
  231. package/dist/esm/memory/define.types.d.ts +24 -0
  232. package/dist/esm/memory/define.types.js.map +1 -1
  233. package/dist/esm/memory/stages/formatDefault.js +3 -1
  234. package/dist/esm/memory/stages/formatDefault.js.map +1 -1
  235. package/dist/esm/memory/store/InMemoryStore.d.ts +8 -3
  236. package/dist/esm/memory/store/InMemoryStore.js +12 -3
  237. package/dist/esm/memory/store/InMemoryStore.js.map +1 -1
  238. package/dist/esm/memory/store/index.d.ts +1 -0
  239. package/dist/esm/memory/store/index.js +5 -0
  240. package/dist/esm/memory/store/index.js.map +1 -1
  241. package/dist/esm/memory/store/types.d.ts +38 -4
  242. package/dist/esm/memory/store/writeOptions.d.ts +118 -0
  243. package/dist/esm/memory/store/writeOptions.js +242 -0
  244. package/dist/esm/memory/store/writeOptions.js.map +1 -0
  245. package/dist/esm/memory-providers.d.ts +1 -1
  246. package/dist/esm/memory-providers.js +4 -1
  247. package/dist/esm/memory-providers.js.map +1 -1
  248. package/dist/esm/patterns/MapReduce.js +8 -2
  249. package/dist/esm/patterns/MapReduce.js.map +1 -1
  250. package/dist/esm/tool-providers/index.d.ts +5 -0
  251. package/dist/esm/tool-providers/index.js +6 -0
  252. package/dist/esm/tool-providers/index.js.map +1 -1
  253. package/dist/esm/trace-toolpack/selfExplain.d.ts +8 -0
  254. package/dist/esm/trace-toolpack/selfExplain.js +25 -2
  255. package/dist/esm/trace-toolpack/selfExplain.js.map +1 -1
  256. package/dist/hosting/envelope.js +5 -0
  257. package/dist/hosting/envelope.js.map +1 -1
  258. package/dist/hosting/httpHost.js +5 -78
  259. package/dist/hosting/httpHost.js.map +1 -1
  260. package/dist/hosting/index.js +9 -3
  261. package/dist/hosting/index.js.map +1 -1
  262. package/dist/hosting/pendingAsk.js +42 -0
  263. package/dist/hosting/pendingAsk.js.map +1 -0
  264. package/dist/hosting/protocolAdapter.js +24 -0
  265. package/dist/hosting/protocolAdapter.js.map +1 -0
  266. package/dist/hosting/refusalStatus.js +84 -0
  267. package/dist/hosting/refusalStatus.js.map +1 -0
  268. package/dist/hosting/standingAgent.js +2 -32
  269. package/dist/hosting/standingAgent.js.map +1 -1
  270. package/dist/hosting/stream.js +35 -3
  271. package/dist/hosting/stream.js.map +1 -1
  272. package/dist/hosting/streamHandler.js +497 -0
  273. package/dist/hosting/streamHandler.js.map +1 -0
  274. package/dist/hosting/types.js.map +1 -1
  275. package/dist/hosting/verifiedThreads.js +50 -0
  276. package/dist/hosting/verifiedThreads.js.map +1 -0
  277. package/dist/index.js +9 -3
  278. package/dist/index.js.map +1 -1
  279. package/dist/lib/humanizeLLMError.js +23 -8
  280. package/dist/lib/humanizeLLMError.js.map +1 -1
  281. package/dist/mcp/throttleRetry.js +41 -6
  282. package/dist/mcp/throttleRetry.js.map +1 -1
  283. package/dist/memory/define.js +45 -1
  284. package/dist/memory/define.js.map +1 -1
  285. package/dist/memory/define.types.js.map +1 -1
  286. package/dist/memory/stages/formatDefault.js +3 -1
  287. package/dist/memory/stages/formatDefault.js.map +1 -1
  288. package/dist/memory/store/InMemoryStore.js +12 -3
  289. package/dist/memory/store/InMemoryStore.js.map +1 -1
  290. package/dist/memory/store/index.js +11 -1
  291. package/dist/memory/store/index.js.map +1 -1
  292. package/dist/memory/store/writeOptions.js +250 -0
  293. package/dist/memory/store/writeOptions.js.map +1 -0
  294. package/dist/memory-providers.js +4 -1
  295. package/dist/memory-providers.js.map +1 -1
  296. package/dist/patterns/MapReduce.js +8 -2
  297. package/dist/patterns/MapReduce.js.map +1 -1
  298. package/dist/tool-providers/index.js +10 -1
  299. package/dist/tool-providers/index.js.map +1 -1
  300. package/dist/trace-toolpack/selfExplain.js +25 -2
  301. package/dist/trace-toolpack/selfExplain.js.map +1 -1
  302. package/dist/types/adapters/mcp/agentcoreRuntime/errorType.d.ts +13 -0
  303. package/dist/types/adapters/mcp/agentcoreRuntime/errorType.d.ts.map +1 -0
  304. package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts +117 -0
  305. package/dist/types/adapters/mcp/agentcoreRuntime/invoke.d.ts.map +1 -0
  306. package/dist/types/adapters/mcp/agentcoreRuntime/safeAnswer.d.ts +50 -0
  307. package/dist/types/adapters/mcp/agentcoreRuntime/safeAnswer.d.ts.map +1 -0
  308. package/dist/types/adapters/mcp/agentcoreRuntime/session.d.ts +81 -0
  309. package/dist/types/adapters/mcp/agentcoreRuntime/session.d.ts.map +1 -0
  310. package/dist/types/adapters/mcp/agentcoreRuntime/sessionBusy.d.ts +62 -0
  311. package/dist/types/adapters/mcp/agentcoreRuntime/sessionBusy.d.ts.map +1 -0
  312. package/dist/types/adapters/mcp/agentcoreRuntime/strictJson.d.ts +38 -0
  313. package/dist/types/adapters/mcp/agentcoreRuntime/strictJson.d.ts.map +1 -0
  314. package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts +177 -0
  315. package/dist/types/adapters/mcp/agentcoreRuntime/transport.d.ts.map +1 -0
  316. package/dist/types/adapters/memory/agentcore.d.ts +152 -7
  317. package/dist/types/adapters/memory/agentcore.d.ts.map +1 -1
  318. package/dist/types/adapters/memory/memoryBank.d.ts +3 -2
  319. package/dist/types/adapters/memory/memoryBank.d.ts.map +1 -1
  320. package/dist/types/adapters/memory/pgVector.d.ts.map +1 -1
  321. package/dist/types/adapters/memory/redis.d.ts +8 -3
  322. package/dist/types/adapters/memory/redis.d.ts.map +1 -1
  323. package/dist/types/adapters/memory/s3Vectors.d.ts.map +1 -1
  324. package/dist/types/adapters/memory/sqliteVector.d.ts.map +1 -1
  325. package/dist/types/ag-ui/adapter.d.ts +69 -0
  326. package/dist/types/ag-ui/adapter.d.ts.map +1 -0
  327. package/dist/types/ag-ui/framing.d.ts +52 -0
  328. package/dist/types/ag-ui/framing.d.ts.map +1 -0
  329. package/dist/types/ag-ui/frontendTools.d.ts +38 -0
  330. package/dist/types/ag-ui/frontendTools.d.ts.map +1 -0
  331. package/dist/types/ag-ui/ids.d.ts +44 -0
  332. package/dist/types/ag-ui/ids.d.ts.map +1 -0
  333. package/dist/types/ag-ui/index.d.ts +18 -0
  334. package/dist/types/ag-ui/index.d.ts.map +1 -0
  335. package/dist/types/ag-ui/request.d.ts +73 -0
  336. package/dist/types/ag-ui/request.d.ts.map +1 -0
  337. package/dist/types/ag-ui/serializer.d.ts +174 -0
  338. package/dist/types/ag-ui/serializer.d.ts.map +1 -0
  339. package/dist/types/ag-ui/types.d.ts +306 -0
  340. package/dist/types/ag-ui/types.d.ts.map +1 -0
  341. package/dist/types/core/Agent.d.ts +2 -0
  342. package/dist/types/core/Agent.d.ts.map +1 -1
  343. package/dist/types/core/RunnerBase.d.ts.map +1 -1
  344. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  345. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  346. package/dist/types/core/agent/callerIdentity.d.ts.map +1 -1
  347. package/dist/types/core/agent/stages/routeTurn.d.ts +1 -1
  348. package/dist/types/core/agent/stages/routeTurn.d.ts.map +1 -1
  349. package/dist/types/core/agent/stages/seed.d.ts +11 -1
  350. package/dist/types/core/agent/stages/seed.d.ts.map +1 -1
  351. package/dist/types/core/agent/stages/toolCalls.d.ts +11 -1
  352. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  353. package/dist/types/core/agent/types.d.ts +16 -6
  354. package/dist/types/core/agent/types.d.ts.map +1 -1
  355. package/dist/types/core/memberRun.d.ts +133 -0
  356. package/dist/types/core/memberRun.d.ts.map +1 -0
  357. package/dist/types/core/slots/buildToolsSlot.d.ts +1 -1
  358. package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
  359. package/dist/types/core-flow/Conditional.d.ts +8 -0
  360. package/dist/types/core-flow/Conditional.d.ts.map +1 -1
  361. package/dist/types/core-flow/Graph.d.ts.map +1 -1
  362. package/dist/types/core-flow/Loop.d.ts +8 -0
  363. package/dist/types/core-flow/Loop.d.ts.map +1 -1
  364. package/dist/types/core-flow/Parallel.d.ts +8 -0
  365. package/dist/types/core-flow/Parallel.d.ts.map +1 -1
  366. package/dist/types/core-flow/Sequence.d.ts +8 -0
  367. package/dist/types/core-flow/Sequence.d.ts.map +1 -1
  368. package/dist/types/core-flow/Workflow.d.ts.map +1 -1
  369. package/dist/types/doors/ag-ui.d.ts +20 -0
  370. package/dist/types/doors/ag-ui.d.ts.map +1 -0
  371. package/dist/types/hosting/httpHost.d.ts.map +1 -1
  372. package/dist/types/hosting/index.d.ts +4 -1
  373. package/dist/types/hosting/index.d.ts.map +1 -1
  374. package/dist/types/hosting/pendingAsk.d.ts +20 -0
  375. package/dist/types/hosting/pendingAsk.d.ts.map +1 -0
  376. package/dist/types/hosting/protocolAdapter.d.ts +230 -0
  377. package/dist/types/hosting/protocolAdapter.d.ts.map +1 -0
  378. package/dist/types/hosting/refusalStatus.d.ts +31 -0
  379. package/dist/types/hosting/refusalStatus.d.ts.map +1 -0
  380. package/dist/types/hosting/standingAgent.d.ts.map +1 -1
  381. package/dist/types/hosting/stream.d.ts +39 -0
  382. package/dist/types/hosting/stream.d.ts.map +1 -1
  383. package/dist/types/hosting/streamHandler.d.ts +135 -0
  384. package/dist/types/hosting/streamHandler.d.ts.map +1 -0
  385. package/dist/types/hosting/types.d.ts +15 -0
  386. package/dist/types/hosting/types.d.ts.map +1 -1
  387. package/dist/types/hosting/verifiedThreads.d.ts +30 -0
  388. package/dist/types/hosting/verifiedThreads.d.ts.map +1 -0
  389. package/dist/types/index.d.ts +1 -0
  390. package/dist/types/index.d.ts.map +1 -1
  391. package/dist/types/lib/humanizeLLMError.d.ts +15 -0
  392. package/dist/types/lib/humanizeLLMError.d.ts.map +1 -1
  393. package/dist/types/mcp/throttleRetry.d.ts +51 -0
  394. package/dist/types/mcp/throttleRetry.d.ts.map +1 -1
  395. package/dist/types/memory/define.d.ts.map +1 -1
  396. package/dist/types/memory/define.types.d.ts +24 -0
  397. package/dist/types/memory/define.types.d.ts.map +1 -1
  398. package/dist/types/memory/stages/formatDefault.d.ts.map +1 -1
  399. package/dist/types/memory/store/InMemoryStore.d.ts +8 -3
  400. package/dist/types/memory/store/InMemoryStore.d.ts.map +1 -1
  401. package/dist/types/memory/store/index.d.ts +1 -0
  402. package/dist/types/memory/store/index.d.ts.map +1 -1
  403. package/dist/types/memory/store/types.d.ts +38 -4
  404. package/dist/types/memory/store/types.d.ts.map +1 -1
  405. package/dist/types/memory/store/writeOptions.d.ts +119 -0
  406. package/dist/types/memory/store/writeOptions.d.ts.map +1 -0
  407. package/dist/types/memory-providers.d.ts +1 -1
  408. package/dist/types/memory-providers.d.ts.map +1 -1
  409. package/dist/types/patterns/MapReduce.d.ts.map +1 -1
  410. package/dist/types/tool-providers/index.d.ts +5 -0
  411. package/dist/types/tool-providers/index.d.ts.map +1 -1
  412. package/dist/types/trace-toolpack/selfExplain.d.ts +8 -0
  413. package/dist/types/trace-toolpack/selfExplain.d.ts.map +1 -1
  414. package/package.json +25 -1
@@ -0,0 +1,493 @@
1
+ /**
2
+ * streamHandler — one run per request, streamed in a wire protocol, as a
3
+ * framework-agnostic Fetch-API handler: `(request: Request) => Promise<Response>`.
4
+ *
5
+ * Pattern: Template method over a {@link ProtocolAdapter} (the protocol is a
6
+ * strategy; AG-UI is one). Everything HTTP happens here once — the
7
+ * door guard, the body ceiling, the JSON parse, binding the
8
+ * conversation to its caller, keeping it between requests, the client
9
+ * hanging up, a failure that is never the process's — so an adapter
10
+ * only reads its request, plans the turn and translates.
11
+ * Role: the host for a protocol whose response is a STREAM OF EVENTS rather
12
+ * than text pieces (`httpHost`'s port). It mounts in anything that
13
+ * speaks `Request`/`Response` — a framework's route handler, an edge
14
+ * or serverless runtime, or Node through any fetch adapter.
15
+ * Deliberately names no vendor, like every file in this folder.
16
+ *
17
+ * THE REQUEST IS UNTRUSTED. A body is what anybody could send. It decides
18
+ * nothing the server owns:
19
+ * - WHO is calling and WHICH conversation is theirs come from the app's
20
+ * {@link ThreadBinder} (`threads`), from the request's headers — the id a
21
+ * request names is format-checked caller data and never a key;
22
+ * - WHAT WAS SAID BEFORE comes from the server: the session store
23
+ * (`sessions`), or the agent's own memory keyed by the bound session;
24
+ * - WHAT A PAUSED RUN WAITS ON is the stored run's own record — an answer is
25
+ * matched to it by the adapter, never taken on the request's word;
26
+ * - identity, credentials and redaction settings never come from a request.
27
+ *
28
+ * NOTHING IS SHARED BETWEEN REQUESTS. Every request builds a FRESH runner
29
+ * (`agent`, a factory): footprintjs runs one executor per run and a runner
30
+ * holds one run's context, so a request can neither see another's events nor
31
+ * leave anything behind for one — no shared listener, recorder, buffer or tool
32
+ * session. A factory that hands back a runner it handed back before is refused.
33
+ * The handler's own state is KEYS, never content: the bound conversations
34
+ * with a turn in flight and who holds each (a second turn on one conversation
35
+ * is refused rather than racing the first for the stored state), and the
36
+ * runners already used (by identity, held weakly).
37
+ *
38
+ * ONE TURN PER THREAD IS A PER-PROCESS GUARD. Two instances of the handler
39
+ * (several serverless instances, several workers) do not see each other's
40
+ * turns: route a thread to one instance (sticky sessions), or a double-sent
41
+ * answer can resume one paused run twice and a later persist can overwrite an
42
+ * earlier one. The session store port has no compare-and-set yet.
43
+ *
44
+ * The laws it keeps from `httpHost`:
45
+ * - The door guard runs first, on the headers alone (`doorGuard.ts`): a Host
46
+ * not configured (421), a browser origin not allowed (403), a POST that
47
+ * does not say it is JSON (415). A refused body is never read.
48
+ * - A body over `maxBodyBytes` is refused at the byte that crosses it (413).
49
+ * - A refusal answers with its own status and code (`refusalStatus.ts`);
50
+ * anything else is a 500 that names nothing the caller sent and no thrown
51
+ * message.
52
+ * - Nothing in a request's lifecycle is the process's failure: every step is
53
+ * caught, and a stream always ends.
54
+ */
55
+ import { CONSUMER_SCOPE_RUN_ID, eventBelongsToRun } from '../bridge/eventMeta.js';
56
+ import { isPaused } from '../core/pause.js';
57
+ import { toWireJson } from '../lib/wireJson.js';
58
+ import { checkSessionId, doorGuard } from './doorGuard.js';
59
+ import { envelopeOwner, readEnvelope, readPausedRun, toEnvelope, toPausedEnvelope, } from './envelope.js';
60
+ import { RequestTooLargeError, WireRequestRefusal } from './errors.js';
61
+ import { describePause } from './pendingAsk.js';
62
+ import { REFUSAL_STATUS } from './refusalStatus.js';
63
+ /** The default body ceiling — 1 MiB, the same as `nodeHost`. */
64
+ export const DEFAULT_STREAM_MAX_BODY_BYTES = 1_048_576;
65
+ /** The default keep-alive interval: an SSE comment every 15 s of silence. */
66
+ export const DEFAULT_STREAM_HEARTBEAT_MS = 15_000;
67
+ /**
68
+ * Serve runs in `adapter`'s protocol: POST a protocol request, read a stream
69
+ * of the protocol's events.
70
+ *
71
+ * @throws TypeError at construction for options that cannot be served, and
72
+ * when the adapter's framing cannot be built (an optional peer missing) —
73
+ * refused at boot, never mid-request.
74
+ *
75
+ * @example A route handler that speaks `Request`/`Response`
76
+ * ```ts
77
+ * import { memorySessions, streamHandler } from 'agentfootprint/hosting';
78
+ * import { agUi } from 'agentfootprint/ag-ui';
79
+ *
80
+ * export const POST = streamHandler({
81
+ * agent: ({ tools }) => buildAgent(tools), // a fresh agent per request
82
+ * adapter: agUi(),
83
+ * threads: { bind: ({ conversation, headers }) => bindToUser(conversation, headers) },
84
+ * sessions: memorySessions(),
85
+ * });
86
+ * ```
87
+ */
88
+ export function streamHandler(options) {
89
+ const { adapter, threads, sessions } = options;
90
+ const name = options.name ?? `${adapter.name} stream`;
91
+ if (typeof options.agent !== 'function') {
92
+ throw new TypeError(`[hosting] '${name}': agent must be a function that builds a FRESH runner for every ` +
93
+ `request — a runner holds one run's context, and one shared between requests would ` +
94
+ `hand one caller's run to another.`);
95
+ }
96
+ if (sessions !== undefined && threads === undefined) {
97
+ throw new TypeError(`[hosting] '${name}': sessions needs threads. A conversation is kept under the key the ` +
98
+ `app binds to its caller (threads.bind), never under the id a request names.`);
99
+ }
100
+ const limit = positive(options.maxBodyBytes, DEFAULT_STREAM_MAX_BODY_BYTES, 'maxBodyBytes', name);
101
+ const heartbeatMs = options.heartbeatMs ?? DEFAULT_STREAM_HEARTBEAT_MS;
102
+ if (!Number.isFinite(heartbeatMs) || heartbeatMs < 0) {
103
+ throw new TypeError(`[hosting] '${name}': heartbeatMs must be 0 (off) or a positive number.`);
104
+ }
105
+ const guard = doorGuard({ ...options, name });
106
+ const framing = adapter.framing();
107
+ const bytes = new TextEncoder();
108
+ /**
109
+ * Bound conversations with a turn in flight — the key, and who holds it (so
110
+ * anybody else hears "not found", never "busy").
111
+ */
112
+ const inFlight = new Map();
113
+ /** Runners already used, by identity — so a factory that shares one is caught. */
114
+ const used = new WeakSet();
115
+ /** One answer for "none", "another's" and "nobody's" — a caller learns no ids. */
116
+ const notFound = () => new WireRequestRefusal('ERR_SESSION_NOT_FOUND', `'${name}': that conversation is not one you can open.`, 404);
117
+ /** Bind the conversation the request names to its caller — the app's port decides. */
118
+ async function bind(request, headers) {
119
+ if (threads === undefined)
120
+ return undefined;
121
+ const thread = await threads.bind({ conversation: adapter.conversation(request), headers });
122
+ if (thread === null || typeof thread !== 'object' || typeof thread.sessionId !== 'string') {
123
+ throw new TypeError('threads.bind returned no session');
124
+ }
125
+ const bad = checkSessionId(thread.sessionId, name);
126
+ if (bad !== undefined)
127
+ throw bad;
128
+ return thread;
129
+ }
130
+ /**
131
+ * The stored conversation, when it is the caller's — refusing one that is not.
132
+ * Asked BEFORE anything about the conversation's activity, so a caller it is
133
+ * not learns "not found" and never "busy" — and never holds its turn.
134
+ */
135
+ async function ownersOnly(thread) {
136
+ if (sessions === undefined || thread === undefined)
137
+ return undefined;
138
+ await sessions.onWake?.(thread.sessionId, 'invoke');
139
+ const stored = await sessions.hydrate(thread.sessionId);
140
+ // Whose conversation this is, before a line of it is read. One answer for
141
+ // "none", "another's" and "nobody's", so a caller learns no ids.
142
+ if (stored !== undefined && envelopeOwner(stored) !== thread.identity?.principal)
143
+ throw notFound();
144
+ return stored;
145
+ }
146
+ /** Read what the server holds for the bound conversation — under the turn's claim. */
147
+ async function hold(thread) {
148
+ const stored = await ownersOnly(thread);
149
+ if (stored === undefined)
150
+ return { view: { continues: false } };
151
+ if (stored.format === 'flowchart-v1') {
152
+ const paused = readPausedRun(stored);
153
+ const record = paused.wire?.protocol === adapter.name ? paused.wire.record : undefined;
154
+ return {
155
+ paused,
156
+ view: {
157
+ continues: false,
158
+ awaiting: {
159
+ pending: paused.pending,
160
+ ...(record !== undefined && { suspension: record }),
161
+ },
162
+ },
163
+ };
164
+ }
165
+ const prior = readEnvelope(stored);
166
+ return { prior, view: { continues: true } };
167
+ }
168
+ /** A fresh runner for this request — never one the factory handed out before. */
169
+ function build(context) {
170
+ const runner = options.agent(context);
171
+ if (runner === null ||
172
+ typeof runner !== 'object' ||
173
+ typeof runner.on !== 'function' ||
174
+ typeof runner.run !== 'function') {
175
+ throw new TypeError('agent returned no runner');
176
+ }
177
+ if (used.has(runner)) {
178
+ throw new WireRequestRefusal('ERR_RUNNER_REUSED', `'${name}': the agent factory returned a runner it returned before. Every ` +
179
+ `request needs a FRESH runner — a shared one hands one caller's run to another.`, 500);
180
+ }
181
+ used.add(runner);
182
+ return runner;
183
+ }
184
+ /** Keep what the run left behind, then say how it ended — kept FIRST, told after. */
185
+ async function keep(turn, out, recordRunId) {
186
+ const { thread, runner, held, translation } = turn;
187
+ const store = thread === undefined ? undefined : sessions;
188
+ if (isPaused(out)) {
189
+ const awaiting = adapter.awaitsCaller?.(out.pauseData) === true ? 'caller' : 'person';
190
+ if (store !== undefined && thread !== undefined) {
191
+ const record = translation.suspension?.(awaiting);
192
+ const conversation = runner.checkpoint?.() ?? noConversation(turn, recordRunId, thread.identity);
193
+ await store.persist(thread.sessionId, toPausedEnvelope({
194
+ checkpoint: out.checkpoint,
195
+ conversation,
196
+ pending: describePause(out, thread.sessionId),
197
+ ...(record !== undefined && { wire: { protocol: adapter.name, record } }),
198
+ }));
199
+ }
200
+ return { kind: 'paused', awaiting };
201
+ }
202
+ if (store !== undefined && thread !== undefined) {
203
+ const conversation = runner.checkpoint?.();
204
+ if (conversation !== undefined)
205
+ await store.persist(thread.sessionId, toEnvelope(conversation));
206
+ // A runner that keeps no conversation still clears the pause it continued.
207
+ else if (held.paused !== undefined)
208
+ await store.persist(thread.sessionId, toEnvelope(noConversation(turn, recordRunId, thread.identity)));
209
+ }
210
+ return { kind: 'finished' };
211
+ }
212
+ /** Run the turn; every event the run serves goes through the translation; settle once. */
213
+ async function serve(turn, write, signal, release) {
214
+ const { plan, held, thread, runner, translation } = turn;
215
+ // A translation that throws is a fault in the adapter, never the run's: the
216
+ // run goes on, and the stream still ends.
217
+ const safely = (produce) => {
218
+ try {
219
+ write(produce());
220
+ }
221
+ catch {
222
+ // nothing more this request can be told
223
+ }
224
+ };
225
+ let runId;
226
+ let off;
227
+ let settlement;
228
+ try {
229
+ // The runner is this request's alone; the run filter still holds a fact a
230
+ // shared resource stamped for another run or session out of the stream.
231
+ off = runner.on('*', (event) => {
232
+ const named = event.meta?.runId;
233
+ if (runId === undefined && typeof named === 'string' && named !== CONSUMER_SCOPE_RUN_ID)
234
+ runId = named;
235
+ if (!eventBelongsToRun(event.meta, { runId: runId ?? '', sessionId: thread?.sessionId }))
236
+ return;
237
+ safely(() => translation.event(event));
238
+ });
239
+ if (signal.aborted)
240
+ throw new Error('the caller left before the run started');
241
+ const runOptions = {
242
+ signal,
243
+ ...(thread !== undefined && { sessionId: thread.sessionId }),
244
+ ...(thread?.identity !== undefined && { identity: thread.identity }),
245
+ };
246
+ const out = plan.turn.kind === 'answer'
247
+ ? await runner.resume(held.paused.checkpoint, plan.turn.answer, runOptions)
248
+ : await runner.run((typeof runner.checkpoint === 'function' && held.prior !== undefined
249
+ ? { message: plan.turn.message, continueFrom: held.prior }
250
+ : { message: plan.turn.message }), runOptions);
251
+ settlement = await keep(turn, out, runId);
252
+ }
253
+ catch {
254
+ settlement = { kind: signal.aborted ? 'cancelled' : 'failed' };
255
+ }
256
+ finally {
257
+ // The conversation is free BEFORE the caller hears the end — and before
258
+ // anything else that could throw: a client that answers on RUN_FINISHED
259
+ // must not find its own turn still running, ever.
260
+ release();
261
+ try {
262
+ if (typeof off === 'function')
263
+ off();
264
+ }
265
+ catch {
266
+ // a runner that cannot unsubscribe is thrown away with this request
267
+ }
268
+ }
269
+ safely(() => translation.settle(settlement));
270
+ // Tool sessions this request's runner opened close with it; a strategy the
271
+ // app shares between runners is drained, never stopped.
272
+ void runner.shutdown?.({ stop: false })?.catch(() => undefined);
273
+ }
274
+ function respond(turn, request, release) {
275
+ const abort = new AbortController();
276
+ const hangUp = () => abort.abort();
277
+ // A caller already gone never starts its run.
278
+ if (request.signal?.aborted === true)
279
+ abort.abort();
280
+ else
281
+ request.signal?.addEventListener('abort', hangUp, { once: true });
282
+ let closed = false;
283
+ let heartbeat;
284
+ const stop = () => {
285
+ closed = true;
286
+ if (heartbeat !== undefined)
287
+ clearInterval(heartbeat);
288
+ request.signal?.removeEventListener('abort', hangUp);
289
+ };
290
+ const body = new ReadableStream({
291
+ start(controller) {
292
+ const send = (text) => {
293
+ if (closed)
294
+ return;
295
+ try {
296
+ controller.enqueue(bytes.encode(text));
297
+ }
298
+ catch {
299
+ stop(); // the stream went away under us
300
+ }
301
+ };
302
+ const write = (events) => {
303
+ for (const event of events)
304
+ send(framing.frame(event));
305
+ };
306
+ if (heartbeatMs > 0) {
307
+ heartbeat = setInterval(() => send(': ping\n\n'), heartbeatMs);
308
+ heartbeat.unref?.();
309
+ }
310
+ const end = () => {
311
+ if (closed)
312
+ return;
313
+ stop();
314
+ try {
315
+ controller.close();
316
+ }
317
+ catch {
318
+ // already closed by the reader
319
+ }
320
+ };
321
+ void serve(turn, write, abort.signal, release).then(end, end);
322
+ },
323
+ cancel() {
324
+ stop();
325
+ abort.abort();
326
+ },
327
+ });
328
+ return new Response(body, {
329
+ status: 200,
330
+ headers: {
331
+ 'content-type': framing.contentType,
332
+ 'cache-control': 'no-cache, no-transform',
333
+ 'x-accel-buffering': 'no',
334
+ },
335
+ });
336
+ }
337
+ return async (request) => {
338
+ /** The conversation this request holds while it is in flight — released exactly once. */
339
+ let claimed;
340
+ const release = () => {
341
+ if (claimed !== undefined)
342
+ inFlight.delete(claimed);
343
+ claimed = undefined;
344
+ };
345
+ try {
346
+ if (request.method !== 'POST') {
347
+ return refusal(405, `[hosting] '${name}' answers POST only.`, 'ERR_METHOD_NOT_ALLOWED', {
348
+ allow: 'POST',
349
+ });
350
+ }
351
+ const headers = headersOf(request);
352
+ const refused = guard.check({ method: request.method, headers });
353
+ if (refused !== undefined)
354
+ return refusal(refused.status, refused.message, refused.code);
355
+ const text = await readBody(request, limit, name);
356
+ let body;
357
+ try {
358
+ body = text.trim() === '' ? {} : JSON.parse(text);
359
+ }
360
+ catch {
361
+ return refusal(400, `[hosting] '${name}': the request body is not JSON.`, 'ERR_INVALID_JSON');
362
+ }
363
+ const read = adapter.readRequest({ body, headers });
364
+ const thread = await bind(read, headers);
365
+ if (thread !== undefined) {
366
+ // Ownership first: a caller the conversation is not answered "not
367
+ // found" whether or not a turn is running, and never claims it.
368
+ await ownersOnly(thread);
369
+ const principal = thread.identity?.principal;
370
+ if (inFlight.has(thread.sessionId)) {
371
+ // Even before a first turn has stored anything: the claimant is the owner.
372
+ if (inFlight.get(thread.sessionId) !== principal)
373
+ throw notFound();
374
+ return refusal(409, `[hosting] '${name}': a turn of that conversation is already in flight. Send the ` +
375
+ `next turn when it ends.`, 'ERR_CONCURRENT_RUN');
376
+ }
377
+ inFlight.set(thread.sessionId, principal);
378
+ claimed = thread.sessionId;
379
+ }
380
+ const held = await hold(thread);
381
+ const plan = adapter.plan(read, held.view, {
382
+ headers,
383
+ ...(thread !== undefined && { thread }),
384
+ keepsConversation: threads !== undefined,
385
+ keepsPauses: threads !== undefined && sessions !== undefined,
386
+ });
387
+ const runner = build({
388
+ tools: plan.tools ?? [],
389
+ accepted: plan.accepted ?? {},
390
+ ...(thread !== undefined && { thread }),
391
+ });
392
+ const translation = adapter.open(read, plan.turn.kind === 'answer' ? held.view.awaiting?.suspension : undefined);
393
+ // The stream owns the claim from here: released when the run ends.
394
+ const owned = claimed;
395
+ claimed = undefined;
396
+ return respond({ plan, held, ...(thread !== undefined && { thread }), runner, translation }, request, () => {
397
+ if (owned !== undefined)
398
+ inFlight.delete(owned);
399
+ });
400
+ }
401
+ catch (err) {
402
+ return failure(err, name);
403
+ }
404
+ finally {
405
+ release();
406
+ }
407
+ };
408
+ }
409
+ /**
410
+ * A conversation record for a runner that keeps none (an `LLMCall`, a
411
+ * composition): no history, only what a stored session needs — the run, the
412
+ * message, and whose it is.
413
+ */
414
+ function noConversation(turn, recordRunId, identity) {
415
+ const message = turn.plan.turn.kind === 'message'
416
+ ? turn.plan.turn.message
417
+ : turn.held.paused?.conversation.originalInput.message ?? '';
418
+ return {
419
+ version: 1,
420
+ runId: recordRunId ?? 'unknown',
421
+ history: [],
422
+ lastCompletedIteration: 0,
423
+ originalInput: { message },
424
+ checkpointedAt: Date.now(),
425
+ ...(identity !== undefined && { identity }),
426
+ };
427
+ }
428
+ /** The refusal an error means — its own status and code, or a 500 that quotes nothing. */
429
+ function failure(err, name) {
430
+ if (err instanceof RequestTooLargeError)
431
+ return refusal(413, err.message, err.code);
432
+ if (err instanceof WireRequestRefusal)
433
+ return refusal(err.status, err.message, err.code);
434
+ const code = err?.code;
435
+ if (err instanceof Error && typeof code === 'string' && REFUSAL_STATUS[code] !== undefined) {
436
+ return refusal(REFUSAL_STATUS[code], err.message, code);
437
+ }
438
+ // Never the thrown message: it is the author's note to their own logs.
439
+ return refusal(500, `[hosting] '${name}' could not serve the request.`, 'ERR_INTERNAL');
440
+ }
441
+ /** A JSON refusal: `{ error, code }` under the refusal's own status. */
442
+ function refusal(status, message, code, headers = {}) {
443
+ return new Response(toWireJson({ error: message, code }), {
444
+ status,
445
+ headers: { 'content-type': 'application/json', ...headers },
446
+ });
447
+ }
448
+ /** The request's headers, names lower-cased (the door guard's and an adapter's view). */
449
+ function headersOf(request) {
450
+ const out = {};
451
+ request.headers.forEach((value, key) => {
452
+ out[key.toLowerCase()] = value;
453
+ });
454
+ return out;
455
+ }
456
+ /** The body as text, refused at the byte that crosses `limit`. */
457
+ async function readBody(request, limit, name) {
458
+ const declared = Number(request.headers.get('content-length'));
459
+ if (Number.isFinite(declared) && declared > limit)
460
+ throw new RequestTooLargeError(limit, name);
461
+ if (request.body === null)
462
+ return '';
463
+ const reader = request.body.getReader();
464
+ const chunks = [];
465
+ let size = 0;
466
+ for (;;) {
467
+ const { done, value } = await reader.read();
468
+ if (done)
469
+ break;
470
+ size += value.byteLength;
471
+ if (size > limit) {
472
+ await reader.cancel().catch(() => undefined);
473
+ throw new RequestTooLargeError(limit, name);
474
+ }
475
+ chunks.push(value);
476
+ }
477
+ const all = new Uint8Array(size);
478
+ let at = 0;
479
+ for (const chunk of chunks) {
480
+ all.set(chunk, at);
481
+ at += chunk.byteLength;
482
+ }
483
+ return new TextDecoder().decode(all);
484
+ }
485
+ function positive(value, fallback, field, name) {
486
+ if (value === undefined)
487
+ return fallback;
488
+ if (!Number.isInteger(value) || value <= 0) {
489
+ throw new TypeError(`[hosting] '${name}': ${field} must be a positive whole number of bytes.`);
490
+ }
491
+ return value;
492
+ }
493
+ //# sourceMappingURL=streamHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamHandler.js","sourceRoot":"","sources":["../../../src/hosting/streamHandler.ts"],"names":[],"mappings":"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"}
@@ -871,6 +871,21 @@ export interface PausedRun {
871
871
  readonly conversation: AgentRunCheckpoint;
872
872
  /** What the run is waiting on, as data. */
873
873
  readonly pending: PendingAsk;
874
+ /**
875
+ * What the WIRE that served the pause recorded about it — the ids it handed
876
+ * the caller for the answer — so a later request on that wire is matched to
877
+ * this pause and continued as the same invocation (`streamHandler` keeps the
878
+ * AG-UI adapter's record here). Absent for a pause a door with nothing to
879
+ * remember stored, and opaque to the store and to every other door.
880
+ */
881
+ readonly wire?: PausedWire;
882
+ }
883
+ /** One wire protocol's own record of a pause it served — see {@link PausedRun.wire}. */
884
+ export interface PausedWire {
885
+ /** The protocol that recorded it: the protocol adapter's `name`. */
886
+ readonly protocol: string;
887
+ /** Plain JSON, the protocol's own; ids and names, never a value of the run. */
888
+ readonly record: unknown;
874
889
  }
875
890
  /**
876
891
  * The question a paused run is waiting on — the part of a pause that is safe to
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hosting/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAoxCH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AA2QxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAElD;iFACiF;AACjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/hosting/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAoyCH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AA2QxC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC;AAElD;iFACiF;AACjF,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAE/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * verifiedThreads — the {@link ThreadBinder} that binds a thread to a VERIFIED
3
+ * caller, so the secure binding is the one-line one.
4
+ *
5
+ * A request names a thread; naming one proves nothing. This binder checks the
6
+ * caller's credential with the door's own identity verification
7
+ * (`verifyRequestIdentity` — the bearer token, through your verifier), never a
8
+ * header read as a name, and keys the conversation by WHO
9
+ * plus WHICH: the same thread id from two people is two conversations. The
10
+ * run's `identity` names the verified person, so a stored conversation records
11
+ * its owner and a later request from anyone else is refused as not found.
12
+ *
13
+ * A caller with no credential is REFUSED (401), even at a door that allows
14
+ * anonymous requests elsewhere: a thread with no owner would be anybody's who
15
+ * guessed its id.
16
+ */
17
+ import { type IdentityVerificationOptions } from './identityVerification.js';
18
+ import type { ThreadBinder } from './protocolAdapter.js';
19
+ /**
20
+ * Bind every thread to the caller `identity` verifies.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { jwksIdentity } from 'agentfootprint/security';
25
+ * const threads = verifiedThreads(jwksIdentity({ jwksUrl, issuer, audience }));
26
+ * streamHandler({ agent, adapter: agUi(), threads, sessions: memorySessions() });
27
+ * ```
28
+ */
29
+ export declare function verifiedThreads(identity: IdentityVerificationOptions): ThreadBinder;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * verifiedThreads — the {@link ThreadBinder} that binds a thread to a VERIFIED
3
+ * caller, so the secure binding is the one-line one.
4
+ *
5
+ * A request names a thread; naming one proves nothing. This binder checks the
6
+ * caller's credential with the door's own identity verification
7
+ * (`verifyRequestIdentity` — the bearer token, through your verifier), never a
8
+ * header read as a name, and keys the conversation by WHO
9
+ * plus WHICH: the same thread id from two people is two conversations. The
10
+ * run's `identity` names the verified person, so a stored conversation records
11
+ * its owner and a later request from anyone else is refused as not found.
12
+ *
13
+ * A caller with no credential is REFUSED (401), even at a door that allows
14
+ * anonymous requests elsewhere: a thread with no owner would be anybody's who
15
+ * guessed its id.
16
+ */
17
+ import { IdentityNotVerifiedError } from './errors.js';
18
+ import { verifyRequestIdentity } from './identityVerification.js';
19
+ /**
20
+ * Bind every thread to the caller `identity` verifies.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * import { jwksIdentity } from 'agentfootprint/security';
25
+ * const threads = verifiedThreads(jwksIdentity({ jwksUrl, issuer, audience }));
26
+ * streamHandler({ agent, adapter: agUi(), threads, sessions: memorySessions() });
27
+ * ```
28
+ */
29
+ export function verifiedThreads(identity) {
30
+ const binder = {
31
+ async bind({ conversation, headers }) {
32
+ const who = await verifyRequestIdentity(identity, headers, undefined);
33
+ if (who === undefined)
34
+ throw new IdentityNotVerifiedError('no-token', false);
35
+ return {
36
+ // Injective, and visible ASCII whatever the name (`josé`, `John Smith`):
37
+ // both halves are percent-encoded, the separator included, so no
38
+ // (who, which) pair spells another's key.
39
+ sessionId: `${encodeURIComponent(who.userId)}/${encodeURIComponent(conversation)}`,
40
+ identity: { principal: who.userId, conversationId: conversation },
41
+ };
42
+ },
43
+ };
44
+ return Object.freeze(binder);
45
+ }
46
+ //# sourceMappingURL=verifiedThreads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifiedThreads.js","sourceRoot":"","sources":["../../../src/hosting/verifiedThreads.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAoC,MAAM,2BAA2B,CAAC;AAGpG;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,QAAqC;IACnE,MAAM,MAAM,GAAiB;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE;YAClC,MAAM,GAAG,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YACtE,IAAI,GAAG,KAAK,SAAS;gBAAE,MAAM,IAAI,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC7E,OAAO;gBACL,yEAAyE;gBACzE,iEAAiE;gBACjE,0CAA0C;gBAC1C,SAAS,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE;gBAClF,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE;aAClE,CAAC;QACJ,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -56,6 +56,7 @@ export { canResume, ConversationMismatchError, RunCheckpointError, type AgentRun
56
56
  export { browserSessionId, DEFAULT_SESSION_STORAGE_KEY, type BrowserSessionIdOptions, } from './hosting/browserSession.js';
57
57
  export { ContextWindowExceededError, ERR_CONTEXT_WINDOW_EXCEEDED, isContextWindowExceeded, } from './provider-contract/contextWindow.js';
58
58
  export { NoConversationError, type NoConversationReason, PendingQuestionError, ResumeIdentityConflictError, ResumeRedactionError, type ResumeRedactionReason, RunInFlightError, } from './core/conversation.js';
59
+ export { MemberIdentityError, ParentRunRefusedError } from './core/memberRun.js';
59
60
  export { flowchartAsTool, type FlowchartAsToolOptions, type FlowchartResultMapper, type FlowchartToolSnapshot, } from './core/flowchartAsTool.js';
60
61
  export { absenceSignalOf, DECLINED_VERDICT, DEFAULT_MAX_ROWS, DEFAULT_RECORDING_MAX_BYTES, DEFAULT_WALK_CAP, PANEL_RENDER_NOTE, probeDispatch, projectWalk, recordingDispatch, renderVerdictTable, runbookAsTool, RunbookAbsenceSignal, VERDICT_RENDER_NOTE, verdictRowsOf, type InnerCallRecord, type ProjectedWalk, type RecordedDispatch, type RunbookAsToolOptions, type RunbookEnvelope, type RunbookPresentation, type RunbookProcedure, type RunbookRecordingOptions, type RunbookRules, type RunbookVerdictsOptions, type RunbookWalkOptions, type VerdictRow, type WalkDescriptor, type WalkRow, } from './core/runbook/index.js';
61
62
  export type { Tool, ToolExecutionContext, ToolRegistryEntry, DefineToolOptions, ToolDispatch, ToolDispatchCallOptions, ToolResultCeiling, } from './tools/tools.js';
package/dist/esm/index.js CHANGED
@@ -268,6 +268,9 @@ export { ContextWindowExceededError, ERR_CONTEXT_WINDOW_EXCEEDED, isContextWindo
268
268
  // "you are already running" from "somebody is still waiting on an answer" from
269
269
  // "there is nothing to follow up on".
270
270
  export { NoConversationError, PendingQuestionError, ResumeIdentityConflictError, ResumeRedactionError, RunInFlightError, } from './core/conversation.js';
271
+ // A composition member runs for the run that mounted it; one no run reached is
272
+ // refused by name (`core/memberRun.ts`).
273
+ export { MemberIdentityError, ParentRunRefusedError } from './core/memberRun.js';
271
274
  export { flowchartAsTool, } from './core/flowchartAsTool.js';
272
275
  // runbookAsTool (9.76.0) — the STANDARD bridge from a footprintjs procedure
273
276
  // to an Agent tool: every answer is the mandatory honesty spine (coverage