agentfootprint 9.41.0 → 9.44.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 (367) hide show
  1. package/AGENTS.md +30 -1
  2. package/CLAUDE.md +3 -1
  3. package/ai-instructions/claude-code/SKILL.md +31 -1
  4. package/dist/adapters/hosting/agentcore.js +163 -23
  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/artifacts/conformance/cases.js +20 -0
  11. package/dist/artifacts/conformance/cases.js.map +1 -1
  12. package/dist/artifacts/scopePath.js +41 -1
  13. package/dist/artifacts/scopePath.js.map +1 -1
  14. package/dist/core/Agent.js +17 -1
  15. package/dist/core/Agent.js.map +1 -1
  16. package/dist/core/agent/AgentBuilder.js +56 -1
  17. package/dist/core/agent/AgentBuilder.js.map +1 -1
  18. package/dist/core/agent/buildAgentChart.js +5 -1
  19. package/dist/core/agent/buildAgentChart.js.map +1 -1
  20. package/dist/core/agent/buildDynamicAgentChart.js +5 -1
  21. package/dist/core/agent/buildDynamicAgentChart.js.map +1 -1
  22. package/dist/core/agent/coverage/absent.js +163 -0
  23. package/dist/core/agent/coverage/absent.js.map +1 -0
  24. package/dist/core/agent/coverage/answer.js +90 -0
  25. package/dist/core/agent/coverage/answer.js.map +1 -0
  26. package/dist/core/agent/coverage/evidence.js +90 -0
  27. package/dist/core/agent/coverage/evidence.js.map +1 -0
  28. package/dist/core/agent/coverage/index.js +37 -0
  29. package/dist/core/agent/coverage/index.js.map +1 -0
  30. package/dist/core/agent/coverage/items.js +91 -0
  31. package/dist/core/agent/coverage/items.js.map +1 -0
  32. package/dist/core/agent/coverage/ledger.js +131 -0
  33. package/dist/core/agent/coverage/ledger.js.map +1 -0
  34. package/dist/core/agent/coverage/read.js +56 -0
  35. package/dist/core/agent/coverage/read.js.map +1 -0
  36. package/dist/core/agent/coverage/types.js +15 -0
  37. package/dist/core/agent/coverage/types.js.map +1 -0
  38. package/dist/core/agent/evidence/evidenceIndex.js +18 -1
  39. package/dist/core/agent/evidence/evidenceIndex.js.map +1 -1
  40. package/dist/core/agent/stages/prepareFinal.js +44 -3
  41. package/dist/core/agent/stages/prepareFinal.js.map +1 -1
  42. package/dist/core/agent/stages/toolCalls.js +109 -3
  43. package/dist/core/agent/stages/toolCalls.js.map +1 -1
  44. package/dist/core/agent/toolEffects.js +1 -1
  45. package/dist/core/outputFallback.js.map +1 -1
  46. package/dist/debug.js +49 -25
  47. package/dist/debug.js.map +1 -1
  48. package/dist/esm/adapters/hosting/agentcore.d.ts +8 -0
  49. package/dist/esm/adapters/hosting/agentcore.js +163 -23
  50. package/dist/esm/adapters/hosting/agentcore.js.map +1 -1
  51. package/dist/esm/adapters/hosting/firestoreSessions.d.ts +162 -14
  52. package/dist/esm/adapters/hosting/firestoreSessions.js +182 -13
  53. package/dist/esm/adapters/hosting/firestoreSessions.js.map +1 -1
  54. package/dist/esm/adapters/hosting/googleAgentEngine.d.ts +16 -1
  55. package/dist/esm/adapters/hosting/googleAgentEngine.js +29 -0
  56. package/dist/esm/adapters/hosting/googleAgentEngine.js.map +1 -1
  57. package/dist/esm/artifacts/conformance/cases.js +20 -0
  58. package/dist/esm/artifacts/conformance/cases.js.map +1 -1
  59. package/dist/esm/artifacts/scopePath.d.ts +31 -0
  60. package/dist/esm/artifacts/scopePath.js +41 -1
  61. package/dist/esm/artifacts/scopePath.js.map +1 -1
  62. package/dist/esm/core/Agent.d.ts +8 -1
  63. package/dist/esm/core/Agent.js +18 -2
  64. package/dist/esm/core/Agent.js.map +1 -1
  65. package/dist/esm/core/agent/AgentBuilder.d.ts +43 -0
  66. package/dist/esm/core/agent/AgentBuilder.js +56 -1
  67. package/dist/esm/core/agent/AgentBuilder.js.map +1 -1
  68. package/dist/esm/core/agent/buildAgentChart.d.ts +9 -0
  69. package/dist/esm/core/agent/buildAgentChart.js +6 -2
  70. package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
  71. package/dist/esm/core/agent/buildDynamicAgentChart.js +6 -2
  72. package/dist/esm/core/agent/buildDynamicAgentChart.js.map +1 -1
  73. package/dist/esm/core/agent/coverage/absent.d.ts +104 -0
  74. package/dist/esm/core/agent/coverage/absent.js +157 -0
  75. package/dist/esm/core/agent/coverage/absent.js.map +1 -0
  76. package/dist/esm/core/agent/coverage/answer.d.ts +46 -0
  77. package/dist/esm/core/agent/coverage/answer.js +86 -0
  78. package/dist/esm/core/agent/coverage/answer.js.map +1 -0
  79. package/dist/esm/core/agent/coverage/evidence.d.ts +68 -0
  80. package/dist/esm/core/agent/coverage/evidence.js +86 -0
  81. package/dist/esm/core/agent/coverage/evidence.js.map +1 -0
  82. package/dist/esm/core/agent/coverage/index.d.ts +17 -0
  83. package/dist/esm/core/agent/coverage/index.js +17 -0
  84. package/dist/esm/core/agent/coverage/index.js.map +1 -0
  85. package/dist/esm/core/agent/coverage/items.d.ts +35 -0
  86. package/dist/esm/core/agent/coverage/items.js +85 -0
  87. package/dist/esm/core/agent/coverage/items.js.map +1 -0
  88. package/dist/esm/core/agent/coverage/ledger.d.ts +80 -0
  89. package/dist/esm/core/agent/coverage/ledger.js +125 -0
  90. package/dist/esm/core/agent/coverage/ledger.js.map +1 -0
  91. package/dist/esm/core/agent/coverage/read.d.ts +51 -0
  92. package/dist/esm/core/agent/coverage/read.js +52 -0
  93. package/dist/esm/core/agent/coverage/read.js.map +1 -0
  94. package/dist/esm/core/agent/coverage/types.d.ts +142 -0
  95. package/dist/esm/core/agent/coverage/types.js +14 -0
  96. package/dist/esm/core/agent/coverage/types.js.map +1 -0
  97. package/dist/esm/core/agent/evidence/evidenceIndex.d.ts +7 -0
  98. package/dist/esm/core/agent/evidence/evidenceIndex.js +18 -1
  99. package/dist/esm/core/agent/evidence/evidenceIndex.js.map +1 -1
  100. package/dist/esm/core/agent/stages/prepareFinal.d.ts +18 -0
  101. package/dist/esm/core/agent/stages/prepareFinal.js +42 -2
  102. package/dist/esm/core/agent/stages/prepareFinal.js.map +1 -1
  103. package/dist/esm/core/agent/stages/toolCalls.js +109 -3
  104. package/dist/esm/core/agent/stages/toolCalls.js.map +1 -1
  105. package/dist/esm/core/agent/toolEffects.d.ts +2 -2
  106. package/dist/esm/core/agent/toolEffects.js +1 -1
  107. package/dist/esm/core/agent/types.d.ts +14 -0
  108. package/dist/esm/core/outputFallback.d.ts +15 -1
  109. package/dist/esm/core/outputFallback.js.map +1 -1
  110. package/dist/esm/debug.d.ts +1 -0
  111. package/dist/esm/debug.js +7 -0
  112. package/dist/esm/debug.js.map +1 -1
  113. package/dist/esm/events/dispatcher.d.ts +1 -1
  114. package/dist/esm/events/dispatcher.js.map +1 -1
  115. package/dist/esm/events/payloads.d.ts +82 -0
  116. package/dist/esm/events/registry.d.ts +11 -1
  117. package/dist/esm/events/registry.js +10 -0
  118. package/dist/esm/events/registry.js.map +1 -1
  119. package/dist/esm/hosting/conformance/cases.d.ts +2 -1
  120. package/dist/esm/hosting/conformance/cases.js +229 -22
  121. package/dist/esm/hosting/conformance/cases.js.map +1 -1
  122. package/dist/esm/hosting/conformance/types.d.ts +7 -7
  123. package/dist/esm/hosting/errors.d.ts +28 -0
  124. package/dist/esm/hosting/errors.js +40 -0
  125. package/dist/esm/hosting/errors.js.map +1 -1
  126. package/dist/esm/hosting/index.d.ts +11 -3
  127. package/dist/esm/hosting/index.js +15 -2
  128. package/dist/esm/hosting/index.js.map +1 -1
  129. package/dist/esm/hosting/memorySessions.js +39 -0
  130. package/dist/esm/hosting/memorySessions.js.map +1 -1
  131. package/dist/esm/hosting/sessionRetention.d.ts +56 -0
  132. package/dist/esm/hosting/sessionRetention.js +69 -0
  133. package/dist/esm/hosting/sessionRetention.js.map +1 -0
  134. package/dist/esm/hosting/sqliteSessions.d.ts +11 -1
  135. package/dist/esm/hosting/sqliteSessions.js +51 -0
  136. package/dist/esm/hosting/sqliteSessions.js.map +1 -1
  137. package/dist/esm/hosting/types.d.ts +184 -0
  138. package/dist/esm/hosting/types.js +9 -0
  139. package/dist/esm/hosting/types.js.map +1 -1
  140. package/dist/esm/hosting-providers.d.ts +15 -11
  141. package/dist/esm/hosting-providers.js +21 -11
  142. package/dist/esm/hosting-providers.js.map +1 -1
  143. package/dist/esm/index.d.ts +1 -0
  144. package/dist/esm/index.js +18 -0
  145. package/dist/esm/index.js.map +1 -1
  146. package/dist/esm/lib/context-bisect/arms/apply.d.ts +54 -0
  147. package/dist/esm/lib/context-bisect/arms/apply.js +41 -0
  148. package/dist/esm/lib/context-bisect/arms/apply.js.map +1 -0
  149. package/dist/esm/lib/context-bisect/arms/compare.d.ts +27 -0
  150. package/dist/esm/lib/context-bisect/arms/compare.js +112 -0
  151. package/dist/esm/lib/context-bisect/arms/compare.js.map +1 -0
  152. package/dist/esm/lib/context-bisect/arms/index.d.ts +16 -0
  153. package/dist/esm/lib/context-bisect/arms/index.js +16 -0
  154. package/dist/esm/lib/context-bisect/arms/index.js.map +1 -0
  155. package/dist/esm/lib/context-bisect/arms/manifest.d.ts +79 -0
  156. package/dist/esm/lib/context-bisect/arms/manifest.js +199 -0
  157. package/dist/esm/lib/context-bisect/arms/manifest.js.map +1 -0
  158. package/dist/esm/lib/context-bisect/arms/probe.d.ts +54 -0
  159. package/dist/esm/lib/context-bisect/arms/probe.js +125 -0
  160. package/dist/esm/lib/context-bisect/arms/probe.js.map +1 -0
  161. package/dist/esm/lib/context-bisect/arms/types.d.ts +319 -0
  162. package/dist/esm/lib/context-bisect/arms/types.js +67 -0
  163. package/dist/esm/lib/context-bisect/arms/types.js.map +1 -0
  164. package/dist/esm/lib/context-bisect/arms/validate.d.ts +26 -0
  165. package/dist/esm/lib/context-bisect/arms/validate.js +122 -0
  166. package/dist/esm/lib/context-bisect/arms/validate.js.map +1 -0
  167. package/dist/esm/lib/context-bisect/arms/verdict.d.ts +53 -0
  168. package/dist/esm/lib/context-bisect/arms/verdict.js +103 -0
  169. package/dist/esm/lib/context-bisect/arms/verdict.js.map +1 -0
  170. package/dist/esm/lib/context-bisect/index.d.ts +1 -0
  171. package/dist/esm/lib/context-bisect/index.js +5 -0
  172. package/dist/esm/lib/context-bisect/index.js.map +1 -1
  173. package/dist/esm/lib/injection-engine/index.d.ts +1 -1
  174. package/dist/esm/lib/injection-engine/index.js +3 -1
  175. package/dist/esm/lib/injection-engine/index.js.map +1 -1
  176. package/dist/esm/lib/injection-engine/skillExamples.d.ts +16 -13
  177. package/dist/esm/lib/injection-engine/skillExamples.js +16 -60
  178. package/dist/esm/lib/injection-engine/skillExamples.js.map +1 -1
  179. package/dist/esm/lib/injection-engine/skillGraph.d.ts +50 -0
  180. package/dist/esm/lib/injection-engine/skillGraph.js +52 -1
  181. package/dist/esm/lib/injection-engine/skillGraph.js.map +1 -1
  182. package/dist/esm/lib/injection-engine/skillGraphCheckup.d.ts +6 -5
  183. package/dist/esm/lib/injection-engine/skillGraphCheckup.js.map +1 -1
  184. package/dist/esm/lib/injection-engine/skillNeverRoutes.d.ts +131 -0
  185. package/dist/esm/lib/injection-engine/skillNeverRoutes.js +228 -0
  186. package/dist/esm/lib/injection-engine/skillNeverRoutes.js.map +1 -0
  187. package/dist/esm/lib/injection-engine/skillPartition.d.ts +69 -0
  188. package/dist/esm/lib/injection-engine/skillPartition.js +273 -0
  189. package/dist/esm/lib/injection-engine/skillPartition.js.map +1 -0
  190. package/dist/esm/lib/injection-engine/skillsFromDir.d.ts +83 -3
  191. package/dist/esm/lib/injection-engine/skillsFromDir.js +118 -7
  192. package/dist/esm/lib/injection-engine/skillsFromDir.js.map +1 -1
  193. package/dist/esm/lib/injection-engine/skillsFromDirRoutes.d.ts +105 -0
  194. package/dist/esm/lib/injection-engine/skillsFromDirRoutes.js +169 -0
  195. package/dist/esm/lib/injection-engine/skillsFromDirRoutes.js.map +1 -0
  196. package/dist/esm/lib/injection-engine/startRuleClaim.d.ts +91 -0
  197. package/dist/esm/lib/injection-engine/startRuleClaim.js +78 -0
  198. package/dist/esm/lib/injection-engine/startRuleClaim.js.map +1 -0
  199. package/dist/esm/lib/injection-engine/toolOutcome.d.ts +12 -3
  200. package/dist/esm/lib/injection-engine/toolOutcome.js +2 -1
  201. package/dist/esm/lib/injection-engine/toolOutcome.js.map +1 -1
  202. package/dist/events/dispatcher.js.map +1 -1
  203. package/dist/events/registry.js +10 -0
  204. package/dist/events/registry.js.map +1 -1
  205. package/dist/hosting/conformance/cases.js +229 -22
  206. package/dist/hosting/conformance/cases.js.map +1 -1
  207. package/dist/hosting/errors.js +42 -1
  208. package/dist/hosting/errors.js.map +1 -1
  209. package/dist/hosting/index.js +18 -2
  210. package/dist/hosting/index.js.map +1 -1
  211. package/dist/hosting/memorySessions.js +39 -0
  212. package/dist/hosting/memorySessions.js.map +1 -1
  213. package/dist/hosting/sessionRetention.js +73 -0
  214. package/dist/hosting/sessionRetention.js.map +1 -0
  215. package/dist/hosting/sqliteSessions.js +51 -0
  216. package/dist/hosting/sqliteSessions.js.map +1 -1
  217. package/dist/hosting/types.js +10 -1
  218. package/dist/hosting/types.js.map +1 -1
  219. package/dist/hosting-providers.js +21 -11
  220. package/dist/hosting-providers.js.map +1 -1
  221. package/dist/index.js +72 -43
  222. package/dist/index.js.map +1 -1
  223. package/dist/lib/context-bisect/arms/apply.js +45 -0
  224. package/dist/lib/context-bisect/arms/apply.js.map +1 -0
  225. package/dist/lib/context-bisect/arms/compare.js +116 -0
  226. package/dist/lib/context-bisect/arms/compare.js.map +1 -0
  227. package/dist/lib/context-bisect/arms/index.js +35 -0
  228. package/dist/lib/context-bisect/arms/index.js.map +1 -0
  229. package/dist/lib/context-bisect/arms/manifest.js +207 -0
  230. package/dist/lib/context-bisect/arms/manifest.js.map +1 -0
  231. package/dist/lib/context-bisect/arms/probe.js +132 -0
  232. package/dist/lib/context-bisect/arms/probe.js.map +1 -0
  233. package/dist/lib/context-bisect/arms/types.js +68 -0
  234. package/dist/lib/context-bisect/arms/types.js.map +1 -0
  235. package/dist/lib/context-bisect/arms/validate.js +128 -0
  236. package/dist/lib/context-bisect/arms/validate.js.map +1 -0
  237. package/dist/lib/context-bisect/arms/verdict.js +107 -0
  238. package/dist/lib/context-bisect/arms/verdict.js.map +1 -0
  239. package/dist/lib/context-bisect/index.js +23 -1
  240. package/dist/lib/context-bisect/index.js.map +1 -1
  241. package/dist/lib/injection-engine/index.js +4 -1
  242. package/dist/lib/injection-engine/index.js.map +1 -1
  243. package/dist/lib/injection-engine/skillExamples.js +24 -68
  244. package/dist/lib/injection-engine/skillExamples.js.map +1 -1
  245. package/dist/lib/injection-engine/skillGraph.js +52 -1
  246. package/dist/lib/injection-engine/skillGraph.js.map +1 -1
  247. package/dist/lib/injection-engine/skillGraphCheckup.js.map +1 -1
  248. package/dist/lib/injection-engine/skillNeverRoutes.js +234 -0
  249. package/dist/lib/injection-engine/skillNeverRoutes.js.map +1 -0
  250. package/dist/lib/injection-engine/skillPartition.js +277 -0
  251. package/dist/lib/injection-engine/skillPartition.js.map +1 -0
  252. package/dist/lib/injection-engine/skillsFromDir.js +121 -9
  253. package/dist/lib/injection-engine/skillsFromDir.js.map +1 -1
  254. package/dist/lib/injection-engine/skillsFromDirRoutes.js +174 -0
  255. package/dist/lib/injection-engine/skillsFromDirRoutes.js.map +1 -0
  256. package/dist/lib/injection-engine/startRuleClaim.js +85 -0
  257. package/dist/lib/injection-engine/startRuleClaim.js.map +1 -0
  258. package/dist/lib/injection-engine/toolOutcome.js +2 -1
  259. package/dist/lib/injection-engine/toolOutcome.js.map +1 -1
  260. package/dist/types/adapters/hosting/agentcore.d.ts +8 -0
  261. package/dist/types/adapters/hosting/agentcore.d.ts.map +1 -1
  262. package/dist/types/adapters/hosting/firestoreSessions.d.ts +162 -14
  263. package/dist/types/adapters/hosting/firestoreSessions.d.ts.map +1 -1
  264. package/dist/types/adapters/hosting/googleAgentEngine.d.ts +16 -1
  265. package/dist/types/adapters/hosting/googleAgentEngine.d.ts.map +1 -1
  266. package/dist/types/artifacts/conformance/cases.d.ts.map +1 -1
  267. package/dist/types/artifacts/scopePath.d.ts +31 -0
  268. package/dist/types/artifacts/scopePath.d.ts.map +1 -1
  269. package/dist/types/core/Agent.d.ts +8 -1
  270. package/dist/types/core/Agent.d.ts.map +1 -1
  271. package/dist/types/core/agent/AgentBuilder.d.ts +43 -0
  272. package/dist/types/core/agent/AgentBuilder.d.ts.map +1 -1
  273. package/dist/types/core/agent/buildAgentChart.d.ts +9 -0
  274. package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
  275. package/dist/types/core/agent/buildDynamicAgentChart.d.ts.map +1 -1
  276. package/dist/types/core/agent/coverage/absent.d.ts +105 -0
  277. package/dist/types/core/agent/coverage/absent.d.ts.map +1 -0
  278. package/dist/types/core/agent/coverage/answer.d.ts +47 -0
  279. package/dist/types/core/agent/coverage/answer.d.ts.map +1 -0
  280. package/dist/types/core/agent/coverage/evidence.d.ts +69 -0
  281. package/dist/types/core/agent/coverage/evidence.d.ts.map +1 -0
  282. package/dist/types/core/agent/coverage/index.d.ts +18 -0
  283. package/dist/types/core/agent/coverage/index.d.ts.map +1 -0
  284. package/dist/types/core/agent/coverage/items.d.ts +36 -0
  285. package/dist/types/core/agent/coverage/items.d.ts.map +1 -0
  286. package/dist/types/core/agent/coverage/ledger.d.ts +81 -0
  287. package/dist/types/core/agent/coverage/ledger.d.ts.map +1 -0
  288. package/dist/types/core/agent/coverage/read.d.ts +52 -0
  289. package/dist/types/core/agent/coverage/read.d.ts.map +1 -0
  290. package/dist/types/core/agent/coverage/types.d.ts +143 -0
  291. package/dist/types/core/agent/coverage/types.d.ts.map +1 -0
  292. package/dist/types/core/agent/evidence/evidenceIndex.d.ts +7 -0
  293. package/dist/types/core/agent/evidence/evidenceIndex.d.ts.map +1 -1
  294. package/dist/types/core/agent/stages/prepareFinal.d.ts +18 -0
  295. package/dist/types/core/agent/stages/prepareFinal.d.ts.map +1 -1
  296. package/dist/types/core/agent/stages/toolCalls.d.ts.map +1 -1
  297. package/dist/types/core/agent/toolEffects.d.ts +2 -2
  298. package/dist/types/core/agent/types.d.ts +14 -0
  299. package/dist/types/core/agent/types.d.ts.map +1 -1
  300. package/dist/types/core/outputFallback.d.ts +15 -1
  301. package/dist/types/core/outputFallback.d.ts.map +1 -1
  302. package/dist/types/debug.d.ts +1 -0
  303. package/dist/types/debug.d.ts.map +1 -1
  304. package/dist/types/events/dispatcher.d.ts +1 -1
  305. package/dist/types/events/dispatcher.d.ts.map +1 -1
  306. package/dist/types/events/payloads.d.ts +82 -0
  307. package/dist/types/events/payloads.d.ts.map +1 -1
  308. package/dist/types/events/registry.d.ts +11 -1
  309. package/dist/types/events/registry.d.ts.map +1 -1
  310. package/dist/types/hosting/conformance/cases.d.ts +2 -1
  311. package/dist/types/hosting/conformance/cases.d.ts.map +1 -1
  312. package/dist/types/hosting/conformance/types.d.ts +7 -7
  313. package/dist/types/hosting/conformance/types.d.ts.map +1 -1
  314. package/dist/types/hosting/errors.d.ts +28 -0
  315. package/dist/types/hosting/errors.d.ts.map +1 -1
  316. package/dist/types/hosting/index.d.ts +11 -3
  317. package/dist/types/hosting/index.d.ts.map +1 -1
  318. package/dist/types/hosting/memorySessions.d.ts.map +1 -1
  319. package/dist/types/hosting/sessionRetention.d.ts +57 -0
  320. package/dist/types/hosting/sessionRetention.d.ts.map +1 -0
  321. package/dist/types/hosting/sqliteSessions.d.ts +11 -1
  322. package/dist/types/hosting/sqliteSessions.d.ts.map +1 -1
  323. package/dist/types/hosting/types.d.ts +184 -0
  324. package/dist/types/hosting/types.d.ts.map +1 -1
  325. package/dist/types/hosting-providers.d.ts +15 -11
  326. package/dist/types/hosting-providers.d.ts.map +1 -1
  327. package/dist/types/index.d.ts +1 -0
  328. package/dist/types/index.d.ts.map +1 -1
  329. package/dist/types/lib/context-bisect/arms/apply.d.ts +55 -0
  330. package/dist/types/lib/context-bisect/arms/apply.d.ts.map +1 -0
  331. package/dist/types/lib/context-bisect/arms/compare.d.ts +28 -0
  332. package/dist/types/lib/context-bisect/arms/compare.d.ts.map +1 -0
  333. package/dist/types/lib/context-bisect/arms/index.d.ts +17 -0
  334. package/dist/types/lib/context-bisect/arms/index.d.ts.map +1 -0
  335. package/dist/types/lib/context-bisect/arms/manifest.d.ts +80 -0
  336. package/dist/types/lib/context-bisect/arms/manifest.d.ts.map +1 -0
  337. package/dist/types/lib/context-bisect/arms/probe.d.ts +55 -0
  338. package/dist/types/lib/context-bisect/arms/probe.d.ts.map +1 -0
  339. package/dist/types/lib/context-bisect/arms/types.d.ts +320 -0
  340. package/dist/types/lib/context-bisect/arms/types.d.ts.map +1 -0
  341. package/dist/types/lib/context-bisect/arms/validate.d.ts +27 -0
  342. package/dist/types/lib/context-bisect/arms/validate.d.ts.map +1 -0
  343. package/dist/types/lib/context-bisect/arms/verdict.d.ts +54 -0
  344. package/dist/types/lib/context-bisect/arms/verdict.d.ts.map +1 -0
  345. package/dist/types/lib/context-bisect/index.d.ts +1 -0
  346. package/dist/types/lib/context-bisect/index.d.ts.map +1 -1
  347. package/dist/types/lib/injection-engine/index.d.ts +1 -1
  348. package/dist/types/lib/injection-engine/index.d.ts.map +1 -1
  349. package/dist/types/lib/injection-engine/skillExamples.d.ts +16 -13
  350. package/dist/types/lib/injection-engine/skillExamples.d.ts.map +1 -1
  351. package/dist/types/lib/injection-engine/skillGraph.d.ts +50 -0
  352. package/dist/types/lib/injection-engine/skillGraph.d.ts.map +1 -1
  353. package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts +6 -5
  354. package/dist/types/lib/injection-engine/skillGraphCheckup.d.ts.map +1 -1
  355. package/dist/types/lib/injection-engine/skillNeverRoutes.d.ts +132 -0
  356. package/dist/types/lib/injection-engine/skillNeverRoutes.d.ts.map +1 -0
  357. package/dist/types/lib/injection-engine/skillPartition.d.ts +70 -0
  358. package/dist/types/lib/injection-engine/skillPartition.d.ts.map +1 -0
  359. package/dist/types/lib/injection-engine/skillsFromDir.d.ts +83 -3
  360. package/dist/types/lib/injection-engine/skillsFromDir.d.ts.map +1 -1
  361. package/dist/types/lib/injection-engine/skillsFromDirRoutes.d.ts +106 -0
  362. package/dist/types/lib/injection-engine/skillsFromDirRoutes.d.ts.map +1 -0
  363. package/dist/types/lib/injection-engine/startRuleClaim.d.ts +92 -0
  364. package/dist/types/lib/injection-engine/startRuleClaim.d.ts.map +1 -0
  365. package/dist/types/lib/injection-engine/toolOutcome.d.ts +12 -3
  366. package/dist/types/lib/injection-engine/toolOutcome.d.ts.map +1 -1
  367. package/package.json +1 -1
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * skillsFromDirRoutes — the `routes:` half of the on-disk runbook grammar.
4
+ *
5
+ * ## What a file may say about routing, and why it is this little
6
+ *
7
+ * `skillsFromDir` reads prose, `tools:` and `steps:` — everything about ONE
8
+ * skill — and stopped exactly where the value was supposed to start: the
9
+ * routing. A directory of runbooks still had to be hand-wired into a graph in
10
+ * code, which is the work the graph exists to remove.
11
+ *
12
+ * This module adds the missing key under the SAME security law the tools list
13
+ * follows: **the file PICKS, it never DEFINES.**
14
+ *
15
+ * ---
16
+ * name: billing
17
+ * tools: lookup_order, issue_refund
18
+ * routes:
19
+ * - escalation: on issue_refund status=denied
20
+ * - receipts: on issue_refund
21
+ * - audit
22
+ * ---
23
+ *
24
+ * A route names a SKILL ID and, optionally, a guard. Both halves are picks:
25
+ *
26
+ * • the id is resolved against the skills THIS DIRECTORY declares — an id
27
+ * nothing here declares is refused at load, by name, listing what is
28
+ * available. Never a half-graph: one bad id fails the whole load, because
29
+ * a graph missing one edge routes silently wrong, which is worse than a
30
+ * graph that refuses to exist;
31
+ * • the guard is one of the two DATA conditions a route already has
32
+ * (`onToolReturn`, `onToolStatus`), and the tool it names must be one of
33
+ * this file's own `tools:` — the same law `steps:` follows, for the same
34
+ * reason (an edge out of this skill fires on this skill's work).
35
+ *
36
+ * Nothing is evaluated, imported or resolved as a path. The strings can only
37
+ * MATCH — against ids the loader already read off disk and against a closed
38
+ * status vocabulary.
39
+ *
40
+ * ## What a file CANNOT express, said plainly
41
+ *
42
+ * A `when:` predicate is CODE. There is no honest way for a markdown file to
43
+ * carry it: reading one would mean evaluating a string, which is the one thing
44
+ * this loader exists never to do. So the grammar has no `when` and no
45
+ * expression language of any kind — a conditional a file cannot express is a
46
+ * conditional that stays in code:
47
+ *
48
+ * skillGraph({ skills, steps: [{ from: 'billing', to: 'escalation',
49
+ * when: r => JSON.parse(r.result).tier > 2 }] });
50
+ *
51
+ * Anything that is not one of the three forms is refused with the whole grammar
52
+ * quoted, rather than half-understood by a parser inventing a mini-language.
53
+ *
54
+ * Zone: HOST (it belongs to the file loader). Pure over strings all the same —
55
+ * it reads no filesystem; `skillsFromDir.ts` hands it the parsed lines.
56
+ */
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.toGraphSteps = exports.readDeclaredRoutes = void 0;
59
+ const toolOutcome_js_1 = require("./toolOutcome.js");
60
+ /** The grammar, quoted back by every refusal — one string, so the three forms
61
+ * can never be described two different ways. */
62
+ const ROUTE_GRAMMAR = ' - <skill> (no guard — a model edge: the graph draws it and ' +
63
+ 'read_skill may take it)\n' +
64
+ " - <skill>: on <tool_name> (this skill's own tool returned)\n" +
65
+ ' - <skill>: status=denied (a tool of this skill declared that outcome)\n' +
66
+ ' - <skill>: on <tool_name> status=denied,failure\n' +
67
+ `Statuses: ${toolOutcome_js_1.TOOL_RESULT_STATUSES.join(', ')}.`;
68
+ /** `on <tool>`, `status=a,b`, or both in that order. Anything else is refused. */
69
+ const GUARD_RE = /^(?:on\s+([A-Za-z0-9_-]+))?\s*(?:status=([A-Za-z,\s]+))?$/;
70
+ /**
71
+ * Read one file's `routes:` items into declared routes, refusing every shape
72
+ * the grammar does not carry. Pure; every message names the file and the line,
73
+ * because "malformed routes" over a directory of forty runbooks has told the
74
+ * author nothing.
75
+ *
76
+ * @param items the `routes:` block-list items, in file order.
77
+ * @param file the path, quoted by every refusal.
78
+ * @param toolNames this file's own `tools:` — a guard may only name one of
79
+ * them (undefined when the file declared no tools at all).
80
+ */
81
+ function readDeclaredRoutes(items, file, toolNames) {
82
+ if (items.length === 0) {
83
+ throw new Error(`skillsFromDir: '${file}' declares 'routes' with no items. Say what you mean and omit ` +
84
+ `the key — a skill that routes nowhere is byte-identical to one that never heard of ` +
85
+ `routes. Otherwise:\nroutes:\n${ROUTE_GRAMMAR}`);
86
+ }
87
+ const declared = new Set(toolNames ?? []);
88
+ const seen = new Set();
89
+ return items.map((item) => {
90
+ if (item.key.length === 0) {
91
+ throw new Error(`skillsFromDir: '${file}' line ${item.line}: this route names no skill. Every route ` +
92
+ `is:\n${ROUTE_GRAMMAR}`);
93
+ }
94
+ if (seen.has(item.key)) {
95
+ throw new Error(`skillsFromDir: '${file}' line ${item.line}: routes to '${item.key}' twice. Two edges ` +
96
+ `between the same pair means the first one that fires wins and the second is dead ` +
97
+ `wiring — keep the guard you meant, and drop the other.`);
98
+ }
99
+ seen.add(item.key);
100
+ const guard = item.value?.trim() ?? '';
101
+ if (guard.length === 0)
102
+ return { to: item.key, line: item.line };
103
+ const parsed = GUARD_RE.exec(guard);
104
+ const toolName = parsed?.[1];
105
+ const statusList = parsed?.[2];
106
+ if (parsed === null || (toolName === undefined && statusList === undefined)) {
107
+ throw new Error(`skillsFromDir: '${file}' line ${item.line}: the route to '${item.key}' declares the ` +
108
+ `guard '${guard}', which this grammar cannot express. A SKILL.md PICKS, it never ` +
109
+ `DEFINES — a \`when\` predicate is code, and nothing in a SKILL.md is ever ` +
110
+ `evaluated, so the only guards a file can carry are the two DATA conditions a route ` +
111
+ `already has:\n${ROUTE_GRAMMAR}\nA conditional a file cannot express stays in code: ` +
112
+ `skillGraph({ skills, steps: [{ from: '<this skill>', to: '${item.key}', when: r => ` +
113
+ `… }] }).`);
114
+ }
115
+ if (toolName !== undefined && !declared.has(toolName)) {
116
+ throw new Error(`skillsFromDir: '${file}' line ${item.line}: the route to '${item.key}' fires on ` +
117
+ `'${toolName}', which is not in this file's 'tools'${toolNames === undefined ? ' (this file declares none)' : ` (${toolNames.join(', ')})`}. An edge out of this skill fires on THIS skill's work, so it may only name a tool ` +
118
+ `the skill carries — add it to 'tools:', fix the name, or declare this edge in code ` +
119
+ `where the whole agent's tools are in hand.`);
120
+ }
121
+ const statuses = (statusList ?? '')
122
+ .split(',')
123
+ .map((s) => s.trim())
124
+ .filter((s) => s.length > 0);
125
+ for (const status of statuses) {
126
+ if (!toolOutcome_js_1.TOOL_RESULT_STATUSES.includes(status)) {
127
+ throw new Error(`skillsFromDir: '${file}' line ${item.line}: the route to '${item.key}' names the ` +
128
+ `status '${status}', which is not one this library has. The vocabulary is closed ` +
129
+ `so both sides spell an outcome identically: ${toolOutcome_js_1.TOOL_RESULT_STATUSES.join(', ')}.`);
130
+ }
131
+ }
132
+ return {
133
+ to: item.key,
134
+ ...(toolName !== undefined && { onToolReturn: toolName }),
135
+ ...(statuses.length > 0 && { onToolStatus: statuses }),
136
+ line: item.line,
137
+ };
138
+ });
139
+ }
140
+ exports.readDeclaredRoutes = readDeclaredRoutes;
141
+ /**
142
+ * Resolve one file's declared routes into graph steps, refusing an id no
143
+ * SKILL.md in the directory declares.
144
+ *
145
+ * The refusal lists what IS available and fails the whole load. A route to a
146
+ * name nothing declares is the one mistake that cannot be reported later: the
147
+ * loader would return a skill set the graph then wires with a missing edge, and
148
+ * a graph that silently does not route is exactly the failure the check-up
149
+ * exists to prevent. Half a graph is not a smaller version of the graph.
150
+ *
151
+ * @param from the id of the skill whose file declared these routes.
152
+ * @param file that skill's path, quoted by the refusal.
153
+ * @param known every skill id the directory declared.
154
+ */
155
+ function toGraphSteps(from, routes, file, known) {
156
+ return routes.map((route) => {
157
+ if (!known.has(route.to)) {
158
+ const available = [...known].sort().join(', ');
159
+ throw new Error(`skillsFromDir: '${file}' line ${route.line} routes to '${route.to}', which no ` +
160
+ `SKILL.md in this directory declares. A route NAMES a skill; a file can never ` +
161
+ `define one, so an unresolved id would leave you a graph with a missing edge that ` +
162
+ `nothing routes and nothing reports. Available skills: ${available}. Fix the name, ` +
163
+ `add the skill folder, or declare this edge in code.`);
164
+ }
165
+ return {
166
+ from,
167
+ to: route.to,
168
+ ...(route.onToolReturn !== undefined && { onToolReturn: route.onToolReturn }),
169
+ ...(route.onToolStatus !== undefined && { onToolStatus: route.onToolStatus }),
170
+ };
171
+ });
172
+ }
173
+ exports.toGraphSteps = toGraphSteps;
174
+ //# sourceMappingURL=skillsFromDirRoutes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillsFromDirRoutes.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/skillsFromDirRoutes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ /**
3
+ * startRuleClaim — WHO CLAIMS A PHRASE. The one place that answers it.
4
+ *
5
+ * Two check-ups ask the same question of a graph's start rules and want
6
+ * opposite answers:
7
+ *
8
+ * • `skillExamples.ts` declares a phrase and asserts THIS rule claims it;
9
+ * • `skillNeverRoutes.ts` declares a phrase and asserts NO rule claims it.
10
+ *
11
+ * The question underneath is identical — run the compiled conditions over one
12
+ * concrete phrase, on the context a turn's first iteration really hands a start
13
+ * rule, and see who says yes. Two copies of that would drift the moment one of
14
+ * them learned something about the router the other did not, and the two would
15
+ * then disagree about the same graph. So it lives here, once, and the modules
16
+ * that report keep only their own sentences.
17
+ *
18
+ * Nothing here decides SEVERITY or writes a message — that is the reporting
19
+ * module's job, because the same "no" means different things to a positive and
20
+ * a negative assertion. This module only runs predicates and names conditions.
21
+ *
22
+ * Zone: PURE CORE (no engine, no loop). Pinned by
23
+ * `test/lib/injection-engine/skill-graph-fence.test.ts`.
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.claimLaws = exports.describeCondition = exports.COLD_CONTEXT_PHRASE = exports.coldContext = exports.runsOn = void 0;
27
+ const skillMatch_js_1 = require("./skillMatch.js");
28
+ /**
29
+ * Run one entry's condition over one phrase, on a COLD-START context — the
30
+ * context a turn's first iteration really hands a start rule: iteration 1, the
31
+ * phrase as `userMessage`, no history, no cursor, no tool results. A throw is
32
+ * reported as `'threw'` and treated as a no-match by every caller, which is
33
+ * exactly what the cursor resolver does with it at run time (so a claim made
34
+ * here stays true of the run).
35
+ *
36
+ * An entry with NO condition matches everything: that is the cold walk's law
37
+ * (`if (!e.when) return { to: e.id }`), not a shortcut.
38
+ */
39
+ function runsOn(entry, phrase) {
40
+ if (entry.when === undefined)
41
+ return 'match';
42
+ try {
43
+ return entry.when(coldContext(phrase)) ? 'match' : 'no-match';
44
+ }
45
+ catch {
46
+ return 'threw';
47
+ }
48
+ }
49
+ exports.runsOn = runsOn;
50
+ /** The one context every predicate in a phrase check is judged on. */
51
+ function coldContext(userMessage) {
52
+ return { iteration: 1, userMessage, history: [], activatedInjectionIds: [] };
53
+ }
54
+ exports.coldContext = coldContext;
55
+ /** The one context every predicate here is judged on, spelled out for the
56
+ * reader of a message — a check that names its own inputs can be argued with;
57
+ * one that hides them can only be guessed at. Kept as ONE string so every
58
+ * message describes the SAME context {@link coldContext} really builds. */
59
+ exports.COLD_CONTEXT_PHRASE = 'a COLD-START context (iteration 1, the phrase as `userMessage`, empty `history`, no ' +
60
+ 'cursor and no activated injections)';
61
+ /** How a rule's condition is named in a message: the data matcher quoted back,
62
+ * the honest word for opaque code — or, for an entry that declares neither,
63
+ * what having no condition MEANS. Naming a `when` predicate an unconditional
64
+ * entry does not have is how a report describes a graph nobody wrote. */
65
+ function describeCondition(entry) {
66
+ if (entry.match !== undefined)
67
+ return `its matcher \`${(0, skillMatch_js_1.plainMatchCaption)(entry.match)}\``;
68
+ return entry.when === undefined
69
+ ? 'declares no `match` and no `when`, so it claims every message'
70
+ : 'its `when` predicate';
71
+ }
72
+ exports.describeCondition = describeCondition;
73
+ /** Build both laws' claim finders over one entry list, in declaration order. */
74
+ function claimLaws(entries) {
75
+ const nonIntent = entries
76
+ .map((entry, index) => ({ entry, index }))
77
+ .filter(({ entry }) => entry.match?.kind !== 'intent');
78
+ const ruleClaimants = nonIntent.filter(({ entry }) => entry.when !== undefined);
79
+ return {
80
+ underColdWalk: (phrase) => nonIntent.find(({ entry }) => runsOn(entry, phrase) === 'match'),
81
+ underCascade: (phrase) => ruleClaimants.find(({ entry }) => runsOn(entry, phrase) === 'match'),
82
+ };
83
+ }
84
+ exports.claimLaws = claimLaws;
85
+ //# sourceMappingURL=startRuleClaim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startRuleClaim.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/startRuleClaim.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAGH,mDAAyE;AAiBzE;;;;;;;;;;GAUG;AACH,SAAgB,MAAM,CAAC,KAAoB,EAAE,MAAc;IACzD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAPD,wBAOC;AAED,sEAAsE;AACtE,SAAgB,WAAW,CAAC,WAAmB;IAC7C,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;AAC/E,CAAC;AAFD,kCAEC;AAED;;;4EAG4E;AAC/D,QAAA,mBAAmB,GAC9B,sFAAsF;IACtF,qCAAqC,CAAC;AAQxC;;;0EAG0E;AAC1E,SAAgB,iBAAiB,CAAC,KAAoB;IACpD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,iBAAiB,IAAA,iCAAiB,EAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1F,OAAO,KAAK,CAAC,IAAI,KAAK,SAAS;QAC7B,CAAC,CAAC,+DAA+D;QACjE,CAAC,CAAC,sBAAsB,CAAC;AAC7B,CAAC;AALD,8CAKC;AAwBD,gFAAgF;AAChF,SAAgB,SAAS,CAAC,OAAiC;IACzD,MAAM,SAAS,GAAG,OAAO;SACtB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACzC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAChF,OAAO;QACL,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;QAC3F,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC;KAC/F,CAAC;AACJ,CAAC;AATD,8BASC"}
@@ -11,7 +11,7 @@
11
11
  * tool-effects module for one string union: the loop's vocabulary embedded
12
12
  * in the graph's contract, pointing the dependency the wrong way.
13
13
  *
14
- * So the six words moved DOWN here — a module with zero imports that both
14
+ * So the words moved DOWN here — a module with zero imports that both
15
15
  * sides read. `core/agent/toolEffects.ts` re-exports them under the same
16
16
  * names, so every existing import path is unchanged; that module remains
17
17
  * the owner of the ENVELOPE grammar (the two effect kinds, the recognizer,
@@ -30,5 +30,6 @@ exports.TOOL_RESULT_STATUSES = [
30
30
  'invalid',
31
31
  'partial',
32
32
  'pending',
33
+ 'absent',
33
34
  ];
34
35
  //# sourceMappingURL=toolOutcome.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolOutcome.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/toolOutcome.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAUH,mEAAmE;AACtD,QAAA,oBAAoB,GAAgC;IAC/D,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC"}
1
+ {"version":3,"file":"toolOutcome.js","sourceRoot":"","sources":["../../../src/lib/injection-engine/toolOutcome.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AA0BH,mEAAmE;AACtD,QAAA,oBAAoB,GAAgC;IAC/D,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;IACT,SAAS;IACT,SAAS;IACT,QAAQ;CACT,CAAC"}
@@ -320,6 +320,14 @@ export type AgentCoreSessionsOptions = AgentCoreFileSessionsOptions | AgentCoreM
320
320
  * refused by name too (`UnreadableEnvelopeError`), never answered with a fresh
321
321
  * start. Only a session that was never written hydrates as `undefined`.
322
322
  *
323
+ * **The two modes differ on retention (9.42.0), and the difference is
324
+ * reported rather than smoothed over.** `'session-storage'` owns its file, so
325
+ * it implements the port's optional `retention()` as a sweep you call.
326
+ * `'memory'` appends events to a service whose expiry belongs to the memory
327
+ * resource an operator configured, and this shim has no delete on its surface
328
+ * — so it implements no retention member at all, and `sessionRetention()`
329
+ * refuses BY NAME rather than reporting a sweep that would delete nothing.
330
+ *
323
331
  * @example Survive a stop/resume, no AWS SDK required
324
332
  * agentCoreSessions({ store: 'session-storage' });
325
333
  *
@@ -1 +1 @@
1
- {"version":3,"file":"agentcore.d.ts","sourceRoot":"","sources":["../../../../src/adapters/hosting/agentcore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentcore.d.ts","sourceRoot":"","sources":["../../../../src/adapters/hosting/agentcore.ts"],"names":[],"mappings":"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"}
@@ -11,9 +11,9 @@
11
11
  * containers, one conversation" answer Google has.
12
12
  *
13
13
  * ── The shape, said plainly ─────────────────────────────────────────────────
14
- * One collection. One document per session. Six fields:
14
+ * One collection. One document per session. Seven fields:
15
15
  *
16
- * sessionId · format · savedAt · envelope · owner · messageCount
16
+ * sessionId · format · savedAt · envelope · owner · messageCount · expiresAt
17
17
  *
18
18
  * That is the SQLite table, moved. It is deliberately the same shape, because
19
19
  * the two stores implement the same port under the same laws, and a reader who
@@ -95,6 +95,45 @@
95
95
  * in, and names those fields rather than restating the service's message — see
96
96
  * {@link firestoreFailure} for why no Google text is ever echoed here.
97
97
  *
98
+ * ── Retention: a SECOND timestamp, not a converted one (9.42.0) ─────────────
99
+ * A native Firestore TTL policy deletes a document when a field of type
100
+ * **Timestamp** is in the past. `savedAt` is a NUMBER — epoch milliseconds —
101
+ * so until this release an operator could not point a policy at this
102
+ * collection at all without a library change. The fix is a second field,
103
+ * `expiresAt`, written as a `Date` (the client stores one as a Timestamp) on
104
+ * every persist, holding `savedAt + expireAfterMs`. Give the store no
105
+ * `expireAfterMs` and the field is written as `null`, which a TTL policy
106
+ * ignores, and nothing about this release changes.
107
+ *
108
+ * **`savedAt` was NOT converted, and that is the load-bearing decision.** It is
109
+ * the ordering key of the composite index, the field the listing sorts by, and
110
+ * the first half of every cursor this store has ever minted (`<savedAt>:<docId>`,
111
+ * parsed with `parseFloat` and handed back to `startAfter` as a number).
112
+ * Converting it would have meant a new index, a new cursor grammar, and every
113
+ * pagination token issued by an earlier release becoming unreadable — but the
114
+ * decisive one is quieter: **Firestore's value ordering sorts by TYPE first.**
115
+ * Every number sorts before every timestamp. A collection holding old
116
+ * number-`savedAt` documents beside new timestamp-`savedAt` ones would list
117
+ * them in two blocks, all of one type then all of the other, with a person's
118
+ * conversations silently out of order by the type of the field rather than by
119
+ * when they were written. A second field costs one small write per turn and
120
+ * has no such shadow.
121
+ *
122
+ * So the migration consequence, plainly:
123
+ *
124
+ * • **Every document already stored stays readable and listable.** Nothing
125
+ * about `savedAt`, the index, the cursor or the query changed, and a
126
+ * document written by 9.33–9.41 is read by this release unchanged.
127
+ * • **Old documents do not start expiring.** They carry no `expiresAt`, and
128
+ * a TTL policy ignores a document whose field is missing. A conversation
129
+ * that is still being used gains one on its next turn; a conversation
130
+ * nobody ever writes to again keeps living. If those matter, delete them
131
+ * by hand once (a query on `savedAt` plus `forget`, or a `gcloud`
132
+ * bulk-delete) — this adapter will not walk your collection behind your
133
+ * back.
134
+ * • **The policy is still yours to create.** `retention().enableWith` prints
135
+ * the exact command with your collection and database in it.
136
+ *
98
137
  * ── The ceiling, since a store should name its own ──────────────────────────
99
138
  * A Firestore document is capped at 1 MiB. A conversation whose stored envelope
100
139
  * approaches that is refused BY NAME before the write
@@ -122,8 +161,29 @@
122
161
  * for it. So the write is a transaction.
123
162
  *
124
163
  * ── How much of this is verified ────────────────────────────────────────────
125
- * **Contract-shaped and tested. NOT field-validated.** Nothing here has been run
126
- * against a live Firestore by this repository.
164
+ * **Field-validated except the ownership refusal (2026-08).** An independent
165
+ * field trial ran THIS adapter against a real Firestore and exercised seven of
166
+ * its eight areas live: the round trip, the server-side indexed listing with
167
+ * its document-name tiebreak and real cursor, the missing-index refusal, the
168
+ * hashed document name, the size ceiling, ownership derived from the envelope,
169
+ * and `forget`.
170
+ *
171
+ * The eighth is named because under-claiming and over-claiming are the same
172
+ * defect: **the refusal of a turn signed by somebody else** — the
173
+ * `resolveSessionOwner` conflict this file's `persist` raises out of the
174
+ * transaction — was NOT exercised, because it did not exist when the trial
175
+ * ran. It is held by tests here, including the contested-write case of the
176
+ * shared conformance battery, and by nothing in the field. Two writers racing
177
+ * for one fresh session against a real Firestore, with the real client's
178
+ * transaction retry underneath, is exactly the shape a double models by
179
+ * assumption; the sibling Vertex adapter's equivalent was found in the field
180
+ * and not in a test suite.
181
+ *
182
+ * This section said "NOT field-validated. Nothing here has been run against a
183
+ * live Firestore" for two releases after that stopped being true. Under-claiming
184
+ * is the safe direction and it is still the same defect class the trials keep
185
+ * reporting: a status that does not track the evidence is a status nobody can
186
+ * use, whichever way it is wrong.
127
187
  *
128
188
  * The pin is the `firestoreSessions` row of `GOOGLE_SURFACE_PINS` in
129
189
  * `test/adapters/google/googlePin.ts`, asserted by
@@ -148,7 +208,8 @@
148
208
  * everywhere. That the row spells those members the way Google does is held by a
149
209
  * hand check against a real install, not by a test that runs here.
150
210
  *
151
- * The DESIGN is informed by an independent field trial of a different Firestore
211
+ * The DESIGN was informed, before any of that, by an EARLIER and separate trial
212
+ * of a DIFFERENT Firestore
152
213
  * session adapter, which ran against a real Firestore and passed eight ownership
153
214
  * and history checks — and whose own report named the defect this adapter does
154
215
  * not reproduce: that adapter read every document for one owner, sorted them in
@@ -158,7 +219,7 @@
158
219
  * real service; it proves nothing about this file's query, cursor, transaction
159
220
  * or index, because that adapter had none of them.
160
221
  */
161
- import type { SessionLifecycle } from '../../hosting/types.js';
222
+ import type { SessionExpiryPolicy, SessionLifecycle } from '../../hosting/types.js';
162
223
  /** One document as it came back. `firestore.d.ts` line 1605. */
163
224
  export interface FirestoreDocumentSnapshotLike {
164
225
  /** A PROPERTY, not a method — `readonly exists: boolean`. */
@@ -282,6 +343,39 @@ export interface FirestoreSessionsOptions {
282
343
  * still loading the module?" is a fair question to have answered here.
283
344
  */
284
345
  readonly firestore?: FirestoreLike;
346
+ /**
347
+ * How long after its last turn a conversation should expire, in
348
+ * milliseconds. Omit and nothing expires (9.42.0).
349
+ *
350
+ * Setting it makes every write stamp {@link EXPIRES_AT_FIELD} —
351
+ * `savedAt + expireAfterMs`, as a timestamp — which is the field a **native
352
+ * Firestore TTL policy** reads. The policy itself is yours to enable, once,
353
+ * with the command {@link FirestoreSessions.retention} hands you; this store
354
+ * writes what it reads and never deletes a document on a clock of its own.
355
+ * Both halves are needed and neither is silent about the other: with no
356
+ * policy the field is inert data, and with no `expireAfterMs` the policy has
357
+ * nothing to act on.
358
+ *
359
+ * **The clock is the conversation's own `savedAt`, not this process's.** So
360
+ * the expiry is IDLE time: every turn pushes it out, and a conversation dies
361
+ * `expireAfterMs` after somebody last spoke, which is what a session
362
+ * retention rule almost always means. It also makes the stamp a pure
363
+ * function of the envelope — the same conversation stamps the same instant
364
+ * on any machine, whatever its clock says.
365
+ *
366
+ * **It does not reach backwards.** Documents written before this was
367
+ * configured carry no expiry field, and a TTL policy ignores a document
368
+ * whose field is missing — so old conversations expire only once they are
369
+ * written again. See the module header for what to do about the ones that
370
+ * never will be.
371
+ *
372
+ * Named `expireAfterMs` rather than `ttlMs` deliberately, even though the
373
+ * artifact stores in this package spell their dial the second way: theirs is
374
+ * stamped once at mint and measured from creation, and this one is measured
375
+ * from the LAST turn and moves on every write. One word for two clocks would
376
+ * be the cheaper name and the more expensive mistake.
377
+ */
378
+ readonly expireAfterMs?: number;
285
379
  /**
286
380
  * @internal Test seam only — the `@google-cloud/firestore` module, injected.
287
381
  * Lets the suite exercise every path (including the refusals) without a
@@ -292,6 +386,34 @@ export interface FirestoreSessionsOptions {
292
386
  }
293
387
  /** Where sessions live when the caller names no collection. */
294
388
  export declare const DEFAULT_SESSION_COLLECTION = "agentfootprint_sessions";
389
+ /**
390
+ * The document field a native TTL policy is configured against (9.42.0).
391
+ *
392
+ * A SECOND field beside `savedAt`, never a change to it — see the module
393
+ * header for why converting the ordering key would have re-sorted every
394
+ * conversation already in the collection.
395
+ *
396
+ * Exported because an operator has to type this name into the console or the
397
+ * `gcloud` line, and a field name that lives only inside a string literal is a
398
+ * field name somebody will mistype at 2am.
399
+ */
400
+ export declare const EXPIRES_AT_FIELD = "expiresAt";
401
+ /**
402
+ * The one step that turns the TTL policy on, with this store's own collection
403
+ * and database already in it.
404
+ *
405
+ * One spelling, shared by the retention answer and the documentation that
406
+ * quotes it, for the same reason the missing-index refusal prints the whole
407
+ * `gcloud` line: the person reading it can fix this in sixty seconds, and only
408
+ * if nobody makes them go and look up the flags first.
409
+ *
410
+ * `--database` is always printed, including for `(default)`, where gcloud
411
+ * would have assumed it — a project may hold several databases, and a policy
412
+ * created on the wrong one leaves conversations living forever with nothing to
413
+ * suggest why. Single-quoted, because `(default)` is bare parentheses and a
414
+ * syntax error in every shell this will be pasted into.
415
+ */
416
+ export declare function ttlPolicyCommand(collection: string, database?: string): string;
295
417
  /**
296
418
  * Firestore's hard ceiling on one document, in bytes. Not ours — the service's.
297
419
  *
@@ -321,6 +443,21 @@ export interface FirestoreSessions extends SessionLifecycle {
321
443
  readonly collection: string;
322
444
  /** Forget one session. A session that was never there is not an error. */
323
445
  forget(sessionId: string): Promise<void>;
446
+ /**
447
+ * How conversations here stop existing: **the backend does it**, on a native
448
+ * TTL policy an operator enables once, against {@link EXPIRES_AT_FIELD}
449
+ * (9.42.0).
450
+ *
451
+ * Narrowed from the port's optional member to a required one, and to the one
452
+ * arm this store can be: a caller holding a `FirestoreSessions` needs no
453
+ * feature check and no branch, and gets a compile error rather than a
454
+ * runtime surprise if they reach for a sweep that does not exist here.
455
+ *
456
+ * `active` says whether this store was built with `expireAfterMs` and is
457
+ * therefore stamping anything; `enableWith` is the exact command, with this
458
+ * store's collection and database already filled in.
459
+ */
460
+ retention(): SessionExpiryPolicy;
324
461
  /**
325
462
  * The document name one session id maps to — the sha-256 above.
326
463
  *
@@ -401,20 +538,31 @@ export declare class EnvelopeTooLargeError extends Error {
401
538
  * Conversations in Firestore — a fleet-shared session store with no instance to
402
539
  * run.
403
540
  *
404
- * **Status: contract-shaped and tested, NOT field-validated.** Every SDK member
405
- * it calls was read off a real install of `@google-cloud/firestore` 9.0.0 and
406
- * hand-verified there; the test that re-checks those names against the real
407
- * package SKIPS in this repository, because the package is deliberately not
408
- * installed here. What runs in CI is the dispatch pin. No test here pretends to
409
- * have reached Google. See the module header for the full account, and for what
410
- * a field trial of a DIFFERENT adapter did and did not establish about this
411
- * design.
541
+ * **Status: field-validated except the ownership refusal (2026-08).** An
542
+ * independent field trial ran this adapter against a real Firestore and
543
+ * exercised seven of its eight areas live — round trip, indexed and cursored
544
+ * listing, the missing-index refusal, the hashed document name, the size
545
+ * ceiling, derived ownership and `forget`. The eighth, the refusal of a turn
546
+ * signed by somebody ELSE, was added after the trial and is held by tests
547
+ * here and by nothing in the field. Every SDK member it calls was read off a
548
+ * real install of `@google-cloud/firestore` 9.0.0 and hand-verified there; the
549
+ * test that re-checks those names against the real package SKIPS in this
550
+ * repository, because the package is deliberately not installed here. What
551
+ * runs in CI is the dispatch pin. See the module header for the full account.
412
552
  *
413
553
  * @throws FirestoreIndexMissingError from `listByUser` until the composite index
414
554
  * exists — see the module header for the exact index.
415
555
  * @throws EnvelopeTooLargeError from `persist` for a conversation above
416
556
  * {@link FIRESTORE_MAX_ENVELOPE_BYTES}. Never truncated.
417
557
  *
558
+ * @example Conversations that expire 30 days after their last turn
559
+ * const sessions = firestoreSessions({
560
+ * project: 'my-project',
561
+ * expireAfterMs: 30 * 24 * 60 * 60 * 1000,
562
+ * });
563
+ * // Then, ONCE, as an operator — the store prints the exact command:
564
+ * console.log(sessions.retention().enableWith);
565
+ *
418
566
  * @example A standing agent whose conversations are shared across instances
419
567
  * import { standingAgent, nodeHost } from 'agentfootprint/hosting';
420
568
  * import { firestoreSessions } from 'agentfootprint/hosting';
@@ -1 +1 @@
1
- {"version":3,"file":"firestoreSessions.d.ts","sourceRoot":"","sources":["../../../../src/adapters/hosting/firestoreSessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"firestoreSessions.d.ts","sourceRoot":"","sources":["../../../../src/adapters/hosting/firestoreSessions.ts"],"names":[],"mappings":"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"}
@@ -100,7 +100,7 @@
100
100
  * be read must never be answered with a fresh start — that failure is
101
101
  * indistinguishable, from the outside, from a brand-new user.
102
102
  */
103
- import type { CheckpointEnvelope, SessionLifecycle } from '../../hosting/types.js';
103
+ import type { CheckpointEnvelope, SessionExpiryPolicy, SessionLifecycle } from '../../hosting/types.js';
104
104
  import { type AiPlatformConnection } from '../google/aiPlatform.js';
105
105
  /**
106
106
  * The `sessionState` key the envelope lives under.
@@ -195,6 +195,21 @@ export interface AgentEngineSessions extends SessionLifecycle {
195
195
  readonly parent: string;
196
196
  /** Forget one session. A session that was never there is not an error. */
197
197
  forget(sessionId: string): Promise<void>;
198
+ /**
199
+ * How conversations here stop existing: **the service does it**, on the
200
+ * `ttl` this store was built with (9.42.0).
201
+ *
202
+ * Narrowed from the port's optional member to a required one, and to the one
203
+ * arm this store can be — a caller holding an `AgentEngineSessions` needs no
204
+ * feature check, and reaching for a sweep that does not exist here is a
205
+ * compile error rather than a surprise at 3am.
206
+ *
207
+ * There is nothing to call and nothing for a cron job to do. `active` says
208
+ * whether a `ttl` was given at all; `enableWith` says what to pass and
209
+ * repeats the two facts a caller has to plan around — the service's 24-hour
210
+ * floor, and that the value is sent on CREATE only.
211
+ */
212
+ retention(): SessionExpiryPolicy;
198
213
  /**
199
214
  * Stop using this store. Idempotent, and **final** — reading or writing
200
215
  * afterwards refuses by name rather than quietly reconnecting, because a
@@ -1 +1 @@
1
- {"version":3,"file":"googleAgentEngine.d.ts","sourceRoot":"","sources":["../../../../src/adapters/hosting/googleAgentEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqGG;AAKH,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAGjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAUL,KAAK,oBAAoB,EAI1B,MAAM,yBAAyB,CAAC;AAIjC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,KAAK,MAAM,CAAC,CAAC;IACzF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC;;;;;;;;OAQG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAkT5F"}
1
+ {"version":3,"file":"googleAgentEngine.d.ts","sourceRoot":"","sources":["../../../../src/adapters/hosting/googleAgentEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqGG;AAKH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAGjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAUL,KAAK,oBAAoB,EAI1B,MAAM,yBAAyB,CAAC;AAIjC;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,KAAK,MAAM,CAAC,CAAC;IACzF;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,6DAA6D;AAC7D,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,SAAS,IAAI,mBAAmB,CAAC;IACjC;;;;;;;;OAQG;IACH,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,mBAAmB,CAiV5F"}