@ironbee-ai/cli 0.6.1 → 0.7.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 (381) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +167 -39
  3. package/dist/analysis/code-changes.js +3 -3
  4. package/dist/analysis/code-changes.js.map +1 -1
  5. package/dist/analysis/cross-session.js.map +1 -1
  6. package/dist/analysis/fix-effectiveness.js.map +1 -1
  7. package/dist/analysis/time-analysis.js.map +1 -1
  8. package/dist/analysis/verdict-details.js.map +1 -1
  9. package/dist/analysis/verification-quality.js.map +1 -1
  10. package/dist/analytics/classifier.d.ts +99 -0
  11. package/dist/analytics/classifier.d.ts.map +1 -0
  12. package/dist/analytics/classifier.js +380 -0
  13. package/dist/analytics/classifier.js.map +1 -0
  14. package/dist/analytics/emit.d.ts +67 -0
  15. package/dist/analytics/emit.d.ts.map +1 -0
  16. package/dist/analytics/emit.js +901 -0
  17. package/dist/analytics/emit.js.map +1 -0
  18. package/dist/analytics/errors.d.ts +33 -0
  19. package/dist/analytics/errors.d.ts.map +1 -0
  20. package/dist/analytics/errors.js +93 -0
  21. package/dist/analytics/errors.js.map +1 -0
  22. package/dist/analytics/hook-trigger.d.ts +39 -0
  23. package/dist/analytics/hook-trigger.d.ts.map +1 -0
  24. package/dist/analytics/hook-trigger.js +127 -0
  25. package/dist/analytics/hook-trigger.js.map +1 -0
  26. package/dist/analytics/log.d.ts +44 -0
  27. package/dist/analytics/log.d.ts.map +1 -0
  28. package/dist/analytics/log.js +158 -0
  29. package/dist/analytics/log.js.map +1 -0
  30. package/dist/analytics/merge.d.ts +40 -0
  31. package/dist/analytics/merge.d.ts.map +1 -0
  32. package/dist/analytics/merge.js +527 -0
  33. package/dist/analytics/merge.js.map +1 -0
  34. package/dist/analytics/pricing.d.ts +149 -0
  35. package/dist/analytics/pricing.d.ts.map +1 -0
  36. package/dist/analytics/pricing.js +179 -0
  37. package/dist/analytics/pricing.js.map +1 -0
  38. package/dist/analytics/projection.d.ts +356 -0
  39. package/dist/analytics/projection.d.ts.map +1 -0
  40. package/dist/analytics/projection.js +2281 -0
  41. package/dist/analytics/projection.js.map +1 -0
  42. package/dist/analytics/spawn.d.ts +28 -0
  43. package/dist/analytics/spawn.d.ts.map +1 -0
  44. package/dist/analytics/spawn.js +57 -0
  45. package/dist/analytics/spawn.js.map +1 -0
  46. package/dist/analytics/state.d.ts +58 -0
  47. package/dist/analytics/state.d.ts.map +1 -0
  48. package/dist/analytics/state.js +329 -0
  49. package/dist/analytics/state.js.map +1 -0
  50. package/dist/analytics/transcript.d.ts +150 -0
  51. package/dist/analytics/transcript.d.ts.map +1 -0
  52. package/dist/analytics/transcript.js +276 -0
  53. package/dist/analytics/transcript.js.map +1 -0
  54. package/dist/analytics/types.d.ts +875 -0
  55. package/dist/analytics/types.d.ts.map +1 -0
  56. package/dist/analytics/types.js +31 -0
  57. package/dist/analytics/types.js.map +1 -0
  58. package/dist/clients/base.d.ts +21 -2
  59. package/dist/clients/base.d.ts.map +1 -1
  60. package/dist/clients/claude/commands/ironbee-verify.md +15 -7
  61. package/dist/clients/claude/fragments/command-verify.node.md +33 -0
  62. package/dist/clients/claude/fragments/rule.node.md +29 -0
  63. package/dist/clients/claude/fragments/skill.node.md +77 -0
  64. package/dist/clients/claude/hooks/activity-end.d.ts +13 -0
  65. package/dist/clients/claude/hooks/activity-end.d.ts.map +1 -0
  66. package/dist/clients/claude/hooks/activity-end.js +42 -0
  67. package/dist/clients/claude/hooks/activity-end.js.map +1 -0
  68. package/dist/clients/claude/hooks/clear-verdict.d.ts +9 -4
  69. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  70. package/dist/clients/claude/hooks/clear-verdict.js +50 -12
  71. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  72. package/dist/clients/claude/hooks/require-verdict.d.ts +8 -3
  73. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  74. package/dist/clients/claude/hooks/require-verdict.js +17 -6
  75. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  76. package/dist/clients/claude/hooks/require-verification.d.ts +7 -4
  77. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  78. package/dist/clients/claude/hooks/require-verification.js +44 -22
  79. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  80. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  81. package/dist/clients/claude/hooks/session-end.js +17 -2
  82. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  83. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  84. package/dist/clients/claude/hooks/session-start.js +2 -1
  85. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  86. package/dist/clients/claude/hooks/track-action-monitor.d.ts +27 -0
  87. package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -0
  88. package/dist/clients/claude/hooks/track-action-monitor.js +126 -0
  89. package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -0
  90. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  91. package/dist/clients/claude/hooks/track-action.js +29 -20
  92. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  93. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  94. package/dist/clients/claude/hooks/verify-gate.js +18 -1
  95. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  96. package/dist/clients/claude/index.d.ts +4 -1
  97. package/dist/clients/claude/index.d.ts.map +1 -1
  98. package/dist/clients/claude/index.js +185 -94
  99. package/dist/clients/claude/index.js.map +1 -1
  100. package/dist/clients/claude/rules/ironbee-verification.md +41 -33
  101. package/dist/clients/claude/skills/ironbee-verification.md +93 -76
  102. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +18 -10
  103. package/dist/clients/cursor/fragments/command-verify.node.md +33 -0
  104. package/dist/clients/cursor/fragments/rule.node.md +29 -0
  105. package/dist/clients/cursor/fragments/skill.node.md +77 -0
  106. package/dist/clients/cursor/hooks/activity-end.d.ts +14 -0
  107. package/dist/clients/cursor/hooks/activity-end.d.ts.map +1 -0
  108. package/dist/clients/cursor/hooks/activity-end.js +45 -0
  109. package/dist/clients/cursor/hooks/activity-end.js.map +1 -0
  110. package/dist/clients/cursor/hooks/clear-verdict.d.ts +13 -4
  111. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
  112. package/dist/clients/cursor/hooks/clear-verdict.js +59 -14
  113. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
  114. package/dist/clients/cursor/hooks/require-verdict.d.ts +8 -3
  115. package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
  116. package/dist/clients/cursor/hooks/require-verdict.js +17 -6
  117. package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
  118. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  119. package/dist/clients/cursor/hooks/require-verification.js +42 -16
  120. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  121. package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
  122. package/dist/clients/cursor/hooks/session-end.js +18 -2
  123. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  124. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
  125. package/dist/clients/cursor/hooks/session-start.js +2 -1
  126. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  127. package/dist/clients/cursor/hooks/track-action-monitor.d.ts +27 -0
  128. package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -0
  129. package/dist/clients/cursor/hooks/track-action-monitor.js +133 -0
  130. package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -0
  131. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  132. package/dist/clients/cursor/hooks/track-action.js +51 -23
  133. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  134. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  135. package/dist/clients/cursor/hooks/verify-gate.js +14 -1
  136. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  137. package/dist/clients/cursor/index.d.ts +4 -1
  138. package/dist/clients/cursor/index.d.ts.map +1 -1
  139. package/dist/clients/cursor/index.js +131 -65
  140. package/dist/clients/cursor/index.js.map +1 -1
  141. package/dist/clients/cursor/rules/ironbee-verification.mdc +37 -29
  142. package/dist/clients/cursor/skills/ironbee-verification.md +93 -76
  143. package/dist/clients/registry.d.ts +14 -0
  144. package/dist/clients/registry.d.ts.map +1 -1
  145. package/dist/clients/registry.js +34 -0
  146. package/dist/clients/registry.js.map +1 -1
  147. package/dist/commands/analyze.d.ts.map +1 -1
  148. package/dist/commands/analyze.js +40 -0
  149. package/dist/commands/analyze.js.map +1 -1
  150. package/dist/commands/backend-toggle.d.ts +45 -0
  151. package/dist/commands/backend-toggle.d.ts.map +1 -0
  152. package/dist/commands/backend-toggle.js +192 -0
  153. package/dist/commands/backend-toggle.js.map +1 -0
  154. package/dist/commands/disable-backend.d.ts +14 -0
  155. package/dist/commands/disable-backend.d.ts.map +1 -0
  156. package/dist/commands/disable-backend.js +34 -0
  157. package/dist/commands/disable-backend.js.map +1 -0
  158. package/dist/commands/disable-verification.d.ts +16 -0
  159. package/dist/commands/disable-verification.d.ts.map +1 -0
  160. package/dist/commands/disable-verification.js +36 -0
  161. package/dist/commands/disable-verification.js.map +1 -0
  162. package/dist/commands/enable-backend.d.ts +15 -0
  163. package/dist/commands/enable-backend.d.ts.map +1 -0
  164. package/dist/commands/enable-backend.js +35 -0
  165. package/dist/commands/enable-backend.js.map +1 -0
  166. package/dist/commands/enable-verification.d.ts +14 -0
  167. package/dist/commands/enable-verification.d.ts.map +1 -0
  168. package/dist/commands/enable-verification.js +34 -0
  169. package/dist/commands/enable-verification.js.map +1 -0
  170. package/dist/commands/hook.d.ts.map +1 -1
  171. package/dist/commands/hook.js +60 -0
  172. package/dist/commands/hook.js.map +1 -1
  173. package/dist/commands/import.d.ts +39 -0
  174. package/dist/commands/import.d.ts.map +1 -0
  175. package/dist/commands/import.js +369 -0
  176. package/dist/commands/import.js.map +1 -0
  177. package/dist/commands/install.d.ts.map +1 -1
  178. package/dist/commands/install.js +15 -20
  179. package/dist/commands/install.js.map +1 -1
  180. package/dist/commands/process-analytics.d.ts +18 -0
  181. package/dist/commands/process-analytics.d.ts.map +1 -0
  182. package/dist/commands/process-analytics.js +57 -0
  183. package/dist/commands/process-analytics.js.map +1 -0
  184. package/dist/commands/queue.d.ts +2 -3
  185. package/dist/commands/queue.d.ts.map +1 -1
  186. package/dist/commands/queue.js +2 -3
  187. package/dist/commands/queue.js.map +1 -1
  188. package/dist/commands/status.d.ts.map +1 -1
  189. package/dist/commands/status.js +29 -1
  190. package/dist/commands/status.js.map +1 -1
  191. package/dist/commands/verification-toggle.d.ts +47 -0
  192. package/dist/commands/verification-toggle.d.ts.map +1 -0
  193. package/dist/commands/verification-toggle.js +113 -0
  194. package/dist/commands/verification-toggle.js.map +1 -0
  195. package/dist/commands/verify.d.ts.map +1 -1
  196. package/dist/commands/verify.js +28 -0
  197. package/dist/commands/verify.js.map +1 -1
  198. package/dist/hooks/core/actions.d.ts +77 -70
  199. package/dist/hooks/core/actions.d.ts.map +1 -1
  200. package/dist/hooks/core/actions.js +45 -30
  201. package/dist/hooks/core/actions.js.map +1 -1
  202. package/dist/hooks/core/activity-end.d.ts +20 -0
  203. package/dist/hooks/core/activity-end.d.ts.map +1 -0
  204. package/dist/hooks/core/activity-end.js +23 -0
  205. package/dist/hooks/core/activity-end.js.map +1 -0
  206. package/dist/hooks/core/file-diff.d.ts +19 -0
  207. package/dist/hooks/core/file-diff.d.ts.map +1 -0
  208. package/dist/hooks/core/file-diff.js +39 -0
  209. package/dist/hooks/core/file-diff.js.map +1 -0
  210. package/dist/hooks/core/required-tools.d.ts +30 -0
  211. package/dist/hooks/core/required-tools.d.ts.map +1 -0
  212. package/dist/hooks/core/required-tools.js +70 -0
  213. package/dist/hooks/core/required-tools.js.map +1 -0
  214. package/dist/hooks/core/session-state.d.ts +12 -3
  215. package/dist/hooks/core/session-state.d.ts.map +1 -1
  216. package/dist/hooks/core/session-state.js +59 -0
  217. package/dist/hooks/core/session-state.js.map +1 -1
  218. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  219. package/dist/hooks/core/submit-verdict.js +16 -12
  220. package/dist/hooks/core/submit-verdict.js.map +1 -1
  221. package/dist/hooks/core/tool-use-stash.d.ts +41 -0
  222. package/dist/hooks/core/tool-use-stash.d.ts.map +1 -0
  223. package/dist/hooks/core/tool-use-stash.js +82 -0
  224. package/dist/hooks/core/tool-use-stash.js.map +1 -0
  225. package/dist/hooks/core/verify-gate.d.ts +17 -3
  226. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  227. package/dist/hooks/core/verify-gate.js +315 -119
  228. package/dist/hooks/core/verify-gate.js.map +1 -1
  229. package/dist/import/claude/analytics-runner.d.ts +42 -0
  230. package/dist/import/claude/analytics-runner.d.ts.map +1 -0
  231. package/dist/import/claude/analytics-runner.js +213 -0
  232. package/dist/import/claude/analytics-runner.js.map +1 -0
  233. package/dist/import/claude/discovery.d.ts +22 -0
  234. package/dist/import/claude/discovery.d.ts.map +1 -0
  235. package/dist/import/claude/discovery.js +197 -0
  236. package/dist/import/claude/discovery.js.map +1 -0
  237. package/dist/import/claude/encoding.d.ts +50 -0
  238. package/dist/import/claude/encoding.d.ts.map +1 -0
  239. package/dist/import/claude/encoding.js +110 -0
  240. package/dist/import/claude/encoding.js.map +1 -0
  241. package/dist/import/claude/events/file-change.d.ts +28 -0
  242. package/dist/import/claude/events/file-change.d.ts.map +1 -0
  243. package/dist/import/claude/events/file-change.js +112 -0
  244. package/dist/import/claude/events/file-change.js.map +1 -0
  245. package/dist/import/claude/events/tool-call.d.ts +61 -0
  246. package/dist/import/claude/events/tool-call.d.ts.map +1 -0
  247. package/dist/import/claude/events/tool-call.js +119 -0
  248. package/dist/import/claude/events/tool-call.js.map +1 -0
  249. package/dist/import/claude/runner.d.ts +31 -0
  250. package/dist/import/claude/runner.d.ts.map +1 -0
  251. package/dist/import/claude/runner.js +280 -0
  252. package/dist/import/claude/runner.js.map +1 -0
  253. package/dist/import/claude/summary.d.ts +23 -0
  254. package/dist/import/claude/summary.d.ts.map +1 -0
  255. package/dist/import/claude/summary.js +186 -0
  256. package/dist/import/claude/summary.js.map +1 -0
  257. package/dist/import/claude/transcript-walk.d.ts +52 -0
  258. package/dist/import/claude/transcript-walk.d.ts.map +1 -0
  259. package/dist/import/claude/transcript-walk.js +187 -0
  260. package/dist/import/claude/transcript-walk.js.map +1 -0
  261. package/dist/import/concurrent-pool.d.ts +45 -0
  262. package/dist/import/concurrent-pool.d.ts.map +1 -0
  263. package/dist/import/concurrent-pool.js +95 -0
  264. package/dist/import/concurrent-pool.js.map +1 -0
  265. package/dist/import/emitter.d.ts +29 -0
  266. package/dist/import/emitter.d.ts.map +1 -0
  267. package/dist/import/emitter.js +66 -0
  268. package/dist/import/emitter.js.map +1 -0
  269. package/dist/import/events/activity.d.ts +23 -0
  270. package/dist/import/events/activity.d.ts.map +1 -0
  271. package/dist/import/events/activity.js +45 -0
  272. package/dist/import/events/activity.js.map +1 -0
  273. package/dist/import/events/session.d.ts +24 -0
  274. package/dist/import/events/session.d.ts.map +1 -0
  275. package/dist/import/events/session.js +47 -0
  276. package/dist/import/events/session.js.map +1 -0
  277. package/dist/import/filter.d.ts +47 -0
  278. package/dist/import/filter.d.ts.map +1 -0
  279. package/dist/import/filter.js +90 -0
  280. package/dist/import/filter.js.map +1 -0
  281. package/dist/import/ids.d.ts +56 -0
  282. package/dist/import/ids.d.ts.map +1 -0
  283. package/dist/import/ids.js +87 -0
  284. package/dist/import/ids.js.map +1 -0
  285. package/dist/import/index.d.ts +29 -0
  286. package/dist/import/index.d.ts.map +1 -0
  287. package/dist/import/index.js +52 -0
  288. package/dist/import/index.js.map +1 -0
  289. package/dist/import/marker.d.ts +20 -0
  290. package/dist/import/marker.d.ts.map +1 -0
  291. package/dist/import/marker.js +71 -0
  292. package/dist/import/marker.js.map +1 -0
  293. package/dist/import/pipeline.d.ts +41 -0
  294. package/dist/import/pipeline.d.ts.map +1 -0
  295. package/dist/import/pipeline.js +47 -0
  296. package/dist/import/pipeline.js.map +1 -0
  297. package/dist/import/progress.d.ts +20 -0
  298. package/dist/import/progress.d.ts.map +1 -0
  299. package/dist/import/progress.js +69 -0
  300. package/dist/import/progress.js.map +1 -0
  301. package/dist/import/skip.d.ts +13 -0
  302. package/dist/import/skip.d.ts.map +1 -0
  303. package/dist/import/skip.js +24 -0
  304. package/dist/import/skip.js.map +1 -0
  305. package/dist/import/types.d.ts +125 -0
  306. package/dist/import/types.d.ts.map +1 -0
  307. package/dist/import/types.js +28 -0
  308. package/dist/import/types.js.map +1 -0
  309. package/dist/index.js +21 -2
  310. package/dist/index.js.map +1 -1
  311. package/dist/lib/collector.d.ts +29 -3
  312. package/dist/lib/collector.d.ts.map +1 -1
  313. package/dist/lib/collector.js +118 -8
  314. package/dist/lib/collector.js.map +1 -1
  315. package/dist/lib/config.d.ts +240 -83
  316. package/dist/lib/config.d.ts.map +1 -1
  317. package/dist/lib/config.js +482 -89
  318. package/dist/lib/config.js.map +1 -1
  319. package/dist/lib/event.d.ts +72 -0
  320. package/dist/lib/event.d.ts.map +1 -0
  321. package/dist/lib/event.js +42 -0
  322. package/dist/lib/event.js.map +1 -0
  323. package/dist/lib/gitignore.d.ts +21 -0
  324. package/dist/lib/gitignore.d.ts.map +1 -0
  325. package/dist/lib/gitignore.js +54 -0
  326. package/dist/lib/gitignore.js.map +1 -0
  327. package/dist/lib/runtime-section.d.ts +118 -0
  328. package/dist/lib/runtime-section.d.ts.map +1 -0
  329. package/dist/lib/runtime-section.js +256 -0
  330. package/dist/lib/runtime-section.js.map +1 -0
  331. package/dist/lib/telemetry.d.ts +1 -1
  332. package/dist/lib/telemetry.d.ts.map +1 -1
  333. package/dist/lib/telemetry.js +4 -1
  334. package/dist/lib/telemetry.js.map +1 -1
  335. package/dist/queue/dead-letter.d.ts +5 -1
  336. package/dist/queue/dead-letter.d.ts.map +1 -1
  337. package/dist/queue/dead-letter.js +5 -1
  338. package/dist/queue/dead-letter.js.map +1 -1
  339. package/dist/queue/drain.d.ts +3 -2
  340. package/dist/queue/drain.d.ts.map +1 -1
  341. package/dist/queue/drain.js +3 -2
  342. package/dist/queue/drain.js.map +1 -1
  343. package/dist/queue/flush.d.ts +28 -12
  344. package/dist/queue/flush.d.ts.map +1 -1
  345. package/dist/queue/flush.js +43 -18
  346. package/dist/queue/flush.js.map +1 -1
  347. package/dist/queue/handlers/send-event.d.ts.map +1 -1
  348. package/dist/queue/handlers/send-event.js.map +1 -1
  349. package/dist/queue/index.d.ts +1 -2
  350. package/dist/queue/index.d.ts.map +1 -1
  351. package/dist/queue/index.js +2 -2
  352. package/dist/queue/index.js.map +1 -1
  353. package/dist/queue/paths.d.ts +4 -2
  354. package/dist/queue/paths.d.ts.map +1 -1
  355. package/dist/queue/paths.js +4 -2
  356. package/dist/queue/paths.js.map +1 -1
  357. package/dist/queue/process-file.d.ts +5 -1
  358. package/dist/queue/process-file.d.ts.map +1 -1
  359. package/dist/queue/process-file.js +5 -1
  360. package/dist/queue/process-file.js.map +1 -1
  361. package/dist/queue/snapshot.d.ts +4 -1
  362. package/dist/queue/snapshot.d.ts.map +1 -1
  363. package/dist/queue/snapshot.js +4 -1
  364. package/dist/queue/snapshot.js.map +1 -1
  365. package/dist/queue/spawn.d.ts +1 -3
  366. package/dist/queue/spawn.d.ts.map +1 -1
  367. package/dist/queue/spawn.js +1 -3
  368. package/dist/queue/spawn.js.map +1 -1
  369. package/dist/queue/submit.d.ts +6 -1
  370. package/dist/queue/submit.d.ts.map +1 -1
  371. package/dist/queue/submit.js +6 -1
  372. package/dist/queue/submit.js.map +1 -1
  373. package/dist/queue/types.d.ts +5 -1
  374. package/dist/queue/types.d.ts.map +1 -1
  375. package/dist/queue/types.js +5 -1
  376. package/dist/queue/types.js.map +1 -1
  377. package/dist/queue/worker-log.d.ts +3 -1
  378. package/dist/queue/worker-log.d.ts.map +1 -1
  379. package/dist/queue/worker-log.js +3 -1
  380. package/dist/queue/worker-log.js.map +1 -1
  381. package/package.json +3 -1
