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,90 @@
1
+ "use strict";
2
+ /**
3
+ * evidence — what an absence is allowed to GROUND.
4
+ *
5
+ * Pattern: one projection, one consumer (`evidence/evidenceIndex.ts`). The
6
+ * `evidence/frames.ts` argument applied to the other side of the
7
+ * conversation: there, text the library wrote into a `role: 'user'`
8
+ * turn must not become user-supplied evidence; here, text the MODEL
9
+ * supplied that a tool echoed back must not become tool evidence.
10
+ * Role: core/ layer, pure.
11
+ * Emits: N/A.
12
+ *
13
+ * ## The bug this file exists to prevent
14
+ *
15
+ * The evidence gate's corpus is every `role: 'tool'` result: a value the
16
+ * model read from a tool is grounded. An absence is a tool result — and its
17
+ * whole job is to say what was looked for, which in practice means quoting
18
+ * the arguments the model passed ("no FLOGI entries on fc1/3", where `fc1/3`
19
+ * came from the model, not from the fabric).
20
+ *
21
+ * Index that whole frame and an invented identifier becomes grounded by the
22
+ * one route that proves nothing about it: handing it to a tool that found
23
+ * nothing. The model could then assert "fc1/3 has no FLOGI entries" about a
24
+ * port it invented, and the gate would agree, because it saw the string in a
25
+ * tool result. **A failed lookup is the cheapest possible laundering
26
+ * machine**, and adding a primitive whose purpose is to make failed lookups
27
+ * informative would have made it cheaper still.
28
+ *
29
+ * So an absence grounds its COVERAGE and nothing else. `checked`,
30
+ * `not_checked` and `cannot_cover` are the tool's own words about the world —
31
+ * a fabric name, a collector, a window — and they are exactly what an answer
32
+ * built on an absence should be allowed to cite. `looked_for`, `try_instead`,
33
+ * the note and the marker are not.
34
+ *
35
+ * The consequence is deliberate and worth stating: if the USER named the
36
+ * thing, it is exempt anyway (their message is the exempt corpus), so a real
37
+ * question about a real port is unaffected. Only a value that appears *for
38
+ * the first time* in an absence loses its grounding — which is the only case
39
+ * where it was never evidence to begin with.
40
+ *
41
+ * ## What this does NOT close, said plainly
42
+ *
43
+ * The whitelist rests on "coverage is the tool's own words about the world".
44
+ * An author who interpolates an unvalidated argument into a coverage entry —
45
+ * a `checked` line built by string-interpolating the `switch` argument the
46
+ * model passed — puts a model-supplied token back into the corpus through the
47
+ * one list this file admits. That is narrower than the hole it closes (the
48
+ * author chose to echo, rather than the primitive echoing by design), and it
49
+ * is not detectable from here: this library cannot tell which characters of a
50
+ * sentence a tool composed and which it copied. The guidance is on the door
51
+ * itself — interpolate identifiers you RESOLVED, not identifiers you were
52
+ * handed. It is also the general limit of the evidence corpus, not a new one:
53
+ * any tool that echoes its arguments into its result has always grounded
54
+ * them.
55
+ */
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.absenceEvidenceProjection = void 0;
58
+ const absent_js_1 = require("./absent.js");
59
+ const ledger_js_1 = require("./ledger.js");
60
+ /** The coverage lists of one absence, as the only thing it grounds. */
61
+ function coverageOnly(absence) {
62
+ return [absence.checked ?? [], absence.not_checked ?? [], absence.cannot_cover ?? []];
63
+ }
64
+ /**
65
+ * Project a parsed tool result down to what it may ground, or `undefined`
66
+ * when it carries no absence frame — the ordinary case, which the caller
67
+ * indexes exactly as it always did.
68
+ *
69
+ * Two shapes carry one: a bare absence, and an absence bounded by a coverage
70
+ * ledger (`coverage(absent(…), …)`). A ledger's own lists are all tool
71
+ * prose, so they are indexed whole; only the absence inside it is narrowed.
72
+ * An absence buried deeper than that — inside a tool's own domain object —
73
+ * is NOT found, and is left indexed as ordinary data: this projection
74
+ * recognizes the shapes this library mints, and does not go hunting through
75
+ * values it did not write.
76
+ */
77
+ function absenceEvidenceProjection(parsed) {
78
+ const absence = (0, absent_js_1.readAbsence)(parsed);
79
+ if (absence !== undefined)
80
+ return coverageOnly(absence);
81
+ const covered = (0, ledger_js_1.readCoverageLedger)(parsed);
82
+ if (covered === undefined)
83
+ return undefined;
84
+ const inner = (0, absent_js_1.readAbsence)(covered.result);
85
+ if (inner === undefined)
86
+ return undefined;
87
+ return [covered.af_coverage, ...coverageOnly(inner)];
88
+ }
89
+ exports.absenceEvidenceProjection = absenceEvidenceProjection;
90
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../../../src/core/agent/coverage/evidence.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;;;AAEH,2CAA0C;AAC1C,2CAAiD;AAGjD,uEAAuE;AACvE,SAAS,YAAY,CAAC,OAAoB;IACxC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AACxF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,yBAAyB,CAAC,MAAe;IACvD,MAAM,OAAO,GAAG,IAAA,uBAAW,EAAC,MAAM,CAAC,CAAC;IACpC,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAA,8BAAkB,EAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AARD,8DAQC"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ /**
3
+ * The two coverage primitives — `absent()` and `coverage()`.
4
+ *
5
+ * The door: what the main barrel publishes, and the one import path the
6
+ * dispatch loop, the evidence index and the final-answer stage use. Both
7
+ * primitives came from FIELD USE — a production triage agent that had
8
+ * invented them because the library had no answer for either. See README.md
9
+ * for the arguments; nothing here is new machinery, it is a smaller version
10
+ * of what already worked.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.readCoverageResult = exports.readCoverageLedger = exports.coverageOfLedger = exports.COVERAGE_NOTE = exports.COVERAGE_MARKER = exports.coverage = exports.sameItem = exports.normalizeCoverageList = exports.mergeItems = exports.absenceEvidenceProjection = exports.COVERAGE_BLOCK_HEADING = exports.composeAnswerWithCoverage = exports.readAbsence = exports.coverageOfAbsence = exports.absent = exports.ABSENCE_NOTE = exports.ABSENCE_MARKER = void 0;
14
+ var absent_js_1 = require("./absent.js");
15
+ Object.defineProperty(exports, "ABSENCE_MARKER", { enumerable: true, get: function () { return absent_js_1.ABSENCE_MARKER; } });
16
+ Object.defineProperty(exports, "ABSENCE_NOTE", { enumerable: true, get: function () { return absent_js_1.ABSENCE_NOTE; } });
17
+ Object.defineProperty(exports, "absent", { enumerable: true, get: function () { return absent_js_1.absent; } });
18
+ Object.defineProperty(exports, "coverageOfAbsence", { enumerable: true, get: function () { return absent_js_1.coverageOfAbsence; } });
19
+ Object.defineProperty(exports, "readAbsence", { enumerable: true, get: function () { return absent_js_1.readAbsence; } });
20
+ var answer_js_1 = require("./answer.js");
21
+ Object.defineProperty(exports, "composeAnswerWithCoverage", { enumerable: true, get: function () { return answer_js_1.composeAnswerWithCoverage; } });
22
+ Object.defineProperty(exports, "COVERAGE_BLOCK_HEADING", { enumerable: true, get: function () { return answer_js_1.COVERAGE_BLOCK_HEADING; } });
23
+ var evidence_js_1 = require("./evidence.js");
24
+ Object.defineProperty(exports, "absenceEvidenceProjection", { enumerable: true, get: function () { return evidence_js_1.absenceEvidenceProjection; } });
25
+ var items_js_1 = require("./items.js");
26
+ Object.defineProperty(exports, "mergeItems", { enumerable: true, get: function () { return items_js_1.mergeItems; } });
27
+ Object.defineProperty(exports, "normalizeCoverageList", { enumerable: true, get: function () { return items_js_1.normalizeCoverageList; } });
28
+ Object.defineProperty(exports, "sameItem", { enumerable: true, get: function () { return items_js_1.sameItem; } });
29
+ var ledger_js_1 = require("./ledger.js");
30
+ Object.defineProperty(exports, "coverage", { enumerable: true, get: function () { return ledger_js_1.coverage; } });
31
+ Object.defineProperty(exports, "COVERAGE_MARKER", { enumerable: true, get: function () { return ledger_js_1.COVERAGE_MARKER; } });
32
+ Object.defineProperty(exports, "COVERAGE_NOTE", { enumerable: true, get: function () { return ledger_js_1.COVERAGE_NOTE; } });
33
+ Object.defineProperty(exports, "coverageOfLedger", { enumerable: true, get: function () { return ledger_js_1.coverageOfLedger; } });
34
+ Object.defineProperty(exports, "readCoverageLedger", { enumerable: true, get: function () { return ledger_js_1.readCoverageLedger; } });
35
+ var read_js_1 = require("./read.js");
36
+ Object.defineProperty(exports, "readCoverageResult", { enumerable: true, get: function () { return read_js_1.readCoverageResult; } });
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/agent/coverage/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,yCAAmG;AAA1F,2GAAA,cAAc,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,mGAAA,MAAM,OAAA;AAAE,8GAAA,iBAAiB,OAAA;AAAE,wGAAA,WAAW,OAAA;AAC7E,yCAAgF;AAAvE,sHAAA,yBAAyB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAC1D,6CAA0D;AAAjD,wHAAA,yBAAyB,OAAA;AAClC,uCAAyE;AAAhE,sGAAA,UAAU,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAAE,oGAAA,QAAQ,OAAA;AACpD,yCAMqB;AALnB,qGAAA,QAAQ,OAAA;AACR,4GAAA,eAAe,OAAA;AACf,0GAAA,aAAa,OAAA;AACb,6GAAA,gBAAgB,OAAA;AAChB,+GAAA,kBAAkB,OAAA;AAEpB,qCAAyF;AAAhF,6GAAA,kBAAkB,OAAA"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * coverage/items — normalizing and refusing coverage lists.
4
+ *
5
+ * Pattern: one validator, two doors (`absent()` and `coverage()`), so the two
6
+ * primitives cannot disagree about what a well-formed piece of
7
+ * ground looks like.
8
+ * Role: core/ layer, pure. Throws at the CALL SITE (the
9
+ * `resolveEvidenceGate` precedent): a malformed declaration is a
10
+ * mistake in the line the author just wrote, and the stack should
11
+ * say so — not fail on the first absence of the first incident.
12
+ * Emits: N/A.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.mergeItems = exports.sameItem = exports.normalizeCoverageList = void 0;
16
+ const isPlainString = (v) => typeof v === 'string' && v.trim().length > 0;
17
+ /**
18
+ * Normalize one author list into {@link CoverageItem}s, refusing anything a
19
+ * reader could not act on.
20
+ *
21
+ * `requireWhy` is true only for `cannotCover`. The asymmetry is deliberate:
22
+ * "we checked the fcns database" and "we did not check the archive" are
23
+ * complete statements on their own, but "this tool can never see host-side
24
+ * multipathing" is a claim about capability — and a permanent blind spot with
25
+ * no reason attached cannot be acted on, escalated, or disproved. It is also
26
+ * the one an operator is most likely to want to fix, so the reason is the
27
+ * useful half.
28
+ */
29
+ function normalizeCoverageList(fn, section, list, requireWhy) {
30
+ if (list === undefined)
31
+ return [];
32
+ if (!Array.isArray(list)) {
33
+ throw new Error(`${fn}: \`${section}\` must be an array of strings or { what, why } entries — to say ` +
34
+ `nothing about it, omit the field (absent means "not declared", never "nothing there").`);
35
+ }
36
+ const items = [];
37
+ list.forEach((raw, i) => {
38
+ const at = `${section}[${i}]`;
39
+ if (isPlainString(raw)) {
40
+ if (requireWhy) {
41
+ throw new Error(`${fn}: ${at} is '${raw.trim()}' with no reason. Every \`cannotCover\` entry needs a ` +
42
+ `\`why\` — a blind spot this tool can NEVER see is a claim about what it is, and a ` +
43
+ `reader cannot act on, escalate or disprove a claim with no reason. Write ` +
44
+ `{ what: '${raw.trim()}', why: '…' }, or move it to \`notChecked\` if a wider ` +
45
+ `call could reach it.`);
46
+ }
47
+ items.push({ what: raw.trim() });
48
+ return;
49
+ }
50
+ if (typeof raw !== 'object' || raw === null || !isPlainString(raw.what)) {
51
+ throw new Error(`${fn}: ${at} names no ground. Each entry is either a non-empty string or ` +
52
+ `{ what, why } — what a reader has to know is WHICH source, window or population ` +
53
+ `this is about.`);
54
+ }
55
+ const item = raw;
56
+ const why = item.why;
57
+ if (why !== undefined && !isPlainString(why)) {
58
+ throw new Error(`${fn}: ${at} ('${item.what.trim()}') has a \`why\` that says nothing. Give it a ` +
59
+ `reason or omit the field.`);
60
+ }
61
+ if (requireWhy && why === undefined) {
62
+ throw new Error(`${fn}: ${at} ('${item.what.trim()}') has no \`why\`. Every \`cannotCover\` entry ` +
63
+ `needs one — see the entry above this line in the docs for why a permanent blind ` +
64
+ `spot must say what makes it permanent.`);
65
+ }
66
+ items.push({ what: item.what.trim(), ...(why !== undefined && { why: why.trim() }) });
67
+ });
68
+ return items;
69
+ }
70
+ exports.normalizeCoverageList = normalizeCoverageList;
71
+ /** Two entries are the same ground when they say the same two things. Used to
72
+ * fold the run's declarations into ONE answer-level block: five tools that
73
+ * all name the same missing collector should say it once. */
74
+ function sameItem(a, b) {
75
+ return a.what === b.what && (a.why ?? '') === (b.why ?? '');
76
+ }
77
+ exports.sameItem = sameItem;
78
+ /** Merge lists in declaration order, dropping repeats. Order is the run's own
79
+ * order on purpose — it is the only ordering that means anything here. */
80
+ function mergeItems(lists) {
81
+ const out = [];
82
+ for (const list of lists) {
83
+ for (const item of list) {
84
+ if (!out.some((seen) => sameItem(seen, item)))
85
+ out.push(item);
86
+ }
87
+ }
88
+ return out;
89
+ }
90
+ exports.mergeItems = mergeItems;
91
+ //# sourceMappingURL=items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items.js","sourceRoot":"","sources":["../../../../src/core/agent/coverage/items.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * ledger — what a clean result does NOT rule out.
4
+ *
5
+ * Pattern: a wrapper the framework recognizes, minted by a helper (the
6
+ * `absent()` shape one level up: same vocabulary, different claim).
7
+ * Role: core/ layer, pure. `coverage()` is what a tool author writes;
8
+ * `readCoverageLedger` is what the dispatch loop calls.
9
+ * Emits: N/A (the caller emits `agentfootprint.tools.coverage_declared`).
10
+ *
11
+ * ## The problem, stated as narrowly as it deserves
12
+ *
13
+ * An agent answers confidently from partial coverage. "Everything looks fine"
14
+ * is produced from four checks that passed, and arrives with no way to tell
15
+ * whether *fine* means **verified** or **unexamined** — whether the fifth
16
+ * thing was healthy or was never looked at. The evidence gate (9.35.0) is the
17
+ * sibling of this: the gate catches invented VALUES, this catches unstated
18
+ * LIMITS. Both are ways an answer can be false while every token in it is
19
+ * real.
20
+ *
21
+ * A ledger is not a caveat and not a disclaimer. It is three lists the TOOL
22
+ * knows and the model does not: what it checked, what it did not check, and
23
+ * what it can never cover. Only the tool knows the third one, which is why
24
+ * this cannot be prompt engineering.
25
+ *
26
+ * ## Why the wrapper, and not a field on the result
27
+ *
28
+ * The alternative — teaching the framework to read a `coverage` key off any
29
+ * returned object — would make every domain object that happens to have one
30
+ * change behavior. The wrapper is opt-in by construction: `coverage(x, …)`
31
+ * produces a shape that did not exist before, so nothing that ever ran can
32
+ * become a ledger by accident. Same argument as the effects envelope's strict
33
+ * recognizer, same guarantee.
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.coverageOfLedger = exports.readCoverageLedger = exports.coverage = exports.COVERAGE_NOTE = exports.COVERAGE_MARKER = void 0;
37
+ const items_js_1 = require("./items.js");
38
+ /** The reserved key that makes a ledger recognizable. */
39
+ exports.COVERAGE_MARKER = 'af_coverage';
40
+ /**
41
+ * The static sentence every ledger carries. The last clause is the OFFER half
42
+ * of survival — the model is told to carry the limits into its answer. The
43
+ * ENFORCEMENT half (`.limitsTravelWithTheAnswer()`) does not depend on the
44
+ * model obeying it; see `answer.ts` for why both exist.
45
+ */
46
+ exports.COVERAGE_NOTE = 'This result covers only what `checked` lists. `not_checked` is ground this call did not ' +
47
+ 'look at, and `cannot_cover` is ground this tool can never see — a clean result here is ' +
48
+ 'NOT evidence about either, and no retry changes `cannot_cover`. Carry these limits into ' +
49
+ 'any answer you build on this result.';
50
+ /**
51
+ * Return a verdict with its own boundary attached.
52
+ *
53
+ * The model reads `{ af_coverage: {…}, result: <your value> }` — boundary
54
+ * first, deliberately: a limit placed after a long result is a limit that gets
55
+ * skimmed past. The framework records the ledger and, with
56
+ * `.limitsTravelWithTheAnswer()` configured, appends it to the run's final
57
+ * answer where the model cannot drop it.
58
+ *
59
+ * @example the highest-stakes tool in a triage agent
60
+ * defineTool({
61
+ * name: 'replication_health',
62
+ * description: 'Replication health across the estate',
63
+ * inputSchema: { type: 'object', properties: {} },
64
+ * execute: async () => {
65
+ * const { verdict, ndmTimedOut } = await checkReplication();
66
+ * return coverage(verdict, {
67
+ * checked: ['SRDF pair state on all 4 arrays (live query)'],
68
+ * notChecked: ndmTimedOut
69
+ * ? [{ what: 'NDM migration sessions', why: 'the API timed out — ask again' }]
70
+ * : [],
71
+ * cannotCover: [
72
+ * { what: 'host-side multipathing', why: 'no collector runs on the ESX hosts' },
73
+ * ],
74
+ * });
75
+ * },
76
+ * });
77
+ */
78
+ function coverage(content, decl) {
79
+ const fn = 'coverage';
80
+ if (typeof decl !== 'object' || decl === null) {
81
+ throw new Error(`${fn}: takes the result and its boundary — coverage(result, { checked?, notChecked?, ` +
82
+ `cannotCover? }). To return a result with no declared boundary, return it bare.`);
83
+ }
84
+ const checked = (0, items_js_1.normalizeCoverageList)(fn, 'checked', decl.checked, false);
85
+ const notChecked = (0, items_js_1.normalizeCoverageList)(fn, 'notChecked', decl.notChecked, false);
86
+ const cannotCover = (0, items_js_1.normalizeCoverageList)(fn, 'cannotCover', decl.cannotCover, true);
87
+ if (checked.length === 0 && notChecked.length === 0 && cannotCover.length === 0) {
88
+ throw new Error(`${fn}: all three lists are empty, so this ledger declares no boundary at all — it ` +
89
+ `would tell a reader nothing while looking like it did, which is worse than saying ` +
90
+ `nothing. Name what you checked, what you skipped, or what you can never see; or ` +
91
+ `return the result bare.`);
92
+ }
93
+ return {
94
+ af_coverage: {
95
+ ...(checked.length > 0 && { checked }),
96
+ ...(notChecked.length > 0 && { not_checked: notChecked }),
97
+ ...(cannotCover.length > 0 && { cannot_cover: cannotCover }),
98
+ note: exports.COVERAGE_NOTE,
99
+ },
100
+ result: content,
101
+ };
102
+ }
103
+ exports.coverage = coverage;
104
+ /**
105
+ * Recognize (or decline to recognize) a value as a covered result. STRICT for
106
+ * the same reason `readAbsence` is: only a plain object carrying a plain
107
+ * `af_coverage` object AND a `result` key qualifies.
108
+ */
109
+ function readCoverageLedger(value) {
110
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
111
+ return undefined;
112
+ const rec = value;
113
+ const marker = rec[exports.COVERAGE_MARKER];
114
+ if (typeof marker !== 'object' || marker === null || Array.isArray(marker))
115
+ return undefined;
116
+ if (!('result' in rec))
117
+ return undefined;
118
+ return value;
119
+ }
120
+ exports.readCoverageLedger = readCoverageLedger;
121
+ /** The ledger's coverage, in the normalized three-list shape. */
122
+ function coverageOfLedger(covered) {
123
+ const m = covered.af_coverage;
124
+ return {
125
+ checked: m.checked ?? [],
126
+ notChecked: m.not_checked ?? [],
127
+ cannotCover: m.cannot_cover ?? [],
128
+ };
129
+ }
130
+ exports.coverageOfLedger = coverageOfLedger;
131
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../../src/core/agent/coverage/ledger.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;;;AAEH,yCAAmD;AAGnD,yDAAyD;AAC5C,QAAA,eAAe,GAAG,aAAa,CAAC;AAE7C;;;;;GAKG;AACU,QAAA,aAAa,GACxB,0FAA0F;IAC1F,yFAAyF;IACzF,0FAA0F;IAC1F,sCAAsC,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,QAAQ,CAAI,OAAU,EAAE,IAAyB;IAC/D,MAAM,EAAE,GAAG,UAAU,CAAC;IACtB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,EAAE,kFAAkF;YACrF,gFAAgF,CACnF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,gCAAqB,EAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAA,gCAAqB,EAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,IAAA,gCAAqB,EAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACrF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CACb,GAAG,EAAE,+EAA+E;YAClF,oFAAoF;YACpF,kFAAkF;YAClF,yBAAyB,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO;QACL,WAAW,EAAE;YACX,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YACtC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;YACzD,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;YAC5D,IAAI,EAAE,qBAAa;SACpB;QACD,MAAM,EAAE,OAAO;KAChB,CAAC;AACJ,CAAC;AA5BD,4BA4BC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1F,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,uBAAe,CAAC,CAAC;IACpC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7F,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,KAAsB,CAAC;AAChC,CAAC;AAPD,gDAOC;AAED,iEAAiE;AACjE,SAAgB,gBAAgB,CAAC,OAAsB;IACrD,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAC9B,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;QACxB,UAAU,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;QAC/B,WAAW,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC;AAPD,4CAOC"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * read — the ONE recognizer the tool-dispatch loop calls.
4
+ *
5
+ * Pattern: one reader, every dispatch door (the `applyResultCeiling`
6
+ * precedent). The batch loop and the credential/resume execute
7
+ * boundary both call this at the moment a handler's return lands, so
8
+ * a resumed call declares its coverage exactly as an inline one.
9
+ * Role: core/ layer, pure. Recognition and normalization only — the caller
10
+ * owns the events, the scope write and the delivered status.
11
+ * Emits: N/A.
12
+ *
13
+ * Zero-cost when unused: two `typeof` checks and a key lookup for every
14
+ * result that is neither shape, and `undefined` back. Nothing is emitted,
15
+ * nothing is written, and the value the model reads is the value the tool
16
+ * returned — byte for byte.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.readCoverageResult = void 0;
20
+ const absent_js_1 = require("./absent.js");
21
+ const ledger_js_1 = require("./ledger.js");
22
+ const ABSENT_STATUS = 'absent';
23
+ /**
24
+ * Read one finalized tool result for coverage declarations.
25
+ *
26
+ * The two shapes compose: `coverage(absent({…}), {…})` is a search that found
27
+ * nothing AND a boundary around the search, so both are declared and the
28
+ * delivered status is still `'absent'` — the ledger bounds the answer, it
29
+ * does not change what the answer was.
30
+ */
31
+ function readCoverageResult(value) {
32
+ const absence = (0, absent_js_1.readAbsence)(value);
33
+ if (absence !== undefined) {
34
+ return {
35
+ status: ABSENT_STATUS,
36
+ declared: [
37
+ { kind: 'absence', coverage: (0, absent_js_1.coverageOfAbsence)(absence), lookedFor: absence.looked_for },
38
+ ],
39
+ };
40
+ }
41
+ const covered = (0, ledger_js_1.readCoverageLedger)(value);
42
+ if (covered === undefined)
43
+ return undefined;
44
+ const declared = [{ kind: 'ledger', coverage: (0, ledger_js_1.coverageOfLedger)(covered) }];
45
+ const inner = (0, absent_js_1.readAbsence)(covered.result);
46
+ if (inner === undefined)
47
+ return { declared };
48
+ declared.push({
49
+ kind: 'absence',
50
+ coverage: (0, absent_js_1.coverageOfAbsence)(inner),
51
+ lookedFor: inner.looked_for,
52
+ });
53
+ return { status: ABSENT_STATUS, declared };
54
+ }
55
+ exports.readCoverageResult = readCoverageResult;
56
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../../../src/core/agent/coverage/read.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;AAGH,2CAA6D;AAC7D,2CAAmE;AA6BnE,MAAM,aAAa,GAAqB,QAAQ,CAAC;AAEjD;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,MAAM,OAAO,GAAG,IAAA,uBAAW,EAAC,KAAK,CAAC,CAAC;IACnC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAA,6BAAiB,EAAC,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE;aACzF;SACF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,8BAAkB,EAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,QAAQ,GAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAA,4BAAgB,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,CAAC;QACZ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,IAAA,6BAAiB,EAAC,KAAK,CAAC;QAClC,SAAS,EAAE,KAAK,CAAC,UAAU;KAC5B,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AArBD,gDAqBC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * coverage/types — the shared vocabulary of the two coverage primitives.
4
+ *
5
+ * Pattern: one value type, two consumers — `absent()` says "I looked HERE and
6
+ * found nothing", `coverage()` says "my answer covers THIS and not
7
+ * THAT". Both are statements about the same thing: the ground a
8
+ * result stands on. Spelling them with one vocabulary is what lets
9
+ * the answer-level block merge an absence's boundary with a
10
+ * verdict's without translating between two grammars.
11
+ * Role: core/ layer, pure data. No imports, no behavior.
12
+ * Emits: N/A.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/agent/coverage/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG"}
@@ -27,6 +27,13 @@
27
27
  * value because the model passed it to a tool would let any invention
