@ironbee-ai/cli 0.6.2 → 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 (362) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +167 -39
  3. package/dist/analysis/code-changes.js.map +1 -1
  4. package/dist/analysis/cross-session.js.map +1 -1
  5. package/dist/analysis/fix-effectiveness.js.map +1 -1
  6. package/dist/analysis/time-analysis.js.map +1 -1
  7. package/dist/analysis/verdict-details.js.map +1 -1
  8. package/dist/analysis/verification-quality.js.map +1 -1
  9. package/dist/analytics/classifier.d.ts +99 -0
  10. package/dist/analytics/classifier.d.ts.map +1 -0
  11. package/dist/analytics/classifier.js +380 -0
  12. package/dist/analytics/classifier.js.map +1 -0
  13. package/dist/analytics/emit.d.ts +67 -0
  14. package/dist/analytics/emit.d.ts.map +1 -0
  15. package/dist/analytics/emit.js +901 -0
  16. package/dist/analytics/emit.js.map +1 -0
  17. package/dist/analytics/errors.d.ts +33 -0
  18. package/dist/analytics/errors.d.ts.map +1 -0
  19. package/dist/analytics/errors.js +93 -0
  20. package/dist/analytics/errors.js.map +1 -0
  21. package/dist/analytics/hook-trigger.d.ts +39 -0
  22. package/dist/analytics/hook-trigger.d.ts.map +1 -0
  23. package/dist/analytics/hook-trigger.js +127 -0
  24. package/dist/analytics/hook-trigger.js.map +1 -0
  25. package/dist/analytics/log.d.ts +44 -0
  26. package/dist/analytics/log.d.ts.map +1 -0
  27. package/dist/analytics/log.js +158 -0
  28. package/dist/analytics/log.js.map +1 -0
  29. package/dist/analytics/merge.d.ts +40 -0
  30. package/dist/analytics/merge.d.ts.map +1 -0
  31. package/dist/analytics/merge.js +527 -0
  32. package/dist/analytics/merge.js.map +1 -0
  33. package/dist/analytics/pricing.d.ts +149 -0
  34. package/dist/analytics/pricing.d.ts.map +1 -0
  35. package/dist/analytics/pricing.js +179 -0
  36. package/dist/analytics/pricing.js.map +1 -0
  37. package/dist/analytics/projection.d.ts +356 -0
  38. package/dist/analytics/projection.d.ts.map +1 -0
  39. package/dist/analytics/projection.js +2281 -0
  40. package/dist/analytics/projection.js.map +1 -0
  41. package/dist/analytics/spawn.d.ts +28 -0
  42. package/dist/analytics/spawn.d.ts.map +1 -0
  43. package/dist/analytics/spawn.js +57 -0
  44. package/dist/analytics/spawn.js.map +1 -0
  45. package/dist/analytics/state.d.ts +58 -0
  46. package/dist/analytics/state.d.ts.map +1 -0
  47. package/dist/analytics/state.js +329 -0
  48. package/dist/analytics/state.js.map +1 -0
  49. package/dist/analytics/transcript.d.ts +150 -0
  50. package/dist/analytics/transcript.d.ts.map +1 -0
  51. package/dist/analytics/transcript.js +276 -0
  52. package/dist/analytics/transcript.js.map +1 -0
  53. package/dist/analytics/types.d.ts +875 -0
  54. package/dist/analytics/types.d.ts.map +1 -0
  55. package/dist/analytics/types.js +31 -0
  56. package/dist/analytics/types.js.map +1 -0
  57. package/dist/clients/base.d.ts +21 -2
  58. package/dist/clients/base.d.ts.map +1 -1
  59. package/dist/clients/claude/commands/ironbee-verify.md +15 -7
  60. package/dist/clients/claude/fragments/command-verify.node.md +33 -0
  61. package/dist/clients/claude/fragments/rule.node.md +29 -0
  62. package/dist/clients/claude/fragments/skill.node.md +77 -0
  63. package/dist/clients/claude/hooks/activity-end.d.ts +13 -0
  64. package/dist/clients/claude/hooks/activity-end.d.ts.map +1 -0
  65. package/dist/clients/claude/hooks/activity-end.js +42 -0
  66. package/dist/clients/claude/hooks/activity-end.js.map +1 -0
  67. package/dist/clients/claude/hooks/require-verdict.d.ts +3 -2
  68. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  69. package/dist/clients/claude/hooks/require-verdict.js +6 -5
  70. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  71. package/dist/clients/claude/hooks/require-verification.d.ts +7 -4
  72. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  73. package/dist/clients/claude/hooks/require-verification.js +44 -22
  74. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  75. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  76. package/dist/clients/claude/hooks/session-end.js +17 -2
  77. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  78. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  79. package/dist/clients/claude/hooks/session-start.js +2 -1
  80. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  81. package/dist/clients/claude/hooks/track-action-monitor.d.ts +27 -0
  82. package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -0
  83. package/dist/clients/claude/hooks/track-action-monitor.js +126 -0
  84. package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -0
  85. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  86. package/dist/clients/claude/hooks/track-action.js +29 -20
  87. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  88. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  89. package/dist/clients/claude/hooks/verify-gate.js +18 -1
  90. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  91. package/dist/clients/claude/index.d.ts +4 -1
  92. package/dist/clients/claude/index.d.ts.map +1 -1
  93. package/dist/clients/claude/index.js +171 -94
  94. package/dist/clients/claude/index.js.map +1 -1
  95. package/dist/clients/claude/rules/ironbee-verification.md +41 -33
  96. package/dist/clients/claude/skills/ironbee-verification.md +93 -76
  97. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +18 -10
  98. package/dist/clients/cursor/fragments/command-verify.node.md +33 -0
  99. package/dist/clients/cursor/fragments/rule.node.md +29 -0
  100. package/dist/clients/cursor/fragments/skill.node.md +77 -0
  101. package/dist/clients/cursor/hooks/activity-end.d.ts +14 -0
  102. package/dist/clients/cursor/hooks/activity-end.d.ts.map +1 -0
  103. package/dist/clients/cursor/hooks/activity-end.js +45 -0
  104. package/dist/clients/cursor/hooks/activity-end.js.map +1 -0
  105. package/dist/clients/cursor/hooks/require-verdict.d.ts +1 -1
  106. package/dist/clients/cursor/hooks/require-verdict.js +4 -4
  107. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  108. package/dist/clients/cursor/hooks/require-verification.js +42 -16
  109. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  110. package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
  111. package/dist/clients/cursor/hooks/session-end.js +18 -2
  112. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  113. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
  114. package/dist/clients/cursor/hooks/session-start.js +2 -1
  115. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  116. package/dist/clients/cursor/hooks/track-action-monitor.d.ts +27 -0
  117. package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -0
  118. package/dist/clients/cursor/hooks/track-action-monitor.js +133 -0
  119. package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -0
  120. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  121. package/dist/clients/cursor/hooks/track-action.js +51 -23
  122. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  123. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  124. package/dist/clients/cursor/hooks/verify-gate.js +14 -1
  125. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  126. package/dist/clients/cursor/index.d.ts +4 -1
  127. package/dist/clients/cursor/index.d.ts.map +1 -1
  128. package/dist/clients/cursor/index.js +117 -71
  129. package/dist/clients/cursor/index.js.map +1 -1
  130. package/dist/clients/cursor/rules/ironbee-verification.mdc +37 -29
  131. package/dist/clients/cursor/skills/ironbee-verification.md +93 -76
  132. package/dist/clients/registry.d.ts +14 -0
  133. package/dist/clients/registry.d.ts.map +1 -1
  134. package/dist/clients/registry.js +34 -0
  135. package/dist/clients/registry.js.map +1 -1
  136. package/dist/commands/analyze.d.ts.map +1 -1
  137. package/dist/commands/analyze.js +40 -0
  138. package/dist/commands/analyze.js.map +1 -1
  139. package/dist/commands/backend-toggle.d.ts +45 -0
  140. package/dist/commands/backend-toggle.d.ts.map +1 -0
  141. package/dist/commands/backend-toggle.js +192 -0
  142. package/dist/commands/backend-toggle.js.map +1 -0
  143. package/dist/commands/disable-backend.d.ts +14 -0
  144. package/dist/commands/disable-backend.d.ts.map +1 -0
  145. package/dist/commands/disable-backend.js +34 -0
  146. package/dist/commands/disable-backend.js.map +1 -0
  147. package/dist/commands/disable-verification.d.ts +16 -0
  148. package/dist/commands/disable-verification.d.ts.map +1 -0
  149. package/dist/commands/disable-verification.js +36 -0
  150. package/dist/commands/disable-verification.js.map +1 -0
  151. package/dist/commands/enable-backend.d.ts +15 -0
  152. package/dist/commands/enable-backend.d.ts.map +1 -0
  153. package/dist/commands/enable-backend.js +35 -0
  154. package/dist/commands/enable-backend.js.map +1 -0
  155. package/dist/commands/enable-verification.d.ts +14 -0
  156. package/dist/commands/enable-verification.d.ts.map +1 -0
  157. package/dist/commands/enable-verification.js +34 -0
  158. package/dist/commands/enable-verification.js.map +1 -0
  159. package/dist/commands/hook.d.ts.map +1 -1
  160. package/dist/commands/hook.js +60 -0
  161. package/dist/commands/hook.js.map +1 -1
  162. package/dist/commands/import.d.ts +39 -0
  163. package/dist/commands/import.d.ts.map +1 -0
  164. package/dist/commands/import.js +369 -0
  165. package/dist/commands/import.js.map +1 -0
  166. package/dist/commands/install.d.ts.map +1 -1
  167. package/dist/commands/install.js +15 -20
  168. package/dist/commands/install.js.map +1 -1
  169. package/dist/commands/process-analytics.d.ts +18 -0
  170. package/dist/commands/process-analytics.d.ts.map +1 -0
  171. package/dist/commands/process-analytics.js +57 -0
  172. package/dist/commands/process-analytics.js.map +1 -0
  173. package/dist/commands/queue.d.ts +2 -3
  174. package/dist/commands/queue.d.ts.map +1 -1
  175. package/dist/commands/queue.js +2 -3
  176. package/dist/commands/queue.js.map +1 -1
  177. package/dist/commands/status.d.ts.map +1 -1
  178. package/dist/commands/status.js +29 -1
  179. package/dist/commands/status.js.map +1 -1
  180. package/dist/commands/verification-toggle.d.ts +47 -0
  181. package/dist/commands/verification-toggle.d.ts.map +1 -0
  182. package/dist/commands/verification-toggle.js +113 -0
  183. package/dist/commands/verification-toggle.js.map +1 -0
  184. package/dist/commands/verify.d.ts.map +1 -1
  185. package/dist/commands/verify.js +28 -0
  186. package/dist/commands/verify.js.map +1 -1
  187. package/dist/hooks/core/actions.d.ts +64 -67
  188. package/dist/hooks/core/actions.d.ts.map +1 -1
  189. package/dist/hooks/core/actions.js +39 -24
  190. package/dist/hooks/core/actions.js.map +1 -1
  191. package/dist/hooks/core/activity-end.d.ts +20 -0
  192. package/dist/hooks/core/activity-end.d.ts.map +1 -0
  193. package/dist/hooks/core/activity-end.js +23 -0
  194. package/dist/hooks/core/activity-end.js.map +1 -0
  195. package/dist/hooks/core/required-tools.d.ts +30 -0
  196. package/dist/hooks/core/required-tools.d.ts.map +1 -0
  197. package/dist/hooks/core/required-tools.js +70 -0
  198. package/dist/hooks/core/required-tools.js.map +1 -0
  199. package/dist/hooks/core/session-state.d.ts +12 -3
  200. package/dist/hooks/core/session-state.d.ts.map +1 -1
  201. package/dist/hooks/core/session-state.js +59 -0
  202. package/dist/hooks/core/session-state.js.map +1 -1
  203. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  204. package/dist/hooks/core/submit-verdict.js +16 -12
  205. package/dist/hooks/core/submit-verdict.js.map +1 -1
  206. package/dist/hooks/core/verify-gate.d.ts +17 -3
  207. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  208. package/dist/hooks/core/verify-gate.js +312 -116
  209. package/dist/hooks/core/verify-gate.js.map +1 -1
  210. package/dist/import/claude/analytics-runner.d.ts +42 -0
  211. package/dist/import/claude/analytics-runner.d.ts.map +1 -0
  212. package/dist/import/claude/analytics-runner.js +213 -0
  213. package/dist/import/claude/analytics-runner.js.map +1 -0
  214. package/dist/import/claude/discovery.d.ts +22 -0
  215. package/dist/import/claude/discovery.d.ts.map +1 -0
  216. package/dist/import/claude/discovery.js +197 -0
  217. package/dist/import/claude/discovery.js.map +1 -0
  218. package/dist/import/claude/encoding.d.ts +50 -0
  219. package/dist/import/claude/encoding.d.ts.map +1 -0
  220. package/dist/import/claude/encoding.js +110 -0
  221. package/dist/import/claude/encoding.js.map +1 -0
  222. package/dist/import/claude/events/file-change.d.ts +28 -0
  223. package/dist/import/claude/events/file-change.d.ts.map +1 -0
  224. package/dist/import/claude/events/file-change.js +112 -0
  225. package/dist/import/claude/events/file-change.js.map +1 -0
  226. package/dist/import/claude/events/tool-call.d.ts +61 -0
  227. package/dist/import/claude/events/tool-call.d.ts.map +1 -0
  228. package/dist/import/claude/events/tool-call.js +119 -0
  229. package/dist/import/claude/events/tool-call.js.map +1 -0
  230. package/dist/import/claude/runner.d.ts +31 -0
  231. package/dist/import/claude/runner.d.ts.map +1 -0
  232. package/dist/import/claude/runner.js +280 -0
  233. package/dist/import/claude/runner.js.map +1 -0
  234. package/dist/import/claude/summary.d.ts +23 -0
  235. package/dist/import/claude/summary.d.ts.map +1 -0
  236. package/dist/import/claude/summary.js +186 -0
  237. package/dist/import/claude/summary.js.map +1 -0
  238. package/dist/import/claude/transcript-walk.d.ts +52 -0
  239. package/dist/import/claude/transcript-walk.d.ts.map +1 -0
  240. package/dist/import/claude/transcript-walk.js +187 -0
  241. package/dist/import/claude/transcript-walk.js.map +1 -0
  242. package/dist/import/concurrent-pool.d.ts +45 -0
  243. package/dist/import/concurrent-pool.d.ts.map +1 -0
  244. package/dist/import/concurrent-pool.js +95 -0
  245. package/dist/import/concurrent-pool.js.map +1 -0
  246. package/dist/import/emitter.d.ts +29 -0
  247. package/dist/import/emitter.d.ts.map +1 -0
  248. package/dist/import/emitter.js +66 -0
  249. package/dist/import/emitter.js.map +1 -0
  250. package/dist/import/events/activity.d.ts +23 -0
  251. package/dist/import/events/activity.d.ts.map +1 -0
  252. package/dist/import/events/activity.js +45 -0
  253. package/dist/import/events/activity.js.map +1 -0
  254. package/dist/import/events/session.d.ts +24 -0
  255. package/dist/import/events/session.d.ts.map +1 -0
  256. package/dist/import/events/session.js +47 -0
  257. package/dist/import/events/session.js.map +1 -0
  258. package/dist/import/filter.d.ts +47 -0
  259. package/dist/import/filter.d.ts.map +1 -0
  260. package/dist/import/filter.js +90 -0
  261. package/dist/import/filter.js.map +1 -0
  262. package/dist/import/ids.d.ts +56 -0
  263. package/dist/import/ids.d.ts.map +1 -0
  264. package/dist/import/ids.js +87 -0
  265. package/dist/import/ids.js.map +1 -0
  266. package/dist/import/index.d.ts +29 -0
  267. package/dist/import/index.d.ts.map +1 -0
  268. package/dist/import/index.js +52 -0
  269. package/dist/import/index.js.map +1 -0
  270. package/dist/import/marker.d.ts +20 -0
  271. package/dist/import/marker.d.ts.map +1 -0
  272. package/dist/import/marker.js +71 -0
  273. package/dist/import/marker.js.map +1 -0
  274. package/dist/import/pipeline.d.ts +41 -0
  275. package/dist/import/pipeline.d.ts.map +1 -0
  276. package/dist/import/pipeline.js +47 -0
  277. package/dist/import/pipeline.js.map +1 -0
  278. package/dist/import/progress.d.ts +20 -0
  279. package/dist/import/progress.d.ts.map +1 -0
  280. package/dist/import/progress.js +69 -0
  281. package/dist/import/progress.js.map +1 -0
  282. package/dist/import/skip.d.ts +13 -0
  283. package/dist/import/skip.d.ts.map +1 -0
  284. package/dist/import/skip.js +24 -0
  285. package/dist/import/skip.js.map +1 -0
  286. package/dist/import/types.d.ts +125 -0
  287. package/dist/import/types.d.ts.map +1 -0
  288. package/dist/import/types.js +28 -0
  289. package/dist/import/types.js.map +1 -0
  290. package/dist/index.js +21 -2
  291. package/dist/index.js.map +1 -1
  292. package/dist/lib/collector.d.ts +29 -3
  293. package/dist/lib/collector.d.ts.map +1 -1
  294. package/dist/lib/collector.js +118 -8
  295. package/dist/lib/collector.js.map +1 -1
  296. package/dist/lib/config.d.ts +240 -83
  297. package/dist/lib/config.d.ts.map +1 -1
  298. package/dist/lib/config.js +482 -89
  299. package/dist/lib/config.js.map +1 -1
  300. package/dist/lib/event.d.ts +72 -0
  301. package/dist/lib/event.d.ts.map +1 -0
  302. package/dist/lib/event.js +42 -0
  303. package/dist/lib/event.js.map +1 -0
  304. package/dist/lib/gitignore.d.ts +21 -0
  305. package/dist/lib/gitignore.d.ts.map +1 -0
  306. package/dist/lib/gitignore.js +54 -0
  307. package/dist/lib/gitignore.js.map +1 -0
  308. package/dist/lib/runtime-section.d.ts +118 -0
  309. package/dist/lib/runtime-section.d.ts.map +1 -0
  310. package/dist/lib/runtime-section.js +256 -0
  311. package/dist/lib/runtime-section.js.map +1 -0
  312. package/dist/lib/telemetry.d.ts +1 -1
  313. package/dist/lib/telemetry.d.ts.map +1 -1
  314. package/dist/lib/telemetry.js +4 -1
  315. package/dist/lib/telemetry.js.map +1 -1
  316. package/dist/queue/dead-letter.d.ts +5 -1
  317. package/dist/queue/dead-letter.d.ts.map +1 -1
  318. package/dist/queue/dead-letter.js +5 -1
  319. package/dist/queue/dead-letter.js.map +1 -1
  320. package/dist/queue/drain.d.ts +3 -2
  321. package/dist/queue/drain.d.ts.map +1 -1
  322. package/dist/queue/drain.js +3 -2
  323. package/dist/queue/drain.js.map +1 -1
  324. package/dist/queue/flush.d.ts +28 -12
  325. package/dist/queue/flush.d.ts.map +1 -1
  326. package/dist/queue/flush.js +43 -18
  327. package/dist/queue/flush.js.map +1 -1
  328. package/dist/queue/handlers/send-event.d.ts.map +1 -1
  329. package/dist/queue/handlers/send-event.js.map +1 -1
  330. package/dist/queue/index.d.ts +1 -2
  331. package/dist/queue/index.d.ts.map +1 -1
  332. package/dist/queue/index.js +2 -2
  333. package/dist/queue/index.js.map +1 -1
  334. package/dist/queue/paths.d.ts +4 -2
  335. package/dist/queue/paths.d.ts.map +1 -1
  336. package/dist/queue/paths.js +4 -2
  337. package/dist/queue/paths.js.map +1 -1
  338. package/dist/queue/process-file.d.ts +5 -1
  339. package/dist/queue/process-file.d.ts.map +1 -1
  340. package/dist/queue/process-file.js +5 -1
  341. package/dist/queue/process-file.js.map +1 -1
  342. package/dist/queue/snapshot.d.ts +4 -1
  343. package/dist/queue/snapshot.d.ts.map +1 -1
  344. package/dist/queue/snapshot.js +4 -1
  345. package/dist/queue/snapshot.js.map +1 -1
  346. package/dist/queue/spawn.d.ts +1 -3
  347. package/dist/queue/spawn.d.ts.map +1 -1
  348. package/dist/queue/spawn.js +1 -3
  349. package/dist/queue/spawn.js.map +1 -1
  350. package/dist/queue/submit.d.ts +6 -1
  351. package/dist/queue/submit.d.ts.map +1 -1
  352. package/dist/queue/submit.js +6 -1
  353. package/dist/queue/submit.js.map +1 -1
  354. package/dist/queue/types.d.ts +5 -1
  355. package/dist/queue/types.d.ts.map +1 -1
  356. package/dist/queue/types.js +5 -1
  357. package/dist/queue/types.js.map +1 -1
  358. package/dist/queue/worker-log.d.ts +3 -1
  359. package/dist/queue/worker-log.d.ts.map +1 -1
  360. package/dist/queue/worker-log.js +3 -1
  361. package/dist/queue/worker-log.js.map +1 -1
  362. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Analytics Types
