@ironbee-ai/cli 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +167 -39
  3. package/dist/analysis/code-changes.js.map +1 -1
  4. package/dist/analysis/cross-session.js.map +1 -1
  5. package/dist/analysis/fix-effectiveness.js.map +1 -1
  6. package/dist/analysis/time-analysis.js.map +1 -1
  7. package/dist/analysis/verdict-details.js.map +1 -1
  8. package/dist/analysis/verification-quality.js.map +1 -1
  9. package/dist/analytics/classifier.d.ts +99 -0
  10. package/dist/analytics/classifier.d.ts.map +1 -0
  11. package/dist/analytics/classifier.js +380 -0
  12. package/dist/analytics/classifier.js.map +1 -0
  13. package/dist/analytics/emit.d.ts +67 -0
  14. package/dist/analytics/emit.d.ts.map +1 -0
  15. package/dist/analytics/emit.js +901 -0
  16. package/dist/analytics/emit.js.map +1 -0
  17. package/dist/analytics/errors.d.ts +33 -0
  18. package/dist/analytics/errors.d.ts.map +1 -0
  19. package/dist/analytics/errors.js +93 -0
  20. package/dist/analytics/errors.js.map +1 -0
  21. package/dist/analytics/hook-trigger.d.ts +39 -0
  22. package/dist/analytics/hook-trigger.d.ts.map +1 -0
  23. package/dist/analytics/hook-trigger.js +127 -0
  24. package/dist/analytics/hook-trigger.js.map +1 -0
  25. package/dist/analytics/log.d.ts +44 -0
  26. package/dist/analytics/log.d.ts.map +1 -0
  27. package/dist/analytics/log.js +158 -0
  28. package/dist/analytics/log.js.map +1 -0
  29. package/dist/analytics/merge.d.ts +40 -0
  30. package/dist/analytics/merge.d.ts.map +1 -0
  31. package/dist/analytics/merge.js +527 -0
  32. package/dist/analytics/merge.js.map +1 -0
  33. package/dist/analytics/pricing.d.ts +149 -0
  34. package/dist/analytics/pricing.d.ts.map +1 -0
  35. package/dist/analytics/pricing.js +179 -0
  36. package/dist/analytics/pricing.js.map +1 -0
  37. package/dist/analytics/projection.d.ts +356 -0
  38. package/dist/analytics/projection.d.ts.map +1 -0
  39. package/dist/analytics/projection.js +2281 -0
  40. package/dist/analytics/projection.js.map +1 -0
  41. package/dist/analytics/spawn.d.ts +28 -0
  42. package/dist/analytics/spawn.d.ts.map +1 -0
  43. package/dist/analytics/spawn.js +57 -0
  44. package/dist/analytics/spawn.js.map +1 -0
  45. package/dist/analytics/state.d.ts +58 -0
  46. package/dist/analytics/state.d.ts.map +1 -0
  47. package/dist/analytics/state.js +329 -0
  48. package/dist/analytics/state.js.map +1 -0
  49. package/dist/analytics/transcript.d.ts +150 -0
  50. package/dist/analytics/transcript.d.ts.map +1 -0
  51. package/dist/analytics/transcript.js +276 -0
  52. package/dist/analytics/transcript.js.map +1 -0
  53. package/dist/analytics/types.d.ts +875 -0
  54. package/dist/analytics/types.d.ts.map +1 -0
  55. package/dist/analytics/types.js +31 -0
  56. package/dist/analytics/types.js.map +1 -0
  57. package/dist/clients/base.d.ts +21 -2
  58. package/dist/clients/base.d.ts.map +1 -1
  59. package/dist/clients/claude/commands/ironbee-verify.md +15 -7
  60. package/dist/clients/claude/fragments/command-verify.node.md +33 -0
  61. package/dist/clients/claude/fragments/rule.node.md +29 -0
  62. package/dist/clients/claude/fragments/skill.node.md +77 -0
  63. package/dist/clients/claude/hooks/activity-end.d.ts +13 -0
  64. package/dist/clients/claude/hooks/activity-end.d.ts.map +1 -0
  65. package/dist/clients/claude/hooks/activity-end.js +42 -0
  66. package/dist/clients/claude/hooks/activity-end.js.map +1 -0
  67. package/dist/clients/claude/hooks/require-verdict.d.ts +3 -2
  68. package/dist/clients/claude/hooks/require-verdict.d.ts.map +1 -1
  69. package/dist/clients/claude/hooks/require-verdict.js +6 -5
  70. package/dist/clients/claude/hooks/require-verdict.js.map +1 -1
  71. package/dist/clients/claude/hooks/require-verification.d.ts +7 -4
  72. package/dist/clients/claude/hooks/require-verification.d.ts.map +1 -1
  73. package/dist/clients/claude/hooks/require-verification.js +44 -22
  74. package/dist/clients/claude/hooks/require-verification.js.map +1 -1
  75. package/dist/clients/claude/hooks/session-end.d.ts.map +1 -1
  76. package/dist/clients/claude/hooks/session-end.js +17 -2
  77. package/dist/clients/claude/hooks/session-end.js.map +1 -1
  78. package/dist/clients/claude/hooks/session-start.d.ts.map +1 -1
  79. package/dist/clients/claude/hooks/session-start.js +2 -1
  80. package/dist/clients/claude/hooks/session-start.js.map +1 -1
  81. package/dist/clients/claude/hooks/track-action-monitor.d.ts +27 -0
  82. package/dist/clients/claude/hooks/track-action-monitor.d.ts.map +1 -0
  83. package/dist/clients/claude/hooks/track-action-monitor.js +126 -0
  84. package/dist/clients/claude/hooks/track-action-monitor.js.map +1 -0
  85. package/dist/clients/claude/hooks/track-action.d.ts.map +1 -1
  86. package/dist/clients/claude/hooks/track-action.js +29 -20
  87. package/dist/clients/claude/hooks/track-action.js.map +1 -1
  88. package/dist/clients/claude/hooks/verify-gate.d.ts.map +1 -1
  89. package/dist/clients/claude/hooks/verify-gate.js +18 -1
  90. package/dist/clients/claude/hooks/verify-gate.js.map +1 -1
  91. package/dist/clients/claude/index.d.ts +4 -1
  92. package/dist/clients/claude/index.d.ts.map +1 -1
  93. package/dist/clients/claude/index.js +171 -94
  94. package/dist/clients/claude/index.js.map +1 -1
  95. package/dist/clients/claude/rules/ironbee-verification.md +41 -33
  96. package/dist/clients/claude/skills/ironbee-verification.md +93 -76
  97. package/dist/clients/cursor/commands/ironbee-verify/SKILL.md +18 -10
  98. package/dist/clients/cursor/fragments/command-verify.node.md +33 -0
  99. package/dist/clients/cursor/fragments/rule.node.md +29 -0
  100. package/dist/clients/cursor/fragments/skill.node.md +77 -0
  101. package/dist/clients/cursor/hooks/activity-end.d.ts +14 -0
  102. package/dist/clients/cursor/hooks/activity-end.d.ts.map +1 -0
  103. package/dist/clients/cursor/hooks/activity-end.js +45 -0
  104. package/dist/clients/cursor/hooks/activity-end.js.map +1 -0
  105. package/dist/clients/cursor/hooks/require-verdict.d.ts +1 -1
  106. package/dist/clients/cursor/hooks/require-verdict.js +4 -4
  107. package/dist/clients/cursor/hooks/require-verification.d.ts.map +1 -1
  108. package/dist/clients/cursor/hooks/require-verification.js +42 -16
  109. package/dist/clients/cursor/hooks/require-verification.js.map +1 -1
  110. package/dist/clients/cursor/hooks/session-end.d.ts.map +1 -1
  111. package/dist/clients/cursor/hooks/session-end.js +18 -2
  112. package/dist/clients/cursor/hooks/session-end.js.map +1 -1
  113. package/dist/clients/cursor/hooks/session-start.d.ts.map +1 -1
  114. package/dist/clients/cursor/hooks/session-start.js +2 -1
  115. package/dist/clients/cursor/hooks/session-start.js.map +1 -1
  116. package/dist/clients/cursor/hooks/track-action-monitor.d.ts +27 -0
  117. package/dist/clients/cursor/hooks/track-action-monitor.d.ts.map +1 -0
  118. package/dist/clients/cursor/hooks/track-action-monitor.js +133 -0
  119. package/dist/clients/cursor/hooks/track-action-monitor.js.map +1 -0
  120. package/dist/clients/cursor/hooks/track-action.d.ts.map +1 -1
  121. package/dist/clients/cursor/hooks/track-action.js +51 -23
  122. package/dist/clients/cursor/hooks/track-action.js.map +1 -1
  123. package/dist/clients/cursor/hooks/verify-gate.d.ts.map +1 -1
  124. package/dist/clients/cursor/hooks/verify-gate.js +14 -1
  125. package/dist/clients/cursor/hooks/verify-gate.js.map +1 -1
  126. package/dist/clients/cursor/index.d.ts +4 -1
  127. package/dist/clients/cursor/index.d.ts.map +1 -1
  128. package/dist/clients/cursor/index.js +117 -71
  129. package/dist/clients/cursor/index.js.map +1 -1
  130. package/dist/clients/cursor/rules/ironbee-verification.mdc +37 -29
  131. package/dist/clients/cursor/skills/ironbee-verification.md +93 -76
  132. package/dist/clients/registry.d.ts +14 -0
  133. package/dist/clients/registry.d.ts.map +1 -1
  134. package/dist/clients/registry.js +34 -0
  135. package/dist/clients/registry.js.map +1 -1
  136. package/dist/commands/analyze.d.ts.map +1 -1
  137. package/dist/commands/analyze.js +40 -0
  138. package/dist/commands/analyze.js.map +1 -1
  139. package/dist/commands/backend-toggle.d.ts +45 -0
  140. package/dist/commands/backend-toggle.d.ts.map +1 -0
  141. package/dist/commands/backend-toggle.js +192 -0
  142. package/dist/commands/backend-toggle.js.map +1 -0
  143. package/dist/commands/disable-backend.d.ts +14 -0
  144. package/dist/commands/disable-backend.d.ts.map +1 -0
  145. package/dist/commands/disable-backend.js +34 -0
  146. package/dist/commands/disable-backend.js.map +1 -0
  147. package/dist/commands/disable-verification.d.ts +16 -0
  148. package/dist/commands/disable-verification.d.ts.map +1 -0
  149. package/dist/commands/disable-verification.js +36 -0
  150. package/dist/commands/disable-verification.js.map +1 -0
  151. package/dist/commands/enable-backend.d.ts +15 -0
  152. package/dist/commands/enable-backend.d.ts.map +1 -0
  153. package/dist/commands/enable-backend.js +35 -0
  154. package/dist/commands/enable-backend.js.map +1 -0
  155. package/dist/commands/enable-verification.d.ts +14 -0
  156. package/dist/commands/enable-verification.d.ts.map +1 -0
  157. package/dist/commands/enable-verification.js +34 -0
  158. package/dist/commands/enable-verification.js.map +1 -0
  159. package/dist/commands/hook.d.ts.map +1 -1
  160. package/dist/commands/hook.js +60 -0
  161. package/dist/commands/hook.js.map +1 -1
  162. package/dist/commands/import.d.ts +39 -0
  163. package/dist/commands/import.d.ts.map +1 -0
  164. package/dist/commands/import.js +369 -0
  165. package/dist/commands/import.js.map +1 -0
  166. package/dist/commands/install.d.ts.map +1 -1
  167. package/dist/commands/install.js +15 -20
  168. package/dist/commands/install.js.map +1 -1
  169. package/dist/commands/process-analytics.d.ts +18 -0
  170. package/dist/commands/process-analytics.d.ts.map +1 -0
  171. package/dist/commands/process-analytics.js +57 -0
  172. package/dist/commands/process-analytics.js.map +1 -0
  173. package/dist/commands/queue.d.ts +2 -3
  174. package/dist/commands/queue.d.ts.map +1 -1
  175. package/dist/commands/queue.js +2 -3
  176. package/dist/commands/queue.js.map +1 -1
  177. package/dist/commands/status.d.ts.map +1 -1
  178. package/dist/commands/status.js +29 -1
  179. package/dist/commands/status.js.map +1 -1
  180. package/dist/commands/verification-toggle.d.ts +47 -0
  181. package/dist/commands/verification-toggle.d.ts.map +1 -0
  182. package/dist/commands/verification-toggle.js +113 -0
  183. package/dist/commands/verification-toggle.js.map +1 -0
  184. package/dist/commands/verify.d.ts.map +1 -1
  185. package/dist/commands/verify.js +28 -0
  186. package/dist/commands/verify.js.map +1 -1
  187. package/dist/hooks/core/actions.d.ts +64 -67
  188. package/dist/hooks/core/actions.d.ts.map +1 -1
  189. package/dist/hooks/core/actions.js +39 -24
  190. package/dist/hooks/core/actions.js.map +1 -1
  191. package/dist/hooks/core/activity-end.d.ts +20 -0
  192. package/dist/hooks/core/activity-end.d.ts.map +1 -0
  193. package/dist/hooks/core/activity-end.js +23 -0
  194. package/dist/hooks/core/activity-end.js.map +1 -0
  195. package/dist/hooks/core/required-tools.d.ts +30 -0
  196. package/dist/hooks/core/required-tools.d.ts.map +1 -0
  197. package/dist/hooks/core/required-tools.js +70 -0
  198. package/dist/hooks/core/required-tools.js.map +1 -0
  199. package/dist/hooks/core/session-state.d.ts +12 -3
  200. package/dist/hooks/core/session-state.d.ts.map +1 -1
  201. package/dist/hooks/core/session-state.js +59 -0
  202. package/dist/hooks/core/session-state.js.map +1 -1
  203. package/dist/hooks/core/submit-verdict.d.ts.map +1 -1
  204. package/dist/hooks/core/submit-verdict.js +16 -12
  205. package/dist/hooks/core/submit-verdict.js.map +1 -1
  206. package/dist/hooks/core/verify-gate.d.ts +17 -3
  207. package/dist/hooks/core/verify-gate.d.ts.map +1 -1
  208. package/dist/hooks/core/verify-gate.js +312 -116
  209. package/dist/hooks/core/verify-gate.js.map +1 -1
  210. package/dist/import/claude/analytics-runner.d.ts +42 -0
  211. package/dist/import/claude/analytics-runner.d.ts.map +1 -0
  212. package/dist/import/claude/analytics-runner.js +213 -0
  213. package/dist/import/claude/analytics-runner.js.map +1 -0
  214. package/dist/import/claude/discovery.d.ts +22 -0
  215. package/dist/import/claude/discovery.d.ts.map +1 -0
  216. package/dist/import/claude/discovery.js +197 -0
  217. package/dist/import/claude/discovery.js.map +1 -0
  218. package/dist/import/claude/encoding.d.ts +50 -0
  219. package/dist/import/claude/encoding.d.ts.map +1 -0
  220. package/dist/import/claude/encoding.js +110 -0
  221. package/dist/import/claude/encoding.js.map +1 -0
  222. package/dist/import/claude/events/file-change.d.ts +28 -0
  223. package/dist/import/claude/events/file-change.d.ts.map +1 -0
  224. package/dist/import/claude/events/file-change.js +112 -0
  225. package/dist/import/claude/events/file-change.js.map +1 -0
  226. package/dist/import/claude/events/tool-call.d.ts +61 -0
  227. package/dist/import/claude/events/tool-call.d.ts.map +1 -0
  228. package/dist/import/claude/events/tool-call.js +119 -0
  229. package/dist/import/claude/events/tool-call.js.map +1 -0
  230. package/dist/import/claude/runner.d.ts +31 -0
  231. package/dist/import/claude/runner.d.ts.map +1 -0
  232. package/dist/import/claude/runner.js +280 -0
  233. package/dist/import/claude/runner.js.map +1 -0
  234. package/dist/import/claude/summary.d.ts +23 -0
  235. package/dist/import/claude/summary.d.ts.map +1 -0
  236. package/dist/import/claude/summary.js +186 -0
  237. package/dist/import/claude/summary.js.map +1 -0
  238. package/dist/import/claude/transcript-walk.d.ts +52 -0
  239. package/dist/import/claude/transcript-walk.d.ts.map +1 -0
  240. package/dist/import/claude/transcript-walk.js +187 -0
  241. package/dist/import/claude/transcript-walk.js.map +1 -0
  242. package/dist/import/concurrent-pool.d.ts +45 -0
  243. package/dist/import/concurrent-pool.d.ts.map +1 -0
  244. package/dist/import/concurrent-pool.js +95 -0
  245. package/dist/import/concurrent-pool.js.map +1 -0
  246. package/dist/import/emitter.d.ts +29 -0
  247. package/dist/import/emitter.d.ts.map +1 -0
  248. package/dist/import/emitter.js +66 -0
  249. package/dist/import/emitter.js.map +1 -0
  250. package/dist/import/events/activity.d.ts +23 -0
  251. package/dist/import/events/activity.d.ts.map +1 -0
  252. package/dist/import/events/activity.js +45 -0
  253. package/dist/import/events/activity.js.map +1 -0
  254. package/dist/import/events/session.d.ts +24 -0
  255. package/dist/import/events/session.d.ts.map +1 -0
  256. package/dist/import/events/session.js +47 -0
  257. package/dist/import/events/session.js.map +1 -0
  258. package/dist/import/filter.d.ts +47 -0
  259. package/dist/import/filter.d.ts.map +1 -0
  260. package/dist/import/filter.js +90 -0
  261. package/dist/import/filter.js.map +1 -0
  262. package/dist/import/ids.d.ts +56 -0
  263. package/dist/import/ids.d.ts.map +1 -0
  264. package/dist/import/ids.js +87 -0
  265. package/dist/import/ids.js.map +1 -0
  266. package/dist/import/index.d.ts +29 -0
  267. package/dist/import/index.d.ts.map +1 -0
  268. package/dist/import/index.js +52 -0
  269. package/dist/import/index.js.map +1 -0
  270. package/dist/import/marker.d.ts +20 -0
  271. package/dist/import/marker.d.ts.map +1 -0
  272. package/dist/import/marker.js +71 -0
  273. package/dist/import/marker.js.map +1 -0
  274. package/dist/import/pipeline.d.ts +41 -0
  275. package/dist/import/pipeline.d.ts.map +1 -0
  276. package/dist/import/pipeline.js +47 -0
  277. package/dist/import/pipeline.js.map +1 -0
  278. package/dist/import/progress.d.ts +20 -0
  279. package/dist/import/progress.d.ts.map +1 -0
  280. package/dist/import/progress.js +69 -0
  281. package/dist/import/progress.js.map +1 -0
  282. package/dist/import/skip.d.ts +13 -0
  283. package/dist/import/skip.d.ts.map +1 -0
  284. package/dist/import/skip.js +24 -0
  285. package/dist/import/skip.js.map +1 -0
  286. package/dist/import/types.d.ts +125 -0
  287. package/dist/import/types.d.ts.map +1 -0
  288. package/dist/import/types.js +28 -0
  289. package/dist/import/types.js.map +1 -0
  290. package/dist/index.js +21 -2
  291. package/dist/index.js.map +1 -1
  292. package/dist/lib/collector.d.ts +29 -3
  293. package/dist/lib/collector.d.ts.map +1 -1
  294. package/dist/lib/collector.js +118 -8
  295. package/dist/lib/collector.js.map +1 -1
  296. package/dist/lib/config.d.ts +240 -83
  297. package/dist/lib/config.d.ts.map +1 -1
  298. package/dist/lib/config.js +482 -89
  299. package/dist/lib/config.js.map +1 -1
  300. package/dist/lib/event.d.ts +72 -0
  301. package/dist/lib/event.d.ts.map +1 -0
  302. package/dist/lib/event.js +42 -0
  303. package/dist/lib/event.js.map +1 -0
  304. package/dist/lib/gitignore.d.ts +21 -0
  305. package/dist/lib/gitignore.d.ts.map +1 -0
  306. package/dist/lib/gitignore.js +54 -0
  307. package/dist/lib/gitignore.js.map +1 -0
  308. package/dist/lib/runtime-section.d.ts +118 -0
  309. package/dist/lib/runtime-section.d.ts.map +1 -0
  310. package/dist/lib/runtime-section.js +256 -0
  311. package/dist/lib/runtime-section.js.map +1 -0
  312. package/dist/lib/telemetry.d.ts +1 -1
  313. package/dist/lib/telemetry.d.ts.map +1 -1
  314. package/dist/lib/telemetry.js +4 -1
  315. package/dist/lib/telemetry.js.map +1 -1
  316. package/dist/queue/dead-letter.d.ts +5 -1
  317. package/dist/queue/dead-letter.d.ts.map +1 -1
  318. package/dist/queue/dead-letter.js +5 -1
  319. package/dist/queue/dead-letter.js.map +1 -1
  320. package/dist/queue/drain.d.ts +3 -2
  321. package/dist/queue/drain.d.ts.map +1 -1
  322. package/dist/queue/drain.js +3 -2
  323. package/dist/queue/drain.js.map +1 -1
  324. package/dist/queue/flush.d.ts +28 -12
  325. package/dist/queue/flush.d.ts.map +1 -1
  326. package/dist/queue/flush.js +43 -18
  327. package/dist/queue/flush.js.map +1 -1
  328. package/dist/queue/handlers/send-event.d.ts.map +1 -1
  329. package/dist/queue/handlers/send-event.js.map +1 -1
  330. package/dist/queue/index.d.ts +1 -2
  331. package/dist/queue/index.d.ts.map +1 -1
  332. package/dist/queue/index.js +2 -2
  333. package/dist/queue/index.js.map +1 -1
  334. package/dist/queue/paths.d.ts +4 -2
  335. package/dist/queue/paths.d.ts.map +1 -1
  336. package/dist/queue/paths.js +4 -2
  337. package/dist/queue/paths.js.map +1 -1
  338. package/dist/queue/process-file.d.ts +5 -1
  339. package/dist/queue/process-file.d.ts.map +1 -1
  340. package/dist/queue/process-file.js +5 -1
  341. package/dist/queue/process-file.js.map +1 -1
  342. package/dist/queue/snapshot.d.ts +4 -1
  343. package/dist/queue/snapshot.d.ts.map +1 -1
  344. package/dist/queue/snapshot.js +4 -1
  345. package/dist/queue/snapshot.js.map +1 -1
  346. package/dist/queue/spawn.d.ts +1 -3
  347. package/dist/queue/spawn.d.ts.map +1 -1
  348. package/dist/queue/spawn.js +1 -3
  349. package/dist/queue/spawn.js.map +1 -1
  350. package/dist/queue/submit.d.ts +6 -1
  351. package/dist/queue/submit.d.ts.map +1 -1
  352. package/dist/queue/submit.js +6 -1
  353. package/dist/queue/submit.js.map +1 -1
  354. package/dist/queue/types.d.ts +5 -1
  355. package/dist/queue/types.d.ts.map +1 -1
  356. package/dist/queue/types.js +5 -1
  357. package/dist/queue/types.js.map +1 -1
  358. package/dist/queue/worker-log.d.ts +3 -1
  359. package/dist/queue/worker-log.d.ts.map +1 -1
  360. package/dist/queue/worker-log.js +3 -1
  361. package/dist/queue/worker-log.js.map +1 -1
  362. package/package.json +1 -1
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Claude Transcript Walker Helpers
4
+ *
5
+ * Shared between `claude/runner.ts` (pipeline) and `claude/summary.ts`
6
+ * (dry-run estimator). Pure helpers — no I/O, no config — that operate
7
+ * on parsed Claude transcript lines.
8
+ *
9
+ * Claude transcript shape: each `.jsonl` line is a `TranscriptLine` with
10
+ * `type` ∈ {`user`, `assistant`, `system`, `summary`}. Tool calls live in
11
+ * assistant `message.content[]` as `tool_use` blocks; tool_results live
12
+ * in the next user `message.content[]` as `tool_result` blocks (joined by
13
+ * `tool_use_id`).
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.isHumanTextUserLine = isHumanTextUserLine;
17
+ exports.extractToolUsesFromLine = extractToolUsesFromLine;
18
+ exports.extractToolResultsByToolUseId = extractToolResultsByToolUseId;
19
+ exports.findNextUserLine = findNextUserLine;
20
+ exports.readSummaryEndReason = readSummaryEndReason;
21
+ exports.deriveTurnBoundariesFromTranscript = deriveTurnBoundariesFromTranscript;
22
+ exports.buildTurnLookup = buildTurnLookup;
23
+ /**
24
+ * `true` iff the user line carries human-typed text (not a tool_result-only
25
+ * synthesized user line). Mirrors `src/analytics/projection.ts:isHumanTextUser`
26
+ * but typed against `TranscriptLine` — equivalent semantics.
27
+ */
28
+ function isHumanTextUserLine(line) {
29
+ if (line.type !== "user" || line.message === undefined) {
30
+ return false;
31
+ }
32
+ const content = line.message.content;
33
+ if (typeof content === "string") {
34
+ return content.length > 0;
35
+ }
36
+ if (Array.isArray(content)) {
37
+ for (const block of content) {
38
+ if (block !== null && typeof block === "object") {
39
+ const t = block.type;
40
+ if (t === "text" && typeof block.text === "string") {
41
+ return true;
42
+ }
43
+ if (t === "tool_result") {
44
+ return false;
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return false;
50
+ }
51
+ /** Extract every `tool_use` block from an assistant line's `message.content[]`. */
52
+ function extractToolUsesFromLine(assistantLine) {
53
+ const content = assistantLine.message?.content;
54
+ if (!Array.isArray(content)) {
55
+ return [];
56
+ }
57
+ const out = [];
58
+ for (const block of content) {
59
+ if (block !== null && typeof block === "object") {
60
+ const b = block;
61
+ if (b.type === "tool_use" && typeof b.id === "string" && typeof b.name === "string") {
62
+ out.push({
63
+ id: b.id,
64
+ name: b.name,
65
+ input: (b.input !== null && typeof b.input === "object") ? b.input : {},
66
+ });
67
+ }
68
+ }
69
+ }
70
+ return out;
71
+ }
72
+ /** Map `tool_use_id` → `tool_result` from a user line's `message.content[]`. */
73
+ function extractToolResultsByToolUseId(userLine) {
74
+ const out = new Map();
75
+ const content = userLine.message?.content;
76
+ if (!Array.isArray(content)) {
77
+ return out;
78
+ }
79
+ for (const block of content) {
80
+ if (block !== null && typeof block === "object") {
81
+ const b = block;
82
+ if (b.type === "tool_result" && typeof b.tool_use_id === "string") {
83
+ out.set(b.tool_use_id, {
84
+ tool_use_id: b.tool_use_id,
85
+ is_error: b.is_error === true,
86
+ content: b.content,
87
+ });
88
+ }
89
+ }
90
+ }
91
+ return out;
92
+ }
93
+ /** Find the next user line after `afterIdx`, or undefined. */
94
+ function findNextUserLine(lines, afterIdx) {
95
+ for (let i = afterIdx + 1; i < lines.length; i++) {
96
+ if (lines[i].type === "user") {
97
+ return lines[i];
98
+ }
99
+ }
100
+ return undefined;
101
+ }
102
+ /** Read the optional `summary` line at the tail; returns its `endReason` field. */
103
+ function readSummaryEndReason(lines) {
104
+ for (let i = lines.length - 1; i >= 0; i--) {
105
+ const ln = lines[i];
106
+ if (ln.type === "summary") {
107
+ const reason = ln.endReason;
108
+ if (typeof reason === "string" && reason.length > 0) {
109
+ return reason;
110
+ }
111
+ return null;
112
+ }
113
+ }
114
+ return null;
115
+ }
116
+ /**
117
+ * Walk transcript lines and produce per-turn descriptors. Used as a
118
+ * fallback when `analytics.emitTurnEvents=false` suppresses analytics-runner's
119
+ * `turnEvents` array (we still need turn metadata for activity_*).
120
+ *
121
+ * Mirrors analytics' projection-side turn-open logic:
122
+ * - `isMeta=true` user msg with no open turn → host_inject opener
123
+ * - `isMeta=true` user msg with an open turn that has assistants → continuation
124
+ * - human-text user msg without isMeta → new user_msg turn
125
+ */
126
+ function deriveTurnBoundariesFromTranscript(lines) {
127
+ const out = [];
128
+ let current = null;
129
+ let nextIdx = 1;
130
+ for (const line of lines) {
131
+ const ts = line.timestamp ?? "";
132
+ if (line.type === "user") {
133
+ const isMeta = line.isMeta === true;
134
+ if (!isHumanTextUserLine(line)) {
135
+ continue;
136
+ }
137
+ if (isMeta && current !== null && current.assistantSeen) {
138
+ current.end = ts;
139
+ continue;
140
+ }
141
+ if (current !== null) {
142
+ out.push({ turnIndex: current.idx, startTime: current.start, endTime: current.end, triggeredBy: current.triggered });
143
+ }
144
+ current = {
145
+ idx: nextIdx,
146
+ start: ts,
147
+ end: ts,
148
+ triggered: isMeta ? "host_inject" : "user_msg",
149
+ assistantSeen: false,
150
+ };
151
+ nextIdx += 1;
152
+ }
153
+ else if (line.type === "assistant") {
154
+ if (current !== null) {
155
+ current.assistantSeen = true;
156
+ current.end = ts;
157
+ }
158
+ }
159
+ }
160
+ if (current !== null) {
161
+ out.push({ turnIndex: current.idx, startTime: current.start, endTime: current.end, triggeredBy: current.triggered });
162
+ }
163
+ return out;
164
+ }
165
+ function buildTurnLookup(boundaries) {
166
+ const sorted = [...boundaries].sort((a, b) => Date.parse(a.startTime) - Date.parse(b.startTime));
167
+ return {
168
+ lookup: (timestamp) => {
169
+ const ts = Date.parse(timestamp);
170
+ if (!Number.isFinite(ts)) {
171
+ return null;
172
+ }
173
+ let chosen = null;
174
+ for (const b of sorted) {
175
+ const startMs = Date.parse(b.startTime);
176
+ if (startMs <= ts) {
177
+ chosen = b;
178
+ }
179
+ else {
180
+ break;
181
+ }
182
+ }
183
+ return chosen !== null ? chosen.turnIndex : null;
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=transcript-walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-walk.js","sourceRoot":"","sources":["../../../src/import/claude/transcript-walk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * IronBee CLI — Generic Bounded-Concurrency Pool
3
+ *
4
+ * Used by `commands/import.ts` to drive per-session imports in parallel
5
+ * with a fixed concurrency cap. Pure logic — no client-specific code, no
6
+ * CLI dependencies — so the pool's runtime behavior (slot refill, cancel
7
+ * signal, completion ordering) can be unit-tested in isolation.
8
+ *
9
+ * Per-item failures are the caller's responsibility: `process` is expected
10
+ * to absorb its own errors and return a result envelope. If `process`
11
+ * throws, the pool finishes its in-flight items and then re-throws the
12
+ * FIRST captured error — guarantees no swallowed rejections + no torn
13
+ * intermediate state.
14
+ */
15
+ export interface ConcurrentPoolOpts<T, R> {
16
+ /** Items to process (one `process(item)` call each). */
17
+ items: T[];
18
+ /** Maximum number of `process` invocations in flight at once. */
19
+ concurrency: number;
20
+ /** Per-item worker. Called with the item and a 1-based index. */
21
+ process: (item: T, oneBasedIndex: number) => Promise<R>;
22
+ /** Optional pre-`process` hook (e.g. for progress reporting). */
23
+ onStart?: (item: T, oneBasedIndex: number) => void;
24
+ /** Optional post-`process` hook (e.g. for progress reporting). */
25
+ onComplete?: (result: R, item: T, oneBasedIndex: number) => void;
26
+ /**
27
+ * Optional cancellation signal. When the function returns `true`, no
28
+ * NEW items are started; in-flight items continue to completion. The
29
+ * pool resolves once every in-flight item finishes.
30
+ */
31
+ shouldCancel?: () => boolean;
32
+ }
33
+ /**
34
+ * Run a bounded-concurrency pool over `items`. Returns results in
35
+ * **completion order** (not input order — fastest items finish first).
36
+ *
37
+ * If any `process` invocation throws, the pool waits for the remaining
38
+ * in-flight items to settle, then re-throws the first captured error.
39
+ * Successful results from earlier items are discarded — callers wanting
40
+ * partial-result-on-error must absorb errors inside `process` and return
41
+ * a typed envelope (this is what `commands/import.ts` does — `importSession`
42
+ * itself returns `ImportResult` with `status: "failed"`).
43
+ */
44
+ export declare function runConcurrentPool<T, R>(opts: ConcurrentPoolOpts<T, R>): Promise<R[]>;
45
+ //# sourceMappingURL=concurrent-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrent-pool.d.ts","sourceRoot":"","sources":["../../src/import/concurrent-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,kBAAkB,CAAC,CAAC,EAAE,CAAC;IACpC,wDAAwD;IACxD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxD,iEAAiE;IACjE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,kEAAkE;IAClE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAsE1F"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Generic Bounded-Concurrency Pool
4
+ *
5
+ * Used by `commands/import.ts` to drive per-session imports in parallel
6
+ * with a fixed concurrency cap. Pure logic — no client-specific code, no
7
+ * CLI dependencies — so the pool's runtime behavior (slot refill, cancel
8
+ * signal, completion ordering) can be unit-tested in isolation.
9
+ *
10
+ * Per-item failures are the caller's responsibility: `process` is expected
11
+ * to absorb its own errors and return a result envelope. If `process`
12
+ * throws, the pool finishes its in-flight items and then re-throws the
13
+ * FIRST captured error — guarantees no swallowed rejections + no torn
14
+ * intermediate state.
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.runConcurrentPool = runConcurrentPool;
18
+ /**
19
+ * Run a bounded-concurrency pool over `items`. Returns results in
20
+ * **completion order** (not input order — fastest items finish first).
21
+ *
22
+ * If any `process` invocation throws, the pool waits for the remaining
23
+ * in-flight items to settle, then re-throws the first captured error.
24
+ * Successful results from earlier items are discarded — callers wanting
25
+ * partial-result-on-error must absorb errors inside `process` and return
26
+ * a typed envelope (this is what `commands/import.ts` does — `importSession`
27
+ * itself returns `ImportResult` with `status: "failed"`).
28
+ */
29
+ async function runConcurrentPool(opts) {
30
+ const concurrency = Math.max(1, opts.concurrency);
31
+ const results = [];
32
+ let cursor = 0;
33
+ let firstError = null;
34
+ const inflight = new Set();
35
+ const startNext = () => {
36
+ if (firstError !== null) {
37
+ return false;
38
+ }
39
+ if (opts.shouldCancel !== undefined && opts.shouldCancel()) {
40
+ return false;
41
+ }
42
+ if (cursor >= opts.items.length) {
43
+ return false;
44
+ }
45
+ if (inflight.size >= concurrency) {
46
+ return false;
47
+ }
48
+ const idx = cursor;
49
+ const oneBasedIndex = idx + 1;
50
+ const item = opts.items[idx];
51
+ cursor += 1;
52
+ if (opts.onStart !== undefined) {
53
+ opts.onStart(item, oneBasedIndex);
54
+ }
55
+ // The `p` ref is needed inside `.finally()` to remove itself from
56
+ // `inflight`. Declared as `let` then assigned because the assignment
57
+ // expression is the value being added to the Set — TS narrows safer
58
+ // when we capture the binding by name.
59
+ let p;
60
+ p = opts.process(item, oneBasedIndex)
61
+ .then((r) => {
62
+ results.push(r);
63
+ if (opts.onComplete !== undefined) {
64
+ opts.onComplete(r, item, oneBasedIndex);
65
+ }
66
+ })
67
+ .catch((e) => {
68
+ if (firstError === null) {
69
+ firstError = e instanceof Error ? e : new Error(String(e));
70
+ }
71
+ })
72
+ .finally(() => {
73
+ inflight.delete(p);
74
+ });
75
+ inflight.add(p);
76
+ return true;
77
+ };
78
+ // Prime the pool — startNext caps itself at `concurrency` so this just
79
+ // adds until the pool is full or items are exhausted.
80
+ while (startNext()) {
81
+ /* fill priming slots */
82
+ }
83
+ // Drain. After each completion, refill any freed slot up to `concurrency`.
84
+ while (inflight.size > 0) {
85
+ await Promise.race(inflight);
86
+ while (startNext()) {
87
+ /* fill freed slots */
88
+ }
89
+ }
90
+ if (firstError !== null) {
91
+ throw firstError;
92
+ }
93
+ return results;
94
+ }
95
+ //# sourceMappingURL=concurrent-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrent-pool.js","sourceRoot":"","sources":["../../src/import/concurrent-pool.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAgCH,8CAsEC;AAjFD;;;;;;;;;;GAUG;AACI,KAAK,UAAU,iBAAiB,CAAO,IAA8B;IACxE,MAAM,WAAW,GAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,IAAI,MAAM,GAAW,CAAC,CAAC;IACvB,IAAI,UAAU,GAAiB,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAuB,IAAI,GAAG,EAAiB,CAAC;IAE9D,MAAM,SAAS,GAAkB,GAAY,EAAE;QAC3C,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,MAAM,GAAG,GAAW,MAAM,CAAC;QAC3B,MAAM,aAAa,GAAW,GAAG,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACtC,CAAC;QACD,kEAAkE;QAClE,qEAAqE;QACrE,oEAAoE;QACpE,uCAAuC;QACvC,IAAI,CAAgB,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC;aAChC,IAAI,CAAC,CAAC,CAAI,EAAQ,EAAE;YACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAU,EAAQ,EAAE;YACxB,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gBACtB,UAAU,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC;QACL,CAAC,CAAC;aACD,OAAO,CAAC,GAAS,EAAE;YAChB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACP,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,uEAAuE;IACvE,sDAAsD;IACtD,OAAO,SAAS,EAAE,EAAE,CAAC;QACjB,wBAAwB;IAC5B,CAAC;IAED,2EAA2E;IAC3E,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,SAAS,EAAE,EAAE,CAAC;YACjB,sBAAsB;QAC1B,CAAC;IACL,CAAC;IAED,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,UAAU,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * IronBee CLI — Import Module Direct Collector POST
3
+ *
4
+ * Thin wrapper around `lib/collector.ts:sendEventsBatchToCollector` with
5
+ * transient-failure retry (1s/4s/16s backoff ).
6
+ * Never touches `actions.jsonl`, the queue, or any session state writers.
7
+ *
8
+ * Per-event-type batching: events of mixed types are POSTed in a single
9
+ * batch (the collector contract is a flat `Event[]`). Caller chunks by
10
+ * size if desired.
11
+ */
12
+ import { Event } from "../lib/event";
13
+ import { CollectorTarget } from "../lib/collector";
14
+ export interface EmitterOpts {
15
+ sessionId: string;
16
+ projectDir: string;
17
+ target: CollectorTarget | null;
18
+ /** Override per-batch cap. Defaults to `target.batchSize` or 100. */
19
+ batchSize?: number;
20
+ }
21
+ /**
22
+ * POST a batch of events with retry. Returns when every batch has either
23
+ * succeeded or exhausted retries. On exhaustion, throws the last error so
24
+ * the pipeline can mark the session `failed` (per-session atomicity).
25
+ *
26
+ * Silent no-op when `target === null` (collector disabled).
27
+ */
28
+ export declare function postEvents(events: Event[], opts: EmitterOpts): Promise<void>;
29
+ //# sourceMappingURL=emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/import/emitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,eAAe,EAA8B,MAAM,kBAAkB,CAAC;AAG/E,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlF"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Import Module Direct Collector POST
4
+ *
5
+ * Thin wrapper around `lib/collector.ts:sendEventsBatchToCollector` with
6
+ * transient-failure retry (1s/4s/16s backoff ).
7
+ * Never touches `actions.jsonl`, the queue, or any session state writers.
8
+ *
9
+ * Per-event-type batching: events of mixed types are POSTed in a single
10
+ * batch (the collector contract is a flat `Event[]`). Caller chunks by
11
+ * size if desired.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.postEvents = postEvents;
15
+ const collector_1 = require("../lib/collector");
16
+ const logger_1 = require("../lib/logger");
17
+ const DEFAULT_BATCH_SIZE = 100;
18
+ const RETRY_DELAYS_MS = [1000, 4000, 16000];
19
+ /**
20
+ * POST a batch of events with retry. Returns when every batch has either
21
+ * succeeded or exhausted retries. On exhaustion, throws the last error so
22
+ * the pipeline can mark the session `failed` (per-session atomicity).
23
+ *
24
+ * Silent no-op when `target === null` (collector disabled).
25
+ */
26
+ async function postEvents(events, opts) {
27
+ if (events.length === 0) {
28
+ return;
29
+ }
30
+ if (opts.target === null) {
31
+ logger_1.logger.debug(`import emitter: collector disabled — dropping ${events.length} events`);
32
+ return;
33
+ }
34
+ const batchSize = opts.batchSize
35
+ ?? (typeof opts.target.batchSize === "number" && opts.target.batchSize >= 1
36
+ ? opts.target.batchSize
37
+ : DEFAULT_BATCH_SIZE);
38
+ for (let i = 0; i < events.length; i += batchSize) {
39
+ const batch = events.slice(i, Math.min(i + batchSize, events.length));
40
+ await postOneBatchWithRetry(batch, opts);
41
+ }
42
+ }
43
+ async function postOneBatchWithRetry(batch, opts) {
44
+ let lastErr = null;
45
+ for (let attempt = 0; attempt <= RETRY_DELAYS_MS.length; attempt++) {
46
+ try {
47
+ await (0, collector_1.sendEventsBatchToCollector)(batch, opts.sessionId, opts.projectDir, opts.target);
48
+ return;
49
+ }
50
+ catch (e) {
51
+ lastErr = e instanceof Error ? e : new Error(String(e));
52
+ if (attempt < RETRY_DELAYS_MS.length) {
53
+ const delay = RETRY_DELAYS_MS[attempt];
54
+ logger_1.logger.debug(`import emitter: batch send failed (attempt ${attempt + 1}): ${lastErr.message} — retry in ${delay}ms`);
55
+ await sleep(delay);
56
+ }
57
+ }
58
+ }
59
+ throw lastErr ?? new Error("import emitter: send failed after retries");
60
+ }
61
+ function sleep(ms) {
62
+ return new Promise((resolve) => {
63
+ setTimeout(resolve, ms);
64
+ });
65
+ }
66
+ //# sourceMappingURL=emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/import/emitter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAwBH,gCAiBC;AAtCD,gDAA+E;AAC/E,0CAAuC;AAUvC,MAAM,kBAAkB,GAAW,GAAG,CAAC;AACvC,MAAM,eAAe,GAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAEtD;;;;;;GAMG;AACI,KAAK,UAAU,UAAU,CAAC,MAAe,EAAE,IAAiB;IAC/D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO;IACX,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACvB,eAAM,CAAC,KAAK,CAAC,iDAAiD,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QACtF,OAAO;IACX,CAAC;IACD,MAAM,SAAS,GAAW,IAAI,CAAC,SAAS;WACjC,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC;YACvE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS;YACvB,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACxD,MAAM,KAAK,GAAY,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,MAAM,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;AACL,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,KAAc,EAAE,IAAiB;IAClE,IAAI,OAAO,GAAiB,IAAI,CAAC;IACjC,KAAK,IAAI,OAAO,GAAW,CAAC,EAAE,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QACzE,IAAI,CAAC;YACD,MAAM,IAAA,sCAA0B,EAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACtF,OAAO;QACX,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAW,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC/C,eAAM,CAAC,KAAK,CAAC,8CAA8C,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,eAAe,KAAK,IAAI,CAAC,CAAC;gBACrH,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,OAAO,IAAI,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAmB,EAAQ,EAAE;QACnD,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * IronBee CLI — Import activity_start / activity_end derivation.
3
+ *
4
+ * Behavior:
5
+ * - one activity_start + one activity_end per turn (host_inject continuations
6
+ * are filtered upstream — by the analytics-runner caller)
7
+ * - source: "user_prompt" (we cannot recover the original `pre_tool_use`
8
+ * fallback signal from transcript alone)
9
+ * - duration_ms on end = end_time - start_time
10
+ * - activity_id matches the analytics turn_id (parent foreign key)
11
+ */
12
+ import { ActivityStartAction, ActivityEndAction } from "../../hooks/core/actions";
13
+ export interface TurnBoundary {
14
+ /** 1-based positional turn index from the analytics projection. */
15
+ turnIndex: number;
16
+ /** ISO-8601 string from the transcript. */
17
+ startTime: string;
18
+ /** ISO-8601 string. Falls back to startTime when transcript truncates mid-turn. */
19
+ endTime: string;
20
+ }
21
+ export declare function buildActivityStart(sessionId: string, projectName: string, boundary: TurnBoundary): ActivityStartAction;
22
+ export declare function buildActivityEnd(sessionId: string, projectName: string, boundary: TurnBoundary): ActivityEndAction;
23
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../src/import/events/activity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlF,MAAM,WAAW,YAAY;IACzB,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,YAAY,GACvB,mBAAmB,CAWrB;AAED,wBAAgB,gBAAgB,CAC5B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,YAAY,GACvB,iBAAiB,CAenB"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Import activity_start / activity_end derivation.
4
+ *
5
+ * Behavior:
6
+ * - one activity_start + one activity_end per turn (host_inject continuations
7
+ * are filtered upstream — by the analytics-runner caller)
8
+ * - source: "user_prompt" (we cannot recover the original `pre_tool_use`
9
+ * fallback signal from transcript alone)
10
+ * - duration_ms on end = end_time - start_time
11
+ * - activity_id matches the analytics turn_id (parent foreign key)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.buildActivityStart = buildActivityStart;
15
+ exports.buildActivityEnd = buildActivityEnd;
16
+ const ids_1 = require("../ids");
17
+ function buildActivityStart(sessionId, projectName, boundary) {
18
+ const activityId = (0, ids_1.deriveActivityId)(sessionId, boundary.turnIndex, boundary.startTime);
19
+ return {
20
+ id: (0, ids_1.deriveActivityStartEventId)(sessionId, boundary.turnIndex),
21
+ type: "activity_start",
22
+ timestamp: Date.parse(boundary.startTime),
23
+ session_id: sessionId,
24
+ project_name: projectName,
25
+ activity_id: activityId,
26
+ source: "user_prompt",
27
+ };
28
+ }
29
+ function buildActivityEnd(sessionId, projectName, boundary) {
30
+ const activityId = (0, ids_1.deriveActivityId)(sessionId, boundary.turnIndex, boundary.startTime);
31
+ const startMs = Date.parse(boundary.startTime);
32
+ const endMs = Date.parse(boundary.endTime);
33
+ const durationMs = Number.isFinite(endMs) && Number.isFinite(startMs) ? endMs - startMs : 0;
34
+ return {
35
+ id: (0, ids_1.deriveActivityEndEventId)(sessionId, boundary.turnIndex),
36
+ type: "activity_end",
37
+ timestamp: Number.isFinite(endMs) ? endMs : startMs,
38
+ session_id: sessionId,
39
+ project_name: projectName,
40
+ activity_id: activityId,
41
+ duration: durationMs,
42
+ reason: "import",
43
+ };
44
+ }
45
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../../src/import/events/activity.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAcH,gDAeC;AAED,4CAmBC;AA/CD,gCAAgG;AAWhG,SAAgB,kBAAkB,CAC9B,SAAiB,EACjB,WAAmB,EACnB,QAAsB;IAEtB,MAAM,UAAU,GAAW,IAAA,sBAAgB,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/F,OAAO;QACH,EAAE,EAAE,IAAA,gCAA0B,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;QAC7D,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzC,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,aAAa;KACxB,CAAC;AACN,CAAC;AAED,SAAgB,gBAAgB,CAC5B,SAAiB,EACjB,WAAmB,EACnB,QAAsB;IAEtB,MAAM,UAAU,GAAW,IAAA,sBAAgB,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,KAAK,GAAW,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,UAAU,GAAW,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,OAAO;QACH,EAAE,EAAE,IAAA,8BAAwB,EAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC;QAC3D,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO;QACnD,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,UAAU;QACvB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;KACnB,CAAC;AACN,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * IronBee CLI — Import session_start / session_end derivation.
3
+ *
4
+ * Behavior:
5
+ * - timestamp from first/last transcript line
6
+ * - id from sha256("session_*:" + session_id)
7
+ * - one of each per transcript
8
+ */
9
+ import { SessionStartAction, SessionEndAction } from "../../hooks/core/actions";
10
+ import { ImportTarget } from "../types";
11
+ /**
12
+ * Build a `session_start` event from import metadata. `client` is the
13
+ * upstream agent that produced the transcript ("claude", "cursor", …) —
14
+ * matches live mode where session-start hooks set the same field. Caller
15
+ * is the per-client runner (`claude/runner.ts`, `cursor/runner.ts`), so
16
+ * this stays generic.
17
+ */
18
+ export declare function buildSessionStart(target: ImportTarget, client: string): SessionStartAction;
19
+ /**
20
+ * Build a `session_end` event. `endTimestampMs` and `endReason` come from
21
+ * the transcript tail (last-line timestamp and summary line if present).
22
+ */
23
+ export declare function buildSessionEnd(target: ImportTarget, endTimestampMs: number, endReason: string): SessionEndAction;
24
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/import/events/session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAU1F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC3B,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAClB,gBAAgB,CAUlB"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Import session_start / session_end derivation.
4
+ *
5
+ * Behavior:
6
+ * - timestamp from first/last transcript line
7
+ * - id from sha256("session_*:" + session_id)
8
+ * - one of each per transcript
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.buildSessionStart = buildSessionStart;
12
+ exports.buildSessionEnd = buildSessionEnd;
13
+ const ids_1 = require("../ids");
14
+ /**
15
+ * Build a `session_start` event from import metadata. `client` is the
16
+ * upstream agent that produced the transcript ("claude", "cursor", …) —
17
+ * matches live mode where session-start hooks set the same field. Caller
18
+ * is the per-client runner (`claude/runner.ts`, `cursor/runner.ts`), so
19
+ * this stays generic.
20
+ */
21
+ function buildSessionStart(target, client) {
22
+ return {
23
+ id: (0, ids_1.deriveSessionStartEventId)(target.sessionId),
24
+ type: "session_start",
25
+ timestamp: target.sessionStartMs,
26
+ session_id: target.sessionId,
27
+ project_name: target.projectName,
28
+ client,
29
+ source: "import",
30
+ };
31
+ }
32
+ /**
33
+ * Build a `session_end` event. `endTimestampMs` and `endReason` come from
34
+ * the transcript tail (last-line timestamp and summary line if present).
35
+ */
36
+ function buildSessionEnd(target, endTimestampMs, endReason) {
37
+ return {
38
+ id: (0, ids_1.deriveSessionEndEventId)(target.sessionId),
39
+ type: "session_end",
40
+ timestamp: endTimestampMs,
41
+ session_id: target.sessionId,
42
+ project_name: target.projectName,
43
+ reason: endReason,
44
+ duration: endTimestampMs - target.sessionStartMs,
45
+ };
46
+ }
47
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/import/events/session.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAaH,8CAUC;AAMD,0CAcC;AAvCD,gCAA4E;AAE5E;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,MAAoB,EAAE,MAAc;IAClE,OAAO;QACH,EAAE,EAAE,IAAA,+BAAyB,EAAC,MAAM,CAAC,SAAS,CAAC;QAC/C,IAAI,EAAE,eAAe;QACrB,SAAS,EAAE,MAAM,CAAC,cAAc;QAChC,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,MAAM;QACN,MAAM,EAAE,QAAQ;KACnB,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAC3B,MAAoB,EACpB,cAAsB,EACtB,SAAiB;IAEjB,OAAO;QACH,EAAE,EAAE,IAAA,6BAAuB,EAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,cAAc;QACzB,UAAU,EAAE,MAAM,CAAC,SAAS;QAC5B,YAAY,EAAE,MAAM,CAAC,WAAW;QAChC,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC,cAAc;KACnD,CAAC;AACN,CAAC"}