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,103 @@
1
+ /**
2
+ * The arm verdict — the same three tiers, phrased for a substitution.
3
+ *
4
+ * ## Why not widen `verdictFor`
5
+ *
6
+ * `verdictFor` already carries an `action` word (`'ablating'` | `'restoring'`)
7
+ * and a third would have been one line. It ends its NOT-CONFIRMED sentence with
8
+ * "its ranking remains a correlational proxy only" — true of a suspect, which
9
+ * was RANKED before it was probed, and meaningless for an arm, which was never
10
+ * ranked at all. Widening the union would have forced that sentence onto the
11
+ * new tier or edited a string three existing tests pin byte-for-byte. So the
12
+ * tier LOGIC is shared (`probeFlipped`, the majority rule, the zero-tolerance
13
+ * baseline gate) and only the prose is new.
14
+ *
15
+ * ## The tiers, in refusal order
16
+ *
17
+ * 1. **Unstable baseline** → inconclusive. The incumbent could not reproduce
18
+ * the reference answer across its own seeds, so a difference measured
19
+ * against it is measuring the scenario, not the arm. Zero tolerance, exactly
20
+ * as `bisect.ts` and `localize.ts` apply it: ONE un-intervened flip is
21
+ * enough, because the majority rule would let a 1-in-3 flaky scenario reach
22
+ * a causal verdict.
23
+ * 2. **Arm did not take effect** → inconclusive. The run manifest contradicted
24
+ * what the arm declared. Any difference here is evidence about a
25
+ * configuration nobody meant to test.
26
+ * 3. **Inside the null band** → inconclusive. A majority flip whose mean
27
+ * similarity still sits within the baseline arm's own seed-to-seed spread is
28
+ * not separable from noise. Only applied when the flip comparator and the
29
+ * band are the same instrument (see `NullBand.gates`).
30
+ * 4. **Majority flip, outside the band, stable baseline** → confirmed. This is
31
+ * a causal claim of the same tier an ablation verdict makes: a
32
+ * counterfactual intervention, seeded reruns, variance reported, and a
33
+ * baseline that held.
34
+ * 5. **Minority flips** → inconclusive. 6. **No flips** → not-confirmed.
35
+ *
36
+ * Every claim is bounded by the scenario and the comparator, and says so — an
37
+ * arm confirmed on one question has been confirmed on one question.
38
+ */
39
+ import { probeFlipped } from '../ablation.js';
40
+ /** Translate one arm's probe evidence into its verdict. See module docs. */
41
+ export function verdictForArm(armId, stats, context) {
42
+ const { baselineArmId, band } = context;
43
+ // 1. An unstable incumbent invalidates every comparison against it.
44
+ if (!context.baselineStable) {
45
+ return {
46
+ verdict: 'inconclusive',
47
+ claim: `INCONCLUSIVE: the baseline arm '${baselineArmId}' did not reproduce the reference answer ` +
48
+ `across its own seeded reruns (${context.baselineStats.flips}/${context.baselineStats.samples} ` +
49
+ `changed) — no arm-comparison verdict for '${armId}' is trustworthy on an unstable scenario.`,
50
+ };
51
+ }
52
+ // 2. The run manifest says this arm is not the arm that ran.
53
+ if (context.application.checked && !context.application.applied) {
54
+ const first = context.application.mismatches[0];
55
+ const observed = first?.observed ?? 'nothing (the manifest does not name it)';
56
+ return {
57
+ verdict: 'inconclusive',
58
+ claim: `INCONCLUSIVE: arm '${armId}' declared ${first?.facet ?? 'a facet'}=${first?.declared ?? '?'} but the run manifest reported ${observed} — the arm did not take effect, so any ` +
59
+ `difference measured here is not evidence about it.`,
60
+ };
61
+ }
62
+ const flipped = probeFlipped(stats);
63
+ const mean = stats.similarity.mean.toFixed(3);
64
+ // 3. Flipped, but not further than the incumbent drifts from itself.
65
+ if (flipped && band.gates && !context.outsideNullBand) {
66
+ return {
67
+ verdict: 'inconclusive',
68
+ claim: `INCONCLUSIVE: switching to arm '${armId}' changed the answer in ${stats.flips}/${stats.samples} ` +
69
+ `seeded reruns, but its mean similarity to the reference (${mean}) sits INSIDE the baseline ` +
70
+ `arm's own seed-to-seed band (floor ${band.floor.toFixed(3)}) — not separable from run-to-run ` +
71
+ `noise. Raise samples, or compare on a domain comparator.`,
72
+ };
73
+ }
74
+ // 4. The causal tier.
75
+ if (flipped) {
76
+ const bandClause = band.gates
77
+ ? `, outside the baseline arm's own band (floor ${band.floor.toFixed(3)})`
78
+ : '';
79
+ return {
80
+ verdict: 'confirmed',
81
+ claim: `CAUSAL: switching from baseline arm '${baselineArmId}' to '${armId}' changed the answer in ` +
82
+ `${stats.flips}/${stats.samples} seeded reruns (mean similarity to the reference ${mean} ± ` +
83
+ `${stats.similarity.stdev.toFixed(3)})${bandClause}, on a baseline that reproduced. Bounded ` +
84
+ `by this scenario and this comparator.`,
85
+ };
86
+ }
87
+ // 5. Minority — real movement, not a majority.
88
+ if (stats.flips > 0) {
89
+ return {
90
+ verdict: 'inconclusive',
91
+ claim: `INCONCLUSIVE: switching to arm '${armId}' changed the answer in only ${stats.flips}/${stats.samples} ` +
92
+ `seeded reruns — below majority; raise samples or check scenario stability.`,
93
+ };
94
+ }
95
+ // 6. No movement at all.
96
+ return {
97
+ verdict: 'not-confirmed',
98
+ claim: `NOT CONFIRMED: switching to arm '${armId}' did not change the answer in ${stats.samples} seeded ` +
99
+ `reruns — on this scenario, by this comparator, it is not distinguishable from baseline arm ` +
100
+ `'${baselineArmId}'. That is a finding about this scenario, not about the strategies.`,
101
+ };
102
+ }
103
+ //# sourceMappingURL=verdict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../../../../src/lib/context-bisect/arms/verdict.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ export { sliceToBacktrackTrace, type SliceToBacktrackTraceOptions, } from './sli
26
26
  export { ablationForSuspect, applyAblations, costStatsFrom, defaultOutcomeComparator, median, probeFlipped, runAblationProbe, verdictFor, type AblationTargets, type ProbeConfig, } from './ablation.js';
