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,16 @@
1
+ /**
2
+ * Strategy arms — SUBSTITUTION counterfactuals, kept distinct from ablation's
3
+ * removals and sharing its statistics. See README.md in this folder for the
4
+ * design argument, and `types.ts` for why this is not a fifth `AblationSpec`
5
+ * arm.
6
+ *
7
+ * @beta Beta feature (RFC-003 Part B). The API works and is tested, but may
8
+ * change before GA.
9
+ */
10
+ export { applyArm } from './apply.js';
11
+ export { compareStrategyArms } from './compare.js';
12
+ export { armFacetsFromManifest, armLabel, checkArmApplied, manifestFromEvents, matchArm, RUN_CONFIGURED_EVENT, } from './manifest.js';
13
+ export { checkArmApplication, collectArmRuns, nullBandFrom, scoreArmRuns, type ArmRuns, } from './probe.js';
14
+ export { armConfigKey, declaredFacetCount, validateStrategyArms } from './validate.js';
15
+ export { verdictForArm, type ArmVerdictContext } from './verdict.js';
16
+ export type { ArmApplication, ArmFacetMismatch, ArmFacets, ArmMemoryFacet, ArmOutcome, ArmRunResult, ArmRunner, CompareStrategyArmsOptions, ManifestMemoryLike, NullBand, RunManifestLike, StrategyArm, StrategyComparison, } from './types.js';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Strategy arms — SUBSTITUTION counterfactuals, kept distinct from ablation's
3
+ * removals and sharing its statistics. See README.md in this folder for the
4
+ * design argument, and `types.ts` for why this is not a fifth `AblationSpec`
5
+ * arm.
6
+ *
7
+ * @beta Beta feature (RFC-003 Part B). The API works and is tested, but may
8
+ * change before GA.
9
+ */
10
+ export { applyArm } from './apply.js';
11
+ export { compareStrategyArms } from './compare.js';
12
+ export { armFacetsFromManifest, armLabel, checkArmApplied, manifestFromEvents, matchArm, RUN_CONFIGURED_EVENT, } from './manifest.js';
13
+ export { checkArmApplication, collectArmRuns, nullBandFrom, scoreArmRuns, } from './probe.js';
14
+ export { armConfigKey, declaredFacetCount, validateStrategyArms } from './validate.js';
15
+ export { verdictForArm } from './verdict.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EACL,qBAAqB,EACrB,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,QAAQ,EACR,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,aAAa,EAA0B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * The manifest bridge — which arm did this run belong to, according to the RUN
3
+ * rather than according to the experimenter.
4
+ *
5
+ * Before 9.41.0 an arm label was bookkeeping: the consumer set a variable to
6
+ * `'rerank'`, built an agent it believed re-ranked, and nothing in the library
7
+ * could contradict it. `agentfootprint.agent.run_configured` names the adapters
8
+ * and strategies a run is about to use, so the belief became checkable — and
9
+ * {@link ArmFacets} is deliberately spelled in that event's own vocabulary so
10
+ * the check is a field-by-field comparison and not a translation layer.
11
+ *
12
+ * Two directions, both here:
13
+ * - **verify** — `checkArmApplied(arm, manifest)`: the arm said `retrieval:
14
+ * 'rerank'`; did the run agree? A contradiction costs the arm its verdict
15
+ * (`compare.ts`), because a difference measured between two arms that were
16
+ * secretly one configuration is not evidence about either.
17
+ * - **classify** — `matchArm(arms, manifest)`: hand it a recorded run's
18
+ * manifest and it says which declared arm that run belongs to. This is the
19
+ * door for grouping runs a study already made, offline, out of saved
20
+ * recordings.
21
+ *
22
+ * ## Absence is a contradiction, not a wildcard
23
+ *
24
+ * The manifest's own rule is that an absent field means "not configured", never
25
+ * a guessed default. So an arm declaring `window: 'tokenBudget'` against a
26
+ * manifest with no `window` is a MISMATCH, reported with `observed` absent. The
27
+ * alternative — treating absence as "could be anything" — would let a run with
28
+ * no window stage pass as the token-budget arm, which is exactly the mis-wiring
29
+ * this file exists to catch.
30
+ */
31
+ import type { CapturedEventLike } from '../types.js';
32
+ import type { ArmFacetMismatch, ArmFacets, RunManifestLike, StrategyArm } from './types.js';
33
+ /** The event type the run manifest rides on (9.41.0). */
34
+ export declare const RUN_CONFIGURED_EVENT = "agentfootprint.agent.run_configured";
35
+ /**
36
+ * Pull the run manifest out of a run's captured typed events — the same
37
+ * `CapturedEventLike[]` bag `localizeContextBug` already accepts, so a consumer
38
+ * who collected events with `agent.on('*', …)` needs no second capture.
39
+ *
40
+ * One manifest per run by design; the FIRST is returned. A bag holding events
41
+ * from several runs is the caller's own mixing — filter by `meta.runId` first.
42
+ */
43
+ export declare function manifestFromEvents(events: readonly CapturedEventLike[] | undefined): RunManifestLike | undefined;
44
+ /**
45
+ * Project a manifest onto the arm-facet vocabulary — the inverse of what an arm
46
+ * declares. Memory rows collapse to the FIRST one; a study varying retrieval
47
+ * across several mounted memories should declare `memory.id` and read the rows
48
+ * itself rather than trust a projection to pick.
49
+ */
50
+ export declare function armFacetsFromManifest(manifest: RunManifestLike): ArmFacets;
51
+ /**
52
+ * A stable label for a set of facets — sorted `key=value`, so two runs of one
53
+ * configuration produce the same string whatever order the fields were written
54
+ * in. Useful as a grouping key for N recorded runs.
55
+ */
56
+ export declare function armLabel(facets: ArmFacets): string;
57
+ /**
58
+ * Compare one arm's DECLARED facets against a run's manifest. Empty result =
59
+ * the run agreed with everything the arm claimed.
60
+ *
61
+ * Only declared facets are compared. An arm is a claim about the facets it
62
+ * names and says nothing about the rest — checking undeclared fields would fail
63
+ * every arm for differing from the manifest in ways it never claimed.
64
+ */
65
+ export declare function checkArmApplied(arm: StrategyArm, manifest: RunManifestLike): readonly ArmFacetMismatch[];
66
+ /**
67
+ * Which declared arm does this run belong to? The offline door: group N
68
+ * recorded runs into arms by what each run's own manifest says.
69
+ *
70
+ * Rules, all conservative:
71
+ * - only arms that DECLARE facets are candidates (an arm naming nothing matches
72
+ * every run and would swallow the whole study);
73
+ * - a candidate matches when the manifest contradicts none of its facets;
74
+ * - the MOST SPECIFIC match wins (most declared facets), and a tie returns
75
+ * `undefined` — two arms fitting one run equally well is an ambiguity, and
76
+ * guessing which the experimenter meant is exactly the bookkeeping this
77
+ * function replaces.
78
+ */
79
+ export declare function matchArm(arms: readonly StrategyArm[], manifest: RunManifestLike): StrategyArm | undefined;
@@ -0,0 +1,199 @@
1
+ /**
2
+ * The manifest bridge — which arm did this run belong to, according to the RUN
3
+ * rather than according to the experimenter.
4
+ *
5
+ * Before 9.41.0 an arm label was bookkeeping: the consumer set a variable to
6
+ * `'rerank'`, built an agent it believed re-ranked, and nothing in the library
7
+ * could contradict it. `agentfootprint.agent.run_configured` names the adapters
8
+ * and strategies a run is about to use, so the belief became checkable — and
9
+ * {@link ArmFacets} is deliberately spelled in that event's own vocabulary so
10
+ * the check is a field-by-field comparison and not a translation layer.
11
+ *
12
+ * Two directions, both here:
13
+ * - **verify** — `checkArmApplied(arm, manifest)`: the arm said `retrieval:
14
+ * 'rerank'`; did the run agree? A contradiction costs the arm its verdict
15
+ * (`compare.ts`), because a difference measured between two arms that were
16
+ * secretly one configuration is not evidence about either.
17
+ * - **classify** — `matchArm(arms, manifest)`: hand it a recorded run's
18
+ * manifest and it says which declared arm that run belongs to. This is the
19
+ * door for grouping runs a study already made, offline, out of saved
20
+ * recordings.
21
+ *
22
+ * ## Absence is a contradiction, not a wildcard
23
+ *
24
+ * The manifest's own rule is that an absent field means "not configured", never
25
+ * a guessed default. So an arm declaring `window: 'tokenBudget'` against a
26
+ * manifest with no `window` is a MISMATCH, reported with `observed` absent. The
27
+ * alternative — treating absence as "could be anything" — would let a run with
28
+ * no window stage pass as the token-budget arm, which is exactly the mis-wiring
29
+ * this file exists to catch.
30
+ */
31
+ import { declaredFacetCount } from './validate.js';
32
+ /** The event type the run manifest rides on (9.41.0). */
33
+ export const RUN_CONFIGURED_EVENT = 'agentfootprint.agent.run_configured';
34
+ /**
35
+ * Pull the run manifest out of a run's captured typed events — the same
36
+ * `CapturedEventLike[]` bag `localizeContextBug` already accepts, so a consumer
37
+ * who collected events with `agent.on('*', …)` needs no second capture.
38
+ *
39
+ * One manifest per run by design; the FIRST is returned. A bag holding events
40
+ * from several runs is the caller's own mixing — filter by `meta.runId` first.
41
+ */
42
+ export function manifestFromEvents(events) {
43
+ const event = events?.find((e) => e.type === RUN_CONFIGURED_EVENT);
44
+ if (event === undefined)
45
+ return undefined;
46
+ const payload = event.payload;
47
+ // Structural, not a cast-and-pray: a payload that is not an object at all is
48
+ // no manifest, and reporting `undefined` keeps `checked: false` honest.
49
+ return payload !== null && typeof payload === 'object' ? payload : undefined;
50
+ }
51
+ /**
52
+ * Project a manifest onto the arm-facet vocabulary — the inverse of what an arm
53
+ * declares. Memory rows collapse to the FIRST one; a study varying retrieval
54
+ * across several mounted memories should declare `memory.id` and read the rows
55
+ * itself rather than trust a projection to pick.
56
+ */
57
+ export function armFacetsFromManifest(manifest) {
58
+ const memory = manifest.memories?.[0];
59
+ const provider = manifest.llm?.provider;
60
+ const model = manifest.llm?.model;
61
+ const reactMode = manifest.reactMode;
62
+ const scorer = manifest.skillGraph?.scorer;
63
+ const routing = manifest.skillGraph?.routing;
64
+ const continuity = manifest.skillGraph?.continuity;
65
+ const evidenceGate = manifest.evidenceGate;
66
+ return {
67
+ ...(provider !== undefined && { provider }),
68
+ ...(model !== undefined && { model }),
69
+ ...(isReactMode(reactMode) && { reactMode }),
70
+ ...(manifest.window !== undefined && { window: manifest.window }),
71
+ ...(scorer !== undefined && { scorer }),
72
+ ...(isPosture(routing) && { routing }),
73
+ ...(isContinuity(continuity) && { continuity }),
74
+ ...(isPosture(evidenceGate) && { evidenceGate }),
75
+ ...(memory !== undefined && { memory: { ...memory } }),
76
+ };
77
+ }
78
+ /**
79
+ * A stable label for a set of facets — sorted `key=value`, so two runs of one
80
+ * configuration produce the same string whatever order the fields were written
81
+ * in. Useful as a grouping key for N recorded runs.
82
+ */
83
+ export function armLabel(facets) {
84
+ const parts = [];
85
+ for (const [key, value] of Object.entries(facets)) {
86
+ if (value === undefined)
87
+ continue;
88
+ if (key === 'memory') {
89
+ for (const [mk, mv] of Object.entries(value)) {
90
+ if (mv !== undefined)
91
+ parts.push(`memory.${mk}=${String(mv)}`);
92
+ }
93
+ continue;
94
+ }
95
+ parts.push(`${key}=${String(value)}`);
96
+ }
97
+ return parts.sort().join(',');
98
+ }
99
+ /**
100
+ * Compare one arm's DECLARED facets against a run's manifest. Empty result =
101
+ * the run agreed with everything the arm claimed.
102
+ *
103
+ * Only declared facets are compared. An arm is a claim about the facets it
104
+ * names and says nothing about the rest — checking undeclared fields would fail
105
+ * every arm for differing from the manifest in ways it never claimed.
106
+ */
107
+ export function checkArmApplied(arm, manifest) {
108
+ const facets = arm.facets;
109
+ if (facets === undefined)
110
+ return [];
111
+ const out = [];
112
+ compare(out, 'provider', facets.provider, manifest.llm?.provider);
113
+ compare(out, 'model', facets.model, manifest.llm?.model);
114
+ compare(out, 'reactMode', facets.reactMode, manifest.reactMode);
115
+ compare(out, 'window', facets.window, manifest.window);
116
+ compare(out, 'skillGraph.scorer', facets.scorer, manifest.skillGraph?.scorer);
117
+ compare(out, 'skillGraph.routing', facets.routing, manifest.skillGraph?.routing);
118
+ compare(out, 'skillGraph.continuity', facets.continuity, manifest.skillGraph?.continuity);
119
+ compare(out, 'evidenceGate', facets.evidenceGate, manifest.evidenceGate);
120
+ const memory = facets.memory;
121
+ if (memory !== undefined) {
122
+ const rows = manifest.memories ?? [];
123
+ if (memory.id !== undefined) {
124
+ // Narrowed to ONE row: a missing row is a mismatch on the id itself, and
125
+ // the remaining fields are then compared against that row alone.
126
+ const row = rows.find((r) => r.id === memory.id);
127
+ if (row === undefined) {
128
+ out.push({
129
+ facet: 'memory.id',
130
+ declared: memory.id,
131
+ ...(rows.length > 0 && { observed: rows.map((r) => r.id ?? '?').join(', ') }),
132
+ });
133
+ }
134
+ else {
135
+ for (const field of MEMORY_FIELDS) {
136
+ compare(out, `memory.${field}`, memory[field], row[field]);
137
+ }
138
+ }
139
+ }
140
+ else if (!rows.some((row) => MEMORY_FIELDS.every((f) => matches(memory[f], row[f])))) {
141
+ // Un-narrowed: ANY mounted memory satisfying every declared field counts.
142
+ // Reported as ONE mismatch — naming a per-field winner across rows would
143
+ // invent a memory that does not exist.
144
+ out.push({
145
+ facet: 'memory',
146
+ declared: armLabel({ memory }),
147
+ ...(rows.length > 0 && {
148
+ observed: rows.map((row) => armLabel({ memory: row })).join(' | '),
149
+ }),
150
+ });
151
+ }
152
+ }
153
+ return out;
154
+ }
155
+ /**
156
+ * Which declared arm does this run belong to? The offline door: group N
157
+ * recorded runs into arms by what each run's own manifest says.
158
+ *
159
+ * Rules, all conservative:
160
+ * - only arms that DECLARE facets are candidates (an arm naming nothing matches
161
+ * every run and would swallow the whole study);
162
+ * - a candidate matches when the manifest contradicts none of its facets;
163
+ * - the MOST SPECIFIC match wins (most declared facets), and a tie returns
164
+ * `undefined` — two arms fitting one run equally well is an ambiguity, and
165
+ * guessing which the experimenter meant is exactly the bookkeeping this
166
+ * function replaces.
167
+ */
168
+ export function matchArm(arms, manifest) {
169
+ const fits = arms
170
+ .filter((arm) => declaredFacetCount(arm.facets) > 0)
171
+ .filter((arm) => checkArmApplied(arm, manifest).length === 0)
172
+ .map((arm) => ({ arm, specificity: declaredFacetCount(arm.facets) }))
173
+ .sort((a, b) => b.specificity - a.specificity);
174
+ if (fits.length === 0)
175
+ return undefined;
176
+ if (fits.length > 1 && fits[0].specificity === fits[1].specificity)
177
+ return undefined;
178
+ return fits[0].arm;
179
+ }
180
+ // ─── internals ───────────────────────────────────────────────────────
181
+ const MEMORY_FIELDS = ['type', 'strategy', 'retrieval', 'embedderId', 'flavor'];
182
+ function matches(declared, observed) {
183
+ return declared === undefined || declared === observed;
184
+ }
185
+ function compare(out, facet, declared, observed) {
186
+ if (matches(declared, observed))
187
+ return;
188
+ out.push({ facet, declared: declared, ...(observed !== undefined && { observed }) });
189
+ }
190
+ function isReactMode(value) {
191
+ return value === 'classic' || value === 'dynamic' || value === 'dynamic-grouped';
192
+ }
193
+ function isPosture(value) {
194
+ return value === 'assist' || value === 'guard' || value === 'rails';
195
+ }
196
+ function isContinuity(value) {
197
+ return value === 'turn' || value === 'conversation';
198
+ }
199
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * The arm probe — seeded runs in, shared statistics out.
3
+ *
4
+ * Split in two on purpose. `collectArmRuns` only RUNS (it cannot know the
5
+ * reference yet: when no prior answer was supplied, the reference IS the
6
+ * baseline arm's first answer). `scoreArmRuns` only SCORES. Keeping them apart
7
+ * is what lets the reference be chosen between the two halves without a second
8
+ * pass over the model — the same "one ablation, two readouts" thrift
9
+ * `runAblationProbe` applies to cost.
10
+ *
11
+ * Everything statistical is borrowed, not re-derived: `similarityStats`,
12
+ * `costStatsFrom` and `resolveSamples` come from `ablation.ts` unchanged, so an
13
+ * arm's `AblationRunStats` is the same number computed the same way as an
14
+ * ablation's — which is the point of sharing the statistics while keeping the
15
+ * spec types apart.
16
+ */
17
+ import type { AblationRunStats, Embedder, OutcomeComparator } from '../types.js';
18
+ import type { ArmApplication, ArmRunner, NullBand, RunManifestLike, StrategyArm } from './types.js';
19
+ /** The raw harvest of one arm's seeded runs — no scoring yet. */
20
+ export interface ArmRuns {
21
+ readonly answers: readonly string[];
22
+ readonly loops: readonly number[];
23
+ readonly tokens: readonly number[];
24
+ readonly manifests: readonly RunManifestLike[];
25
+ }
26
+ /**
27
+ * Call the consumer's runner once per seed (0..samples-1) for ONE arm and
28
+ * normalize the two return shapes (`string` | `{output, cost?, manifest?}`) —
29
+ * the same normalization `runAblationProbe` performs, so a bare-string runner
30
+ * costs the caller nothing in ceremony.
31
+ */
32
+ export declare function collectArmRuns(arm: StrategyArm, runner: ArmRunner, samples: number): Promise<ArmRuns>;
33
+ /**
34
+ * Score one arm's harvested answers against the reference: similarity per seed
35
+ * (mean/min/max/stdev) plus the outcome-flip count. Shape-identical to what an
36
+ * ablation probe reports.
37
+ */
38
+ export declare function scoreArmRuns(runs: ArmRuns, reference: string, embedder: Embedder, outcomeChanged: OutcomeComparator): Promise<AblationRunStats>;
39
+ /**
40
+ * Build the inert-intervention control from the baseline arm's OWN seeded runs.
41
+ * See {@link NullBand} for why leave-one-out does not transfer and this does.
42
+ */
43
+ export declare function nullBandFrom(baselineArmId: string, baselineStats: AblationRunStats, gates: boolean): NullBand;
44
+ /**
45
+ * Did this arm actually take effect? Compares every manifest the runner
46
+ * reported against the arm's declared facets.
47
+ *
48
+ * `checked: false` — and therefore no refusal — in exactly two cases, both of
49
+ * which are absence of evidence rather than evidence of absence: the runner
50
+ * reported no manifest, or the arm declares only ablations (no manifest names a
51
+ * tool catalog). Refusing a verdict in either case would punish a consumer for
52
+ * a capture they were never required to make.
53
+ */
54
+ export declare function checkArmApplication(arm: StrategyArm, manifests: readonly RunManifestLike[]): ArmApplication;
@@ -0,0 +1,125 @@
1
+ /**
2
+ * The arm probe — seeded runs in, shared statistics out.
3
+ *
4
+ * Split in two on purpose. `collectArmRuns` only RUNS (it cannot know the
5
+ * reference yet: when no prior answer was supplied, the reference IS the
6
+ * baseline arm's first answer). `scoreArmRuns` only SCORES. Keeping them apart
7
+ * is what lets the reference be chosen between the two halves without a second
8
+ * pass over the model — the same "one ablation, two readouts" thrift
9
+ * `runAblationProbe` applies to cost.
10
+ *
11
+ * Everything statistical is borrowed, not re-derived: `similarityStats`,
12
+ * `costStatsFrom` and `resolveSamples` come from `ablation.ts` unchanged, so an
13
+ * arm's `AblationRunStats` is the same number computed the same way as an
14
+ * ablation's — which is the point of sharing the statistics while keeping the
15
+ * spec types apart.
16
+ */
17
+ import { cosineSimilarity } from '../../../memory/embedding/cosine.js';
18
+ import { costStatsFrom, similarityStats } from '../ablation.js';
19
+ import { checkArmApplied } from './manifest.js';
20
+ import { declaredFacetCount } from './validate.js';
21
+ /**
22
+ * Call the consumer's runner once per seed (0..samples-1) for ONE arm and
23
+ * normalize the two return shapes (`string` | `{output, cost?, manifest?}`) —
24
+ * the same normalization `runAblationProbe` performs, so a bare-string runner
25
+ * costs the caller nothing in ceremony.
26
+ */
27
+ export async function collectArmRuns(arm, runner, samples) {
28
+ const answers = [];
29
+ const loops = [];
30
+ const tokens = [];
31
+ const manifests = [];
32
+ for (let seed = 0; seed < samples; seed++) {
33
+ const raw = await runner(arm, { seed });
34
+ if (typeof raw === 'string') {
35
+ answers.push(raw);
36
+ continue;
37
+ }
38
+ answers.push(raw.output);
39
+ if (raw.cost?.loops !== undefined)
40
+ loops.push(raw.cost.loops);
41
+ if (raw.cost?.tokens !== undefined)
42
+ tokens.push(raw.cost.tokens);
43
+ if (raw.manifest !== undefined)
44
+ manifests.push(raw.manifest);
45
+ }
46
+ return { answers, loops, tokens, manifests };
47
+ }
48
+ /**
49
+ * Score one arm's harvested answers against the reference: similarity per seed
50
+ * (mean/min/max/stdev) plus the outcome-flip count. Shape-identical to what an
51
+ * ablation probe reports.
52
+ */
53
+ export async function scoreArmRuns(runs, reference, embedder, outcomeChanged) {
54
+ const referenceVec = await embedder.embed({ text: reference });
55
+ const similarities = [];
56
+ let flips = 0;
57
+ for (const answer of runs.answers) {
58
+ const vec = await embedder.embed({ text: answer });
59
+ similarities.push(cosineSimilarity(referenceVec, vec));
60
+ if (await outcomeChanged(reference, answer))
61
+ flips++;
62
+ }
63
+ const cost = costStatsFrom(runs.answers.length, runs.loops, runs.tokens);
64
+ return {
65
+ samples: runs.answers.length,
66
+ flips,
67
+ similarity: similarityStats(similarities),
68
+ ...(cost !== undefined ? { cost } : {}),
69
+ };
70
+ }
71
+ /**
72
+ * Build the inert-intervention control from the baseline arm's OWN seeded runs.
73
+ * See {@link NullBand} for why leave-one-out does not transfer and this does.
74
+ */
75
+ export function nullBandFrom(baselineArmId, baselineStats, gates) {
76
+ const similarity = baselineStats.similarity;
77
+ const degenerate = similarity.stdev === 0;
78
+ const note = !gates
79
+ ? `Reported, not applied: a custom answerChanged comparator decides the flips, so an ` +
80
+ `embedding-similarity band is a different instrument and must not veto its findings. The ` +
81
+ `control on that axis is the baseline arm's own flip count, which must be zero.`
82
+ : degenerate
83
+ ? `The baseline arm '${baselineArmId}' reproduced identically on every seed (spread 0), so ` +
84
+ `the floor is a hard ${similarity.min.toFixed(3)}: any change clears it. That is honest ` +
85
+ `for a deterministic scenario and only as strong as the determinism.`
86
+ : `A challenger must sit further from the reference than the baseline arm '${baselineArmId}' ` +
87
+ `ever did across its own seeds (floor ${similarity.min.toFixed(3)}, spread ±${similarity.stdev.toFixed(3)}).`;
88
+ return { baselineArmId, similarity, floor: similarity.min, degenerate, gates, note };
89
+ }
90
+ /**
91
+ * Did this arm actually take effect? Compares every manifest the runner
92
+ * reported against the arm's declared facets.
93
+ *
94
+ * `checked: false` — and therefore no refusal — in exactly two cases, both of
95
+ * which are absence of evidence rather than evidence of absence: the runner
96
+ * reported no manifest, or the arm declares only ablations (no manifest names a
97
+ * tool catalog). Refusing a verdict in either case would punish a consumer for
98
+ * a capture they were never required to make.
99
+ */
100
+ export function checkArmApplication(arm, manifests) {
101
+ const declares = declaredFacetCount(arm.facets) > 0;
102
+ if (!declares || manifests.length === 0) {
103
+ return { manifestsSeen: manifests.length, checked: false, applied: false, mismatches: [] };
104
+ }
105
+ // EVERY run must agree — one seed that quietly built the incumbent is enough
106
+ // to poison the arm's numbers, and it would be invisible in an average.
107
+ const mismatches = [];
108
+ const seen = new Set();
109
+ for (const manifest of manifests) {
110
+ for (const mismatch of checkArmApplied(arm, manifest)) {
111
+ const key = `${mismatch.facet}=${mismatch.observed ?? '<absent>'}`;
112
+ if (seen.has(key))
113
+ continue;
114
+ seen.add(key);
115
+ mismatches.push(mismatch);
116
+ }
117
+ }
118
+ return {
119
+ manifestsSeen: manifests.length,
120
+ checked: true,
121
+ applied: mismatches.length === 0,
122
+ mismatches,
123
+ };
124
+ }
125
+ //# sourceMappingURL=probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/probe.ts"],"names":[],"mappings":"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"}