agentfootprint 9.40.0 → 9.43.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 (404) hide show
  1. package/AGENTS.md +30 -1
  2. package/CLAUDE.md +4 -1
  3. package/ai-instructions/claude-code/SKILL.md +31 -1
  4. package/dist/adapters/hosting/agentcore.js +71 -10
  5. package/dist/adapters/hosting/agentcore.js.map +1 -1
  6. package/dist/adapters/hosting/firestoreSessions.js +184 -14
  7. package/dist/adapters/hosting/firestoreSessions.js.map +1 -1
  8. package/dist/adapters/hosting/googleAgentEngine.js +29 -0
  9. package/dist/adapters/hosting/googleAgentEngine.js.map +1 -1
  10. package/dist/adapters/memory/agentcore.js +3 -1
  11. package/dist/adapters/memory/agentcore.js.map +1 -1
  12. package/dist/artifacts/conformance/cases.js +840 -0
  13. package/dist/artifacts/conformance/cases.js.map +1 -0
  14. package/dist/artifacts/conformance/index.js +18 -0
  15. package/dist/artifacts/conformance/index.js.map +1 -0
  16. package/dist/artifacts/conformance/run.js +223 -0
  17. package/dist/artifacts/conformance/run.js.map +1 -0
  18. package/dist/artifacts/conformance/types.js +11 -0
  19. package/dist/artifacts/conformance/types.js.map +1 -0
  20. package/dist/artifacts/index.js +10 -1
  21. package/dist/artifacts/index.js.map +1 -1
  22. package/dist/core/Agent.js +100 -1
  23. package/dist/core/Agent.js.map +1 -1
  24. package/dist/core/agent/AgentBuilder.js +56 -1
  25. package/dist/core/agent/AgentBuilder.js.map +1 -1
  26. package/dist/core/agent/buildAgentChart.js +5 -1
  27. package/dist/core/agent/buildAgentChart.js.map +1 -1
  28. package/dist/core/agent/buildDynamicAgentChart.js +5 -1
  29. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  30. package/dist/core/agent/coverage/absent.js +163 -0
  31. package/dist/core/agent/coverage/absent.js.map +1 -0
  32. package/dist/core/agent/coverage/answer.js +90 -0
  33. package/dist/core/agent/coverage/answer.js.map +1 -0
  34. package/dist/core/agent/coverage/evidence.js +90 -0
  35. package/dist/core/agent/coverage/evidence.js.map +1 -0
  36. package/dist/core/agent/coverage/index.js +37 -0
  37. package/dist/core/agent/coverage/index.js.map +1 -0
  38. package/dist/core/agent/coverage/items.js +91 -0
  39. package/dist/core/agent/coverage/items.js.map +1 -0
  40. package/dist/core/agent/coverage/ledger.js +131 -0
  41. package/dist/core/agent/coverage/ledger.js.map +1 -0
  42. package/dist/core/agent/coverage/read.js +56 -0
  43. package/dist/core/agent/coverage/read.js.map +1 -0
  44. package/dist/core/agent/coverage/types.js +15 -0
  45. package/dist/core/agent/coverage/types.js.map +1 -0
  46. package/dist/core/agent/evidence/evidenceIndex.js +18 -1
  47. package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
  48. package/dist/core/agent/runManifest.js +102 -0
  49. package/dist/core/agent/runManifest.js.map +1 -0
  50. package/dist/core/agent/stages/prepareFinal.js +44 -3
  51. package/dist/core/agent/stages/prepareFinal.js.map +1 -1
  52. package/dist/core/agent/stages/toolCalls.js +109 -3
  53. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  54. package/dist/core/agent/toolEffects.js +1 -1
  55. package/dist/debug.js +49 -25
  56. package/dist/debug.js.map +1 -1
  57. package/dist/esm/adapters/hosting/agentcore.d.ts +8 -0
  58. package/dist/esm/adapters/hosting/agentcore.js +71 -10
  59. package/dist/esm/adapters/hosting/agentcore.js.map +1 -1
  60. package/dist/esm/adapters/hosting/firestoreSessions.d.ts +162 -14
  61. package/dist/esm/adapters/hosting/firestoreSessions.js +182 -13
  62. package/dist/esm/adapters/hosting/firestoreSessions.js.map +1 -1
  63. package/dist/esm/adapters/hosting/googleAgentEngine.d.ts +16 -1
  64. package/dist/esm/adapters/hosting/googleAgentEngine.js +29 -0
  65. package/dist/esm/adapters/hosting/googleAgentEngine.js.map +1 -1
  66. package/dist/esm/adapters/memory/agentcore.js +3 -1
  67. package/dist/esm/adapters/memory/agentcore.js.map +1 -1
  68. package/dist/esm/artifacts/conformance/cases.d.ts +23 -0
  69. package/dist/esm/artifacts/conformance/cases.js +837 -0
  70. package/dist/esm/artifacts/conformance/cases.js.map +1 -0
  71. package/dist/esm/artifacts/conformance/index.d.ts +11 -0
  72. package/dist/esm/artifacts/conformance/index.js +11 -0
  73. package/dist/esm/artifacts/conformance/index.js.map +1 -0
  74. package/dist/esm/artifacts/conformance/run.d.ts +47 -0
  75. package/dist/esm/artifacts/conformance/run.js +217 -0
  76. package/dist/esm/artifacts/conformance/run.js.map +1 -0
  77. package/dist/esm/artifacts/conformance/types.d.ts +197 -0
  78. package/dist/esm/artifacts/conformance/types.js +10 -0
  79. package/dist/esm/artifacts/conformance/types.js.map +1 -0
  80. package/dist/esm/artifacts/index.d.ts +1 -0
  81. package/dist/esm/artifacts/index.js +5 -0
  82. package/dist/esm/artifacts/index.js.map +1 -1
  83. package/dist/esm/core/Agent.d.ts +34 -1
  84. package/dist/esm/core/Agent.js +100 -1
  85. package/dist/esm/core/Agent.js.map +1 -1
  86. package/dist/esm/core/agent/AgentBuilder.d.ts +43 -0
  87. package/dist/esm/core/agent/AgentBuilder.js +56 -1
  88. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  89. package/dist/esm/core/agent/buildAgentChart.d.ts +9 -0
  90. package/dist/esm/core/agent/buildAgentChart.js +6 -2
  91. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  92. package/dist/esm/core/agent/buildDynamicAgentChart.js +6 -2
  93. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  94. package/dist/esm/core/agent/coverage/absent.d.ts +104 -0
  95. package/dist/esm/core/agent/coverage/absent.js +157 -0
  96. package/dist/esm/core/agent/coverage/absent.js.map +1 -0
  97. package/dist/esm/core/agent/coverage/answer.d.ts +46 -0
  98. package/dist/esm/core/agent/coverage/answer.js +86 -0
  99. package/dist/esm/core/agent/coverage/answer.js.map +1 -0
  100. package/dist/esm/core/agent/coverage/evidence.d.ts +68 -0
  101. package/dist/esm/core/agent/coverage/evidence.js +86 -0
  102. package/dist/esm/core/agent/coverage/evidence.js.map +1 -0
  103. package/dist/esm/core/agent/coverage/index.d.ts +17 -0
  104. package/dist/esm/core/agent/coverage/index.js +17 -0
  105. package/dist/esm/core/agent/coverage/index.js.map +1 -0
  106. package/dist/esm/core/agent/coverage/items.d.ts +35 -0
  107. package/dist/esm/core/agent/coverage/items.js +85 -0
  108. package/dist/esm/core/agent/coverage/items.js.map +1 -0
  109. package/dist/esm/core/agent/coverage/ledger.d.ts +80 -0
  110. package/dist/esm/core/agent/coverage/ledger.js +125 -0
  111. package/dist/esm/core/agent/coverage/ledger.js.map +1 -0
  112. package/dist/esm/core/agent/coverage/read.d.ts +51 -0
  113. package/dist/esm/core/agent/coverage/read.js +52 -0
  114. package/dist/esm/core/agent/coverage/read.js.map +1 -0
  115. package/dist/esm/core/agent/coverage/types.d.ts +142 -0
  116. package/dist/esm/core/agent/coverage/types.js +14 -0
  117. package/dist/esm/core/agent/coverage/types.js.map +1 -0
  118. package/dist/esm/core/agent/evidence/evidenceIndex.d.ts +7 -0
  119. package/dist/esm/core/agent/evidence/evidenceIndex.js +18 -1
  120. package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
  121. package/dist/esm/core/agent/runManifest.d.ts +80 -0
  122. package/dist/esm/core/agent/runManifest.js +98 -0
  123. package/dist/esm/core/agent/runManifest.js.map +1 -0
  124. package/dist/esm/core/agent/stages/prepareFinal.d.ts +18 -0
  125. package/dist/esm/core/agent/stages/prepareFinal.js +42 -2
  126. package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
  127. package/dist/esm/core/agent/stages/toolCalls.js +109 -3
  128. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  129. package/dist/esm/core/agent/toolEffects.d.ts +2 -2
  130. package/dist/esm/core/agent/toolEffects.js +1 -1
  131. package/dist/esm/core/agent/types.d.ts +14 -0
  132. package/dist/esm/debug.d.ts +1 -0
  133. package/dist/esm/debug.js +7 -0
  134. package/dist/esm/debug.js.map +1 -1
  135. package/dist/esm/events/payloads.d.ts +205 -0
  136. package/dist/esm/events/registry.d.ts +7 -1
  137. package/dist/esm/events/registry.js +6 -0
  138. package/dist/esm/events/registry.js.map +1 -1
  139. package/dist/esm/hosting/conformance/cases.d.ts +2 -1
  140. package/dist/esm/hosting/conformance/cases.js +88 -2
  141. package/dist/esm/hosting/conformance/cases.js.map +1 -1
  142. package/dist/esm/hosting/conformance/types.d.ts +7 -7
  143. package/dist/esm/hosting/errors.d.ts +28 -0
  144. package/dist/esm/hosting/errors.js +40 -0
  145. package/dist/esm/hosting/errors.js.map +1 -1
  146. package/dist/esm/hosting/index.d.ts +11 -3
  147. package/dist/esm/hosting/index.js +15 -2
  148. package/dist/esm/hosting/index.js.map +1 -1
  149. package/dist/esm/hosting/memorySessions.js +39 -0
  150. package/dist/esm/hosting/memorySessions.js.map +1 -1
  151. package/dist/esm/hosting/sessionRetention.d.ts +56 -0
  152. package/dist/esm/hosting/sessionRetention.js +69 -0
  153. package/dist/esm/hosting/sessionRetention.js.map +1 -0
  154. package/dist/esm/hosting/sqliteSessions.d.ts +11 -1
  155. package/dist/esm/hosting/sqliteSessions.js +51 -0
  156. package/dist/esm/hosting/sqliteSessions.js.map +1 -1
  157. package/dist/esm/hosting/types.d.ts +184 -0
  158. package/dist/esm/hosting/types.js +9 -0
  159. package/dist/esm/hosting/types.js.map +1 -1
  160. package/dist/esm/hosting-providers.d.ts +15 -11
  161. package/dist/esm/hosting-providers.js +21 -11
  162. package/dist/esm/hosting-providers.js.map +1 -1
  163. package/dist/esm/index.d.ts +2 -0
  164. package/dist/esm/index.js +25 -0
  165. package/dist/esm/index.js.map +1 -1
  166. package/dist/esm/lib/context-bisect/arms/apply.d.ts +54 -0
  167. package/dist/esm/lib/context-bisect/arms/apply.js +41 -0
  168. package/dist/esm/lib/context-bisect/arms/apply.js.map +1 -0
  169. package/dist/esm/lib/context-bisect/arms/compare.d.ts +27 -0
  170. package/dist/esm/lib/context-bisect/arms/compare.js +112 -0
  171. package/dist/esm/lib/context-bisect/arms/compare.js.map +1 -0
  172. package/dist/esm/lib/context-bisect/arms/index.d.ts +16 -0
  173. package/dist/esm/lib/context-bisect/arms/index.js +16 -0
  174. package/dist/esm/lib/context-bisect/arms/index.js.map +1 -0
  175. package/dist/esm/lib/context-bisect/arms/manifest.d.ts +79 -0
  176. package/dist/esm/lib/context-bisect/arms/manifest.js +199 -0
  177. package/dist/esm/lib/context-bisect/arms/manifest.js.map +1 -0
  178. package/dist/esm/lib/context-bisect/arms/probe.d.ts +54 -0
  179. package/dist/esm/lib/context-bisect/arms/probe.js +125 -0
  180. package/dist/esm/lib/context-bisect/arms/probe.js.map +1 -0
  181. package/dist/esm/lib/context-bisect/arms/types.d.ts +319 -0
  182. package/dist/esm/lib/context-bisect/arms/types.js +67 -0
  183. package/dist/esm/lib/context-bisect/arms/types.js.map +1 -0
  184. package/dist/esm/lib/context-bisect/arms/validate.d.ts +26 -0
  185. package/dist/esm/lib/context-bisect/arms/validate.js +122 -0
  186. package/dist/esm/lib/context-bisect/arms/validate.js.map +1 -0
  187. package/dist/esm/lib/context-bisect/arms/verdict.d.ts +53 -0
  188. package/dist/esm/lib/context-bisect/arms/verdict.js +103 -0
  189. package/dist/esm/lib/context-bisect/arms/verdict.js.map +1 -0
  190. package/dist/esm/lib/context-bisect/index.d.ts +1 -0
  191. package/dist/esm/lib/context-bisect/index.js +5 -0
  192. package/dist/esm/lib/context-bisect/index.js.map +1 -1
  193. package/dist/esm/lib/injection-engine/index.d.ts +1 -1
  194. package/dist/esm/lib/injection-engine/index.js +3 -1
  195. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  196. package/dist/esm/lib/injection-engine/skillExamples.d.ts +16 -13
  197. package/dist/esm/lib/injection-engine/skillExamples.js +16 -60
  198. package/dist/esm/lib/injection-engine/skillExamples.js.map +1 -1
  199. package/dist/esm/lib/injection-engine/skillGraph.d.ts +50 -0
  200. package/dist/esm/lib/injection-engine/skillGraph.js +52 -1
  201. package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
  202. package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +6 -5
  203. package/dist/esm/lib/injection-engine/skillGraphCheckup.js.map +1 -1
  204. package/dist/esm/lib/injection-engine/skillNeverRoutes.d.ts +131 -0
  205. package/dist/esm/lib/injection-engine/skillNeverRoutes.js +228 -0
  206. package/dist/esm/lib/injection-engine/skillNeverRoutes.js.map +1 -0
  207. package/dist/esm/lib/injection-engine/skillPartition.d.ts +69 -0
  208. package/dist/esm/lib/injection-engine/skillPartition.js +273 -0
  209. package/dist/esm/lib/injection-engine/skillPartition.js.map +1 -0
  210. package/dist/esm/lib/injection-engine/skillsFromDir.d.ts +83 -3
  211. package/dist/esm/lib/injection-engine/skillsFromDir.js +118 -7
  212. package/dist/esm/lib/injection-engine/skillsFromDir.js.map +1 -1
  213. package/dist/esm/lib/injection-engine/skillsFromDirRoutes.d.ts +105 -0
  214. package/dist/esm/lib/injection-engine/skillsFromDirRoutes.js +169 -0
  215. package/dist/esm/lib/injection-engine/skillsFromDirRoutes.js.map +1 -0
  216. package/dist/esm/lib/injection-engine/startRuleClaim.d.ts +91 -0
  217. package/dist/esm/lib/injection-engine/startRuleClaim.js +78 -0
  218. package/dist/esm/lib/injection-engine/startRuleClaim.js.map +1 -0
  219. package/dist/esm/lib/injection-engine/toolOutcome.d.ts +12 -3
  220. package/dist/esm/lib/injection-engine/toolOutcome.js +2 -1
  221. package/dist/esm/lib/injection-engine/toolOutcome.js.map +1 -1
  222. package/dist/esm/memory/define.js +12 -0
  223. package/dist/esm/memory/define.js.map +1 -1
  224. package/dist/esm/memory/define.types.d.ts +27 -0
  225. package/dist/esm/memory/define.types.js.map +1 -1
  226. package/dist/esm/strategies/attach.js.map +1 -1
  227. package/dist/events/registry.js +6 -0
  228. package/dist/events/registry.js.map +1 -1
  229. package/dist/hosting/conformance/cases.js +88 -2
  230. package/dist/hosting/conformance/cases.js.map +1 -1
  231. package/dist/hosting/errors.js +42 -1
  232. package/dist/hosting/errors.js.map +1 -1
  233. package/dist/hosting/index.js +18 -2
  234. package/dist/hosting/index.js.map +1 -1
  235. package/dist/hosting/memorySessions.js +39 -0
  236. package/dist/hosting/memorySessions.js.map +1 -1
  237. package/dist/hosting/sessionRetention.js +73 -0
  238. package/dist/hosting/sessionRetention.js.map +1 -0
  239. package/dist/hosting/sqliteSessions.js +51 -0
  240. package/dist/hosting/sqliteSessions.js.map +1 -1
  241. package/dist/hosting/types.js +10 -1
  242. package/dist/hosting/types.js.map +1 -1
  243. package/dist/hosting-providers.js +21 -11
  244. package/dist/hosting-providers.js.map +1 -1
  245. package/dist/index.js +78 -38
  246. package/dist/index.js.map +1 -1
  247. package/dist/lib/context-bisect/arms/apply.js +45 -0
  248. package/dist/lib/context-bisect/arms/apply.js.map +1 -0
  249. package/dist/lib/context-bisect/arms/compare.js +116 -0
  250. package/dist/lib/context-bisect/arms/compare.js.map +1 -0
  251. package/dist/lib/context-bisect/arms/index.js +35 -0
  252. package/dist/lib/context-bisect/arms/index.js.map +1 -0
  253. package/dist/lib/context-bisect/arms/manifest.js +207 -0
  254. package/dist/lib/context-bisect/arms/manifest.js.map +1 -0
  255. package/dist/lib/context-bisect/arms/probe.js +132 -0
  256. package/dist/lib/context-bisect/arms/probe.js.map +1 -0
  257. package/dist/lib/context-bisect/arms/types.js +68 -0
  258. package/dist/lib/context-bisect/arms/types.js.map +1 -0
  259. package/dist/lib/context-bisect/arms/validate.js +128 -0
  260. package/dist/lib/context-bisect/arms/validate.js.map +1 -0
  261. package/dist/lib/context-bisect/arms/verdict.js +107 -0
  262. package/dist/lib/context-bisect/arms/verdict.js.map +1 -0
  263. package/dist/lib/context-bisect/index.js +23 -1
  264. package/dist/lib/context-bisect/index.js.map +1 -1
  265. package/dist/lib/injection-engine/index.js +4 -1
  266. package/dist/lib/injection-engine/index.js.map +1 -1
  267. package/dist/lib/injection-engine/skillExamples.js +24 -68
  268. package/dist/lib/injection-engine/skillExamples.js.map +1 -1
  269. package/dist/lib/injection-engine/skillGraph.js +52 -1
  270. package/dist/lib/injection-engine/skillGraph.js.map +1 -1
  271. package/dist/lib/injection-engine/skillGraphCheckup.js.map +1 -1
  272. package/dist/lib/injection-engine/skillNeverRoutes.js +234 -0
  273. package/dist/lib/injection-engine/skillNeverRoutes.js.map +1 -0
  274. package/dist/lib/injection-engine/skillPartition.js +277 -0
  275. package/dist/lib/injection-engine/skillPartition.js.map +1 -0
  276. package/dist/lib/injection-engine/skillsFromDir.js +121 -9
  277. package/dist/lib/injection-engine/skillsFromDir.js.map +1 -1
  278. package/dist/lib/injection-engine/skillsFromDirRoutes.js +174 -0
  279. package/dist/lib/injection-engine/skillsFromDirRoutes.js.map +1 -0
  280. package/dist/lib/injection-engine/startRuleClaim.js +85 -0
  281. package/dist/lib/injection-engine/startRuleClaim.js.map +1 -0
  282. package/dist/lib/injection-engine/toolOutcome.js +2 -1
  283. package/dist/lib/injection-engine/toolOutcome.js.map +1 -1
  284. package/dist/memory/define.js +12 -0
  285. package/dist/memory/define.js.map +1 -1
  286. package/dist/memory/define.types.js.map +1 -1
  287. package/dist/strategies/attach.js.map +1 -1
  288. package/dist/types/adapters/hosting/agentcore.d.ts +8 -0
  289. package/dist/types/adapters/hosting/agentcore.d.ts.map +1 -1
  290. package/dist/types/adapters/hosting/firestoreSessions.d.ts +162 -14
  291. package/dist/types/adapters/hosting/firestoreSessions.d.ts.map +1 -1
  292. package/dist/types/adapters/hosting/googleAgentEngine.d.ts +16 -1
  293. package/dist/types/adapters/hosting/googleAgentEngine.d.ts.map +1 -1
  294. package/dist/types/adapters/memory/agentcore.d.ts.map +1 -1
  295. package/dist/types/artifacts/conformance/cases.d.ts +24 -0
  296. package/dist/types/artifacts/conformance/cases.d.ts.map +1 -0
  297. package/dist/types/artifacts/conformance/index.d.ts +12 -0
  298. package/dist/types/artifacts/conformance/index.d.ts.map +1 -0
  299. package/dist/types/artifacts/conformance/run.d.ts +48 -0
  300. package/dist/types/artifacts/conformance/run.d.ts.map +1 -0
  301. package/dist/types/artifacts/conformance/types.d.ts +198 -0
  302. package/dist/types/artifacts/conformance/types.d.ts.map +1 -0
  303. package/dist/types/artifacts/index.d.ts +1 -0
  304. package/dist/types/artifacts/index.d.ts.map +1 -1
  305. package/dist/types/core/Agent.d.ts +34 -1
  306. package/dist/types/core/Agent.d.ts.map +1 -1
  307. package/dist/types/core/agent/AgentBuilder.d.ts +43 -0
  308. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  309. package/dist/types/core/agent/buildAgentChart.d.ts +9 -0
  310. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  311. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  312. package/dist/types/core/agent/coverage/absent.d.ts +105 -0
  313. package/dist/types/core/agent/coverage/absent.d.ts.map +1 -0
  314. package/dist/types/core/agent/coverage/answer.d.ts +47 -0
  315. package/dist/types/core/agent/coverage/answer.d.ts.map +1 -0
  316. package/dist/types/core/agent/coverage/evidence.d.ts +69 -0
  317. package/dist/types/core/agent/coverage/evidence.d.ts.map +1 -0
  318. package/dist/types/core/agent/coverage/index.d.ts +18 -0
  319. package/dist/types/core/agent/coverage/index.d.ts.map +1 -0
  320. package/dist/types/core/agent/coverage/items.d.ts +36 -0
  321. package/dist/types/core/agent/coverage/items.d.ts.map +1 -0
  322. package/dist/types/core/agent/coverage/ledger.d.ts +81 -0
  323. package/dist/types/core/agent/coverage/ledger.d.ts.map +1 -0
  324. package/dist/types/core/agent/coverage/read.d.ts +52 -0
  325. package/dist/types/core/agent/coverage/read.d.ts.map +1 -0
  326. package/dist/types/core/agent/coverage/types.d.ts +143 -0
  327. package/dist/types/core/agent/coverage/types.d.ts.map +1 -0
  328. package/dist/types/core/agent/evidence/evidenceIndex.d.ts +7 -0
  329. package/dist/types/core/agent/evidence/evidenceIndex.d.ts.map +1 -1
  330. package/dist/types/core/agent/runManifest.d.ts +81 -0
  331. package/dist/types/core/agent/runManifest.d.ts.map +1 -0
  332. package/dist/types/core/agent/stages/prepareFinal.d.ts +18 -0
  333. package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
  334. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  335. package/dist/types/core/agent/toolEffects.d.ts +2 -2
  336. package/dist/types/core/agent/types.d.ts +14 -0
  337. package/dist/types/core/agent/types.d.ts.map +1 -1
  338. package/dist/types/debug.d.ts +1 -0
  339. package/dist/types/debug.d.ts.map +1 -1
  340. package/dist/types/events/payloads.d.ts +205 -0
  341. package/dist/types/events/payloads.d.ts.map +1 -1
  342. package/dist/types/events/registry.d.ts +7 -1
  343. package/dist/types/events/registry.d.ts.map +1 -1
  344. package/dist/types/hosting/conformance/cases.d.ts +2 -1
  345. package/dist/types/hosting/conformance/cases.d.ts.map +1 -1
  346. package/dist/types/hosting/conformance/types.d.ts +7 -7
  347. package/dist/types/hosting/conformance/types.d.ts.map +1 -1
  348. package/dist/types/hosting/errors.d.ts +28 -0
  349. package/dist/types/hosting/errors.d.ts.map +1 -1
  350. package/dist/types/hosting/index.d.ts +11 -3
  351. package/dist/types/hosting/index.d.ts.map +1 -1
  352. package/dist/types/hosting/memorySessions.d.ts.map +1 -1
  353. package/dist/types/hosting/sessionRetention.d.ts +57 -0
  354. package/dist/types/hosting/sessionRetention.d.ts.map +1 -0
  355. package/dist/types/hosting/sqliteSessions.d.ts +11 -1
  356. package/dist/types/hosting/sqliteSessions.d.ts.map +1 -1
  357. package/dist/types/hosting/types.d.ts +184 -0
  358. package/dist/types/hosting/types.d.ts.map +1 -1
  359. package/dist/types/hosting-providers.d.ts +15 -11
  360. package/dist/types/hosting-providers.d.ts.map +1 -1
  361. package/dist/types/index.d.ts +2 -0
  362. package/dist/types/index.d.ts.map +1 -1
  363. package/dist/types/lib/context-bisect/arms/apply.d.ts +55 -0
  364. package/dist/types/lib/context-bisect/arms/apply.d.ts.map +1 -0
  365. package/dist/types/lib/context-bisect/arms/compare.d.ts +28 -0
  366. package/dist/types/lib/context-bisect/arms/compare.d.ts.map +1 -0
  367. package/dist/types/lib/context-bisect/arms/index.d.ts +17 -0
  368. package/dist/types/lib/context-bisect/arms/index.d.ts.map +1 -0
  369. package/dist/types/lib/context-bisect/arms/manifest.d.ts +80 -0
  370. package/dist/types/lib/context-bisect/arms/manifest.d.ts.map +1 -0
  371. package/dist/types/lib/context-bisect/arms/probe.d.ts +55 -0
  372. package/dist/types/lib/context-bisect/arms/probe.d.ts.map +1 -0
  373. package/dist/types/lib/context-bisect/arms/types.d.ts +320 -0
  374. package/dist/types/lib/context-bisect/arms/types.d.ts.map +1 -0
  375. package/dist/types/lib/context-bisect/arms/validate.d.ts +27 -0
  376. package/dist/types/lib/context-bisect/arms/validate.d.ts.map +1 -0
  377. package/dist/types/lib/context-bisect/arms/verdict.d.ts +54 -0
  378. package/dist/types/lib/context-bisect/arms/verdict.d.ts.map +1 -0
  379. package/dist/types/lib/context-bisect/index.d.ts +1 -0
  380. package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
  381. package/dist/types/lib/injection-engine/index.d.ts +1 -1
  382. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  383. package/dist/types/lib/injection-engine/skillExamples.d.ts +16 -13
  384. package/dist/types/lib/injection-engine/skillExamples.d.ts.map +1 -1
  385. package/dist/types/lib/injection-engine/skillGraph.d.ts +50 -0
  386. package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
  387. package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts +6 -5
  388. package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts.map +1 -1
  389. package/dist/types/lib/injection-engine/skillNeverRoutes.d.ts +132 -0
  390. package/dist/types/lib/injection-engine/skillNeverRoutes.d.ts.map +1 -0
  391. package/dist/types/lib/injection-engine/skillPartition.d.ts +70 -0
  392. package/dist/types/lib/injection-engine/skillPartition.d.ts.map +1 -0
  393. package/dist/types/lib/injection-engine/skillsFromDir.d.ts +83 -3
  394. package/dist/types/lib/injection-engine/skillsFromDir.d.ts.map +1 -1
  395. package/dist/types/lib/injection-engine/skillsFromDirRoutes.d.ts +106 -0
  396. package/dist/types/lib/injection-engine/skillsFromDirRoutes.d.ts.map +1 -0
  397. package/dist/types/lib/injection-engine/startRuleClaim.d.ts +92 -0
  398. package/dist/types/lib/injection-engine/startRuleClaim.d.ts.map +1 -0
  399. package/dist/types/lib/injection-engine/toolOutcome.d.ts +12 -3
  400. package/dist/types/lib/injection-engine/toolOutcome.d.ts.map +1 -1
  401. package/dist/types/memory/define.d.ts.map +1 -1
  402. package/dist/types/memory/define.types.d.ts +27 -0
  403. package/dist/types/memory/define.types.d.ts.map +1 -1
  404. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -475,7 +475,36 @@ Resilience decorators live on the `agentfootprint/resilience` subpath