28
28
  * launder itself through one failed lookup.
29
29
  * • **The model's own earlier answers do not count**, for the same reason.
30
+ * • **An `absent(…)` result grounds its COVERAGE only.** An absence names
31
+ * what was looked FOR, which in practice quotes the arguments the model
32
+ * passed — so indexing the whole frame would ground an invented
33
+ * identifier through the one operation that proves nothing about it: a
34
+ * lookup that found nothing. `checked` / `not_checked` / `cannot_cover`
35
+ * are the tool's own words about the world and do count. See
36
+ * `../coverage/evidence.ts`.
30
37
  *
31
38
  * The EXEMPT index is built from a different corpus with the same machinery:
32
39
  * the user's own message, the conversation's user/system turns, and the
@@ -36,6 +43,7 @@
36
43
  */
37
44
  Object.defineProperty(exports, "__esModule", { value: true });
38
45
  exports.exemptFromRun = exports.evidenceFromHistory = void 0;
46
+ const index_js_1 = require("../coverage/index.js");
39
47
  const frames_js_1 = require("./frames.js");
40
48
  const normalize_js_1 = require("./normalize.js");
41
49
  /**
@@ -96,7 +104,16 @@ function indexResult(content, sink) {
96
104
  const trimmed = content.trim();
97
105
  if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
98
106
  try {
99
- walk(JSON.parse(trimmed), sink);
107
+ const parsed = JSON.parse(trimmed);
108
+ // An `absent(…)` frame grounds its COVERAGE and nothing else: the rest
109
+ // of it is prose about the REQUEST, which usually quotes the model's own
110
+ // arguments, and indexing that would ground every identifier a model
111
+ // invented as long as it handed the invention to one tool that found
112
+ // nothing. See `../coverage/evidence.ts` — it is the frames.ts argument
113
+ // on the tool side of the conversation. `undefined` (every other result
114
+ // ever returned) keeps the walk it always had.
115
+ const projection = (0, index_js_1.absenceEvidenceProjection)(parsed);
116
+ walk(projection ?? parsed, sink);
100
117
  return;
101
118
  }
102
119
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"evidenceIndex.js","sourceRoot":"","sources":["../../../../src/core/agent/evidence/evidenceIndex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"evidenceIndex.js","sourceRoot":"","sources":["../../../../src/core/agent/evidence/evidenceIndex.ts"],"names":[],"mappings":"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"}
@@ -26,11 +26,24 @@
26
26
  * `stages/route.ts`.
27
27
  */
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.prepareFinalStage = void 0;
29
+ exports.prepareFinalWithLimitsStage = exports.prepareFinalStage = void 0;
30
30
  const typedEmit_js_1 = require("../../../recorders/core/typedEmit.js");
