@ironbee-ai/cli 0.6.2 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +167 -39
  3. package/dist/analysis/code-changes.js.map +1 -1
  4. package/dist/analysis/cross-session.js.map +1 -1
  5. package/dist/analysis/fix-effectiveness.js.map +1 -1
  6. package/dist/analysis/time-analysis.js.map +1 -1
  7. package/dist/analysis/verdict-details.js.map +1 -1
  8. package/dist/analysis/verification-quality.js.map +1 -1
  9. package/dist/analytics/classifier.d.ts +99 -0
  10. package/dist/analytics/classifier.d.ts.map +1 -0
  11. package/dist/analytics/classifier.js +380 -0
  12. package/dist/analytics/classifier.js.map +1 -0
  13. package/dist/analytics/emit.d.ts +67 -0
  14. package/dist/analytics/emit.d.ts.map +1 -0
  15. package/dist/analytics/emit.js +901 -0
  16. package/dist/analytics/emit.js.map +1 -0
  17. package/dist/analytics/errors.d.ts +33 -0
  18. package/dist/analytics/errors.d.ts.map +1 -0
  19. package/dist/analytics/errors.js +93 -0
  20. package/dist/analytics/errors.js.map +1 -0
  21. package/dist/analytics/hook-trigger.d.ts +39 -0
  22. package/dist/analytics/hook-trigger.d.ts.map +1 -0
  23. package/dist/analytics/hook-trigger.js +127 -0
  24. package/dist/analytics/hook-trigger.js.map +1 -0
  25. package/dist/analytics/log.d.ts +44 -0
  26. package/dist/analytics/log.d.ts.map +1 -0
  27. package/dist/analytics/log.js +158 -0
  28. package/dist/analytics/log.js.map +1 -0
  29. package/dist/analytics/merge.d.ts +40 -0
  30. package/dist/analytics/merge.d.ts.map +1 -0
  31. package/dist/analytics/merge.js +527 -0
  32. package/dist/analytics/merge.js.map +1 -0
  33. package/dist/analytics/pricing.d.ts +149 -0
  34. package/dist/analytics/pricing.d.ts.map +1 -0
  35. package/dist/analytics/pricing.js +179 -0
  36. package/dist/analytics/pricing.js.map +1 -0
  37. package/dist/analytics/projection.d.ts +356 -0
  38. package/dist/analytics/projection.d.ts.map +1 -0
  39. package/dist/analytics/projection.js +2281 -0
  40. package/dist/analytics/projection.js.map +1 -0
  41. package/dist/analytics/spawn.d.ts +28 -0
  42. package/dist/analytics/spawn.d.ts.map +1 -0
  43. package/dist/analytics/spawn.js +57 -0
  44. package/dist/analytics/spawn.js.map +1 -0
  45. package/dist/analytics/state.d.ts +58 -0
  46. package/dist/analytics/state.d.ts.map +1 -0
  47. package/dist/analytics/state.js +329 -0
  48. package/dist/analytics/state.js.map +1 -0
  49. package/dist/analytics/transcript.d.ts +150 -0
  50. package/dist/analytics/transcript.d.ts.map +1 -0
  51. package/dist/analytics/transcript.js +276 -0
  52. package/dist/analytics/transcript.js.map +1 -0
  53. package/dist/analytics/types.d.ts +875 -0
  54. package/dist/analytics/types.d.ts.map +1 -0
  55. package/dist/analytics/types.js +31 -0
  56. package/dist/analytics/types.js.map +1 -0
  57. package/dist/clients/base.d.ts +21 -2
  58. package/dist/clients/base.d.ts.map +1 -1
  59. package/dist/clients/claude/commands/ironbee-verify.md +15 -7
  60. package/dist/clients/claude/fragments/command-verify.node.md +33 -0
  61. package/dist/clients/claude/fragments/rule.node.md +29 -0
  62. package/dist/clients/claude/fragments/skill.node.md +77 -0
  63. package/dist/clients/claude/hooks/activity-end.d.ts +13 -0
  64. package/dist/clients/claude/hooks/activity-end.d.ts.map +1 -0
  65. package/dist/clients/claude/hooks/activity-end.js +42 -0
  66. package/dist/clients/claude/hooks/activity-end.js.map +1 -0
  67. package/dist/clients/claude/hooks/require-verdict.d.ts +3 -2
  68. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  69. package/dist/clients/claude/hooks/require-verdict.js +6 -5
  70. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  71. package/dist/clients/claude/hooks/require-verification.d.ts +7 -4
  72. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  73. package/dist/clients/claude/hooks/require-verification.js +44 -22
  74. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  75. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  76. package/dist/clients/claude/hooks/session-end.js +17 -2
  77. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  78. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  79. package/dist/clients/claude/hooks/session-start.js +2 -1
  80. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  81. package/dist/clients/claude/hooks/track-action-monitor.d.ts +27 -0
  82. package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -0
  83. package/dist/clients/claude/hooks/track-action-monitor.js +126 -0
  84. package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -0
  85. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  86. package/dist/clients/claude/hooks/track-action.js +29 -20
  87. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  88. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  89. package/dist/clients/claude/hooks/verify-gate.js +18 -1
  90. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  91. package/dist/clients/claude/index.d.ts +4 -1
  92. package/dist/clients/claude/index.d.ts.map +1 -1
  93. package/dist/clients/claude/index.js +171 -94
  94. package/dist/clients/claude/index.js.map +1 -1
  95. package/dist/clients/claude/rules/ironbee-verification.md +41 -33
  96. package/dist/clients/claude/skills/ironbee-verification.md +93 -76
  97. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +18 -10
  98. package/dist/clients/cursor/fragments/command-verify.node.md +33 -0
  99. package/dist/clients/cursor/fragments/rule.node.md +29 -0
  100. package/dist/clients/cursor/fragments/skill.node.md +77 -0
  101. package/dist/clients/cursor/hooks/activity-end.d.ts +14 -0
  102. package/dist/clients/cursor/hooks/activity-end.d.ts.map +1 -0
  103. package/dist/clients/cursor/hooks/activity-end.js +45 -0
  104. package/dist/clients/cursor/hooks/activity-end.js.map +1 -0
  105. package/dist/clients/cursor/hooks/require-verdict.d.ts +1 -1
  106. package/dist/clients/cursor/hooks/require-verdict.js +4 -4
  107. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  108. package/dist/clients/cursor/hooks/require-verification.js +42 -16
  109. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  110. package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
  111. package/dist/clients/cursor/hooks/session-end.js +18 -2
  112. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  113. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
  114. package/dist/clients/cursor/hooks/session-start.js +2 -1
  115. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  116. package/dist/clients/cursor/hooks/track-action-monitor.d.ts +27 -0
  117. package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -0
  118. package/dist/clients/cursor/hooks/track-action-monitor.js +133 -0
  119. package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -0
  120. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  121. package/dist/clients/cursor/hooks/track-action.js +51 -23
  122. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  123. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  124. package/dist/clients/cursor/hooks/verify-gate.js +14 -1
  125. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  126. package/dist/clients/cursor/index.d.ts +4 -1
  127. package/dist/clients/cursor/index.d.ts.map +1 -1
  128. package/dist/clients/cursor/index.js +117 -71
  129. package/dist/clients/cursor/index.js.map +1 -1
  130. package/dist/clients/cursor/rules/ironbee-verification.mdc +37 -29
  131. package/dist/clients/cursor/skills/ironbee-verification.md +93 -76
  132. package/dist/clients/registry.d.ts +14 -0
  133. package/dist/clients/registry.d.ts.map +1 -1
  134. package/dist/clients/registry.js +34 -0
  135. package/dist/clients/registry.js.map +1 -1
  136. package/dist/commands/analyze.d.ts.map +1 -1
  137. package/dist/commands/analyze.js +40 -0
  138. package/dist/commands/analyze.js.map +1 -1
  139. package/dist/commands/backend-toggle.d.ts +45 -0
  140. package/dist/commands/backend-toggle.d.ts.map +1 -0
  141. package/dist/commands/backend-toggle.js +192 -0
  142. package/dist/commands/backend-toggle.js.map +1 -0
  143. package/dist/commands/disable-backend.d.ts +14 -0
  144. package/dist/commands/disable-backend.d.ts.map +1 -0
  145. package/dist/commands/disable-backend.js +34 -0
  146. package/dist/commands/disable-backend.js.map +1 -0
  147. package/dist/commands/disable-verification.d.ts +16 -0
  148. package/dist/commands/disable-verification.d.ts.map +1 -0
  149. package/dist/commands/disable-verification.js +36 -0
  150. package/dist/commands/disable-verification.js.map +1 -0
  151. package/dist/commands/enable-backend.d.ts +15 -0
  152. package/dist/commands/enable-backend.d.ts.map +1 -0
  153. package/dist/commands/enable-backend.js +35 -0
  154. package/dist/commands/enable-backend.js.map +1 -0
  155. package/dist/commands/enable-verification.d.ts +14 -0
  156. package/dist/commands/enable-verification.d.ts.map +1 -0
  157. package/dist/commands/enable-verification.js +34 -0
  158. package/dist/commands/enable-verification.js.map +1 -0
  159. package/dist/commands/hook.d.ts.map +1 -1
  160. package/dist/commands/hook.js +60 -0
  161. package/dist/commands/hook.js.map +1 -1
  162. package/dist/commands/import.d.ts +39 -0
  163. package/dist/commands/import.d.ts.map +1 -0
  164. package/dist/commands/import.js +369 -0
  165. package/dist/commands/import.js.map +1 -0
  166. package/dist/commands/install.d.ts.map +1 -1
  167. package/dist/commands/install.js +15 -20
  168. package/dist/commands/install.js.map +1 -1
  169. package/dist/commands/process-analytics.d.ts +18 -0
  170. package/dist/commands/process-analytics.d.ts.map +1 -0
  171. package/dist/commands/process-analytics.js +57 -0
  172. package/dist/commands/process-analytics.js.map +1 -0
  173. package/dist/commands/queue.d.ts +2 -3
  174. package/dist/commands/queue.d.ts.map +1 -1
  175. package/dist/commands/queue.js +2 -3
  176. package/dist/commands/queue.js.map +1 -1
  177. package/dist/commands/status.d.ts.map +1 -1
  178. package/dist/commands/status.js +29 -1
  179. package/dist/commands/status.js.map +1 -1
  180. package/dist/commands/verification-toggle.d.ts +47 -0
  181. package/dist/commands/verification-toggle.d.ts.map +1 -0
  182. package/dist/commands/verification-toggle.js +122 -0
  183. package/dist/commands/verification-toggle.js.map +1 -0
  184. package/dist/commands/verify.d.ts.map +1 -1
  185. package/dist/commands/verify.js +28 -0
  186. package/dist/commands/verify.js.map +1 -1
  187. package/dist/hooks/core/actions.d.ts +72 -70
  188. package/dist/hooks/core/actions.d.ts.map +1 -1
  189. package/dist/hooks/core/actions.js +191 -28
  190. package/dist/hooks/core/actions.js.map +1 -1
  191. package/dist/hooks/core/activity-end.d.ts +20 -0
  192. package/dist/hooks/core/activity-end.d.ts.map +1 -0
  193. package/dist/hooks/core/activity-end.js +23 -0
  194. package/dist/hooks/core/activity-end.js.map +1 -0
  195. package/dist/hooks/core/required-tools.d.ts +30 -0
  196. package/dist/hooks/core/required-tools.d.ts.map +1 -0
  197. package/dist/hooks/core/required-tools.js +70 -0
  198. package/dist/hooks/core/required-tools.js.map +1 -0
  199. package/dist/hooks/core/session-state.d.ts +12 -3
  200. package/dist/hooks/core/session-state.d.ts.map +1 -1
  201. package/dist/hooks/core/session-state.js +59 -0
  202. package/dist/hooks/core/session-state.js.map +1 -1
  203. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  204. package/dist/hooks/core/submit-verdict.js +16 -12
  205. package/dist/hooks/core/submit-verdict.js.map +1 -1
  206. package/dist/hooks/core/verify-gate.d.ts +17 -3
  207. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  208. package/dist/hooks/core/verify-gate.js +312 -116
  209. package/dist/hooks/core/verify-gate.js.map +1 -1
  210. package/dist/import/claude/analytics-runner.d.ts +42 -0
  211. package/dist/import/claude/analytics-runner.d.ts.map +1 -0
  212. package/dist/import/claude/analytics-runner.js +213 -0
  213. package/dist/import/claude/analytics-runner.js.map +1 -0
  214. package/dist/import/claude/discovery.d.ts +22 -0
  215. package/dist/import/claude/discovery.d.ts.map +1 -0
  216. package/dist/import/claude/discovery.js +197 -0
  217. package/dist/import/claude/discovery.js.map +1 -0
  218. package/dist/import/claude/encoding.d.ts +50 -0
  219. package/dist/import/claude/encoding.d.ts.map +1 -0
  220. package/dist/import/claude/encoding.js +110 -0
  221. package/dist/import/claude/encoding.js.map +1 -0
  222. package/dist/import/claude/events/file-change.d.ts +28 -0
  223. package/dist/import/claude/events/file-change.d.ts.map +1 -0
  224. package/dist/import/claude/events/file-change.js +112 -0
  225. package/dist/import/claude/events/file-change.js.map +1 -0
  226. package/dist/import/claude/events/tool-call.d.ts +61 -0
  227. package/dist/import/claude/events/tool-call.d.ts.map +1 -0
  228. package/dist/import/claude/events/tool-call.js +119 -0
  229. package/dist/import/claude/events/tool-call.js.map +1 -0
  230. package/dist/import/claude/runner.d.ts +31 -0
  231. package/dist/import/claude/runner.d.ts.map +1 -0
  232. package/dist/import/claude/runner.js +280 -0
  233. package/dist/import/claude/runner.js.map +1 -0
  234. package/dist/import/claude/summary.d.ts +23 -0
  235. package/dist/import/claude/summary.d.ts.map +1 -0
  236. package/dist/import/claude/summary.js +186 -0
  237. package/dist/import/claude/summary.js.map +1 -0
  238. package/dist/import/claude/transcript-walk.d.ts +52 -0
  239. package/dist/import/claude/transcript-walk.d.ts.map +1 -0
  240. package/dist/import/claude/transcript-walk.js +187 -0
  241. package/dist/import/claude/transcript-walk.js.map +1 -0
  242. package/dist/import/concurrent-pool.d.ts +45 -0
  243. package/dist/import/concurrent-pool.d.ts.map +1 -0
  244. package/dist/import/concurrent-pool.js +95 -0
  245. package/dist/import/concurrent-pool.js.map +1 -0
  246. package/dist/import/emitter.d.ts +29 -0
  247. package/dist/import/emitter.d.ts.map +1 -0
  248. package/dist/import/emitter.js +66 -0
  249. package/dist/import/emitter.js.map +1 -0
  250. package/dist/import/events/activity.d.ts +23 -0
  251. package/dist/import/events/activity.d.ts.map +1 -0
  252. package/dist/import/events/activity.js +45 -0
  253. package/dist/import/events/activity.js.map +1 -0
  254. package/dist/import/events/session.d.ts +24 -0
  255. package/dist/import/events/session.d.ts.map +1 -0
  256. package/dist/import/events/session.js +47 -0
  257. package/dist/import/events/session.js.map +1 -0
  258. package/dist/import/filter.d.ts +47 -0
  259. package/dist/import/filter.d.ts.map +1 -0
  260. package/dist/import/filter.js +90 -0
  261. package/dist/import/filter.js.map +1 -0
  262. package/dist/import/ids.d.ts +56 -0
  263. package/dist/import/ids.d.ts.map +1 -0
  264. package/dist/import/ids.js +87 -0
  265. package/dist/import/ids.js.map +1 -0
  266. package/dist/import/index.d.ts +29 -0
  267. package/dist/import/index.d.ts.map +1 -0
  268. package/dist/import/index.js +52 -0
  269. package/dist/import/index.js.map +1 -0
  270. package/dist/import/marker.d.ts +20 -0
  271. package/dist/import/marker.d.ts.map +1 -0
  272. package/dist/import/marker.js +71 -0
  273. package/dist/import/marker.js.map +1 -0
  274. package/dist/import/pipeline.d.ts +41 -0
  275. package/dist/import/pipeline.d.ts.map +1 -0
  276. package/dist/import/pipeline.js +47 -0
  277. package/dist/import/pipeline.js.map +1 -0
  278. package/dist/import/progress.d.ts +20 -0
  279. package/dist/import/progress.d.ts.map +1 -0
  280. package/dist/import/progress.js +69 -0
  281. package/dist/import/progress.js.map +1 -0
  282. package/dist/import/skip.d.ts +13 -0
  283. package/dist/import/skip.d.ts.map +1 -0
  284. package/dist/import/skip.js +24 -0
  285. package/dist/import/skip.js.map +1 -0
  286. package/dist/import/types.d.ts +125 -0
  287. package/dist/import/types.d.ts.map +1 -0
  288. package/dist/import/types.js +28 -0
  289. package/dist/import/types.js.map +1 -0
  290. package/dist/index.js +21 -2
  291. package/dist/index.js.map +1 -1
  292. package/dist/lib/collector.d.ts +29 -3
  293. package/dist/lib/collector.d.ts.map +1 -1
  294. package/dist/lib/collector.js +118 -8
  295. package/dist/lib/collector.js.map +1 -1
  296. package/dist/lib/config.d.ts +240 -83
  297. package/dist/lib/config.d.ts.map +1 -1
  298. package/dist/lib/config.js +482 -89
  299. package/dist/lib/config.js.map +1 -1
  300. package/dist/lib/event.d.ts +72 -0
  301. package/dist/lib/event.d.ts.map +1 -0
  302. package/dist/lib/event.js +42 -0
  303. package/dist/lib/event.js.map +1 -0
  304. package/dist/lib/gitignore.d.ts +21 -0
  305. package/dist/lib/gitignore.d.ts.map +1 -0
  306. package/dist/lib/gitignore.js +54 -0
  307. package/dist/lib/gitignore.js.map +1 -0
  308. package/dist/lib/runtime-section.d.ts +118 -0
  309. package/dist/lib/runtime-section.d.ts.map +1 -0
  310. package/dist/lib/runtime-section.js +256 -0
  311. package/dist/lib/runtime-section.js.map +1 -0
  312. package/dist/lib/telemetry.d.ts +1 -1
  313. package/dist/lib/telemetry.d.ts.map +1 -1
  314. package/dist/lib/telemetry.js +4 -1
  315. package/dist/lib/telemetry.js.map +1 -1
  316. package/dist/queue/dead-letter.d.ts +5 -1
  317. package/dist/queue/dead-letter.d.ts.map +1 -1
  318. package/dist/queue/dead-letter.js +5 -1
  319. package/dist/queue/dead-letter.js.map +1 -1
  320. package/dist/queue/drain.d.ts +3 -2
  321. package/dist/queue/drain.d.ts.map +1 -1
  322. package/dist/queue/drain.js +3 -2
  323. package/dist/queue/drain.js.map +1 -1
  324. package/dist/queue/flush.d.ts +28 -12
  325. package/dist/queue/flush.d.ts.map +1 -1
  326. package/dist/queue/flush.js +43 -18
  327. package/dist/queue/flush.js.map +1 -1
  328. package/dist/queue/handlers/send-event.d.ts.map +1 -1
  329. package/dist/queue/handlers/send-event.js.map +1 -1
  330. package/dist/queue/index.d.ts +1 -2
  331. package/dist/queue/index.d.ts.map +1 -1
  332. package/dist/queue/index.js +2 -2
  333. package/dist/queue/index.js.map +1 -1
  334. package/dist/queue/paths.d.ts +4 -2
  335. package/dist/queue/paths.d.ts.map +1 -1
  336. package/dist/queue/paths.js +4 -2
  337. package/dist/queue/paths.js.map +1 -1
  338. package/dist/queue/process-file.d.ts +5 -1
  339. package/dist/queue/process-file.d.ts.map +1 -1
  340. package/dist/queue/process-file.js +5 -1
  341. package/dist/queue/process-file.js.map +1 -1
  342. package/dist/queue/snapshot.d.ts +4 -1
  343. package/dist/queue/snapshot.d.ts.map +1 -1
  344. package/dist/queue/snapshot.js +4 -1
  345. package/dist/queue/snapshot.js.map +1 -1
  346. package/dist/queue/spawn.d.ts +1 -3
  347. package/dist/queue/spawn.d.ts.map +1 -1
  348. package/dist/queue/spawn.js +1 -3
  349. package/dist/queue/spawn.js.map +1 -1
  350. package/dist/queue/submit.d.ts +6 -1
  351. package/dist/queue/submit.d.ts.map +1 -1
  352. package/dist/queue/submit.js +6 -1
  353. package/dist/queue/submit.js.map +1 -1
  354. package/dist/queue/types.d.ts +5 -1
  355. package/dist/queue/types.d.ts.map +1 -1
  356. package/dist/queue/types.js +5 -1
  357. package/dist/queue/types.js.map +1 -1
  358. package/dist/queue/worker-log.d.ts +3 -1
  359. package/dist/queue/worker-log.d.ts.map +1 -1
  360. package/dist/queue/worker-log.js +3 -1
  361. package/dist/queue/worker-log.js.map +1 -1
  362. package/package.json +1 -1