475
475
  (not the main barrel). Each preserves the `LLMProvider` interface and
476
476
  stacks freely.
477
477
 
478
- ### Observability93 typed events across 21 domains
478
+ ### Result primitives an absence that names itself, a limit that travels
479
+
480
+ ```typescript
481
+ import { absent, coverage } from 'agentfootprint';
482
+
483
+ // A tool that found nothing, in a shape no model can read as "I could not look".
484
+ return absent({
485
+ what: `FLOGI entries on ${port}`,
486
+ checked: [`${sw}: the live fcns database`, 'window: the last 24h'],
487
+ cannotCover: [{ what: 'the peer fabric', why: 'this collector is scoped to one fabric' }],
488
+ tryInstead: 'Ask for a different interface, or query the peer fabric by name.',
489
+ });
490
+
491
+ // A verdict with its own boundary attached.
492
+ return coverage(verdict, {
493
+ checked: ['SRDF pair state on all 4 arrays'],
494
+ notChecked: [{ what: 'NDM migration sessions', why: 'the API timed out' }],
495
+ cannotCover: [{ what: 'host-side multipathing', why: 'no collector on the ESX hosts' }],
496
+ });
497
+ ```
498
+
499
+ An absence carries the delivered status `'absent'` (routable by `onToolStatus`),
500
+ files `agentfootprint.tools.absent`, and grounds only its coverage in the
501
+ evidence gate. It is never an error — nothing retries or refuses it. A ledger
502
+ files `agentfootprint.tools.coverage_declared`; with
503
+ `.limitsTravelWithTheAnswer()` the framework appends the run's declared limits
504
+ to the final answer, which is how a limit survives a model that would rather not
505
+ mention it.
506
+
507
+ ### Observability — 96 typed events across 21 domains
479
508
 