27
27
  export { assignCostVerdicts, classifySuspect, MIN_LOOPS_SAVED } from './cost.js';
28
28
  export { removableSources, rerunWithoutSources, type IgnoredSource, type RemovableSource, type RerunWithoutSourcesOptions, type RerunWithoutSourcesResult, type WhatChanged, } from './rerun.js';
29
+ export { applyArm, armConfigKey, armFacetsFromManifest, armLabel, checkArmApplication, checkArmApplied, collectArmRuns, compareStrategyArms, declaredFacetCount, manifestFromEvents, matchArm, nullBandFrom, RUN_CONFIGURED_EVENT, scoreArmRuns, validateStrategyArms, verdictForArm, type ArmApplication, type ArmFacetMismatch, type ArmFacets, type ArmMemoryFacet, type ArmOutcome, type ArmRunResult, type ArmRunner, type ArmRuns, type ArmVerdictContext, type CompareStrategyArmsOptions, type ManifestMemoryLike, type NullBand, type RunManifestLike, type StrategyArm, type StrategyComparison, } from './arms/index.js';
29
30
  export { shortlistEarlyCulprits, DEFAULT_RECENCY_DECAY, type LoopCandidate, type LoopRecallShortlist, type ShortlistEarlyCulpritsOptions, } from './loop-recall.js';
30
31
  export { walkToRoot, walkTrajectory, buildWriterFrameIndex, type HopNarrowedBy, type RootCauseHop, type RootCauseNote, type RootCausePath, type WalkToRootOptions, } from './walk-to-root.js';
31
32
  export { joinVariableSlice, traceVariable, type AgentKeyMoment, type AgentVariableSlice, type DataflowCoverage, type JoinVariableSliceOptions, type TraceVariableOptions, type VariableAblationHook, } from './variable-recall.js';
@@ -32,6 +32,11 @@ export { assignCostVerdicts, classifySuspect, MIN_LOOPS_SAVED } from './cost.js'
32
32
  // The counterfactual re-run as one call — the product loop over the ablation