31
- const prepareFinalStage = (scope) => {
31
+ const index_js_1 = require("../coverage/index.js");
32
+ /**
33
+ * The stage body, with the answer passed IN.
34
+ *
35
+ * One body, two entry points. The answer is a parameter rather than a read of
36
+ * `scope.llmLatestContent` because `.limitsTravelWithTheAnswer()` composes a
37
+ * different one — and everything filed here (`finalContent`, `newMessages`,
38
+ * which memory persists, and `turn_end.finalContent`) must agree about what
39
+ * the answer WAS. Note that `llmLatestContent` itself is a READ-ONLY input to
40
+ * this branch subflow, so there is no version of this where the composed
41
+ * answer is written back over it: the capture is the only place all four
42
+ * readers meet.
43
+ */
44
+ const captureTurnPayload = (scope, answer) => {
32
45
  const iteration = scope.iteration;
33
- scope.finalContent = scope.llmLatestContent;
46
+ scope.finalContent = answer;
34
47
  // v2.14 — attach thinking blocks to the assistant final message
35
48
  // (if any). For non-Anthropic providers this is informational; for
36
49
  // Anthropic + extended-thinking-with-tool-use, signature round-trip
@@ -62,5 +75,33 @@ const prepareFinalStage = (scope) => {
62
75
  durationMs: Date.now() - scope.turnStartMs,
63
76
  });
64
77
  };
