@ironbee-ai/cli 0.15.0 → 0.17.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 (494) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/analytics/{emit.d.ts → claude/emit.d.ts} +1 -1
  3. package/dist/analytics/claude/emit.d.ts.map +1 -0
  4. package/dist/analytics/{emit.js → claude/emit.js} +34 -7
  5. package/dist/analytics/claude/emit.js.map +1 -0
  6. package/dist/analytics/{hook-trigger.d.ts → claude/hook-trigger.d.ts} +1 -1
  7. package/dist/analytics/claude/hook-trigger.d.ts.map +1 -0
  8. package/dist/analytics/{hook-trigger.js → claude/hook-trigger.js} +2 -2
  9. package/dist/analytics/claude/hook-trigger.js.map +1 -0
  10. package/dist/analytics/claude/log.d.ts.map +1 -0
  11. package/dist/analytics/{log.js → claude/log.js} +1 -1
  12. package/dist/analytics/claude/log.js.map +1 -0
  13. package/dist/analytics/{merge.d.ts → claude/merge.d.ts} +2 -1
  14. package/dist/analytics/claude/merge.d.ts.map +1 -0
  15. package/dist/analytics/{merge.js → claude/merge.js} +13 -1
  16. package/dist/analytics/claude/merge.js.map +1 -0
  17. package/dist/analytics/{pricing.d.ts → claude/pricing.d.ts} +1 -13
  18. package/dist/analytics/claude/pricing.d.ts.map +1 -0
  19. package/dist/analytics/{pricing.js → claude/pricing.js} +6 -14
  20. package/dist/analytics/claude/pricing.js.map +1 -0
  21. package/dist/analytics/{projection.d.ts → claude/projection.d.ts} +31 -7
  22. package/dist/analytics/claude/projection.d.ts.map +1 -0
  23. package/dist/analytics/{projection.js → claude/projection.js} +631 -327
  24. package/dist/analytics/claude/projection.js.map +1 -0
  25. package/dist/analytics/{spawn.d.ts → claude/spawn.d.ts} +4 -4
  26. package/dist/analytics/claude/spawn.d.ts.map +1 -0
  27. package/dist/analytics/{spawn.js → claude/spawn.js} +4 -3
  28. package/dist/analytics/claude/spawn.js.map +1 -0
  29. package/dist/analytics/{state.d.ts → claude/state.d.ts} +1 -1
  30. package/dist/analytics/claude/state.d.ts.map +1 -0
  31. package/dist/analytics/{state.js → claude/state.js} +2 -2
  32. package/dist/analytics/claude/state.js.map +1 -0
  33. package/dist/analytics/claude/transcript.d.ts.map +1 -0
  34. package/dist/analytics/{transcript.js → claude/transcript.js} +1 -1
  35. package/dist/analytics/claude/transcript.js.map +1 -0
  36. package/dist/analytics/codex/api-request.d.ts +108 -0
  37. package/dist/analytics/codex/api-request.d.ts.map +1 -0
  38. package/dist/analytics/codex/api-request.js +155 -0
  39. package/dist/analytics/codex/api-request.js.map +1 -0
  40. package/dist/analytics/codex/apply-patch.d.ts +21 -0
  41. package/dist/analytics/codex/apply-patch.d.ts.map +1 -0
  42. package/dist/analytics/codex/apply-patch.js +49 -0
  43. package/dist/analytics/codex/apply-patch.js.map +1 -0
  44. package/dist/analytics/codex/classifier.d.ts +28 -0
  45. package/dist/analytics/codex/classifier.d.ts.map +1 -0
  46. package/dist/analytics/codex/classifier.js +111 -0
  47. package/dist/analytics/codex/classifier.js.map +1 -0
  48. package/dist/analytics/codex/emit.d.ts +47 -0
  49. package/dist/analytics/codex/emit.d.ts.map +1 -0
  50. package/dist/analytics/codex/emit.js +158 -0
  51. package/dist/analytics/codex/emit.js.map +1 -0
  52. package/dist/analytics/codex/events-emit.d.ts +62 -0
  53. package/dist/analytics/codex/events-emit.d.ts.map +1 -0
  54. package/dist/analytics/codex/events-emit.js +555 -0
  55. package/dist/analytics/codex/events-emit.js.map +1 -0
  56. package/dist/analytics/codex/pricing.d.ts +57 -0
  57. package/dist/analytics/codex/pricing.d.ts.map +1 -0
  58. package/dist/analytics/codex/pricing.js +125 -0
  59. package/dist/analytics/codex/pricing.js.map +1 -0
  60. package/dist/analytics/codex/projection.d.ts +51 -0
  61. package/dist/analytics/codex/projection.d.ts.map +1 -0
  62. package/dist/analytics/codex/projection.js +1477 -0
  63. package/dist/analytics/codex/projection.js.map +1 -0
  64. package/dist/analytics/codex/spawn.d.ts +27 -0
  65. package/dist/analytics/codex/spawn.d.ts.map +1 -0
  66. package/dist/analytics/codex/spawn.js +64 -0
  67. package/dist/analytics/codex/spawn.js.map +1 -0
  68. package/dist/analytics/codex/status-snapshot.d.ts +80 -0
  69. package/dist/analytics/codex/status-snapshot.d.ts.map +1 -0
  70. package/dist/analytics/codex/status-snapshot.js +206 -0
  71. package/dist/analytics/codex/status-snapshot.js.map +1 -0
  72. package/dist/analytics/codex/transcript.d.ts +51 -0
  73. package/dist/analytics/codex/transcript.d.ts.map +1 -0
  74. package/dist/analytics/codex/transcript.js +134 -0
  75. package/dist/analytics/codex/transcript.js.map +1 -0
  76. package/dist/analytics/codex/types.d.ts +253 -0
  77. package/dist/analytics/codex/types.d.ts.map +1 -0
  78. package/dist/analytics/codex/types.js +29 -0
  79. package/dist/analytics/codex/types.js.map +1 -0
  80. package/dist/analytics/shared/classifier.d.ts.map +1 -0
  81. package/dist/analytics/{classifier.js → shared/classifier.js} +9 -0
  82. package/dist/analytics/shared/classifier.js.map +1 -0
  83. package/dist/analytics/shared/errors.d.ts.map +1 -0
  84. package/dist/analytics/shared/errors.js.map +1 -0
  85. package/dist/analytics/shared/tokens.d.ts +14 -0
  86. package/dist/analytics/shared/tokens.d.ts.map +1 -0
  87. package/dist/analytics/shared/tokens.js +17 -0
  88. package/dist/analytics/shared/tokens.js.map +1 -0
  89. package/dist/analytics/{types.d.ts → shared/types.d.ts} +42 -9
  90. package/dist/analytics/shared/types.d.ts.map +1 -0
  91. package/dist/analytics/shared/types.js.map +1 -0
  92. package/dist/clients/base.d.ts +26 -4
  93. package/dist/clients/base.d.ts.map +1 -1
  94. package/dist/clients/claude/hooks/activity-end.js +1 -1
  95. package/dist/clients/claude/hooks/activity-end.js.map +1 -1
  96. package/dist/clients/claude/hooks/activity-start.js +1 -1
  97. package/dist/clients/claude/hooks/activity-start.js.map +1 -1
  98. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  99. package/dist/clients/claude/hooks/clear-verdict.js +20 -1
  100. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  101. package/dist/clients/claude/hooks/require-verdict.d.ts +8 -1
  102. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  103. package/dist/clients/claude/hooks/require-verdict.js +9 -2
  104. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  105. package/dist/clients/claude/hooks/require-verification.d.ts +10 -1
  106. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  107. package/dist/clients/claude/hooks/require-verification.js +34 -6
  108. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  109. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  110. package/dist/clients/claude/hooks/session-end.js +7 -1
  111. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  112. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  113. package/dist/clients/claude/hooks/session-start.js +7 -1
  114. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  115. package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
  116. package/dist/clients/claude/hooks/session-status.js +13 -9
  117. package/dist/clients/claude/hooks/session-status.js.map +1 -1
  118. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  119. package/dist/clients/claude/hooks/track-action.js +26 -1
  120. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  121. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  122. package/dist/clients/claude/hooks/verify-gate.js +8 -1
  123. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  124. package/dist/clients/claude/index.d.ts +7 -2
  125. package/dist/clients/claude/index.d.ts.map +1 -1
  126. package/dist/clients/claude/index.js +72 -32
  127. package/dist/clients/claude/index.js.map +1 -1
  128. package/dist/clients/claude/util.d.ts.map +1 -1
  129. package/dist/clients/claude/util.js +55 -0
  130. package/dist/clients/claude/util.js.map +1 -1
  131. package/dist/clients/codex/commands/ironbee-verify/SKILL.md +58 -0
  132. package/dist/clients/codex/hooks/activity-end.d.ts +9 -0
  133. package/dist/clients/codex/hooks/activity-end.d.ts.map +1 -0
  134. package/dist/clients/codex/hooks/activity-end.js +65 -0
  135. package/dist/clients/codex/hooks/activity-end.js.map +1 -0
  136. package/dist/clients/codex/hooks/activity-start.d.ts +17 -0
  137. package/dist/clients/codex/hooks/activity-start.d.ts.map +1 -0
  138. package/dist/clients/codex/hooks/activity-start.js +38 -0
  139. package/dist/clients/codex/hooks/activity-start.js.map +1 -0
  140. package/dist/clients/codex/hooks/clear-verdict.d.ts +55 -0
  141. package/dist/clients/codex/hooks/clear-verdict.d.ts.map +1 -0
  142. package/dist/clients/codex/hooks/clear-verdict.js +303 -0
  143. package/dist/clients/codex/hooks/clear-verdict.js.map +1 -0
  144. package/dist/clients/codex/hooks/require-verdict.d.ts +36 -0
  145. package/dist/clients/codex/hooks/require-verdict.d.ts.map +1 -0
  146. package/dist/clients/codex/hooks/require-verdict.js +115 -0
  147. package/dist/clients/codex/hooks/require-verdict.js.map +1 -0
  148. package/dist/clients/codex/hooks/require-verification.d.ts +20 -0
  149. package/dist/clients/codex/hooks/require-verification.d.ts.map +1 -0
  150. package/dist/clients/codex/hooks/require-verification.js +156 -0
  151. package/dist/clients/codex/hooks/require-verification.js.map +1 -0
  152. package/dist/clients/codex/hooks/session-start.d.ts +10 -0
  153. package/dist/clients/codex/hooks/session-start.d.ts.map +1 -0
  154. package/dist/clients/codex/hooks/session-start.js +94 -0
  155. package/dist/clients/codex/hooks/session-start.js.map +1 -0
  156. package/dist/clients/codex/hooks/track-action-monitor.d.ts +10 -0
  157. package/dist/clients/codex/hooks/track-action-monitor.d.ts.map +1 -0
  158. package/dist/clients/codex/hooks/track-action-monitor.js +168 -0
  159. package/dist/clients/codex/hooks/track-action-monitor.js.map +1 -0
  160. package/dist/clients/codex/hooks/track-action-pre.d.ts +18 -0
  161. package/dist/clients/codex/hooks/track-action-pre.d.ts.map +1 -0
  162. package/dist/clients/codex/hooks/track-action-pre.js +35 -0
  163. package/dist/clients/codex/hooks/track-action-pre.js.map +1 -0
  164. package/dist/clients/codex/hooks/track-action.d.ts +22 -0
  165. package/dist/clients/codex/hooks/track-action.d.ts.map +1 -0
  166. package/dist/clients/codex/hooks/track-action.js +350 -0
  167. package/dist/clients/codex/hooks/track-action.js.map +1 -0
  168. package/dist/clients/codex/hooks/verify-gate.d.ts +15 -0
  169. package/dist/clients/codex/hooks/verify-gate.d.ts.map +1 -0
  170. package/dist/clients/codex/hooks/verify-gate.js +105 -0
  171. package/dist/clients/codex/hooks/verify-gate.js.map +1 -0
  172. package/dist/clients/codex/index.d.ts +52 -0
  173. package/dist/clients/codex/index.d.ts.map +1 -0
  174. package/dist/clients/codex/index.js +463 -0
  175. package/dist/clients/codex/index.js.map +1 -0
  176. package/dist/clients/codex/platforms/command-verify.backend.md +108 -0
  177. package/dist/clients/codex/platforms/command-verify.browser.md +108 -0
  178. package/dist/clients/codex/platforms/command-verify.node.md +61 -0
  179. package/dist/clients/codex/platforms/rule.backend.md +32 -0
  180. package/dist/clients/codex/platforms/rule.browser.md +17 -0
  181. package/dist/clients/codex/platforms/rule.node.md +28 -0
  182. package/dist/clients/codex/platforms/skill.backend.md +95 -0
  183. package/dist/clients/codex/platforms/skill.browser.md +28 -0
  184. package/dist/clients/codex/platforms/skill.node.md +62 -0
  185. package/dist/clients/codex/rules/ironbee-verification.md +48 -0
  186. package/dist/clients/codex/skills/ironbee-verification.md +80 -0
  187. package/dist/clients/codex/util.d.ts +193 -0
  188. package/dist/clients/codex/util.d.ts.map +1 -0
  189. package/dist/clients/codex/util.js +784 -0
  190. package/dist/clients/codex/util.js.map +1 -0
  191. package/dist/clients/cursor/hooks/activity-end.js +1 -1
  192. package/dist/clients/cursor/hooks/activity-end.js.map +1 -1
  193. package/dist/clients/cursor/hooks/clear-verdict.d.ts +5 -2
  194. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
  195. package/dist/clients/cursor/hooks/clear-verdict.js +16 -4
  196. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
  197. package/dist/clients/cursor/hooks/require-verdict.d.ts +7 -1
  198. package/dist/clients/cursor/hooks/require-verdict.d.ts.map +1 -1
  199. package/dist/clients/cursor/hooks/require-verdict.js +8 -2
  200. package/dist/clients/cursor/hooks/require-verdict.js.map +1 -1
  201. package/dist/clients/cursor/hooks/require-verification.d.ts +8 -1
  202. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  203. package/dist/clients/cursor/hooks/require-verification.js +27 -6
  204. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  205. package/dist/clients/cursor/hooks/session-end.js +1 -1
  206. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  207. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  208. package/dist/clients/cursor/hooks/verify-gate.js +6 -1
  209. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  210. package/dist/clients/cursor/index.d.ts +7 -2
  211. package/dist/clients/cursor/index.d.ts.map +1 -1
  212. package/dist/clients/cursor/index.js +69 -30
  213. package/dist/clients/cursor/index.js.map +1 -1
  214. package/dist/clients/registry.d.ts.map +1 -1
  215. package/dist/clients/registry.js +2 -1
  216. package/dist/clients/registry.js.map +1 -1
  217. package/dist/commands/{claude.d.ts → claude/index.d.ts} +1 -1
  218. package/dist/commands/claude/index.d.ts.map +1 -0
  219. package/dist/commands/{claude.js → claude/index.js} +12 -6
  220. package/dist/commands/claude/index.js.map +1 -0
  221. package/dist/commands/{otel.d.ts → claude/otel.d.ts} +5 -1
  222. package/dist/commands/claude/otel.d.ts.map +1 -0
  223. package/dist/commands/{otel.js → claude/otel.js} +9 -5
  224. package/dist/commands/claude/otel.js.map +1 -0
  225. package/dist/commands/claude/process-analytics.d.ts +19 -0
  226. package/dist/commands/claude/process-analytics.d.ts.map +1 -0
  227. package/dist/commands/{process-analytics.js → claude/process-analytics.js} +16 -15
  228. package/dist/commands/claude/process-analytics.js.map +1 -0
  229. package/dist/commands/{statusline-toggle.d.ts → claude/statusline-toggle.d.ts} +2 -2
  230. package/dist/commands/claude/statusline-toggle.d.ts.map +1 -0
  231. package/dist/commands/{statusline-toggle.js → claude/statusline-toggle.js} +8 -8
  232. package/dist/commands/claude/statusline-toggle.js.map +1 -0
  233. package/dist/commands/{statusline.d.ts → claude/statusline.d.ts} +1 -1
  234. package/dist/commands/claude/statusline.d.ts.map +1 -0
  235. package/dist/commands/{statusline.js → claude/statusline.js} +4 -4
  236. package/dist/commands/claude/statusline.js.map +1 -0
  237. package/dist/commands/codex/index.d.ts +11 -0
  238. package/dist/commands/codex/index.d.ts.map +1 -0
  239. package/dist/commands/codex/index.js +17 -0
  240. package/dist/commands/codex/index.js.map +1 -0
  241. package/dist/commands/codex/process-analytics.d.ts +14 -0
  242. package/dist/commands/codex/process-analytics.d.ts.map +1 -0
  243. package/dist/commands/codex/process-analytics.js +111 -0
  244. package/dist/commands/codex/process-analytics.js.map +1 -0
  245. package/dist/commands/hook.js +16 -2
  246. package/dist/commands/hook.js.map +1 -1
  247. package/dist/commands/import.js +3 -3
  248. package/dist/commands/import.js.map +1 -1
  249. package/dist/commands/queue.js +3 -1
  250. package/dist/commands/queue.js.map +1 -1
  251. package/dist/commands/verification-toggle.d.ts +19 -0
  252. package/dist/commands/verification-toggle.d.ts.map +1 -1
  253. package/dist/commands/verification-toggle.js +88 -5
  254. package/dist/commands/verification-toggle.js.map +1 -1
  255. package/dist/commands/verification.d.ts +3 -0
  256. package/dist/commands/verification.d.ts.map +1 -1
  257. package/dist/commands/verification.js +34 -3
  258. package/dist/commands/verification.js.map +1 -1
  259. package/dist/hooks/core/actions.d.ts +17 -1
  260. package/dist/hooks/core/actions.d.ts.map +1 -1
  261. package/dist/hooks/core/actions.js +13 -0
  262. package/dist/hooks/core/actions.js.map +1 -1
  263. package/dist/hooks/core/activity-end.d.ts +8 -0
  264. package/dist/hooks/core/activity-end.d.ts.map +1 -1
  265. package/dist/hooks/core/activity-end.js +19 -0
  266. package/dist/hooks/core/activity-end.js.map +1 -1
  267. package/dist/hooks/core/session-state.d.ts +15 -1
  268. package/dist/hooks/core/session-state.d.ts.map +1 -1
  269. package/dist/hooks/core/session-state.js +102 -7
  270. package/dist/hooks/core/session-state.js.map +1 -1
  271. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  272. package/dist/hooks/core/submit-verdict.js +29 -17
  273. package/dist/hooks/core/submit-verdict.js.map +1 -1
  274. package/dist/hooks/core/verification-lifecycle.d.ts +20 -0
  275. package/dist/hooks/core/verification-lifecycle.d.ts.map +1 -1
  276. package/dist/hooks/core/verification-lifecycle.js +41 -0
  277. package/dist/hooks/core/verification-lifecycle.js.map +1 -1
  278. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  279. package/dist/hooks/core/verify-gate.js +11 -5
  280. package/dist/hooks/core/verify-gate.js.map +1 -1
  281. package/dist/import/claude/analytics-runner.d.ts +1 -1
  282. package/dist/import/claude/analytics-runner.d.ts.map +1 -1
  283. package/dist/import/claude/analytics-runner.js +5 -5
  284. package/dist/import/claude/analytics-runner.js.map +1 -1
  285. package/dist/import/claude/auth-mode.d.ts +1 -1
  286. package/dist/import/claude/auth-mode.d.ts.map +1 -1
  287. package/dist/import/claude/discovery.js +1 -1
  288. package/dist/import/claude/discovery.js.map +1 -1
  289. package/dist/import/claude/encoding.js +1 -1
  290. package/dist/import/claude/encoding.js.map +1 -1
  291. package/dist/import/claude/events/file-change.d.ts +10 -1
  292. package/dist/import/claude/events/file-change.d.ts.map +1 -1
  293. package/dist/import/claude/events/file-change.js +79 -5
  294. package/dist/import/claude/events/file-change.js.map +1 -1
  295. package/dist/import/claude/events/tool-call.d.ts +16 -1
  296. package/dist/import/claude/events/tool-call.d.ts.map +1 -1
  297. package/dist/import/claude/events/tool-call.js +122 -15
  298. package/dist/import/claude/events/tool-call.js.map +1 -1
  299. package/dist/import/claude/runner.d.ts.map +1 -1
  300. package/dist/import/claude/runner.js +45 -3
  301. package/dist/import/claude/runner.js.map +1 -1
  302. package/dist/import/claude/summary.js +1 -1
  303. package/dist/import/claude/summary.js.map +1 -1
  304. package/dist/import/claude/transcript-walk.d.ts +1 -1
  305. package/dist/import/claude/transcript-walk.d.ts.map +1 -1
  306. package/dist/import/claude/transcript-walk.js +11 -4
  307. package/dist/import/claude/transcript-walk.js.map +1 -1
  308. package/dist/import/codex/analytics-runner.d.ts +46 -0
  309. package/dist/import/codex/analytics-runner.d.ts.map +1 -0
  310. package/dist/import/codex/analytics-runner.js +116 -0
  311. package/dist/import/codex/analytics-runner.js.map +1 -0
  312. package/dist/import/codex/discovery.d.ts +33 -0
  313. package/dist/import/codex/discovery.d.ts.map +1 -0
  314. package/dist/import/codex/discovery.js +202 -0
  315. package/dist/import/codex/discovery.js.map +1 -0
  316. package/dist/import/codex/events/file-change.d.ts +42 -0
  317. package/dist/import/codex/events/file-change.d.ts.map +1 -0
  318. package/dist/import/codex/events/file-change.js +125 -0
  319. package/dist/import/codex/events/file-change.js.map +1 -0
  320. package/dist/import/codex/events/tool-call.d.ts +49 -0
  321. package/dist/import/codex/events/tool-call.d.ts.map +1 -0
  322. package/dist/import/codex/events/tool-call.js +151 -0
  323. package/dist/import/codex/events/tool-call.js.map +1 -0
  324. package/dist/import/codex/runner.d.ts +34 -0
  325. package/dist/import/codex/runner.d.ts.map +1 -0
  326. package/dist/import/codex/runner.js +456 -0
  327. package/dist/import/codex/runner.js.map +1 -0
  328. package/dist/import/codex/summary.d.ts +20 -0
  329. package/dist/import/codex/summary.d.ts.map +1 -0
  330. package/dist/import/codex/summary.js +206 -0
  331. package/dist/import/codex/summary.js.map +1 -0
  332. package/dist/import/events/activity.d.ts.map +1 -1
  333. package/dist/import/events/activity.js +17 -2
  334. package/dist/import/events/activity.js.map +1 -1
  335. package/dist/import/events/session.d.ts +11 -1
  336. package/dist/import/events/session.d.ts.map +1 -1
  337. package/dist/import/events/session.js +19 -1
  338. package/dist/import/events/session.js.map +1 -1
  339. package/dist/import/ids.js +3 -3
  340. package/dist/import/ids.js.map +1 -1
  341. package/dist/import/pipeline.d.ts +22 -15
  342. package/dist/import/pipeline.d.ts.map +1 -1
  343. package/dist/import/pipeline.js +99 -18
  344. package/dist/import/pipeline.js.map +1 -1
  345. package/dist/import/types.d.ts +4 -0
  346. package/dist/import/types.d.ts.map +1 -1
  347. package/dist/import/types.js.map +1 -1
  348. package/dist/index.js +9 -11
  349. package/dist/index.js.map +1 -1
  350. package/dist/lib/collector.d.ts +2 -1
  351. package/dist/lib/collector.d.ts.map +1 -1
  352. package/dist/lib/collector.js +28 -3
  353. package/dist/lib/collector.js.map +1 -1
  354. package/dist/lib/config.d.ts +40 -0
  355. package/dist/lib/config.d.ts.map +1 -1
  356. package/dist/lib/config.js +52 -1
  357. package/dist/lib/config.js.map +1 -1
  358. package/dist/lib/event.d.ts +18 -1
  359. package/dist/lib/event.d.ts.map +1 -1
  360. package/dist/lib/event.js +25 -1
  361. package/dist/lib/event.js.map +1 -1
  362. package/dist/lib/platform-section.d.ts.map +1 -1
  363. package/dist/lib/platform-section.js +8 -0
  364. package/dist/lib/platform-section.js.map +1 -1
  365. package/dist/otel/{context → claude/context}/build.d.ts +1 -1
  366. package/dist/otel/claude/context/build.d.ts.map +1 -0
  367. package/dist/otel/{context → claude/context}/build.js +3 -7
  368. package/dist/otel/claude/context/build.js.map +1 -0
  369. package/dist/otel/claude/context/classify.d.ts.map +1 -0
  370. package/dist/otel/claude/context/classify.js.map +1 -0
  371. package/dist/otel/{context → claude/context}/extract.d.ts +1 -1
  372. package/dist/otel/claude/context/extract.d.ts.map +1 -0
  373. package/dist/otel/claude/context/extract.js.map +1 -0
  374. package/dist/otel/claude/context/markers.d.ts.map +1 -0
  375. package/dist/otel/{context → claude/context}/markers.js +22 -3
  376. package/dist/otel/claude/context/markers.js.map +1 -0
  377. package/dist/otel/claude/context/util.d.ts.map +1 -0
  378. package/dist/otel/claude/context/util.js.map +1 -0
  379. package/dist/otel/{daemon → claude/daemon}/ensure.d.ts +1 -1
  380. package/dist/otel/claude/daemon/ensure.d.ts.map +1 -0
  381. package/dist/otel/{daemon → claude/daemon}/ensure.js +6 -6
  382. package/dist/otel/claude/daemon/ensure.js.map +1 -0
  383. package/dist/otel/{daemon → claude/daemon}/forward.d.ts +1 -1
  384. package/dist/otel/claude/daemon/forward.d.ts.map +1 -0
  385. package/dist/otel/{daemon → claude/daemon}/forward.js +0 -0
  386. package/dist/otel/claude/daemon/forward.js.map +1 -0
  387. package/dist/otel/claude/daemon/paths.d.ts.map +1 -0
  388. package/dist/otel/claude/daemon/paths.js.map +1 -0
  389. package/dist/otel/{daemon → claude/daemon}/process.d.ts +1 -1
  390. package/dist/otel/claude/daemon/process.d.ts.map +1 -0
  391. package/dist/otel/{daemon → claude/daemon}/process.js +1 -1
  392. package/dist/otel/claude/daemon/process.js.map +1 -0
  393. package/dist/otel/claude/daemon/reprocess.d.ts.map +1 -0
  394. package/dist/otel/{daemon → claude/daemon}/reprocess.js +2 -2
  395. package/dist/otel/claude/daemon/reprocess.js.map +1 -0
  396. package/dist/otel/claude/log-handler.d.ts.map +1 -0
  397. package/dist/otel/{log-handler.js → claude/log-handler.js} +1 -1
  398. package/dist/otel/claude/log-handler.js.map +1 -0
  399. package/dist/otel/collector.js +4 -4
  400. package/dist/otel/collector.js.map +1 -1
  401. package/dist/queue/flush.d.ts +23 -0
  402. package/dist/queue/flush.d.ts.map +1 -1
  403. package/dist/queue/flush.js +44 -0
  404. package/dist/queue/flush.js.map +1 -1
  405. package/dist/queue/handlers/send-event.d.ts.map +1 -1
  406. package/dist/queue/handlers/send-event.js +5 -4
  407. package/dist/queue/handlers/send-event.js.map +1 -1
  408. package/dist/queue/index.d.ts +2 -2
  409. package/dist/queue/index.d.ts.map +1 -1
  410. package/dist/queue/index.js +4 -1
  411. package/dist/queue/index.js.map +1 -1
  412. package/dist/queue/spawn.d.ts +20 -0
  413. package/dist/queue/spawn.d.ts.map +1 -1
  414. package/dist/queue/spawn.js +37 -0
  415. package/dist/queue/spawn.js.map +1 -1
  416. package/dist/tui/config/schema.d.ts.map +1 -1
  417. package/dist/tui/config/schema.js +8 -0
  418. package/dist/tui/config/schema.js.map +1 -1
  419. package/dist/tui/import/area.js +3 -3
  420. package/dist/tui/import/area.js.map +1 -1
  421. package/package.json +2 -1
  422. package/dist/analytics/classifier.d.ts.map +0 -1
  423. package/dist/analytics/classifier.js.map +0 -1
  424. package/dist/analytics/emit.d.ts.map +0 -1
  425. package/dist/analytics/emit.js.map +0 -1
  426. package/dist/analytics/errors.d.ts.map +0 -1
  427. package/dist/analytics/errors.js.map +0 -1
  428. package/dist/analytics/hook-trigger.d.ts.map +0 -1
  429. package/dist/analytics/hook-trigger.js.map +0 -1
  430. package/dist/analytics/log.d.ts.map +0 -1
  431. package/dist/analytics/log.js.map +0 -1
  432. package/dist/analytics/merge.d.ts.map +0 -1
  433. package/dist/analytics/merge.js.map +0 -1
  434. package/dist/analytics/pricing.d.ts.map +0 -1
  435. package/dist/analytics/pricing.js.map +0 -1
  436. package/dist/analytics/projection.d.ts.map +0 -1
  437. package/dist/analytics/projection.js.map +0 -1
  438. package/dist/analytics/spawn.d.ts.map +0 -1
  439. package/dist/analytics/spawn.js.map +0 -1
  440. package/dist/analytics/state.d.ts.map +0 -1
  441. package/dist/analytics/state.js.map +0 -1
  442. package/dist/analytics/transcript.d.ts.map +0 -1
  443. package/dist/analytics/transcript.js.map +0 -1
  444. package/dist/analytics/types.d.ts.map +0 -1
  445. package/dist/analytics/types.js.map +0 -1
  446. package/dist/commands/claude.d.ts.map +0 -1
  447. package/dist/commands/claude.js.map +0 -1
  448. package/dist/commands/otel.d.ts.map +0 -1
  449. package/dist/commands/otel.js.map +0 -1
  450. package/dist/commands/process-analytics.d.ts +0 -18
  451. package/dist/commands/process-analytics.d.ts.map +0 -1
  452. package/dist/commands/process-analytics.js.map +0 -1
  453. package/dist/commands/statusline-toggle.d.ts.map +0 -1
  454. package/dist/commands/statusline-toggle.js.map +0 -1
  455. package/dist/commands/statusline.d.ts.map +0 -1
  456. package/dist/commands/statusline.js.map +0 -1
  457. package/dist/otel/context/build.d.ts.map +0 -1
  458. package/dist/otel/context/build.js.map +0 -1
  459. package/dist/otel/context/classify.d.ts.map +0 -1
  460. package/dist/otel/context/classify.js.map +0 -1
  461. package/dist/otel/context/extract.d.ts.map +0 -1
  462. package/dist/otel/context/extract.js.map +0 -1
  463. package/dist/otel/context/markers.d.ts.map +0 -1
  464. package/dist/otel/context/markers.js.map +0 -1
  465. package/dist/otel/context/util.d.ts.map +0 -1
  466. package/dist/otel/context/util.js.map +0 -1
  467. package/dist/otel/daemon/ensure.d.ts.map +0 -1
  468. package/dist/otel/daemon/ensure.js.map +0 -1
  469. package/dist/otel/daemon/forward.d.ts.map +0 -1
  470. package/dist/otel/daemon/forward.js.map +0 -1
  471. package/dist/otel/daemon/paths.d.ts.map +0 -1
  472. package/dist/otel/daemon/paths.js.map +0 -1
  473. package/dist/otel/daemon/process.d.ts.map +0 -1
  474. package/dist/otel/daemon/process.js.map +0 -1
  475. package/dist/otel/daemon/reprocess.d.ts.map +0 -1
  476. package/dist/otel/daemon/reprocess.js.map +0 -1
  477. package/dist/otel/log-handler.d.ts.map +0 -1
  478. package/dist/otel/log-handler.js.map +0 -1
  479. /package/dist/analytics/{log.d.ts → claude/log.d.ts} +0 -0
  480. /package/dist/analytics/{transcript.d.ts → claude/transcript.d.ts} +0 -0
  481. /package/dist/analytics/{classifier.d.ts → shared/classifier.d.ts} +0 -0
  482. /package/dist/analytics/{errors.d.ts → shared/errors.d.ts} +0 -0
  483. /package/dist/analytics/{errors.js → shared/errors.js} +0 -0
  484. /package/dist/analytics/{types.js → shared/types.js} +0 -0
  485. /package/dist/otel/{context → claude/context}/classify.d.ts +0 -0
  486. /package/dist/otel/{context → claude/context}/classify.js +0 -0
  487. /package/dist/otel/{context → claude/context}/extract.js +0 -0
  488. /package/dist/otel/{context → claude/context}/markers.d.ts +0 -0
  489. /package/dist/otel/{context → claude/context}/util.d.ts +0 -0
  490. /package/dist/otel/{context → claude/context}/util.js +0 -0
  491. /package/dist/otel/{daemon → claude/daemon}/paths.d.ts +0 -0
  492. /package/dist/otel/{daemon → claude/daemon}/paths.js +0 -0
  493. /package/dist/otel/{daemon → claude/daemon}/reprocess.d.ts +0 -0
  494. /package/dist/otel/{log-handler.d.ts → claude/log-handler.d.ts} +0 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * Codex — PreToolUse hook adapter (matcher: `mcp__.*-devtools__.*`)