@@ -2,9 +2,18 @@
2
2
  /**
3
3
  * IronBee Stop Hook — Core Verification Logic
4
4
  *
5
- * Pure logic no stdin reading, no process.exit, no client-specific code.
6
- * Returns a VerifyGateResult that the client adapter translates
7
- * into the appropriate exit code / output mechanism.
5
+ * Multi-cycle gate. For each Stop hook run:
6
+ * 1. Determine active cycles by matching file_change paths against each
7
+ * cycle's pattern set (`browser`, `backend.<runtime>`, …).
8
+ * 2. For each active cycle, verify the agent ran its required tools using
9
+ * the alwaysRequired + evidencePaths satisfier.
10
+ * 3. Read and parse the single verdict.json.
11
+ * 4. For each active cycle, validate the cycle-specific evidence fields.
12
+ * 5. Combinator: AND. Any cycle's failure (tools or evidence) blocks the
13
+ * whole gate; verdict status `pass` is overridden to fail when evidence
14
+ * fails — the status field is the agent's claim, not the source of truth.
15
+ * 6. Single global retry counter. Single verdict file. Single combined
16
+ * block message listing per-cycle failure reasons.
8
17
  */
9
18
  Object.defineProperty(exports, "__esModule", { value: true });
10
19
  exports.runVerifyGate = runVerifyGate;