@@ -0,0 +1,369 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — `ironbee import` command
4
+ *
5
+ * Imports historical sessions (Claude Code transcripts in v1) into the
6
+ * IronBee Collector.
7
+ *
8
+ * Flow: argv → scope/time-range resolution → discovery → time-range filter
9
+ * → estimate (dry-run summary) → confirm prompt → per-session import
10
+ * (concurrency-bounded) → final summary.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.importCommand = void 0;
47
+ exports.parseFlags = parseFlags;
48
+ exports.promptYesNo = promptYesNo;
49
+ const commander_1 = require("commander");
50
+ const fs_1 = require("fs");
51
+ const path_1 = require("path");
52
+ const readline = __importStar(require("readline"));
53
+ const output_1 = require("../lib/output");
54
+ const config_1 = require("../lib/config");
55
+ const collector_1 = require("../lib/collector");
56
+ const logger_1 = require("../lib/logger");
57
+ const import_1 = require("../import");
58
+ const DEFAULT_CONCURRENCY = 4;
59
+ const MIN_CONCURRENCY = 1;
60
+ const MAX_CONCURRENCY = 32;
61
+ exports.importCommand = new commander_1.Command("import")
62
+ .description("Import historical Claude Code sessions to the IronBee Collector")
63
+ .option("--since <duration>", "import sessions started within the given duration (e.g. 30d, 2w, 6m, 12h)")
64
+ .option("--from <iso-date>", "explicit start date (e.g. 2025-04-01)")
65
+ .option("--to <iso-date>", "explicit end date (defaults to now)")
66
+ .option("--transcript <path>", "import a single transcript .jsonl file")
67
+ .option("--projects <paths>", "comma-separated absolute project paths")
68
+ .option("--all-projects", "import sessions from every project under ~/.claude/projects/")
69
+ .option("--dry-run", "print the summary and exit without sending events")
70
+ .option("--yes", "skip the interactive confirm prompt")
71
+ .option("--force", "do not skip sessions with existing .ironbee/sessions/<id>/ directories")
72
+ .option("--concurrency <n>", "number of sessions to import in parallel")
73
+ .option("--batch-size <n>", "events per collector POST (default: 100). Set to 1 to isolate which event a 400 rejects.")
74
+ .action(async (flags) => {
75
+ let opts;
76
+ try {
77
+ opts = parseFlags(flags);
78
+ }
79
+ catch (e) {
80
+ output_1.log.error(e instanceof Error ? e.message : String(e));
81
+ process.exit(1);
82
+ }
83
+ // Fail-fast collector check: import has no value when there's no
84
+ // place to send events. `getCollectorTarget` consolidates five
85
+ // requirements into one boolean — `collector` section present,
86
+ // `enable !== false`, non-empty `url`, non-empty `apiKey`, and
87
+ // `IRONBEE_COLLECTOR != "false"`. If any fail, we error here
88
+ // instead of running the full discovery / dry-run / per-session
89
+ // pipeline only to silently no-op every POST.
90
+ const collectorPreflight = (0, collector_1.getCollectorTarget)(process.cwd());
91
+ if (collectorPreflight === null) {
92
+ output_1.log.error("Collector is not configured. ironbee import has no destination to send events to.");
93
+ output_1.log.blank();
94
+ output_1.log.dim("To configure, add a collector section to ~/.ironbee/config.json (or your project's .ironbee/config.json):");
95
+ output_1.log.blank();
96
+ console.log(output_1.pc.dim(" {\n \"collector\": {\n \"url\": \"https://your-collector.example.com\",\n \"apiKey\": \"your-api-key\"\n }\n }"));
97
+ output_1.log.blank();
98
+ output_1.log.dim("All of `url` (non-empty), `apiKey` (non-empty), and `enable !== false` are required. The IRONBEE_COLLECTOR=false env override also disables.");
99
+ process.exit(1);
100
+ }
101
+ // Discover candidate transcripts.
102
+ const allTargets = (0, import_1.findTranscripts)(opts.scope);
103
+ const filteredTargets = (0, import_1.applyTimeRange)(allTargets, opts.timeRange);
104
+ if (filteredTargets.length === 0) {
105
+ output_1.log.warn("No transcripts found matching the given scope and time range.");
106
+ process.exit(0);
107
+ }
108
+ // Estimate: walk every survivor through the analytics projection
109
+ // to produce exact event counts + cost. This is the costly part —
110
+ // visible to the user via the dry-run summary.
111
+ output_1.log.info(`Scanning ${filteredTargets.length} transcript(s)...`);
112
+ const summary = (0, import_1.estimateImport)({
113
+ targets: filteredTargets,
114
+ timeRange: opts.timeRange,
115
+ concurrency: opts.concurrency,
116
+ force: opts.force,
117
+ });
118
+ renderSummary(summary, opts.dryRun);
119
+ if (opts.dryRun) {
120
+ process.exit(0);
121
+ }
122
+ if (summary.toImportCount === 0) {
123
+ output_1.log.warn("Nothing to import (all sessions already tracked). Use --force to re-import.");
124
+ process.exit(0);
125
+ }
126
+ if (!opts.yes) {
127
+ const proceed = await promptYesNo("Proceed?");
128
+ if (!proceed) {
129
+ output_1.log.info("Aborted.");
130
+ process.exit(0);
131
+ }
132
+ }
133
+ // Per-session import with bounded concurrency.
134
+ const toImport = filteredTargets.filter((t) => {
135
+ // Re-evaluate skip rule to avoid race with operator state changes
136
+ // between estimate and run. Cheap (one fs.existsSync).
137
+ return !shouldSkipForRunner(t, opts.force);
138
+ });
139
+ const reporter = new import_1.ProgressReporter(toImport.length);
140
+ // Cancellation: SIGINT finishes the in-flight session, then exits.
141
+ let cancelled = false;
142
+ process.on("SIGINT", () => {
143
+ output_1.log.warn("\nReceived SIGINT — finishing in-flight sessions then exiting...");
144
+ cancelled = true;
145
+ });
146
+ const results = await (0, import_1.runConcurrentPool)({
147
+ items: toImport,
148
+ concurrency: opts.concurrency,
149
+ shouldCancel: () => cancelled,
150
+ onStart: (t, idx) => {
151
+ reporter.onSessionStart(t.sessionId, idx);
152
+ },
153
+ onComplete: (res, _t, idx) => {
154
+ reporter.onSessionComplete(res, idx);
155
+ },
156
+ process: async (t) => {
157
+ // importSession already returns a typed envelope on failure
158
+ // (status: "failed"); the outer try/catch is a defensive
159
+ // safety net for unexpected throws from future refactors.
160
+ try {
161
+ return await (0, import_1.importSession)({ target: t, force: opts.force, batchSize: opts.batchSize });
162
+ }
163
+ catch (e) {
164
+ return {
165
+ sessionId: t.sessionId,
166
+ status: "failed",
167
+ eventsSent: (0, import_1.emptyEventCounts)(),
168
+ reason: e instanceof Error ? e.message : String(e),
169
+ };
170
+ }
171
+ },
172
+ });
173
+ reporter.finalSummary();
174
+ const failed = results.filter((r) => r.status === "failed").length;
175
+ if (failed > 0) {
176
+ process.exit(1);
177
+ }
178
+ });
179
+ function parseFlags(flags) {
180
+ // Scope — mutually exclusive group.
181
+ const scopeFlags = [
182
+ flags.transcript !== undefined ? 1 : 0,
183
+ flags.projects !== undefined ? 1 : 0,
184
+ flags.allProjects === true ? 1 : 0,
185
+ ].reduce((a, b) => a + b, 0);
186
+ if (scopeFlags > 1) {
187
+ throw new Error("--transcript, --projects, and --all-projects are mutually exclusive");
188
+ }
189
+ let scope;
190
+ if (flags.transcript !== undefined) {
191
+ scope = { kind: "transcript", path: (0, path_1.resolve)(flags.transcript) };
192
+ }
193
+ else if (flags.projects !== undefined) {
194
+ // Trim + filter empty strings BEFORE `resolve()` — resolve("") returns
195
+ // process.cwd() and would silently turn a stray comma or empty
196
+ // --projects flag into "import everything in the current directory".
197
+ const paths = flags.projects
198
+ .split(",")
199
+ .map((p) => p.trim())
200
+ .filter((p) => p.length > 0)
201
+ .map((p) => (0, path_1.resolve)(p));
202
+ if (paths.length === 0) {
203
+ throw new Error("--projects must list at least one path");
204
+ }
205
+ scope = { kind: "projects", paths };
206
+ }
207
+ else if (flags.allProjects === true) {
208
+ scope = { kind: "all-projects" };
209
+ }
210
+ else {
211
+ scope = { kind: "current-project" };
212
+ }
213
+ // Time range — mutually exclusive sub-group.
214
+ if (flags.since !== undefined && flags.from !== undefined) {
215
+ throw new Error("--since and --from are mutually exclusive");
216
+ }
217
+ let timeRange = null;
218
+ const nowMs = Date.now();
219
+ if (flags.since !== undefined) {
220
+ const sinceMs = (0, import_1.parseSinceDuration)(flags.since);
221
+ if (sinceMs === null) {
222
+ throw new Error(`Invalid --since value: "${flags.since}". Expected forms: 30d, 2w, 6m, 12h.`);
223
+ }
224
+ timeRange = (0, import_1.buildTimeRange)({ sinceMs, nowMs });
225
+ }
226
+ else if (flags.from !== undefined) {
227
+ const fromMs = (0, import_1.parseIsoDate)(flags.from);
228
+ if (fromMs === null) {
229
+ throw new Error(`Invalid --from value: "${flags.from}". Expected ISO date (e.g. 2025-04-01).`);
230
+ }
231
+ let toMs;
232
+ if (flags.to !== undefined) {
233
+ const parsed = (0, import_1.parseIsoDate)(flags.to);
234
+ if (parsed === null) {
235
+ throw new Error(`Invalid --to value: "${flags.to}". Expected ISO date.`);
236
+ }
237
+ toMs = parsed;
238
+ }
239
+ timeRange = (0, import_1.buildTimeRange)({ fromMs, toMs, nowMs });
240
+ }
241
+ // Concurrency: flag > config > default.
242
+ const concurrency = resolveConcurrency(flags.concurrency);
243
+ // Batch size: flag only — null falls through to target.batchSize / default
244
+ // at the emitter level, so we don't compete with `collector.batchSize` config.
245
+ const batchSize = resolveBatchSize(flags.batchSize);
246
+ return {
247
+ scope,
248
+ timeRange,
249
+ dryRun: flags.dryRun === true,
250
+ yes: flags.yes === true,
251
+ force: flags.force === true,
252
+ concurrency,
253
+ batchSize,
254
+ };
255
+ }
256
+ function resolveBatchSize(flagValue) {
257
+ if (flagValue === undefined) {
258
+ return null;
259
+ }
260
+ const parsed = parseInt(flagValue, 10);
261
+ if (!Number.isFinite(parsed) || parsed < 1) {
262
+ throw new Error(`Invalid --batch-size value: "${flagValue}". Must be an integer >= 1.`);
263
+ }
264
+ return parsed;
265
+ }
266
+ function resolveConcurrency(flagValue) {
267
+ if (flagValue !== undefined) {
268
+ const parsed = parseInt(flagValue, 10);
269
+ if (!Number.isFinite(parsed)) {
270
+ throw new Error(`Invalid --concurrency value: "${flagValue}". Must be an integer.`);
271
+ }
272
+ return clamp(parsed);
273
+ }
274
+ // Merge global (`~/.ironbee/config.json`) with cwd's project config so
275
+ // `import.concurrency` set in the local project is honored when the
276
+ // operator runs `ironbee import` from inside that project.
277
+ const config = (0, config_1.loadConfig)(process.cwd());
278
+ const cfg = config.import?.concurrency;
279
+ if (typeof cfg === "number" && Number.isFinite(cfg)) {
280
+ return clamp(cfg);
281
+ }
282
+ return DEFAULT_CONCURRENCY;
283
+ }
284
+ function clamp(value) {
285
+ return Math.min(MAX_CONCURRENCY, Math.max(MIN_CONCURRENCY, Math.floor(value)));
286
+ }
287
+ function shouldSkipForRunner(t, force) {
288
+ if (force) {
289
+ return false;
290
+ }
291
+ const path = `${t.projectDir}/.ironbee/sessions/${t.sessionId}`;
292
+ try {
293
+ return (0, fs_1.existsSync)(path);
294
+ }
295
+ catch (e) {
296
+ logger_1.logger.debug(`import skip pre-check failed for ${path}: ${e instanceof Error ? e.message : e}`);
297
+ return false;
298
+ }
299
+ }
300
+ function renderSummary(summary, isDryRun) {
301
+ const heading = isDryRun ? "ironbee import — dry-run preview" : "ironbee import — preview";
302
+ output_1.log.blank();
303
+ console.log(output_1.pc.bold(heading));
304
+ output_1.log.blank();
305
+ const totalFound = summary.projects.reduce((acc, p) => acc + p.found, 0);
306
+ console.log(`Scope: ${output_1.pc.bold(String(summary.projects.length))} project(s), ${output_1.pc.bold(String(totalFound))} session(s) found`);
307
+ for (const p of summary.projects) {
308
+ console.log(` ${output_1.pc.dim(p.projectDir.padEnd(50))} ${String(p.found).padStart(3)} sessions ${output_1.pc.dim(`${p.skipped} skipped`)}`);
309
+ }
310
+ output_1.log.blank();
311
+ if (summary.timeRange !== null) {
312
+ const fromIso = new Date(summary.timeRange.fromMs).toISOString().slice(0, 10);
313
+ const toIso = new Date(summary.timeRange.toMs).toISOString().slice(0, 10);
314
+ console.log(`Time range: ${output_1.pc.bold(fromIso)} .. ${output_1.pc.bold(toIso)}`);
315
+ }
316
+ else {
317
+ console.log(`Time range: ${output_1.pc.dim("(no filter — every session)")}`);
318
+ }
319
+ output_1.log.blank();
320
+ console.log(`To import: ${output_1.pc.bold(String(summary.toImportCount))} session(s)`);
321
+ console.log(" Estimated events:");
322
+ console.log(` session_start / session_end ${formatNum(summary.estimatedEvents.session_start + summary.estimatedEvents.session_end)}`);
323
+ console.log(` activity_start / activity_end ${formatNum(summary.estimatedEvents.activity_start + summary.estimatedEvents.activity_end)}`);
324
+ console.log(` tool_call ${formatNum(summary.estimatedEvents.tool_call)}`);
325
+ console.log(` file_change ${formatNum(summary.estimatedEvents.file_change)}`);
326
+ console.log(` api_request ${formatNum(summary.estimatedEvents.api_request)}`);
327
+ console.log(` session_analytics ${formatNum(summary.estimatedEvents.session_analytics)}`);
328
+ console.log(` session_turn_analytics ${formatNum(summary.estimatedEvents.session_turn_analytics)}`);
329
+ console.log(` session_turn_step_analytics ${formatNum(summary.estimatedEvents.session_turn_step_analytics)}`);
330
+ output_1.log.blank();
331
+ console.log(` Estimated total cost surfaced: ${output_1.pc.bold(`$${summary.estimatedCostUsd.toFixed(2)}`)}`);
332
+ console.log(` Estimated wire bytes: ${output_1.pc.dim(formatBytes(summary.estimatedWireBytes))}`);
333
+ console.log(` Collector endpoint: ${summary.collectorUrl !== null ? output_1.pc.bold(summary.collectorUrl) : output_1.pc.red("(not configured)")}`);
334
+ console.log(` Concurrency: ${output_1.pc.bold(String(summary.concurrency))} sessions in flight`);
335
+ output_1.log.blank();
336
+ }
337
+ function formatNum(n) {
338
+ return n.toLocaleString("en-US");
339
+ }
340
+ function formatBytes(n) {
341
+ if (n < 1024) {
342
+ return `${n} B`;
343
+ }
344
+ if (n < 1024 * 1024) {
345
+ return `${(n / 1024).toFixed(1)} KB`;
346
+ }
347
+ return `${(n / (1024 * 1024)).toFixed(1)} MB`;
348
+ }
349
+ async function promptYesNo(question, deps) {
350
+ const create = deps?.createInterface ?? readline.createInterface;
351
+ return new Promise((resolveFn) => {
352
+ const rl = create({ input: process.stdin, output: process.stdout });
353
+ // Default-yes on empty input — `[Y/n]` capital Y signals the default.
354
+ // Operator who's already past the dry-run summary is committing to
355
+ // ship; a single Enter should advance them rather than bounce back.
356
+ // Explicit "n" / "no" still aborts; anything else is treated as
357
+ // confirmation (matches default-yes ergonomics).
358
+ rl.question(`${question} [Y/n] `, (answer) => {
359
+ rl.close();
360
+ const normalized = answer.trim().toLowerCase();
361
+ if (normalized === "n" || normalized === "no") {
362
+ resolveFn(false);
363
+ return;
364
+ }
365
+ resolveFn(true);
366
+ });
367
+ });
368
+ }
369
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,cAAc,EAAE,OA8CvB,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,cAAc,EAAE,OA8CvB,CAAC"}
@@ -8,14 +8,10 @@ const registry_1 = require("../clients/registry");
8
8
  const claude_1 = require("../clients/claude");