4
+ *
5
+ * Blocks devtools tool usage when no verification cycle is active.
6
+ * When allowed, injects `_metadata` into tool_input via Codex's
7
+ * `updatedInput` + **`permissionDecision: "allow"`** (the latter is
8
+ * REQUIRED — without it Codex silently drops the rewrite).
9
+ *
10
+ * Returns `permissionDecision: "deny"` (exit 2-equivalent) when blocked.
11
+ *
12
+ * **Soft mode** (`opts.soft`, assist mode — `verification.auto: false`):
13
+ * never denies. The no-cycle + recording-required blocks are skipped; the hook
14
+ * only injects `_metadata` (still with `permissionDecision: "allow"`, required
15
+ * for Codex to honor the rewrite). `verificationId` / `traceId` ride along only
16
+ * when a cycle is active (manual `$ironbee-verify`).
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.run = run;
20
+ const crypto_1 = require("crypto");
21
+ const activity_1 = require("../../../hooks/core/activity");
22
+ const session_state_1 = require("../../../hooks/core/session-state");
23
+ const actions_1 = require("../../../hooks/core/actions");
24
+ const verification_lifecycle_1 = require("../../../hooks/core/verification-lifecycle");
25
+ const config_1 = require("../../../lib/config");
26
+ const logger_1 = require("../../../lib/logger");
27
+ const stdin_1 = require("../../../lib/stdin");
28
+ const util_1 = require("../util");
29
+ async function run(projectDir, opts) {
30
+ const soft = opts?.soft === true;
31
+ const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
32
+ const sessionId = input.session_id ?? "default";
33
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
34
+ const actionsFile = `${sessionDir}/actions.jsonl`;
35
+ (0, logger_1.setLogFile)(`${sessionDir}/session.log`);
36
+ const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
37
+ // Soft mode (assist) never denies — it only injects metadata.
38
+ if (!verificationId && !soft) {
39
+ const reason = `BLOCKED: You must start a verification cycle before using devtools tools.
40
+
41
+ Start verification first:
42
+ echo '{"session_id":"${sessionId}"}' | ironbee hook verification-start
43
+
44
+ Then use the verification tools for the active cycle(s) — mcp__browser-devtools__bdt_* for browser, mcp__node-devtools__ndt_* for node, mcp__backend-devtools__bedt_* for backend.`;
45
+ process.stdout.write(JSON.stringify({
46
+ hookSpecificOutput: {
47
+ hookEventName: "PreToolUse",
48
+ permissionDecision: "deny",
49
+ permissionDecisionReason: reason,
50
+ },
51
+ }));
52
+ process.exit(0);
53
+ return;
54
+ }
55
+ // Recording enforcement is browser-only.
56
+ const toolName = input.tool_name ?? "";
57
+ const mcpServer = (0, util_1.extractCodexMcpServer)(toolName);
58
+ const isBrowserDevToolsCall = mcpServer === "browser-devtools";
59
+ // Codex flattens `-` → `_` on hook dispatch — the raw tool_name is
60
+ // `mcp__browser_devtools__bdt_content_start_recording`. Canonicalize
61
+ // the bare tool segment before comparing against the documented
62
+ // hyphenated form. Without this, the recording-start tool blocks
63
+ // itself and the agent can never start recording (infinite loop:
64
+ // gate denies → agent retries → gate denies → …).
65
+ const bareToolName = isBrowserDevToolsCall
66
+ ? (0, util_1.canonicalizeCodexToolName)(toolName.split("__").pop() ?? "")
67
+ : "";
68
+ const isRecordingStartTool = bareToolName === "bdt_content_start-recording";
69
+ if (!soft &&
70
+ isBrowserDevToolsCall &&
71
+ (0, session_state_1.isRecordingRequired)(sessionDir) &&
72
+ !(0, session_state_1.isRecordingActive)(sessionDir) &&
73
+ !isRecordingStartTool) {
74
+ const reason = `BLOCKED: Recording is required but not started.
75
+
76
+ 1. Start recording NOW:
77
+ Use mcp__browser-devtools__bdt_content_start-recording
78
+
79
+ 2. Run the verification (navigate, screenshot, aria, console, etc.)
80
+
81
+ 3. **Stop recording BEFORE submitting verdict:**
82
+ Use mcp__browser-devtools__bdt_content_stop-recording
83
+ submit-verdict will reject with "recording is still active" if you skip this.`;
84
+ process.stdout.write(JSON.stringify({
85
+ hookSpecificOutput: {
86
+ hookEventName: "PreToolUse",
87
+ permissionDecision: "deny",
88
+ permissionDecisionReason: reason,
89
+ },
90
+ }));
91
+ process.exit(0);
92
+ return;
93
+ }
94
+ // ensure activity is open before reading its ID for metadata propagation
95
+ await (0, activity_1.startActivity)({ sessionDir, actionsFile, source: "pre_tool_use" });
96
+ // Assist auto-open: in soft mode open a verification cycle when none is
97
+ // active (instead of denying). See the Claude adapter for the rationale.
98
+ let effectiveVerificationId = verificationId;
99
+ if (soft && !effectiveVerificationId) {
100
+ const opened = await (0, verification_lifecycle_1.startVerification)({ sessionId, sessionDir, actionsFile, recordingEnabled: false });
101
+ effectiveVerificationId = opened.verificationId;
102
+ }
103
+ const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
104
+ const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
105
+ const projectName = (0, actions_1.resolveProjectName)(projectDir);
106
+ const traceStateParts = [`prj:${projectName}`, `sid:${sessionId}`];
107
+ if (activityId) {
108
+ traceStateParts.push(`aid:${activityId}`);
109
+ }
110
+ // Tag vid when a cycle is active (always, after the assist auto-open above).
111
+ if (effectiveVerificationId) {
112
+ traceStateParts.push(`vid:${effectiveVerificationId}`);
113
+ }
114
+ const traceState = `ironbee=${traceStateParts.join(";")}`;
115
+ const config = (0, config_1.loadConfig)(projectDir);
116
+ // tool_input is Record<string,unknown> | string | undefined; for MCP devtools
117
+ // matcher-routed tools it's always a Record (no custom_tool_call MCPs).
118
+ const baseInput = (input.tool_input && typeof input.tool_input === "object")
119
+ ? input.tool_input
120
+ : {};
121
+ const updatedInput = { ...baseInput };
122
+ const metadata = {
123
+ projectName,
124
+ sessionId,
125
+ activityId,
126
+ verificationId: effectiveVerificationId,
127
+ traceId,
128
+ traceState,
129
+ toolCallId: (0, crypto_1.randomUUID)(),
130
+ };
131
+ if (input.tool_use_id) {
132
+ metadata.toolUseId = input.tool_use_id;
133
+ }
134
+ metadata.mcpServer = mcpServer ?? "browser-devtools";
135
+ const userEmail = (0, session_state_1.getUserEmail)(sessionDir);
136
+ if (userEmail) {
137
+ metadata.userEmail = userEmail;
138
+ }
139
+ if (config.collector?.url) {
140
+ metadata.collectorUrl = config.collector.url;
141
+ }
142
+ if (config.collector?.apiKey) {
143
+ metadata.collectorApiKey = config.collector.apiKey;
144
+ }
145
+ updatedInput._metadata = metadata;
146
+ process.stdout.write(JSON.stringify({
147
+ hookSpecificOutput: {
148
+ hookEventName: "PreToolUse",
149
+ permissionDecision: "allow",
150
+ updatedInput,
151
+ },
152
+ }));
153
+ logger_1.logger.debug(`require-verification: allowed ${toolName} with _metadata`);
154
+ process.exit(0);
155
+ }
156
+ //# sourceMappingURL=require-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-verification.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/require-verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Codex — SessionStart hook adapter
3
+ *
4
+ * Appends a `session_start` entry to actions.jsonl, populates session-state
5
+ * with auth info from `~/.codex/auth.json` (cleaner than Claude — explicit
6
+ * `auth_mode` enum vs JWT decode), then runs the standard reconcile pass to
7
+ * close any abandoned cycles from a prior session.
8
+ */
9
+ export declare function run(projectDir: string): Promise<void>;
10
+ //# sourceMappingURL=session-start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/session-start.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E3D"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * Codex — SessionStart hook adapter
4
+ *
5
+ * Appends a `session_start` entry to actions.jsonl, populates session-state
6
+ * with auth info from `~/.codex/auth.json` (cleaner than Claude — explicit
7
+ * `auth_mode` enum vs JWT decode), then runs the standard reconcile pass to
8
+ * close any abandoned cycles from a prior session.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.run = run;
12
+ const actions_1 = require("../../../hooks/core/actions");
13
+ const ids_1 = require("../../../import/ids");
14
+ const session_state_1 = require("../../../hooks/core/session-state");
15
+ const config_1 = require("../../../lib/config");
16
+ const logger_1 = require("../../../lib/logger");
17
+ const output_1 = require("../../../lib/output");
18
+ const stdin_1 = require("../../../lib/stdin");
19
+ const telemetry_1 = require("../../../lib/telemetry");
20
+ const util_1 = require("../util");
21
+ async function run(projectDir) {
22
+ const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
23
+ const sessionId = input.session_id ?? "default";
24
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
25
+ const actionsFile = `${sessionDir}/actions.jsonl`;
26
+ (0, logger_1.setLogFile)(`${sessionDir}/session.log`);
27
+ const usage = (0, util_1.resolveCodexUsage)();
28
+ if (usage.userEmail) {
29
+ (0, session_state_1.setUserEmail)(sessionDir, usage.userEmail);
30
+ }
31
+ (0, session_state_1.setUsage)(sessionDir, {
32
+ usage_type: usage.usageType ?? null,
33
+ usage_plan: usage.usagePlan ?? null,
34
+ });
35
+ const entry = {
36
+ ...(0, actions_1.baseFields)(actionsFile),
37
+ // Deterministic event.id — matches import's `deriveSessionStartEventId`.
38
+ // Without this override, live's random UUID + import's deterministic
39
+ // id never collide on `(session_id, id)` → re-import after live
40
+ // produces duplicate session_start rows.
41
+ id: (0, ids_1.deriveSessionStartEventId)(sessionId),
42
+ type: "session_start",
43
+ timestamp: Date.now(),
44
+ session_id: sessionId,
45
+ client: "codex",
46
+ source: input.source ?? "startup",
47
+ };
48
+ await (0, actions_1.appendAction)(actionsFile, entry);
49
+ await (0, session_state_1.reconcileSessionState)(sessionDir, actionsFile, actions_1.appendAction);
50
+ const verificationEnabled = (0, config_1.getVerificationEnabled)((0, config_1.loadConfig)(projectDir));
51
+ await (0, telemetry_1.trackSessionStart)("codex", sessionId, verificationEnabled, projectDir);
52
+ logger_1.logger.debug(`session-start: ${sessionId}`);
53
+ // Codex SessionStart accepts `additionalContext` in hookSpecificOutput
54
+ // for injecting into agent context. In monitoring mode we ship nothing.
55
+ if (!verificationEnabled) {
56
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
57
+ return;
58
+ }
59
+ const verdictPass = JSON.stringify({
60
+ session_id: sessionId,
61
+ status: "pass",
62
+ checks: ["form submits successfully", "new item appears in list"],
63
+ });
64
+ const verdictFail = JSON.stringify({
65
+ session_id: sessionId,
66
+ status: "fail",
67
+ checks: ["form renders", "submit button unresponsive"],
68
+ issues: ["button click handler not firing", "TypeError in console"],
69
+ });
70
+ const context = `IRONBEE VERIFICATION — SESSION ACTIVE
71
+ Session ID: ${sessionId}
72
+
73
+ You MUST verify all code changes in the browser before completing any task.
74
+ After EVERY verification attempt, you MUST submit a verdict BEFORE doing anything else.
75
+ - If pass → submit pass verdict
76
+ - If fail → submit fail verdict FIRST, then fix. Do NOT skip to fixing code without submitting.
77
+
78
+ Submit via shell:
79
+ echo '${verdictPass}' | ironbee hook submit-verdict
80
+
81
+ On fail (issues is required):
82
+ echo '${verdictFail}' | ironbee hook submit-verdict
83
+
84
+ Required fields: session_id, status, checks
85
+ On fail, include: issues (array of strings describing what failed)
86
+ On pass after a previous fail, include: fixes (array of strings describing what was fixed)`;
87
+ (0, output_1.writeAndExit)(JSON.stringify({
88
+ hookSpecificOutput: {
89
+ hookEventName: "SessionStart",
90
+ additionalContext: context,
91
+ },
92
+ }), 0);
93
+ }
94
+ //# sourceMappingURL=session-start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/session-start.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Codex — PostToolUse hook adapter (monitoring-only mode, matcher: `.*`)
3
+ *
4
+ * Lean variant of track-action.ts for `verification.enable: false`. Submits
5
+ * a send_event job for every tool (no devtools-only path, no recording
6
+ * state, no actions.jsonl write for devtools). Also acts as activity-start
7
+ * fallback if no activity was opened yet.
8
+ */
9
+ export declare function run(projectDir: string): Promise<void>;
10
+ //# sourceMappingURL=track-action-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-action-monitor.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/track-action-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyEH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F3D"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * Codex — PostToolUse hook adapter (monitoring-only mode, matcher: `.*`)
4
+ *
5
+ * Lean variant of track-action.ts for `verification.enable: false`. Submits
6
+ * a send_event job for every tool (no devtools-only path, no recording
7
+ * state, no actions.jsonl write for devtools). Also acts as activity-start
8
+ * fallback if no activity was opened yet.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.run = run;
12
+ const actions_1 = require("../../../hooks/core/actions");
13
+ const ids_1 = require("../../../import/ids");
14
+ const activity_1 = require("../../../hooks/core/activity");
15
+ const session_state_1 = require("../../../hooks/core/session-state");
16
+ const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
17
+ const config_1 = require("../../../lib/config");
18
+ const logger_1 = require("../../../lib/logger");
19
+ const output_1 = require("../../../lib/output");
20
+ const stdin_1 = require("../../../lib/stdin");
21
+ const queue_1 = require("../../../queue");
22
+ const util_1 = require("../util");
23
+ /** Same failure detection set as enabled-mode track-action.ts. Keep in sync. */
24
+ function detectFailureMonitor(toolResponse) {
25
+ if (toolResponse === undefined || toolResponse === null) {
26
+ return { isError: false };
27
+ }
28
+ if (typeof toolResponse === "object" && toolResponse !== null) {
29
+ const rec = toolResponse;
30
+ if (rec.isError === true || rec.is_error === true) {
31
+ const msg = rec.error ?? rec.message ?? rec.errorMessage;
32
+ return { isError: true, errorText: typeof msg === "string" ? msg : JSON.stringify(rec).slice(0, 500) };
33
+ }
34
+ }
35
+ if (typeof toolResponse === "string") {
36
+ const t = toolResponse;
37
+ if (/(?:^|\n)Process exited with code [1-9]/.test(t)
38
+ || /^Exit code:\s*[1-9]/m.test(t)
39
+ || /apply_patch verification failed/i.test(t)
40
+ || /failed to find expected lines/i.test(t)
41
+ || /^\s*Error\b/.test(t)
42
+ || /(?:^|\n)\[Request interrupted by user\]/.test(t)
43
+ // Cross-pipeline parity with enabled-mode track-action.ts +
44
+ // projection.ts classifier — see comment there.
45
+ || /modified since (?:last )?read|stale read/i.test(t)
46
+ || /file (?:is )?too large|exceeds/i.test(t)
47
+ || /file not found|No such file or directory|does not exist/i.test(t)) {
48
+ return { isError: true, errorText: t.slice(0, 500) };
49
+ }
50
+ }
51
+ return { isError: false };
52
+ }
53
+ function safeStringifyBytes(value) {
54
+ if (value === undefined || value === null) {
55
+ return 0;
56
+ }
57
+ // Raw byte count for string values (apply_patch + exec_command output
58
+ // shape) — match enabled-mode track-action.ts + import runner.ts. Without
59
+ // this branch, monitoring mode emits 5-15% inflated tool_response_size
60
+ // vs import — same root as round-18 bug-5.
61
+ if (typeof value === "string") {
62
+ try {
63
+ return Buffer.byteLength(value, "utf8");
64
+ }
65
+ catch {
66
+ return 0;
67
+ }
68
+ }
69
+ try {
70
+ return Buffer.byteLength(JSON.stringify(value), "utf8");
71
+ }
72
+ catch {
73
+ return 0;
74
+ }
75
+ }
76
+ async function run(projectDir) {
77
+ const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
78
+ const sessionId = input.session_id ?? "default";
79
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
80
+ const actionsFile = `${sessionDir}/actions.jsonl`;
81
+ (0, logger_1.setLogFile)(`${sessionDir}/session.log`);
82
+ // activity-start fallback (in case UPS didn't fire)
83
+ await (0, activity_1.startActivity)({ sessionDir, actionsFile, source: "pre_tool_use" });
84
+ if (!(0, config_1.isJobQueueEnabled)(projectDir)) {
85
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
86
+ return;
87
+ }
88
+ const rawToolName = input.tool_name ?? "";
89
+ const toolUseId = input.tool_use_id ?? "";
90
+ // tool_input is Record | string | undefined (apply_patch passes raw string)
91
+ const toolInput = input.tool_input;
92
+ const toolResponse = input.tool_response;
93
+ const classified = (0, util_1.classifyCodexTool)(rawToolName);
94
+ const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
95
+ const projectedInput = (0, util_1.extractCodexToolInput)(rawToolName, toolInput);
96
+ const stashed = (0, tool_use_stash_1.consumeToolUseData)(sessionId, toolUseId);
97
+ let durationMs = null;
98
+ if (stashed?.start_ns) {
99
+ try {
100
+ durationMs = Number((process.hrtime.bigint() - BigInt(stashed.start_ns)) / 1000000n);
101
+ }
102
+ catch (e) {
103
+ logger_1.logger.debug(`derive duration failed: ${e}`);
104
+ }
105
+ }
106
+ // Parallel-pipeline parity with enabled-mode track-action.ts: omit
107
+ // `activity_id` when no activity is open (Claude/Cursor live use
108
+ // `activityId!` → JSON.stringify drops; Codex was outlier shipping "").
109
+ // Collector schema rejects empty activity_id like it rejects empty fix_id.
110
+ // Cross-client parity: zero `tool_response_size` on failure to match
111
+ // Claude+Cursor (see enabled-mode track-action.ts for full rationale).
112
+ const failureMonitor = detectFailureMonitor(toolResponse);
113
+ const event = {
114
+ ...(0, actions_1.baseFields)(actionsFile),
115
+ type: "tool_call",
116
+ timestamp: Date.now(),
117
+ tool_type: classified.tool_type,
118
+ tool_name: classified.tool_name || (0, util_1.normalizeCodexToolName)(rawToolName),
119
+ mcp_server: classified.mcp_server,
120
+ tool_input: projectedInput,
121
+ tool_input_size: safeStringifyBytes(toolInput),
122
+ tool_response_size: failureMonitor.isError ? 0 : safeStringifyBytes(toolResponse),
123
+ duration: durationMs,
124
+ };
125
+ if (activityId) {
126
+ event.activity_id = activityId;
127
+ }
128
+ // Parallel-pipeline parity: enabled-mode track-action.ts (round 15)
129
+ // sets tool_use_id on both devtools + non-devtools branches.
130
+ // Monitoring mode (this file) was left behind. Without this, every
131
+ // tool_call emitted in monitoring mode ships without a join key →
132
+ // collector cannot correlate Codex tool_call events with MCP-side
133
+ // function_call_output events. Cross-mode parity break.
134
+ if (toolUseId) {
135
+ event.tool_use_id = toolUseId;
136
+ }
137
+ // Deterministic event.id parity with import (round 19 fix in
138
+ // enabled-mode track-action.ts). Monitoring mode previously emitted
139
+ // random UUID id → every tool_call duplicated on re-import.
140
+ if (toolUseId.length > 0) {
141
+ event.id = (0, ids_1.deriveToolCallEventIdFromToolUseId)(sessionId, toolUseId);
142
+ }
143
+ // Failure detection — enabled mode has `detectFailure`; monitoring
144
+ // mode previously emitted `error: undefined` for every failed tool
145
+ // → cross-mode parity break. Reuse the same `failureMonitor` computed
146
+ // for `tool_response_size` above.
147
+ if (failureMonitor.isError) {
148
+ event.error = failureMonitor.errorText;
149
+ }
150
+ try {
151
+ (0, queue_1.submit)(projectDir, sessionId, queue_1.SEND_EVENT_TYPE, event);
152
+ }
153
+ catch (e) {
154
+ if (e instanceof queue_1.JobTooLargeError) {
155
+ // Same rationale as enabled-mode track-action.ts: `tool_response`
156
+ // is never on the event in the first place, so an
157
+ // `tool_response_omitted: true` retry strips nothing and
158
+ // re-fails identically. Drop cleanly — matches Claude/Cursor
159
+ // monitor paths.
160
+ logger_1.logger.debug(`track-action-monitor: wire event too large for tool_call ${rawToolName}; dropping`);
161
+ }
162
+ else {
163
+ logger_1.logger.debug(`queue submit failed for tool_call ${rawToolName}: ${e}`);
164
+ }
165
+ }
166
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
167
+ }
168
+ //# sourceMappingURL=track-action-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-action-monitor.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/track-action-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Codex — PreToolUse hook adapter (matcher: `.*`)
3
+ *
4
+ * Codex's PostToolUse stdin does NOT carry `duration_ms` like Claude/Cursor
5
+ * do. To populate `tool_call.duration` on the wire, we stash a monotonic
6
+ * `process.hrtime.bigint()` timestamp at PreToolUse keyed by `tool_use_id`,
7
+ * then derive the delta in the matching `track-action` PostToolUse handler.
8
+ *
9
+ * Hook overhead: ~30-60ms per side (cold node start). For tool calls < 100ms
10
+ * the duration field is dominated by overhead and not useful; for ≥1s calls
11
+ * accuracy is ~95-99%. Orphaned stash entries (interrupted tools whose
12
+ * PostToolUse never fires) are reaped by OS /tmp cleanup.
13
+ */
14
+ export interface CodexTimingState {
15
+ start_ns: string;
16
+ }
17
+ export declare function run(projectDir: string): Promise<void>;
18
+ //# sourceMappingURL=track-action-pre.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-action-pre.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/track-action-pre.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3D"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Codex — PreToolUse hook adapter (matcher: `.*`)
4
+ *
5
+ * Codex's PostToolUse stdin does NOT carry `duration_ms` like Claude/Cursor
6
+ * do. To populate `tool_call.duration` on the wire, we stash a monotonic
7
+ * `process.hrtime.bigint()` timestamp at PreToolUse keyed by `tool_use_id`,
8
+ * then derive the delta in the matching `track-action` PostToolUse handler.
9
+ *
10
+ * Hook overhead: ~30-60ms per side (cold node start). For tool calls < 100ms
11
+ * the duration field is dominated by overhead and not useful; for ≥1s calls
12
+ * accuracy is ~95-99%. Orphaned stash entries (interrupted tools whose
13
+ * PostToolUse never fires) are reaped by OS /tmp cleanup.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.run = run;
17
+ const logger_1 = require("../../../lib/logger");
18
+ const stdin_1 = require("../../../lib/stdin");
19
+ const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
20
+ const util_1 = require("../util");
21
+ async function run(projectDir) {
22
+ const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
23
+ const sessionId = input.session_id ?? "";
24
+ const toolUseId = input.tool_use_id ?? "";
25
+ if (!sessionId || !toolUseId) {
26
+ process.exit(0);
27
+ return;
28
+ }
29
+ (0, logger_1.setLogFile)(`${projectDir}/.ironbee/sessions/${sessionId}/session.log`);
30
+ const state = { start_ns: process.hrtime.bigint().toString() };
31
+ (0, tool_use_stash_1.stashToolUseData)(sessionId, toolUseId, state);
32
+ logger_1.logger.debug(`track-action-pre: stashed start_ns for ${toolUseId}`);
33
+ process.exit(0);
34
+ }
35
+ //# sourceMappingURL=track-action-pre.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-action-pre.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/track-action-pre.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAWH,kBAaC;AAtBD,gDAAyD;AACzD,8CAA+C;AAC/C,uEAAsE;AACtE,kCAA8C;AAMvC,KAAK,UAAU,GAAG,CAAC,UAAkB;IACxC,MAAM,KAAK,GAA2C,IAAA,0BAAmB,EAAC,IAAA,iBAAS,GAAE,CAAC,CAAC;IACvF,MAAM,SAAS,GAAW,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IACjD,MAAM,SAAS,GAAW,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IAClD,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACX,CAAC;IACD,IAAA,mBAAU,EAAC,GAAG,UAAU,sBAAsB,SAAS,cAAc,CAAC,CAAC;IACvE,MAAM,KAAK,GAAqB,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IACjF,IAAA,iCAAgB,EAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,eAAM,CAAC,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Codex — PostToolUse hook adapter (matcher: `.*`)
3
+ *
4
+ * Two routes per tool:
5
+ * - **devtools MCP tools** (mcp__{browser,node,backend}-devtools__*): record
6
+ * a `tool_call` entry in actions.jsonl (verify-gate dep), update recording
7
+ * state for browser-devtools. NOT queue-submitted — devtools MCP server
8
+ * self-ships its own tool_call events to the collector.
9
+ * - **All other tools**: submit a `send_event` job to the queue with a
10
+ * whitelisted `tool_input` projection.
11
+ *
12
+ * Codex-specific: derive `duration` from the timing stash written by
13
+ * `track-action-pre.ts` (Codex hook stdin does not carry duration_ms).
14
+ *
15
+ * Codex has NO PostToolUseFailure event — failures fold into PostToolUse
16
+ * with the error embedded in `tool_response`. We detect failure
17
+ * heuristically (looking for `isError: true` on MCP responses); the
18
+ * `failure_type` / `is_interrupt` fields stay null (Codex provides no
19
+ * structured failure schema).
20
+ */
21
+ export declare function run(projectDir: string): Promise<void>;
22
+ //# sourceMappingURL=track-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-action.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/track-action.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAuIH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqN3D"}