@codemieai/code 0.0.14 → 0.0.16

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 (370) hide show
  1. package/README.md +32 -15
  2. package/dist/agents/codemie-code/agent.d.ts.map +1 -1
  3. package/dist/agents/codemie-code/agent.js +6 -6
  4. package/dist/agents/codemie-code/agent.js.map +1 -1
  5. package/dist/agents/codemie-code/config.d.ts.map +1 -1
  6. package/dist/agents/codemie-code/config.js +14 -5
  7. package/dist/agents/codemie-code/config.js.map +1 -1
  8. package/dist/agents/codemie-code/filters.js +12 -12
  9. package/dist/agents/codemie-code/filters.js.map +1 -1
  10. package/dist/agents/codemie-code/index.d.ts.map +1 -1
  11. package/dist/agents/codemie-code/index.js +3 -1
  12. package/dist/agents/codemie-code/index.js.map +1 -1
  13. package/dist/agents/codemie-code/storage/todoStorage.js +1 -1
  14. package/dist/agents/codemie-code/storage/todoStorage.js.map +1 -1
  15. package/dist/agents/codemie-code/ui.js +1 -1
  16. package/dist/agents/codemie-code/ui.js.map +1 -1
  17. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  18. package/dist/agents/core/AgentCLI.js +5 -4
  19. package/dist/agents/core/AgentCLI.js.map +1 -1
  20. package/dist/agents/core/BaseAgentAdapter.d.ts +1 -5
  21. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  22. package/dist/agents/core/BaseAgentAdapter.js +5 -26
  23. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  24. package/dist/agents/core/types.d.ts +5 -0
  25. package/dist/agents/core/types.d.ts.map +1 -1
  26. package/dist/agents/plugins/claude.plugin.js +1 -1
  27. package/dist/agents/plugins/claude.plugin.js.map +1 -1
  28. package/dist/agents/plugins/codemie-code.plugin.js +2 -2
  29. package/dist/agents/plugins/codemie-code.plugin.js.map +1 -1
  30. package/dist/agents/plugins/codex.plugin.js +2 -2
  31. package/dist/agents/plugins/codex.plugin.js.map +1 -1
  32. package/dist/agents/plugins/deepagents.plugin.js +1 -1
  33. package/dist/agents/plugins/deepagents.plugin.js.map +1 -1
  34. package/dist/agents/plugins/gemini.plugin.js +1 -1
  35. package/dist/agents/plugins/gemini.plugin.js.map +1 -1
  36. package/dist/analytics/aggregation/adapters/claude.adapter.d.ts.map +1 -1
  37. package/dist/analytics/aggregation/adapters/claude.adapter.js +75 -15
  38. package/dist/analytics/aggregation/adapters/claude.adapter.js.map +1 -1
  39. package/dist/analytics/aggregation/adapters/codex.adapter.d.ts.map +1 -1
  40. package/dist/analytics/aggregation/adapters/codex.adapter.js +20 -0
  41. package/dist/analytics/aggregation/adapters/codex.adapter.js.map +1 -1
  42. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts +8 -0
  43. package/dist/analytics/aggregation/adapters/gemini.adapter.d.ts.map +1 -1
  44. package/dist/analytics/aggregation/adapters/gemini.adapter.js +46 -1
  45. package/dist/analytics/aggregation/adapters/gemini.adapter.js.map +1 -1
  46. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts +36 -0
  47. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.d.ts.map +1 -1
  48. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js +52 -0
  49. package/dist/analytics/aggregation/core/BaseAnalyticsAdapter.js.map +1 -1
  50. package/dist/analytics/aggregation/core/adapter.interface.d.ts +11 -0
  51. package/dist/analytics/aggregation/core/adapter.interface.d.ts.map +1 -1
  52. package/dist/analytics/aggregation/core/aggregation-utils.d.ts +20 -0
  53. package/dist/analytics/aggregation/core/aggregation-utils.d.ts.map +1 -1
  54. package/dist/analytics/aggregation/core/aggregation-utils.js +43 -0
  55. package/dist/analytics/aggregation/core/aggregation-utils.js.map +1 -1
  56. package/dist/analytics/aggregation/core/file-utils.d.ts +2 -1
  57. package/dist/analytics/aggregation/core/file-utils.d.ts.map +1 -1
  58. package/dist/analytics/aggregation/core/file-utils.js +20 -85
  59. package/dist/analytics/aggregation/core/file-utils.js.map +1 -1
  60. package/dist/analytics/aggregation/core/index.d.ts +3 -0
  61. package/dist/analytics/aggregation/core/index.d.ts.map +1 -1
  62. package/dist/analytics/aggregation/core/index.js +3 -0
  63. package/dist/analytics/aggregation/core/index.js.map +1 -1
  64. package/dist/analytics/aggregation/core/user-prompt-source.d.ts +81 -0
  65. package/dist/analytics/aggregation/core/user-prompt-source.d.ts.map +1 -0
  66. package/dist/analytics/aggregation/core/user-prompt-source.js +69 -0
  67. package/dist/analytics/aggregation/core/user-prompt-source.js.map +1 -0
  68. package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts +49 -0
  69. package/dist/analytics/aggregation/core/user-prompt-sources/json.d.ts.map +1 -0
  70. package/dist/analytics/aggregation/core/user-prompt-sources/json.js +66 -0
  71. package/dist/analytics/aggregation/core/user-prompt-sources/json.js.map +1 -0
  72. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts +43 -0
  73. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.d.ts.map +1 -0
  74. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js +56 -0
  75. package/dist/analytics/aggregation/core/user-prompt-sources/jsonl.js.map +1 -0
  76. package/dist/analytics/aggregation/types.d.ts +20 -0
  77. package/dist/analytics/aggregation/types.d.ts.map +1 -1
  78. package/dist/analytics/index.d.ts.map +1 -1
  79. package/dist/analytics/index.js +3 -11
  80. package/dist/analytics/index.js.map +1 -1
  81. package/dist/analytics/remote-submission/cursor-manager.d.ts +71 -0
  82. package/dist/analytics/remote-submission/cursor-manager.d.ts.map +1 -0
  83. package/dist/analytics/remote-submission/cursor-manager.js +204 -0
  84. package/dist/analytics/remote-submission/cursor-manager.js.map +1 -0
  85. package/dist/analytics/remote-submission/index.d.ts +12 -0
  86. package/dist/analytics/remote-submission/index.d.ts.map +1 -0
  87. package/dist/analytics/remote-submission/index.js +11 -0
  88. package/dist/analytics/remote-submission/index.js.map +1 -0
  89. package/dist/analytics/remote-submission/lock-manager.d.ts +71 -0
  90. package/dist/analytics/remote-submission/lock-manager.d.ts.map +1 -0
  91. package/dist/analytics/remote-submission/lock-manager.js +238 -0
  92. package/dist/analytics/remote-submission/lock-manager.js.map +1 -0
  93. package/dist/analytics/remote-submission/metric-transformer.d.ts +21 -0
  94. package/dist/analytics/remote-submission/metric-transformer.d.ts.map +1 -0
  95. package/dist/analytics/remote-submission/metric-transformer.js +82 -0
  96. package/dist/analytics/remote-submission/metric-transformer.js.map +1 -0
  97. package/dist/analytics/remote-submission/submitter.d.ts +79 -0
  98. package/dist/analytics/remote-submission/submitter.d.ts.map +1 -0
  99. package/dist/analytics/remote-submission/submitter.js +362 -0
  100. package/dist/analytics/remote-submission/submitter.js.map +1 -0
  101. package/dist/analytics/remote-submission/types.d.ts +123 -0
  102. package/dist/analytics/remote-submission/types.d.ts.map +1 -0
  103. package/dist/analytics/remote-submission/types.js +13 -0
  104. package/dist/analytics/remote-submission/types.js.map +1 -0
  105. package/dist/cli/commands/analytics.d.ts.map +1 -1
  106. package/dist/cli/commands/analytics.js +181 -12
  107. package/dist/cli/commands/analytics.js.map +1 -1
  108. package/dist/cli/commands/auth.d.ts.map +1 -1
  109. package/dist/cli/commands/auth.js +10 -5
  110. package/dist/cli/commands/auth.js.map +1 -1
  111. package/dist/cli/commands/doctor/checks/AIConfigCheck.d.ts.map +1 -1
  112. package/dist/cli/commands/doctor/checks/AIConfigCheck.js +12 -5
  113. package/dist/cli/commands/doctor/checks/AIConfigCheck.js.map +1 -1
  114. package/dist/cli/commands/doctor/formatter.d.ts +1 -1
  115. package/dist/cli/commands/doctor/formatter.d.ts.map +1 -1
  116. package/dist/cli/commands/doctor/formatter.js +1 -6
  117. package/dist/cli/commands/doctor/formatter.js.map +1 -1
  118. package/dist/cli/commands/doctor/index.d.ts.map +1 -1
  119. package/dist/cli/commands/doctor/index.js +36 -9
  120. package/dist/cli/commands/doctor/index.js.map +1 -1
  121. package/dist/cli/commands/doctor/type-adapters.d.ts +18 -0
  122. package/dist/cli/commands/doctor/type-adapters.d.ts.map +1 -0
  123. package/dist/cli/commands/doctor/type-adapters.js +75 -0
  124. package/dist/cli/commands/doctor/type-adapters.js.map +1 -0
  125. package/dist/cli/commands/install.d.ts.map +1 -1
  126. package/dist/cli/commands/install.js +1 -6
  127. package/dist/cli/commands/install.js.map +1 -1
  128. package/dist/cli/commands/list.d.ts.map +1 -1
  129. package/dist/cli/commands/list.js +0 -5
  130. package/dist/cli/commands/list.js.map +1 -1
  131. package/dist/cli/commands/profile.d.ts.map +1 -1
  132. package/dist/cli/commands/profile.js +109 -63
  133. package/dist/cli/commands/profile.js.map +1 -1
  134. package/dist/cli/commands/setup.d.ts.map +1 -1
  135. package/dist/cli/commands/setup.js +169 -660
  136. package/dist/cli/commands/setup.js.map +1 -1
  137. package/dist/cli/commands/workflow.js +1 -1
  138. package/dist/cli/commands/workflow.js.map +1 -1
  139. package/dist/cli/index.d.ts +1 -1
  140. package/dist/cli/index.d.ts.map +1 -1
  141. package/dist/cli/index.js +4 -5
  142. package/dist/cli/index.js.map +1 -1
  143. package/dist/providers/core/base/BaseHealthCheck.d.ts +57 -0
  144. package/dist/providers/core/base/BaseHealthCheck.d.ts.map +1 -0
  145. package/dist/providers/core/base/BaseHealthCheck.js +121 -0
  146. package/dist/providers/core/base/BaseHealthCheck.js.map +1 -0
  147. package/dist/providers/core/base/BaseModelProxy.d.ts +45 -0
  148. package/dist/providers/core/base/BaseModelProxy.d.ts.map +1 -0
  149. package/dist/providers/core/base/BaseModelProxy.js +43 -0
  150. package/dist/providers/core/base/BaseModelProxy.js.map +1 -0
  151. package/dist/providers/core/base/http-client.d.ts +57 -0
  152. package/dist/providers/core/base/http-client.d.ts.map +1 -0
  153. package/dist/providers/core/base/http-client.js +240 -0
  154. package/dist/providers/core/base/http-client.js.map +1 -0
  155. package/dist/providers/core/decorators.d.ts +13 -0
  156. package/dist/providers/core/decorators.d.ts.map +1 -0
  157. package/dist/providers/core/decorators.js +15 -0
  158. package/dist/providers/core/decorators.js.map +1 -0
  159. package/dist/providers/core/index.d.ts +13 -0
  160. package/dist/providers/core/index.d.ts.map +1 -0
  161. package/dist/providers/core/index.js +14 -0
  162. package/dist/providers/core/index.js.map +1 -0
  163. package/dist/providers/core/registry.d.ts +66 -0
  164. package/dist/providers/core/registry.d.ts.map +1 -0
  165. package/dist/providers/core/registry.js +105 -0
  166. package/dist/providers/core/registry.js.map +1 -0
  167. package/dist/providers/core/types.d.ts +285 -0
  168. package/dist/providers/core/types.d.ts.map +1 -0
  169. package/dist/providers/core/types.js +7 -0
  170. package/dist/providers/core/types.js.map +1 -0
  171. package/dist/providers/index.d.ts +20 -0
  172. package/dist/providers/index.d.ts.map +1 -0
  173. package/dist/providers/index.js +22 -0
  174. package/dist/providers/index.js.map +1 -0
  175. package/dist/providers/integration/setup-ui.d.ts +76 -0
  176. package/dist/providers/integration/setup-ui.d.ts.map +1 -0
  177. package/dist/providers/integration/setup-ui.js +141 -0
  178. package/dist/providers/integration/setup-ui.js.map +1 -0
  179. package/dist/providers/plugins/litellm/index.d.ts +8 -0
  180. package/dist/providers/plugins/litellm/index.d.ts.map +1 -0
  181. package/dist/providers/plugins/litellm/index.js +12 -0
  182. package/dist/providers/plugins/litellm/index.js.map +1 -0
  183. package/dist/providers/plugins/litellm/litellm.models.d.ts +27 -0
  184. package/dist/providers/plugins/litellm/litellm.models.d.ts.map +1 -0
  185. package/dist/providers/plugins/litellm/litellm.models.js +48 -0
  186. package/dist/providers/plugins/litellm/litellm.models.js.map +1 -0
  187. package/dist/providers/plugins/litellm/litellm.setup-steps.d.ts +8 -0
  188. package/dist/providers/plugins/litellm/litellm.setup-steps.d.ts.map +1 -0
  189. package/dist/providers/plugins/litellm/litellm.setup-steps.js +52 -0
  190. package/dist/providers/plugins/litellm/litellm.setup-steps.js.map +1 -0
  191. package/dist/providers/plugins/litellm/litellm.template.d.ts +11 -0
  192. package/dist/providers/plugins/litellm/litellm.template.d.ts.map +1 -0
  193. package/dist/providers/plugins/litellm/litellm.template.js +59 -0
  194. package/dist/providers/plugins/litellm/litellm.template.js.map +1 -0
  195. package/dist/providers/plugins/ollama/index.d.ts +11 -0
  196. package/dist/providers/plugins/ollama/index.d.ts.map +1 -0
  197. package/dist/providers/plugins/ollama/index.js +11 -0
  198. package/dist/providers/plugins/ollama/index.js.map +1 -0
  199. package/dist/providers/plugins/ollama/ollama.health.d.ts +48 -0
  200. package/dist/providers/plugins/ollama/ollama.health.d.ts.map +1 -0
  201. package/dist/providers/plugins/ollama/ollama.health.js +87 -0
  202. package/dist/providers/plugins/ollama/ollama.health.js.map +1 -0
  203. package/dist/providers/plugins/ollama/ollama.models.d.ts +47 -0
  204. package/dist/providers/plugins/ollama/ollama.models.d.ts.map +1 -0
  205. package/dist/providers/plugins/ollama/ollama.models.js +252 -0
  206. package/dist/providers/plugins/ollama/ollama.models.js.map +1 -0
  207. package/dist/providers/plugins/ollama/ollama.setup-steps.d.ts +16 -0
  208. package/dist/providers/plugins/ollama/ollama.setup-steps.d.ts.map +1 -0
  209. package/dist/providers/plugins/ollama/ollama.setup-steps.js +164 -0
  210. package/dist/providers/plugins/ollama/ollama.setup-steps.js.map +1 -0
  211. package/dist/providers/plugins/ollama/ollama.template.d.ts +11 -0
  212. package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -0
  213. package/dist/providers/plugins/ollama/ollama.template.js +87 -0
  214. package/dist/providers/plugins/ollama/ollama.template.js.map +1 -0
  215. package/dist/providers/plugins/sso/index.d.ts +12 -0
  216. package/dist/providers/plugins/sso/index.d.ts.map +1 -0
  217. package/dist/providers/plugins/sso/index.js +12 -0
  218. package/dist/providers/plugins/sso/index.js.map +1 -0
  219. package/dist/providers/plugins/sso/sso.auth.d.ts +50 -0
  220. package/dist/providers/plugins/sso/sso.auth.d.ts.map +1 -0
  221. package/dist/{utils/sso-auth.js → providers/plugins/sso/sso.auth.js} +37 -2
  222. package/dist/providers/plugins/sso/sso.auth.js.map +1 -0
  223. package/dist/providers/plugins/sso/sso.health.d.ts +44 -0
  224. package/dist/providers/plugins/sso/sso.health.d.ts.map +1 -0
  225. package/dist/providers/plugins/sso/sso.health.js +178 -0
  226. package/dist/providers/plugins/sso/sso.health.js.map +1 -0
  227. package/dist/{utils/codemie-model-fetcher.d.ts → providers/plugins/sso/sso.http-client.d.ts} +16 -5
  228. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -0
  229. package/dist/providers/plugins/sso/sso.http-client.js +187 -0
  230. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -0
  231. package/dist/providers/plugins/sso/sso.models.d.ts +48 -0
  232. package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -0
  233. package/dist/providers/plugins/sso/sso.models.js +139 -0
  234. package/dist/providers/plugins/sso/sso.models.js.map +1 -0
  235. package/dist/providers/plugins/sso/sso.setup-steps.d.ts +16 -0
  236. package/dist/providers/plugins/sso/sso.setup-steps.d.ts.map +1 -0
  237. package/dist/providers/plugins/sso/sso.setup-steps.js +145 -0
  238. package/dist/providers/plugins/sso/sso.setup-steps.js.map +1 -0
  239. package/dist/providers/plugins/sso/sso.template.d.ts +11 -0
  240. package/dist/providers/plugins/sso/sso.template.d.ts.map +1 -0
  241. package/dist/providers/plugins/sso/sso.template.js +35 -0
  242. package/dist/providers/plugins/sso/sso.template.js.map +1 -0
  243. package/dist/proxy/errors.d.ts.map +1 -0
  244. package/dist/proxy/errors.js.map +1 -0
  245. package/dist/proxy/http-client.d.ts.map +1 -0
  246. package/dist/{utils/proxy → proxy}/http-client.js +1 -1
  247. package/dist/proxy/http-client.js.map +1 -0
  248. package/dist/proxy/plugins/header-injection.plugin.d.ts +16 -0
  249. package/dist/proxy/plugins/header-injection.plugin.d.ts.map +1 -0
  250. package/dist/proxy/plugins/header-injection.plugin.js +52 -0
  251. package/dist/proxy/plugins/header-injection.plugin.js.map +1 -0
  252. package/dist/proxy/plugins/index.d.ts +18 -0
  253. package/dist/proxy/plugins/index.d.ts.map +1 -0
  254. package/dist/proxy/plugins/index.js +28 -0
  255. package/dist/proxy/plugins/index.js.map +1 -0
  256. package/dist/proxy/plugins/logging.plugin.d.ts +22 -0
  257. package/dist/proxy/plugins/logging.plugin.d.ts.map +1 -0
  258. package/dist/proxy/plugins/logging.plugin.js +92 -0
  259. package/dist/proxy/plugins/logging.plugin.js.map +1 -0
  260. package/dist/proxy/plugins/registry.d.ts +50 -0
  261. package/dist/proxy/plugins/registry.d.ts.map +1 -0
  262. package/dist/proxy/plugins/registry.js +124 -0
  263. package/dist/proxy/plugins/registry.js.map +1 -0
  264. package/dist/proxy/plugins/sso-auth.plugin.d.ts +16 -0
  265. package/dist/proxy/plugins/sso-auth.plugin.d.ts.map +1 -0
  266. package/dist/proxy/plugins/sso-auth.plugin.js +35 -0
  267. package/dist/proxy/plugins/sso-auth.plugin.js.map +1 -0
  268. package/dist/proxy/plugins/types.d.ts +79 -0
  269. package/dist/proxy/plugins/types.d.ts.map +1 -0
  270. package/dist/proxy/plugins/types.js +8 -0
  271. package/dist/proxy/plugins/types.js.map +1 -0
  272. package/dist/proxy/types.d.ts.map +1 -0
  273. package/dist/proxy/types.js.map +1 -0
  274. package/dist/utils/analytics-reader.js +1 -1
  275. package/dist/utils/analytics-reader.js.map +1 -1
  276. package/dist/utils/codemie-proxy.d.ts +43 -22
  277. package/dist/utils/codemie-proxy.d.ts.map +1 -1
  278. package/dist/utils/codemie-proxy.js +158 -88
  279. package/dist/utils/codemie-proxy.js.map +1 -1
  280. package/dist/utils/config-loader.d.ts +5 -6
  281. package/dist/utils/config-loader.d.ts.map +1 -1
  282. package/dist/utils/config-loader.js +72 -92
  283. package/dist/utils/config-loader.js.map +1 -1
  284. package/dist/utils/credential-store.d.ts +1 -1
  285. package/dist/utils/credential-store.d.ts.map +1 -1
  286. package/dist/utils/first-time.d.ts +0 -4
  287. package/dist/utils/first-time.d.ts.map +1 -1
  288. package/dist/utils/first-time.js +5 -117
  289. package/dist/utils/first-time.js.map +1 -1
  290. package/dist/utils/logger.d.ts +31 -1
  291. package/dist/utils/logger.d.ts.map +1 -1
  292. package/dist/utils/logger.js +111 -3
  293. package/dist/utils/logger.js.map +1 -1
  294. package/dist/utils/sanitize.d.ts +28 -0
  295. package/dist/utils/sanitize.d.ts.map +1 -0
  296. package/dist/utils/sanitize.js +213 -0
  297. package/dist/utils/sanitize.js.map +1 -0
  298. package/dist/workflows/installer.d.ts.map +1 -1
  299. package/dist/workflows/installer.js +3 -4
  300. package/dist/workflows/installer.js.map +1 -1
  301. package/package.json +1 -1
  302. package/dist/cli/commands/config.d.ts +0 -3
  303. package/dist/cli/commands/config.d.ts.map +0 -1
  304. package/dist/cli/commands/config.js +0 -198
  305. package/dist/cli/commands/config.js.map +0 -1
  306. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.d.ts +0 -11
  307. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.d.ts.map +0 -1
  308. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.js +0 -192
  309. package/dist/cli/commands/doctor/providers/AIRunSSOProviderCheck.js.map +0 -1
  310. package/dist/cli/commands/doctor/providers/BaseProviderCheck.d.ts +0 -12
  311. package/dist/cli/commands/doctor/providers/BaseProviderCheck.d.ts.map +0 -1
  312. package/dist/cli/commands/doctor/providers/BaseProviderCheck.js +0 -12
  313. package/dist/cli/commands/doctor/providers/BaseProviderCheck.js.map +0 -1
  314. package/dist/cli/commands/doctor/providers/StandardProviderCheck.d.ts +0 -11
  315. package/dist/cli/commands/doctor/providers/StandardProviderCheck.d.ts.map +0 -1
  316. package/dist/cli/commands/doctor/providers/StandardProviderCheck.js +0 -97
  317. package/dist/cli/commands/doctor/providers/StandardProviderCheck.js.map +0 -1
  318. package/dist/cli/commands/doctor/providers/index.d.ts +0 -30
  319. package/dist/cli/commands/doctor/providers/index.d.ts.map +0 -1
  320. package/dist/cli/commands/doctor/providers/index.js +0 -66
  321. package/dist/cli/commands/doctor/providers/index.js.map +0 -1
  322. package/dist/cli/commands/env.d.ts +0 -3
  323. package/dist/cli/commands/env.d.ts.map +0 -1
  324. package/dist/cli/commands/env.js +0 -19
  325. package/dist/cli/commands/env.js.map +0 -1
  326. package/dist/types/sso.d.ts +0 -42
  327. package/dist/types/sso.d.ts.map +0 -1
  328. package/dist/types/sso.js +0 -2
  329. package/dist/types/sso.js.map +0 -1
  330. package/dist/utils/async-tips.d.ts +0 -64
  331. package/dist/utils/async-tips.d.ts.map +0 -1
  332. package/dist/utils/async-tips.js +0 -203
  333. package/dist/utils/async-tips.js.map +0 -1
  334. package/dist/utils/codemie-integration-validator.d.ts +0 -18
  335. package/dist/utils/codemie-integration-validator.d.ts.map +0 -1
  336. package/dist/utils/codemie-integration-validator.js +0 -119
  337. package/dist/utils/codemie-integration-validator.js.map +0 -1
  338. package/dist/utils/codemie-model-fetcher.d.ts.map +0 -1
  339. package/dist/utils/codemie-model-fetcher.js +0 -242
  340. package/dist/utils/codemie-model-fetcher.js.map +0 -1
  341. package/dist/utils/health-checker.d.ts +0 -20
  342. package/dist/utils/health-checker.d.ts.map +0 -1
  343. package/dist/utils/health-checker.js +0 -172
  344. package/dist/utils/health-checker.js.map +0 -1
  345. package/dist/utils/model-fetcher.d.ts +0 -21
  346. package/dist/utils/model-fetcher.d.ts.map +0 -1
  347. package/dist/utils/model-fetcher.js +0 -148
  348. package/dist/utils/model-fetcher.js.map +0 -1
  349. package/dist/utils/proxy/errors.d.ts.map +0 -1
  350. package/dist/utils/proxy/errors.js.map +0 -1
  351. package/dist/utils/proxy/http-client.d.ts.map +0 -1
  352. package/dist/utils/proxy/http-client.js.map +0 -1
  353. package/dist/utils/proxy/interceptors.d.ts +0 -69
  354. package/dist/utils/proxy/interceptors.d.ts.map +0 -1
  355. package/dist/utils/proxy/interceptors.js +0 -308
  356. package/dist/utils/proxy/interceptors.js.map +0 -1
  357. package/dist/utils/proxy/types.d.ts.map +0 -1
  358. package/dist/utils/proxy/types.js.map +0 -1
  359. package/dist/utils/sso-auth.d.ts +0 -15
  360. package/dist/utils/sso-auth.d.ts.map +0 -1
  361. package/dist/utils/sso-auth.js.map +0 -1
  362. package/dist/utils/tips.d.ts +0 -35
  363. package/dist/utils/tips.d.ts.map +0 -1
  364. package/dist/utils/tips.js +0 -93
  365. package/dist/utils/tips.js.map +0 -1
  366. /package/dist/{utils/proxy → proxy}/errors.d.ts +0 -0
  367. /package/dist/{utils/proxy → proxy}/errors.js +0 -0
  368. /package/dist/{utils/proxy → proxy}/http-client.d.ts +0 -0
  369. /package/dist/{utils/proxy → proxy}/types.d.ts +0 -0
  370. /package/dist/{utils/proxy → proxy}/types.js +0 -0
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Lock Manager - File-Based Locking for Concurrency Control
3
+ *
4
+ * Implements file-based locking to ensure only one RemoteAnalyticsSubmitter
5
+ * runs at a time across multiple concurrent proxy instances.
6
+ *
7
+ * Features:
8
+ * - Exclusive lock acquisition with retries
9
+ * - Stale lock detection and recovery
10
+ * - Process liveness checking
11
+ * - Heartbeat to prevent false stale detection
12
+ * - Graceful cleanup on exit signals
13
+ */
14
+ /**
15
+ * Lock Manager
16
+ */
17
+ export declare class LockManager {
18
+ private lockPath;
19
+ private lockInfo;
20
+ private heartbeatTimer;
21
+ constructor(analyticsDir?: string);
22
+ /**
23
+ * Ensure analytics directory exists
24
+ */
25
+ private ensureDir;
26
+ /**
27
+ * Check if a process is alive
28
+ */
29
+ private isProcessAlive;
30
+ /**
31
+ * Read lock file
32
+ */
33
+ private readLock;
34
+ /**
35
+ * Write lock file
36
+ */
37
+ private writeLock;
38
+ /**
39
+ * Remove lock file
40
+ */
41
+ private removeLock;
42
+ /**
43
+ * Check if lock is stale (old or process dead)
44
+ */
45
+ private isLockStale;
46
+ /**
47
+ * Start heartbeat to refresh lock timestamp
48
+ */
49
+ private startHeartbeat;
50
+ /**
51
+ * Stop heartbeat
52
+ */
53
+ private stopHeartbeat;
54
+ /**
55
+ * Acquire lock with retry
56
+ *
57
+ * @param name Lock name (for logging)
58
+ * @param maxRetries Maximum number of retries
59
+ * @returns true if lock acquired, false if failed
60
+ */
61
+ acquire(name: string, maxRetries?: number): Promise<boolean>;
62
+ /**
63
+ * Release lock
64
+ */
65
+ release(): Promise<void>;
66
+ /**
67
+ * Setup exit handlers to release lock on process termination
68
+ */
69
+ private setupExitHandlers;
70
+ }
71
+ //# sourceMappingURL=lock-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-manager.d.ts","sourceRoot":"","sources":["../../../src/analytics/remote-submission/lock-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,cAAc,CAA+B;gBAEzC,YAAY,CAAC,EAAE,MAAM;IAKjC;;OAEG;YACW,SAAS;IAOvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;YACW,QAAQ;IActB;;OAEG;YACW,SAAS;IAMvB;;OAEG;YACW,UAAU;IAUxB;;OAEG;YACW,WAAW;IAezB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgBtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE7D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAU1B"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Lock Manager - File-Based Locking for Concurrency Control
3
+ *
4
+ * Implements file-based locking to ensure only one RemoteAnalyticsSubmitter
5
+ * runs at a time across multiple concurrent proxy instances.
6
+ *
7
+ * Features:
8
+ * - Exclusive lock acquisition with retries
9
+ * - Stale lock detection and recovery
10
+ * - Process liveness checking
11
+ * - Heartbeat to prevent false stale detection
12
+ * - Graceful cleanup on exit signals
13
+ */
14
+ import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises';
15
+ import { existsSync } from 'node:fs';
16
+ import { join } from 'node:path';
17
+ import { homedir, hostname } from 'node:os';
18
+ import { logger } from '../../utils/logger.js';
19
+ const LOCK_TIMEOUT = 5 * 60 * 1000; // 5 minutes
20
+ const RETRY_DELAY = 2000; // 2 seconds
21
+ const HEARTBEAT_INTERVAL = 30 * 1000; // 30 seconds
22
+ /**
23
+ * Lock Manager
24
+ */
25
+ export class LockManager {
26
+ lockPath;
27
+ lockInfo = null;
28
+ heartbeatTimer = null;
29
+ constructor(analyticsDir) {
30
+ const baseDir = analyticsDir || join(homedir(), '.codemie', 'analytics');
31
+ this.lockPath = join(baseDir, '.lock');
32
+ }
33
+ /**
34
+ * Ensure analytics directory exists
35
+ */
36
+ async ensureDir() {
37
+ const dir = join(this.lockPath, '..');
38
+ if (!existsSync(dir)) {
39
+ await mkdir(dir, { recursive: true });
40
+ }
41
+ }
42
+ /**
43
+ * Check if a process is alive
44
+ */
45
+ isProcessAlive(pid) {
46
+ try {
47
+ // kill(pid, 0) doesn't actually kill, just checks if process exists
48
+ process.kill(pid, 0);
49
+ return true;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ /**
56
+ * Read lock file
57
+ */
58
+ async readLock() {
59
+ if (!existsSync(this.lockPath)) {
60
+ return null;
61
+ }
62
+ try {
63
+ const content = await readFile(this.lockPath, 'utf-8');
64
+ return JSON.parse(content);
65
+ }
66
+ catch (error) {
67
+ logger.debug(`Failed to read lock file: ${error}`);
68
+ return null;
69
+ }
70
+ }
71
+ /**
72
+ * Write lock file
73
+ */
74
+ async writeLock(lockInfo) {
75
+ await this.ensureDir();
76
+ const content = JSON.stringify(lockInfo, null, 2);
77
+ await writeFile(this.lockPath, content, 'utf-8');
78
+ }
79
+ /**
80
+ * Remove lock file
81
+ */
82
+ async removeLock() {
83
+ if (existsSync(this.lockPath)) {
84
+ try {
85
+ await unlink(this.lockPath);
86
+ }
87
+ catch (error) {
88
+ logger.debug(`Failed to remove lock: ${error}`);
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * Check if lock is stale (old or process dead)
94
+ */
95
+ async isLockStale(lockInfo) {
96
+ // Check age
97
+ const age = Date.now() - new Date(lockInfo.timestamp).getTime();
98
+ if (age > LOCK_TIMEOUT) {
99
+ return true;
100
+ }
101
+ // Check if process is alive
102
+ if (!this.isProcessAlive(lockInfo.pid)) {
103
+ return true;
104
+ }
105
+ return false;
106
+ }
107
+ /**
108
+ * Start heartbeat to refresh lock timestamp
109
+ */
110
+ startHeartbeat() {
111
+ this.heartbeatTimer = setInterval(async () => {
112
+ if (this.lockInfo) {
113
+ this.lockInfo.timestamp = new Date().toISOString();
114
+ try {
115
+ await this.writeLock(this.lockInfo);
116
+ }
117
+ catch (error) {
118
+ logger.debug(`Heartbeat failed: ${error}`);
119
+ }
120
+ }
121
+ }, HEARTBEAT_INTERVAL);
122
+ // Ensure heartbeat doesn't prevent process exit
123
+ this.heartbeatTimer.unref();
124
+ }
125
+ /**
126
+ * Stop heartbeat
127
+ */
128
+ stopHeartbeat() {
129
+ if (this.heartbeatTimer) {
130
+ clearInterval(this.heartbeatTimer);
131
+ this.heartbeatTimer = null;
132
+ }
133
+ }
134
+ /**
135
+ * Acquire lock with retry
136
+ *
137
+ * @param name Lock name (for logging)
138
+ * @param maxRetries Maximum number of retries
139
+ * @returns true if lock acquired, false if failed
140
+ */
141
+ async acquire(name, maxRetries = 3) {
142
+ let attempts = 0;
143
+ while (attempts < maxRetries) {
144
+ attempts++;
145
+ // Check existing lock
146
+ const existingLock = await this.readLock();
147
+ if (existingLock) {
148
+ // Check if stale
149
+ if (await this.isLockStale(existingLock)) {
150
+ logger.debug(`Removing stale lock from ${existingLock.agent} (PID ${existingLock.pid})`);
151
+ await this.removeLock();
152
+ }
153
+ else {
154
+ // Lock is valid, wait and retry
155
+ if (attempts < maxRetries) {
156
+ logger.debug(`Lock held by ${existingLock.agent} (PID ${existingLock.pid}), ` +
157
+ `waiting ${RETRY_DELAY}ms (attempt ${attempts}/${maxRetries})`);
158
+ await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
159
+ continue;
160
+ }
161
+ else {
162
+ logger.debug(`Could not acquire lock after ${maxRetries} attempts`);
163
+ return false;
164
+ }
165
+ }
166
+ }
167
+ // Try to acquire lock
168
+ this.lockInfo = {
169
+ pid: process.pid,
170
+ timestamp: new Date().toISOString(),
171
+ hostname: hostname(),
172
+ agent: name
173
+ };
174
+ try {
175
+ await this.writeLock(this.lockInfo);
176
+ // Verify we own the lock (race condition check)
177
+ const verifyLock = await this.readLock();
178
+ if (verifyLock?.pid === process.pid) {
179
+ logger.debug(`Lock acquired by ${name} (PID ${process.pid})`);
180
+ this.startHeartbeat();
181
+ this.setupExitHandlers();
182
+ return true;
183
+ }
184
+ else {
185
+ // Someone else got the lock first
186
+ this.lockInfo = null;
187
+ if (attempts < maxRetries) {
188
+ await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
189
+ continue;
190
+ }
191
+ else {
192
+ return false;
193
+ }
194
+ }
195
+ }
196
+ catch (error) {
197
+ logger.debug(`Failed to acquire lock: ${error}`);
198
+ this.lockInfo = null;
199
+ if (attempts < maxRetries) {
200
+ await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
201
+ continue;
202
+ }
203
+ else {
204
+ return false;
205
+ }
206
+ }
207
+ }
208
+ return false;
209
+ }
210
+ /**
211
+ * Release lock
212
+ */
213
+ async release() {
214
+ this.stopHeartbeat();
215
+ if (this.lockInfo) {
216
+ // Verify we still own the lock
217
+ const currentLock = await this.readLock();
218
+ if (currentLock?.pid === process.pid) {
219
+ await this.removeLock();
220
+ logger.debug(`Lock released by ${this.lockInfo.agent} (PID ${process.pid})`);
221
+ }
222
+ this.lockInfo = null;
223
+ }
224
+ }
225
+ /**
226
+ * Setup exit handlers to release lock on process termination
227
+ */
228
+ setupExitHandlers() {
229
+ const cleanup = async () => {
230
+ await this.release();
231
+ };
232
+ // Handle various exit signals
233
+ process.once('SIGINT', cleanup);
234
+ process.once('SIGTERM', cleanup);
235
+ process.once('exit', cleanup);
236
+ }
237
+ }
238
+ //# sourceMappingURL=lock-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock-manager.js","sourceRoot":"","sources":["../../../src/analytics/remote-submission/lock-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Metric Transformer - Backend-Aligned Pattern
3
+ *
4
+ * Transforms CodemieSession raw events into backend-aligned metric payloads
5
+ * generating only session-level aggregation metrics:
6
+ * - codemie_coding_agent_usage_total (session aggregation)
7
+ */
8
+ import type { CodemieSession, CodemieMessage, CodemieToolCall, CodemieFileModification } from '../aggregation/types.js';
9
+ import type { MetricPayload } from './types.js';
10
+ /**
11
+ * Create session aggregation metric
12
+ * Only called when session ends (explicit endTime or timeout)
13
+ */
14
+ export declare function createSessionMetric(session: CodemieSession, rawData: {
15
+ messages: CodemieMessage[];
16
+ toolCalls: CodemieToolCall[];
17
+ fileModifications: CodemieFileModification[];
18
+ }, options: {
19
+ exitReason: string;
20
+ }): MetricPayload;
21
+ //# sourceMappingURL=metric-transformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-transformer.d.ts","sourceRoot":"","sources":["../../../src/analytics/remote-submission/metric-transformer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,uBAAuB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,aAAa,EAEd,MAAM,YAAY,CAAC;AA+BpB;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE;IACP,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,iBAAiB,EAAE,uBAAuB,EAAE,CAAC;CAC9C,EACD,OAAO,EAAE;IACP,UAAU,EAAE,MAAM,CAAC;CACpB,GACA,aAAa,CAoDf"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Metric Transformer - Backend-Aligned Pattern
3
+ *
4
+ * Transforms CodemieSession raw events into backend-aligned metric payloads
5
+ * generating only session-level aggregation metrics:
6
+ * - codemie_coding_agent_usage_total (session aggregation)
7
+ */
8
+ import { sep } from 'node:path';
9
+ /**
10
+ * Helper: Normalize project path to relative format (cross-platform)
11
+ * "/Users/John_Doe/repos/codemie-ai/codemie-code" -> "codemie-ai/codemie-code"
12
+ * "C:\Users\John_Doe\repos\codemie-ai\codemie-code" -> "codemie-ai/codemie-code"
13
+ */
14
+ function normalizeProjectPath(fullPath) {
15
+ // Split by platform-specific separator
16
+ const parts = fullPath.split(sep);
17
+ // Get last 2 parts (organization/project) and join with forward slash
18
+ return parts.slice(-2).join('/');
19
+ }
20
+ /**
21
+ * Helper: Estimate API requests from messages
22
+ * Heuristic: Usually 1-2 API calls per assistant message
23
+ */
24
+ function estimateAPIRequests(session) {
25
+ return Math.ceil(session.assistantMessageCount * 1.5);
26
+ }
27
+ /**
28
+ * Helper: Calculate total execution time from tool calls
29
+ */
30
+ function calculateTotalExecutionTime(toolCalls) {
31
+ return toolCalls.reduce((sum, tc) => sum + (tc.durationMs || 0), 0);
32
+ }
33
+ /**
34
+ * Create session aggregation metric
35
+ * Only called when session ends (explicit endTime or timeout)
36
+ */
37
+ export function createSessionMetric(session, rawData, options) {
38
+ const sessionAttributes = {
39
+ // Base context (no tool_type for session metric)
40
+ agent: session.agent,
41
+ agent_version: session.agentVersion,
42
+ llm_model: session.model,
43
+ project: normalizeProjectPath(session.projectPath),
44
+ session_id: session.sessionId,
45
+ // Context (only include if available)
46
+ ...(session.projectHash && { projectHash: session.projectHash }),
47
+ ...(session.gitBranch && { gitBranch: session.gitBranch }),
48
+ ...(session.gitCommit && { gitCommit: session.gitCommit }),
49
+ // Interaction tracking
50
+ total_user_prompts: session.userPromptCount,
51
+ total_ai_requests: estimateAPIRequests(session),
52
+ total_ai_responses: session.assistantMessageCount,
53
+ total_tool_calls: session.toolCallCount,
54
+ successful_tool_calls: session.successfulToolCalls,
55
+ failed_tool_calls: session.failedToolCalls,
56
+ // Token totals
57
+ total_input_tokens: session.tokens.input,
58
+ total_output_tokens: session.tokens.output,
59
+ total_cache_read_input_tokens: session.tokens.cacheRead,
60
+ // Code totals
61
+ files_created: session.fileStats?.filesCreated || 0,
62
+ files_modified: session.fileStats?.filesModified || 0,
63
+ files_deleted: session.fileStats?.filesDeleted || 0,
64
+ total_lines_added: session.fileStats?.totalLinesAdded || 0,
65
+ total_lines_removed: session.fileStats?.totalLinesRemoved || 0,
66
+ // Performance
67
+ session_duration_ms: session.durationMs || 0,
68
+ ...(rawData.toolCalls.some(tc => tc.durationMs) && {
69
+ total_execution_time: calculateTotalExecutionTime(rawData.toolCalls)
70
+ }),
71
+ // Status
72
+ exit_reason: options.exitReason,
73
+ had_errors: session.hadErrors,
74
+ count: 1,
75
+ };
76
+ return {
77
+ metric_name: 'codemie_coding_agent_usage_total',
78
+ attributes: sessionAttributes,
79
+ time: (session.endTime || new Date()).toISOString(),
80
+ };
81
+ }
82
+ //# sourceMappingURL=metric-transformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-transformer.js","sourceRoot":"","sources":["../../../src/analytics/remote-submission/metric-transformer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Remote Analytics Submitter
3
+ *
4
+ * Orchestrates periodic submission of analytics metrics to /v1/metrics endpoint.
5
+ * Handles event-level tracking, concurrency control, and backend-aligned metrics.
6
+ *
7
+ * Key Features:
8
+ * - 5-minute submission interval
9
+ * - Event-level tracking (message IDs, tool call IDs)
10
+ * - Multi-terminal safety via file locking
11
+ * - Inactivity-based session end detection
12
+ * - Backend-aligned metric transformation (3+1 pattern)
13
+ */
14
+ import type { RemoteSubmissionConfig } from './types.js';
15
+ /**
16
+ * Remote Analytics Submitter
17
+ */
18
+ export declare class RemoteAnalyticsSubmitter {
19
+ private config;
20
+ private cursorManager;
21
+ private lockManager;
22
+ private intervalTimer;
23
+ private isRunning;
24
+ constructor(config: RemoteSubmissionConfig);
25
+ /**
26
+ * Start periodic submission
27
+ */
28
+ start(): void;
29
+ /**
30
+ * Stop periodic submission
31
+ */
32
+ stop(): void;
33
+ /**
34
+ * Main submission cycle
35
+ */
36
+ private submitCycle;
37
+ /**
38
+ * Process all external agents
39
+ */
40
+ private processExternalAgents;
41
+ /**
42
+ * Process single agent
43
+ */
44
+ private processAgent;
45
+ /**
46
+ * Process single session
47
+ */
48
+ private processSession;
49
+ /**
50
+ * Determine session status based on activity
51
+ */
52
+ private determineSessionStatus;
53
+ /**
54
+ * Get last activity time from session
55
+ */
56
+ private getLastActivityTime;
57
+ /**
58
+ * Maybe submit session metric based on status
59
+ */
60
+ private maybeSubmitSessionMetric;
61
+ /**
62
+ * Submit batch of metrics - writes to local file and/or remote endpoint
63
+ */
64
+ private submitBatch;
65
+ /**
66
+ * Write metrics to local JSONL file
67
+ */
68
+ private writeMetricsToLocalFile;
69
+ /**
70
+ * Submit metrics to remote /v1/metrics endpoint
71
+ * Note: Caller should verify baseUrl and cookies are set before calling
72
+ */
73
+ private submitToRemote;
74
+ /**
75
+ * Create batches from metrics
76
+ */
77
+ private createBatches;
78
+ }
79
+ //# sourceMappingURL=submitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submitter.d.ts","sourceRoot":"","sources":["../../../src/analytics/remote-submission/submitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,KAAK,EACV,sBAAsB,EAIvB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,sBAAsB;IAM1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAuBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;YACW,WAAW;IAsCzB;;OAEG;YACW,qBAAqB;IA4BnC;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,cAAc;IAyF5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkC9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;YACW,wBAAwB;IAgDtC;;OAEG;YACW,WAAW;IAiBzB;;OAEG;YACW,uBAAuB;IAyBrC;;;OAGG;YACW,cAAc;IA2B5B;;OAEG;IACH,OAAO,CAAC,aAAa;CAOtB"}