480
509
  ```typescript
481
510
  agent.on('agentfootprint.context.injected', (e) =>
package/CLAUDE.md CHANGED
@@ -10,6 +10,7 @@ Entry points — THIRTEEN doors, and `package.json` `exports` is exhaustive, so
10
10
  |---|---|
11
11
  | core/ | primitives: Agent.ts (ReAct runner), LLMCall.ts, RunnerBase.ts (dispatcher + attach + enable.*), tools.ts (defineTool), pause.ts, runCheckpoint.ts |
12
12
  | core/agent/evidence/ | (9.35.0) the evidence gate — `.namesAndNumbersFromEvidence()`. Pure + deterministic BY LAW (no model, no embedding: a guard that needed a bigger model to police a smaller one inverts the library's thesis). normalize (one spelling per value, both sides) → extract (which tokens are DATA — conservative, justified clause by clause) → evidenceIndex (STRUCTURAL walk of `role:'tool'` results; the exempt corpus is user message + user/system turns + `systemPromptInjections`, MINUS the library's own frames — see frames.ts, the laundering bug) → gate (resolve/judge/sentences) → errors (`UnsupportedValuesError`). Fabrication detector, NOT a correctness judge: a false claim built from real values passes |
13
+ | core/agent/coverage/ | the two FIELD-INVENTED result primitives. `absent()` = an absence that names its own coverage (checked / not checked / cannot cover) and says a retry returns the same; `coverage(result, …)` = the ledger of what a clean verdict does NOT rule out. Both RECOGNIZED (reserved `af_absent`/`af_coverage` keys, the effects-envelope strictness law), not conventions. Pure; the moving parts are `declareCoverage` in stages/toolCalls.ts, the whitelist in evidence/evidenceIndex.ts, and `prepareFinalWithLimitsStage` |
13
14
  | core/agent/ | chart assembly: buildAgentChart / buildDynamicAgentChart (picked by reactMode, Agent.ts:1145-1147), buildToolRegistry, stages/ (seed, callLLM, route, toolCalls, prepareFinal, breakFinal, reliabilityExecution), window/ (the `.window()` strategy family), middleware/ (the `.toolMiddleware()` / `.messageMiddleware()` chains — outcomes are a CLOSED union with no `result` arm; three call sites walk it via runChain.ts: toolCalls dispatch, seed `'input'`, route `'output'`, plus mcpServe) |
14
15
  | core/slots/ | the 3 context-slot subflow builders + thinking subflow — intentionally NOT exported |
15
16
  | core-flow/ | Sequence/Parallel/Conditional/Loop — RunnerBase subclasses with own charts |
@@ -62,6 +63,7 @@ Traps: `src/observability/` holds the finder IMPLEMENTATIONS (canonical home; `d
62
63
  - **Code staging-in (9.26.0)**: `CodeSession.stageInputs?(inputs) → StagedCodeInput[]` — OPTIONAL, feature-detected via `canStageCodeInputs`, and its contract is TWO promises: the payloads are readable at the returned paths, AND every later `execute` exposes the manifest as `STAGED_INPUTS_ENV` (`AF_STAGED_INPUTS`, `name → path`). `CodeInput.name` is the MANIFEST KEY (the wants arg name, so a static description can name it) and `fileName` is the on-disk name — separate fields so the two cannot drift. `codeRunnerTool({ wants })` composes the schema properties + the description clause and refuses BY NAME on a non-staging runner. Implemented by localCodeRunner only.
