@ironbee-ai/cli 0.14.1 → 0.16.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 (500) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -95
  3. package/dist/analytics/{emit.d.ts → claude/emit.d.ts} +1 -1
  4. package/dist/analytics/claude/emit.d.ts.map +1 -0
  5. package/dist/analytics/{emit.js → claude/emit.js} +34 -7
  6. package/dist/analytics/claude/emit.js.map +1 -0
  7. package/dist/analytics/{hook-trigger.d.ts → claude/hook-trigger.d.ts} +1 -1
  8. package/dist/analytics/claude/hook-trigger.d.ts.map +1 -0
  9. package/dist/analytics/{hook-trigger.js → claude/hook-trigger.js} +2 -2
  10. package/dist/analytics/claude/hook-trigger.js.map +1 -0
  11. package/dist/analytics/claude/log.d.ts.map +1 -0
  12. package/dist/analytics/{log.js → claude/log.js} +1 -1
  13. package/dist/analytics/claude/log.js.map +1 -0
  14. package/dist/analytics/{merge.d.ts → claude/merge.d.ts} +2 -1
  15. package/dist/analytics/claude/merge.d.ts.map +1 -0
  16. package/dist/analytics/{merge.js → claude/merge.js} +13 -1
  17. package/dist/analytics/claude/merge.js.map +1 -0
  18. package/dist/analytics/{pricing.d.ts → claude/pricing.d.ts} +1 -13
  19. package/dist/analytics/claude/pricing.d.ts.map +1 -0
  20. package/dist/analytics/{pricing.js → claude/pricing.js} +6 -14
  21. package/dist/analytics/claude/pricing.js.map +1 -0
  22. package/dist/analytics/{projection.d.ts → claude/projection.d.ts} +31 -7
  23. package/dist/analytics/claude/projection.d.ts.map +1 -0
  24. package/dist/analytics/{projection.js → claude/projection.js} +631 -327
  25. package/dist/analytics/claude/projection.js.map +1 -0
  26. package/dist/analytics/{spawn.d.ts → claude/spawn.d.ts} +4 -4
  27. package/dist/analytics/claude/spawn.d.ts.map +1 -0
  28. package/dist/analytics/{spawn.js → claude/spawn.js} +4 -3
  29. package/dist/analytics/claude/spawn.js.map +1 -0
  30. package/dist/analytics/{state.d.ts → claude/state.d.ts} +1 -1
  31. package/dist/analytics/claude/state.d.ts.map +1 -0
  32. package/dist/analytics/{state.js → claude/state.js} +2 -2
  33. package/dist/analytics/claude/state.js.map +1 -0
  34. package/dist/analytics/claude/transcript.d.ts.map +1 -0
  35. package/dist/analytics/{transcript.js → claude/transcript.js} +1 -1
  36. package/dist/analytics/claude/transcript.js.map +1 -0
  37. package/dist/analytics/codex/api-request.d.ts +108 -0
  38. package/dist/analytics/codex/api-request.d.ts.map +1 -0
  39. package/dist/analytics/codex/api-request.js +155 -0
  40. package/dist/analytics/codex/api-request.js.map +1 -0
  41. package/dist/analytics/codex/apply-patch.d.ts +21 -0
  42. package/dist/analytics/codex/apply-patch.d.ts.map +1 -0
  43. package/dist/analytics/codex/apply-patch.js +49 -0
  44. package/dist/analytics/codex/apply-patch.js.map +1 -0
  45. package/dist/analytics/codex/classifier.d.ts +28 -0
  46. package/dist/analytics/codex/classifier.d.ts.map +1 -0
  47. package/dist/analytics/codex/classifier.js +111 -0
  48. package/dist/analytics/codex/classifier.js.map +1 -0
  49. package/dist/analytics/codex/emit.d.ts +47 -0
  50. package/dist/analytics/codex/emit.d.ts.map +1 -0
  51. package/dist/analytics/codex/emit.js +158 -0
  52. package/dist/analytics/codex/emit.js.map +1 -0
  53. package/dist/analytics/codex/events-emit.d.ts +62 -0
  54. package/dist/analytics/codex/events-emit.d.ts.map +1 -0
  55. package/dist/analytics/codex/events-emit.js +555 -0
  56. package/dist/analytics/codex/events-emit.js.map +1 -0
  57. package/dist/analytics/codex/pricing.d.ts +57 -0
  58. package/dist/analytics/codex/pricing.d.ts.map +1 -0
  59. package/dist/analytics/codex/pricing.js +125 -0
  60. package/dist/analytics/codex/pricing.js.map +1 -0
  61. package/dist/analytics/codex/projection.d.ts +51 -0
  62. package/dist/analytics/codex/projection.d.ts.map +1 -0
  63. package/dist/analytics/codex/projection.js +1477 -0
  64. package/dist/analytics/codex/projection.js.map +1 -0
  65. package/dist/analytics/codex/spawn.d.ts +27 -0
  66. package/dist/analytics/codex/spawn.d.ts.map +1 -0
  67. package/dist/analytics/codex/spawn.js +64 -0
  68. package/dist/analytics/codex/spawn.js.map +1 -0
  69. package/dist/analytics/codex/status-snapshot.d.ts +80 -0
  70. package/dist/analytics/codex/status-snapshot.d.ts.map +1 -0
  71. package/dist/analytics/codex/status-snapshot.js +206 -0
  72. package/dist/analytics/codex/status-snapshot.js.map +1 -0
  73. package/dist/analytics/codex/transcript.d.ts +51 -0
  74. package/dist/analytics/codex/transcript.d.ts.map +1 -0
  75. package/dist/analytics/codex/transcript.js +134 -0
  76. package/dist/analytics/codex/transcript.js.map +1 -0
  77. package/dist/analytics/codex/types.d.ts +253 -0
  78. package/dist/analytics/codex/types.d.ts.map +1 -0
  79. package/dist/analytics/codex/types.js +29 -0
  80. package/dist/analytics/codex/types.js.map +1 -0
  81. package/dist/analytics/shared/classifier.d.ts.map +1 -0
  82. package/dist/analytics/{classifier.js → shared/classifier.js} +9 -0
  83. package/dist/analytics/shared/classifier.js.map +1 -0
  84. package/dist/analytics/shared/errors.d.ts.map +1 -0
  85. package/dist/analytics/shared/errors.js.map +1 -0
  86. package/dist/analytics/shared/tokens.d.ts +14 -0
  87. package/dist/analytics/shared/tokens.d.ts.map +1 -0
  88. package/dist/analytics/shared/tokens.js +17 -0
  89. package/dist/analytics/shared/tokens.js.map +1 -0
  90. package/dist/analytics/{types.d.ts → shared/types.d.ts} +42 -9
  91. package/dist/analytics/shared/types.d.ts.map +1 -0
  92. package/dist/analytics/shared/types.js.map +1 -0
  93. package/dist/clients/base.d.ts +9 -0
  94. package/dist/clients/base.d.ts.map +1 -1
  95. package/dist/clients/claude/hooks/activity-end.js +1 -1
  96. package/dist/clients/claude/hooks/activity-end.js.map +1 -1
  97. package/dist/clients/claude/hooks/activity-start.js +1 -1
  98. package/dist/clients/claude/hooks/activity-start.js.map +1 -1
  99. package/dist/clients/claude/hooks/clear-verdict.d.ts.map +1 -1
  100. package/dist/clients/claude/hooks/clear-verdict.js +14 -0
  101. package/dist/clients/claude/hooks/clear-verdict.js.map +1 -1
  102. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  103. package/dist/clients/claude/hooks/session-end.js +7 -1
  104. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  105. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  106. package/dist/clients/claude/hooks/session-start.js +7 -1
  107. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  108. package/dist/clients/claude/hooks/session-status.d.ts.map +1 -1
  109. package/dist/clients/claude/hooks/session-status.js +13 -9
  110. package/dist/clients/claude/hooks/session-status.js.map +1 -1
  111. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  112. package/dist/clients/claude/hooks/track-action.js +26 -1
  113. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  114. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  115. package/dist/clients/claude/hooks/verify-gate.js +8 -1
  116. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  117. package/dist/clients/claude/index.d.ts +1 -0
  118. package/dist/clients/claude/index.d.ts.map +1 -1
  119. package/dist/clients/claude/index.js +18 -14
  120. package/dist/clients/claude/index.js.map +1 -1
  121. package/dist/clients/claude/util.d.ts.map +1 -1
  122. package/dist/clients/claude/util.js +55 -0
  123. package/dist/clients/claude/util.js.map +1 -1
  124. package/dist/clients/codex/commands/ironbee-verify/SKILL.md +58 -0
  125. package/dist/clients/codex/hooks/activity-end.d.ts +9 -0
  126. package/dist/clients/codex/hooks/activity-end.d.ts.map +1 -0
  127. package/dist/clients/codex/hooks/activity-end.js +65 -0
  128. package/dist/clients/codex/hooks/activity-end.js.map +1 -0
  129. package/dist/clients/codex/hooks/activity-start.d.ts +17 -0
  130. package/dist/clients/codex/hooks/activity-start.d.ts.map +1 -0
  131. package/dist/clients/codex/hooks/activity-start.js +38 -0
  132. package/dist/clients/codex/hooks/activity-start.js.map +1 -0
  133. package/dist/clients/codex/hooks/clear-verdict.d.ts +55 -0
  134. package/dist/clients/codex/hooks/clear-verdict.d.ts.map +1 -0
  135. package/dist/clients/codex/hooks/clear-verdict.js +299 -0
  136. package/dist/clients/codex/hooks/clear-verdict.js.map +1 -0
  137. package/dist/clients/codex/hooks/require-verdict.d.ts +30 -0
  138. package/dist/clients/codex/hooks/require-verdict.d.ts.map +1 -0
  139. package/dist/clients/codex/hooks/require-verdict.js +109 -0
  140. package/dist/clients/codex/hooks/require-verdict.js.map +1 -0
  141. package/dist/clients/codex/hooks/require-verification.d.ts +12 -0
  142. package/dist/clients/codex/hooks/require-verification.d.ts.map +1 -0
  143. package/dist/clients/codex/hooks/require-verification.js +136 -0
  144. package/dist/clients/codex/hooks/require-verification.js.map +1 -0
  145. package/dist/clients/codex/hooks/session-start.d.ts +10 -0
  146. package/dist/clients/codex/hooks/session-start.d.ts.map +1 -0
  147. package/dist/clients/codex/hooks/session-start.js +94 -0
  148. package/dist/clients/codex/hooks/session-start.js.map +1 -0
  149. package/dist/clients/codex/hooks/track-action-monitor.d.ts +10 -0
  150. package/dist/clients/codex/hooks/track-action-monitor.d.ts.map +1 -0
  151. package/dist/clients/codex/hooks/track-action-monitor.js +168 -0
  152. package/dist/clients/codex/hooks/track-action-monitor.js.map +1 -0
  153. package/dist/clients/codex/hooks/track-action-pre.d.ts +18 -0
  154. package/dist/clients/codex/hooks/track-action-pre.d.ts.map +1 -0
  155. package/dist/clients/codex/hooks/track-action-pre.js +35 -0
  156. package/dist/clients/codex/hooks/track-action-pre.js.map +1 -0
  157. package/dist/clients/codex/hooks/track-action.d.ts +22 -0
  158. package/dist/clients/codex/hooks/track-action.d.ts.map +1 -0
  159. package/dist/clients/codex/hooks/track-action.js +350 -0
  160. package/dist/clients/codex/hooks/track-action.js.map +1 -0
  161. package/dist/clients/codex/hooks/verify-gate.d.ts +15 -0
  162. package/dist/clients/codex/hooks/verify-gate.d.ts.map +1 -0
  163. package/dist/clients/codex/hooks/verify-gate.js +105 -0
  164. package/dist/clients/codex/hooks/verify-gate.js.map +1 -0
  165. package/dist/clients/codex/index.d.ts +42 -0
  166. package/dist/clients/codex/index.d.ts.map +1 -0
  167. package/dist/clients/codex/index.js +427 -0
  168. package/dist/clients/codex/index.js.map +1 -0
  169. package/dist/clients/codex/platforms/command-verify.backend.md +108 -0
  170. package/dist/clients/codex/platforms/command-verify.browser.md +108 -0
  171. package/dist/clients/codex/platforms/command-verify.node.md +61 -0
  172. package/dist/clients/codex/platforms/rule.backend.md +32 -0
  173. package/dist/clients/codex/platforms/rule.browser.md +17 -0
  174. package/dist/clients/codex/platforms/rule.node.md +28 -0
  175. package/dist/clients/codex/platforms/skill.backend.md +95 -0
  176. package/dist/clients/codex/platforms/skill.browser.md +28 -0
  177. package/dist/clients/codex/platforms/skill.node.md +62 -0
  178. package/dist/clients/codex/rules/ironbee-verification.md +48 -0
  179. package/dist/clients/codex/skills/ironbee-verification.md +80 -0
  180. package/dist/clients/codex/util.d.ts +193 -0
  181. package/dist/clients/codex/util.d.ts.map +1 -0
  182. package/dist/clients/codex/util.js +784 -0
  183. package/dist/clients/codex/util.js.map +1 -0
  184. package/dist/clients/cursor/hooks/activity-end.js +1 -1
  185. package/dist/clients/cursor/hooks/activity-end.js.map +1 -1
  186. package/dist/clients/cursor/hooks/clear-verdict.d.ts +5 -2
  187. package/dist/clients/cursor/hooks/clear-verdict.d.ts.map +1 -1
  188. package/dist/clients/cursor/hooks/clear-verdict.js +12 -3
  189. package/dist/clients/cursor/hooks/clear-verdict.js.map +1 -1
  190. package/dist/clients/cursor/hooks/session-end.js +1 -1
  191. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  192. package/dist/clients/cursor/hooks/session-start.js +1 -1
  193. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  194. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  195. package/dist/clients/cursor/hooks/verify-gate.js +6 -1
  196. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  197. package/dist/clients/cursor/index.d.ts +1 -0
  198. package/dist/clients/cursor/index.d.ts.map +1 -1
  199. package/dist/clients/cursor/index.js +22 -13
  200. package/dist/clients/cursor/index.js.map +1 -1
  201. package/dist/clients/registry.d.ts.map +1 -1
  202. package/dist/clients/registry.js +2 -1
  203. package/dist/clients/registry.js.map +1 -1
  204. package/dist/commands/{claude.d.ts → claude/index.d.ts} +1 -1
  205. package/dist/commands/claude/index.d.ts.map +1 -0
  206. package/dist/commands/{claude.js → claude/index.js} +12 -6
  207. package/dist/commands/claude/index.js.map +1 -0
  208. package/dist/commands/{otel.d.ts → claude/otel.d.ts} +5 -1
  209. package/dist/commands/claude/otel.d.ts.map +1 -0
  210. package/dist/commands/{otel.js → claude/otel.js} +9 -5
  211. package/dist/commands/claude/otel.js.map +1 -0
  212. package/dist/commands/claude/process-analytics.d.ts +19 -0
  213. package/dist/commands/claude/process-analytics.d.ts.map +1 -0
  214. package/dist/commands/{process-analytics.js → claude/process-analytics.js} +16 -15
  215. package/dist/commands/claude/process-analytics.js.map +1 -0
  216. package/dist/commands/{statusline-toggle.d.ts → claude/statusline-toggle.d.ts} +2 -2
  217. package/dist/commands/claude/statusline-toggle.d.ts.map +1 -0
  218. package/dist/commands/{statusline-toggle.js → claude/statusline-toggle.js} +8 -8
  219. package/dist/commands/claude/statusline-toggle.js.map +1 -0
  220. package/dist/commands/{statusline.d.ts → claude/statusline.d.ts} +1 -1
  221. package/dist/commands/claude/statusline.d.ts.map +1 -0
  222. package/dist/commands/{statusline.js → claude/statusline.js} +4 -4
  223. package/dist/commands/claude/statusline.js.map +1 -0
  224. package/dist/commands/codex/index.d.ts +11 -0
  225. package/dist/commands/codex/index.d.ts.map +1 -0
  226. package/dist/commands/codex/index.js +17 -0
  227. package/dist/commands/codex/index.js.map +1 -0
  228. package/dist/commands/codex/process-analytics.d.ts +14 -0
  229. package/dist/commands/codex/process-analytics.d.ts.map +1 -0
  230. package/dist/commands/codex/process-analytics.js +111 -0
  231. package/dist/commands/codex/process-analytics.js.map +1 -0
  232. package/dist/commands/hook.js +12 -0
  233. package/dist/commands/hook.js.map +1 -1
  234. package/dist/commands/import.js +3 -3
  235. package/dist/commands/import.js.map +1 -1
  236. package/dist/commands/queue.js +3 -1
  237. package/dist/commands/queue.js.map +1 -1
  238. package/dist/commands/status.js +1 -1
  239. package/dist/commands/verify.d.ts.map +1 -1
  240. package/dist/commands/verify.js +1 -2
  241. package/dist/commands/verify.js.map +1 -1
  242. package/dist/hooks/core/actions.d.ts +17 -1
  243. package/dist/hooks/core/actions.d.ts.map +1 -1
  244. package/dist/hooks/core/actions.js +13 -0
  245. package/dist/hooks/core/actions.js.map +1 -1
  246. package/dist/hooks/core/activity-end.d.ts.map +1 -1
  247. package/dist/hooks/core/activity-end.js +4 -0
  248. package/dist/hooks/core/activity-end.js.map +1 -1
  249. package/dist/hooks/core/session-state.d.ts +15 -1
  250. package/dist/hooks/core/session-state.d.ts.map +1 -1
  251. package/dist/hooks/core/session-state.js +102 -7
  252. package/dist/hooks/core/session-state.js.map +1 -1
  253. package/dist/import/claude/analytics-runner.d.ts +1 -1
  254. package/dist/import/claude/analytics-runner.d.ts.map +1 -1
  255. package/dist/import/claude/analytics-runner.js +5 -5
  256. package/dist/import/claude/analytics-runner.js.map +1 -1
  257. package/dist/import/claude/auth-mode.d.ts +1 -1
  258. package/dist/import/claude/auth-mode.d.ts.map +1 -1
  259. package/dist/import/claude/discovery.js +1 -1
  260. package/dist/import/claude/discovery.js.map +1 -1
  261. package/dist/import/claude/encoding.js +1 -1
  262. package/dist/import/claude/encoding.js.map +1 -1
  263. package/dist/import/claude/events/file-change.d.ts +10 -1
  264. package/dist/import/claude/events/file-change.d.ts.map +1 -1
  265. package/dist/import/claude/events/file-change.js +79 -5
  266. package/dist/import/claude/events/file-change.js.map +1 -1
  267. package/dist/import/claude/events/tool-call.d.ts +16 -1
  268. package/dist/import/claude/events/tool-call.d.ts.map +1 -1
  269. package/dist/import/claude/events/tool-call.js +122 -15
  270. package/dist/import/claude/events/tool-call.js.map +1 -1
  271. package/dist/import/claude/runner.d.ts.map +1 -1
  272. package/dist/import/claude/runner.js +45 -3
  273. package/dist/import/claude/runner.js.map +1 -1
  274. package/dist/import/claude/summary.js +1 -1
  275. package/dist/import/claude/summary.js.map +1 -1
  276. package/dist/import/claude/transcript-walk.d.ts +1 -1
  277. package/dist/import/claude/transcript-walk.d.ts.map +1 -1
  278. package/dist/import/claude/transcript-walk.js +11 -4
  279. package/dist/import/claude/transcript-walk.js.map +1 -1
  280. package/dist/import/codex/analytics-runner.d.ts +46 -0
  281. package/dist/import/codex/analytics-runner.d.ts.map +1 -0
  282. package/dist/import/codex/analytics-runner.js +116 -0
  283. package/dist/import/codex/analytics-runner.js.map +1 -0
  284. package/dist/import/codex/discovery.d.ts +33 -0
  285. package/dist/import/codex/discovery.d.ts.map +1 -0
  286. package/dist/import/codex/discovery.js +202 -0
  287. package/dist/import/codex/discovery.js.map +1 -0
  288. package/dist/import/codex/events/file-change.d.ts +42 -0
  289. package/dist/import/codex/events/file-change.d.ts.map +1 -0
  290. package/dist/import/codex/events/file-change.js +125 -0
  291. package/dist/import/codex/events/file-change.js.map +1 -0
  292. package/dist/import/codex/events/tool-call.d.ts +49 -0
  293. package/dist/import/codex/events/tool-call.d.ts.map +1 -0
  294. package/dist/import/codex/events/tool-call.js +151 -0
  295. package/dist/import/codex/events/tool-call.js.map +1 -0
  296. package/dist/import/codex/runner.d.ts +34 -0
  297. package/dist/import/codex/runner.d.ts.map +1 -0
  298. package/dist/import/codex/runner.js +456 -0
  299. package/dist/import/codex/runner.js.map +1 -0
  300. package/dist/import/codex/summary.d.ts +20 -0
  301. package/dist/import/codex/summary.d.ts.map +1 -0
  302. package/dist/import/codex/summary.js +206 -0
  303. package/dist/import/codex/summary.js.map +1 -0
  304. package/dist/import/events/activity.d.ts.map +1 -1
  305. package/dist/import/events/activity.js +17 -2
  306. package/dist/import/events/activity.js.map +1 -1
  307. package/dist/import/events/session.d.ts +11 -1
  308. package/dist/import/events/session.d.ts.map +1 -1
  309. package/dist/import/events/session.js +19 -1
  310. package/dist/import/events/session.js.map +1 -1
  311. package/dist/import/ids.js +3 -3
  312. package/dist/import/ids.js.map +1 -1
  313. package/dist/import/pipeline.d.ts +22 -15
  314. package/dist/import/pipeline.d.ts.map +1 -1
  315. package/dist/import/pipeline.js +99 -18
  316. package/dist/import/pipeline.js.map +1 -1
  317. package/dist/import/types.d.ts +4 -0
  318. package/dist/import/types.d.ts.map +1 -1
  319. package/dist/import/types.js.map +1 -1
  320. package/dist/index.js +9 -14
  321. package/dist/index.js.map +1 -1
  322. package/dist/lib/collector.d.ts +2 -1
  323. package/dist/lib/collector.d.ts.map +1 -1
  324. package/dist/lib/collector.js +28 -3
  325. package/dist/lib/collector.js.map +1 -1
  326. package/dist/lib/config.d.ts.map +1 -1
  327. package/dist/lib/config.js.map +1 -1
  328. package/dist/lib/event.d.ts +18 -1
  329. package/dist/lib/event.d.ts.map +1 -1
  330. package/dist/lib/event.js +25 -1
  331. package/dist/lib/event.js.map +1 -1
  332. package/dist/lib/fs-prune.d.ts +1 -1
  333. package/dist/lib/fs-prune.js +1 -1
  334. package/dist/lib/platform-section.d.ts.map +1 -1
  335. package/dist/lib/platform-section.js +8 -0
  336. package/dist/lib/platform-section.js.map +1 -1
  337. package/dist/otel/{context → claude/context}/build.d.ts +1 -1
  338. package/dist/otel/claude/context/build.d.ts.map +1 -0
  339. package/dist/otel/{context → claude/context}/build.js +3 -7
  340. package/dist/otel/claude/context/build.js.map +1 -0
  341. package/dist/otel/claude/context/classify.d.ts.map +1 -0
  342. package/dist/otel/claude/context/classify.js.map +1 -0
  343. package/dist/otel/{context → claude/context}/extract.d.ts +1 -1
  344. package/dist/otel/claude/context/extract.d.ts.map +1 -0
  345. package/dist/otel/claude/context/extract.js.map +1 -0
  346. package/dist/otel/claude/context/markers.d.ts.map +1 -0
  347. package/dist/otel/{context → claude/context}/markers.js +22 -3
  348. package/dist/otel/claude/context/markers.js.map +1 -0
  349. package/dist/otel/claude/context/util.d.ts.map +1 -0
  350. package/dist/otel/claude/context/util.js.map +1 -0
  351. package/dist/otel/{daemon → claude/daemon}/ensure.d.ts +1 -1
  352. package/dist/otel/claude/daemon/ensure.d.ts.map +1 -0
  353. package/dist/otel/{daemon → claude/daemon}/ensure.js +6 -6
  354. package/dist/otel/claude/daemon/ensure.js.map +1 -0
  355. package/dist/otel/{daemon → claude/daemon}/forward.d.ts +1 -1
  356. package/dist/otel/claude/daemon/forward.d.ts.map +1 -0
  357. package/dist/otel/{daemon → claude/daemon}/forward.js +0 -0
  358. package/dist/otel/claude/daemon/forward.js.map +1 -0
  359. package/dist/otel/claude/daemon/paths.d.ts.map +1 -0
  360. package/dist/otel/claude/daemon/paths.js.map +1 -0
  361. package/dist/otel/{daemon → claude/daemon}/process.d.ts +1 -1
  362. package/dist/otel/claude/daemon/process.d.ts.map +1 -0
  363. package/dist/otel/{daemon → claude/daemon}/process.js +1 -1
  364. package/dist/otel/claude/daemon/process.js.map +1 -0
  365. package/dist/otel/claude/daemon/reprocess.d.ts.map +1 -0
  366. package/dist/otel/{daemon → claude/daemon}/reprocess.js +2 -2
  367. package/dist/otel/claude/daemon/reprocess.js.map +1 -0
  368. package/dist/otel/claude/log-handler.d.ts.map +1 -0
  369. package/dist/otel/{log-handler.js → claude/log-handler.js} +1 -1
  370. package/dist/otel/claude/log-handler.js.map +1 -0
  371. package/dist/otel/collector.js +4 -4
  372. package/dist/otel/collector.js.map +1 -1
  373. package/dist/queue/flush.d.ts +23 -0
  374. package/dist/queue/flush.d.ts.map +1 -1
  375. package/dist/queue/flush.js +44 -0
  376. package/dist/queue/flush.js.map +1 -1
  377. package/dist/queue/handlers/send-event.d.ts.map +1 -1
  378. package/dist/queue/handlers/send-event.js +5 -4
  379. package/dist/queue/handlers/send-event.js.map +1 -1
  380. package/dist/queue/index.d.ts +2 -2
  381. package/dist/queue/index.d.ts.map +1 -1
  382. package/dist/queue/index.js +4 -1
  383. package/dist/queue/index.js.map +1 -1
  384. package/dist/queue/spawn.d.ts +20 -0
  385. package/dist/queue/spawn.d.ts.map +1 -1
  386. package/dist/queue/spawn.js +37 -0
  387. package/dist/queue/spawn.js.map +1 -1
  388. package/dist/tui/import/area.js +3 -3
  389. package/dist/tui/import/area.js.map +1 -1
  390. package/dist/tui/sessions/area.d.ts.map +1 -1
  391. package/dist/tui/sessions/area.js +2 -45
  392. package/dist/tui/sessions/area.js.map +1 -1
  393. package/package.json +2 -1
  394. package/dist/analysis/code-changes.d.ts +0 -22
  395. package/dist/analysis/code-changes.d.ts.map +0 -1
  396. package/dist/analysis/code-changes.js +0 -141
  397. package/dist/analysis/code-changes.js.map +0 -1
  398. package/dist/analysis/cross-session.d.ts +0 -34
  399. package/dist/analysis/cross-session.d.ts.map +0 -1
  400. package/dist/analysis/cross-session.js +0 -230
  401. package/dist/analysis/cross-session.js.map +0 -1
  402. package/dist/analysis/fix-effectiveness.d.ts +0 -16
  403. package/dist/analysis/fix-effectiveness.d.ts.map +0 -1
  404. package/dist/analysis/fix-effectiveness.js +0 -99
  405. package/dist/analysis/fix-effectiveness.js.map +0 -1
  406. package/dist/analysis/scoring.d.ts +0 -15
  407. package/dist/analysis/scoring.d.ts.map +0 -1
  408. package/dist/analysis/scoring.js +0 -59
  409. package/dist/analysis/scoring.js.map +0 -1
  410. package/dist/analysis/time-analysis.d.ts +0 -22
  411. package/dist/analysis/time-analysis.d.ts.map +0 -1
  412. package/dist/analysis/time-analysis.js +0 -174
  413. package/dist/analysis/time-analysis.js.map +0 -1
  414. package/dist/analysis/verdict-details.d.ts +0 -23
  415. package/dist/analysis/verdict-details.d.ts.map +0 -1
  416. package/dist/analysis/verdict-details.js +0 -59
  417. package/dist/analysis/verdict-details.js.map +0 -1
  418. package/dist/analysis/verification-quality.d.ts +0 -20
  419. package/dist/analysis/verification-quality.d.ts.map +0 -1
  420. package/dist/analysis/verification-quality.js +0 -145
  421. package/dist/analysis/verification-quality.js.map +0 -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/clients/claude/commands/ironbee-analyze.md +0 -42
  447. package/dist/clients/cursor/commands/ironbee-analyze/SKILL.md +0 -48
  448. package/dist/commands/analyze.d.ts +0 -3
  449. package/dist/commands/analyze.d.ts.map +0 -1
  450. package/dist/commands/analyze.js +0 -329
  451. package/dist/commands/analyze.js.map +0 -1
  452. package/dist/commands/claude.d.ts.map +0 -1
  453. package/dist/commands/claude.js.map +0 -1
  454. package/dist/commands/otel.d.ts.map +0 -1
  455. package/dist/commands/otel.js.map +0 -1
  456. package/dist/commands/process-analytics.d.ts +0 -18
  457. package/dist/commands/process-analytics.d.ts.map +0 -1
  458. package/dist/commands/process-analytics.js.map +0 -1
  459. package/dist/commands/statusline-toggle.d.ts.map +0 -1
  460. package/dist/commands/statusline-toggle.js.map +0 -1
  461. package/dist/commands/statusline.d.ts.map +0 -1
  462. package/dist/commands/statusline.js.map +0 -1
  463. package/dist/otel/context/build.d.ts.map +0 -1
  464. package/dist/otel/context/build.js.map +0 -1
  465. package/dist/otel/context/classify.d.ts.map +0 -1
  466. package/dist/otel/context/classify.js.map +0 -1
  467. package/dist/otel/context/extract.d.ts.map +0 -1
  468. package/dist/otel/context/extract.js.map +0 -1
  469. package/dist/otel/context/markers.d.ts.map +0 -1
  470. package/dist/otel/context/markers.js.map +0 -1
  471. package/dist/otel/context/util.d.ts.map +0 -1
  472. package/dist/otel/context/util.js.map +0 -1
  473. package/dist/otel/daemon/ensure.d.ts.map +0 -1
  474. package/dist/otel/daemon/ensure.js.map +0 -1
  475. package/dist/otel/daemon/forward.d.ts.map +0 -1
  476. package/dist/otel/daemon/forward.js.map +0 -1
  477. package/dist/otel/daemon/paths.d.ts.map +0 -1
  478. package/dist/otel/daemon/paths.js.map +0 -1
  479. package/dist/otel/daemon/process.d.ts.map +0 -1
  480. package/dist/otel/daemon/process.js.map +0 -1
  481. package/dist/otel/daemon/reprocess.d.ts.map +0 -1
  482. package/dist/otel/daemon/reprocess.js.map +0 -1
  483. package/dist/otel/log-handler.d.ts.map +0 -1
  484. package/dist/otel/log-handler.js.map +0 -1
  485. /package/dist/analytics/{log.d.ts → claude/log.d.ts} +0 -0
  486. /package/dist/analytics/{transcript.d.ts → claude/transcript.d.ts} +0 -0
  487. /package/dist/analytics/{classifier.d.ts → shared/classifier.d.ts} +0 -0
  488. /package/dist/analytics/{errors.d.ts → shared/errors.d.ts} +0 -0
  489. /package/dist/analytics/{errors.js → shared/errors.js} +0 -0
  490. /package/dist/analytics/{types.js → shared/types.js} +0 -0
  491. /package/dist/otel/{context → claude/context}/classify.d.ts +0 -0
  492. /package/dist/otel/{context → claude/context}/classify.js +0 -0
  493. /package/dist/otel/{context → claude/context}/extract.js +0 -0
  494. /package/dist/otel/{context → claude/context}/markers.d.ts +0 -0
  495. /package/dist/otel/{context → claude/context}/util.d.ts +0 -0
  496. /package/dist/otel/{context → claude/context}/util.js +0 -0
  497. /package/dist/otel/{daemon → claude/daemon}/paths.d.ts +0 -0
  498. /package/dist/otel/{daemon → claude/daemon}/paths.js +0 -0
  499. /package/dist/otel/{daemon → claude/daemon}/reprocess.d.ts +0 -0
  500. /package/dist/otel/{log-handler.d.ts → claude/log-handler.d.ts} +0 -0
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ /**
3
+ * Codex — PostToolUse hook adapter (matcher: `.*`)
4
+ *
5
+ * Two routes per tool:
6
+ * - **devtools MCP tools** (mcp__{browser,node,backend}-devtools__*): record
7
+ * a `tool_call` entry in actions.jsonl (verify-gate dep), update recording
8
+ * state for browser-devtools. NOT queue-submitted — devtools MCP server
9
+ * self-ships its own tool_call events to the collector.
10
+ * - **All other tools**: submit a `send_event` job to the queue with a
11
+ * whitelisted `tool_input` projection.
12
+ *
13
+ * Codex-specific: derive `duration` from the timing stash written by
14
+ * `track-action-pre.ts` (Codex hook stdin does not carry duration_ms).
15
+ *
16
+ * Codex has NO PostToolUseFailure event — failures fold into PostToolUse
17
+ * with the error embedded in `tool_response`. We detect failure
18
+ * heuristically (looking for `isError: true` on MCP responses); the
19
+ * `failure_type` / `is_interrupt` fields stay null (Codex provides no
20
+ * structured failure schema).
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.run = run;
24
+ const actions_1 = require("../../../hooks/core/actions");
25
+ const ids_1 = require("../../../import/ids");
26
+ const session_state_1 = require("../../../hooks/core/session-state");
27
+ const tool_use_stash_1 = require("../../../hooks/core/tool-use-stash");
28
+ const config_1 = require("../../../lib/config");
29
+ const logger_1 = require("../../../lib/logger");
30
+ const output_1 = require("../../../lib/output");
31
+ const stdin_1 = require("../../../lib/stdin");
32
+ const queue_1 = require("../../../queue");
33
+ const util_1 = require("../util");
34
+ const RECORDING_START_BARE = "bdt_content_start-recording";
35
+ const RECORDING_STOP_BARE = "bdt_content_stop-recording";
36
+ function safeStringifyBytes(value) {
37
+ if (value === undefined || value === null) {
38
+ return 0;
39
+ }
40
+ // String values (apply_patch + exec_command's custom_tool_call_output
41
+ // wire shape) — return the RAW UTF-8 byte count, not the JSON-encoded
42
+ // size. Import (`import/codex/runner.ts:318`) uses Buffer.byteLength
43
+ // directly on the string. Without this branch, live ships
44
+ // `tool_response_size = utf8(JSON.stringify("foo")) = utf8('"foo"') = 5`
45
+ // while import ships `utf8("foo") = 3` — 5-15% systematic inflation
46
+ // on every Codex tool_call with string tool_response, broken cross-
47
+ // pipeline parity for size aggregates.
48
+ if (typeof value === "string") {
49
+ try {
50
+ return Buffer.byteLength(value, "utf8");
51
+ }
52
+ catch {
53
+ return 0;
54
+ }
55
+ }
56
+ try {
57
+ return Buffer.byteLength(JSON.stringify(value), "utf8");
58
+ }
59
+ catch {
60
+ return 0;
61
+ }
62
+ }
63
+ function detectFailure(toolResponse) {
64
+ if (toolResponse === undefined || toolResponse === null) {
65
+ return { isError: false, errorText: undefined };
66
+ }
67
+ if (typeof toolResponse === "object" && toolResponse !== null) {
68
+ const rec = toolResponse;
69
+ if (rec.isError === true || rec.is_error === true) {
70
+ const msg = rec.error ?? rec.message ?? rec.errorMessage;
71
+ return { isError: true, errorText: typeof msg === "string" ? msg : JSON.stringify(rec).slice(0, 500) };
72
+ }
73
+ }
74
+ // String tool_response (apply_patch + exec_command custom_tool_call_output
75
+ // shape). Same regex set as import's `looksLikeError` (`runner.ts:340-358`)
76
+ // + projection's `classifyOutputError`. Without this branch, every failed
77
+ // apply_patch / exec_command live emits `tool_call.error: undefined`
78
+ // despite real failure text. Cross-pipeline parity: import correctly
79
+ // detects these → live must too.
80
+ if (typeof toolResponse === "string") {
81
+ const t = toolResponse;
82
+ if (/(?:^|\n)Process exited with code [1-9]/.test(t)
83
+ || /^Exit code:\s*[1-9]/m.test(t)
84
+ || /apply_patch verification failed/i.test(t)
85
+ || /failed to find expected lines/i.test(t)
86
+ || /^\s*Error\b/.test(t)
87
+ || /(?:^|\n)\[Request interrupted by user\]/.test(t)
88
+ // Three patterns the analytics-side classifier counts under
89
+ // `errors.tool_error_categories.{file_changed,file_too_large,file_not_found}`
90
+ // but live + import previously missed — `session_analytics.errors.tool_errors_total`
91
+ // incremented while the per-call `tool_call.error` shipped
92
+ // undefined. Backend joins `Σ tool_call where error IS NOT NULL`
93
+ // vs the session aggregate then diverged on every session with
94
+ // a `cat missing.txt` / stale-read / oversized-read.
95
+ || /modified since (?:last )?read|stale read/i.test(t)
96
+ || /file (?:is )?too large|exceeds/i.test(t)
97
+ || /file not found|No such file or directory|does not exist/i.test(t)) {
98
+ return { isError: true, errorText: t.slice(0, 500) };
99
+ }
100
+ }
101
+ return { isError: false, errorText: undefined };
102
+ }
103
+ /**
104
+ * Read `_metadata.toolCallId` from a tool_input (PreToolUse injection by
105
+ * require-verification.ts). Used as the deterministic event.id so live + MCP
106
+ * server-shipped + import all collide cleanly on `(session_id, id)`.
107
+ * Validates UUID-shape so a corrupt / forged rollout can't poison the wire id.
108
+ */
109
+ function extractMetadataToolCallId(toolInput) {
110
+ if (toolInput === null || typeof toolInput !== "object") {
111
+ return undefined;
112
+ }
113
+ const meta = toolInput._metadata;
114
+ if (meta === null || typeof meta !== "object") {
115
+ return undefined;
116
+ }
117
+ const cid = meta.toolCallId;
118
+ if (typeof cid !== "string") {
119
+ return undefined;
120
+ }
121
+ // UUID v4 shape check — same validation `import/codex/events/tool-call.ts`
122
+ // applies. Defensive against malformed rollouts.
123
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(cid)) {
124
+ return undefined;
125
+ }
126
+ return cid;
127
+ }
128
+ function deriveDurationMs(sessionId, toolUseId) {
129
+ const stashed = (0, tool_use_stash_1.consumeToolUseData)(sessionId, toolUseId);
130
+ if (!stashed?.start_ns) {
131
+ return null;
132
+ }
133
+ try {
134
+ const delta = process.hrtime.bigint() - BigInt(stashed.start_ns);
135
+ return Number(delta / 1000000n);
136
+ }
137
+ catch (e) {
138
+ logger_1.logger.debug(`failed to derive duration from stash: ${e}`);
139
+ return null;
140
+ }
141
+ }
142
+ async function run(projectDir) {
143
+ const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
144
+ const sessionId = input.session_id ?? "default";
145
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
146
+ const actionsFile = `${sessionDir}/actions.jsonl`;
147
+ (0, logger_1.setLogFile)(`${sessionDir}/session.log`);
148
+ const rawToolName = input.tool_name ?? "";
149
+ const toolUseId = input.tool_use_id ?? "";
150
+ // tool_input is Record | string | undefined — preserve as-is for size
151
+ // calculation; downstream whitelist (extractCodexToolInput) handles both.
152
+ const toolInput = input.tool_input;
153
+ // Strip `_metadata` from tool_input before recording — mirrors Claude
154
+ // (clients/claude/hooks/track-action.ts) and Cursor
155
+ // (clients/cursor/hooks/track-action.ts) live behavior, and matches the
156
+ // canonical contract documented in `docs/claude-md/events.md`:
157
+ // "_metadata is stripped from tool_input before writing to actions.jsonl"
158
+ // Without this, the Codex devtools branch ships the internal correlation
159
+ // block on the wire — `traceState`, `traceId`, `userEmail`, `toolCallId`,
160
+ // AND `collectorApiKey` (a secret) — embedded in `tool_input` for every
161
+ // devtools tool_call event. Size calculations still use the raw `toolInput`
162
+ // so the projected vs raw input/response sizing stays unchanged.
163
+ const toolInputAsRecord = toolInput && typeof toolInput === "object"
164
+ ? { ...toolInput, _metadata: undefined }
165
+ : undefined;
166
+ const toolResponse = input.tool_response;
167
+ const mcpServer = (0, util_1.extractCodexMcpServer)(rawToolName);
168
+ const isDevToolsTool = mcpServer === "browser-devtools" ||
169
+ mcpServer === "node-devtools" ||
170
+ mcpServer === "backend-devtools";
171
+ const durationMs = deriveDurationMs(sessionId, toolUseId);
172
+ const failure = detectFailure(toolResponse);
173
+ const classified = (0, util_1.classifyCodexTool)(rawToolName);
174
+ // ─── DevTools branch — record in actions.jsonl, update recording state ───
175
+ if (isDevToolsTool) {
176
+ const bareName = classified.tool_name;
177
+ if (bareName === RECORDING_START_BARE) {
178
+ (0, session_state_1.setRecordingActive)(sessionDir, true);
179
+ }
180
+ else if (bareName === RECORDING_STOP_BARE) {
181
+ (0, session_state_1.setRecordingActive)(sessionDir, false);
182
+ }
183
+ const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
184
+ // `activity_id` is ActivityAwareEvent-required (`string` typing), but the
185
+ // collector schema treats it as a non-empty UUID when present — emitting
186
+ // `activity_id: ""` would either FK-fail or be schema-rejected (same
187
+ // contract as round-27's fix_id treatment in clear-verdict.ts). Live
188
+ // Claude/Cursor use `activityId!` so JSON.stringify drops the key when
189
+ // undefined; Codex was the outlier shipping literal "". Cast and
190
+ // conditionally set so the wire field is OMITTED rather than empty.
191
+ const event = {
192
+ ...(0, actions_1.baseFields)(actionsFile),
193
+ type: "tool_call",
194
+ timestamp: Date.now(),
195
+ tool_type: classified.tool_type,
196
+ tool_name: classified.tool_name,
197
+ mcp_server: classified.mcp_server ?? mcpServer,
198
+ tool_input: toolInputAsRecord,
199
+ // Measure POST-`_metadata`-strip — Codex rollout records the
200
+ // model's raw function_call.arguments WITHOUT IronBee's
201
+ // injected `_metadata` block, so import correctly measures the
202
+ // smaller post-strip byte count. Live previously measured the
203
+ // hook-stdin `toolInput` BEFORE strip, inflating
204
+ // `tool_input_size` by ~700 bytes per devtools tool_call vs
205
+ // import — backend `(session_id, id)` LWW dedup then flipped
206
+ // the field between the inflated live value and the correct
207
+ // import value on every re-import. Empirically verified on
208
+ // the real-corpus (121 Codex devtools function_calls scanned:
209
+ // zero carry `_metadata` in the rollout).
210
+ tool_input_size: safeStringifyBytes(toolInputAsRecord),
211
+ // Cross-client parity (Claude+Cursor zero `tool_response_size` on
212
+ // failure — see clients/claude/hooks/track-action.ts:210 +
213
+ // import/claude/events/tool-call.ts:138-140). The documented
214
+ // contract: "live treats `tool_response` as omitted on failure
215
+ // and reports `tool_response_size: 0`". Codex was the outlier
216
+ // shipping the error blob byte count (hundreds of bytes per
217
+ // failed call) — backend cross-client `AVG(tool_response_size)`
218
+ // partitioned by failure status was off for Codex.
219
+ tool_response_size: failure.isError ? 0 : safeStringifyBytes(toolResponse),
220
+ duration: durationMs,
221
+ };
222
+ if (activityId) {
223
+ event.activity_id = activityId;
224
+ }
225
+ // Live↔import event.id parity. Per CLAUDE.md events.md spec: "live
226
+ // and import events collide cleanly on (session_id, id)". For
227
+ // devtools tools, prefer `_metadata.toolCallId` (the UUID baked
228
+ // into tool_input by require-verification — the same id the MCP
229
+ // server uses on its own emitted tool_call events). Falls back to
230
+ // deterministic-from-tool_use_id derivation so re-import dedups
231
+ // without duplicating rows. Without this override, every devtools
232
+ // tool_call in the warehouse duplicates per re-import.
233
+ const metadataToolCallId = extractMetadataToolCallId(toolInput);
234
+ if (metadataToolCallId !== undefined) {
235
+ event.id = metadataToolCallId;
236
+ }
237
+ else if (toolUseId.length > 0) {
238
+ event.id = (0, ids_1.deriveToolCallEventIdFromToolUseId)(sessionId, toolUseId);
239
+ }
240
+ // Claude-parity: tool_use_id is the host-provided join key the
241
+ // devtools MCP server uses on its own emitted tool_call events.
242
+ // Without it, the collector cannot correlate Codex devtools
243
+ // tool_call records (this event) with the MCP-side events. Live-
244
+ // verified in Claude track-action.ts:204; import sets it too at
245
+ // import/codex/events/tool-call.ts:87.
246
+ if (toolUseId) {
247
+ event.tool_use_id = toolUseId;
248
+ }
249
+ const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
250
+ if (verificationId) {
251
+ event.verification_id = verificationId;
252
+ }
253
+ const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
254
+ if (traceId) {
255
+ event.trace_id = traceId;
256
+ }
257
+ if (failure.isError) {
258
+ event.error = failure.errorText;
259
+ }
260
+ await (0, actions_1.appendAction)(actionsFile, event);
261
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
262
+ return;
263
+ }
264
+ // ─── Non-devtools branch — queue submit for send_event ───
265
+ if (!(0, config_1.isJobQueueEnabled)(projectDir)) {
266
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
267
+ return;
268
+ }
269
+ const activityId = (0, session_state_1.getActiveActivityId)(sessionDir);
270
+ const projectedInput = (0, util_1.extractCodexToolInput)(rawToolName, toolInput);
271
+ const toolInputSize = safeStringifyBytes(toolInput);
272
+ // Cross-client parity — see devtools branch above for full rationale.
273
+ const toolResponseSize = failure.isError ? 0 : safeStringifyBytes(toolResponse);
274
+ // Same `activity_id` rule as the devtools branch above — omit field
275
+ // when no activity is open instead of shipping literal "".
276
+ const event = {
277
+ ...(0, actions_1.baseFields)(actionsFile),
278
+ type: "tool_call",
279
+ timestamp: Date.now(),
280
+ tool_type: classified.tool_type,
281
+ tool_name: classified.tool_name || (0, util_1.normalizeCodexToolName)(rawToolName),
282
+ mcp_server: classified.mcp_server,
283
+ tool_input: projectedInput,
284
+ tool_input_size: toolInputSize,
285
+ tool_response_size: toolResponseSize,
286
+ duration: durationMs,
287
+ };
288
+ if (activityId) {
289
+ event.activity_id = activityId;
290
+ }
291
+ // Non-devtools branch: same live↔import event.id parity. No
292
+ // `_metadata.toolCallId` for non-devtools (require-verification only
293
+ // injects it for `mcp__*-devtools__*`), so use the deterministic
294
+ // tool_use_id formula. Without this, every apply_patch / exec_command
295
+ // duplicates in the warehouse on re-import.
296
+ if (toolUseId.length > 0) {
297
+ event.id = (0, ids_1.deriveToolCallEventIdFromToolUseId)(sessionId, toolUseId);
298
+ }
299
+ // Non-devtools branch also missing tool_use_id — same collector-join
300
+ // semantic. Both branches set when the hook provides it.
301
+ if (toolUseId) {
302
+ event.tool_use_id = toolUseId;
303
+ }
304
+ // Verification correlation parity with the devtools branch (and with
305
+ // Claude's track-action — see `clients/claude/hooks/track-action.ts:211`
306
+ // where `verification_id` / `trace_id` ride the SAME `entry` envelope
307
+ // through BOTH the devtools `appendAction` path AND the non-devtools
308
+ // queue `submitEvent` path). Codex previously set these only on the
309
+ // devtools branch, so a Codex session whose agent ran `apply_patch` /
310
+ // `exec_command` / `read_file` etc. during an active verification
311
+ // cycle shipped `tool_call` events with `verification_id` /
312
+ // `trace_id` MISSING, while the IDENTICAL Claude session shipped them
313
+ // populated. Backend cross-tool correlation (which native tools ran
314
+ // during this cycle?) broke cross-client.
315
+ const verificationId = (0, session_state_1.getActiveVerificationId)(sessionDir);
316
+ if (verificationId) {
317
+ event.verification_id = verificationId;
318
+ }
319
+ const traceId = (0, session_state_1.getActiveTraceId)(sessionDir);
320
+ if (traceId) {
321
+ event.trace_id = traceId;
322
+ }
323
+ if (failure.isError) {
324
+ event.error = failure.errorText;
325
+ }
326
+ try {
327
+ (0, queue_1.submit)(projectDir, sessionId, queue_1.SEND_EVENT_TYPE, event);
328
+ }
329
+ catch (e) {
330
+ if (e instanceof queue_1.JobTooLargeError) {
331
+ // Wire form already strips `tool_response` upstream (only
332
+ // `tool_response_size` rides on the event), so overflow here
333
+ // means something pathological — a giant `error` string from
334
+ // exec_command stderr, or an unusually large `tool_input`
335
+ // (projected via the whitelist but still oversized for some
336
+ // long file path / pattern). Re-submitting with an
337
+ // `tool_response_omitted: true` flag (the old retry) was a
338
+ // no-op: nothing got smaller, the same `JobTooLargeError`
339
+ // fired again, and the flag never made it onto the wire. Drop
340
+ // cleanly here — same semantics as Claude/Cursor's
341
+ // `submitEvent` paths in clients/{claude,cursor}/hooks/track-action.ts.
342
+ logger_1.logger.debug(`track-action: wire event too large for tool_call ${rawToolName}; dropping`);
343
+ }
344
+ else {
345
+ logger_1.logger.debug(`queue submit failed for tool_call ${rawToolName}: ${e}`);
346
+ }
347
+ }
348
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
349
+ }
350
+ //# sourceMappingURL=track-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"track-action.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/track-action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Codex — Stop hook adapter (verification-enabled mode)
3
+ *
4
+ * Runs the verify-gate; on block, returns `decision: "block"` + `reason`
5
+ * (Codex turns the reason into a continuation prompt → mechanically forces
6
+ * the agent back into the loop, same semantic as Claude's exit-2-with-stderr
7
+ * and Cursor's followup_message).
8
+ *
9
+ * ALSO writes a tentative `session_end` event ("Stop-as-checkpoint" pattern)
10
+ * with a deterministic id derived from session_id. Codex has no `SessionEnd`
11
+ * hook (`/quit` fires zero hooks), so every Stop is a potential session-end
12
+ * candidate; backend `(session_id, id)` dedup keeps only the latest snapshot.
13
+ */
14
+ export declare function run(projectDir: string): Promise<void>;
15
+ //# sourceMappingURL=verify-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-gate.d.ts","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/verify-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoBH,wBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF3D"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * Codex — Stop hook adapter (verification-enabled mode)
4
+ *
5
+ * Runs the verify-gate; on block, returns `decision: "block"` + `reason`
6
+ * (Codex turns the reason into a continuation prompt → mechanically forces
7
+ * the agent back into the loop, same semantic as Claude's exit-2-with-stderr
8
+ * and Cursor's followup_message).
9
+ *
10
+ * ALSO writes a tentative `session_end` event ("Stop-as-checkpoint" pattern)
11
+ * with a deterministic id derived from session_id. Codex has no `SessionEnd`
12
+ * hook (`/quit` fires zero hooks), so every Stop is a potential session-end
13
+ * candidate; backend `(session_id, id)` dedup keeps only the latest snapshot.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.run = run;
17
+ const actions_1 = require("../../../hooks/core/actions");
18
+ const activity_1 = require("../../../hooks/core/activity");
19
+ const verify_gate_1 = require("../../../hooks/core/verify-gate");
20
+ const config_1 = require("../../../lib/config");
21
+ const logger_1 = require("../../../lib/logger");
22
+ const output_1 = require("../../../lib/output");
23
+ const stdin_1 = require("../../../lib/stdin");
24
+ const queue_1 = require("../../../queue");
25
+ const spawn_1 = require("../../../analytics/codex/spawn");
26
+ const session_state_1 = require("../../../hooks/core/session-state");
27
+ const util_1 = require("../util");
28
+ async function run(projectDir) {
29
+ const input = (0, util_1.parseCodexHookStdin)((0, stdin_1.readStdin)());
30
+ const sessionId = input.session_id ?? "default";
31
+ (0, logger_1.setLogFile)(`${projectDir}/.ironbee/sessions/${sessionId}/session.log`);
32
+ const sessionDir = `${projectDir}/.ironbee/sessions/${sessionId}`;
33
+ const actionsFile = `${sessionDir}/actions.jsonl`;
34
+ const config = (0, config_1.loadConfig)(projectDir);
35
+ const result = await (0, verify_gate_1.runVerifyGate)({
36
+ sessionId,
37
+ sessionDir,
38
+ actionsFile,
39
+ verdictFile: `${sessionDir}/verdict.json`,
40
+ maxRetries: (0, config_1.getMaxRetries)(config),
41
+ config,
42
+ projectDir,
43
+ });
44
+ // Snapshot activity_id BEFORE endActivity clears it. The detached
45
+ // analytics worker below uses this for `session_status.activity_id`
46
+ // correlation — without the pre-capture, `readState` after endActivity
47
+ // reads `activeActivityId: undefined` and the wire field ships as
48
+ // empty string. Hits 100% of Codex sessions with verification enabled.
49
+ const preStopActivityId = (0, session_state_1.readState)(sessionDir)?.activeActivityId ?? "";
50
+ if (result.action === "allow") {
51
+ await (0, activity_1.endActivity)({ sessionDir, actionsFile });
52
+ }
53
+ // Stop-as-checkpoint: write tentative session_end with deterministic id.
54
+ // Backend dedup `(session_id, id)` keeps the latest snapshot.
55
+ const now = Date.now();
56
+ const checkpoint = {
57
+ ...(0, actions_1.baseFields)(actionsFile),
58
+ id: (0, actions_1.deterministicSessionEndId)(sessionId),
59
+ type: "session_end",
60
+ timestamp: now,
61
+ session_id: sessionId,
62
+ duration: (0, actions_1.findDurationSinceLastAction)(actionsFile, "session_start", now),
63
+ reason: "checkpoint",
64
+ };
65
+ await (0, actions_1.appendAction)(actionsFile, checkpoint);
66
+ // Codex analytics: api_request + session_status + session_analytics —
67
+ // all emitted by the detached worker (mirror of Claude's
68
+ // spawnDetachedAnalyticsWorker pattern) so the Stop hook returns in
69
+ // ~ms. session_turn_analytics + session_context are intentionally out
70
+ // of scope on Codex. The worker reads new rollout bytes incrementally
71
+ // via state.json cursors. Failures inside the worker land in
72
+ // session.log; the Stop hook is never blocked.
73
+ try {
74
+ const state = (0, session_state_1.readState)(sessionDir);
75
+ (0, spawn_1.spawnDetachedCodexAnalyticsWorker)({
76
+ projectDir,
77
+ sessionId,
78
+ rolloutPath: input.transcript_path,
79
+ userEmail: state?.userEmail ?? undefined,
80
+ usageType: state?.usageType ?? undefined,
81
+ usagePlan: state?.usagePlan ?? undefined,
82
+ activityId: preStopActivityId,
83
+ });
84
+ }
85
+ catch (e) {
86
+ logger_1.logger.debug(`codex analytics spawn failed: ${e instanceof Error ? e.message : e}`);
87
+ }
88
+ (0, queue_1.flushInBackground)(projectDir, sessionId);
89
+ // Per-Stop straggler retry — re-attempt any snapshots left behind by a
90
+ // prior TransientError. Especially important for Codex: there's no native
91
+ // SessionEnd hook (`/quit` fires zero hooks per #22858), so without this
92
+ // transient-error snapshots accumulate forever and only manual
93
+ // `ironbee queue drain` recovers them.
94
+ (0, queue_1.flushStragglersInBackground)(projectDir, sessionId);
95
+ logger_1.logger.debug(`verify-gate: ${result.action}`);
96
+ if (result.action === "block") {
97
+ (0, output_1.writeAndExit)(JSON.stringify({
98
+ decision: "block",
99
+ reason: result.message ?? "Verification required.",
100
+ }), 0);
101
+ return;
102
+ }
103
+ (0, output_1.writeAndExit)(JSON.stringify({}), 0);
104
+ }
105
+ //# sourceMappingURL=verify-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-gate.js","sourceRoot":"","sources":["../../../../src/clients/codex/hooks/verify-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Codex CLI client adapter.
3
+ *
4
+ * Targets interactive Codex TUI (the developer-workstation surface).
5
+ * `codex exec` non-interactive mode is OUT OF SCOPE — hooks don't fire there
6
+ * per regression #24211.
7
+ *
8
+ * Install writes USER-LEVEL artifacts (`~/.codex/hooks.json`,
9
+ * `~/.codex/config.toml`) to bypass Codex's project-trust gate, plus
10
+ * PROJECT-LEVEL guidance (`AGENTS.md` block, `.agents/skills/<name>/SKILL.md`).
11
+ * Uninstall is symmetric — strips IronBee blocks, preserves user content.
12
+ */
13
+ import { IClient } from "../base";
14
+ import { IronBeeConfig } from "../../lib/config";
15
+ export declare class CodexClient implements IClient {
16
+ readonly name: string;
17
+ detect(projectDir: string): boolean;
18
+ resolveProjectDir(): string;
19
+ install(projectDir: string, config?: IronBeeConfig): void;
20
+ uninstall(projectDir: string): void;
21
+ private cleanupArtifacts;
22
+ runVerifyGate(projectDir: string): Promise<void>;
23
+ runActivityEnd(projectDir: string): Promise<void>;
24
+ runSessionStart(projectDir: string): Promise<void>;
25
+ runActivityStart(projectDir: string): Promise<void>;
26
+ runRequireVerification(projectDir: string): Promise<void>;
27
+ runRequireVerdict(projectDir: string): Promise<void>;
28
+ runClearVerdict(projectDir: string): Promise<void>;
29
+ runTrackAction(projectDir: string): Promise<void>;
30
+ runTrackActionMonitor(projectDir: string): Promise<void>;
31
+ runTrackActionPre(projectDir: string): Promise<void>;
32
+ runSessionEnd(_projectDir: string): Promise<void>;
33
+ private mergeHooksConfig;
34
+ private removeIronBeeHooks;
35
+ private maybeDeleteEmptyHooks;
36
+ private mergeConfigToml;
37
+ private removeIronBeeMcpServers;
38
+ private writeAgentsMdBlock;
39
+ private writeSkills;
40
+ private removeDir;
41
+ }
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/codex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAKlC,OAAO,EAGH,aAAa,EAOhB,MAAM,kBAAkB,CAAC;AA8E1B,qBAAa,WAAY,YAAW,OAAO;IACvC,SAAgB,IAAI,EAAE,MAAM,CAAW;IAEhC,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAMnC,iBAAiB,IAAI,MAAM;IAI3B,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI;IAiDzD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK1C,OAAO,CAAC,gBAAgB;IAiCX,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGhD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGjD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGlD,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGnD,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGzD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGpD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGlD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGjD,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGxD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGpD,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9D,OAAO,CAAC,gBAAgB;IAmFxB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,SAAS;CASpB"}