@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,202 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Codex Import Discovery
4
+ *
5
+ * Resolves an `ImportScope` to a list of `ImportTarget`s by walking
6
+ * `~/.codex/sessions/YYYY/MM/DD/rollout-<ISO>-<UUID>.jsonl`.
7
+ *
8
+ * Unlike Claude (encoded project folder under ~/.claude/projects/), Codex
9
+ * stores rollouts flat by date. Project association is recovered by
10
+ * reading the first line's `session_meta.payload.cwd`. So:
11
+ * - `current-project` → scan every rollout, keep those whose first-line
12
+ * cwd matches the current cwd
13
+ * - `projects <paths>` → scan every rollout, keep those whose first-line
14
+ * cwd matches any of the supplied paths
15
+ * - `all-projects` → scan every rollout, project comes from each rollout's
16
+ * own first-line cwd (one project per rollout)
17
+ * - `transcript <path>` → single file, project from its session_meta line
18
+ *
19
+ * Discovery does NOT apply the time-range filter — `filter.ts` does that
20
+ * after a session is found.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.findCodexTranscripts = findCodexTranscripts;
24
+ const fs_1 = require("fs");
25
+ const path_1 = require("path");
26
+ const logger_1 = require("../../lib/logger");
27
+ const actions_1 = require("../../hooks/core/actions");
28
+ const transcript_1 = require("../../analytics/codex/transcript");
29
+ /**
30
+ * Resolve the scope flag to a list of candidate transcripts. Each returned
31
+ * `ImportTarget` is fully populated EXCEPT that no time-range filter has
32
+ * been applied yet — callers run `filter.ts` over this list.
33
+ *
34
+ * Codex's flat-by-date layout means every scope (except `transcript`) does
35
+ * a full walk + per-file first-line read. That's O(rollouts) per import
36
+ * invocation — acceptable: rollouts are < 10K per machine for a typical
37
+ * dev box, and the first-line read peeks at ≤ 4 KB.
38
+ */
39
+ function findCodexTranscripts(scope) {
40
+ if (scope.kind === "transcript") {
41
+ const t = buildSingleTranscriptTarget(scope.path);
42
+ return t !== null ? [t] : [];
43
+ }
44
+ if (!(0, fs_1.existsSync)((0, transcript_1.codexSessionsRoot)())) {
45
+ return [];
46
+ }
47
+ // Canonicalize comparison paths via realpathSync — macOS resolves
48
+ // `/var/folders/...` → `/private/var/folders/...` and session_meta.cwd
49
+ // typically holds the realpath form; without canonicalization a
50
+ // symlinked `--projects /tmp/proj` silently returns zero targets when
51
+ // Codex stored `/private/tmp/proj`. Same for cwd on `current-project`.
52
+ const allowProjects = scope.kind === "current-project"
53
+ ? new Set([tryRealpath(process.cwd())])
54
+ : scope.kind === "projects"
55
+ ? new Set(scope.paths.map((p) => tryRealpath((0, path_1.resolve)(p))))
56
+ : null; // all-projects: accept every cwd
57
+ const out = [];
58
+ for (const rolloutPath of (0, transcript_1.walkAllCodexRollouts)()) {
59
+ const t = buildTargetFromRollout(rolloutPath, allowProjects);
60
+ if (t !== null) {
61
+ out.push(t);
62
+ }
63
+ }
64
+ return out;
65
+ }
66
+ function buildSingleTranscriptTarget(path) {
67
+ const absPath = (0, path_1.isAbsolute)(path) ? path : (0, path_1.resolve)(path);
68
+ if (!(0, fs_1.existsSync)(absPath)) {
69
+ logger_1.logger.debug(`codex import discovery: --transcript ${absPath} doesn't exist`);
70
+ return null;
71
+ }
72
+ if (!absPath.endsWith(".jsonl")) {
73
+ logger_1.logger.debug(`codex import discovery: --transcript ${absPath} is not a .jsonl file`);
74
+ return null;
75
+ }
76
+ // No allow-list filter for single-transcript mode — caller explicitly
77
+ // asked for this file, so we accept whatever cwd the rollout has.
78
+ return buildTargetFromRollout(absPath, null);
79
+ }
80
+ function tryRealpath(p) {
81
+ try {
82
+ return (0, fs_1.realpathSync)(p);
83
+ }
84
+ catch {
85
+ // Path doesn't exist on this machine (deleted, never created, or
86
+ // typo). Fall back to the lexical form — the allow-list will
87
+ // simply never match, which is the desired behavior.
88
+ return p;
89
+ }
90
+ }
91
+ function buildTargetFromRollout(rolloutPath, allowProjects) {
92
+ const sessionId = (0, transcript_1.sessionIdFromRolloutPath)(rolloutPath);
93
+ if (sessionId === null) {
94
+ logger_1.logger.debug(`codex import discovery: filename shape mismatch ${rolloutPath} — skipping`);
95
+ return null;
96
+ }
97
+ const meta = peekSessionMeta(rolloutPath);
98
+ if (meta === null) {
99
+ logger_1.logger.debug(`codex import discovery: ${rolloutPath} has no session_meta in header — skipping`);
100
+ return null;
101
+ }
102
+ if (allowProjects !== null && !allowProjects.has(meta.cwd)) {
103
+ return null;
104
+ }
105
+ let mtimeMs;
106
+ let sizeBytes;
107
+ try {
108
+ const s = (0, fs_1.statSync)(rolloutPath);
109
+ mtimeMs = s.mtimeMs;
110
+ sizeBytes = s.size;
111
+ }
112
+ catch (e) {
113
+ logger_1.logger.debug(`codex import discovery: stat(${rolloutPath}) failed: ${e instanceof Error ? e.message : e}`);
114
+ return null;
115
+ }
116
+ const sessionStartMs = Date.parse(meta.timestamp);
117
+ if (!Number.isFinite(sessionStartMs)) {
118
+ logger_1.logger.debug(`codex import discovery: ${rolloutPath} session_meta has unparseable timestamp ${meta.timestamp} — skipping`);
119
+ return null;
120
+ }
121
+ return {
122
+ client: "codex",
123
+ sessionId,
124
+ transcriptPath: rolloutPath,
125
+ projectDir: meta.cwd,
126
+ // Use git-aware resolveProjectName (Claude-parity) so the import
127
+ // matches the live emit's project_name. Plain basename diverges when
128
+ // a session was launched from a subdir or when the local dir name
129
+ // differs from the git remote name — backend would then see "same
130
+ // session, two different project labels" depending on which path
131
+ // (live vs import) wrote last. See `analytics/codex/emit.ts`
132
+ // for the same fix on the live side.
133
+ projectName: (0, actions_1.resolveProjectName)(meta.cwd),
134
+ sessionStartMs,
135
+ mtimeMs,
136
+ sizeBytes,
137
+ };
138
+ }
139
+ /**
140
+ * Read the first ≤ 4 KB of the rollout, parse the first complete line as
141
+ * the session_meta entry, and pull out `cwd` + `timestamp`. Returns null
142
+ * when the first line isn't a session_meta or the read fails. Sized to be
143
+ * cheap (one syscall + small alloc) so a full-store walk stays fast.
144
+ */
145
+ function peekSessionMeta(rolloutPath) {
146
+ const READ_CAP = 4 * 1024;
147
+ let fd;
148
+ try {
149
+ fd = (0, fs_1.openSync)(rolloutPath, "r");
150
+ }
151
+ catch {
152
+ return null;
153
+ }
154
+ let firstLine;
155
+ try {
156
+ const buf = Buffer.alloc(READ_CAP);
157
+ const n = (0, fs_1.readSync)(fd, buf, 0, READ_CAP, 0);
158
+ const head = buf.subarray(0, n).toString("utf-8");
159
+ const newlineIdx = head.indexOf("\n");
160
+ firstLine = newlineIdx === -1 ? head : head.slice(0, newlineIdx);
161
+ }
162
+ catch {
163
+ // Finally runs in all paths — closeSync below handles cleanup.
164
+ // No inner close here (it would double-close → EBADF).
165
+ return null;
166
+ }
167
+ finally {
168
+ try {
169
+ (0, fs_1.closeSync)(fd);
170
+ }
171
+ catch { /* ignore */ }
172
+ }
173
+ if (firstLine.length === 0) {
174
+ return null;
175
+ }
176
+ let parsed;
177
+ try {
178
+ parsed = JSON.parse(firstLine);
179
+ }
180
+ catch {
181
+ return null;
182
+ }
183
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
184
+ return null;
185
+ }
186
+ const obj = parsed;
187
+ if (obj.type !== "session_meta") {
188
+ return null;
189
+ }
190
+ const payload = obj.payload;
191
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
192
+ return null;
193
+ }
194
+ const p = payload;
195
+ const cwd = p.cwd;
196
+ const timestamp = p.timestamp ?? obj.timestamp;
197
+ if (typeof cwd !== "string" || cwd.length === 0 || typeof timestamp !== "string" || timestamp.length === 0) {
198
+ return null;
199
+ }
200
+ return { cwd, timestamp };
201
+ }
202
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/import/codex/discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * IronBee CLI — Codex import file_change derivation.
3
+ *
4
+ * One `file_change` event per file entry inside each `apply_patch`
5
+ * function_call body. Parses the patch via the SAME `parseApplyPatchBody`
6
+ * that the live `clear-verdict` hook uses, so live and import agree
7
+ * byte-for-byte on operation + line counts.
8
+ *
9
+ * Filtered by the project's `verifyPatterns` config (a Write of `foo.test.ts`
10
+ * generates no event when the verify cycle excludes test files).
11
+ *
12
+ * `changeset` parity: live emits a hunks-only V4A per-file slice as the
13
+ * captureChangeset FALLBACK (clear-verdict.ts:284-285 — used when the
14
+ * PreToolUse stash is missing or the unified-diff build fails). The same
15
+ * `e.body` slice is available offline from `parseApplyPatchBody`. When the
16
+ * operator has `fileChange.captureChangeset: true` we emit it here too —
17
+ * without parity, re-import overwrites the live `changeset` field with
18
+ * `undefined` via `(session_id, id)` latest-wins dedup. We deliberately
19
+ * skip the unified-diff primary path: that requires the prior file content
20
+ * which import predates (working tree has moved on).
21
+ */
22
+ import { FileChangeAction } from "../../../hooks/core/actions";
23
+ export interface BuildCodexFileChangeOpts {
24
+ sessionId: string;
25
+ projectName: string;
26
+ projectDir: string;
27
+ /** Parent turn's activity_id. */
28
+ activityId: string;
29
+ /** `call_id` of the apply_patch call — drives event id derivation. */
30
+ callId: string;
31
+ /** ISO-8601 timestamp from the rollout line. */
32
+ timestamp: string;
33
+ /** Raw `apply_patch.arguments.input` body string. */
34
+ patchBody: string;
35
+ }
36
+ /**
37
+ * Parse the patch body and produce one event per file. Returns an empty
38
+ * array when (a) the body is unparseable, (b) every entry's path is
39
+ * ignored, or (c) every entry's path doesn't match any active cycle.
40
+ */
41
+ export declare function buildCodexFileChanges(opts: BuildCodexFileChangeOpts): FileChangeAction[];
42
+ //# sourceMappingURL=file-change.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-change.d.ts","sourceRoot":"","sources":["../../../../src/import/codex/events/file-change.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,gBAAgB,EAAuB,MAAM,6BAA6B,CAAC;AAWpF,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,GAAG,gBAAgB,EAAE,CA2DxF"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Codex import file_change derivation.
4
+ *
5
+ * One `file_change` event per file entry inside each `apply_patch`
6
+ * function_call body. Parses the patch via the SAME `parseApplyPatchBody`
7
+ * that the live `clear-verdict` hook uses, so live and import agree
8
+ * byte-for-byte on operation + line counts.
9
+ *
10
+ * Filtered by the project's `verifyPatterns` config (a Write of `foo.test.ts`
11
+ * generates no event when the verify cycle excludes test files).
12
+ *
13
+ * `changeset` parity: live emits a hunks-only V4A per-file slice as the
14
+ * captureChangeset FALLBACK (clear-verdict.ts:284-285 — used when the
15
+ * PreToolUse stash is missing or the unified-diff build fails). The same
16
+ * `e.body` slice is available offline from `parseApplyPatchBody`. When the
17
+ * operator has `fileChange.captureChangeset: true` we emit it here too —
18
+ * without parity, re-import overwrites the live `changeset` field with
19
+ * `undefined` via `(session_id, id)` latest-wins dedup. We deliberately
20
+ * skip the unified-diff primary path: that requires the prior file content
21
+ * which import predates (working tree has moved on).
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.buildCodexFileChanges = buildCodexFileChanges;
25
+ const clear_verdict_1 = require("../../../clients/codex/hooks/clear-verdict");
26
+ const config_1 = require("../../../lib/config");
27
+ const ids_1 = require("../../ids");
28
+ /**
29
+ * Parse the patch body and produce one event per file. Returns an empty
30
+ * array when (a) the body is unparseable, (b) every entry's path is
31
+ * ignored, or (c) every entry's path doesn't match any active cycle.
32
+ */
33
+ function buildCodexFileChanges(opts) {
34
+ const config = (0, config_1.loadConfig)(opts.projectDir);
35
+ let entries;
36
+ try {
37
+ entries = (0, clear_verdict_1.parseApplyPatchBody)(opts.patchBody);
38
+ }
39
+ catch {
40
+ return [];
41
+ }
42
+ const captureChangeset = (0, config_1.getCaptureFileChangeset)(config);
43
+ const maxChangesetBytes = (0, config_1.getMaxChangesetBytes)(config);
44
+ const events = [];
45
+ const tsMs = Date.parse(opts.timestamp);
46
+ const stamp = Number.isFinite(tsMs) ? tsMs : Date.now();
47
+ for (let i = 0; i < entries.length; i++) {
48
+ const e = entries[i];
49
+ if (!shouldEmit(config, e.path)) {
50
+ continue;
51
+ }
52
+ const op = e.operation;
53
+ // Multi-file patches share one call_id — qualify the event id with
54
+ // the entry index + file path so each emits a distinct UUID.
55
+ const event = {
56
+ id: (0, ids_1.deriveFileChangeEventId)(opts.sessionId, `${opts.callId}:${i}:${e.path}`),
57
+ type: "file_change",
58
+ timestamp: stamp,
59
+ session_id: opts.sessionId,
60
+ project_name: opts.projectName,
61
+ activity_id: opts.activityId,
62
+ // Cross-event vocab parity (round 68). See clear-verdict.ts for
63
+ // full rationale: tool_call.tool_name ships "Edit" (round 67)
64
+ // and session_analytics.tools["Edit"] aggregates (round 66), so
65
+ // file_change must use the same alias to keep the backend
66
+ // tool_call ↔ file_change JOIN on tool_name working. Live ↔
67
+ // import parity: this matches `clear-verdict.ts:255`.
68
+ tool_name: "Edit",
69
+ file_path: e.path,
70
+ operation: op,
71
+ // Live parity (clear-verdict.ts). DELETE: BOTH null (whole file
72
+ // removed; prior content unrecoverable; parser's 0 isn't
73
+ // meaningful). CREATE: `lines_removed: 0` — new file has zero
74
+ // prior content, so zero lines were removed. Cross-client
75
+ // parity with Claude Write-create (clients/claude/hooks/
76
+ // clear-verdict.ts:77 + import/claude/events/file-change.ts:85).
77
+ // UPDATE: both real counts.
78
+ lines_added: op === "delete" ? null : e.linesAdded,
79
+ lines_removed: op === "delete" ? null : (op === "create" ? 0 : e.linesRemoved),
80
+ };
81
+ // Live parity for `changeset`: mirror the V4A fallback path
82
+ // (clear-verdict.ts:284-285). `e.body` is hunks-only per-file slice
83
+ // parsed from the rollout's apply_patch body — same source the live
84
+ // fallback uses. Without this, re-import dedup
85
+ // (`(session_id, id)` latest-wins) overwrites live's `changeset`
86
+ // field with `undefined` and the warehouse loses the diff.
87
+ if (captureChangeset && e.body.length > 0) {
88
+ event.changeset = truncateChangeset(e.body, maxChangesetBytes);
89
+ }
90
+ events.push(event);
91
+ }
92
+ return events;
93
+ }
94
+ /**
95
+ * Hunks-only truncation. Mirror of live's `truncateChangeset` in
96
+ * clear-verdict.ts (same head + footer shape) so the wire string is
97
+ * byte-identical when the body fits and footer-identical on overflow.
98
+ */
99
+ function truncateChangeset(s, maxBytes) {
100
+ if (maxBytes <= 0) {
101
+ return s;
102
+ }
103
+ const buf = Buffer.from(s, "utf-8");
104
+ if (buf.length <= maxBytes) {
105
+ return s;
106
+ }
107
+ const omitted = buf.length - maxBytes;
108
+ const footer = `\n... (truncated, ${omitted} bytes omitted)\n`;
109
+ const footerLen = Buffer.byteLength(footer, "utf-8");
110
+ const headLen = Math.max(0, maxBytes - footerLen);
111
+ const head = buf.subarray(0, headLen).toString("utf-8");
112
+ return head + footer;
113
+ }
114
+ /**
115
+ * Verify-pattern gate. Mirrors what live mode emits: a file_change is on
116
+ * the wire only when `requiresVerification(filePath, config)` returns true
117
+ * — i.e. some cycle's verifyPatterns matches AND the file isn't on the
118
+ * cross-cycle ignore list. Pre-fix import emitted every patch entry
119
+ * unconditionally, which is louder than live + a privacy concern for
120
+ * patterns the operator explicitly excluded.
121
+ */
122
+ function shouldEmit(config, filePath) {
123
+ return (0, config_1.requiresVerification)(filePath, config);
124
+ }
125
+ //# sourceMappingURL=file-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-change.js","sourceRoot":"","sources":["../../../../src/import/codex/events/file-change.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * IronBee CLI — Codex import tool_call derivation.
3
+ *
4
+ * One `tool_call` event per `function_call` ResponseItem in the rollout.
5
+ * Joined to its matching `function_call_output` via `call_id` to populate
6
+ * `tool_response_size` + error message + duration (bracketed by adjacent
7
+ * timestamps when present).
8
+ *
9
+ * For devtools MCP tools (mcp__{browser,node,backend}-devtools__*) we
10
+ * prefer `_metadata.toolCallId` (live MCP-shipped event id) → import and
11
+ * live collide cleanly on `(session_id, id)`. For everything else we
12
+ * fall back to the deterministic-from-call-id formula.
13
+ *
14
+ * `tool_input` is whitelisted via `extractCodexToolInput` — same projection
15
+ * the live track-action hook applies. `tool_response` is not shipped on
16
+ * the wire, only its byte size.
17
+ */
18
+ import { ToolCallAction } from "../../../hooks/core/actions";
19
+ /** Lightly-typed function_call shape pulled from the rollout. */
20
+ export interface CodexRawCall {
21
+ /** `call_id` — host-supplied per-call identifier. */
22
+ callId: string;
23
+ /** Raw tool name (e.g. `apply_patch`, `exec_command`, `mcp__browser-devtools__bdt_navigation_go-to`). */
24
+ name: string;
25
+ /** Parsed arguments object — may contain `_metadata` for devtools tools. */
26
+ args: Record<string, unknown>;
27
+ /** ISO-8601 timestamp from the rollout line. */
28
+ timestamp: string;
29
+ }
30
+ /** Matching function_call_output for a call. `null` when unmatched (truncated rollout, interrupted). */
31
+ export interface CodexRawCallOutput {
32
+ callId: string;
33
+ /** Raw output text (Codex emits string content). */
34
+ output: string;
35
+ /** ISO-8601 timestamp — used for duration bracketing. */
36
+ timestamp: string;
37
+ /** Heuristic: surfaced when output text begins with "Error:" / "Process exited with code <non-zero>". */
38
+ isError: boolean;
39
+ }
40
+ export interface BuildCodexToolCallOpts {
41
+ sessionId: string;
42
+ projectName: string;
43
+ /** Parent turn's activity_id (from `deriveActivityId`). */
44
+ activityId: string;
45
+ call: CodexRawCall;
46
+ output: CodexRawCallOutput | null;
47
+ }
48
+ export declare function buildCodexToolCall(opts: BuildCodexToolCallOpts): ToolCallAction;
49
+ //# sourceMappingURL=tool-call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call.d.ts","sourceRoot":"","sources":["../../../../src/import/codex/events/tool-call.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAM7D,iEAAiE;AACjE,MAAM,WAAW,YAAY;IACzB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,yGAAyG;IACzG,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,yGAAyG;IACzG,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc,CAqG/E"}
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Codex import tool_call derivation.
4
+ *
5
+ * One `tool_call` event per `function_call` ResponseItem in the rollout.
6
+ * Joined to its matching `function_call_output` via `call_id` to populate
7
+ * `tool_response_size` + error message + duration (bracketed by adjacent
8
+ * timestamps when present).
9
+ *
10
+ * For devtools MCP tools (mcp__{browser,node,backend}-devtools__*) we
11
+ * prefer `_metadata.toolCallId` (live MCP-shipped event id) → import and
12
+ * live collide cleanly on `(session_id, id)`. For everything else we
13
+ * fall back to the deterministic-from-call-id formula.
14
+ *
15
+ * `tool_input` is whitelisted via `extractCodexToolInput` — same projection
16
+ * the live track-action hook applies. `tool_response` is not shipped on
17
+ * the wire, only its byte size.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.buildCodexToolCall = buildCodexToolCall;
21
+ const util_1 = require("../../../clients/codex/util");
22
+ const ids_1 = require("../../ids");
23
+ const DEVTOOLS_MCP_SERVERS = new Set(["browser-devtools", "node-devtools", "backend-devtools"]);
24
+ function buildCodexToolCall(opts) {
25
+ const { sessionId, projectName, activityId, call, output } = opts;
26
+ const classified = (0, util_1.classifyCodexTool)(call.name);
27
+ const eventId = resolveEventId(sessionId, classified, call);
28
+ const projectedInput = (0, util_1.extractCodexToolInput)(call.name, call.args);
29
+ const inputSize = byteLengthOf(call.args);
30
+ // Cross-client parity (Claude+Cursor emit 0 on failure — see
31
+ // clients/claude/hooks/track-action.ts:210 +
32
+ // import/claude/events/tool-call.ts:138-140). Live Codex was an outlier
33
+ // shipping the error blob byte count; the cross-client parity fix at
34
+ // clients/codex/hooks/track-action.ts now zeroes it on failure, and
35
+ // import must match for backend (session_id, id) dedup to not flip the
36
+ // value between live and import for the same logical failed call.
37
+ const responseSize = output !== null && !output.isError
38
+ ? Buffer.byteLength(output.output, "utf-8")
39
+ : 0;
40
+ // Truncate to 500 chars — live parity (clients/codex/hooks/track-action.ts
41
+ // detectFailure uses `t.slice(0, 500)`). Without matching truncation,
42
+ // re-import overwrites live's truncated `error` with a 2KB+ stderr blob
43
+ // → backend wire shape divergent for the same logical failure.
44
+ const errorMsg = output !== null && output.isError
45
+ ? output.output.slice(0, 500)
46
+ : undefined;
47
+ // Duration bracket: function_call timestamp → function_call_output
48
+ // timestamp. Codex hook stdin doesn't carry duration_ms even live
49
+ // (the runtime hook derives it via Pre→Post stash); for import the
50
+ // bracket is the only signal. Sequential within a single response
51
+ // batch, so the bracket is a tight approximation per call.
52
+ const callTs = Date.parse(call.timestamp);
53
+ const outTs = output !== null ? Date.parse(output.timestamp) : NaN;
54
+ const durationMs = Number.isFinite(callTs) && Number.isFinite(outTs) && outTs >= callTs
55
+ ? outTs - callTs
56
+ : null;
57
+ // Live↔import timestamp parity. Live emits at PostToolUse → `Date.now()` at
58
+ // end-of-tool. The rollout `function_call` line is written at START-of-tool
59
+ // (model dispatch); only `function_call_output` carries the end-of-tool
60
+ // wall clock. Real-corpus divergence between the two: mean ~300ms, P95
61
+ // ~1.3s, max ~2s — for the same logical tool_call live and import shipped
62
+ // distinct `timestamp` values, breaking backend join/time-series plotting
63
+ // on re-import. Prefer the output's timestamp; fall back to the call's
64
+ // when the call was interrupted (no output line).
65
+ const wireTs = Number.isFinite(outTs) ? outTs : (Number.isFinite(callTs) ? callTs : Date.now());
66
+ const event = {
67
+ id: eventId,
68
+ type: "tool_call",
69
+ timestamp: wireTs,
70
+ session_id: sessionId,
71
+ project_name: projectName,
72
+ activity_id: activityId,
73
+ tool_name: classified.tool_name,
74
+ tool_use_id: call.callId,
75
+ tool_input: projectedInput,
76
+ tool_input_size: inputSize,
77
+ tool_response_size: responseSize,
78
+ duration: durationMs,
79
+ };
80
+ if (classified.tool_type !== null) {
81
+ event.tool_type = classified.tool_type;
82
+ }
83
+ if (classified.mcp_server !== null) {
84
+ event.mcp_server = classified.mcp_server;
85
+ }
86
+ if (errorMsg !== undefined) {
87
+ event.error = errorMsg;
88
+ }
89
+ // Project verification cycle correlation fields from devtools
90
+ // `_metadata` (baked in by Codex `require-verification.ts` at live
91
+ // emit time). Live Codex `track-action.ts` reads
92
+ // `getActiveVerificationId(sessionDir)` + `getActiveTraceId(sessionDir)`
93
+ // from state.json and sets `verification_id` + `trace_id` as TOP-LEVEL
94
+ // event fields. Without re-projecting from `_metadata`, backend
95
+ // (session_id, id) latest-wins dedup erases live's correlation fields
96
+ // on every re-import of a Codex session that ran devtools tools
97
+ // during an active verification cycle. Mirror of the Claude-side
98
+ // round-97 fix at `import/claude/events/tool-call.ts:165-202`.
99
+ if (classified.tool_type === "mcp"
100
+ && classified.mcp_server !== null
101
+ && DEVTOOLS_MCP_SERVERS.has(classified.mcp_server)) {
102
+ const meta = call.args._metadata;
103
+ if (meta !== null && typeof meta === "object") {
104
+ const m = meta;
105
+ const vid = m.verificationId;
106
+ if (typeof vid === "string" && UUID_SHAPE.test(vid)) {
107
+ event.verification_id = vid;
108
+ }
109
+ // OTEL trace_id is 32-char lowercase hex (W3C trace context),
110
+ // NOT UUID-shaped — accept any non-empty string.
111
+ const tid = m.traceId;
112
+ if (typeof tid === "string" && tid.length > 0) {
113
+ event.trace_id = tid;
114
+ }
115
+ }
116
+ }
117
+ return event;
118
+ }
119
+ /** Backend stores event ids as UUID columns; reject corrupt / forged metadata that wouldn't validate. */
120
+ const UUID_SHAPE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
121
+ function resolveEventId(sessionId, classified, call) {
122
+ if (classified.tool_type === "mcp"
123
+ && classified.mcp_server !== null
124
+ && DEVTOOLS_MCP_SERVERS.has(classified.mcp_server)) {
125
+ const meta = call.args._metadata;
126
+ if (meta !== null && typeof meta === "object") {
127
+ const toolCallId = meta.toolCallId;
128
+ // Only accept UUID-shaped overrides — live `require-verification`
129
+ // generates them with `crypto.randomUUID()`, so any non-UUID
130
+ // value in a replayed rollout is corrupt / forged metadata
131
+ // (would otherwise violate the backend's `(session_id, id)`
132
+ // UUID column constraint).
133
+ if (typeof toolCallId === "string" && UUID_SHAPE.test(toolCallId)) {
134
+ return toolCallId;
135
+ }
136
+ }
137
+ }
138
+ return (0, ids_1.deriveToolCallEventIdFromToolUseId)(sessionId, call.callId);
139
+ }
140
+ function byteLengthOf(value) {
141
+ if (value === undefined || value === null) {
142
+ return 0;
143
+ }
144
+ try {
145
+ return Buffer.byteLength(JSON.stringify(value), "utf-8");
146
+ }
147
+ catch {
148
+ return 0;
149
+ }
150
+ }
151
+ //# sourceMappingURL=tool-call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-call.js","sourceRoot":"","sources":["../../../../src/import/codex/events/tool-call.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * IronBee CLI — Codex Per-Session Import Runner
3
+ *
4
+ * Orchestrates the full import of one Codex rollout JSONL:
5
+ * 1. Skip check (`<projectDir>/.ironbee/sessions/<id>/`).
6
+ * 2. Parse rollout → extract session_meta + task_started boundaries +
7
+ * function_call + function_call_output + apply_patch + token_count.
8
+ * 3. Build events: session_start, session_end (Stop-as-checkpoint
9
+ * synthetic), activity_start/end per turn, tool_call per
10
+ * function_call (joined to its output via call_id), file_change per
11
+ * apply_patch file entry, api_request per token_count, session_analytics.
12
+ * 4. POST all events via the import emitter (transient retry).
13
+ * 5. Write the marker.
14
+ *
15
+ * Codex-specific because rollout shape diverges from Claude (RolloutItem
16
+ * enum, apply_patch body parser, no per-turn step granularity). Parallel
17
+ * to `src/import/claude/runner.ts` — never mixed in this file.
18
+ *
19
+ * Per-session atomicity: on any unrecoverable failure mid-emit, the
20
+ * marker is NOT written and the session re-attempts on the next
21
+ * `ironbee import` run. Deterministic event ids dedup re-emits at the
22
+ * backend.
23
+ */
24
+ import { ImportResult, ImportTarget } from "../types";
25
+ import { CodexAgentMessagePayload, CodexTaskStartedPayload, CodexTokenCountPayload, CodexUserMessagePayload } from "../../analytics/codex/types";
26
+ export interface CodexRunnerOpts {
27
+ target: ImportTarget;
28
+ force: boolean;
29
+ /** Events per collector POST; null = use target/default. */
30
+ batchSize?: number | null;
31
+ }
32
+ export declare function importCodexSession(opts: CodexRunnerOpts): Promise<ImportResult>;
33
+ export type _UnusedRefs = CodexAgentMessagePayload | CodexTaskStartedPayload | CodexTokenCountPayload | CodexUserMessagePayload;
34
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/import/codex/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAQH,OAAO,EAIH,YAAY,EACZ,YAAY,EACf,MAAM,UAAU,CAAC;AAiBlB,OAAO,EACH,wBAAwB,EAKxB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EAC1B,MAAM,6BAA6B,CAAC;AAWrC,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAkOrF;AAuND,MAAM,MAAM,WAAW,GACjB,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,uBAAuB,CAAC"}