63
64
  - **Repeated-call nudge (9.26.0)**: `core/agent/repeatedCall.ts` (pure `noteRepeatedCall` + `repeatedCallLedgers()`) + the ONE batch-loop hook in toolCalls. Fingerprints (FNV-1a) of stable-stringified args and the tool's OWN delivered result — never values. **The counters are NOT tracked state**: they live in a bounded run-keyed map held by `buildToolCallsHandler` and keyed by `deps.currentRun().runId`, so a turn that repeats nothing is byte-identical in state, commit log, narrative and recordings (a scope key would have changed all four for every agent that merely upgraded); the repeat itself rides `agentfootprint.tools.repeated_call`, the emit channel per-attempt facts belong on. A resume mints a new runId ⇒ counting restarts. Fires at the SECOND identical landing, once. `AgentOptions.repeatedCallNudge: false` disables (threaded value-conditionally; ON is the default). Deliberately NOT applied on the pause-resume dispatch paths.
64
65
  - **Evidence gate (9.35.0)** — `.namesAndNumbersFromEvidence({ posture, shapes, exempt, minDigits })`: every name/number in the final answer must appear in a `role:'tool'` result. Postures reuse the routing VOCABULARY (`assist`|`guard`|`rails`) as a SEPARATE option — routing authority ≠ evidence discipline, and overloading `skillGraphCascade.strictness` would deny "strict routing, loose evidence". Wiring is the stepNudge blast radius verbatim: `ResolvedEvidenceGate` (builder-resolved, refusals at the CALL SITE) → Agent ctor trailing param → `buildRouteDeciderStage`'s 4th arg (`judgeEvidence` runs LAST of the three judges — schema > steps > evidence — and NOT on a denied or schema-exhausted answer) → `evidenceRecheckStage` branch (`{loopTo}`, mounted only for a revising posture) → `STAGE_IDS.EVIDENCE_RECHECK` + BOUNDARY_LOCAL_IDS + milestoneFor. TWO deps flags, and the second is the one a reader misses: `evidenceRecheckStage` (branch) AND `hasEvidenceGate` (bubbles `systemPromptInjections` out of sf-llm-call in the GROUPED chart — without it the gate flags the app's own prompt). Per-check facts ride `agentfootprint.agent.evidence_checked` (emit channel); only the terminal verdict is committed (`unsupportedValues`), because the boundary raises off it. `UnsupportedValuesError` joins the TERMINAL-typed-error list in `run()`'s catch (a verdict is not a crash — no retry handle for a wall).