78
+ const prepareFinalStage = (scope) => {
79
+ captureTurnPayload(scope, scope.llmLatestContent);
80
+ };
65
81
  exports.prepareFinalStage = prepareFinalStage;
82
+ /**
83
+ * `.limitsTravelWithTheAnswer()`'s half of prepare-final — the SAME stage,
84
+ * with the run's declared coverage folded into the answer first.
85
+ *
86
+ * Mounted in place of `prepareFinalStage` by both chart builders when the
87
+ * option is configured, and nowhere else: an agent that did not ask for it
88
+ * runs the function above, byte for byte. Written as one stage rather than a
89
+ * second one because everything the capture files must agree about what the
90
+ * answer WAS — a second stage afterwards would leave `turn_end` reporting an
91
+ * answer the caller never saw.
92
+ *
93
+ * It runs AFTER the evidence gate has judged (the gate is in the Route
94
+ * decider, one stage earlier). That ordering is deliberate: the block is
95
+ * composed by the framework out of what the TOOLS declared, so subjecting it
96
+ * to a check for values the MODEL could not support would be asking whether
97
+ * the library grounded itself.
98
+ */
99
+ const prepareFinalWithLimitsStage = (scope) => {
100
+ const declared = scope.coverageDeclared;
101
+ const answer = declared !== undefined && declared.length > 0
102
+ ? (0, index_js_1.composeAnswerWithCoverage)(scope.llmLatestContent, declared)
103
+ : scope.llmLatestContent;
104
+ captureTurnPayload(scope, answer);
105
+ };
106
+ exports.prepareFinalWithLimitsStage = prepareFinalWithLimitsStage;
66
107
  //# sourceMappingURL=prepareFinal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepareFinal.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/prepareFinal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAGH,uEAAiE;AAG1D,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAQ,EAAE;IACvE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC5C,gEAAgE;IAChE,mEAAmE;IACnE,oEAAoE;IACpE,iEAAiE;IACjE,+DAA+D;IAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC5C,MAAM,WAAW,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,6DAA6D;IAC7D,wCAAwC;IACxC,KAAK,CAAC,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;QAC5C;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK,CAAC,YAAY;YAC3B,GAAG,CAAC,WAAW,IAAI,EAAE,cAAc,EAAE,CAAC;SACvC;KACF,CAAC;IAEF,IAAA,wBAAS,EAAC,KAAK,EAAE,oCAAoC,EAAE;QACrD,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,IAAA,wBAAS,EAAC,KAAK,EAAE,+BAA+B,EAAE;QAChD,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,iBAAiB,qBAkC5B"}
