@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,380 @@
1
+ "use strict";
2
+ /**
3
+ * IronBee CLI — Per-Turn Classifier
4
+ *
5
+ * Adapted from codeburn's `src/classifier.ts` — assigns each agent turn a
6
+ * `TurnCategory` label using:
7
+ * 1. **Tool patterns** — what tools were used (Edit/Read/Bash/Task/...)
8
+ * 2. **User message keywords** — regex match on the human-user prompt text
9
+ * 3. **Bash command keywords** — regex match on raw Bash command bodies
10
+ *
11
+ * The user message text and Bash command text are read locally for regex
12
+ * matching but **never emitted** on the wire — only `TurnCategory` labels
13
+ * and counter aggregates leave this module. Same privacy contract as the
14
+ * existing `extractBashBinary` path: content INPUT, structural label OUTPUT.
15
+ *
16
+ * Pattern coverage extends codeburn's runtime list to support modern JS/TS
17
+ * (vite/turbopack/swc/bun), Python (poetry/pdm/hatch/uv), JVM (gradle/sbt),
18
+ * .NET, Swift, Elixir, Erlang, Mobile (flutter/expo/eas), Cloud deploy
19
+ * (terraform/pulumi/cdk/k8s/helm), and 30+ test frameworks.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.GIT_PATTERNS = exports.INSTALL_PATTERNS = exports.BUILD_PATTERNS = exports.TEST_PATTERNS = exports.URL_PATTERN = exports.SCRIPT_PATTERNS = exports.FILE_PATTERNS = exports.RESEARCH_KEYWORDS = exports.BRAINSTORM_KEYWORDS = exports.REFACTOR_KEYWORDS = exports.FEATURE_KEYWORDS = exports.DEBUG_KEYWORDS = void 0;
23
+ exports.extractUserMsgKeywords = extractUserMsgKeywords;
24
+ exports.applyToolBucketFlags = applyToolBucketFlags;
25
+ exports.emptyToolBucketFlags = emptyToolBucketFlags;
26
+ exports.emptyBashCmdFlags = emptyBashCmdFlags;
27
+ exports.applyBashCmdFlags = applyBashCmdFlags;
28
+ exports.classifyTurn = classifyTurn;
29
+ // ─────────────────────────────────────────────────────────────────────────
30
+ // Keyword regexes — applied to USER MESSAGE TEXT
31
+ // ─────────────────────────────────────────────────────────────────────────
32
+ exports.DEBUG_KEYWORDS = /\b(fix|bug|error|broken|failing|crash|issue|debug|traceback|exception|stack\s*trace|not\s+working|wrong|unexpected|status\s+code|404|500|401|403|segfault|panic|null\s*pointer|stacktrace|fatal|abort|crashed|fails?)\b/i;
33
+ exports.FEATURE_KEYWORDS = /\b(add|create|implement|new|build|feature|introduce|set\s*up|scaffold|generate|make\s+(?:a|me|the|an|some)|write\s+(?:a|me|the|an|some)|develop|design)\b/i;
34
+ exports.REFACTOR_KEYWORDS = /\b(refactor|clean\s*up|cleanup|rename|reorganize|simplify|extract|restructure|move|migrate|split|consolidate|inline|abstract|generalize|deduplicate)\b/i;
35
+ exports.BRAINSTORM_KEYWORDS = /\b(brainstorm|idea|what\s+if|explore|think\s+about|approach|strategy|design|consider|how\s+should|what\s+would|opinion|suggest|recommend|tradeoff|alternative)\b/i;
36
+ exports.RESEARCH_KEYWORDS = /\b(research|investigate|look\s+into|find\s+out|check|search|analyze|review|understand|explain|how\s+does|what\s+is|show\s+me|list|compare|describe|summarize)\b/i;
37
+ exports.FILE_PATTERNS = /\.(py|js|ts|tsx|jsx|mjs|cjs|json|yaml|yml|toml|sql|sh|bash|zsh|fish|go|rs|java|rb|php|css|html|md|mdx|csv|xml|kt|kts|swift|dart|c|cpp|cc|h|hpp|cs|fs|fsx|ml|mli|hs|elm|ex|exs|erl|hrl|clj|cljs|nim|jl|lua|r|R|scala|sbt|vb|tf|hcl|graphql|gql|proto|svelte|vue|astro|sass|scss|less|stylus|env|gitignore|dockerfile|cfg|ini|properties|gradle|gemspec)\b/i;
38
+ exports.SCRIPT_PATTERNS = /\b(run\s+\S+\.\w+|execute|scrip?t|curl|wget|api\s+\S+|endpoint|request\s+url|fetch\s+\S+|query|database|db\s+\S+|migration|migrate)\b/i;
39
+ exports.URL_PATTERN = /https?:\/\/\S+/i;
40
+ // ─────────────────────────────────────────────────────────────────────────
41
+ // Command regexes — applied to USER MESSAGE TEXT and BASH COMMAND TEXT
42
+ // ─────────────────────────────────────────────────────────────────────────
43
+ /** Test runners across mainstream languages + CI coverage tooling. */
44
+ exports.TEST_PATTERNS = new RegExp("\\b(" + [
45
+ // Action keywords (very broad — last-resort match)
46
+ "test", "spec", "coverage",
47
+ // JS/TS test frameworks + runners
48
+ "jest", "vitest", "mocha", "cypress", "playwright", "karma", "jasmine", "ava",
49
+ "tape", "wtr",
50
+ "npm\\s+test", "yarn\\s+test", "pnpm\\s+test", "bun\\s+test",
51
+ "npx\\s+(?:jest|vitest|mocha|cypress|playwright|jasmine|ava)",
52
+ // Python
53
+ "pytest", "nosetests?", "tox", "nox", "behave", "robot", "hypothesis",
54
+ "python3?\\s+-m\\s+(?:pytest|unittest|nose)",
55
+ "hatch\\s+test",
56
+ // Ruby
57
+ "rspec", "minitest", "cucumber", "rake\\s+test", "rake\\s+spec",
58
+ "bundle\\s+exec\\s+(?:rspec|cucumber|test)",
59
+ // Go
60
+ "go\\s+test", "gotestsum", "ginkgo",
61
+ // Rust
62
+ "cargo\\s+(?:test|nextest)",
63
+ // JVM (Java/Kotlin/Scala)
64
+ "mvn\\s+test", "gradle\\s+test", "gradlew\\s+test", "sbt\\s+test",
65
+ "junit", "kotest", "spek",
66
+ // PHP
67
+ "phpunit", "pest", "composer\\s+test",
68
+ // .NET
69
+ "dotnet\\s+test", "nunit", "xunit", "mstest",
70
+ // Swift / Apple
71
+ "swift\\s+test", "xcodebuild\\s+test",
72
+ // Elixir / Erlang
73
+ "mix\\s+test", "rebar3\\s+(?:eunit|ct|proper)",
74
+ // Native / Generic build-system test targets
75
+ "make\\s+(?:test|check)", "meson\\s+test", "ctest", "cmake\\s+--build.*--target\\s+test",
76
+ // CI / Coverage tooling
77
+ "codecov", "coveralls", "nyc", "c8", "jacoco",
78
+ ].join("|") + ")\\b", "i");
79
+ /** Build, package, and deploy commands. */
80
+ exports.BUILD_PATTERNS = new RegExp("\\b(" + [
81
+ // JS/TS bundlers + frameworks
82
+ "webpack", "rollup", "esbuild", "parcel", "swc", "tsup", "turbopack", "browserify", "rspack",
83
+ "next\\s+build", "nuxt\\s+build", "astro\\s+build", "gatsby\\s+build", "remix\\s+build",
84
+ "vite\\s+build",
85
+ // npm/yarn/pnpm/bun scripts
86
+ "npm\\s+run\\s+(?:build|dev|start|publish)", "npm\\s+(?:start|publish)",
87
+ "yarn\\s+(?:build|dev|start|publish)",
88
+ "pnpm\\s+(?:build|dev|start|publish)",
89
+ "bun\\s+run\\s+(?:build|dev|start)", "bun\\s+build",
90
+ // Python
91
+ "python3?\\s+setup\\.py", "setup\\.py\\s+(?:install|build|sdist|bdist)",
92
+ "poetry\\s+(?:build|publish)", "pdm\\s+build", "hatch\\s+build", "flit\\s+build",
93
+ "python3?\\s+-m\\s+build", "twine\\s+(?:upload|check)",
94
+ // Ruby
95
+ "rake\\s+build", "gem\\s+build", "gem\\s+push",
96
+ // Go
97
+ "go\\s+(?:build|run|install)",
98
+ // Rust
99
+ "cargo\\s+(?:build|run|publish|install)",
100
+ // JVM
101
+ "mvn\\s+(?:install|package|deploy|compile)",
102
+ "gradle\\s+(?:build|assemble|publish)", "gradlew\\s+(?:build|assemble|assembleDebug|assembleRelease)",
103
+ "sbt\\s+(?:compile|assembly|publish)",
104
+ // PHP
105
+ "composer\\s+(?:install|update|require|run)", "php\\s+artisan",
106
+ // .NET
107
+ "dotnet\\s+(?:build|run|publish|pack)",
108
+ // C/C++ / native
109
+ "make", "cmake", "ninja", "bazel\\s+build", "meson\\s+(?:setup|compile)",
110
+ // Containers / orchestration
111
+ "docker\\s+(?:build|push|compose|run|pull)", "docker-compose",
112
+ "podman\\s+(?:build|push|run)",
113
+ "kubectl\\s+(?:apply|delete|rollout|create)",
114
+ "helm\\s+(?:install|upgrade|uninstall)",
115
+ "skaffold", "tilt", "argocd", "flux",
116
+ // Cloud deploy / serverless / IaC
117
+ "vercel", "netlify", "fly\\s+deploy", "fly\\.io",
118
+ "gcloud\\s+(?:deploy|app|run|builds)",
119
+ "aws\\s+(?:s3|lambda|cloudformation|amplify|deploy|elasticbeanstalk)",
120
+ "az\\s+(?:webapp|deploy|functionapp)",
121
+ "terraform\\s+(?:apply|plan|destroy|init)",
122
+ "pulumi\\s+(?:up|destroy|preview)",
123
+ "cdk\\s+(?:deploy|destroy|synth)",
124
+ "ansible-playbook", "chef-client", "salt",
125
+ "serverless\\s+deploy", "sst\\s+deploy",
126
+ // Process managers
127
+ "pm2", "systemctl", "supervisorctl", "launchctl",
128
+ // Mobile
129
+ "flutter\\s+(?:build|run)", "expo\\s+(?:build|publish)", "eas\\s+build",
130
+ "react-native\\s+run", "pod\\s+install", "xcodebuild", "fastlane",
131
+ // Elixir / Erlang
132
+ "mix\\s+(?:compile|release|deps\\.get)", "rebar3\\s+(?:compile|release)",
133
+ // Misc bare keyword
134
+ "deploy",
135
+ ].join("|") + ")\\b", "i");
136
+ /** Package install commands across language + system package managers. */
137
+ exports.INSTALL_PATTERNS = new RegExp("\\b(" + [
138
+ // JS/TS
139
+ "npm\\s+(?:install|i|ci|add)",
140
+ "yarn\\s+(?:add|install)",
141
+ "pnpm\\s+(?:install|i|ci|add)",
142
+ "bun\\s+(?:install|i|add)",
143
+ // Python
144
+ "pip3?\\s+install", "pipx\\s+install", "pipenv\\s+install",
145
+ "poetry\\s+(?:add|install)", "pdm\\s+(?:add|install)",
146
+ "conda\\s+install", "mamba\\s+install",
147
+ "uv\\s+(?:pip\\s+install|add|sync)",
148
+ // Ruby
149
+ "gem\\s+install", "bundle\\s+(?:install|add|update)",
150
+ // Go
151
+ "go\\s+(?:get|install|mod\\s+download)",
152
+ // Rust
153
+ "cargo\\s+(?:add|install)",
154
+ // JVM
155
+ "mvn\\s+install", "gradle\\s+install",
156
+ // PHP
157
+ "composer\\s+(?:install|require|update|global)",
158
+ // .NET
159
+ "dotnet\\s+(?:add\\s+package|restore)", "nuget\\s+(?:install|restore)",
160
+ // System / OS package managers
161
+ "brew\\s+(?:install|reinstall|upgrade|tap)",
162
+ "apt(?:-get)?\\s+install", "dpkg\\s+-i",
163
+ "yum\\s+install", "dnf\\s+install",
164
+ "pacman\\s+-S[yu]*",
165
+ "zypper\\s+install", "pkg\\s+install", "apk\\s+add",
166
+ "port\\s+install",
167
+ "choco\\s+install", "scoop\\s+install", "winget\\s+install",
168
+ // Containers
169
+ "docker\\s+pull",
170
+ ].join("|") + ")\\b", "i");
171
+ /** Git operations. */
172
+ exports.GIT_PATTERNS = /\bgit\s+(push|pull|commit|merge|rebase|checkout|branch|stash|log|diff|status|add|reset|cherry-pick|tag|fetch|clone|switch|restore|worktree|submodule|remote|init|blame|reflog|revert|bisect)\b/i;
173
+ // ─────────────────────────────────────────────────────────────────────────
174
+ // Tool name buckets — used by classifier predicates
175
+ // ─────────────────────────────────────────────────────────────────────────
176
+ const EDIT_TOOLS = new Set([
177
+ "Edit", "Write", "MultiEdit", "NotebookEdit", "FileEditTool", "FileWriteTool",
178
+ "StrReplace", "Delete", "edit", "edit_file", "create_file", "delete_file",
179
+ ]);
180
+ const READ_TOOLS = new Set([
181
+ "Read", "Grep", "Glob", "FileReadTool", "GrepTool", "GlobTool",
182
+ "read_file", "grep", "glob", "list_dir",
183
+ ]);
184
+ const BASH_TOOLS = new Set([
185
+ "Bash", "BashOutput", "KillShell", "BashTool", "PowerShellTool", "Shell", "shell",
186
+ ]);
187
+ const TASK_TOOLS = new Set([
188
+ "Task", "Agent", "AgentSpawn", "TodoWrite",
189
+ ]);
190
+ const SEARCH_TOOLS = new Set([
191
+ "WebSearch", "WebFetch", "ToolSearch",
192
+ ]);
193
+ const PLAN_TOOLS = new Set([
194
+ "TodoWrite", "ExitPlanMode", "Plan",
195
+ ]);
196
+ /** Run all user-msg regexes on the prompt text — privacy-safe (only flags returned). */
197
+ function extractUserMsgKeywords(text) {
198
+ if (text.length === 0) {
199
+ return {
200
+ debug: false, feature: false, refactor: false, brainstorm: false,
201
+ research: false, file_pattern: false, script_pattern: false, url: false,
202
+ };
203
+ }
204
+ return {
205
+ debug: exports.DEBUG_KEYWORDS.test(text),
206
+ feature: exports.FEATURE_KEYWORDS.test(text),
207
+ refactor: exports.REFACTOR_KEYWORDS.test(text),
208
+ brainstorm: exports.BRAINSTORM_KEYWORDS.test(text),
209
+ research: exports.RESEARCH_KEYWORDS.test(text),
210
+ file_pattern: exports.FILE_PATTERNS.test(text),
211
+ script_pattern: exports.SCRIPT_PATTERNS.test(text),
212
+ url: exports.URL_PATTERN.test(text),
213
+ };
214
+ }
215
+ /** Update tool-bucket flags to include a single tool name (idempotent OR). */
216
+ function applyToolBucketFlags(flags, toolName) {
217
+ if (EDIT_TOOLS.has(toolName)) {
218
+ flags.edit = true;
219
+ }
220
+ if (READ_TOOLS.has(toolName)) {
221
+ flags.read = true;
222
+ }
223
+ if (BASH_TOOLS.has(toolName)) {
224
+ flags.bash = true;
225
+ }
226
+ if (TASK_TOOLS.has(toolName)) {
227
+ flags.task = true;
228
+ }
229
+ if (SEARCH_TOOLS.has(toolName)) {
230
+ flags.search = true;
231
+ }
232
+ if (PLAN_TOOLS.has(toolName)) {
233
+ flags.plan = true;
234
+ }
235
+ if (toolName.startsWith("mcp__")) {
236
+ flags.mcp = true;
237
+ }
238
+ if (toolName === "Skill" || toolName === "SlashCommand") {
239
+ flags.skill = true;
240
+ }
241
+ }
242
+ function emptyToolBucketFlags() {
243
+ return { edit: false, read: false, bash: false, task: false, search: false, mcp: false, skill: false, plan: false };
244
+ }
245
+ function emptyBashCmdFlags() {
246
+ return { test: false, build: false, install: false, git: false };
247
+ }
248
+ /** Scan a single Bash command body and OR its keyword flags into `flags`. */
249
+ function applyBashCmdFlags(flags, command) {
250
+ if (command.length === 0) {
251
+ return;
252
+ }
253
+ if (exports.TEST_PATTERNS.test(command)) {
254
+ flags.test = true;
255
+ }
256
+ if (exports.BUILD_PATTERNS.test(command)) {
257
+ flags.build = true;
258
+ }
259
+ if (exports.INSTALL_PATTERNS.test(command)) {
260
+ flags.install = true;
261
+ }
262
+ if (exports.GIT_PATTERNS.test(command)) {
263
+ flags.git = true;
264
+ }
265
+ }
266
+ /**
267
+ * Classify a turn into one of 13 categories. Rules mirror codeburn's
268
+ * classifier with extended pattern coverage.
269
+ *
270
+ * Decision tree:
271
+ * 1. No tools used → keyword-only path (`brainstorming` / `exploration` /
272
+ * `debugging` / `feature` / `coding` / `conversation`).
273
+ * 2. Plan tool used (TodoWrite/ExitPlanMode) → `planning`.
274
+ * 3. Task/Agent → `delegation`.
275
+ * 4. Bash without edits → bash-cmd-flags decide first
276
+ * (test → `testing`, git → `git`, build/install → `build/deploy`),
277
+ * else fall through to keyword refinement / coding.
278
+ * 5. Edit/Write present → `coding`, refined by keywords →
279
+ * `debugging` / `refactoring` / `feature` / `coding`.
280
+ * 6. Bash + Read (no edit) → `exploration`, refined to `debugging` if
281
+ * DEBUG keywords match.
282
+ * 7. Read-only → `exploration`.
283
+ * 8. Search / MCP → `exploration`.
284
+ * 9. Skill → `general`.
285
+ *
286
+ * Returns one of the 13 TurnCategory values; never null.
287
+ */
288
+ function classifyTurn(s) {
289
+ const t = s.tool_buckets;
290
+ const k = s.user_msg_keywords;
291
+ const b = s.bash_cmd_flags;
292
+ const anyTool = t.edit || t.read || t.bash || t.task || t.search || t.mcp || t.skill || t.plan;
293
+ // Path 1: no tools — keyword-only conversation classification
294
+ if (!anyTool) {
295
+ if (k.brainstorm) {
296
+ return "brainstorming";
297
+ }
298
+ if (k.research) {
299
+ return "exploration";
300
+ }
301
+ if (k.debug) {
302
+ return "debugging";
303
+ }
304
+ if (k.feature) {
305
+ return "feature";
306
+ }
307
+ if (k.file_pattern || k.script_pattern) {
308
+ return "coding";
309
+ }
310
+ if (k.url) {
311
+ return "exploration";
312
+ }
313
+ return "conversation";
314
+ }
315
+ // Path 2-3: plan / delegation take precedence over data signals
316
+ if (t.plan && !t.edit) {
317
+ return "planning";
318
+ }
319
+ if (t.task) {
320
+ return "delegation";
321
+ }
322
+ // Path 4: Bash without edits — bash-cmd-flags + user-msg keyword
323
+ if (t.bash && !t.edit) {
324
+ if (b.test) {
325
+ return "testing";
326
+ }
327
+ if (b.git) {
328
+ return "git";
329
+ }
330
+ if (b.build || b.install) {
331
+ return "build/deploy";
332
+ }
333
+ // user-msg keyword fallback (codeburn parity)
334
+ if (k.debug) {
335
+ return "debugging";
336
+ }
337
+ if (k.research) {
338
+ return "exploration";
339
+ }
340
+ }
341
+ // Path 5: edit-driven coding, refined by keywords
342
+ if (t.edit) {
343
+ if (k.debug) {
344
+ return "debugging";
345
+ }
346
+ if (k.refactor) {
347
+ return "refactoring";
348
+ }
349
+ if (k.feature) {
350
+ return "feature";
351
+ }
352
+ return "coding";
353
+ }
354
+ // Path 6: bash + read = exploration (could be debugging)
355
+ if (t.bash && t.read) {
356
+ if (k.debug) {
357
+ return "debugging";
358
+ }
359
+ return "exploration";
360
+ }
361
+ // Path 7: bash-only fallback — codeburn calls this "coding" (running
362
+ // a script as part of dev work). Keep parity.
363
+ if (t.bash) {
364
+ return "coding";
365
+ }
366
+ // Path 8: search or MCP → exploration
367
+ if (t.search || t.mcp) {
368
+ return "exploration";
369
+ }
370
+ // Path 9: read-only → exploration
371
+ if (t.read) {
372
+ return "exploration";
373
+ }
374
+ // Path 10: skill → general
375
+ if (t.skill) {
376
+ return "general";
377
+ }
378
+ return "general";
379
+ }
380
+ //# sourceMappingURL=classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/analytics/classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * IronBee CLI — Analytics Emit Orchestrator
3
+ *
4
+ * Per-trigger algorithm:
5
+ *
6
+ * 1. Load state (or initialState on miss)
7
+ * 2. Reset detection: schema_version, inode, size, first-KB hash
8
+ * 3. Tail-parse new transcript bytes (with truncate-during-read sanity)
9
+ * 4. Turn-safe boundary detection
10
+ * 5. Project delta + merge into accumulated
11
+ * 6. Substantive filter
12
+ * 7. Idempotency check (offset + final-flag)
13
+ * 8. EMIT-FIRST then atomic-rename state file
14
+ *
15
+ * Hook adapters call {@link emitAnalytics} after their existing primary
16
+ * work; failures here log and swallow — never affect the hook outcome.
17
+ *
18
+ * Submission goes DIRECTLY to the collector (`src/lib/collector.ts:sendToCollector`)
19
+ * — bypasses the queue intentionally. The queue's 4 KB per-line limit fits
20
+ * `tool_call` events but is too tight for full session aggregates. Direct
21
+ * HTTPS POST has no size limit; emit's own retry semantics (state isn't
22
+ * advanced on submit failure → next trigger retries) replace the queue's
23
+ * retry layer for this event type.
24
+ */
25
+ import { TranscriptSource } from "./types";
26
+ import { emptyAccumulated } from "./state";
27
+ import { AnalyticsLog } from "./log";
28
+ export type TriggerType = "Stop" | "SessionEnd";
29
+ export interface EmitOptions {
30
+ projectDir: string;
31
+ sessionId: string;
32
+ triggerType: TriggerType;
33
+ /** Reason from the SessionEnd payload (Claude/Cursor pass it through). */
34
+ endReason?: string;
35
+ /**
36
+ * Override transcript source. Defaults to "claude-code" — Cursor
37
+ * coverage is gated on path resolution (open question §9). Hook
38
+ * adapters that detect Cursor should pass "cursor" or "missing".
39
+ */
40
+ transcriptSource?: TranscriptSource;
41
+ /**
42
+ * Optional per-session debug log. When provided, every step of the
43
+ * pipeline writes a line to `<analyticsDir>/analytics.log`. Hook
44
+ * adapters supply this via `runAnalyticsTrigger`; tests / direct
45
+ * callers can omit it (no-op).
46
+ */
47
+ log?: AnalyticsLog;
48
+ }
49
+ export interface EmitOutcome {
50
+ /** What happened: "emitted" | "skipped" | "no-transcript" | "error" */
51
+ status: "emitted" | "skipped" | "no-transcript" | "error";
52
+ /** Reason string for diagnostics. */
53
+ reason: string;
54
+ /** When emitted, the offset that was just covered. */
55
+ offset?: number;
56
+ }
57
+ /**
58
+ * Drive a full per-trigger projection and (maybe) emit. Fail-safe:
59
+ * any internal exception is caught + logged + swallowed; returns an
60
+ * outcome describing what happened.
61
+ */
62
+ export declare function emitAnalytics(opts: EmitOptions): Promise<EmitOutcome>;
63
+ /** Exposed for tests — never call from prod code. */
64
+ export declare const __test: {
65
+ emptyAccumulated: typeof emptyAccumulated;
66
+ };
67
+ //# sourceMappingURL=emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/analytics/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,EAeH,gBAAgB,EACnB,MAAM,SAAS,CAAC;AAajB,OAAO,EAAE,gBAAgB,EAAuC,MAAM,SAAS,CAAC;AAKhF,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAMrC,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,WAAW;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,uEAAuE;IACvE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,eAAe,GAAG,OAAO,CAAC;IAC1D,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAO3E;AA4/BD,qDAAqD;AACrD,eAAO,MAAM,MAAM,EAAE;IAAE,gBAAgB,EAAE,OAAO,gBAAgB,CAAA;CAE/D,CAAC"}