@codemieai/code 0.0.16 → 0.0.18

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 (410) hide show
  1. package/README.md +62 -5
  2. package/bin/agent-executor.js +7 -28
  3. package/bin/codemie-claude.js +18 -0
  4. package/bin/codemie-codex.js +18 -0
  5. package/bin/codemie-deepagents.js +18 -0
  6. package/bin/codemie-gemini.js +18 -0
  7. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  8. package/dist/agents/codemie-code/agent.js +3 -32
  9. package/dist/agents/codemie-code/agent.js.map +1 -1
  10. package/dist/agents/codemie-code/tools/planning.d.ts +2 -2
  11. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  12. package/dist/agents/core/AgentCLI.js +31 -62
  13. package/dist/agents/core/AgentCLI.js.map +1 -1
  14. package/dist/agents/core/BaseAgentAdapter.d.ts +9 -1
  15. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  16. package/dist/agents/core/BaseAgentAdapter.js +125 -10
  17. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  18. package/dist/agents/core/BaseMetricsAdapter.d.ts +64 -0
  19. package/dist/agents/core/BaseMetricsAdapter.d.ts.map +1 -0
  20. package/dist/agents/core/BaseMetricsAdapter.js +74 -0
  21. package/dist/agents/core/BaseMetricsAdapter.js.map +1 -0
  22. package/dist/agents/core/types.d.ts +1 -0
  23. package/dist/agents/core/types.d.ts.map +1 -1
  24. package/dist/agents/plugins/claude.metrics.d.ts +112 -0
  25. package/dist/agents/plugins/claude.metrics.d.ts.map +1 -0
  26. package/dist/agents/plugins/claude.metrics.js +700 -0
  27. package/dist/agents/plugins/claude.metrics.js.map +1 -0
  28. package/dist/agents/plugins/claude.plugin.d.ts +9 -0
  29. package/dist/agents/plugins/claude.plugin.d.ts.map +1 -1
  30. package/dist/agents/plugins/claude.plugin.js +52 -10
  31. package/dist/agents/plugins/claude.plugin.js.map +1 -1
  32. package/dist/agents/plugins/codemie-code.plugin.d.ts.map +1 -1
  33. package/dist/agents/plugins/codemie-code.plugin.js +57 -13
  34. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  35. package/dist/agents/plugins/codex.plugin.d.ts.map +1 -1
  36. package/dist/agents/plugins/codex.plugin.js +1 -3
  37. package/dist/agents/plugins/codex.plugin.js.map +1 -1
  38. package/dist/agents/plugins/gemini.plugin.d.ts.map +1 -1
  39. package/dist/agents/plugins/gemini.plugin.js +0 -7
  40. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  41. package/dist/agents/plugins/history-parser.d.ts +52 -0
  42. package/dist/agents/plugins/history-parser.d.ts.map +1 -0
  43. package/dist/agents/plugins/history-parser.js +155 -0
  44. package/dist/agents/plugins/history-parser.js.map +1 -0
  45. package/dist/cli/commands/analytics/aggregator.d.ts +58 -0
  46. package/dist/cli/commands/analytics/aggregator.d.ts.map +1 -0
  47. package/dist/cli/commands/analytics/aggregator.js +702 -0
  48. package/dist/cli/commands/analytics/aggregator.js.map +1 -0
  49. package/dist/cli/commands/analytics/data-loader.d.ts +84 -0
  50. package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -0
  51. package/dist/cli/commands/analytics/data-loader.js +211 -0
  52. package/dist/cli/commands/analytics/data-loader.js.map +1 -0
  53. package/dist/cli/commands/analytics/exporter.d.ts +20 -0
  54. package/dist/cli/commands/analytics/exporter.d.ts.map +1 -0
  55. package/dist/cli/commands/analytics/exporter.js +103 -0
  56. package/dist/cli/commands/analytics/exporter.js.map +1 -0
  57. package/dist/cli/commands/analytics/formatter.d.ts +49 -0
  58. package/dist/cli/commands/analytics/formatter.d.ts.map +1 -0
  59. package/dist/cli/commands/analytics/formatter.js +309 -0
  60. package/dist/cli/commands/analytics/formatter.js.map +1 -0
  61. package/dist/cli/commands/analytics/index.d.ts +6 -0
  62. package/dist/cli/commands/analytics/index.d.ts.map +1 -0
  63. package/dist/cli/commands/analytics/index.js +157 -0
  64. package/dist/cli/commands/analytics/index.js.map +1 -0
  65. package/dist/cli/commands/analytics/model-normalizer.d.ts +21 -0
  66. package/dist/cli/commands/analytics/model-normalizer.d.ts.map +1 -0
  67. package/dist/cli/commands/analytics/model-normalizer.js +44 -0
  68. package/dist/cli/commands/analytics/model-normalizer.js.map +1 -0
  69. package/dist/cli/commands/analytics/types.d.ts +188 -0
  70. package/dist/cli/commands/analytics/types.d.ts.map +1 -0
  71. package/dist/cli/commands/analytics/types.js +6 -0
  72. package/dist/cli/commands/analytics/types.js.map +1 -0
  73. package/dist/cli/commands/doctor/checks/AwsCliCheck.d.ts +9 -0
  74. package/dist/cli/commands/doctor/checks/AwsCliCheck.d.ts.map +1 -0
  75. package/dist/cli/commands/doctor/checks/AwsCliCheck.js +28 -0
  76. package/dist/cli/commands/doctor/checks/AwsCliCheck.js.map +1 -0
  77. package/dist/cli/commands/doctor/checks/PythonCheck.d.ts.map +1 -1
  78. package/dist/cli/commands/doctor/checks/PythonCheck.js +10 -0
  79. package/dist/cli/commands/doctor/checks/PythonCheck.js.map +1 -1
  80. package/dist/cli/commands/doctor/checks/WorkflowsCheck.d.ts.map +1 -1
  81. package/dist/cli/commands/doctor/checks/WorkflowsCheck.js +2 -1
  82. package/dist/cli/commands/doctor/checks/WorkflowsCheck.js.map +1 -1
  83. package/dist/cli/commands/doctor/checks/index.d.ts +1 -0
  84. package/dist/cli/commands/doctor/checks/index.d.ts.map +1 -1
  85. package/dist/cli/commands/doctor/checks/index.js +1 -0
  86. package/dist/cli/commands/doctor/checks/index.js.map +1 -1
  87. package/dist/cli/commands/doctor/index.d.ts.map +1 -1
  88. package/dist/cli/commands/doctor/index.js +75 -3
  89. package/dist/cli/commands/doctor/index.js.map +1 -1
  90. package/dist/cli/commands/profile.d.ts.map +1 -1
  91. package/dist/cli/commands/profile.js +49 -89
  92. package/dist/cli/commands/profile.js.map +1 -1
  93. package/dist/cli/commands/setup.js +1 -21
  94. package/dist/cli/commands/setup.js.map +1 -1
  95. package/dist/cli/index.js +1 -1
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/env/types.d.ts +14 -2
  98. package/dist/env/types.d.ts.map +1 -1
  99. package/dist/env/types.js.map +1 -1
  100. package/dist/metrics/MetricsOrchestrator.d.ts +67 -0
  101. package/dist/metrics/MetricsOrchestrator.d.ts.map +1 -0
  102. package/dist/metrics/MetricsOrchestrator.js +287 -0
  103. package/dist/metrics/MetricsOrchestrator.js.map +1 -0
  104. package/dist/metrics/config.d.ts +38 -0
  105. package/dist/metrics/config.d.ts.map +1 -0
  106. package/dist/metrics/config.js +80 -0
  107. package/dist/metrics/config.js.map +1 -0
  108. package/dist/metrics/core/DeltaWriter.d.ts +49 -0
  109. package/dist/metrics/core/DeltaWriter.d.ts.map +1 -0
  110. package/dist/metrics/core/DeltaWriter.js +146 -0
  111. package/dist/metrics/core/DeltaWriter.js.map +1 -0
  112. package/dist/metrics/core/FileSnapshotter.d.ts +22 -0
  113. package/dist/metrics/core/FileSnapshotter.d.ts.map +1 -0
  114. package/dist/metrics/core/FileSnapshotter.js +74 -0
  115. package/dist/metrics/core/FileSnapshotter.js.map +1 -0
  116. package/dist/metrics/core/SessionCorrelator.d.ts +34 -0
  117. package/dist/metrics/core/SessionCorrelator.d.ts.map +1 -0
  118. package/dist/metrics/core/SessionCorrelator.js +115 -0
  119. package/dist/metrics/core/SessionCorrelator.js.map +1 -0
  120. package/dist/metrics/core/SyncStateManager.d.ts +69 -0
  121. package/dist/metrics/core/SyncStateManager.d.ts.map +1 -0
  122. package/dist/metrics/core/SyncStateManager.js +284 -0
  123. package/dist/metrics/core/SyncStateManager.js.map +1 -0
  124. package/dist/metrics/index.d.ts +9 -0
  125. package/dist/metrics/index.d.ts.map +1 -0
  126. package/dist/metrics/index.js +11 -0
  127. package/dist/metrics/index.js.map +1 -0
  128. package/dist/metrics/session/SessionStore.d.ts +43 -0
  129. package/dist/metrics/session/SessionStore.d.ts.map +1 -0
  130. package/dist/metrics/session/SessionStore.js +142 -0
  131. package/dist/metrics/session/SessionStore.js.map +1 -0
  132. package/dist/metrics/sync/MetricsApiClient.d.ts +32 -0
  133. package/dist/metrics/sync/MetricsApiClient.d.ts.map +1 -0
  134. package/dist/metrics/sync/MetricsApiClient.js +155 -0
  135. package/dist/metrics/sync/MetricsApiClient.js.map +1 -0
  136. package/dist/metrics/sync/aggregator.d.ts +14 -0
  137. package/dist/metrics/sync/aggregator.d.ts.map +1 -0
  138. package/dist/metrics/sync/aggregator.js +214 -0
  139. package/dist/metrics/sync/aggregator.js.map +1 -0
  140. package/dist/metrics/sync/index.d.ts +10 -0
  141. package/dist/metrics/sync/index.d.ts.map +1 -0
  142. package/dist/metrics/sync/index.js +10 -0
  143. package/dist/metrics/sync/index.js.map +1 -0
  144. package/dist/metrics/sync/jsonl-writer.d.ts +28 -0
  145. package/dist/metrics/sync/jsonl-writer.d.ts.map +1 -0
  146. package/dist/metrics/sync/jsonl-writer.js +72 -0
  147. package/dist/metrics/sync/jsonl-writer.js.map +1 -0
  148. package/dist/metrics/sync/types.d.ts +73 -0
  149. package/dist/metrics/sync/types.d.ts.map +1 -0
  150. package/dist/metrics/sync/types.js +7 -0
  151. package/dist/metrics/sync/types.js.map +1 -0
  152. package/dist/metrics/types.d.ts +308 -0
  153. package/dist/metrics/types.d.ts.map +1 -0
  154. package/dist/metrics/types.js +8 -0
  155. package/dist/metrics/types.js.map +1 -0
  156. package/dist/providers/index.d.ts +2 -0
  157. package/dist/providers/index.d.ts.map +1 -1
  158. package/dist/providers/index.js +2 -0
  159. package/dist/providers/index.js.map +1 -1
  160. package/dist/providers/integration/setup-ui.d.ts +1 -1
  161. package/dist/providers/integration/setup-ui.d.ts.map +1 -1
  162. package/dist/providers/integration/setup-ui.js +51 -6
  163. package/dist/providers/integration/setup-ui.js.map +1 -1
  164. package/dist/providers/plugins/bedrock/bedrock.health.d.ts +53 -0
  165. package/dist/providers/plugins/bedrock/bedrock.health.d.ts.map +1 -0
  166. package/dist/providers/plugins/bedrock/bedrock.health.js +115 -0
  167. package/dist/providers/plugins/bedrock/bedrock.health.js.map +1 -0
  168. package/dist/providers/plugins/bedrock/bedrock.models.d.ts +26 -0
  169. package/dist/providers/plugins/bedrock/bedrock.models.d.ts.map +1 -0
  170. package/dist/providers/plugins/bedrock/bedrock.models.js +89 -0
  171. package/dist/providers/plugins/bedrock/bedrock.models.js.map +1 -0
  172. package/dist/providers/plugins/bedrock/bedrock.setup-steps.d.ts +12 -0
  173. package/dist/providers/plugins/bedrock/bedrock.setup-steps.d.ts.map +1 -0
  174. package/dist/providers/plugins/bedrock/bedrock.setup-steps.js +308 -0
  175. package/dist/providers/plugins/bedrock/bedrock.setup-steps.js.map +1 -0
  176. package/dist/providers/plugins/bedrock/bedrock.template.d.ts +11 -0
  177. package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -0
  178. package/dist/providers/plugins/bedrock/bedrock.template.js +85 -0
  179. package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -0
  180. package/dist/providers/plugins/bedrock/index.d.ts +11 -0
  181. package/dist/providers/plugins/bedrock/index.d.ts.map +1 -0
  182. package/dist/providers/plugins/bedrock/index.js +11 -0
  183. package/dist/providers/plugins/bedrock/index.js.map +1 -0
  184. package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
  185. package/dist/providers/plugins/ollama/ollama.template.js +2 -0
  186. package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
  187. package/dist/providers/plugins/sso/sso.http-client.d.ts +2 -0
  188. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  189. package/dist/providers/plugins/sso/sso.http-client.js +9 -3
  190. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  191. package/dist/proxy/http-client.d.ts +1 -1
  192. package/dist/proxy/http-client.d.ts.map +1 -1
  193. package/dist/proxy/http-client.js +78 -12
  194. package/dist/proxy/http-client.js.map +1 -1
  195. package/dist/proxy/plugins/endpoint-blocker.plugin.d.ts +19 -0
  196. package/dist/proxy/plugins/endpoint-blocker.plugin.d.ts.map +1 -0
  197. package/dist/proxy/plugins/endpoint-blocker.plugin.js +61 -0
  198. package/dist/proxy/plugins/endpoint-blocker.plugin.js.map +1 -0
  199. package/dist/proxy/plugins/header-injection.plugin.js +3 -0
  200. package/dist/proxy/plugins/header-injection.plugin.js.map +1 -1
  201. package/dist/proxy/plugins/index.d.ts +3 -1
  202. package/dist/proxy/plugins/index.d.ts.map +1 -1
  203. package/dist/proxy/plugins/index.js +5 -1
  204. package/dist/proxy/plugins/index.js.map +1 -1
  205. package/dist/proxy/plugins/logging.plugin.d.ts +11 -3
  206. package/dist/proxy/plugins/logging.plugin.d.ts.map +1 -1
  207. package/dist/proxy/plugins/logging.plugin.js +189 -25
  208. package/dist/proxy/plugins/logging.plugin.js.map +1 -1
  209. package/dist/proxy/plugins/metrics-sync.plugin.d.ts +33 -0
  210. package/dist/proxy/plugins/metrics-sync.plugin.d.ts.map +1 -0
  211. package/dist/proxy/plugins/metrics-sync.plugin.js +320 -0
  212. package/dist/proxy/plugins/metrics-sync.plugin.js.map +1 -0
  213. package/dist/proxy/plugins/registry.d.ts.map +1 -1
  214. package/dist/proxy/plugins/registry.js +8 -1
  215. package/dist/proxy/plugins/registry.js.map +1 -1
  216. package/dist/proxy/plugins/types.d.ts +6 -2
  217. package/dist/proxy/plugins/types.d.ts.map +1 -1
  218. package/dist/proxy/types.d.ts +8 -1
  219. package/dist/proxy/types.d.ts.map +1 -1
  220. package/dist/utils/ascii-logo.d.ts +21 -0
  221. package/dist/utils/ascii-logo.d.ts.map +1 -0
  222. package/dist/utils/ascii-logo.js +85 -0
  223. package/dist/utils/ascii-logo.js.map +1 -0
  224. package/dist/utils/codemie-proxy.d.ts +2 -7
  225. package/dist/utils/codemie-proxy.d.ts.map +1 -1
  226. package/dist/utils/codemie-proxy.js +83 -61
  227. package/dist/utils/codemie-proxy.js.map +1 -1
  228. package/dist/utils/config-loader.d.ts.map +1 -1
  229. package/dist/utils/config-loader.js +22 -6
  230. package/dist/utils/config-loader.js.map +1 -1
  231. package/dist/utils/exec.d.ts +11 -0
  232. package/dist/utils/exec.d.ts.map +1 -1
  233. package/dist/utils/exec.js +17 -1
  234. package/dist/utils/exec.js.map +1 -1
  235. package/dist/utils/goodbye-messages.d.ts +13 -0
  236. package/dist/utils/goodbye-messages.d.ts.map +1 -0
  237. package/dist/utils/goodbye-messages.js +245 -0
  238. package/dist/utils/goodbye-messages.js.map +1 -0
  239. package/dist/utils/json-parser.d.ts +52 -0
  240. package/dist/utils/json-parser.d.ts.map +1 -0
  241. package/dist/utils/json-parser.js +126 -0
  242. package/dist/utils/json-parser.js.map +1 -0
  243. package/dist/utils/logger.d.ts +37 -1
  244. package/dist/utils/logger.d.ts.map +1 -1
  245. package/dist/utils/logger.js +92 -20
  246. package/dist/utils/logger.js.map +1 -1
  247. package/dist/utils/sanitize.d.ts.map +1 -1
  248. package/dist/utils/sanitize.js +0 -1
  249. package/dist/utils/sanitize.js.map +1 -1
  250. package/dist/utils/which.d.ts +20 -0
  251. package/dist/utils/which.d.ts.map +1 -0
  252. package/dist/utils/which.js +47 -0
  253. package/dist/utils/which.js.map +1 -0
  254. package/package.json +10 -5
  255. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts +0 -37
  256. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +0 -1
  257. package/dist/analytics/aggregation/adapters/claude.adapter.js +0 -531
  258. package/dist/analytics/aggregation/adapters/claude.adapter.js.map +0 -1
  259. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts +0 -25
  260. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +0 -1
  261. package/dist/analytics/aggregation/adapters/codex.adapter.js +0 -396
  262. package/dist/analytics/aggregation/adapters/codex.adapter.js.map +0 -1
  263. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +0 -36
  264. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +0 -1
  265. package/dist/analytics/aggregation/adapters/gemini.adapter.js +0 -365
  266. package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +0 -1
  267. package/dist/analytics/aggregation/adapters/index.d.ts +0 -7
  268. package/dist/analytics/aggregation/adapters/index.d.ts.map +0 -1
  269. package/dist/analytics/aggregation/adapters/index.js +0 -7
  270. package/dist/analytics/aggregation/adapters/index.js.map +0 -1
  271. package/dist/analytics/aggregation/aggregator.d.ts +0 -49
  272. package/dist/analytics/aggregation/aggregator.d.ts.map +0 -1
  273. package/dist/analytics/aggregation/aggregator.js +0 -239
  274. package/dist/analytics/aggregation/aggregator.js.map +0 -1
  275. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +0 -99
  276. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +0 -1
  277. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +0 -110
  278. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +0 -1
  279. package/dist/analytics/aggregation/core/adapter.interface.d.ts +0 -76
  280. package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +0 -1
  281. package/dist/analytics/aggregation/core/adapter.interface.js +0 -9
  282. package/dist/analytics/aggregation/core/adapter.interface.js.map +0 -1
  283. package/dist/analytics/aggregation/core/aggregation-utils.d.ts +0 -86
  284. package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +0 -1
  285. package/dist/analytics/aggregation/core/aggregation-utils.js +0 -126
  286. package/dist/analytics/aggregation/core/aggregation-utils.js.map +0 -1
  287. package/dist/analytics/aggregation/core/discovery.d.ts +0 -40
  288. package/dist/analytics/aggregation/core/discovery.d.ts.map +0 -1
  289. package/dist/analytics/aggregation/core/discovery.js +0 -132
  290. package/dist/analytics/aggregation/core/discovery.js.map +0 -1
  291. package/dist/analytics/aggregation/core/file-utils.d.ts +0 -24
  292. package/dist/analytics/aggregation/core/file-utils.d.ts.map +0 -1
  293. package/dist/analytics/aggregation/core/file-utils.js +0 -143
  294. package/dist/analytics/aggregation/core/file-utils.js.map +0 -1
  295. package/dist/analytics/aggregation/core/index.d.ts +0 -14
  296. package/dist/analytics/aggregation/core/index.d.ts.map +0 -1
  297. package/dist/analytics/aggregation/core/index.js +0 -14
  298. package/dist/analytics/aggregation/core/index.js.map +0 -1
  299. package/dist/analytics/aggregation/core/project-mapping.d.ts +0 -50
  300. package/dist/analytics/aggregation/core/project-mapping.d.ts.map +0 -1
  301. package/dist/analytics/aggregation/core/project-mapping.js +0 -102
  302. package/dist/analytics/aggregation/core/project-mapping.js.map +0 -1
  303. package/dist/analytics/aggregation/core/streaming.d.ts +0 -26
  304. package/dist/analytics/aggregation/core/streaming.d.ts.map +0 -1
  305. package/dist/analytics/aggregation/core/streaming.js +0 -58
  306. package/dist/analytics/aggregation/core/streaming.js.map +0 -1
  307. package/dist/analytics/aggregation/core/user-prompt-source.d.ts +0 -81
  308. package/dist/analytics/aggregation/core/user-prompt-source.d.ts.map +0 -1
  309. package/dist/analytics/aggregation/core/user-prompt-source.js +0 -69
  310. package/dist/analytics/aggregation/core/user-prompt-source.js.map +0 -1
  311. package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts +0 -49
  312. package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts.map +0 -1
  313. package/dist/analytics/aggregation/core/user-prompt-sources/json.js +0 -66
  314. package/dist/analytics/aggregation/core/user-prompt-sources/json.js.map +0 -1
  315. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts +0 -43
  316. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts.map +0 -1
  317. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js +0 -56
  318. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js.map +0 -1
  319. package/dist/analytics/aggregation/index.d.ts +0 -8
  320. package/dist/analytics/aggregation/index.d.ts.map +0 -1
  321. package/dist/analytics/aggregation/index.js +0 -8
  322. package/dist/analytics/aggregation/index.js.map +0 -1
  323. package/dist/analytics/aggregation/types.d.ts +0 -278
  324. package/dist/analytics/aggregation/types.d.ts.map +0 -1
  325. package/dist/analytics/aggregation/types.js +0 -8
  326. package/dist/analytics/aggregation/types.js.map +0 -1
  327. package/dist/analytics/collector.d.ts +0 -46
  328. package/dist/analytics/collector.d.ts.map +0 -1
  329. package/dist/analytics/collector.js +0 -83
  330. package/dist/analytics/collector.js.map +0 -1
  331. package/dist/analytics/config.d.ts +0 -15
  332. package/dist/analytics/config.d.ts.map +0 -1
  333. package/dist/analytics/config.js +0 -65
  334. package/dist/analytics/config.js.map +0 -1
  335. package/dist/analytics/index.d.ts +0 -99
  336. package/dist/analytics/index.d.ts.map +0 -1
  337. package/dist/analytics/index.js +0 -280
  338. package/dist/analytics/index.js.map +0 -1
  339. package/dist/analytics/plugins/api-metrics.plugin.d.ts +0 -26
  340. package/dist/analytics/plugins/api-metrics.plugin.d.ts.map +0 -1
  341. package/dist/analytics/plugins/api-metrics.plugin.js +0 -97
  342. package/dist/analytics/plugins/api-metrics.plugin.js.map +0 -1
  343. package/dist/analytics/plugins/index.d.ts +0 -15
  344. package/dist/analytics/plugins/index.d.ts.map +0 -1
  345. package/dist/analytics/plugins/index.js +0 -15
  346. package/dist/analytics/plugins/index.js.map +0 -1
  347. package/dist/analytics/plugins/model-metrics.plugin.d.ts +0 -39
  348. package/dist/analytics/plugins/model-metrics.plugin.d.ts.map +0 -1
  349. package/dist/analytics/plugins/model-metrics.plugin.js +0 -105
  350. package/dist/analytics/plugins/model-metrics.plugin.js.map +0 -1
  351. package/dist/analytics/plugins/provider-metrics.plugin.d.ts +0 -41
  352. package/dist/analytics/plugins/provider-metrics.plugin.d.ts.map +0 -1
  353. package/dist/analytics/plugins/provider-metrics.plugin.js +0 -123
  354. package/dist/analytics/plugins/provider-metrics.plugin.js.map +0 -1
  355. package/dist/analytics/plugins/types.d.ts +0 -61
  356. package/dist/analytics/plugins/types.d.ts.map +0 -1
  357. package/dist/analytics/plugins/types.js +0 -54
  358. package/dist/analytics/plugins/types.js.map +0 -1
  359. package/dist/analytics/privacy.d.ts +0 -10
  360. package/dist/analytics/privacy.d.ts.map +0 -1
  361. package/dist/analytics/privacy.js +0 -20
  362. package/dist/analytics/privacy.js.map +0 -1
  363. package/dist/analytics/remote-submission/cursor-manager.d.ts +0 -71
  364. package/dist/analytics/remote-submission/cursor-manager.d.ts.map +0 -1
  365. package/dist/analytics/remote-submission/cursor-manager.js +0 -204
  366. package/dist/analytics/remote-submission/cursor-manager.js.map +0 -1
  367. package/dist/analytics/remote-submission/index.d.ts +0 -12
  368. package/dist/analytics/remote-submission/index.d.ts.map +0 -1
  369. package/dist/analytics/remote-submission/index.js +0 -11
  370. package/dist/analytics/remote-submission/index.js.map +0 -1
  371. package/dist/analytics/remote-submission/lock-manager.d.ts +0 -71
  372. package/dist/analytics/remote-submission/lock-manager.d.ts.map +0 -1
  373. package/dist/analytics/remote-submission/lock-manager.js +0 -238
  374. package/dist/analytics/remote-submission/lock-manager.js.map +0 -1
  375. package/dist/analytics/remote-submission/metric-transformer.d.ts +0 -21
  376. package/dist/analytics/remote-submission/metric-transformer.d.ts.map +0 -1
  377. package/dist/analytics/remote-submission/metric-transformer.js +0 -82
  378. package/dist/analytics/remote-submission/metric-transformer.js.map +0 -1
  379. package/dist/analytics/remote-submission/submitter.d.ts +0 -79
  380. package/dist/analytics/remote-submission/submitter.d.ts.map +0 -1
  381. package/dist/analytics/remote-submission/submitter.js +0 -362
  382. package/dist/analytics/remote-submission/submitter.js.map +0 -1
  383. package/dist/analytics/remote-submission/types.d.ts +0 -123
  384. package/dist/analytics/remote-submission/types.d.ts.map +0 -1
  385. package/dist/analytics/remote-submission/types.js +0 -13
  386. package/dist/analytics/remote-submission/types.js.map +0 -1
  387. package/dist/analytics/session.d.ts +0 -56
  388. package/dist/analytics/session.d.ts.map +0 -1
  389. package/dist/analytics/session.js +0 -95
  390. package/dist/analytics/session.js.map +0 -1
  391. package/dist/analytics/types.d.ts +0 -104
  392. package/dist/analytics/types.d.ts.map +0 -1
  393. package/dist/analytics/types.js +0 -15
  394. package/dist/analytics/types.js.map +0 -1
  395. package/dist/analytics/writer.d.ts +0 -18
  396. package/dist/analytics/writer.d.ts.map +0 -1
  397. package/dist/analytics/writer.js +0 -44
  398. package/dist/analytics/writer.js.map +0 -1
  399. package/dist/cli/commands/analytics.d.ts +0 -3
  400. package/dist/cli/commands/analytics.d.ts.map +0 -1
  401. package/dist/cli/commands/analytics.js +0 -748
  402. package/dist/cli/commands/analytics.js.map +0 -1
  403. package/dist/utils/analytics-reader.d.ts +0 -117
  404. package/dist/utils/analytics-reader.d.ts.map +0 -1
  405. package/dist/utils/analytics-reader.js +0 -421
  406. package/dist/utils/analytics-reader.js.map +0 -1
  407. package/dist/utils/date-formatter.d.ts +0 -88
  408. package/dist/utils/date-formatter.d.ts.map +0 -1
  409. package/dist/utils/date-formatter.js +0 -133
  410. package/dist/utils/date-formatter.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Session Store