66
+ - **Coverage primitives (this release)** — `absent()` / `coverage()`, both copied from FIELD USE. THE argument is the direction of the error: a *nothing-found* misread as an *outage* costs an investigation, an *outage* misread as *nothing-found* declares a system healthy that was never checked — so the two must not share a shape. Blast radius, and it is the `resultCeiling` radius verbatim: `readCoverageResult` called by `declareCoverage` at BOTH execute boundaries in toolCalls.ts (batch loop + `resolveCredentialAndExecute`), on the UNWRAPPED content and BEFORE the ceiling. FOUR downstream changes and no more: (1) `ToolResultStatus` gained a SEVENTH word `'absent'` — routable by `onToolStatus`, because folding it into `'failure'` is the confusion itself and into `'success'` leaves nothing to route on; (2) two events (`tools.absent`, `tools.coverage_declared`); (3) tracked `AgentState.coverageDeclared` — a limit is a fact about the ANSWER, not about an attempt, which is why it is state and the repeated-call counters are not; (4) the evidence corpus indexes an absence's COVERAGE ONLY (`coverage/evidence.ts` — a failed lookup is the cheapest laundering machine, and `absent()` would have made it cheaper: this is frames.ts's argument on the tool side). Deliberately UNCHANGED: no `error: true`, no retry, no refusal, no gate flag. Survival into the answer is `.limitsTravelWithTheAnswer()` → `attachCoverageLimits` dep → BOTH builders swap the final branch's first stage for `prepareFinalWithLimitsStage` (same id, same position). It APPENDS rather than judges: a check for "did the model state its limits?" needs a second model to decide what counts, which is what evidence/README.md forbids.
65
67
  - **Closed seams**: Agent chart internals (AgentChartDeps not exported — extend via injections/tools/memory/thinking, never by adding a ReAct stage); ContextSlot (3 slots fixed); ProviderKind factory; dormant ports with no consumer (ContextSourceAdapter, EmbeddingProvider, RiskDetector — adapters/types.ts only); reserved tool names under selfExplain — 8.16.0 made the list DERIVED: `TRACE_TOOL_NAMES` (traceToolpack.ts, 10 names since 8.17.0: run_overview/find_in_trace/trace_node/trace_slice/backtrack/who_wrote/get_value/inspect_tool_call/inspect_tool_run/read_narrative) is what AgentBuilder.ts:~1560 reserves in inline mode (`explain_run` in delegate mode), so a NEW toolpack tool joins ONE list and the reservation follows — but it must ALSO join the lazy template's mounted set (lazyToolpack builds over `{narrative: [], events: []}` so the catalog shape is fixed at build time) and the count assertion in test/lib/trace-toolpack/selfExplainAgent.test.ts. **8.17.0 `inspect_tool_run`** is the descent THROUGH the tool boundary: `flowchartAsTool({ keepRecord: true })` files each invocation's record in a bounded LRU store (lib/trace-toolpack/innerRunRecords.ts) keyed by the executing `ctx.toolCallId`, riding the `Tool` under the `INNER_RUN_RECORDS` registry symbol; `AgentBuilder.build()` → `collectInnerRuns(registry, injections)` → `SelfExplainSource.getInnerRuns` → `TraceToolpackArtifacts.innerRuns`. The inner views are the pack ITSELF re-run over `openRecording(record.recording)` — do not add a second query implementation. Provider-delivered tools are NOT collected (no build-time list); inner runtimeStageIds are a SEPARATE namespace and only `inspect_tool_run` accepts them.
66
68
 
67
69
  ## Change-impact map