1
+ {"version":3,"file":"prepareFinal.js","sourceRoot":"","sources":["../../../../src/core/agent/stages/prepareFinal.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;;AAGH,uEAAiE;AACjE,mDAAiE;AAGjE;;;;;;;;;;;GAWG;AACH,MAAM,kBAAkB,GAAG,CAAC,KAA6B,EAAE,MAAc,EAAQ,EAAE;IACjF,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IAC5B,gEAAgE;IAChE,mEAAmE;IACnE,oEAAoE;IACpE,iEAAiE;IACjE,+DAA+D;IAC/D,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC5C,MAAM,WAAW,GAAG,cAAc,KAAK,SAAS,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9E,6DAA6D;IAC7D,wCAAwC;IACxC,KAAK,CAAC,WAAW,GAAG;QAClB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE;QAC5C;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,KAAK,CAAC,YAAY;YAC3B,GAAG,CAAC,WAAW,IAAI,EAAE,cAAc,EAAE,CAAC;SACvC;KACF,CAAC;IAEF,IAAA,wBAAS,EAAC,KAAK,EAAE,oCAAoC,EAAE;QACrD,SAAS,EAAE,CAAC;QACZ,SAAS,EAAE,SAAS;QACpB,aAAa,EAAE,CAAC;KACjB,CAAC,CAAC;IACH,IAAA,wBAAS,EAAC,KAAK,EAAE,+BAA+B,EAAE;QAChD,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,cAAc,EAAE,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,WAAW;KAC3C,CAAC,CAAC;AACL,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAA6B,EAAQ,EAAE;IACvE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B;AAEF;;;;;;;;;;;;;;;;GAgBG;AACI,MAAM,2BAA2B,GAAG,CAAC,KAA6B,EAAQ,EAAE;IACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC;IACxC,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC3C,CAAC,CAAC,IAAA,oCAAyB,EAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;IAC7B,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC;AAPW,QAAA,2BAA2B,+BAOtC"}