9
9
  const output_1 = require("../lib/output");
10
10
  const telemetry_1 = require("../lib/telemetry");
11
- function clientNames() {
12
- const names = registry_1.REGISTERED_CLIENTS.map((c) => c.name);
13
- return names.join(", ");
14
- }
15
11
  exports.installCommand = new commander_1.Command("install")
16
12
  .description("Install IronBee hooks and guidance files into a project")
17
13
  .argument("[project-dir]", "target project directory", ".")
18
- .option("--client <name>", `client to install for (${clientNames()}), or "all"`)
14
+ .option("--client <name>", `client to install for (${(0, registry_1.clientNames)()}), or "all"`)
19
15
  .action(async (dir, options) => {
20
16
  const projectDir = (0, path_1.resolve)(dir);
21
17
  if (!(0, fs_1.existsSync)(projectDir)) {
@@ -23,26 +19,25 @@ exports.installCommand = new commander_1.Command("install")
23
19
  process.exit(1);
24
20
  }
25
21
  let clients;
26
- if (options.client === "all") {
27
- clients = registry_1.REGISTERED_CLIENTS;
22
+ try {
23
+ clients = (0, registry_1.resolveTargetClients)(projectDir, options.client);
28
24
  }
29
- else if (options.client) {
30
- const found = (0, registry_1.findClient)(options.client);
31
- if (!found) {
32
- output_1.log.error(`Unknown client: "${options.client}". Available: ${clientNames()}`);
33
- process.exit(1);
34
- }
35
- clients = [found];
25
+ catch (e) {
26
+ output_1.log.error(e instanceof Error ? e.message : String(e));
27
+ process.exit(1);
36
28
  }
37
- else {
38
- clients = (0, registry_1.detectClients)(projectDir);
39
- if (clients.length === 0) {
29
+ // User-facing log mirrors the historical install.ts output:
30
+ // - explicit --client → no extra noise
31
+ // - autodetect with hits → list detected clients
32
+ // - autodetect with no hits → warn we're falling back to the first
33
+ if (options.client === undefined) {
34
+ const detected = (0, registry_1.detectClients)(projectDir);
35
+ if (detected.length === 0) {
40
36
  output_1.log.warn(`No client detected. Defaulting to: ${registry_1.REGISTERED_CLIENTS[0].name}`);
41
- clients = [registry_1.REGISTERED_CLIENTS[0]];
42
37
  }
43
38
  else {
44
- const detected = clients.map((c) => c.name).join(", ");
45
- output_1.log.info(`Detected client(s): ${output_1.pc.bold(detected)}`);
39
+ const names = detected.map((c) => c.name).join(", ");
40
+ output_1.log.info(`Detected client(s): ${output_1.pc.bold(names)}`);
46
41
  }
47
42
  }
48
43
  output_1.log.blank();
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;;AAAA,yCAAoC;AACpC,2BAAgC;AAChC,+BAA+B;AAE/B,kDAA2G;AAC3G,8CAAsD;AACtD,0CAAwC;AACxC,gDAAgD;AAEnC,QAAA,cAAc,GAAY,IAAI,mBAAO,CAAC,SAAS,CAAC;KACxD,WAAW,CAAC,yDAAyD,CAAC;KACtE,QAAQ,CAAC,eAAe,EAAE,0BAA0B,EAAE,GAAG,CAAC;KAC1D,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,IAAA,sBAAW,GAAE,aAAa,CAAC;KAC/E,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,OAA4B,EAAiB,EAAE;IACvE,MAAM,UAAU,GAAW,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,YAAG,CAAC,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAkB,CAAC;IACvB,IAAI,CAAC;QACD,OAAO,GAAG,IAAA,+BAAoB,EAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,YAAG,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,4DAA4D;IAC5D,uCAAuC;IACvC,iDAAiD;IACjD,mEAAmE;IACnE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAc,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAC;QACtD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,YAAG,CAAC,IAAI,CAAC,sCAAsC,6BAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAW,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9E,YAAG,CAAC,IAAI,CAAC,uBAAuB,WAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;IAED,YAAG,CAAC,KAAK,EAAE,CAAC;IACZ,IAAA,0BAAiB,EAAC,UAAU,CAAC,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAED,YAAG,CAAC,KAAK,EAAE,CAAC;IACZ,YAAG,CAAC,KAAK,CAAC,SAAS,EAAE,WAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACzC,YAAG,CAAC,KAAK,EAAE,CAAC;IACZ,YAAG,CAAC,OAAO,CAAC,sBAAsB,WAAE,CAAC,GAAG,CAAC,sDAAsD,CAAC,EAAE,CAAC,CAAC;IACpG,MAAM,IAAA,wBAAY,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * IronBee CLI — `ironbee process-analytics ...`
3
+ *
4
+ * Detached-worker entry point for analytics projection on the Stop hook.
5
+ * Stop hooks fire-and-forget this worker (via `spawnDetachedAnalyticsWorker`)
6
+ * so the host hook returns in ~ms while the (now-ish heavy) projection +
7
+ * emit runs out-of-band. The worker calls `emitAnalytics` with the same
8
+ * inputs the in-hook path would have used.
9
+ *
10
+ * NOT used by SessionEnd — that path runs synchronously inline so the final
11
+ * `is_final: true` snapshot is queued before the process exits.
12
+ *
13
+ * Failures here log to the per-session `analytics.log` and exit gracefully;
14
+ * the parent hook is unaffected.
15
+ */
16
+ import { Command } from "commander";
17
+ export declare const processAnalyticsCommand: Command;
18
+ //# sourceMappingURL=process-analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-analytics.d.ts","sourceRoot":"","sources":["../../src/commands/process-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,uBAAuB,EAAE,OAoChC,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — `ironbee process-analytics ...`
4
+ *
5
+ * Detached-worker entry point for analytics projection on the Stop hook.
6
+ * Stop hooks fire-and-forget this worker (via `spawnDetachedAnalyticsWorker`)
7
+ * so the host hook returns in ~ms while the (now-ish heavy) projection +
8
+ * emit runs out-of-band. The worker calls `emitAnalytics` with the same
9
+ * inputs the in-hook path would have used.
10
+ *
11
+ * NOT used by SessionEnd — that path runs synchronously inline so the final
12
+ * `is_final: true` snapshot is queued before the process exits.
13
+ *
14
+ * Failures here log to the per-session `analytics.log` and exit gracefully;
15
+ * the parent hook is unaffected.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.processAnalyticsCommand = void 0;
19
+ const commander_1 = require("commander");
20
+ const logger_1 = require("../lib/logger");
21
+ const emit_1 = require("../analytics/emit");
22
+ const log_1 = require("../analytics/log");
23
+ exports.processAnalyticsCommand = new commander_1.Command("process-analytics")
24
+ .description("Internal worker — project + emit a session_analytics snapshot for one trigger")
25
+ .requiredOption("--project <dir>", "project directory (where .ironbee/sessions/<sid>/ lives)")
26
+ .requiredOption("--session <id>", "session id")
27
+ .requiredOption("--trigger <type>", "Stop | SessionEnd")
28
+ .option("--end-reason <reason>", "SessionEnd reason (optional)")
29
+ .option("--transcript-source <src>", "claude-code | cursor | missing")
30
+ .action(async (opts) => {
31
+ const triggerType = opts.trigger === "SessionEnd" ? "SessionEnd" : "Stop";
32
+ const transcriptSource = opts.transcriptSource
33
+ ?? "claude-code";
34
+ // Mirror the hook's session.log path so debug lines from collector,
35
+ // queue, etc. follow the worker too.
36
+ (0, logger_1.setLogFile)(`${opts.project}/.ironbee/sessions/${opts.session}/session.log`);
37
+ const log = new log_1.AnalyticsLog(opts.project, opts.session);
38
+ log.info(`worker: process-analytics start (trigger=${triggerType} session=${opts.session}`
39
+ + `${opts.endReason ? ` end_reason=${opts.endReason}` : ""})`);
40
+ try {
41
+ const outcome = await (0, emit_1.emitAnalytics)({
42
+ projectDir: opts.project,
43
+ sessionId: opts.session,
44
+ triggerType,
45
+ endReason: opts.endReason,
46
+ transcriptSource,
47
+ log,
48
+ });
49
+ log.info(`worker: process-analytics done (status=${outcome.status} reason=${outcome.reason})`);
50
+ }
51
+ catch (e) {
52
+ // emitAnalytics has its own outer try/catch; this is belt-and-suspenders.
53
+ logger_1.logger.debug(`process-analytics: unexpected error: ${e instanceof Error ? e.message : e}`);
54
+ log.error(`worker: unexpected error: ${e instanceof Error ? e.message : e}`);
55
+ }
56
+ });
57
+ //# sourceMappingURL=process-analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-analytics.js","sourceRoot":"","sources":["../../src/commands/process-analytics.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH,yCAAoC;AACpC,0CAAmD;AACnD,4CAA4E;AAC5E,0CAAgD;AAWnC,QAAA,uBAAuB,GAAY,IAAI,mBAAO,CAAC,mBAAmB,CAAC;KAC3E,WAAW,CAAC,+EAA+E,CAAC;KAC5F,cAAc,CAAC,iBAAiB,EAAE,0DAA0D,CAAC;KAC7F,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC;KAC9C,cAAc,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;KACvD,MAAM,CAAC,uBAAuB,EAAE,8BAA8B,CAAC;KAC/D,MAAM,CAAC,2BAA2B,EAAE,gCAAgC,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,IAA6B,EAAiB,EAAE;IAC3D,MAAM,WAAW,GAAgB,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;IACvF,MAAM,gBAAgB,GAAsB,IAAI,CAAC,gBAAiD;WAC3F,aAAa,CAAC;IAErB,oEAAoE;IACpE,qCAAqC;IACrC,IAAA,mBAAU,EAAC,GAAG,IAAI,CAAC,OAAO,sBAAsB,IAAI,CAAC,OAAO,cAAc,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAiB,IAAI,kBAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvE,GAAG,CAAC,IAAI,CACJ,4CAA4C,WAAW,YAAY,IAAI,CAAC,OAAO,EAAE;UAC/E,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAChE,CAAC;IAEF,IAAI,CAAC;QACD,MAAM,OAAO,GAAgB,MAAM,IAAA,oBAAa,EAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,OAAO;YACxB,SAAS,EAAE,IAAI,CAAC,OAAO;YACvB,WAAW;YACX,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,gBAAgB;YAChB,GAAG;SACN,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,0CAA0C,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnG,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QAClB,0EAA0E;QAC1E,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3F,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * IronBee CLI — `ironbee queue ...` subcommands
3
3
  *
4
- * See docs/job-queue.md §6.4, §8.2.
5
- *
6
- * All operator commands are scoped to the current project directory — they
4
+ * Operator-facing commands: status / drain / dead-letter (list, stats, retry,
5
+ * clear) / purge. All are scoped to the current project directory — they
7
6
  * aggregate across every session's queue/ subdir by default, or narrow to a
8
7
  * single session via `--session <id>`.
9
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6HpC,eAAO,MAAM,YAAY,EAAE,OACqC,CAAC"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/commands/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6HpC,eAAO,MAAM,YAAY,EAAE,OACqC,CAAC"}
@@ -2,9 +2,8 @@
2
2
  /**
3
3
  * IronBee CLI — `ironbee queue ...` subcommands
4
4
  *
5
- * See docs/job-queue.md §6.4, §8.2.
6
- *
7
- * All operator commands are scoped to the current project directory — they
5
+ * Operator-facing commands: status / drain / dead-letter (list, stats, retry,
6
+ * clear) / purge. All are scoped to the current project directory — they
8
7
  * aggregate across every session's queue/ subdir by default, or narrow to a
9
8
  * single session via `--session <id>`.
10
9
  */