@@ -13,8 +22,22 @@ const logger_1 = require("../../lib/logger");
13
22
  const telemetry_1 = require("../../lib/telemetry");
14
23
  const actions_1 = require("./actions");
15
24
  const session_state_1 = require("./session-state");
25
+ const config_1 = require("../../lib/config");
26
+ const required_tools_1 = require("./required-tools");
16
27
  const DEFAULT_MAX_RETRIES = 3;
17
- function verdictExamplePass(sessionId) {
28
+ const BROWSER_MCP_SERVER = "browser-devtools";
29
+ /** Maps cycle name → MCP server name used to filter `tool_call` events. */
30
+ function mcpServerForCycle(cycle) {
31
+ if (cycle === "browser") {
32
+ return BROWSER_MCP_SERVER;
33
+ }
34
+ const server = config_1.RUNTIME_TO_SERVER[cycle];
35
+ if (server === undefined) {
36
+ throw new Error(`No MCP server registered for cycle '${cycle}'.`);
37
+ }
38
+ return server;
39
+ }
40
+ function verdictExampleBrowserPass(sessionId) {
18
41
  return JSON.stringify({
19
42
  session_id: sessionId,
20
43
  status: "pass",
@@ -24,7 +47,7 @@ function verdictExamplePass(sessionId) {
24
47
  network_failures: 0,
25
48
  });
26
49
  }
27
- function verdictExampleFail(sessionId) {
50
+ function verdictExampleBrowserFail(sessionId) {
28
51
  return JSON.stringify({
29
52
  session_id: sessionId,
30
53
  status: "fail",
@@ -35,18 +58,19 @@ function verdictExampleFail(sessionId) {
35
58
  issues: ["button click handler not firing", "TypeError in console"],
36
59
  });
37
60
  }
38
- const MCP_SERVER = "browser-devtools";
39
- const TOOL_PREFIX = "bdt_";
40
- /** Required tool names are in the classifier-normalized bare form
41
- * (post tool-taxonomy migration). Matching against tool_call events now
42
- * filters by `tool_type === "mcp" && mcp_server === MCP_SERVER` and
43
- * compares the bare `tool_name`. */
44
- const REQUIRED_TOOLS = [
45
- { toolName: `${TOOL_PREFIX}navigation_go-to`, name: `${TOOL_PREFIX}navigation_go-to`, purpose: "navigate to a page" },
46
- { toolName: `${TOOL_PREFIX}content_take-screenshot`, name: `${TOOL_PREFIX}content_take-screenshot`, purpose: "take a screenshot" },
47
- { toolName: `${TOOL_PREFIX}a11y_take-aria-snapshot`, name: `${TOOL_PREFIX}a11y_take-aria-snapshot`, purpose: "check accessibility/page structure" },
48
- { toolName: `${TOOL_PREFIX}o11y_get-console-messages`, name: `${TOOL_PREFIX}o11y_get-console-messages`, purpose: "check console for errors" },
49
- ];
61
+ function verdictExampleNodePass(sessionId) {
62
+ return JSON.stringify({
63
+ session_id: sessionId,
64
+ status: "pass",
65
+ checks: ["POST /api/orders returned 201", "tracepoint at handler.ts:42 fired once"],
66
+ backend_node_processes_connected: ["pid:12345 (next-server)"],
67
+ backend_node_probes_set: [
68
+ { type: "tracepoint", location: "src/api/orders.ts:42", triggered: true },
69
+ ],
70
+ backend_node_probe_snapshots_collected: 1,
71
+ backend_node_log_errors: [],
72
+ });
73
+ }
50
74
  function cleanup(...files) {
51
75
  for (const f of files) {
52
76
  try {
@@ -59,42 +83,191 @@ function cleanup(...files) {
59
83
  }
60
84
  }
61
85
  }
86
+ /** Compute the active cycle set across all `file_change` events since the last marker. */
87
+ function computeActiveCycles(actionsFile, config) {
88
+ const fileChanges = (0, actions_1.getFileChangesSinceLastVerification)(actionsFile);
89
+ const cycles = new Set();
90
+ for (const fc of fileChanges) {
91
+ for (const cycle of (0, config_1.getActiveCycles)(fc.file_path, config)) {
92
+ cycles.add(cycle);
93
+ }
94
+ }
95
+ // Stable order: browser first, then registered backend runtimes.
96
+ const ordered = [];
97
+ if (cycles.has("browser")) {
98
+ ordered.push("browser");
99
+ }
100
+ for (const server of config_1.BACKEND_SERVERS) {
101
+ const runtime = Object.keys(config_1.RUNTIME_TO_SERVER).find((k) => config_1.RUNTIME_TO_SERVER[k] === server);
102
+ if (runtime !== undefined && cycles.has(runtime)) {
103
+ ordered.push(runtime);
104
+ }
105
+ }
106
+ return ordered;
107
+ }
108
+ function checkCycleTools(cycle, toolCalls, config) {
109
+ const server = mcpServerForCycle(cycle);
110
+ const used = new Set(toolCalls
111
+ .filter((t) => t.tool_type === "mcp" && t.mcp_server === server)
112
+ .map((t) => t.tool_name));
113
+ const cycleConfig = (0, config_1.getRequiredToolsConfig)(config, cycle);
114
+ return {
115
+ cycle,
116
+ result: (0, required_tools_1.satisfyRequiredTools)(used, cycleConfig),
117
+ config: cycleConfig,
118
+ usedCount: used.size,
119
+ };
120
+ }
121
+ function checkBrowserEvidence(verdict) {
122
+ if (!Array.isArray(verdict.pages_tested) || verdict.pages_tested.length === 0) {
123
+ return { cycle: "browser", valid: false, reason: "missing pages_tested" };
124
+ }
125
+ if (!Array.isArray(verdict.checks) || verdict.checks.length === 0) {
126
+ return { cycle: "browser", valid: false, reason: "missing checks" };
127
+ }
128
+ if (typeof verdict.console_errors !== "number" || typeof verdict.network_failures !== "number") {
129
+ return { cycle: "browser", valid: false, reason: "missing console_errors or network_failures (must be numbers)" };
130
+ }
131
+ // status=pass criteria — no console errors, no network failures
132
+ const consoleErrors = verdict.console_errors;
133
+ const networkFailures = verdict.network_failures;
134
+ if (consoleErrors > 0 || networkFailures > 0) {
135
+ return {
136
+ cycle: "browser",
137
+ valid: true,
138
+ passCriteriaMet: false,
139
+ passReason: `console_errors=${consoleErrors}, network_failures=${networkFailures}`,
140
+ };
141
+ }
142
+ return { cycle: "browser", valid: true, passCriteriaMet: true };
143
+ }
144
+ function checkNodeEvidence(verdict) {
145
+ const processes = verdict.backend_node_processes_connected;
146
+ if (!Array.isArray(processes) || processes.length === 0) {
147
+ return { cycle: "node", valid: false, reason: "missing backend_node_processes_connected" };
148
+ }
149
+ if (!Array.isArray(verdict.checks) || verdict.checks.length === 0) {
150
+ return { cycle: "node", valid: false, reason: "missing checks" };
151
+ }
152
+ const probesSet = Array.isArray(verdict.backend_node_probes_set)
153
+ ? verdict.backend_node_probes_set
154
+ : undefined;
155
+ const logErrors = Array.isArray(verdict.backend_node_log_errors)
156
+ ? verdict.backend_node_log_errors
157
+ : undefined;
158
+ const probeEvidence = (probesSet?.length ?? 0) > 0;
159
+ const logEvidence = logErrors !== undefined;
160
+ if (!probeEvidence && !logEvidence) {
161
+ return {
162
+ cycle: "node",
163
+ valid: false,
164
+ reason: "no evidence — provide backend_node_probes_set OR backend_node_log_errors",
165
+ };
166
+ }
167
+ // status=pass criteria
168
+ const reasons = [];
169
+ if (probeEvidence) {
170
+ const triggered = (probesSet ?? []).some((p) => p.triggered === true);
171
+ if (!triggered) {
172
+ reasons.push("no probe triggered (code path didn't execute)");
173
+ }
174
+ }
175
+ if (logEvidence) {
176
+ if ((logErrors ?? []).length > 0) {
177
+ reasons.push(`backend_node_log_errors has ${(logErrors ?? []).length} entries`);
178
+ }
179
+ }
180
+ if (reasons.length > 0) {
181
+ return {
182
+ cycle: "node",
183
+ valid: true,
184
+ passCriteriaMet: false,
185
+ passReason: reasons.join("; "),
186
+ };
187
+ }
188
+ return { cycle: "node", valid: true, passCriteriaMet: true };
189
+ }
190
+ function checkCycleEvidence(cycle, verdict) {
191
+ if (cycle === "browser") {
192
+ return checkBrowserEvidence(verdict);
193
+ }
194
+ if (cycle === "node") {
195
+ return checkNodeEvidence(verdict);
196
+ }
197
+ // Future runtimes plug in here.
198
+ throw new Error(`No evidence checker registered for cycle '${cycle}'.`);
199
+ }
200
+ function describeMissingTools(check) {
201
+ const cap = check.cycle.charAt(0).toUpperCase() + check.cycle.slice(1);
202
+ if (check.result.missing.length === 0) {
203
+ return `${cap} cycle: ok.`;
204
+ }
205
+ const items = check.result.missing.map((m) => ` - ${m}`).join("\n");
206
+ if (check.config.evidencePaths.length > 0 && check.result.pathName !== undefined) {
207
+ return `${cap} cycle: incomplete (closest path "${check.result.pathName}", tried [${check.result.triedPaths.join(", ")}]):\n${items}`;
208
+ }
209
+ return `${cap} cycle: missing required tools:\n${items}`;
210
+ }
62
211
  async function runVerifyGate(input) {
63
212
  const { sessionId: sid, sessionDir, actionsFile, verdictFile, maxRetries: inputMaxRetries } = input;
64
213
  const maxRetries = inputMaxRetries ?? DEFAULT_MAX_RETRIES;
214
+ const config = input.config ?? (0, config_1.loadConfig)(input.projectDir);
65
215
  logger_1.logger.debug(`verify-gate: session=${sid} verdictExists=${(0, fs_1.existsSync)(verdictFile)}`);
66
- // ── Check 1: Were code files edited? ───────────────────
67
- const hasEdit = (0, actions_1.hasFileEditsSinceLastVerification)(actionsFile);
68
- if (!hasEdit) {
69
- logger_1.logger.debug("no code edits detected, allowing completion");
70
- await recordMarker(actionsFile, sessionDir, sid, "allow", "no_edits");
216
+ // ── Check 1: Were code files changed? ───────────────────
217
+ if (!(0, actions_1.hasFileChangesSinceLastVerification)(actionsFile)) {
218
+ // An active fix here means the agent submitted a fail verdict and
219
+ // never addressed it (no follow-up edits, no follow-up verify).
220
+ // `no_edits` allow would let them slip past — block instead and tell
221
+ // them to fix-and-reverify or burn through retries to maxRetries.
222
+ const activeFixId = (0, session_state_1.getActiveFixId)(sessionDir);
223
+ if (activeFixId) {
224
+ logger_1.logger.debug(`no code changes but active fix ${activeFixId} — blocking`);
225
+ await recordMarker(actionsFile, sessionDir, sid, "block", "fail_verdict_unaddressed", []);
226
+ return {
227
+ action: "block",
228
+ message: `VERIFICATION FAILED — unaddressed.
229
+
230
+ You submitted a fail verdict but did not address the reported issues. Either:
231
+
232
+ 1. Fix the failing issues in code, then run a fresh verification cycle:
233
+ echo '{"session_id":"${sid}"}' | ironbee hook verification-start
234
+ ... rerun the relevant verification tools and submit a pass verdict ...
235
+
236
+ 2. Or — if the issues genuinely cannot be fixed — start another verification cycle to
237
+ confirm the failure (each fail counts toward maxRetries; once exhausted, the gate
238
+ will allow completion with the issues reported).`,
239
+ };
240
+ }
241
+ logger_1.logger.debug("no code changes detected, allowing completion");
242
+ await recordMarker(actionsFile, sessionDir, sid, "allow", "no_edits", []);
71
243
  return { action: "allow" };
72
244
  }
73
- // ── Check 2: Were required IronBee tools used AFTER the latest code edit?
74
- // Only browser-devtools MCP tool calls count; bare tool_name (post-
75
- // taxonomy) is compared against REQUIRED_TOOLS.
76
- const toolCalls = (0, actions_1.getToolCallsSinceLastFileEdit)(actionsFile);
77
- const usedToolNames = new Set(toolCalls
78
- .filter((t) => t.tool_type === "mcp" && t.mcp_server === MCP_SERVER)
79
- .map((t) => t.tool_name));
80
- const missingTools = REQUIRED_TOOLS.filter((t) => !usedToolNames.has(t.toolName));
81
- logger_1.logger.debug(`verify-gate: missingTools=${missingTools.length}/${REQUIRED_TOOLS.length} usedTools=${[...usedToolNames].join(",")}`);
82
- if (missingTools.length === REQUIRED_TOOLS.length) {
83
- const marker = {
84
- ...(0, actions_1.baseFields)(actionsFile),
85
- type: "verification_requested",
86
- timestamp: Date.now(),
87
- activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
88
- action: "block",
89
- reason: "no_tools",
90
- };
91
- await (0, actions_1.appendAction)(actionsFile, marker);
92
- return {
93
- action: "block",
94
- message: `VERIFICATION REQUIRED.
245
+ // ── Check 2: Which cycles are active? ─────────────────────
246
+ const activeCycles = computeActiveCycles(actionsFile, config);
247
+ if (activeCycles.length === 0) {
248
+ logger_1.logger.debug("file changes match no cycle pattern, allowing completion");
249
+ await recordMarker(actionsFile, sessionDir, sid, "allow", "no_cycle_active", []);
250
+ return { action: "allow" };
251
+ }
252
+ // ── Check 3: Required tools per active cycle ──────────────
253
+ const toolCalls = (0, actions_1.getToolCallsSinceLastFileChange)(actionsFile);
254
+ const toolChecks = activeCycles.map((cycle) => checkCycleTools(cycle, toolCalls, config));
255
+ const failedToolChecks = toolChecks.filter((c) => !c.result.satisfied);
256
+ if (failedToolChecks.length > 0) {
257
+ const noToolsAtAll = toolChecks.every((c) => c.usedCount === 0);
258
+ if (noToolsAtAll) {
259
+ // No verification tools used at all — full onboarding guidance.
260
+ await recordMarker(actionsFile, sessionDir, sid, "block", "no_tools", activeCycles);
261
+ const browserExample = ` echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict`;
262
+ const browserExampleFail = ` On fail: echo '${verdictExampleBrowserFail(sid)}' | ironbee hook submit-verdict`;
263
+ const nodeExample = ` echo '${verdictExampleNodePass(sid)}' | ironbee hook submit-verdict`;
264
+ return {
265
+ action: "block",
266
+ message: `VERIFICATION REQUIRED.
95
267
 
96
- You made code changes but did not verify them through the browser.
268
+ You made code changes but did not verify them.
97
269
 
270
+ ${activeCycles.includes("browser") ? `Browser cycle (UI verification):
98
271
  1. Build and start the application if not already running
99
272
  2. Navigate to the affected page(s)
100
273
  3. Functionally test your changes — click, type, submit, interact with the UI to confirm the code works
@@ -103,38 +276,55 @@ You made code changes but did not verify them through the browser.
103
276
  6. Check console for errors
104
277
  7. Stop the dev server when done
105
278
  8. Submit your verdict:
106
- echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict
107
- On fail: echo '${verdictExampleFail(sid)}' | ironbee hook submit-verdict
108
- 9. If failed, fix the code and re-verify until it passes`,
109
- };
110
- }
111
- if (missingTools.length > 0) {
112
- const missing = missingTools.map((t) => ` - ${t.name} (${t.purpose})`).join("\n");
113
- await recordMarker(actionsFile, sessionDir, sid, "block", "incomplete_tools");
279
+ ${browserExample}
280
+ ${browserExampleFail}
281
+ 9. If failed, fix the code and re-verify until it passes
282
+ ` : ""}${activeCycles.includes("node") ? `Node cycle (backend verification):
283
+ 1. Connect to the running Node process via ndt_debug_connect
284
+ 2. Set probes (tracepoint / logpoint / exceptionpoint) at the changed code paths
285
+ 3. Exercise the code path so probes fire
286
+ 4. Read snapshots via ndt_debug_get-probe-snapshots, OR inspect runtime errors via ndt_debug_get-logs
287
+ 5. Submit your verdict:
288
+ ${nodeExample}
289
+ ` : ""}`,
290
+ };
291
+ }
292
+ // Partial — list what's missing.
293
+ await recordMarker(actionsFile, sessionDir, sid, "block", "incomplete_tools", activeCycles);
294
+ const summary = failedToolChecks
295
+ .map((c) => describeMissingTools(c))
296
+ .join("\n");
114
297
  return {
115
298
  action: "block",
116
299
  message: `INCOMPLETE VERIFICATION.
117
300
 
118
- You used the IronBee browser agent but skipped required checks:
119
- ${missing}
301
+ You used the IronBee verification tools but skipped required checks:
302
+
303
+ ${summary}
120
304
 
121
305
  Run the missing tools, functionally test your changes, then submit your verdict:
122
- echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
306
+ ${activeCycles.includes("browser") ? ` Browser example: echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict` : ""}
307
+ ${activeCycles.includes("node") ? ` Node example: echo '${verdictExampleNodePass(sid)}' | ironbee hook submit-verdict` : ""}`.trim(),
123
308
  };
124
309
  }
125
- // ── Check 3: Verdict file exists? ──────────────────────
310
+ // ── Check 4: Verdict file exists? ─────────────────────────
126
311
  if (!(0, fs_1.existsSync)(verdictFile)) {
127
- await recordMarker(actionsFile, sessionDir, sid, "block", "no_verdict");
312
+ await recordMarker(actionsFile, sessionDir, sid, "block", "no_verdict", activeCycles);
313
+ const recordingHint = (0, session_state_1.isRecordingActive)(sessionDir)
314
+ ? "\n⚠ Recording is still active — call mcp__browser-devtools__bdt_content_stop-recording BEFORE submit-verdict (otherwise it will reject with \"recording is still active\")."
315
+ : "";
128
316
  return {
129
317
  action: "block",
130
318
  message: `VERDICT MISSING.
131
319
 
132
- You used the IronBee browser agent but did not submit a verdict.
133
- Submit your verdict:
134
- echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
320
+ You ran the verification tools but did not submit a verdict.${recordingHint}
321
+
322
+ Submit your verdict via:
323
+ ${activeCycles.includes("browser") ? ` Browser: echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict` : ""}
324
+ ${activeCycles.includes("node") ? ` Node: echo '${verdictExampleNodePass(sid)}' | ironbee hook submit-verdict` : ""}`.trim(),
135
325
  };
136
326
  }
137
- // ── Check 4: Valid JSON? ────────────────────────────────
327
+ // ── Check 5: Valid JSON? ──────────────────────────────────
138
328
  let verdict;
139
329
  try {
140
330
  verdict = JSON.parse((0, fs_1.readFileSync)(verdictFile, "utf-8"));
@@ -142,96 +332,101 @@ Submit your verdict:
142
332
  catch (e) {
143
333
  logger_1.logger.debug(`failed to parse verdict ${verdictFile}: ${e}`);
144
334
  cleanup(verdictFile);
145
- await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
335
+ await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict", activeCycles);
146
336
  return {
147
337
  action: "block",
148
- message: `INVALID VERDICT. Submit valid JSON:
149
- echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
338
+ message: `INVALID VERDICT JSON. Re-submit valid JSON:
339
+ Browser example: echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict`,
150
340
  };
151
341
  }
152
- // ── Check 5: Evidence present? ─────────────────────────
153
- const pages = verdict.pages_tested;
154
- const checks = verdict.checks;
155
- if (!Array.isArray(pages) || pages.length === 0) {
342
+ // ── Check 6: Per-cycle evidence validity ──────────────────
343
+ const evidenceChecks = activeCycles.map((cycle) => checkCycleEvidence(cycle, verdict));
344
+ const invalidEvidence = evidenceChecks.filter((c) => !c.valid);
345
+ if (invalidEvidence.length > 0) {
156
346
  cleanup(verdictFile);
157
- await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
347
+ await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict", activeCycles);
348
+ const summary = invalidEvidence
349
+ .map((c) => ` - ${c.cycle} cycle: ${c.reason}`)
350
+ .join("\n");
158
351
  return {
159
352
  action: "block",
160
- message: `VERDICT REJECTED: missing pages_tested.
353
+ message: `VERDICT REJECTED missing evidence:
354
+ ${summary}
161
355
 
162
- Your verdict must include which pages you tested.
163
- Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
356
+ Re-submit a complete verdict.`,
164
357
  };
165
358
  }
166
- if (!Array.isArray(checks) || checks.length === 0) {
359
+ // ── Check 7: Status interpretation + pass-criteria override ──
360
+ const status = verdict.status;
361
+ if (status !== "pass" && status !== "fail") {
167
362
  cleanup(verdictFile);
168
- await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
363
+ await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict", activeCycles);
169
364
  return {
170
365
  action: "block",
171
- message: `VERDICT REJECTED: missing checks.
172
-
173
- Your verdict must describe what you functionally tested.
174
- Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
366
+ message: `INVALID VERDICT STATUS: "${status}". Status must be "pass" or "fail".
367
+ echo '${verdictExampleBrowserPass(sid)}' | ironbee hook submit-verdict`,
175
368
  };
176
369
  }
177
- if (typeof verdict.console_errors !== "number" || typeof verdict.network_failures !== "number") {
178
- cleanup(verdictFile);
179
- await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
180
- return {
181
- action: "block",
182
- message: `VERDICT REJECTED: missing console_errors or network_failures count.
183
-
184
- Your verdict must include error counts.
185
- Example: echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
186
- };
370
+ // pass override: claimed pass but cycle pass-criteria failed treat as fail
371
+ const passCriteriaFailures = evidenceChecks.filter((c) => c.passCriteriaMet === false);
372
+ const effectiveStatus = (status === "pass" && passCriteriaFailures.length === 0) ? "pass" : "fail";
373
+ if (status === "pass" && effectiveStatus === "fail") {
374
+ logger_1.logger.debug(`verify-gate: status=pass overridden to fail by cycle pass-criteria: ${passCriteriaFailures
375
+ .map((c) => c.cycle)
376
+ .join(",")}`);
187
377
  }
188
- // ── Check 6: Pass or fail? ─────────────────────────────
189
- if (verdict.status === "pass") {
378
+ if (effectiveStatus === "pass") {
190
379
  logger_1.logger.debug("verdict passed, allowing completion");
191
380
  (0, session_state_1.resetRetries)(sessionDir);
192
- await recordMarker(actionsFile, sessionDir, sid, "allow", "verdict_pass");
381
+ await recordMarker(actionsFile, sessionDir, sid, "allow", "verdict_pass", activeCycles);
193
382
  return { action: "allow" };
194
383
  }
195
- if (verdict.status === "fail") {
196
- const retries = (0, session_state_1.incrementRetries)(sessionDir);
197
- const issues = (verdict.issues ?? ["unknown"]).join("\n - ");
198
- if (retries >= maxRetries) {
199
- cleanup(verdictFile);
200
- (0, session_state_1.resetRetries)(sessionDir);
201
- await recordMarker(actionsFile, sessionDir, sid, "allow", "max_retries_exceeded");
202
- return {
203
- action: "allow",
204
- message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
205
-
206
- Unresolved issues:
207
- - ${issues}
208
-
209
- Report these issues in your final response.`,
210
- };
384
+ // effectiveStatus === "fail" — either claimed fail, or pass overridden
385
+ const retries = (0, session_state_1.incrementRetries)(sessionDir);
386
+ const issuesList = [];
387
+ if (Array.isArray(verdict.issues)) {
388
+ for (const i of verdict.issues) {
389
+ issuesList.push(String(i));
211
390
  }
391
+ }
392
+ for (const c of passCriteriaFailures) {
393
+ issuesList.push(`[${c.cycle}] ${c.passReason ?? "pass criteria not met"}`);
394
+ }
395
+ if (issuesList.length === 0) {
396
+ issuesList.push("unknown");
397
+ }
398
+ const issues = issuesList.join("\n - ");
399
+ if (retries >= maxRetries) {
212
400
  cleanup(verdictFile);
213
- await recordMarker(actionsFile, sessionDir, sid, "block", "verdict_fail");
401
+ (0, session_state_1.resetRetries)(sessionDir);
402
+ // The agent has run out of retries — close any dangling fix cycle so
403
+ // every fix_start has a matching fix_end before we hand control back.
404
+ await (0, session_state_1.closeOpenCycles)(sessionDir, actionsFile, "max_retries_exceeded");
405
+ await recordMarker(actionsFile, sessionDir, sid, "allow", "max_retries_exceeded", activeCycles);
214
406
  return {
215
- action: "block",
216
- message: `VERIFICATION FAILED (attempt ${retries}/${maxRetries}).
407
+ action: "allow",
408
+ message: `VERIFICATION FAILED ${maxRetries} TIMES. Allowing completion.
217
409
 
218
- Issues found:
410
+ Unresolved issues:
219
411
  - ${issues}
220
412
 
221
- Fix the issues, rebuild if needed, re-test functionally through the browser, and re-verify.
222
- Submit verdict: echo '<verdict-json>' | ironbee hook submit-verdict`,
413
+ Report these issues in your final response.`,
223
414
  };
224
415
  }
225
- // ── Unknown status ─────────────────────────────────────
226
416
  cleanup(verdictFile);
227
- await recordMarker(actionsFile, sessionDir, sid, "block", "invalid_verdict");
417
+ await recordMarker(actionsFile, sessionDir, sid, "block", "verdict_fail", activeCycles);
228
418
  return {
229
419
  action: "block",
230
- message: `INVALID VERDICT STATUS: "${verdict.status}". Status must be "pass" or "fail".
231
- echo '${verdictExamplePass(sid)}' | ironbee hook submit-verdict`,
420
+ message: `VERIFICATION FAILED (attempt ${retries}/${maxRetries}).
421
+
422
+ Issues found:
423
+ - ${issues}
424
+
425
+ Fix the issues, rebuild if needed, re-test functionally, and re-verify.
426
+ Submit verdict: echo '<verdict-json>' | ironbee hook submit-verdict`,
232
427
  };
233
428
  }
234
- async function recordMarker(actionsFile, sessionDir, sessionId, action, reason) {
429
+ async function recordMarker(actionsFile, sessionDir, sessionId, action, reason, modes) {
235
430
  const marker = {
236
431
  ...(0, actions_1.baseFields)(actionsFile),
237
432
  type: "verification_requested",
@@ -239,6 +434,7 @@ async function recordMarker(actionsFile, sessionDir, sessionId, action, reason)
239
434
  activity_id: (0, session_state_1.getActiveActivityId)(sessionDir),
240
435
  action,
241
436
  reason,
437
+ modes: modes.length > 0 ? modes : undefined,
242
438
  };
243
439
  await (0, actions_1.appendAction)(actionsFile, marker);
244
440
  await (0, telemetry_1.trackVerificationRequested)(sessionId, action, reason);
@@ -1 +1 @@
1
- {"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../src/hooks/core/verify-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * IronBee CLI — Import Analytics Runner
3
+ *
4
+ * Orchestrates the analytics derivation primitives (`projection.ts`,
5
+ * `merge.ts`) for a full transcript read end-to-end. Mirrors the live
6
+ * `src/analytics/emit.ts:emitAnalytics` orchestrator BUT:
7
+ *
8
+ * - never reads `state.json` (initializes fresh in-memory state)
9
+ * - never writes `state.json` (no persistence)
10
+ * - always treats the slice as final (`is_final: true`)
11
+ * - skips reset detection / idempotency / carve-out paths (full re-parse)
12
+ *
13
+ * This module: fork rather than `if (importMode)` branching
14
+ * inside `emit.ts` to honor the isolation contract.
15
+ *
16
+ * Returns the full set of analytics events the pipeline should POST. The
17
+ * pipeline is responsible for batching POST and writing the marker.
18
+ */
19
+ import { APIRequestEvent, SessionAnalyticsEvent, SessionTurnEvent, SessionTurnStepEvent } from "../../analytics/types";
20
+ export interface AnalyticsRunnerInput {
21
+ sessionId: string;
22
+ projectName: string;
23
+ /** Pre-existing — used to gate config flag reads. */
24
+ projectDir: string;
25
+ transcriptPath: string;
26
+ /** Surfaced on `session_analytics.end_reason`. Defaults to `"import"`. */
27
+ endReason?: string;
28
+ }
29
+ export interface AnalyticsRunnerOutput {
30
+ sessionAnalytics: SessionAnalyticsEvent;
31
+ turnEvents: SessionTurnEvent[];
32
+ stepEvents: SessionTurnStepEvent[];
33
+ apiRequestEvents: APIRequestEvent[];
34
+ /** The full transcript byte size — written into the import marker. */
35
+ transcriptOffset: number;
36
+ }
37
+ /**
38
+ * Run the full transcript through the analytics pipeline and return every
39
+ * derivable wire event. Throws on read/parse errors.
40
+ */
41
+ export declare function runImportAnalytics(input: AnalyticsRunnerInput): AnalyticsRunnerOutput;
42
+ //# sourceMappingURL=analytics-runner.d.ts.map