33
33
  // machinery (wraps applyAblations/runAblationProbe; no new machinery).
34
34
  export { removableSources, rerunWithoutSources, } from './rerun.js';
35
+ // Strategy arms — the SUBSTITUTION tier. Ablation removes; an arm REPLACES, so
36
+ // it is a sibling spec type rather than a fifth `AblationSpec` kind (the union
37
+ // feeds a subset search that substitutions do not compose under). Statistics
38
+ // shared, search machinery not. See src/lib/context-bisect/arms/README.md.
39
+ export { applyArm, armConfigKey, armFacetsFromManifest, armLabel, checkArmApplication, checkArmApplied, collectArmRuns, compareStrategyArms, declaredFacetCount, manifestFromEvents, matchArm, nullBandFrom, RUN_CONFIGURED_EVENT, scoreArmRuns, validateStrategyArms, verdictForArm, } from './arms/index.js';
35
40
  // Per-loop recall shortlist (proposal 006, L3): rescue early culprits → narrow before ablation.
36
41
  export { shortlistEarlyCulprits, DEFAULT_RECENCY_DECAY, } from './loop-recall.js';
37
42
  // Root-cause backtracking debugger (proposal 007, L4): walk symptom → root (narrow → hop → convict).
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/context-bisect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAE7B,oFAAoF;AACpF,OAAO,EACL,kBAAkB,GAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,GAKb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,GAOjB,MAAM,uBAAuB,CAAC;AAC/B,yEAAyE;AACzE,qEAAqE;AACrE,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,UAAU,GAGX,MAAM,eAAe,CAAC;AAEvB,8EAA8E;AAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjF,6EAA6E;AAC7E,uEAAuE;AACvE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAMpB,MAAM,YAAY,CAAC;AAEpB,gGAAgG;AAChG,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAE1B,qGAAqG;AACrG,OAAO,EACL,UAAU,EACV,cAAc,EACd,qBAAqB,GAMtB,MAAM,mBAAmB,CAAC;AAE3B,wEAAwE;AACxE,+EAA+E;AAC/E,6EAA6E;AAC7E,OAAO,EACL,iBAAiB,EACjB,aAAa,GAOd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,GAEzB,MAAM,+BAA+B,CAAC;AAEvC,4EAA4E;AAC5E,6CAA6C;AAC7C,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,GAOd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,GAIf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,GA0BxB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/context-bisect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,cAAc,EACd,cAAc,GAIf,MAAM,qBAAqB,CAAC;AAE7B,oFAAoF;AACpF,OAAO,EACL,kBAAkB,GAInB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,GAIpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,GAKb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,GAOjB,MAAM,uBAAuB,CAAC;AAC/B,yEAAyE;AACzE,qEAAqE;AACrE,OAAO,EACL,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,UAAU,GAGX,MAAM,eAAe,CAAC;AAEvB,8EAA8E;AAC9E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjF,6EAA6E;AAC7E,uEAAuE;AACvE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GAMpB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAC3E,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,oBAAoB,EACpB,aAAa,GAgBd,MAAM,iBAAiB,CAAC;AAEzB,gGAAgG;AAChG,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GAItB,MAAM,kBAAkB,CAAC;AAE1B,qGAAqG;AACrG,OAAO,EACL,UAAU,EACV,cAAc,EACd,qBAAqB,GAMtB,MAAM,mBAAmB,CAAC;AAE3B,wEAAwE;AACxE,+EAA+E;AAC/E,6EAA6E;AAC7E,OAAO,EACL,iBAAiB,EACjB,aAAa,GAOd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,GAEzB,MAAM,+BAA+B,CAAC;AAEvC,4EAA4E;AAC5E,6CAA6C;AAC7C,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,GAOd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,cAAc,GAIf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,GA0BxB,MAAM,YAAY,CAAC"}
@@ -19,7 +19,7 @@ export { pointerOf, SKIP_STEP_TOOL_NAME, skipStepDescriptor, type OnSkipPolicy,
19
19
  export { defineStepsHint, STEPS_HINT_METADATA_KEY, type StepsHintOptions, } from './factories/defineStepsHint.js';
20
20
  export { checkArtifactVocabularies, vocabularyOf, type ArtifactVocabulary, } from './skillVocabulary.js';
21
21
  export { SkillRegistry, type SkillRegistryOptions } from './SkillRegistry.js';
22
- export { skillsFromDir, type SkillsFromDirOptions } from './skillsFromDir.js';
22
+ export { skillsFromDir, runbookFromDir, type SkillsFromDirOptions, type DirRunbook, } from './skillsFromDir.js';
23
23
  export { buildListSkillsTool, buildReadSkillTool, buildSkipStepTool, type ReadSkillOffer, type SkillToolPair, } from './skillTools.js';
24
24
  export { listSkillsDescriptor, readSkillDescriptor } from './skillToolDescriptors.js';
25
25
  export type { SkillCachePolicy, SkillCachePolicyContext, SkillGraphHost, SkillGraphIterationContext, SkillTool, SkillToolDescriptor, SkillToolSchema, } from './hostContract.js';
@@ -45,7 +45,9 @@ export { SkillRegistry } from './SkillRegistry.js';
45
45
  // File-authored skills — a loader over `defineSkill`, not a second mechanism.
46
46
  // Node-only (reads the filesystem); node:fs is imported lazily inside the call
47
47
  // so this barrel stays safe to import from a browser bundle.
48
- export { skillsFromDir } from './skillsFromDir.js';
48
+ // `runbookFromDir` is the same loader read as a whole runbook — skills PLUS the
49
+ // edges each file's `routes:` declares, ready for `skillGraph({ ...runbook })`.
50
+ export { skillsFromDir, runbookFromDir, } from './skillsFromDir.js';
49
51
  // Skill-tool builders — used by SkillRegistry.toTools() and the Agent's
50
52
  // auto-attach path. Exported so consumers building custom tool wiring
51
53
  // (e.g., gatedTools chains) can compose the same `list_skills` /
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/index.ts"],"names":[],"mappings":"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"}
@@ -93,12 +93,21 @@
93
93
  * visible wherever the graph reports its problems — because a reader who meets
94
94
  * it only in prose docs will meet a clean report first.
95
95
  *
96
+ * ## The opposite assertion lives next door
97
+ *
98
+ * Everything here is POSITIVE: this rule claims this phrase. The negative form
99
+ * — a phrase that must claim NO skill, which is the assertion that catches
100
+ * over-triggering — is `skillNeverRoutes.ts`, declared on the GRAPH rather than
101
+ * on a rule (a phrase that must route nowhere belongs to no skill). Both ask
102
+ * `startRuleClaim.ts` the same question and differ only in which answer is a
103
+ * defect; a phrase declared BOTH ways is reported there as the contradiction it
104
+ * is.
105
+ *
96
106
  * Composed into `graph.checkup()` by `skillGraph.ts`, exactly like
97
107
  * `skillContract`/`skillIntent`/`skillVocabulary`: this module owns the rule
98
108
  * AND its boundaries, and reports in the shared `GraphProblem` voice.
99
109
  */
100
- import type { InjectionContext } from './types.js';
101
- import { type SkillMatchData } from './skillMatch.js';
110
+ import { type StartRuleDecl } from './startRuleClaim.js';
102
111
  import type { GraphProblem } from './skillGraphCheckup.js';
103
112
  /**
104
113
  * The statement the check-up makes about its own reach, carried on
@@ -111,18 +120,12 @@ export declare const EXAMPLES_BOUNDARY: string;
111
120
  * only the order-independent check (self-match) could run. */
112
121
  export declare const EXAMPLES_ORDER_NOT_CHECKED: string;
113
122
  /**
114
- * The slice of an entry declaration this module reads — structural, so
115
- * `skillGraph.ts`'s module-private `EntryDecl` satisfies it unchanged (the
116
- * same trick `skillIntent.ts` uses).
123
+ * The slice of an entry declaration this module reads — the shared claim shape
124
+ * ({@link StartRuleDecl}, which owns "who claims a phrase") plus the one field
125
+ * only this check reads. Structural, so `skillGraph.ts`'s module-private
126
+ * `EntryDecl` satisfies it unchanged (the same trick `skillIntent.ts` uses).
117
127
  */
118
- export interface ExampleRuleDecl {
119
- readonly id: string;
120
- /** The compiled condition (from `match:`) or the author's `when`. Absent on
121
- * an unconditional entry and on an intent rule (no sync predicate). */
122
- readonly when?: (ctx: InjectionContext) => boolean;
123
- /** The serializable matcher behind `when`, when declared as data — quoted
124
- * back in the messages, and the one way to spot the intent arm. */
125
- readonly match?: SkillMatchData;
128
+ export interface ExampleRuleDecl extends StartRuleDecl {
126
129
  /** The phrasings this rule claims (build-time TEST material). */
127
130
  readonly examples?: readonly string[];
128
131
  }
@@ -93,11 +93,21 @@
93
93
  * visible wherever the graph reports its problems — because a reader who meets
94
94
  * it only in prose docs will meet a clean report first.
95
95
  *
96
+ * ## The opposite assertion lives next door
97
+ *
98
+ * Everything here is POSITIVE: this rule claims this phrase. The negative form
99
+ * — a phrase that must claim NO skill, which is the assertion that catches
100
+ * over-triggering — is `skillNeverRoutes.ts`, declared on the GRAPH rather than
101
+ * on a rule (a phrase that must route nowhere belongs to no skill). Both ask
102
+ * `startRuleClaim.ts` the same question and differ only in which answer is a
103
+ * defect; a phrase declared BOTH ways is reported there as the contradiction it
104
+ * is.
105
+ *
96
106
  * Composed into `graph.checkup()` by `skillGraph.ts`, exactly like
97
107
  * `skillContract`/`skillIntent`/`skillVocabulary`: this module owns the rule
98
108
  * AND its boundaries, and reports in the shared `GraphProblem` voice.
99
109
  */
100
- import { plainMatchCaption } from './skillMatch.js';
110
+ import { COLD_CONTEXT_PHRASE, claimLaws, describeCondition, runsOn, } from './startRuleClaim.js';
101
111
  /**
102
112
  * The statement the check-up makes about its own reach, carried on
103
113
  * `GraphCheckup.notes` whenever any rule declared examples. Same voice as the
@@ -183,24 +193,11 @@ export function checkStartRuleExamples(input) {
183
193
  if (!entries.some((e) => e.examples !== undefined && e.examples.length > 0))
184
194
  return NOTHING;
185
195
  // WHO CAN CLAIM A PHRASE — both routing laws, mirrored, not re-invented (see
186
- // this file's header). Intent entries never claim synchronously in either
187
- // (no predicate at all), so neither set carries them.
188
- //
189
- // • COLD WALK (`makeResolveCursor`, the default mount): every non-intent
190
- // entry, unconditional ones included — they claim everything from their
191
- // position onward.
192
- // • CASCADE tier 1 (`firstRuleMatch`, mounted by `.classify()` OR by
193
- // `continuity: 'conversation'`): the CONDITIONAL non-intent entries only.
194
- //
195
- // With a classifier the cascade is certain, so it is the only law consulted.
196
- // Without one, EITHER may be mounted — both are computed, and where they
197
- // disagree the report says so instead of picking one.
198
- const nonIntent = entries
199
- .map((entry, index) => ({ entry, index }))
200
- .filter(({ entry }) => entry.match?.kind !== 'intent');
201
- const ruleClaimants = nonIntent.filter(({ entry }) => entry.when !== undefined);
202
- const claimUnderCascade = (phrase) => ruleClaimants.find(({ entry }) => runsOn(entry, phrase) === 'match');
203
- const claimUnderColdWalk = (phrase) => nonIntent.find(({ entry }) => runsOn(entry, phrase) === 'match');
196
+ // this file's header and `startRuleClaim.ts`, which owns them). With a
197
+ // classifier the cascade is certain, so it is the only law consulted. Without
198
+ // one, EITHER may be mounted — both are computed, and where they disagree the
199
+ // report says so instead of picking one.
200
+ const { underCascade: claimUnderCascade, underColdWalk: claimUnderColdWalk } = claimLaws(entries);
204
201
  const problems = [];
205
202
  for (const [index, entry] of entries.entries()) {
206
203
  const examples = entry.examples;
@@ -362,36 +359,6 @@ export function checkStartRuleExamples(input) {
362
359
  notes: orderDecides ? [EXAMPLES_BOUNDARY] : [EXAMPLES_ORDER_NOT_CHECKED, EXAMPLES_BOUNDARY],
363
360
  };
364
361
  }
365
- /**
366
- * Run one entry's condition over one phrase, on a COLD-START context — the
367
- * context a turn's first iteration really hands a start rule: iteration 1, the
368
- * phrase as `userMessage`, no history, no cursor, no tool results. A throw is
369
- * reported as `'threw'` and treated as a no-match by every caller, which is
370
- * exactly what the cursor resolver does with it at run time (so a claim made
371
- * here stays true of the run).
372
- *
373
- * An entry with NO condition matches everything: that is the cold walk's law
374
- * (`if (!e.when) return { to: e.id }`), not a shortcut.
375
- */
376
- function runsOn(entry, phrase) {
377
- if (entry.when === undefined)
378
- return 'match';
379
- try {
380
- return entry.when(coldContext(phrase)) ? 'match' : 'no-match';
381
- }
382
- catch {
383
- return 'threw';
384
- }
385
- }
386
- function coldContext(userMessage) {
387
- return { iteration: 1, userMessage, history: [], activatedInjectionIds: [] };
388
- }
389
- /** The one context every predicate here is judged on, spelled out for the
390
- * reader of a message — a check that names its own inputs can be argued with;
391
- * one that hides them can only be guessed at. Kept as ONE string so every
392
- * message describes the SAME context {@link coldContext} really builds. */
393
- const COLD_CONTEXT_PHRASE = 'a COLD-START context (iteration 1, the phrase as `userMessage`, empty `history`, no ' +
394
- 'cursor and no activated injections)';
395
362
  /** The `example-misses-own-rule` sentence. Two readings, and the message says
396
363
  * which one it is: a data matcher's no-match holds under every context, an
397
364
  * opaque `when`'s holds only under the context it was run on. */
@@ -421,15 +388,4 @@ function selfMissMessage(entry, phrase, own) {
421
388
  `example to the rule that claims the phrase cold — a rule-level \`examples\` list is only ` +
422
389
  `ever run on the context named above. (Proved by running this rule's own predicate on it.)`);
423
390
  }
424
- /** How a rule's condition is named in a message: the data matcher quoted back,
425
- * the honest word for opaque code — or, for an entry that declares neither,
426
- * what having no condition MEANS. Naming a `when` predicate an unconditional
427
- * entry does not have is how a report describes a graph nobody wrote. */
428
- function describeCondition(entry) {
429
- if (entry.match !== undefined)
430
- return `its matcher \`${plainMatchCaption(entry.match)}\``;
431
- return entry.when === undefined
432
- ? 'declares no `match` and no `when`, so it claims every message'
433
- : 'its `when` predicate';
434
- }
435
391
  //# sourceMappingURL=skillExamples.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skillExamples.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillExamples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skillExamples.js","sourceRoot":"","sources":["../../../../src/lib/injection-engine/skillExamples.ts"],"names":[],"mappings":"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"}
@@ -208,6 +208,16 @@ export interface SkillGraphFlatConfig {
208
208
  * See {@link BuildOptions.scopeTools}.
209
209
  */
210
210
  readonly scopeTools?: boolean;
211
+ /**
212
+ * Phrasings this graph must claim NOWHERE — the negative routing rows. Same
213
+ * machine as `.neverRoutes([...])`; see that method for what the check
214
+ * proves and what it deliberately does not. A row a declared start rule
215
+ * claims is an ERROR (`never-routes-claimed`), naming the rule.
216
+ *
217
+ * @example
218
+ * skillGraph({ skills, start: { rules }, neverRoutes: ['what is the weather'] });
219
+ */
220
+ readonly neverRoutes?: readonly string[];
211
221
  readonly check?: GraphCheckMode;
212
222
  /** Baseline agent tool names — see {@link BuildOptions.knownTools}. */
213
223
  readonly knownTools?: readonly string[];
@@ -232,6 +242,10 @@ export interface SkillGraphTreeConfig {
232
242
  readonly scopeTools?: boolean;
233
243
  readonly start?: never;
234
244
  readonly steps?: never;
245
+ /** A tree has no start RULES for a negative row to be judged against, so the
246
+ * type refuses it here and `build()` refuses it at runtime (see
247
+ * {@link SkillGraphBuilder.neverRoutes}). */
248
+ readonly neverRoutes?: never;
235
249
  readonly check?: GraphCheckMode;
236
250
  /** Baseline agent tool names — see {@link BuildOptions.knownTools}. */
237
251
  readonly knownTools?: readonly string[];
@@ -815,6 +829,42 @@ export interface SkillGraphBuilder {
815
829
  * router per graph. Flat graphs only.
816
830
  */
817
831
  classify(scorer: IntentScorer, policy?: Partial<RoutingPolicy>): SkillGraphBuilder;
832
+ /**
833
+ * Declare phrasings this graph must claim **NOWHERE** — the negative form of
834
+ * a rule's `examples`, and the one that catches the expensive failure.
835
+ *
836
+ * An under-triggering skill costs a turn (the model tier picks instead). An
837
+ * OVER-triggering skill costs the answer: the wrong body enters the system
838
+ * prompt and the wrong tools enter the tools slot, and everything said after
839
+ * that is shaped by a skill with no business in the turn.
840
+ *
841
+ * It is declared on the GRAPH, not on a skill, because a phrase that must
842
+ * route nowhere belongs to no skill: the assertion is satisfied only when
843
+ * EVERY rule declines, and a row hung on one skill would vanish the day that
844
+ * skill was deleted — exactly when a graph is re-partitioned, which is
845
+ * exactly when over-triggering appears.
846
+ *
847
+ * `graph.checkup()` runs every declared start condition over the phrase on a
848
+ * cold-start context and reports the rule that claims it, BY NAME, as an
849
+ * ERROR (`never-routes-claimed`) — so a default `.build()` refuses.
850
+ *
851
+ * **What it proves, exactly:** no declared start RULE claims the phrase. Not
852
+ * "no routing at all": an intent rule is judged by a classifier at run time, a
853
+ * scorer / `.entryByRead()` menu ranks descriptions, and `read_skill` can
854
+ * always open an open skill by name. That statement rides the report itself
855
+ * (`checkup().notes`).
856
+ *
857
+ * Accepts one phrase or a list; call it as often as you like (rows
858
+ * accumulate). A duplicate row is refused — one row already asserts it
859
+ * against every rule.
860
+ *
861
+ * @example
862
+ * skillGraph()
863
+ * .entry(billing, { match: { keywords: ['refund', 'charge'] } })
864
+ * .neverRoutes(["what's the weather in Berlin"])
865
+ * .build();
866
+ */
867
+ neverRoutes(phrases: string | readonly string[]): SkillGraphBuilder;
818
868
  build(opts?: BuildOptions): SkillGraph;
819
869
  }
820
870
  export declare function skillGraph(): SkillGraphBuilder;
@@ -64,6 +64,8 @@ import { checkupGraph, formatCheckup, } from './skillGraphCheckup.js';
64
64
  import { checkSkillContracts } from './skillContract.js';
65
65
  import { checkArtifactVocabularies } from './skillVocabulary.js';
66
66
  import { checkStartRuleExamples, validateStartRuleExamples } from './skillExamples.js';
67
+ import { checkNeverRoutes, neverRouteKey, validateNeverRoutes } from './skillNeverRoutes.js';
68
+ import { checkPartition } from './skillPartition.js';
67
69
  import { compileMatch, mermaidMatchCaption, } from './skillMatch.js';
68
70
  import { resolveRoutingPolicy } from './routingPolicy.js';
69
71
  import { buildTurnRoutingPlan, findDuplicateIntentExamples, runCheckupIntents, } from './skillIntent.js';
@@ -126,6 +128,10 @@ export function skillGraph(config) {
126
128
  let entryByReadFlag = false;
127
129
  let classifyScorer;
128
130
  let classifyPolicy;
131
+ // The negative rows, in declaration order. A graph that never calls
132
+ // `.neverRoutes()` keeps an empty array and pays one length check at
133
+ // check-up time — zero cost when unused.
134
+ const neverRoutePhrases = [];
129
135
  /**
130
136
  * Register a skill under its id, refusing a second DIFFERENT skill under an id
131
137
  * already taken (8.4.0). Until then this was a bare `Map.set` — last write won,
@@ -241,6 +247,14 @@ export function skillGraph(config) {
241
247
  classifyPolicy = policy;
242
248
  return builder;
243
249
  },
250
+ neverRoutes(phrases) {
251
+ // Validated at the keystroke, like a rule's `examples` — an unusable row
252
+ // is refused where it was written instead of quietly asserting nothing at
253
+ // check-up time. The already-declared set makes the duplicate refusal
254
+ // work across calls, not just within one.
255
+ neverRoutePhrases.push(...validateNeverRoutes(phrases, '.neverRoutes(...)', new Set(neverRoutePhrases.map(neverRouteKey))));
256
+ return builder;
257
+ },
244
258
  build(opts = {}) {
245
259
  // One entry router per graph — classify is a third machine beside the
246
260
  // scorer and the model-read menu, and two of them deciding one turn
@@ -290,6 +304,17 @@ export function skillGraph(config) {
290
304
  '.tree(), which declares tool scoping on .tree(root, { scopeTools }) (object ' +
291
305
  "form: the tree arm's own `scopeTools` field) — set it there instead.");
292
306
  }
307
+ // A negative row is judged against the START RULES, and a `.tree()` has
308
+ // none — it routes by predicate on every iteration, with no turn start to
309
+ // claim or decline a phrase. Accepting the rows here would run them
310
+ // against an empty rule set and report a clean pass, which is the one
311
+ // answer a negative assertion must never give by construction.
312
+ if (treeRoot && neverRoutePhrases.length > 0) {
313
+ throw new Error(`skillGraph: .neverRoutes(...) declares ${plural(neverRoutePhrases.length, 'phrase', 'phrases')} that must claim no skill, but this graph is a .tree() — which routes by predicate ` +
314
+ 'on every iteration and has no start rules for a phrase to be judged against, so ' +
315
+ 'the rows would pass in silence and you would read that as proof. Assert them on ' +
316
+ 'a flat entry/route graph, or test the tree by running its predicates directly.');
317
+ }
293
318
  // A tree and the flat entry/route wiring are two ways to declare the same
294
319
  // thing, and only ONE of them compiles: the tree branch below never reads
295
320
  // `entries` or `routes`. Until 8.4.0 that was silent — the tree won and every
@@ -368,17 +393,37 @@ export function skillGraph(config) {
368
393
  orderDecides: !(entryScorer !== undefined || entryByReadFlag) || classifyScorer !== undefined,
369
394
  hasClassifier: classifyScorer !== undefined,
370
395
  });
396
+ // The NEGATIVE rows — phrases this graph claims NOWHERE. No
397
+ // `orderDecides` gate: "nobody claims it" is an assertion every rule
398
+ // has to satisfy, so the order they are read in cannot change the
399
+ // answer (skillNeverRoutes.ts's header has the whole argument).
400
+ const negatives = checkNeverRoutes({ entries, phrases: neverRoutePhrases });
401
+ // The PARTITION advisories — how this graph cut the world into skills,
402
+ // read from names and structure alone. Warnings, always: every signal
403
+ // has a legitimate design behind it, and each message says which.
404
+ const partition = checkPartition({
405
+ skills: [...skillsById.values()],
406
+ routeCount: routes.length,
407
+ entryCount: entries.length,
408
+ isTree: treeRoot !== undefined,
409
+ });
371
410
  const problems = [
372
411
  ...wiring.problems,
373
412
  ...intentDuplicates,
374
413
  ...contract,
375
414
  ...vocabularies,
376
415
  ...examples.problems,
416
+ ...negatives.problems,
417
+ ...partition,
377
418
  ];
419
+ // Notes are statements about the report's own REACH, and each check
420
+ // brings its own — a graph that declared both examples and negative
421
+ // rows carries both boundaries, in declaration order of the checks.
422
+ const notes = [...examples.notes, ...negatives.notes];
378
423
  return {
379
424
  ok: !problems.some((p) => p.kind === 'error'),
380
425
  problems,
381
- ...(examples.notes.length > 0 && { notes: examples.notes }),
426
+ ...(notes.length > 0 && { notes }),
382
427
  };
383
428
  };
384
429
  // The cursor resolver — the single source of truth for `from`-gated, sticky
@@ -738,6 +783,12 @@ export function skillGraph(config) {
738
783
  builder.entryByRead();
739
784
  }
740
785
  }
786
+ // The negative rows (graph level, like the skills list itself — a phrase
787
+ // that must route nowhere belongs to no skill and to no `start` arm).
788
+ // Declared BEFORE `build()` so the tree refusal fires there, in one place,
789
+ // for both forms.
790
+ if (config.neverRoutes !== undefined)
791
+ builder.neverRoutes(config.neverRoutes);
741
792
  for (const step of config.steps ?? []) {
742
793
  builder.route(resolve(step.from), resolve(step.to), {
743
794
  ...(step.when && { when: step.when }),