3
+ *
4
+ * Manages persistence of metrics session data to JSON files.
5
+ * One file per session: ~/.codemie/metrics/sessions/{sessionId}.json
6
+ */
7
+ import type { MetricsSession } from '../types.js';
8
+ export declare class SessionStore {
9
+ /**
10
+ * Save session to disk
11
+ * Path: ~/.codemie/metrics/sessions/{sessionId}.json
12
+ */
13
+ saveSession(session: MetricsSession): Promise<void>;
14
+ /**
15
+ * Load session from disk
16
+ */
17
+ loadSession(sessionId: string): Promise<MetricsSession | null>;
18
+ /**
19
+ * List all sessions
20
+ */
21
+ listSessions(): Promise<MetricsSession[]>;
22
+ /**
23
+ * List active sessions (status === 'active')
24
+ */
25
+ listActiveSessions(): Promise<MetricsSession[]>;
26
+ /**
27
+ * Update session status
28
+ */
29
+ updateSessionStatus(sessionId: string, status: MetricsSession['status']): Promise<void>;
30
+ /**
31
+ * Update session correlation
32
+ */
33
+ updateSessionCorrelation(sessionId: string, correlation: Partial<MetricsSession['correlation']>): Promise<void>;
34
+ /**
35
+ * Update session watermark
36
+ */
37
+ updateSessionWatermark(sessionId: string, watermark: MetricsSession['watermark']): Promise<void>;
38
+ /**
39
+ * Update monitoring state
40
+ */
41
+ updateMonitoringState(sessionId: string, monitoring: Partial<MetricsSession['monitoring']>): Promise<void>;
42
+ }
43
+ //# sourceMappingURL=SessionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionStore.d.ts","sourceRoot":"","sources":["../../../src/metrics/session/SessionStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,qBAAa,YAAY;IACvB;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBzD;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAoBpE;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA4B/C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAKrD;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7F;;OAEG;IACG,wBAAwB,CAC5B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAehB;;OAEG;IACG,sBAAsB,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,GACrC,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,GAChD,OAAO,CAAC,IAAI,CAAC;CAcjB"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Session Store
3
+ *
4
+ * Manages persistence of metrics session data to JSON files.
5
+ * One file per session: ~/.codemie/metrics/sessions/{sessionId}.json
6
+ */
7
+ import { readFile, writeFile, readdir, mkdir } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { dirname } from 'path';
10
+ import { getSessionPath, getMetricsPath, METRICS_PATHS } from '../config.js';
11
+ import { logger } from '../../utils/logger.js';
12
+ export class SessionStore {
13
+ /**
14
+ * Save session to disk
15
+ * Path: ~/.codemie/metrics/sessions/{sessionId}.json
16
+ */
17
+ async saveSession(session) {
18
+ const sessionPath = getSessionPath(session.sessionId);
19
+ try {
20
+ // Ensure directory exists
21
+ const dir = dirname(sessionPath);
22
+ if (!existsSync(dir)) {
23
+ await mkdir(dir, { recursive: true });
24
+ }
25
+ // Write session data (metrics path is now derived from sessionId)
26
+ await writeFile(sessionPath, JSON.stringify(session, null, 2), 'utf-8');
27
+ logger.debug(`[SessionStore] Saved session: ${session.sessionId}`);
28
+ }
29
+ catch (error) {
30
+ logger.error(`[SessionStore] Failed to save session: ${session.sessionId}`, error);
31
+ throw error;
32
+ }
33
+ }
34
+ /**
35
+ * Load session from disk
36
+ */
37
+ async loadSession(sessionId) {
38
+ const sessionPath = getSessionPath(sessionId);
39
+ if (!existsSync(sessionPath)) {
40
+ logger.debug(`[SessionStore] Session file not found: ${sessionId}`);
41
+ return null;
42
+ }
43
+ try {
44
+ const content = await readFile(sessionPath, 'utf-8');
45
+ const session = JSON.parse(content);
46
+ logger.debug(`[SessionStore] Loaded session: ${sessionId}`);
47
+ return session;
48
+ }
49
+ catch (error) {
50
+ logger.error(`[SessionStore] Failed to load session: ${sessionId}`, error);
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * List all sessions
56
+ */
57
+ async listSessions() {
58
+ const sessionsDir = getMetricsPath(METRICS_PATHS.sessions);
59
+ if (!existsSync(sessionsDir)) {
60
+ return [];
61
+ }
62
+ try {
63
+ const files = await readdir(sessionsDir);
64
+ const sessions = [];
65
+ for (const file of files) {
66
+ if (file.endsWith('.json')) {
67
+ const sessionId = file.replace('.json', '');
68
+ const session = await this.loadSession(sessionId);
69
+ if (session) {
70
+ sessions.push(session);
71
+ }
72
+ }
73
+ }
74
+ return sessions;
75
+ }
76
+ catch (error) {
77
+ logger.error('[SessionStore] Failed to list sessions', error);
78
+ return [];
79
+ }
80
+ }
81
+ /**
82
+ * List active sessions (status === 'active')
83
+ */
84
+ async listActiveSessions() {
85
+ const allSessions = await this.listSessions();
86
+ return allSessions.filter(s => s.status === 'active');
87
+ }
88
+ /**
89
+ * Update session status
90
+ */
91
+ async updateSessionStatus(sessionId, status) {
92
+ const session = await this.loadSession(sessionId);
93
+ if (!session) {
94
+ throw new Error(`Session not found: ${sessionId}`);
95
+ }
96
+ session.status = status;
97
+ if (status === 'completed' || status === 'recovered' || status === 'failed') {
98
+ session.endTime = Date.now();
99
+ }
100
+ await this.saveSession(session);
101
+ }
102
+ /**
103
+ * Update session correlation
104
+ */
105
+ async updateSessionCorrelation(sessionId, correlation) {
106
+ const session = await this.loadSession(sessionId);
107
+ if (!session) {
108
+ throw new Error(`Session not found: ${sessionId}`);
109
+ }
110
+ session.correlation = {
111
+ ...session.correlation,
112
+ ...correlation
113
+ };
114
+ await this.saveSession(session);
115
+ }
116
+ /**
117
+ * Update session watermark
118
+ */
119
+ async updateSessionWatermark(sessionId, watermark) {
120
+ const session = await this.loadSession(sessionId);
121
+ if (!session) {
122
+ throw new Error(`Session not found: ${sessionId}`);
123
+ }
124
+ session.watermark = watermark;
125
+ await this.saveSession(session);
126
+ }
127
+ /**
128
+ * Update monitoring state
129
+ */
130
+ async updateMonitoringState(sessionId, monitoring) {
131
+ const session = await this.loadSession(sessionId);
132
+ if (!session) {
133
+ throw new Error(`Session not found: ${sessionId}`);
134
+ }
135
+ session.monitoring = {
136
+ ...session.monitoring,
137
+ ...monitoring
138
+ };
139
+ await this.saveSession(session);
140
+ }
141
+ }
142
+ //# sourceMappingURL=SessionStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionStore.js","sourceRoot":"","sources":["../../../src/metrics/session/SessionStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Metrics API Client
3
+ *
4
+ * HTTP client for sending metrics to CodeMie API.
5
+ * Features:
6
+ * - Exponential backoff retry
7
+ * - SSO cookie authentication
8
+ * - JSON batch sending
9
+ * - Error classification (retryable vs non-retryable)
10
+ */
11
+ import type { MetricsApiConfig, MetricsSyncResponse, SessionMetric } from './types.js';
12
+ export declare class MetricsApiClient {
13
+ private readonly config;
14
+ constructor(config: MetricsApiConfig);
15
+ /**
16
+ * Send single aggregated metric to API (JSON format)
17
+ */
18
+ sendMetric(metric: SessionMetric): Promise<MetricsSyncResponse>;
19
+ /**
20
+ * Send HTTP request to API
21
+ */
22
+ private sendRequest;
23
+ /**
24
+ * Check if error is retryable
25
+ */
26
+ private isRetryable;
27
+ /**
28
+ * Sleep for specified milliseconds
29
+ */
30
+ private sleep;
31
+ }
32
+ //# sourceMappingURL=MetricsApiClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsApiClient.d.ts","sourceRoot":"","sources":["../../../src/metrics/sync/MetricsApiClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAC,gBAAgB,EAAE,mBAAmB,EAAE,aAAa,EAAkB,MAAM,YAAY,CAAC;AAEtG,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAExC,MAAM,EAAE,gBAAgB;IAYpC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+BrE;;OAEG;YACW,WAAW;IAgGzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Metrics API Client
3
+ *
4
+ * HTTP client for sending metrics to CodeMie API.
5
+ * Features:
6
+ * - Exponential backoff retry
7
+ * - SSO cookie authentication
8
+ * - JSON batch sending
9
+ * - Error classification (retryable vs non-retryable)
10
+ */
11
+ import { logger } from '../../utils/logger.js';
12
+ import { CODEMIE_ENDPOINTS } from '../../providers/plugins/sso/sso.http-client.js';
13
+ export class MetricsApiClient {
14
+ config;
15
+ constructor(config) {
16
+ this.config = {
17
+ baseUrl: config.baseUrl,
18
+ cookies: config.cookies || '',
19
+ timeout: config.timeout || 30000,
20
+ retryAttempts: config.retryAttempts || 3,
21
+ retryDelays: config.retryDelays || [1000, 2000, 5000],
22
+ version: config.version || process.env.CODEMIE_CLI_VERSION || 'unknown',
23
+ clientType: config.clientType || 'codemie-cli'
24
+ };
25
+ }
26
+ /**
27
+ * Send single aggregated metric to API (JSON format)
28
+ */
29
+ async sendMetric(metric) {
30
+ let lastError;
31
+ // Retry with exponential backoff
32
+ for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {
33
+ try {
34
+ if (attempt > 0) {
35
+ const delay = this.config.retryDelays[attempt - 1] || 5000;
36
+ logger.debug(`[MetricsApiClient] Retry attempt ${attempt} after ${delay}ms`);
37
+ await this.sleep(delay);
38
+ }
39
+ return await this.sendRequest(metric);
40
+ }
41
+ catch (error) {
42
+ lastError = error;
43
+ // Check if error is retryable
44
+ if (!this.isRetryable(error)) {
45
+ logger.error('[MetricsApiClient] Non-retryable error:', error);
46
+ throw error;
47
+ }
48
+ logger.warn(`[MetricsApiClient] Attempt ${attempt + 1} failed:`, error);
49
+ }
50
+ }
51
+ // All retries exhausted
52
+ throw new Error(`Failed after ${this.config.retryAttempts} retries: ${lastError?.message}`);
53
+ }
54
+ /**
55
+ * Send HTTP request to API
56
+ */
57
+ async sendRequest(metric) {
58
+ const url = `${this.config.baseUrl}${CODEMIE_ENDPOINTS.METRICS}`;
59
+ // Convert to JSON
60
+ const body = JSON.stringify(metric);
61
+ logger.debug(`[MetricsApiClient] Sending metric to ${url}. Body ${body}`);
62
+ // Create headers (match SSO endpoint headers)
63
+ const headers = {
64
+ 'Content-Type': 'application/json',
65
+ 'User-Agent': `codemie-cli/${this.config.version}`,
66
+ 'X-CodeMie-CLI': `codemie-cli/${this.config.version}`,
67
+ 'X-CodeMie-Client': this.config.clientType
68
+ };
69
+ // Add cookies if present (SSO authentication)
70
+ if (this.config.cookies) {
71
+ headers['Cookie'] = this.config.cookies;
72
+ }
73
+ // Send request with timeout
74
+ const controller = new AbortController();
75
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
76
+ try {
77
+ const response = await fetch(url, {
78
+ method: 'POST',
79
+ headers,
80
+ body,
81
+ signal: controller.signal
82
+ });
83
+ clearTimeout(timeoutId);
84
+ // Parse response - could be success response or error response
85
+ const data = await response.json();
86
+ // Check response status first
87
+ if (!response.ok) {
88
+ // Handle FastAPI ExtendedHTTPException format
89
+ if ('code' in data && 'details' in data) {
90
+ const errorData = data;
91
+ let errorMessage = `API returned ${response.status}: ${errorData.message}`;
92
+ if (errorData.details) {
93
+ errorMessage += `\nDetails: ${errorData.details}`;
94
+ }
95
+ if (errorData.help) {
96
+ errorMessage += `\nHelp: ${errorData.help}`;
97
+ }
98
+ const error = new Error(errorMessage);
99
+ error.statusCode = response.status;
100
+ error.response = data;
101
+ throw error;
102
+ }
103
+ // Fallback for non-extended error format
104
+ const errorMessage = 'message' in data ? data.message : response.statusText;
105
+ const error = new Error(`API returned ${response.status}: ${errorMessage}`);
106
+ error.statusCode = response.status;
107
+ error.response = data;
108
+ throw error;
109
+ }
110
+ // Successfully got 200 response, check if metric was processed
111
+ const successData = data;
112
+ logger.debug(`[MetricsApiClient] Response from ${url}: success=${successData.success}, message="${successData.message}"`);
113
+ // Check if the API reported failure in the response body (success=false with 200 status)
114
+ if (!successData.success) {
115
+ const error = new Error(`API reported failure: ${successData.message}`);
116
+ error.response = data;
117
+ throw error;
118
+ }
119
+ logger.info(`[MetricsApiClient] Successfully sent metric: ${successData.message}`);
120
+ return successData;
121
+ }
122
+ catch (error) {
123
+ clearTimeout(timeoutId);
124
+ if (error.name === 'AbortError') {
125
+ throw new Error(`Request timeout after ${this.config.timeout}ms`);
126
+ }
127
+ throw error;
128
+ }
129
+ }
130
+ /**
131
+ * Check if error is retryable
132
+ */
133
+ isRetryable(error) {
134
+ const statusCode = error.statusCode;
135
+ // Retryable errors
136
+ if (!statusCode) {
137
+ // Network errors (ECONNREFUSED, ETIMEDOUT, etc.)
138
+ return true;
139
+ }
140
+ // Retry on 5xx and 429 (rate limit)
141
+ if (statusCode >= 500 || statusCode === 429) {
142
+ return true;
143
+ }
144
+ // Non-retryable errors (4xx except 429)
145
+ // 401 Unauthorized, 403 Forbidden, 400 Bad Request
146
+ return false;
147
+ }
148
+ /**
149
+ * Sleep for specified milliseconds
150
+ */
151
+ sleep(ms) {
152
+ return new Promise(resolve => setTimeout(resolve, ms));
153
+ }
154
+ }
155
+ //# sourceMappingURL=MetricsApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetricsApiClient.js","sourceRoot":"","sources":["../../../src/metrics/sync/MetricsApiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Metrics Aggregator
3
+ *
4
+ * Aggregates metric deltas into a single session metric.
5
+ * Reuses patterns from analytics system.
6
+ */
7
+ import type { MetricDelta, MetricsSession } from '../types.js';
8
+ import type { SessionMetric } from './types.js';
9
+ /**
10
+ * Aggregate pending deltas into session metrics grouped by branch
11
+ * Returns one metric per branch to prevent mixing metrics between branches
12
+ */
13
+ export declare function aggregateDeltas(deltas: MetricDelta[], session: MetricsSession, version: string): SessionMetric[];
14
+ //# sourceMappingURL=aggregator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.d.ts","sourceRoot":"","sources":["../../../src/metrics/sync/aggregator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAoB,aAAa,EAAC,MAAM,YAAY,CAAC;AAGjE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,GACd,aAAa,EAAE,CAmCjB"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Metrics Aggregator
3
+ *
4
+ * Aggregates metric deltas into a single session metric.
5
+ * Reuses patterns from analytics system.
6
+ */
7
+ import { logger } from '../../utils/logger.js';
8
+ /**
9
+ * Aggregate pending deltas into session metrics grouped by branch
10
+ * Returns one metric per branch to prevent mixing metrics between branches
11
+ */
12
+ export function aggregateDeltas(deltas, session, version) {
13
+ logger.debug(`[aggregator] Aggregating ${deltas.length} deltas for session ${session.sessionId}`);
14
+ // Group deltas by branch
15
+ const deltasByBranch = new Map();
16
+ for (const delta of deltas) {
17
+ const branch = delta.gitBranch || 'unknown';
18
+ if (!deltasByBranch.has(branch)) {
19
+ deltasByBranch.set(branch, []);
20
+ }
21
+ deltasByBranch.get(branch).push(delta);
22
+ }
23
+ logger.debug(`[aggregator] Grouped deltas into ${deltasByBranch.size} branches: ${Array.from(deltasByBranch.keys()).join(', ')}`);
24
+ // Create one metric per branch
25
+ const metrics = [];
26
+ for (const [branch, branchDeltas] of deltasByBranch) {
27
+ logger.debug(`[aggregator] Building metric for branch "${branch}" with ${branchDeltas.length} deltas`);
28
+ // Build attributes from deltas for this branch
29
+ const attributes = buildSessionAttributes(branchDeltas, session, version, branch);
30
+ // Create session metric for this branch
31
+ metrics.push({
32
+ name: 'codemie_cli_usage_total',
33
+ attributes
34
+ });
35
+ }
36
+ return metrics;
37
+ }
38
+ /**
39
+ * Build session attributes from deltas for a specific branch
40
+ */
41
+ function buildSessionAttributes(deltas, session, version, branch) {
42
+ // Token aggregation
43
+ let totalInput = 0;
44
+ let totalOutput = 0;
45
+ let totalCacheRead = 0;
46
+ let totalCacheCreation = 0;
47
+ // Tool tracking
48
+ const toolCounts = {};
49
+ const toolSuccess = {};
50
+ const toolFailures = {};
51
+ // File operations
52
+ let filesCreated = 0;
53
+ let filesModified = 0;
54
+ let filesDeleted = 0;
55
+ let linesAdded = 0;
56
+ let linesRemoved = 0;
57
+ // Model tracking (count occurrences)
58
+ const modelCounts = {};
59
+ // User prompts
60
+ let userPromptCount = 0;
61
+ // Error tracking
62
+ let hadErrors = false;
63
+ const errorsByTool = {};
64
+ // Aggregate all deltas
65
+ for (const delta of deltas) {
66
+ // Tokens
67
+ totalInput += delta.tokens.input || 0;
68
+ totalOutput += delta.tokens.output || 0;
69
+ totalCacheRead += delta.tokens.cacheRead || 0;
70
+ totalCacheCreation += delta.tokens.cacheCreation || 0;
71
+ // Tools
72
+ for (const [toolName, count] of Object.entries(delta.tools)) {
73
+ toolCounts[toolName] = (toolCounts[toolName] || 0) + count;
74
+ }
75
+ // Tool status
76
+ if (delta.toolStatus) {
77
+ for (const [toolName, status] of Object.entries(delta.toolStatus)) {
78
+ toolSuccess[toolName] = (toolSuccess[toolName] || 0) + status.success;
79
+ toolFailures[toolName] = (toolFailures[toolName] || 0) + status.failure;
80
+ }
81
+ }
82
+ // File operations
83
+ if (delta.fileOperations) {
84
+ for (const op of delta.fileOperations) {
85
+ if (op.type === 'write')
86
+ filesCreated++;
87
+ if (op.type === 'edit')
88
+ filesModified++;
89
+ if (op.type === 'delete')
90
+ filesDeleted++;
91
+ linesAdded += op.linesAdded || 0;
92
+ linesRemoved += op.linesRemoved || 0;
93
+ }
94
+ }
95
+ // Models
96
+ if (delta.models) {
97
+ for (const model of delta.models) {
98
+ modelCounts[model] = (modelCounts[model] || 0) + 1;
99
+ }
100
+ }
101
+ // User prompts
102
+ if (delta.userPrompts) {
103
+ userPromptCount += delta.userPrompts.length;
104
+ }
105
+ // Errors - collect all tool-specific error messages (tools can have multiple errors)
106
+ if (delta.apiErrorMessage) {
107
+ hadErrors = true;
108
+ // Try to extract tool name from delta
109
+ // If we have toolStatus with failures, associate error with that tool
110
+ if (delta.toolStatus) {
111
+ for (const [toolName, status] of Object.entries(delta.toolStatus)) {
112
+ if (status.failure > 0) {
113
+ // Initialize array if not exists
114
+ if (!errorsByTool[toolName]) {
115
+ errorsByTool[toolName] = [];
116
+ }
117
+ // Add error to the tool's error list
118
+ errorsByTool[toolName].push(delta.apiErrorMessage);
119
+ }
120
+ }
121
+ }
122
+ // If no tool status with failures, it's a general error
123
+ if (Object.keys(errorsByTool).length === 0) {
124
+ if (!errorsByTool['general']) {
125
+ errorsByTool['general'] = [];
126
+ }
127
+ errorsByTool['general'].push(delta.apiErrorMessage);
128
+ }
129
+ }
130
+ }
131
+ // Determine most-used model
132
+ const primaryModel = getMostUsedModel(modelCounts);
133
+ // Calculate total tool calls
134
+ const totalToolCalls = Object.values(toolCounts).reduce((sum, count) => sum + count, 0);
135
+ const successfulToolCalls = Object.values(toolSuccess).reduce((sum, count) => sum + count, 0);
136
+ const failedToolCalls = Object.values(toolFailures).reduce((sum, count) => sum + count, 0);
137
+ // Calculate session duration from deltas (incremental batch duration)
138
+ const sessionDuration = calculateDurationFromDeltas(deltas, session);
139
+ // Build attributes
140
+ const attributes = {
141
+ // Identity
142
+ agent: session.agentName,
143
+ agent_version: version,
144
+ llm_model: primaryModel || 'unknown',
145
+ project: session.workingDirectory,
146
+ session_id: session.sessionId,
147
+ git_branch: branch,
148
+ // Interaction Metrics
149
+ total_user_prompts: userPromptCount,
150
+ // Token Metrics
151
+ total_input_tokens: totalInput,
152
+ total_output_tokens: totalOutput,
153
+ total_cache_read_input_tokens: totalCacheRead,
154
+ total_cache_creation_tokens: totalCacheCreation,
155
+ // Tool Metrics
156
+ total_tool_calls: totalToolCalls,
157
+ successful_tool_calls: successfulToolCalls,
158
+ failed_tool_calls: failedToolCalls,
159
+ // File Operation Metrics
160
+ files_created: filesCreated,
161
+ files_modified: filesModified,
162
+ files_deleted: filesDeleted,
163
+ total_lines_added: linesAdded,
164
+ total_lines_removed: linesRemoved,
165
+ // Session Metadata
166
+ session_duration_ms: sessionDuration,
167
+ had_errors: hadErrors,
168
+ count: 1 // Prometheus compatibility
169
+ };
170
+ // Add errors map only if there are errors
171
+ if (hadErrors && Object.keys(errorsByTool).length > 0) {
172
+ attributes.errors = errorsByTool;
173
+ }
174
+ return attributes;
175
+ }
176
+ /**
177
+ * Get most-used model from counts
178
+ */
179
+ function getMostUsedModel(modelCounts) {
180
+ const entries = Object.entries(modelCounts);
181
+ if (entries.length === 0) {
182
+ return null;
183
+ }
184
+ // Sort by count descending
185
+ entries.sort((a, b) => b[1] - a[1]);
186
+ return entries[0][0];
187
+ }
188
+ /**
189
+ * Calculate session duration from deltas (incremental batch duration)
190
+ * This calculates the time span covered by this batch of metrics,
191
+ * not the total session duration.
192
+ */
193
+ function calculateDurationFromDeltas(deltas, session) {
194
+ if (deltas.length === 0) {
195
+ return 0;
196
+ }
197
+ // Convert timestamps to numbers (handle both Unix ms and ISO strings)
198
+ const timestamps = deltas.map((delta) => {
199
+ const ts = delta.timestamp;
200
+ return typeof ts === 'string' ? new Date(ts).getTime() : ts;
201
+ });
202
+ // Calculate duration from earliest to latest delta in this batch
203
+ const minTimestamp = Math.min(...timestamps);
204
+ const maxTimestamp = Math.max(...timestamps);
205
+ // Duration covered by this batch of deltas
206
+ const batchDuration = maxTimestamp - minTimestamp;
207
+ // If this is the first batch (only one delta or all same timestamp),
208
+ // use time since session start
209
+ if (batchDuration === 0) {
210
+ return maxTimestamp - session.startTime;
211
+ }
212
+ return batchDuration;
213
+ }
214
+ //# sourceMappingURL=aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregator.js","sourceRoot":"","sources":["../../../src/metrics/sync/aggregator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Metrics Sync Module
3
+ *
4
+ * Exports all sync-related functionality
5
+ */
6
+ export { MetricsApiClient } from './MetricsApiClient.js';
7
+ export { aggregateDeltas } from './aggregator.js';
8
+ export { readJSONL, writeJSONLAtomic } from './jsonl-writer.js';
9
+ export * from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metrics/sync/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAChE,cAAc,YAAY,CAAC"}