4
+ *
5
+ * Type definitions for the analytics collection pipeline. The CLI projects
6
+ * the host transcript JSONL into a `SessionAnalytics` record (no content)
7
+ * and ships it to the IronBee collector as a `session_analytics` event.
8
+ *
9
+ * Privacy invariant: no field in any of these types ever holds raw
10
+ * user-prompt text or assistant-text content. Every field is structured
11
+ * metadata, count, label, byte size, or timestamp. The projection reads
12
+ * content locally for keyword matching / byte counting but emits only
13
+ * derived structural signals.
14
+ *
15
+ * Wire shape: top-level scalar fields are grouped into cohesive nested
16
+ * objects (`time`, `turns`, `classification`, `usage`, `tool_meta`,
17
+ * `code_changes`, `errors`, `user_activity`, `context_tokens`,
18
+ * `process_errors`, `user_messages`). Per-tool measurement is byte-based
19
+ * (`input_size`, `output_size`) plus a heuristic `approximated_*_tokens`;
20
+ * there is no per-tool token attribution and no `unattributed_*` residual.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.SCHEMA_VERSION = void 0;
24
+ /**
25
+ * Current schema_version emitted on the wire. Kept at "1.0" by operator
26
+ * choice — the internal refactor (logical groups + byte-based ToolUsage)
27
+ * doesn't bump the wire-version; backend migrates to the new shape under
28
+ * the same `schema_version: "1.0"` label.
29
+ */
30
+ exports.SCHEMA_VERSION = "1.0";
31
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/analytics/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH;;;;;GAKG;AACU,QAAA,cAAc,GAAW,KAAK,CAAC"}
@@ -1,9 +1,15 @@
1
+ import { IronBeeConfig } from "../lib/config";
1
2
  export interface IClient {
2
3
  readonly name: string;
3
4
  /** Returns true if this client is detected in the project directory. */
4
5
  detect(projectDir: string): boolean;
5
- /** Installs hooks and guidance files into the project directory. */
6
- install(projectDir: string): void;
6
+ /**
7
+ * Installs hooks and guidance files into the project directory.
8
+ * Pass `config` to render artifacts for a state different from what's on
9
+ * disk (used by toggle commands to apply the new state before persisting
10
+ * config). Omit to use the on-disk config.
11
+ */
12
+ install(projectDir: string, config?: IronBeeConfig): void;
7
13
  /** Removes IronBee hooks and guidance files from the project directory. */
8
14
  uninstall(projectDir: string): void;
9
15
  /** Resolves the project directory from client-specific env vars, falling back to cwd. */
@@ -14,6 +20,13 @@ export interface IClient {
14
20
  runClearVerdict(projectDir: string): Promise<void>;
15
21
  /** Runs the track-action PostToolUse hook for this client. */
16
22
  runTrackAction(projectDir: string): Promise<void>;
23
+ /**
24
+ * Runs the lean track-action variant for monitoring-only mode.
25
+ * Submits send_event jobs for non-devtools tools and falls back to
26
+ * starting an activity if one isn't already active. Skips devtools-to-actions.jsonl,
27
+ * recording state, and bdt_execute nested extraction (all verify-gate-only concerns).
28
+ */
29
+ runTrackActionMonitor(projectDir: string): Promise<void>;
17
30
  /** Runs the session-start hook for this client. */
18
31
  runSessionStart(projectDir: string): Promise<void>;
19
32
  /** Runs the require-verdict PreToolUse hook for this client. */
@@ -22,6 +35,12 @@ export interface IClient {
22
35
  runRequireVerification(projectDir: string): Promise<void>;
23
36
  /** Runs the activity-start hook for this client (UserPromptSubmit / beforeSubmitPrompt). */
24
37
  runActivityStart(projectDir: string): Promise<void>;
38
+ /**
39
+ * Runs the lean Stop hook for monitoring-only mode.
40
+ * Closes the active activity and triggers a background queue flush.
41
+ * Pairs with runActivityStart in the monitoring hook set.
42
+ */
43
+ runActivityEnd(projectDir: string): Promise<void>;
25
44
  /** Runs the session-end hook for this client (SessionEnd). */
26
45
  runSessionEnd(projectDir: string): Promise<void>;
27
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/clients/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,oEAAoE;IACpE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAElC,2EAA2E;IAC3E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,yFAAyF;IACzF,iBAAiB,IAAI,MAAM,CAAC;IAE5B,sDAAsD;IACtD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,+DAA+D;IAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,8DAA8D;IAC9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,mDAAmD;IACnD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,gEAAgE;IAChE,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,qEAAqE;IACrE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,4FAA4F;IAC5F,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,8DAA8D;IAC9D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/clients/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wEAAwE;IACxE,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAE1D,2EAA2E;IAC3E,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpC,yFAAyF;IACzF,iBAAiB,IAAI,MAAM,CAAC;IAE5B,sDAAsD;IACtD,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjD,+DAA+D;IAC/D,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,8DAA8D;IAC9D,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD;;;;;OAKG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD,mDAAmD;IACnD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,gEAAgE;IAChE,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,qEAAqE;IACrE,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,4FAA4F;IAC5F,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,8DAA8D;IAC9D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD"}
@@ -1,20 +1,22 @@
1
1
  # IronBee Verify
2
2
 
3
- Verify the current code changes in the browser.
3
+ Verify the current code changes through real tools — browser interaction for frontend, runtime-specific debugger for any enabled backend cycle.
4
4
 
5
5
  ## Usage
6
- - `/ironbee-verify` — **default** — focus on what changed, visual + functional checks on affected areas
6
+ - `/ironbee-verify` — **default** — focus on what changed, visual + functional checks on affected areas (browser-cycle modes; any enabled backend-runtime cycle runs alongside automatically — see runtime section below)
7
7
  - `/ironbee-verify full` — **full scope** — entire application, all checklists, edge cases, responsive, accessibility deep dive
8
8
  - `/ironbee-verify visual` — **visual only** — contrast, layout, spacing, fonts, images, theming
9
9
  - `/ironbee-verify functional` — **functional only** — clicks, forms, navigation, data flow, error handling
10
10
 
11
- If no argument is given, use **default** mode.
11
+ If no argument is given, use **default** mode. The mode argument controls only the browser-cycle thoroughness — any active backend-runtime cycle runs the same way regardless of mode.
12
+
13
+ A backend-runtime cycle (e.g. `node` after `ironbee enable-backend node`) may also be active for this project — **see the runtime section near the bottom of this file** for whether it applies and which tools to call.
12
14
 
13
15
  ---
14
16
 
15
17
  ## Steps (all modes)
16
18
 
17
- 1. **Start verification**: Run `echo '{"session_id":"$IRONBEE_SESSION_ID"}' | ironbee hook verification-start` via Bash
19
+ 1. **Start verification**: Run `echo '{"session_id":"<your-session-id>"}' | ironbee hook verification-start` via Bash (substitute the actual session ID printed by the SessionStart hook).
18
20
  2. **Build and start** the application if not already running
19
21
  3. **For EVERY page you visit**, repeat this cycle:
20
22
  a. **Navigate** using `mcp__browser-devtools__bdt_navigation_go-to`
@@ -35,11 +37,12 @@ If no argument is given, use **default** mode.
35
37
  4. **Functionally test** — run the checklist for your mode (see below). After each significant interaction, take another screenshot and repeat the visual analysis.
36
38
  5. **Check console** for errors using `mcp__browser-devtools__bdt_o11y_get-console-messages`
37
39
  6. **Stop** the dev server when verification is complete
38
- 7. **Submit your verdict** via Bash:
40
+ 7. **If recording was started, stop it now** — `mcp__browser-devtools__bdt_content_stop-recording`. submit-verdict rejects with `"recording is still active"` when this step is skipped. (Recording is a server-side opt-in via `recording.enable` — when on, the gate forces `bdt_content_start-recording` BEFORE the steps above and demands the matching stop here.)
41
+ 8. **Submit your verdict** via Bash:
39
42
  - Pass: `echo '{"session_id":"...","status":"pass","pages_tested":[...],"checks":[...],"console_errors":0,"network_failures":0}' | ironbee hook submit-verdict`
40
43
  - Fail: `echo '{"session_id":"...","status":"fail","pages_tested":[...],"checks":[...],"console_errors":N,"network_failures":N,"issues":["describe what failed"]}' | ironbee hook submit-verdict`
41
- 8. **If failed** → collect ALL issues first (finish testing all affected pages), submit one fail verdict with all issues, then fix everything, rebuild, and re-verify. Do not fix one issue at a time — batch fixes to avoid repeated build/restart cycles.
42
- 9. If pass after a previous fail, include `"fixes"` in the verdict describing what was fixed
44
+ 9. **If failed** → collect ALL issues first (finish testing all affected pages), submit one fail verdict with all issues, then fix everything, rebuild, and re-verify. Do not fix one issue at a time — batch fixes to avoid repeated build/restart cycles.
45
+ 10. If pass after a previous fail, include `"fixes"` in the verdict describing what was fixed
43
46
 
44
47
  ---
45
48
 
@@ -125,3 +128,8 @@ Your `checks` array must list **specific observations**, not generic statements:
125
128
  - ALWAYS submit a verdict after every verification attempt — both pass AND fail
126
129
  - Do NOT edit code before submitting a fail verdict
127
130
  - **Noticing a bug and submitting pass is the #1 violation** — if you see it, fail it
131
+
132
+ ---
133
+
134
+ <!--IRONBEE:RUNTIME:node-->
135
+ <!--/IRONBEE:RUNTIME:node-->
@@ -0,0 +1,33 @@
1
+ <!-- Node backend verification is ENABLED for this project. -->
2
+
3
+ ## Backend Node Mode (when `backend.node.verifyPatterns` matches an edited file)
4
+
5
+ > **Precondition: the backend must actually be Node.js.** If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, etc., this section does NOT apply — `ndt_*` tools won't connect to non-Node processes. Just do browser verification.
6
+
7
+ If the project has node backend verification enabled (`ironbee enable-backend node` once at setup, by an operator who confirmed the backend is Node.js) and your edits touch matching paths (e.g. `server/**`, `pages/api/**`), the Stop hook also enforces a Node cycle. The same `verification-start` covers both cycles; the same verdict file carries fields for both.
8
+
9
+ ### Steps (additive to the browser flow above)
10
+ 1. **Identify the running Node process** — note its PID, container name (`docker compose ps`), or inspector port.
11
+ 2. **Connect**: `mcp__node-devtools__ndt_debug_connect` with one of `pid` / `processName` / `containerId` / `containerName` / `inspectorPort` / `wsUrl`. Inspector is auto-activated via SIGUSR1 if needed.
12
+ 3. **Pick an evidence path** for each changed code path:
13
+ - **Probe path** (proves the code path executed): `mcp__node-devtools__ndt_debug_put-tracepoint` (or `put-logpoint` / `put-exceptionpoint`) at the changed code, exercise the path (e.g. trigger the API call from the browser), then `mcp__node-devtools__ndt_debug_get-probe-snapshots`. At least one probe must come back with `triggered: true`.
14
+ - **Log path** (proves no errors): exercise the path, then `mcp__node-devtools__ndt_debug_get-logs` with the error level filter. `backend_node_log_errors` must be empty for `status: pass`.
15
+ 4. **Disconnect** (optional): `mcp__node-devtools__ndt_debug_disconnect`.
16
+ 5. **Submit verdict** including `backend_node_*` fields. If browser cycle is also active, include browser fields in the SAME verdict — do not submit two verdicts.
17
+
18
+ ### Verdict (node-cycle fields)
19
+ ```json
20
+ {
21
+ "session_id": "...",
22
+ "status": "pass",
23
+ "checks": ["POST /api/orders returned 201", "tracepoint at handler.ts:42 fired once"],
24
+ "backend_node_processes_connected": ["pid:12345 (next-server)"],
25
+ "backend_node_probes_set": [
26
+ { "type": "tracepoint", "location": "src/api/orders.ts:42", "triggered": true }
27
+ ],
28
+ "backend_node_probe_snapshots_collected": 1,
29
+ "backend_node_log_errors": []
30
+ }
31
+ ```
32
+
33
+ For a multi-cycle pass, both browser and node criteria must hold — claiming `pass` without one cycle's evidence will be overridden to fail by the gate.
@@ -0,0 +1,29 @@
1
+ <!-- Node backend verification is ENABLED for this project. The Stop hook
2
+ enforces a node cycle in addition to the browser cycle whenever an
3
+ edited file matches `backend.node.verifyPatterns`. -->
4
+
5
+ ## Node cycle
6
+
7
+ Backend file changes IF the file matches `backend.node.verifyPatterns` ALSO require verification through the **node-devtools** MCP server (prefix `ndt_`). Node-cycle verification means attaching to the running Node process via the V8 inspector, setting a probe (tracepoint / logpoint / exceptionpoint) at the changed code, exercising the path so the probe fires, and reading snapshots — OR inspecting runtime error logs.
8
+
9
+ Both cycles can be active simultaneously (e.g. you edit both a React component and an API handler in the same task). One `verification-start` covers all active cycles; one verdict file carries fields for all active cycles; one retry counter applies globally.
10
+
11
+ ### ⚠️ `node-devtools` is ONLY for Node.js backends
12
+
13
+ `node-devtools` is a V8 inspector wrapper. It does NOT work for Java, Python, Go, Rust, Ruby, .NET, PHP, or any other runtime. If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, etc., the backend is NOT Node.js and you must NOT call `ndt_*` tools — they will fail to connect to non-Node processes.
14
+
15
+ **Misconfiguration recovery.** If you reach this state, the operator enabled the node cycle for a non-Node project by mistake. The Stop hook will keep blocking with `incomplete_tools` for the node cycle until you call `ndt_debug_connect` (which will fail) or until `maxRetries` is exhausted. Don't attempt the connection. Instead, stop and clearly report to the user: the project's backend is not Node.js, and they must run `ironbee disable-backend node` to unblock the gate. Continue with browser-cycle verification only in the meantime.
16
+
17
+ ### Node-cycle additions to the main flow
18
+
19
+ These attach to the **Required steps** above — they don't replace any step. Numbering follows the main flow:
20
+
21
+ - **Within step 3 (run flow):** also run the node flow: connect (`ndt_debug_connect`) → set probe (`ndt_debug_put-tracepoint` / `put-logpoint` / `put-exceptionpoint`) AND exercise + read snapshots (`ndt_debug_get-probe-snapshots`), OR exercise + read logs (`ndt_debug_get-logs`). When both browser and node cycles are active, run BOTH within the same verification cycle.
22
+ - **Within step 6 (submit verdict):** include `backend_node_*` fields (`backend_node_processes_connected` non-empty, plus `backend_node_probes_set` and/or `backend_node_log_errors`). One verdict carries fields for every active cycle.
23
+
24
+ ### Additional BANNED for node cycle
25
+
26
+ - Calling `ndt_*` tools without first opening a verification cycle (`ironbee hook verification-start`).
27
+ - **Calling `ndt_*` tools when the project's backend is NOT Node.js** (Java / Python / Go / Rust / .NET / Ruby / PHP / Elixir / etc.). Use the browser cycle only for non-Node backends.
28
+ - Claiming `status: pass` for a node cycle when no probe triggered AND `backend_node_log_errors` was never collected.
29
+ - Submitting a node-only verdict that omits `backend_node_processes_connected` — every node-cycle verdict requires this field non-empty.
@@ -0,0 +1,77 @@
1
+ <!-- Node backend verification is ENABLED for this project. The Stop hook
2
+ enforces a node cycle in addition to the browser cycle whenever an
3
+ edited file matches `backend.node.verifyPatterns`. -->
4
+
5
+ ## ⚠️ CRITICAL: when NOT to use node-devtools
6
+
7
+ **`node-devtools` is ONLY for Node.js backends.** It is a V8 inspector wrapper (`node --inspect` attach via PID / inspector port / Docker container). It does **NOT** work with any other runtime. Do **NOT** call `ndt_*` tools for projects whose backend is:
8
+ - Java (Spring, Quarkus, Micronaut, …) — use the JVM debugger, not supported by IronBee yet
9
+ - Python (FastAPI, Django, Flask, …) — not supported yet
10
+ - Go, Rust, Ruby, .NET, PHP, Elixir, Kotlin/JVM, Swift — not supported yet
11
+
12
+ **How to tell whether the backend is Node.js:**
13
+ - `package.json` is the main project manifest, with `"type": "module"` or `"engines": { "node": ... }`, or scripts that run `node`/`tsx`/`ts-node`.
14
+ - The dev server command is `npm run dev`, `next dev`, `nest start`, `nodemon`, etc.
15
+
16
+ If you see `pom.xml`, `build.gradle`, `requirements.txt`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `Gemfile`, `composer.json`, `*.csproj` — the backend is NOT Node.js. Do NOT call any `ndt_*` tools.
17
+
18
+ **Misconfiguration recovery.** If you read this section it means the operator enabled the node cycle for this project. If the backend isn't actually Node.js, this was a mistake — the Stop hook will keep blocking the gate (with `incomplete_tools` for the node cycle) until you call `ndt_debug_connect` (which will fail) or `maxRetries` is exhausted. Don't attempt the connection. Stop and tell the user clearly: the project's backend is not Node.js; ask them to run `ironbee disable-backend node` to unblock the gate. Continue with browser-cycle verification only in the meantime.
19
+
20
+ ## Node flow
21
+
22
+ 1. **Identify the running Node process** — note its PID, container name (`docker compose ps`), or inspector port.
23
+ 2. **Connect**: `mcp__node-devtools__ndt_debug_connect` with one of `pid` / `processName` / `containerId` / `containerName` / `inspectorPort` / `wsUrl`. SIGUSR1 is auto-sent if the inspector isn't on; for Docker, it goes through `docker exec`.
24
+ 3. **Pick an evidence path** per changed code path:
25
+ - **Probe path** (proves the code path executed):
26
+ - Set a probe at the changed location: `ndt_debug_put-tracepoint` (checkpoint), `ndt_debug_put-logpoint` (logged expression), or `ndt_debug_put-exceptionpoint` (caught/uncaught exception).
27
+ - **Exercise the path** (e.g. send a request from the browser, run a CLI command, post to a queue) — without this the probe never fires.
28
+ - Read collected snapshots: `ndt_debug_get-probe-snapshots`. At least one probe must come back with `triggered: true`.
29
+ - **Log path** (proves no errors during execution):
30
+ - Exercise the path.
31
+ - Read errors: `ndt_debug_get-logs` with the error-level filter. `backend_node_log_errors` must be empty for `status: pass`.
32
+ 4. **Disconnect** (optional): `ndt_debug_disconnect`.
33
+
34
+ ### Node verdict fields
35
+ ```json
36
+ {
37
+ "session_id": "<sid>",
38
+ "status": "pass",
39
+ "checks": ["POST /api/orders returned 201", "tracepoint at handler.ts:42 fired once"],
40
+ "backend_node_processes_connected": ["pid:12345 (next-server)"],
41
+ "backend_node_probes_set": [
42
+ { "type": "tracepoint", "location": "src/api/orders.ts:42", "triggered": true }
43
+ ],
44
+ "backend_node_probe_snapshots_collected": 1,
45
+ "backend_node_log_errors": []
46
+ }
47
+ ```
48
+
49
+ For `status: "pass"` (node cycle):
50
+ - If probes were set, at least one must have `triggered: true` (proves the code path executed).
51
+ - If only logs were used, `backend_node_log_errors.length === 0` (no errors observed).
52
+ - If both forms were used, both conditions must hold.
53
+
54
+ ## Multi-cycle (browser + node simultaneously)
55
+
56
+ Common case: in the same task you edit a `.tsx` component (browser-cycle) and a `server/api/*.ts` handler (node-cycle). Both cycles activate. **Single** `verification-start`, **single** `verdict.json`, **single** retry counter cover both.
57
+
58
+ Submit ONE verdict carrying fields for every active cycle:
59
+
60
+ ```json
61
+ {
62
+ "session_id": "<sid>",
63
+ "status": "pass",
64
+ "pages_tested": ["http://localhost:3000/checkout"],
65
+ "checks": ["checkout submits", "POST /api/orders returned 201", "no console errors"],
66
+ "console_errors": 0,
67
+ "network_failures": 0,
68
+ "backend_node_processes_connected": ["pid:12345 (next-server)"],
69
+ "backend_node_probes_set": [
70
+ { "type": "tracepoint", "location": "src/api/orders.ts:42", "triggered": true }
71
+ ],
72
+ "backend_node_probe_snapshots_collected": 1,
73
+ "backend_node_log_errors": []
74
+ }
75
+ ```
76
+
77
+ For a multi-cycle `pass`, BOTH cycles' pass criteria must hold. Claiming `pass` without one cycle's evidence will be overridden to `fail` by the gate.
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Claude Code — activity-end hook adapter (monitoring-only mode).
3
+ *
4
+ * Stop hook for sessions where verification is disabled. Closes the active
5
+ * activity and triggers a background queue flush so accumulated `send_event`
6
+ * jobs ship to the collector before the next turn starts.
7
+ *
8
+ * Replaces `verify-gate` on Stop when `verification.enable: false`. The two
9
+ * are mutually exclusive at install time — only one Stop handler is registered
10
+ * per session.
11
+ */
12
+ export declare function run(projectDir: string): Promise<void>;
13
+ //# sourceMappingURL=activity-end.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-end.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/activity-end.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB3D"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Claude Code — activity-end hook adapter (monitoring-only mode).
4
+ *
5
+ * Stop hook for sessions where verification is disabled. Closes the active
6
+ * activity and triggers a background queue flush so accumulated `send_event`
7
+ * jobs ship to the collector before the next turn starts.
8
+ *
9
+ * Replaces `verify-gate` on Stop when `verification.enable: false`. The two
10
+ * are mutually exclusive at install time — only one Stop handler is registered
11
+ * per session.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.run = run;
15
+ const activity_end_1 = require("../../../hooks/core/activity-end");
16
+ const logger_1 = require("../../../lib/logger");
17
+ const stdin_1 = require("../../../lib/stdin");
18
+ const hook_trigger_1 = require("../../../analytics/hook-trigger");
19
+ async function run(projectDir) {
20
+ let input;
21
+ try {
22
+ input = JSON.parse((0, stdin_1.readStdin)());
23
+ }
24
+ catch (e) {
25
+ logger_1.logger.debug(`failed to parse stdin: ${e}`);
26
+ process.exit(0);
27
+ }
28
+ const sessionId = input.session_id ?? "default";
29
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
30
+ const actionsFile = `${sessionDir}/actions.jsonl`;
31
+ (0, logger_1.setLogFile)(`${sessionDir}/session.log`);
32
+ await (0, activity_end_1.runActivityEnd)({ sessionDir, actionsFile, projectDir, sessionId });
33
+ // Analytics trigger after the existing primary work. Fail-safe.
34
+ (0, hook_trigger_1.runAnalyticsTrigger)({
35
+ projectDir,
36
+ sessionId,
37
+ triggerType: "Stop",
38
+ transcriptSource: "claude-code",
39
+ });
40
+ process.exit(0);
41
+ }
42
+ //# sourceMappingURL=activity-end.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity-end.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/activity-end.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAWH,kBAyBC;AAlCD,mEAAkE;AAClE,gDAAyD;AACzD,8CAA+C;AAC/C,kEAAsE;AAM/D,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA0B,CAAC;IAC/B,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAAwB,CAAC;IAC3D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,MAAM,WAAW,GAAW,GAAG,UAAU,gBAAgB,CAAC;IAC1D,IAAA,mBAAU,EAAC,GAAG,UAAU,cAAc,CAAC,CAAC;IAExC,MAAM,IAAA,6BAAc,EAAC,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzE,gEAAgE;IAChE,IAAA,kCAAmB,EAAC;QAChB,UAAU;QACV,SAAS;QACT,WAAW,EAAE,MAAM;QACnB,gBAAgB,EAAE,aAAa;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -2,8 +2,9 @@
2
2
  * Claude Code — require-verdict hook adapter
3
3
  *
4
4
  * PreToolUse hook for Write|Edit — blocks file edits if the agent used
5
- * browser-devtools tools but hasn't submitted a verdict yet. Forces the
6
- * agent to submit a fail verdict before fixing code.
5
+ * any devtools tools (browser-devtools or node-devtools) but hasn't
6
+ * submitted a verdict yet. Forces the agent to submit a fail verdict
7
+ * before fixing code.
7
8
  *
8
9
  * Side effect: when `tool_name === "Write"`, stashes whether the target
9
10
  * file already exists so the matching PostToolUse adapter can decide
@@ -1 +1 @@
1
- {"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAkBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC3D"}
1
+ {"version":3,"file":"require-verdict.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC3D"}
@@ -3,8 +3,9 @@
3
3
  * Claude Code — require-verdict hook adapter
4
4
  *
5
5
  * PreToolUse hook for Write|Edit — blocks file edits if the agent used
6
- * browser-devtools tools but hasn't submitted a verdict yet. Forces the
7
- * agent to submit a fail verdict before fixing code.
6
+ * any devtools tools (browser-devtools or node-devtools) but hasn't
7
+ * submitted a verdict yet. Forces the agent to submit a fail verdict
8
+ * before fixing code.
8
9
  *
9
10
  * Side effect: when `tool_name === "Write"`, stashes whether the target
10
11
  * file already exists so the matching PostToolUse adapter can decide
@@ -36,10 +37,10 @@ async function run(projectDir) {
36
37
  const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
37
38
  const actionsFile = `${sessionDir}/actions.jsonl`;
38
39
  if ((0, actions_1.hasToolCallsSinceLastVerdict)(actionsFile)) {
39
- process.stderr.write(`BLOCKED: You used browser-devtools tools but did not submit a verdict. You MUST submit a verdict (pass or fail) before editing code.
40
+ process.stderr.write(`BLOCKED: You used verification tools (browser-devtools or node-devtools) but did not submit a verdict. You MUST submit a verdict (pass or fail) before editing code.
40
41
 
41
- Submit your verdict first:
42
- echo '{"session_id":"${sessionId}","status":"fail","pages_tested":[...],"checks":[...],"console_errors":0,"network_failures":0,"issues":["describe what failed"]}' | ironbee hook submit-verdict
42
+ Submit your verdict first (include cycle-appropriate fields — browser fields for bdt_*, backend_node_* fields for ndt_*):
43
+ echo '{"session_id":"${sessionId}","status":"fail","checks":[...],"issues":["describe what failed"], ...}' | ironbee hook submit-verdict
43
44
 
44
45
  Then you can edit code to fix the issues.
45
46
  `);
@@ -1 +1 @@
1
- {"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAkBH,kBAkCC;AAlDD,2BAAgC;AAChC,yDAA2E;AAC3E,2DAA6D;AAC7D,uEAAsF;AACtF,gDAAyD;AACzD,8CAA+C;AAWxC,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,MAAM,WAAW,GAAW,GAAG,UAAU,gBAAgB,CAAC;IAE1D,IAAI,IAAA,sCAA4B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAClF,MAAM,KAAK,GAAmB,EAAE,YAAY,EAAE,IAAA,eAAU,EAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,IAAA,iCAAgB,EAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAA,wBAAa,EAAC,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAEzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"require-verdict.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verdict.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;AAkBH,kBAkCC;AAlDD,2BAAgC;AAChC,yDAA2E;AAC3E,2DAA6D;AAC7D,uEAAsF;AACtF,gDAAyD;AACzD,8CAA+C;AAWxC,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,IAAI,KAA4B,CAAC;IACjC,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAS,GAAE,CAA0B,CAAC;IAC7D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;IACxD,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IAEvE,MAAM,UAAU,GAAW,GAAG,UAAU,sBAAsB,SAAS,EAAE,CAAC;IAC1E,MAAM,WAAW,GAAW,GAAG,UAAU,gBAAgB,CAAC;IAE1D,IAAI,IAAA,sCAA4B,EAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;yBAGJ,SAAS;;;CAGjC,CAAC,CAAC;QACK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,CAAC,UAAU,EAAE,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QAClF,MAAM,KAAK,GAAmB,EAAE,YAAY,EAAE,IAAA,eAAU,EAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,IAAA,iCAAgB,EAAC,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,IAAA,wBAAa,EAAC,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAEzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -1,12 +1,15 @@
1
1
  /**
2
2
  * Claude Code — require-verification hook adapter
3
3
  *
4
- * PreToolUse hook for mcp__browser-devtools__.* — blocks browser
5
- * tool usage if no active verification cycle. Forces agent to call
6
- * `ironbee hook verification-start` before using browser tools.
4
+ * PreToolUse hook for `mcp__browser-devtools__.*|mcp__node-devtools__.*`
5
+ * — blocks devtools tool usage if no active verification cycle. Forces
6
+ * the agent to call `ironbee hook verification-start` before using any
7
+ * verification tooling (browser or node).
7
8
  *
8
9
  * When allowed, injects `_metadata` into tool input with sessionId and traceId
9
- * so the MCP server knows the active session/trace context.
10
+ * so the MCP server knows the active session/trace context. The `mcpServer`
11
+ * field is parsed from `tool_name` so each server (browser-devtools /
12
+ * node-devtools) sees its own correct identity.
10
13
  *
11
14
  * Exit 0 = allow tool (with updatedInput containing _metadata)
12
15
  * Exit 2 = block tool
@@ -1 +1 @@
1
- {"version":3,"file":"require-verification.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4BH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG3D"}
1
+ {"version":3,"file":"require-verification.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgCH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoH3D"}
@@ -2,18 +2,22 @@
2
2
  /**
3
3
  * Claude Code — require-verification hook adapter
4
4
  *
5
- * PreToolUse hook for mcp__browser-devtools__.* — blocks browser
6
- * tool usage if no active verification cycle. Forces agent to call
7
- * `ironbee hook verification-start` before using browser tools.
5
+ * PreToolUse hook for `mcp__browser-devtools__.*|mcp__node-devtools__.*`
6
+ * — blocks devtools tool usage if no active verification cycle. Forces
7
+ * the agent to call `ironbee hook verification-start` before using any
8
+ * verification tooling (browser or node).
8
9
  *
9
10
  * When allowed, injects `_metadata` into tool input with sessionId and traceId
10
- * so the MCP server knows the active session/trace context.
11
+ * so the MCP server knows the active session/trace context. The `mcpServer`
12
+ * field is parsed from `tool_name` so each server (browser-devtools /
13
+ * node-devtools) sees its own correct identity.
11
14
  *
12
15
  * Exit 0 = allow tool (with updatedInput containing _metadata)
13
16
  * Exit 2 = block tool
14
17
  */
15
18
  Object.defineProperty(exports, "__esModule", { value: true });
16
19
  exports.run = run;
20
+ const crypto_1 = require("crypto");
17
21
  const session_state_1 = require("../../../hooks/core/session-state");
18
22
  const actions_1 = require("../../../hooks/core/actions");
19
23
  const activity_1 = require("../../../hooks/core/activity");
@@ -21,8 +25,11 @@ const config_1 = require("../../../lib/config");
21
25
  const logger_1 = require("../../../lib/logger");
22
26
  const util_1 = require("../util");
23
27
  const stdin_1 = require("../../../lib/stdin");
24
- /** MCP server key that this hook is routed to via the `mcp__browser-devtools__.*` matcher. */
25
- const MCP_SERVER_NAME = "browser-devtools";
28
+ /** Fallback MCP server when `tool_name` parsing fails. The matcher routes
29
+ * both `mcp__browser-devtools__.*` and `mcp__node-devtools__.*` here, so
30
+ * `extractMcpServerName` is the source of truth — this is only used if the
31
+ * tool_name field is malformed or absent. */
32
+ const FALLBACK_MCP_SERVER_NAME = "browser-devtools";
26
33
  async function run(projectDir) {
27
34
  let input;
28
35
  try {
@@ -38,25 +45,35 @@ async function run(projectDir) {
38
45
  const actionsFile = `${sessionDir}/actions.jsonl`;
39
46
  const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
40
47
  if (!verificationId) {
41
- process.stderr.write(`BLOCKED: You must start a verification cycle before using browser-devtools tools.
48
+ process.stderr.write(`BLOCKED: You must start a verification cycle before using devtools tools (browser-devtools or node-devtools).
42
49
 
43
50
  Start verification first:
44
51
  echo '{"session_id":"${sessionId}"}' | ironbee hook verification-start
45
52
 
46
- Then use browser tools to verify your changes.
53
+ Then use the verification tools for the active cycle(s) — bdt_* for browser, ndt_* for node.
47
54
  `);
48
55
  process.exit(2);
49
56
  }
50
- // enforce recording if required (allow recording start tool through)
57
+ // Recording enforcement is browser-only (§12). Node-devtools tools
58
+ // (ndt_*) bypass this check entirely — they never set recordingActive
59
+ // and never need it to be true.
51
60
  const toolName = input.tool_name ?? "";
61
+ const isBrowserDevToolsCall = toolName.startsWith("mcp__browser-devtools__");
52
62
  const isRecordingStartTool = toolName.endsWith("bdt_content_start-recording");
53
- if ((0, session_state_1.isRecordingRequired)(sessionDir) && !(0, session_state_1.isRecordingActive)(sessionDir) && !isRecordingStartTool) {
63
+ if (isBrowserDevToolsCall &&
64
+ (0, session_state_1.isRecordingRequired)(sessionDir) &&
65
+ !(0, session_state_1.isRecordingActive)(sessionDir) &&
66
+ !isRecordingStartTool) {
54
67
  process.stderr.write(`BLOCKED: Recording is required but not started.
55
68
 
56
- Start recording first:
57
- Use mcp__browser-devtools__bdt_content_start-recording to begin recording.
69
+ 1. Start recording NOW:
70
+ Use mcp__browser-devtools__bdt_content_start-recording
58
71
 
59
- Then use other browser tools to verify your changes.
72
+ 2. Run the verification (navigate, screenshot, aria, console, etc.)
73
+
74
+ 3. **Stop recording BEFORE submitting verdict:**
75
+ Use mcp__browser-devtools__bdt_content_stop-recording
76
+ submit-verdict will reject with "recording is still active" if you skip this.
60
77
  `);
61
78
  process.exit(2);
62
79
  }
@@ -81,19 +98,24 @@ Then use other browser tools to verify your changes.
81
98
  verificationId,
82
99
  traceId,
83
100
  traceState,
101
+ // Stable wire id for the tool_call event. The MCP server reads this
102
+ // and uses it as the `id` of the event it POSTs to the collector.
103
+ // `ironbee import` reads the same field from the transcript and
104
+ // reuses it as the event id, so live and offline-derived events
105
+ // collapse on `(session_id, id)` collector dedup.
106
+ toolCallId: (0, crypto_1.randomUUID)(),
84
107
  };
85
108
  if (input.tool_use_id) {
86
109
  metadata.toolUseId = input.tool_use_id;
87
110
  }
88
- // The matcher restricts this hook to mcp__browser-devtools__*, so the
89
- // tool_name reliably encodes a server. Prefer parsing it (future-proof
90
- // if the matcher ever widens to other MCP servers). Fall back to the
91
- // hardcoded browser-devtools constant — mirrors the Cursor adapter's
92
- // by-construction approach if parsing ever fails for any reason
93
- // (malformed tool_name, missing field, etc.). This keeps MCP-emitted
94
- // OTel events tagged with the same `mcp_server` dimension our own
95
- // tool_call events carry.
96
- metadata.mcpServer = (0, util_1.extractMcpServerName)(input.tool_name) ?? MCP_SERVER_NAME;
111
+ // The matcher routes both `mcp__browser-devtools__.*` and
112
+ // `mcp__node-devtools__.*` here, so the tool_name reliably encodes a
113
+ // server. Parse it so each server gets its correct identity in the
114
+ // metadata. Falls back to a hardcoded browser-devtools constant if
115
+ // parsing ever fails (malformed tool_name, missing field, …). This
116
+ // keeps MCP-emitted OTel events tagged with the same `mcp_server`
117
+ // dimension our own tool_call events carry.
118
+ metadata.mcpServer = (0, util_1.extractMcpServerName)(input.tool_name) ?? FALLBACK_MCP_SERVER_NAME;
97
119
  const userEmail = (0, session_state_1.getUserEmail)(sessionDir);
98
120
  if (userEmail) {
99
121
  metadata.userEmail = userEmail;
@@ -1 +1 @@
1
- {"version":3,"file":"require-verification.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"require-verification.js","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/require-verification.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-end.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC3D"}
1
+ {"version":3,"file":"session-end.d.ts","sourceRoot":"","sources":["../../../../src/clients/claude/hooks/session-end.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD3D"}