@@ -71,7 +73,8 @@ Traps: `src/observability/` holds the finder IMPLEMENTATIONS (canonical home; `d
71
73
  - **Embedder fingerprint** (8.9.0) → `Embedder.id` (optional; every shipped embedder sets one, and NONE include dims — the store appends `@<dims>` itself, so an id carrying its own size double-stamps) + `indexDocuments` defaulting `embedderId` to it + `SqliteVectorStore.reconcileFingerprint` (the only comparison site). Rule: dimensions ALWAYS decide, model ids decide only when BOTH sides named themselves — refusing on an absent name would block the majority of callers who never pass `embedderId`.
72
74
  - **Retrieval record** (8.8.0) → FOUR stages write one object in sequence: `loadRelevant` (candidates+scores+threshold verdicts) → `pickByBudget` (re-marks admitted→over-budget/over-max-entries) → `formatDefault` (`promptFragment` + `promptPosition`) → the read mount's outputMapper lifts it to root as `retrievalEvidence_<id>`. `memoryRecallInjections` then splits ONE recall into one ActiveInjection PER CHUNK — guarded by a byte-equality check (`fragments.join('\n\n') === systemContent`) that falls back to the single injection rather than change the prompt. `rank` (score order) and `promptPosition` (picker order) are DIFFERENT and both load-bearing: joining fragments in rank order reproduces the right bytes in a sequence the model never saw.
73
75
  - **AgentState** → all 8 stages/ files, both builders' mappers, memory-wire STRING-TYPED keys ('runIdentity'/'turnNumber'/… buildAgentChart.ts:177-180 — not refactor-safe), finalizeResult's `reliabilityFail*`/`policyHalt*` reads (rename silently kills the typed errors).
74
- - **events/** → 93 typed events across 21 domains (counts anti-drift-tested against this file — update BOTH when adding events): ALL_EVENT_TYPES exhaustiveness tests, DomainWildcard hand-list, ~42 importers (recorders, strategies, stream, commentary).
76
+ - **events/** → 96 typed events across 21 domains (counts anti-drift-tested against this file — update BOTH when adding events): ALL_EVENT_TYPES exhaustiveness tests, DomainWildcard hand-list, ~42 importers (recorders, strategies, stream, commentary).
77
+ - **Run-configuration manifest (9.41.0)** → `agentfootprint.agent.run_configured`, the JOIN KEY that turns N runs into N labelled ARMS: one event naming the adapters/strategies in play (provider+model, reactMode, each memory's declared strategy/retrieval/embedder, window, graph posture+classifier, evidence posture, artifacts-present). Composed by the PURE `core/agent/runManifest.ts`, dispatched from `Agent.emitRunManifest()` at the END of `createExecutor` — the ONE funnel `run()` AND `resume()` share, both of which mint a fresh runId. Direct `dispatcher.dispatch` with a STATED pseudo-stage (`run-configured#0`), the `emitToolSessionReport` precedent — there is no stage yet, and `minimalMeta()` would make the one joinable-by-design event unjoinable. TWO laws, both tested: NAMES ONLY (a store is reported PRESENT and unnamed rather than identified by a directory/endpoint — `MemoryStore` and `ArtifactStore` declare no id), and ABSENT means "not configured", never a guessed `'default'`. Graph presence is read off `skillGraphNextSkill`, NOT `skillGraphCascade` (a 9.16-style mount sets no cascade and would read as "no graph"). `MemoryDefinition` gained `strategy`/`retrieval`/`embedderId` for it — declared names the compiled pipeline had closed over, the `store`-in-the-open precedent.
75
78
  - **adapters/types.ts LLMMessage/LLMRequest** → 62 importers: tool_use round-trip (toolCalls.ts:115-135), wire assembly (callLLM.ts:150-160), providers, cache strategies, security/extractSequence, reliability loop.
76
79
  - **Cache** → strategy registration is a MODULE SIDE EFFECT (src/index.ts:15-17); an entry point skipping that import silently falls back to NoOp. Resolved once per Agent at construction (Agent.ts:347).
77
80
  - **Injection engine eval semantics** → Evaluate stage cursor keystone (buildInjectionEngineSubflow.ts:214-222), Route stage MIRRORS slot filters (keep in sync with buildSystemPromptSlot), read_skill gate (toolCalls.ts:747). The gate's allowed set is TWO kinds of id (8.4.0): a HOP (`deps.allowedSkillIds` = `graph.reachableSkills(cursor)` — activates AND moves the cursor) ∪ an OPEN skill (`deps.openSkillIds` = `Agent.openSkillIds()`, Agent.ts:1052 — a registered skill whose trigger is `llm-activated` AND that the graph declares no incoming edge to; activates, never moves the cursor). Both clauses are load-bearing: the trigger test is "read_skill can really activate this", the edge test keeps a bare model edge `.route(a,m)` from-gated. **8.5.0** extends the SAME trigger test three ways: a decision `tree()` returns `[]` from `reachableSkills` (leaves compile to `rule` triggers, so a pick could only be accepted then dropped — the gate refuses with a tree-specific message, `deps.skillGraphIsTree`, derived in AgentBuilder from `graph.nodes.some(kind==='predicate')`); `surfaceMode:'tool-only'` is refused at agent build for any skill whose trigger is not `llm-activated` (skillBodyDelivery.ts — the read_skill tool result is the only channel that mode has, and the graph never calls read_skill); and `read_skill`'s DESCRIPTION is rebuilt per iteration from `reachableSkills(cursor) ∪ open` (Agent.readSkillOfferFor → buildToolsSlot's `readSkillFor`). **The read_skill ENUM must stay the full catalog** — `toolArgValidation` defaults to `'enforce'` and runs at toolCalls.ts:570, BEFORE the gate at :765, and sets `error = true` which the gate skips; narrowing the enum silently retires the teaching refusal, `skill.rejected`, routeRecorder's rejection hops and the rejected-cap governor.
@@ -193,6 +193,36 @@ const calculator = defineTool({
193
193
  });
194
194
  ```
195
195
 
196
+ ### When a tool finds nothing, and what a clean result does not cover
197
+
198
+ ```typescript
199
+ import { absent, coverage, defineTool } from 'agentfootprint';
200
+
201
+ // "I looked and there is nothing" — never readable as "I could not look".
202
+ execute: ({ port }) => rows.length ? rows : absent({
203
+ what: `FLOGI entries on ${port}`,
204
+ checked: ['shq-fab-a: the live fcns database', 'window: the last 24h'],
205
+ notChecked: [{ what: 'the archived history', why: 'older than the 24h window' }],
206
+ cannotCover: [{ what: 'the peer fabric', why: 'this collector is scoped to one fabric' }],
207
+ tryInstead: 'Ask for a different interface, or query the peer fabric by name.',
208
+ }),
209
+
210
+ // A verdict WITH its boundary — what "fine" does and does not rule out.
211
+ execute: async () => coverage(await checkReplication(), {
212
+ checked: ['SRDF pair state on all 4 arrays'],
213
+ cannotCover: [{ what: 'host-side multipathing', why: 'no collector on the ESX hosts' }],
214
+ }),
215
+ ```
216
+
217
+ An absence gets the delivered status `'absent'` (route it with
218
+ `onToolStatus: 'absent'`), files `agentfootprint.tools.absent`, and grounds only
219
+ its COVERAGE in the evidence gate — so an id the model invented does not become
220
+ grounded by one lookup that found nothing. It is never an error: nothing retries
221
+ it, nothing refuses it, no `error: true`. A ledger files
222
+ `agentfootprint.tools.coverage_declared`; add `.limitsTravelWithTheAnswer()` on
223
+ the agent and the framework APPENDS the run's limits to the final answer, so the
224
+ model cannot drop what it never wrote.
225
+
196
226
  ## Observing a run
197
227
 
198
228
  ```typescript
@@ -205,7 +235,7 @@ const agent = Agent.create({ provider, model })
205
235
  agent.on('agentfootprint.context.evaluated', (e) => console.log(e.payload.activeIds));
206
236
  ```
207
237
 
208
- **93 typed events across 21 domains.** Two subscription shapes and no third:
238
+ **96 typed events across 21 domains.** Two subscription shapes and no third:
209
239
  `'*'` (every event) and `'agentfootprint.<domain>.*'` (one domain). **`'agentfootprint.*'`
210
240
  is not a pattern** — TypeScript rejects it, and at runtime it would match nothing.
211
241
 
@@ -100,6 +100,7 @@ const artifactWire_js_1 = require("../../hosting/artifactWire.js");
100
100
  const sessionWire_js_1 = require("../../hosting/sessionWire.js");
101
101
  const envelope_js_1 = require("../../hosting/envelope.js");
102
102
  const httpHost_js_1 = require("../../hosting/httpHost.js");
103
+ const types_js_1 = require("../../hosting/types.js");
103
104
  const lazyRequire_js_1 = require("../../lib/lazyRequire.js");
104
105
  // ─── The runtime host ────────────────────────────────────────────────
105
106
  const HOST_NAME = 'agentCoreRuntimeHost';
@@ -468,6 +469,14 @@ exports.DEFAULT_SESSION_STORAGE_PATH = '/tmp/agentcore-session';
468
469
  * refused by name too (`UnreadableEnvelopeError`), never answered with a fresh
469
470
  * start. Only a session that was never written hydrates as `undefined`.
470
471
  *
472
+ * **The two modes differ on retention (9.42.0), and the difference is
473
+ * reported rather than smoothed over.** `'session-storage'` owns its file, so
474
+ * it implements the port's optional `retention()` as a sweep you call.
475
+ * `'memory'` appends events to a service whose expiry belongs to the memory
476
+ * resource an operator configured, and this shim has no delete on its surface
477
+ * — so it implements no retention member at all, and `sessionRetention()`
478
+ * refuses BY NAME rather than reporting a sweep that would delete nothing.
479
+ *
471
480
  * @example Survive a stop/resume, no AWS SDK required
472
481
  * agentCoreSessions({ store: 'session-storage' });
473
482
  *
@@ -480,6 +489,17 @@ function agentCoreSessions(options) {
480
489
  exports.agentCoreSessions = agentCoreSessions;
481
490
  function fileSessions(options) {
482
491
  const path = options.path ?? exports.DEFAULT_SESSION_STORAGE_PATH;
492
+ /** Write the whole file the way `persist` does — one temp file, one rename. */
493
+ async function writeFileAtomically(next) {
494
+ const { writeFile, rename, mkdir } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
495
+ const { dirname } = await Promise.resolve().then(() => __importStar(require('node:path')));
496
+ await mkdir(dirname(path), { recursive: true }).catch(() => undefined);
497
+ // Write-then-rename: a container killed mid-write leaves the previous
498
+ // conversations intact rather than a truncated file that refuses to parse.
499
+ const temporary = `${path}.${process.pid}.tmp`;
500
+ await writeFile(temporary, JSON.stringify(next), 'utf8');
501
+ await rename(temporary, path);
502
+ }
483
503
  async function readFile() {
484
504
  const { readFile: read } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
485
505
  let raw;
@@ -518,20 +538,61 @@ function fileSessions(options) {
518
538
  return (0, envelope_js_1.checkEnvelope)(stored, sessionId);
519
539
  },
520
540
  async persist(sessionId, envelope) {
521
- const { writeFile, rename, mkdir } = await Promise.resolve().then(() => __importStar(require('node:fs/promises')));
522
- const { dirname } = await Promise.resolve().then(() => __importStar(require('node:path')));
523
541
  const file = await readFile();
524
- const next = {
542
+ await writeFileAtomically({
525
543
  version: 1,
526
544
  sessions: { ...file.sessions, [sessionId]: envelope },
527
- };
528
- await mkdir(dirname(path), { recursive: true }).catch(() => undefined);
529
- // Write-then-rename: a container killed mid-write leaves the previous
530
- // conversation intact rather than a truncated file that refuses to parse.
531
- const temporary = `${path}.${process.pid}.tmp`;
532
- await writeFile(temporary, JSON.stringify(next), 'utf8');
533
- await rename(temporary, path);
545
+ });
534
546
  },
547
+ // ── Retention (9.42.0) ──────────────────────────────────────────────
548
+ //
549
+ // `'this-store'`: the conversations are one JSON file this container owns,
550
+ // and nothing else is going to trim it. Worth having even though the
551
+ // runtime reclaims a session's storage when the session ends — one file
552
+ // holds every session this container has seen, so a long-lived container
553
+ // accumulates conversations that ended hours ago, and `/tmp` filling up
554
+ // inside a container is a failure that arrives as something else entirely.
555
+ //
556
+ // The sibling `{ store: 'memory' }` mode implements NO retention member,
557
+ // and that absence is deliberate rather than unfinished: it appends events
558
+ // to a service whose expiry belongs to the memory resource an operator
559
+ // configured, and this shim's surface has no delete on it. Claiming a
560
+ // sweep it cannot perform, or a backend policy nobody here has verified,
561
+ // would be worse than the refusal an absent member produces.
562
+ retention: () => ({
563
+ deletedBy: 'this-store',
564
+ forgetOlderThan: async (before, sweepOptions) => {
565
+ const limit = Math.max(1, Math.floor(sweepOptions?.limit ?? types_js_1.DEFAULT_SWEEP_LIMIT));
566
+ const file = await readFile();
567
+ const kept = {};
568
+ let forgotten = 0;
569
+ let more = false;
570
+ for (const [sessionId, envelope] of Object.entries(file.sessions)) {
571
+ // A row this store cannot read the timestamp of is KEPT. A sweep
572
+ // deletes on evidence; "I could not tell how old this is" is not
573
+ // evidence, and the one mistake a retention job must not make is
574
+ // deleting a conversation it did not understand.
575
+ const savedAt = envelope?.savedAt;
576
+ const expired = typeof savedAt === 'number' && savedAt < before;
577
+ if (!expired) {
578
+ kept[sessionId] = envelope;
579
+ }
580
+ else if (forgotten >= limit) {
581
+ kept[sessionId] = envelope;
582
+ more = true;
583
+ }
584
+ else {
585
+ forgotten += 1;
586
+ }
587
+ }
588
+ // One write, and only when something actually goes: a sweep that found
589
+ // nothing must not rewrite the file every minute, because the rename
590
+ // is the moment a crash can cost a turn.
591
+ if (forgotten > 0)
592
+ await writeFileAtomically({ version: 1, sessions: kept });
593
+ return { forgotten, more };
594
+ },
595
+ }),
535
596
  };
536
597
  }
537
598
  // ─── 'memory': one AgentCore Memory event per persist ────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"agentcore.js","sourceRoot":"","sources":["../../../src/adapters/hosting/agentcore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentcore.js","sourceRoot":"","sources":["../../../src/adapters/hosting/agentcore.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,9 @@
12
12
  * containers, one conversation" answer Google has.
13
13
  *
14
14
  * ── The shape, said plainly ─────────────────────────────────────────────────
15
- * One collection. One document per session. Six fields:
15
+ * One collection. One document per session. Seven fields:
16
16
  *
17
- * sessionId · format · savedAt · envelope · owner · messageCount
17
+ * sessionId · format · savedAt · envelope · owner · messageCount · expiresAt
18
18
  *
19
19
  * That is the SQLite table, moved. It is deliberately the same shape, because
20
20
  * the two stores implement the same port under the same laws, and a reader who
@@ -96,6 +96,45 @@
96
96
  * in, and names those fields rather than restating the service's message — see
97
97
  * {@link firestoreFailure} for why no Google text is ever echoed here.
98
98
  *
99
+ * ── Retention: a SECOND timestamp, not a converted one (9.42.0) ─────────────
100
+ * A native Firestore TTL policy deletes a document when a field of type
101
+ * **Timestamp** is in the past. `savedAt` is a NUMBER — epoch milliseconds —
102
+ * so until this release an operator could not point a policy at this
103
+ * collection at all without a library change. The fix is a second field,
104
+ * `expiresAt`, written as a `Date` (the client stores one as a Timestamp) on
105
+ * every persist, holding `savedAt + expireAfterMs`. Give the store no
106
+ * `expireAfterMs` and the field is written as `null`, which a TTL policy
107
+ * ignores, and nothing about this release changes.
108
+ *
109
+ * **`savedAt` was NOT converted, and that is the load-bearing decision.** It is
110
+ * the ordering key of the composite index, the field the listing sorts by, and
111
+ * the first half of every cursor this store has ever minted (`<savedAt>:<docId>`,
112
+ * parsed with `parseFloat` and handed back to `startAfter` as a number).
113
+ * Converting it would have meant a new index, a new cursor grammar, and every
114
+ * pagination token issued by an earlier release becoming unreadable — but the
115
+ * decisive one is quieter: **Firestore's value ordering sorts by TYPE first.**
116
+ * Every number sorts before every timestamp. A collection holding old
117
+ * number-`savedAt` documents beside new timestamp-`savedAt` ones would list
118
+ * them in two blocks, all of one type then all of the other, with a person's
119
+ * conversations silently out of order by the type of the field rather than by
120
+ * when they were written. A second field costs one small write per turn and
121
+ * has no such shadow.
122
+ *
123
+ * So the migration consequence, plainly:
124
+ *
125
+ * • **Every document already stored stays readable and listable.** Nothing
126
+ * about `savedAt`, the index, the cursor or the query changed, and a
127
+ * document written by 9.33–9.41 is read by this release unchanged.
128
+ * • **Old documents do not start expiring.** They carry no `expiresAt`, and
129
+ * a TTL policy ignores a document whose field is missing. A conversation
130
+ * that is still being used gains one on its next turn; a conversation
131
+ * nobody ever writes to again keeps living. If those matter, delete them
132
+ * by hand once (a query on `savedAt` plus `forget`, or a `gcloud`
133
+ * bulk-delete) — this adapter will not walk your collection behind your
134
+ * back.
135
+ * • **The policy is still yours to create.** `retention().enableWith` prints
136
+ * the exact command with your collection and database in it.
137
+ *
99
138
  * ── The ceiling, since a store should name its own ──────────────────────────
100
139
  * A Firestore document is capped at 1 MiB. A conversation whose stored envelope
101
140
  * approaches that is refused BY NAME before the write
@@ -123,8 +162,29 @@
123
162
  * for it. So the write is a transaction.
124
163
  *
125
164
  * ── How much of this is verified ────────────────────────────────────────────
126
- * **Contract-shaped and tested. NOT field-validated.** Nothing here has been run
127
- * against a live Firestore by this repository.
165
+ * **Field-validated except the ownership refusal (2026-08).** An independent
166
+ * field trial ran THIS adapter against a real Firestore and exercised seven of
167
+ * its eight areas live: the round trip, the server-side indexed listing with
168
+ * its document-name tiebreak and real cursor, the missing-index refusal, the
169
+ * hashed document name, the size ceiling, ownership derived from the envelope,
170
+ * and `forget`.
171
+ *
172
+ * The eighth is named because under-claiming and over-claiming are the same
173
+ * defect: **the refusal of a turn signed by somebody else** — the
174
+ * `resolveSessionOwner` conflict this file's `persist` raises out of the
175
+ * transaction — was NOT exercised, because it did not exist when the trial
176
+ * ran. It is held by tests here, including the contested-write case of the
177
+ * shared conformance battery, and by nothing in the field. Two writers racing
178
+ * for one fresh session against a real Firestore, with the real client's
179
+ * transaction retry underneath, is exactly the shape a double models by
180
+ * assumption; the sibling Vertex adapter's equivalent was found in the field
181
+ * and not in a test suite.
182
+ *
183
+ * This section said "NOT field-validated. Nothing here has been run against a
184
+ * live Firestore" for two releases after that stopped being true. Under-claiming
185
+ * is the safe direction and it is still the same defect class the trials keep
186
+ * reporting: a status that does not track the evidence is a status nobody can
187
+ * use, whichever way it is wrong.
128
188
  *
129
189
  * The pin is the `firestoreSessions` row of `GOOGLE_SURFACE_PINS` in
130
190
  * `test/adapters/google/googlePin.ts`, asserted by
@@ -149,7 +209,8 @@
149
209
  * everywhere. That the row spells those members the way Google does is held by a
150
210
  * hand check against a real install, not by a test that runs here.
151
211
  *
152
- * The DESIGN is informed by an independent field trial of a different Firestore
212
+ * The DESIGN was informed, before any of that, by an EARLIER and separate trial
213
+ * of a DIFFERENT Firestore
153
214
  * session adapter, which ran against a real Firestore and passed eight ownership
154
215
  * and history checks — and whose own report named the defect this adapter does
155
216
  * not reproduce: that adapter read every document for one owner, sorted them in
@@ -160,7 +221,7 @@
160
221
  * or index, because that adapter had none of them.
161
222
  */
162
223
  Object.defineProperty(exports, "__esModule", { value: true });
163
- exports.firestoreFailure = exports.isFailedPrecondition = exports.grpcStatusOf = exports.documentIdFor = exports.firestoreSessions = exports.EnvelopeTooLargeError = exports.FirestoreIndexMissingError = exports.FIRESTORE_MAX_ENVELOPE_BYTES = exports.FIRESTORE_MAX_DOCUMENT_BYTES = exports.DEFAULT_SESSION_COLLECTION = void 0;
224
+ exports.firestoreFailure = exports.isFailedPrecondition = exports.grpcStatusOf = exports.documentIdFor = exports.firestoreSessions = exports.EnvelopeTooLargeError = exports.FirestoreIndexMissingError = exports.FIRESTORE_MAX_ENVELOPE_BYTES = exports.FIRESTORE_MAX_DOCUMENT_BYTES = exports.ttlPolicyCommand = exports.EXPIRES_AT_FIELD = exports.DEFAULT_SESSION_COLLECTION = void 0;
164
225
  const node_crypto_1 = require("node:crypto");
165
226
  const envelope_js_1 = require("../../hosting/envelope.js");
166
227
  const errors_js_1 = require("../../hosting/errors.js");
@@ -169,6 +230,43 @@ const lazyRequire_js_1 = require("../../lib/lazyRequire.js");
169
230
  const ADAPTER = 'firestoreSessions';
170
231
  /** Where sessions live when the caller names no collection. */
171
232
  exports.DEFAULT_SESSION_COLLECTION = 'agentfootprint_sessions';
233
+ /**
234
+ * The document field a native TTL policy is configured against (9.42.0).
235
+ *
236
+ * A SECOND field beside `savedAt`, never a change to it — see the module
237
+ * header for why converting the ordering key would have re-sorted every
238
+ * conversation already in the collection.
239
+ *
240
+ * Exported because an operator has to type this name into the console or the
241
+ * `gcloud` line, and a field name that lives only inside a string literal is a
242
+ * field name somebody will mistype at 2am.
243
+ */
244
+ exports.EXPIRES_AT_FIELD = 'expiresAt';
245
+ /**
246
+ * The one step that turns the TTL policy on, with this store's own collection
247
+ * and database already in it.
248
+ *
249
+ * One spelling, shared by the retention answer and the documentation that
250
+ * quotes it, for the same reason the missing-index refusal prints the whole
251
+ * `gcloud` line: the person reading it can fix this in sixty seconds, and only
252
+ * if nobody makes them go and look up the flags first.
253
+ *
254
+ * `--database` is always printed, including for `(default)`, where gcloud
255
+ * would have assumed it — a project may hold several databases, and a policy
256
+ * created on the wrong one leaves conversations living forever with nothing to
257
+ * suggest why. Single-quoted, because `(default)` is bare parentheses and a
258
+ * syntax error in every shell this will be pasted into.
259
+ */
260
+ function ttlPolicyCommand(collection, database) {
261
+ const flagValue = `'${database ?? '<the database your Firestore client was built for>'}'`;
262
+ return (`gcloud firestore fields ttls update ${exports.EXPIRES_AT_FIELD} ` +
263
+ `--collection-group=${collection} --enable-ttl --database=${flagValue}` +
264
+ (database === undefined
265
+ ? ` (this store did not build the Firestore client, so it cannot name the database — ` +
266
+ `fill that flag in from wherever the client was constructed)`
267
+ : ``));
268
+ }
269
+ exports.ttlPolicyCommand = ttlPolicyCommand;
172
270
  /** How many rows one `listByUser` page carries when the caller names no limit. */
173
271
  const DEFAULT_PAGE = 50;
174
272
  /**
@@ -299,20 +397,31 @@ exports.EnvelopeTooLargeError = EnvelopeTooLargeError;
299
397
  * Conversations in Firestore — a fleet-shared session store with no instance to
300
398
  * run.
301
399
  *
302
- * **Status: contract-shaped and tested, NOT field-validated.** Every SDK member
303
- * it calls was read off a real install of `@google-cloud/firestore` 9.0.0 and
304
- * hand-verified there; the test that re-checks those names against the real
305
- * package SKIPS in this repository, because the package is deliberately not
306
- * installed here. What runs in CI is the dispatch pin. No test here pretends to
307
- * have reached Google. See the module header for the full account, and for what
308
- * a field trial of a DIFFERENT adapter did and did not establish about this
309
- * design.
400
+ * **Status: field-validated except the ownership refusal (2026-08).** An
401
+ * independent field trial ran this adapter against a real Firestore and
402
+ * exercised seven of its eight areas live round trip, indexed and cursored
403
+ * listing, the missing-index refusal, the hashed document name, the size
404
+ * ceiling, derived ownership and `forget`. The eighth, the refusal of a turn
405
+ * signed by somebody ELSE, was added after the trial and is held by tests
406
+ * here and by nothing in the field. Every SDK member it calls was read off a
407
+ * real install of `@google-cloud/firestore` 9.0.0 and hand-verified there; the
408
+ * test that re-checks those names against the real package SKIPS in this
409
+ * repository, because the package is deliberately not installed here. What
410
+ * runs in CI is the dispatch pin. See the module header for the full account.
310
411
  *
311
412
  * @throws FirestoreIndexMissingError from `listByUser` until the composite index
312
413
  * exists — see the module header for the exact index.
313
414
  * @throws EnvelopeTooLargeError from `persist` for a conversation above
314
415
  * {@link FIRESTORE_MAX_ENVELOPE_BYTES}. Never truncated.
315
416
  *
417
+ * @example Conversations that expire 30 days after their last turn
418
+ * const sessions = firestoreSessions({
419
+ * project: 'my-project',
420
+ * expireAfterMs: 30 * 24 * 60 * 60 * 1000,
421
+ * });
422
+ * // Then, ONCE, as an operator — the store prints the exact command:
423
+ * console.log(sessions.retention().enableWith);
424
+ *
316
425
  * @example A standing agent whose conversations are shared across instances
317
426
  * import { standingAgent, nodeHost } from 'agentfootprint/hosting';
318
427
  * import { firestoreSessions } from 'agentfootprint/hosting';
@@ -364,6 +473,16 @@ function firestoreSessions(options = {}) {
364
473
  };
365
474
  const collection = () => db.collection(collectionName);
366
475
  const docFor = (sessionId) => collection().doc(documentIdFor(sessionId));
476
+ /**
477
+ * When this conversation should expire, or `null` for a store that was not
478
+ * given a retention setting.
479
+ *
480
+ * Idle expiry, measured from the envelope's own `savedAt`: every turn moves
481
+ * it, so a live conversation never expires underneath somebody.
482
+ */
483
+ const expiresAtFor = (savedAt) => options.expireAfterMs === undefined || !Number.isFinite(options.expireAfterMs)
484
+ ? null
485
+ : new Date(savedAt + options.expireAfterMs);
367
486
  /** The stored row, read back without trusting any of its types. */
368
487
  const readRow = async (sessionId, operation) => {
369
488
  let snapshot;
@@ -428,6 +547,27 @@ function firestoreSessions(options = {}) {
428
547
  savedAt: checked.savedAt,
429
548
  envelope: json,
430
549
  messageCount: (0, envelope_js_1.envelopeTranscript)(checked).length,
550
+ // The TTL field (9.42.0) — a SECOND field, never a change to
551
+ // `savedAt`. See the module header: `savedAt` is the ordering key of
552
+ // the composite index and the first half of every cursor this store
553
+ // has ever minted, and Firestore sorts values by TYPE before value, so
554
+ // making it a timestamp would have put every document written from now
555
+ // on into a different sort bucket from every document already stored.
556
+ //
557
+ // A `Date`, which the client converts to a Timestamp on write — and a
558
+ // TTL policy acts only on a Timestamp. Writing one this way rather
559
+ // than through `Timestamp.fromMillis` is deliberate: it adds no member
560
+ // to the SDK surface this adapter dispatches (so the pin row is
561
+ // unchanged and no new name had to be hand-verified against a real
562
+ // install), and it works identically for a caller who passed their own
563
+ // client.
564
+ //
565
+ // `null` when nothing was configured, never `undefined`: the default
566
+ // client throws on `undefined`, and a TTL policy ignores a field that
567
+ // is null or missing — so an unconfigured store writes an inert field
568
+ // rather than an absent one, exactly as `owner` does one line down and
569
+ // for the same reason.
570
+ [exports.EXPIRES_AT_FIELD]: expiresAtFor(checked.savedAt),
431
571
  };
432
572
  // WRITE ONCE for the owner, LAST WRITE WINS for everything else — the one
433
573
  // rule every store in this package shares, and since 9.36.1 the one
@@ -607,6 +747,36 @@ function firestoreSessions(options = {}) {
607
747
  throw firestoreFailure('forgetting a session', collectionName, err);
608
748
  }
609
749
  },
750
+ // ── Retention (9.42.0) ──────────────────────────────────────────────
751
+ //
752
+ // `'the-backend'`, and the honest answer rather than the convenient one.
753
+ // This store COULD have offered a sweep — query the old documents, delete
754
+ // them one at a time — and it would have been a worse answer at every
755
+ // scale: a full index read plus one write per document, billed, repeated
756
+ // nightly, to do a job the service already does for free and does not
757
+ // charge a delete for. A port member exists so a caller can find out what
758
+ // a store really does; a store that implemented the OTHER arm because it
759
+ // was implementable would be answering a different question.
760
+ //
761
+ // It works on a closed store on purpose — it reads no document and calls
762
+ // no SDK member. An operator asking "what expires these, and how do I turn
763
+ // it on?" during a shutdown or an incident should get the answer, not the
764
+ // refusal that guards the data plane.
765
+ retention: () => ({
766
+ deletedBy: 'the-backend',
767
+ // Whether this store is really stamping the field, which is a different
768
+ // fact from whether the mechanism exists. Reported rather than implied:
769
+ // "there is a TTL field" and "conversations are expiring" are the two
770
+ // things an auditor must not be allowed to confuse.
771
+ active: options.expireAfterMs !== undefined && Number.isFinite(options.expireAfterMs),
772
+ expiresOn: exports.EXPIRES_AT_FIELD,
773
+ enableWith: `${ttlPolicyCommand(collectionName, databaseName)} — or Firestore console → ` +
774
+ `Time-to-live (TTL) → Create policy, on collection '${collectionName}' and field ` +
775
+ `'${exports.EXPIRES_AT_FIELD}'. The policy deletes a document within 24 hours of the ` +
776
+ `instant in that field; it is not a hard deadline and the service says so. ` +
777
+ `Documents stored before 'expireAfterMs' was configured carry no such field and ` +
778
+ `are never deleted by it — they expire only once they are written again.`,
779
+ }),
610
780
  async close() {
611
781
  if (closed)
612
782
  return;