@mesrai/cli 0.4.21

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 (629) hide show
  1. package/README.md +670 -0
  2. package/dist/agents/agent.interface.d.ts +41 -0
  3. package/dist/agents/agent.interface.d.ts.map +1 -0
  4. package/dist/agents/agent.interface.js +2 -0
  5. package/dist/agents/agent.interface.js.map +1 -0
  6. package/dist/agents/claude-code.agent.d.ts +14 -0
  7. package/dist/agents/claude-code.agent.d.ts.map +1 -0
  8. package/dist/agents/claude-code.agent.js +90 -0
  9. package/dist/agents/claude-code.agent.js.map +1 -0
  10. package/dist/agents/codex.agent.d.ts +14 -0
  11. package/dist/agents/codex.agent.d.ts.map +1 -0
  12. package/dist/agents/codex.agent.js +77 -0
  13. package/dist/agents/codex.agent.js.map +1 -0
  14. package/dist/agents/cursor.agent.d.ts +29 -0
  15. package/dist/agents/cursor.agent.d.ts.map +1 -0
  16. package/dist/agents/cursor.agent.js +85 -0
  17. package/dist/agents/cursor.agent.js.map +1 -0
  18. package/dist/cli.d.ts +4 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +60 -0
  21. package/dist/cli.js.map +1 -0
  22. package/dist/commands/auth/index.d.ts +3 -0
  23. package/dist/commands/auth/index.d.ts.map +1 -0
  24. package/dist/commands/auth/index.js +37 -0
  25. package/dist/commands/auth/index.js.map +1 -0
  26. package/dist/commands/auth/login.d.ts +11 -0
  27. package/dist/commands/auth/login.d.ts.map +1 -0
  28. package/dist/commands/auth/login.js +158 -0
  29. package/dist/commands/auth/login.js.map +1 -0
  30. package/dist/commands/auth/logout.d.ts +2 -0
  31. package/dist/commands/auth/logout.d.ts.map +1 -0
  32. package/dist/commands/auth/logout.js +26 -0
  33. package/dist/commands/auth/logout.js.map +1 -0
  34. package/dist/commands/auth/status.d.ts +2 -0
  35. package/dist/commands/auth/status.d.ts.map +1 -0
  36. package/dist/commands/auth/status.js +82 -0
  37. package/dist/commands/auth/status.js.map +1 -0
  38. package/dist/commands/auth/team-key.d.ts +5 -0
  39. package/dist/commands/auth/team-key.d.ts.map +1 -0
  40. package/dist/commands/auth/team-key.js +112 -0
  41. package/dist/commands/auth/team-key.js.map +1 -0
  42. package/dist/commands/auth/token.d.ts +2 -0
  43. package/dist/commands/auth/token.d.ts.map +1 -0
  44. package/dist/commands/auth/token.js +33 -0
  45. package/dist/commands/auth/token.js.map +1 -0
  46. package/dist/commands/config.d.ts +5 -0
  47. package/dist/commands/config.d.ts.map +1 -0
  48. package/dist/commands/config.js +26 -0
  49. package/dist/commands/config.js.map +1 -0
  50. package/dist/commands/diff.d.ts +3 -0
  51. package/dist/commands/diff.d.ts.map +1 -0
  52. package/dist/commands/diff.js +23 -0
  53. package/dist/commands/diff.js.map +1 -0
  54. package/dist/commands/hook/index.d.ts +3 -0
  55. package/dist/commands/hook/index.d.ts.map +1 -0
  56. package/dist/commands/hook/index.js +24 -0
  57. package/dist/commands/hook/index.js.map +1 -0
  58. package/dist/commands/hook/install.d.ts +11 -0
  59. package/dist/commands/hook/install.d.ts.map +1 -0
  60. package/dist/commands/hook/install.js +149 -0
  61. package/dist/commands/hook/install.js.map +1 -0
  62. package/dist/commands/hook/status.d.ts +2 -0
  63. package/dist/commands/hook/status.d.ts.map +1 -0
  64. package/dist/commands/hook/status.js +36 -0
  65. package/dist/commands/hook/status.js.map +1 -0
  66. package/dist/commands/hook/uninstall.d.ts +5 -0
  67. package/dist/commands/hook/uninstall.d.ts.map +1 -0
  68. package/dist/commands/hook/uninstall.js +66 -0
  69. package/dist/commands/hook/uninstall.js.map +1 -0
  70. package/dist/commands/memory/capture.d.ts +8 -0
  71. package/dist/commands/memory/capture.d.ts.map +1 -0
  72. package/dist/commands/memory/capture.js +124 -0
  73. package/dist/commands/memory/capture.js.map +1 -0
  74. package/dist/commands/memory/disable.d.ts +5 -0
  75. package/dist/commands/memory/disable.d.ts.map +1 -0
  76. package/dist/commands/memory/disable.js +67 -0
  77. package/dist/commands/memory/disable.js.map +1 -0
  78. package/dist/commands/memory/enable.d.ts +7 -0
  79. package/dist/commands/memory/enable.d.ts.map +1 -0
  80. package/dist/commands/memory/enable.js +74 -0
  81. package/dist/commands/memory/enable.js.map +1 -0
  82. package/dist/commands/memory/hooks.d.ts +31 -0
  83. package/dist/commands/memory/hooks.d.ts.map +1 -0
  84. package/dist/commands/memory/hooks.js +283 -0
  85. package/dist/commands/memory/hooks.js.map +1 -0
  86. package/dist/commands/memory/index.d.ts +3 -0
  87. package/dist/commands/memory/index.d.ts.map +1 -0
  88. package/dist/commands/memory/index.js +36 -0
  89. package/dist/commands/memory/index.js.map +1 -0
  90. package/dist/commands/memory/session-hooks/claude-code.d.ts +2 -0
  91. package/dist/commands/memory/session-hooks/claude-code.d.ts.map +1 -0
  92. package/dist/commands/memory/session-hooks/claude-code.js +24 -0
  93. package/dist/commands/memory/session-hooks/claude-code.js.map +1 -0
  94. package/dist/commands/memory/session-hooks/codex.d.ts +2 -0
  95. package/dist/commands/memory/session-hooks/codex.d.ts.map +1 -0
  96. package/dist/commands/memory/session-hooks/codex.js +16 -0
  97. package/dist/commands/memory/session-hooks/codex.js.map +1 -0
  98. package/dist/commands/memory/session-hooks/cursor.d.ts +2 -0
  99. package/dist/commands/memory/session-hooks/cursor.d.ts.map +1 -0
  100. package/dist/commands/memory/session-hooks/cursor.js +20 -0
  101. package/dist/commands/memory/session-hooks/cursor.js.map +1 -0
  102. package/dist/commands/memory/session-hooks/index.d.ts +3 -0
  103. package/dist/commands/memory/session-hooks/index.d.ts.map +1 -0
  104. package/dist/commands/memory/session-hooks/index.js +21 -0
  105. package/dist/commands/memory/session-hooks/index.js.map +1 -0
  106. package/dist/commands/memory/session-hooks/shared.d.ts +7 -0
  107. package/dist/commands/memory/session-hooks/shared.d.ts.map +1 -0
  108. package/dist/commands/memory/session-hooks/shared.js +52 -0
  109. package/dist/commands/memory/session-hooks/shared.js.map +1 -0
  110. package/dist/commands/memory/session-hooks-install-codex.d.ts +19 -0
  111. package/dist/commands/memory/session-hooks-install-codex.d.ts.map +1 -0
  112. package/dist/commands/memory/session-hooks-install-codex.js +91 -0
  113. package/dist/commands/memory/session-hooks-install-codex.js.map +1 -0
  114. package/dist/commands/memory/session-hooks-install-cursor.d.ts +9 -0
  115. package/dist/commands/memory/session-hooks-install-cursor.d.ts.map +1 -0
  116. package/dist/commands/memory/session-hooks-install-cursor.js +119 -0
  117. package/dist/commands/memory/session-hooks-install-cursor.js.map +1 -0
  118. package/dist/commands/memory/session-hooks-install.d.ts +9 -0
  119. package/dist/commands/memory/session-hooks-install.d.ts.map +1 -0
  120. package/dist/commands/memory/session-hooks-install.js +173 -0
  121. package/dist/commands/memory/session-hooks-install.js.map +1 -0
  122. package/dist/commands/pr.d.ts +2 -0
  123. package/dist/commands/pr.d.ts.map +1 -0
  124. package/dist/commands/pr.js +2 -0
  125. package/dist/commands/pr.js.map +1 -0
  126. package/dist/commands/review.d.ts +2 -0
  127. package/dist/commands/review.d.ts.map +1 -0
  128. package/dist/commands/review.js +2 -0
  129. package/dist/commands/review.js.map +1 -0
  130. package/dist/commands/rules.d.ts +31 -0
  131. package/dist/commands/rules.d.ts.map +1 -0
  132. package/dist/commands/rules.js +159 -0
  133. package/dist/commands/rules.js.map +1 -0
  134. package/dist/commands/schema.d.ts +3 -0
  135. package/dist/commands/schema.d.ts.map +1 -0
  136. package/dist/commands/schema.js +62 -0
  137. package/dist/commands/schema.js.map +1 -0
  138. package/dist/commands/skills.d.ts +3 -0
  139. package/dist/commands/skills.d.ts.map +1 -0
  140. package/dist/commands/skills.js +85 -0
  141. package/dist/commands/skills.js.map +1 -0
  142. package/dist/commands/status.d.ts +3 -0
  143. package/dist/commands/status.d.ts.map +1 -0
  144. package/dist/commands/status.js +99 -0
  145. package/dist/commands/status.js.map +1 -0
  146. package/dist/commands/subscribe.d.ts +4 -0
  147. package/dist/commands/subscribe.d.ts.map +1 -0
  148. package/dist/commands/subscribe.js +25 -0
  149. package/dist/commands/subscribe.js.map +1 -0
  150. package/dist/commands/update.d.ts +10 -0
  151. package/dist/commands/update.d.ts.map +1 -0
  152. package/dist/commands/update.js +112 -0
  153. package/dist/commands/update.js.map +1 -0
  154. package/dist/constants.d.ts +3 -0
  155. package/dist/constants.d.ts.map +1 -0
  156. package/dist/constants.js +6 -0
  157. package/dist/constants.js.map +1 -0
  158. package/dist/features/centralized-config/actions.d.ts +20 -0
  159. package/dist/features/centralized-config/actions.d.ts.map +1 -0
  160. package/dist/features/centralized-config/actions.js +114 -0
  161. package/dist/features/centralized-config/actions.js.map +1 -0
  162. package/dist/features/centralized-config/command.d.ts +4 -0
  163. package/dist/features/centralized-config/command.d.ts.map +1 -0
  164. package/dist/features/centralized-config/command.js +43 -0
  165. package/dist/features/centralized-config/command.js.map +1 -0
  166. package/dist/features/pr/command.d.ts +4 -0
  167. package/dist/features/pr/command.d.ts.map +1 -0
  168. package/dist/features/pr/command.js +222 -0
  169. package/dist/features/pr/command.js.map +1 -0
  170. package/dist/features/repo-config/actions.d.ts +33 -0
  171. package/dist/features/repo-config/actions.d.ts.map +1 -0
  172. package/dist/features/repo-config/actions.js +271 -0
  173. package/dist/features/repo-config/actions.js.map +1 -0
  174. package/dist/features/repo-config/command.d.ts +15 -0
  175. package/dist/features/repo-config/command.d.ts.map +1 -0
  176. package/dist/features/repo-config/command.js +135 -0
  177. package/dist/features/repo-config/command.js.map +1 -0
  178. package/dist/features/review/command.d.ts +4 -0
  179. package/dist/features/review/command.d.ts.map +1 -0
  180. package/dist/features/review/command.js +404 -0
  181. package/dist/features/review/command.js.map +1 -0
  182. package/dist/features/review/diff.d.ts +23 -0
  183. package/dist/features/review/diff.d.ts.map +1 -0
  184. package/dist/features/review/diff.js +47 -0
  185. package/dist/features/review/diff.js.map +1 -0
  186. package/dist/features/review/errors.d.ts +3 -0
  187. package/dist/features/review/errors.d.ts.map +1 -0
  188. package/dist/features/review/errors.js +26 -0
  189. package/dist/features/review/errors.js.map +1 -0
  190. package/dist/features/review/hunk-context.d.ts +25 -0
  191. package/dist/features/review/hunk-context.d.ts.map +1 -0
  192. package/dist/features/review/hunk-context.js +158 -0
  193. package/dist/features/review/hunk-context.js.map +1 -0
  194. package/dist/features/review/hunk-viewer.d.ts +25 -0
  195. package/dist/features/review/hunk-viewer.d.ts.map +1 -0
  196. package/dist/features/review/hunk-viewer.js +59 -0
  197. package/dist/features/review/hunk-viewer.js.map +1 -0
  198. package/dist/features/review/no-changes.d.ts +6 -0
  199. package/dist/features/review/no-changes.d.ts.map +1 -0
  200. package/dist/features/review/no-changes.js +31 -0
  201. package/dist/features/review/no-changes.js.map +1 -0
  202. package/dist/features/review/options.d.ts +7 -0
  203. package/dist/features/review/options.d.ts.map +1 -0
  204. package/dist/features/review/options.js +18 -0
  205. package/dist/features/review/options.js.map +1 -0
  206. package/dist/features/review/result.d.ts +40 -0
  207. package/dist/features/review/result.d.ts.map +1 -0
  208. package/dist/features/review/result.js +95 -0
  209. package/dist/features/review/result.js.map +1 -0
  210. package/dist/formatters/json.d.ts +7 -0
  211. package/dist/formatters/json.d.ts.map +1 -0
  212. package/dist/formatters/json.js +7 -0
  213. package/dist/formatters/json.js.map +1 -0
  214. package/dist/formatters/markdown.d.ts +7 -0
  215. package/dist/formatters/markdown.d.ts.map +1 -0
  216. package/dist/formatters/markdown.js +93 -0
  217. package/dist/formatters/markdown.js.map +1 -0
  218. package/dist/formatters/prompt.d.ts +12 -0
  219. package/dist/formatters/prompt.d.ts.map +1 -0
  220. package/dist/formatters/prompt.js +90 -0
  221. package/dist/formatters/prompt.js.map +1 -0
  222. package/dist/formatters/repo-config.d.ts +7 -0
  223. package/dist/formatters/repo-config.d.ts.map +1 -0
  224. package/dist/formatters/repo-config.js +99 -0
  225. package/dist/formatters/repo-config.js.map +1 -0
  226. package/dist/formatters/terminal.d.ts +7 -0
  227. package/dist/formatters/terminal.d.ts.map +1 -0
  228. package/dist/formatters/terminal.js +130 -0
  229. package/dist/formatters/terminal.js.map +1 -0
  230. package/dist/index.d.ts +3 -0
  231. package/dist/index.d.ts.map +1 -0
  232. package/dist/index.js +51 -0
  233. package/dist/index.js.map +1 -0
  234. package/dist/services/api/api-core.d.ts +27 -0
  235. package/dist/services/api/api-core.d.ts.map +1 -0
  236. package/dist/services/api/api-core.js +451 -0
  237. package/dist/services/api/api-core.js.map +1 -0
  238. package/dist/services/api/api.interface.d.ts +101 -0
  239. package/dist/services/api/api.interface.d.ts.map +1 -0
  240. package/dist/services/api/api.interface.js +2 -0
  241. package/dist/services/api/api.interface.js.map +1 -0
  242. package/dist/services/api/api.real.d.ts +19 -0
  243. package/dist/services/api/api.real.d.ts.map +1 -0
  244. package/dist/services/api/api.real.js +20 -0
  245. package/dist/services/api/api.real.js.map +1 -0
  246. package/dist/services/api/auth.api.d.ts +17 -0
  247. package/dist/services/api/auth.api.d.ts.map +1 -0
  248. package/dist/services/api/auth.api.js +73 -0
  249. package/dist/services/api/auth.api.js.map +1 -0
  250. package/dist/services/api/cli-auth.api.d.ts +29 -0
  251. package/dist/services/api/cli-auth.api.d.ts.map +1 -0
  252. package/dist/services/api/cli-auth.api.js +23 -0
  253. package/dist/services/api/cli-auth.api.js.map +1 -0
  254. package/dist/services/api/config.api.d.ts +34 -0
  255. package/dist/services/api/config.api.d.ts.map +1 -0
  256. package/dist/services/api/config.api.js +108 -0
  257. package/dist/services/api/config.api.js.map +1 -0
  258. package/dist/services/api/index.d.ts +4 -0
  259. package/dist/services/api/index.d.ts.map +1 -0
  260. package/dist/services/api/index.js +3 -0
  261. package/dist/services/api/index.js.map +1 -0
  262. package/dist/services/api/memory.api.d.ts +10 -0
  263. package/dist/services/api/memory.api.d.ts.map +1 -0
  264. package/dist/services/api/memory.api.js +19 -0
  265. package/dist/services/api/memory.api.js.map +1 -0
  266. package/dist/services/api/review.api.d.ts +27 -0
  267. package/dist/services/api/review.api.d.ts.map +1 -0
  268. package/dist/services/api/review.api.js +140 -0
  269. package/dist/services/api/review.api.js.map +1 -0
  270. package/dist/services/api/rules.api.d.ts +13 -0
  271. package/dist/services/api/rules.api.d.ts.map +1 -0
  272. package/dist/services/api/rules.api.js +41 -0
  273. package/dist/services/api/rules.api.js.map +1 -0
  274. package/dist/services/api/sessions.api.d.ts +6 -0
  275. package/dist/services/api/sessions.api.d.ts.map +1 -0
  276. package/dist/services/api/sessions.api.js +129 -0
  277. package/dist/services/api/sessions.api.js.map +1 -0
  278. package/dist/services/api/trial.api.d.ts +10 -0
  279. package/dist/services/api/trial.api.d.ts.map +1 -0
  280. package/dist/services/api/trial.api.js +11 -0
  281. package/dist/services/api/trial.api.js.map +1 -0
  282. package/dist/services/auth.service.d.ts +29 -0
  283. package/dist/services/auth.service.d.ts.map +1 -0
  284. package/dist/services/auth.service.js +190 -0
  285. package/dist/services/auth.service.js.map +1 -0
  286. package/dist/services/browser-login.service.d.ts +23 -0
  287. package/dist/services/browser-login.service.d.ts.map +1 -0
  288. package/dist/services/browser-login.service.js +187 -0
  289. package/dist/services/browser-login.service.js.map +1 -0
  290. package/dist/services/centralized-config.service.d.ts +24 -0
  291. package/dist/services/centralized-config.service.d.ts.map +1 -0
  292. package/dist/services/centralized-config.service.js +112 -0
  293. package/dist/services/centralized-config.service.js.map +1 -0
  294. package/dist/services/context.service.d.ts +25 -0
  295. package/dist/services/context.service.d.ts.map +1 -0
  296. package/dist/services/context.service.js +134 -0
  297. package/dist/services/context.service.js.map +1 -0
  298. package/dist/services/device-login.service.d.ts +23 -0
  299. package/dist/services/device-login.service.d.ts.map +1 -0
  300. package/dist/services/device-login.service.js +70 -0
  301. package/dist/services/device-login.service.js.map +1 -0
  302. package/dist/services/fix.service.d.ts +31 -0
  303. package/dist/services/fix.service.d.ts.map +1 -0
  304. package/dist/services/fix.service.js +121 -0
  305. package/dist/services/fix.service.js.map +1 -0
  306. package/dist/services/git-hooks.service.d.ts +20 -0
  307. package/dist/services/git-hooks.service.d.ts.map +1 -0
  308. package/dist/services/git-hooks.service.js +126 -0
  309. package/dist/services/git-hooks.service.js.map +1 -0
  310. package/dist/services/git.service.d.ts +44 -0
  311. package/dist/services/git.service.d.ts.map +1 -0
  312. package/dist/services/git.service.js +321 -0
  313. package/dist/services/git.service.js.map +1 -0
  314. package/dist/services/hook-logger.service.d.ts +18 -0
  315. package/dist/services/hook-logger.service.d.ts.map +1 -0
  316. package/dist/services/hook-logger.service.js +48 -0
  317. package/dist/services/hook-logger.service.js.map +1 -0
  318. package/dist/services/lifecycle-events.d.ts +49 -0
  319. package/dist/services/lifecycle-events.d.ts.map +1 -0
  320. package/dist/services/lifecycle-events.js +86 -0
  321. package/dist/services/lifecycle-events.js.map +1 -0
  322. package/dist/services/lifecycle-git-context.d.ts +15 -0
  323. package/dist/services/lifecycle-git-context.d.ts.map +1 -0
  324. package/dist/services/lifecycle-git-context.js +23 -0
  325. package/dist/services/lifecycle-git-context.js.map +1 -0
  326. package/dist/services/lifecycle-local-turn-state.d.ts +14 -0
  327. package/dist/services/lifecycle-local-turn-state.d.ts.map +1 -0
  328. package/dist/services/lifecycle-local-turn-state.js +18 -0
  329. package/dist/services/lifecycle-local-turn-state.js.map +1 -0
  330. package/dist/services/lifecycle-transcript.d.ts +25 -0
  331. package/dist/services/lifecycle-transcript.d.ts.map +1 -0
  332. package/dist/services/lifecycle-transcript.js +29 -0
  333. package/dist/services/lifecycle-transcript.js.map +1 -0
  334. package/dist/services/lifecycle-turn-data.d.ts +11 -0
  335. package/dist/services/lifecycle-turn-data.d.ts.map +1 -0
  336. package/dist/services/lifecycle-turn-data.js +23 -0
  337. package/dist/services/lifecycle-turn-data.js.map +1 -0
  338. package/dist/services/lifecycle.service.d.ts +14 -0
  339. package/dist/services/lifecycle.service.d.ts.map +1 -0
  340. package/dist/services/lifecycle.service.js +276 -0
  341. package/dist/services/lifecycle.service.js.map +1 -0
  342. package/dist/services/repo-config.service.d.ts +22 -0
  343. package/dist/services/repo-config.service.d.ts.map +1 -0
  344. package/dist/services/repo-config.service.js +81 -0
  345. package/dist/services/repo-config.service.js.map +1 -0
  346. package/dist/services/repo-settings-wizard.service.d.ts +19 -0
  347. package/dist/services/repo-settings-wizard.service.d.ts.map +1 -0
  348. package/dist/services/repo-settings-wizard.service.js +260 -0
  349. package/dist/services/repo-settings-wizard.service.js.map +1 -0
  350. package/dist/services/repo-settings.service.d.ts +30 -0
  351. package/dist/services/repo-settings.service.d.ts.map +1 -0
  352. package/dist/services/repo-settings.service.js +99 -0
  353. package/dist/services/repo-settings.service.js.map +1 -0
  354. package/dist/services/review-auth-fallback.d.ts +7 -0
  355. package/dist/services/review-auth-fallback.d.ts.map +1 -0
  356. package/dist/services/review-auth-fallback.js +25 -0
  357. package/dist/services/review-auth-fallback.js.map +1 -0
  358. package/dist/services/review-config-builder.d.ts +19 -0
  359. package/dist/services/review-config-builder.d.ts.map +1 -0
  360. package/dist/services/review-config-builder.js +29 -0
  361. package/dist/services/review-config-builder.js.map +1 -0
  362. package/dist/services/review-file-filter.d.ts +3 -0
  363. package/dist/services/review-file-filter.d.ts.map +1 -0
  364. package/dist/services/review-file-filter.js +35 -0
  365. package/dist/services/review-file-filter.js.map +1 -0
  366. package/dist/services/review-normalizer.d.ts +6 -0
  367. package/dist/services/review-normalizer.d.ts.map +1 -0
  368. package/dist/services/review-normalizer.js +62 -0
  369. package/dist/services/review-normalizer.js.map +1 -0
  370. package/dist/services/review-verbose.d.ts +28 -0
  371. package/dist/services/review-verbose.d.ts.map +1 -0
  372. package/dist/services/review-verbose.js +52 -0
  373. package/dist/services/review-verbose.js.map +1 -0
  374. package/dist/services/review.service.d.ts +38 -0
  375. package/dist/services/review.service.d.ts.map +1 -0
  376. package/dist/services/review.service.js +152 -0
  377. package/dist/services/review.service.js.map +1 -0
  378. package/dist/services/rules.service.d.ts +16 -0
  379. package/dist/services/rules.service.d.ts.map +1 -0
  380. package/dist/services/rules.service.js +98 -0
  381. package/dist/services/rules.service.js.map +1 -0
  382. package/dist/services/session-local.service.d.ts +25 -0
  383. package/dist/services/session-local.service.d.ts.map +1 -0
  384. package/dist/services/session-local.service.js +79 -0
  385. package/dist/services/session-local.service.js.map +1 -0
  386. package/dist/services/transcript-parser.service.d.ts +10 -0
  387. package/dist/services/transcript-parser.service.d.ts.map +1 -0
  388. package/dist/services/transcript-parser.service.js +127 -0
  389. package/dist/services/transcript-parser.service.js.map +1 -0
  390. package/dist/services/transcript.service.d.ts +33 -0
  391. package/dist/services/transcript.service.d.ts.map +1 -0
  392. package/dist/services/transcript.service.js +264 -0
  393. package/dist/services/transcript.service.js.map +1 -0
  394. package/dist/types/auth.d.ts +18 -0
  395. package/dist/types/auth.d.ts.map +1 -0
  396. package/dist/types/auth.js +2 -0
  397. package/dist/types/auth.js.map +1 -0
  398. package/dist/types/cli.d.ts +41 -0
  399. package/dist/types/cli.d.ts.map +1 -0
  400. package/dist/types/cli.js +2 -0
  401. package/dist/types/cli.js.map +1 -0
  402. package/dist/types/command-output.d.ts +29 -0
  403. package/dist/types/command-output.d.ts.map +1 -0
  404. package/dist/types/command-output.js +2 -0
  405. package/dist/types/command-output.js.map +1 -0
  406. package/dist/types/config.d.ts +68 -0
  407. package/dist/types/config.d.ts.map +1 -0
  408. package/dist/types/config.js +2 -0
  409. package/dist/types/config.js.map +1 -0
  410. package/dist/types/errors.d.ts +8 -0
  411. package/dist/types/errors.d.ts.map +1 -0
  412. package/dist/types/errors.js +15 -0
  413. package/dist/types/errors.js.map +1 -0
  414. package/dist/types/index.d.ts +10 -0
  415. package/dist/types/index.d.ts.map +1 -0
  416. package/dist/types/index.js +2 -0
  417. package/dist/types/index.js.map +1 -0
  418. package/dist/types/memory.d.ts +39 -0
  419. package/dist/types/memory.d.ts.map +1 -0
  420. package/dist/types/memory.js +2 -0
  421. package/dist/types/memory.js.map +1 -0
  422. package/dist/types/repo-config.d.ts +24 -0
  423. package/dist/types/repo-config.d.ts.map +1 -0
  424. package/dist/types/repo-config.js +2 -0
  425. package/dist/types/repo-config.js.map +1 -0
  426. package/dist/types/review.d.ts +112 -0
  427. package/dist/types/review.d.ts.map +1 -0
  428. package/dist/types/review.js +2 -0
  429. package/dist/types/review.js.map +1 -0
  430. package/dist/types/rules.d.ts +42 -0
  431. package/dist/types/rules.d.ts.map +1 -0
  432. package/dist/types/rules.js +7 -0
  433. package/dist/types/rules.js.map +1 -0
  434. package/dist/types/session-events.d.ts +48 -0
  435. package/dist/types/session-events.d.ts.map +1 -0
  436. package/dist/types/session-events.js +2 -0
  437. package/dist/types/session-events.js.map +1 -0
  438. package/dist/types/session.d.ts +150 -0
  439. package/dist/types/session.d.ts.map +1 -0
  440. package/dist/types/session.js +9 -0
  441. package/dist/types/session.js.map +1 -0
  442. package/dist/types/trial.d.ts +10 -0
  443. package/dist/types/trial.d.ts.map +1 -0
  444. package/dist/types/trial.js +2 -0
  445. package/dist/types/trial.js.map +1 -0
  446. package/dist/ui/interactive-formatters.d.ts +6 -0
  447. package/dist/ui/interactive-formatters.d.ts.map +1 -0
  448. package/dist/ui/interactive-formatters.js +61 -0
  449. package/dist/ui/interactive-formatters.js.map +1 -0
  450. package/dist/ui/interactive-helpers.d.ts +20 -0
  451. package/dist/ui/interactive-helpers.d.ts.map +1 -0
  452. package/dist/ui/interactive-helpers.js +82 -0
  453. package/dist/ui/interactive-helpers.js.map +1 -0
  454. package/dist/ui/interactive-renderers.d.ts +6 -0
  455. package/dist/ui/interactive-renderers.d.ts.map +1 -0
  456. package/dist/ui/interactive-renderers.js +82 -0
  457. package/dist/ui/interactive-renderers.js.map +1 -0
  458. package/dist/ui/interactive.d.ts +25 -0
  459. package/dist/ui/interactive.d.ts.map +1 -0
  460. package/dist/ui/interactive.js +228 -0
  461. package/dist/ui/interactive.js.map +1 -0
  462. package/dist/utils/auth-mode.d.ts +7 -0
  463. package/dist/utils/auth-mode.d.ts.map +1 -0
  464. package/dist/utils/auth-mode.js +42 -0
  465. package/dist/utils/auth-mode.js.map +1 -0
  466. package/dist/utils/banner.d.ts +2 -0
  467. package/dist/utils/banner.d.ts.map +1 -0
  468. package/dist/utils/banner.js +180 -0
  469. package/dist/utils/banner.js.map +1 -0
  470. package/dist/utils/cli-exit.d.ts +13 -0
  471. package/dist/utils/cli-exit.d.ts.map +1 -0
  472. package/dist/utils/cli-exit.js +29 -0
  473. package/dist/utils/cli-exit.js.map +1 -0
  474. package/dist/utils/clipboard.d.ts +2 -0
  475. package/dist/utils/clipboard.d.ts.map +1 -0
  476. package/dist/utils/clipboard.js +11 -0
  477. package/dist/utils/clipboard.js.map +1 -0
  478. package/dist/utils/command-context.d.ts +12 -0
  479. package/dist/utils/command-context.d.ts.map +1 -0
  480. package/dist/utils/command-context.js +15 -0
  481. package/dist/utils/command-context.js.map +1 -0
  482. package/dist/utils/command-errors.d.ts +12 -0
  483. package/dist/utils/command-errors.d.ts.map +1 -0
  484. package/dist/utils/command-errors.js +112 -0
  485. package/dist/utils/command-errors.js.map +1 -0
  486. package/dist/utils/command-output.d.ts +5 -0
  487. package/dist/utils/command-output.d.ts.map +1 -0
  488. package/dist/utils/command-output.js +46 -0
  489. package/dist/utils/command-output.js.map +1 -0
  490. package/dist/utils/command-schema.d.ts +29 -0
  491. package/dist/utils/command-schema.d.ts.map +1 -0
  492. package/dist/utils/command-schema.js +74 -0
  493. package/dist/utils/command-schema.js.map +1 -0
  494. package/dist/utils/commander-errors.d.ts +8 -0
  495. package/dist/utils/commander-errors.d.ts.map +1 -0
  496. package/dist/utils/commander-errors.js +79 -0
  497. package/dist/utils/commander-errors.js.map +1 -0
  498. package/dist/utils/commander-setup.d.ts +3 -0
  499. package/dist/utils/commander-setup.d.ts.map +1 -0
  500. package/dist/utils/commander-setup.js +10 -0
  501. package/dist/utils/commander-setup.js.map +1 -0
  502. package/dist/utils/config.d.ts +13 -0
  503. package/dist/utils/config.d.ts.map +1 -0
  504. package/dist/utils/config.js +71 -0
  505. package/dist/utils/config.js.map +1 -0
  506. package/dist/utils/credentials.d.ts +6 -0
  507. package/dist/utils/credentials.d.ts.map +1 -0
  508. package/dist/utils/credentials.js +64 -0
  509. package/dist/utils/credentials.js.map +1 -0
  510. package/dist/utils/device.d.ts +7 -0
  511. package/dist/utils/device.d.ts.map +1 -0
  512. package/dist/utils/device.js +133 -0
  513. package/dist/utils/device.js.map +1 -0
  514. package/dist/utils/field-mask.d.ts +2 -0
  515. package/dist/utils/field-mask.d.ts.map +1 -0
  516. package/dist/utils/field-mask.js +93 -0
  517. package/dist/utils/field-mask.js.map +1 -0
  518. package/dist/utils/git-diff.d.ts +5 -0
  519. package/dist/utils/git-diff.d.ts.map +1 -0
  520. package/dist/utils/git-diff.js +14 -0
  521. package/dist/utils/git-diff.js.map +1 -0
  522. package/dist/utils/git-file-reader.d.ts +22 -0
  523. package/dist/utils/git-file-reader.d.ts.map +1 -0
  524. package/dist/utils/git-file-reader.js +45 -0
  525. package/dist/utils/git-file-reader.js.map +1 -0
  526. package/dist/utils/git-file-selection.d.ts +14 -0
  527. package/dist/utils/git-file-selection.d.ts.map +1 -0
  528. package/dist/utils/git-file-selection.js +20 -0
  529. package/dist/utils/git-file-selection.js.map +1 -0
  530. package/dist/utils/git-file-targets.d.ts +4 -0
  531. package/dist/utils/git-file-targets.d.ts.map +1 -0
  532. package/dist/utils/git-file-targets.js +11 -0
  533. package/dist/utils/git-file-targets.js.map +1 -0
  534. package/dist/utils/git-remote.d.ts +7 -0
  535. package/dist/utils/git-remote.d.ts.map +1 -0
  536. package/dist/utils/git-remote.js +94 -0
  537. package/dist/utils/git-remote.js.map +1 -0
  538. package/dist/utils/git-status.d.ts +7 -0
  539. package/dist/utils/git-status.d.ts.map +1 -0
  540. package/dist/utils/git-status.js +36 -0
  541. package/dist/utils/git-status.js.map +1 -0
  542. package/dist/utils/hunk.d.ts +15 -0
  543. package/dist/utils/hunk.d.ts.map +1 -0
  544. package/dist/utils/hunk.js +44 -0
  545. package/dist/utils/hunk.js.map +1 -0
  546. package/dist/utils/input-validation.d.ts +11 -0
  547. package/dist/utils/input-validation.d.ts.map +1 -0
  548. package/dist/utils/input-validation.js +73 -0
  549. package/dist/utils/input-validation.js.map +1 -0
  550. package/dist/utils/install-instructions.d.ts +6 -0
  551. package/dist/utils/install-instructions.d.ts.map +1 -0
  552. package/dist/utils/install-instructions.js +18 -0
  553. package/dist/utils/install-instructions.js.map +1 -0
  554. package/dist/utils/logger.d.ts +13 -0
  555. package/dist/utils/logger.d.ts.map +1 -0
  556. package/dist/utils/logger.js +48 -0
  557. package/dist/utils/logger.js.map +1 -0
  558. package/dist/utils/rate-limit.d.ts +5 -0
  559. package/dist/utils/rate-limit.d.ts.map +1 -0
  560. package/dist/utils/rate-limit.js +56 -0
  561. package/dist/utils/rate-limit.js.map +1 -0
  562. package/dist/utils/recent-activity.d.ts +9 -0
  563. package/dist/utils/recent-activity.d.ts.map +1 -0
  564. package/dist/utils/recent-activity.js +139 -0
  565. package/dist/utils/recent-activity.js.map +1 -0
  566. package/dist/utils/repo-settings-dashboard.d.ts +6 -0
  567. package/dist/utils/repo-settings-dashboard.d.ts.map +1 -0
  568. package/dist/utils/repo-settings-dashboard.js +36 -0
  569. package/dist/utils/repo-settings-dashboard.js.map +1 -0
  570. package/dist/utils/repo-settings-patterns.d.ts +7 -0
  571. package/dist/utils/repo-settings-patterns.d.ts.map +1 -0
  572. package/dist/utils/repo-settings-patterns.js +66 -0
  573. package/dist/utils/repo-settings-patterns.js.map +1 -0
  574. package/dist/utils/repo-settings-schema.d.ts +6 -0
  575. package/dist/utils/repo-settings-schema.d.ts.map +1 -0
  576. package/dist/utils/repo-settings-schema.js +70 -0
  577. package/dist/utils/repo-settings-schema.js.map +1 -0
  578. package/dist/utils/review-output.d.ts +4 -0
  579. package/dist/utils/review-output.d.ts.map +1 -0
  580. package/dist/utils/review-output.js +18 -0
  581. package/dist/utils/review-output.js.map +1 -0
  582. package/dist/utils/skills-sync-manifest.d.ts +5 -0
  583. package/dist/utils/skills-sync-manifest.d.ts.map +1 -0
  584. package/dist/utils/skills-sync-manifest.js +39 -0
  585. package/dist/utils/skills-sync-manifest.js.map +1 -0
  586. package/dist/utils/skills-sync-paths.d.ts +5 -0
  587. package/dist/utils/skills-sync-paths.d.ts.map +1 -0
  588. package/dist/utils/skills-sync-paths.js +60 -0
  589. package/dist/utils/skills-sync-paths.js.map +1 -0
  590. package/dist/utils/skills-sync-targets.d.ts +3 -0
  591. package/dist/utils/skills-sync-targets.d.ts.map +1 -0
  592. package/dist/utils/skills-sync-targets.js +218 -0
  593. package/dist/utils/skills-sync-targets.js.map +1 -0
  594. package/dist/utils/skills-sync.d.ts +39 -0
  595. package/dist/utils/skills-sync.d.ts.map +1 -0
  596. package/dist/utils/skills-sync.js +200 -0
  597. package/dist/utils/skills-sync.js.map +1 -0
  598. package/dist/utils/skills.d.ts +13 -0
  599. package/dist/utils/skills.d.ts.map +1 -0
  600. package/dist/utils/skills.js +117 -0
  601. package/dist/utils/skills.js.map +1 -0
  602. package/dist/utils/stream-input.d.ts +13 -0
  603. package/dist/utils/stream-input.d.ts.map +1 -0
  604. package/dist/utils/stream-input.js +36 -0
  605. package/dist/utils/stream-input.js.map +1 -0
  606. package/dist/utils/team-key-auth.d.ts +5 -0
  607. package/dist/utils/team-key-auth.d.ts.map +1 -0
  608. package/dist/utils/team-key-auth.js +14 -0
  609. package/dist/utils/team-key-auth.js.map +1 -0
  610. package/dist/utils/update-check.d.ts +2 -0
  611. package/dist/utils/update-check.d.ts.map +1 -0
  612. package/dist/utils/update-check.js +30 -0
  613. package/dist/utils/update-check.js.map +1 -0
  614. package/package.json +90 -0
  615. package/skills/README.md +64 -0
  616. package/skills/hunk-review/SKILL.md +154 -0
  617. package/skills/mesrai-business-rules-validation/SKILL.md +65 -0
  618. package/skills/mesrai-centralized-config/SKILL.md +102 -0
  619. package/skills/mesrai-mesrai-rules/SKILL.md +103 -0
  620. package/skills/mesrai-mesrai-rules/instructions/create-mesrai-rule.md +56 -0
  621. package/skills/mesrai-mesrai-rules/instructions/update-mesrai-rule.md +63 -0
  622. package/skills/mesrai-mesrai-rules/instructions/view-mesrai-rules.md +65 -0
  623. package/skills/mesrai-mesrai-rules/rules/create-mesrai-rule.md +48 -0
  624. package/skills/mesrai-mesrai-rules/rules/update-mesrai-rule.md +55 -0
  625. package/skills/mesrai-mesrai-rules/rules/view-mesrai-rules.md +56 -0
  626. package/skills/mesrai-pr-suggestions-resolver/SKILL.md +61 -0
  627. package/skills/mesrai-review/SKILL.md +53 -0
  628. package/skills/mesrai-review-dev/SKILL.md +55 -0
  629. package/skills/mesrai-review-dev/scripts/run-local-cli.sh +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.api.d.ts","sourceRoot":"","sources":["../../../src/services/api/sessions.api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0GvD,qBAAa,eAAgB,YAAW,YAAY;IAC1C,SAAS,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA0C3E"}
@@ -0,0 +1,129 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { request } from './api.real.js';
4
+ import { ApiError } from '../../types/errors.js';
5
+ const PENDING_FILE = '.mesrai/pending-events.jsonl';
6
+ const MAX_BUFFER_LINES = 1000;
7
+ const ENDPOINT = '/cli/sessions/events';
8
+ async function getAuthToken() {
9
+ try {
10
+ const { authService } = await import('../auth.service.js');
11
+ return await authService.getValidToken();
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ function buildHeaders(token) {
18
+ const isTeamKey = token.startsWith('mesrai_');
19
+ return isTeamKey
20
+ ? { 'X-Team-Key': token }
21
+ : { Authorization: `Bearer ${token}` };
22
+ }
23
+ async function pendingPath(repoRoot) {
24
+ return path.join(repoRoot, PENDING_FILE);
25
+ }
26
+ async function readPending(repoRoot) {
27
+ const filePath = await pendingPath(repoRoot);
28
+ try {
29
+ const content = await fs.readFile(filePath, 'utf-8');
30
+ return content.split('\n').filter(Boolean);
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ }
36
+ async function writePending(repoRoot, lines) {
37
+ const filePath = await pendingPath(repoRoot);
38
+ const dir = path.dirname(filePath);
39
+ await fs.mkdir(dir, { recursive: true });
40
+ // Truncate old events if buffer exceeds limit
41
+ const truncated = lines.length > MAX_BUFFER_LINES
42
+ ? lines.slice(lines.length - MAX_BUFFER_LINES)
43
+ : lines;
44
+ await fs.writeFile(filePath, truncated.join('\n') + '\n', 'utf-8');
45
+ }
46
+ async function appendPending(repoRoot, event) {
47
+ const filePath = await pendingPath(repoRoot);
48
+ const dir = path.dirname(filePath);
49
+ await fs.mkdir(dir, { recursive: true });
50
+ await fs.appendFile(filePath, `${JSON.stringify(event)}\n`, 'utf-8');
51
+ }
52
+ async function postEvent(event, token) {
53
+ await request(ENDPOINT, {
54
+ method: 'POST',
55
+ headers: buildHeaders(token),
56
+ body: JSON.stringify(event),
57
+ });
58
+ }
59
+ async function flushPending(repoRoot, token) {
60
+ const lines = await readPending(repoRoot);
61
+ if (lines.length === 0) {
62
+ return;
63
+ }
64
+ const failed = [];
65
+ for (let i = 0; i < lines.length; i++) {
66
+ const line = lines[i];
67
+ try {
68
+ const event = JSON.parse(line);
69
+ await postEvent(event, token);
70
+ }
71
+ catch (error) {
72
+ if (error instanceof ApiError &&
73
+ error.statusCode < 500 &&
74
+ error.statusCode !== 429) {
75
+ // 4xx (except 429) — discard, retry won't help
76
+ continue;
77
+ }
78
+ // Network or 5xx/429 — API likely unreachable. Bail out and
79
+ // keep this line plus all remaining for the next flush, so we
80
+ // don't sit here for hours hitting the same dead endpoint.
81
+ failed.push(...lines.slice(i));
82
+ break;
83
+ }
84
+ }
85
+ if (failed.length > 0) {
86
+ await writePending(repoRoot, failed);
87
+ }
88
+ else {
89
+ // Clean up file
90
+ const filePath = await pendingPath(repoRoot);
91
+ await fs.unlink(filePath).catch(() => { });
92
+ }
93
+ }
94
+ export class RealSessionsApi {
95
+ async sendEvent(event, repoRoot) {
96
+ const token = await getAuthToken();
97
+ if (!token) {
98
+ if (process.env.MESRAI_VERBOSE) {
99
+ console.log('[sessions] No auth token, skipping event:', event.type);
100
+ }
101
+ return;
102
+ }
103
+ // Try to flush pending events first
104
+ try {
105
+ await flushPending(repoRoot, token);
106
+ }
107
+ catch {
108
+ // Non-blocking — continue with current event
109
+ }
110
+ // Send current event
111
+ try {
112
+ await postEvent(event, token);
113
+ }
114
+ catch (error) {
115
+ if (error instanceof ApiError &&
116
+ error.statusCode < 500 &&
117
+ error.statusCode !== 429) {
118
+ // 4xx — discard
119
+ if (process.env.MESRAI_VERBOSE) {
120
+ console.error('[sessions] Discarding event due to client error:', error.statusCode);
121
+ }
122
+ return;
123
+ }
124
+ // Network or retryable — buffer locally
125
+ await appendPending(repoRoot, event).catch(() => { });
126
+ }
127
+ }
128
+ }
129
+ //# sourceMappingURL=sessions.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.api.js","sourceRoot":"","sources":["../../../src/services/api/sessions.api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { TrialStatus } from '../../types/trial.js';
2
+ import type { ITrialApi } from './api.interface.js';
3
+ type RequestWithRetry = <T>(endpoint: string, options?: RequestInit) => Promise<T>;
4
+ export declare class RealTrialApi implements ITrialApi {
5
+ private readonly requester;
6
+ constructor(requester?: RequestWithRetry);
7
+ getStatus(fingerprint: string): Promise<TrialStatus>;
8
+ }
9
+ export {};
10
+ //# sourceMappingURL=trial.api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trial.api.d.ts","sourceRoot":"","sources":["../../../src/services/api/trial.api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGpD,KAAK,gBAAgB,GAAG,CAAC,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,WAAW,KACpB,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB,qBAAa,YAAa,YAAW,SAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,GAAE,gBAAmC;IAErE,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAK7D"}
@@ -0,0 +1,11 @@
1
+ import { requestWithRetry } from './api-core.js';
2
+ export class RealTrialApi {
3
+ requester;
4
+ constructor(requester = requestWithRetry) {
5
+ this.requester = requester;
6
+ }
7
+ async getStatus(fingerprint) {
8
+ return this.requester(`/cli/trial/status?fingerprint=${fingerprint}`);
9
+ }
10
+ }
11
+ //# sourceMappingURL=trial.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trial.api.js","sourceRoot":"","sources":["../../../src/services/api/trial.api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOjD,MAAM,OAAO,YAAY;IACQ;IAA7B,YAA6B,YAA8B,gBAAgB;QAA9C,cAAS,GAAT,SAAS,CAAqC;IAAG,CAAC;IAE/E,KAAK,CAAC,SAAS,CAAC,WAAmB;QAC/B,OAAO,IAAI,CAAC,SAAS,CACjB,iCAAiC,WAAW,EAAE,CACjD,CAAC;IACN,CAAC;CACJ"}
@@ -0,0 +1,29 @@
1
+ import type { StoredCredentials, UserInfo } from '../types/auth.js';
2
+ import { type DeviceLoginPrompt } from './device-login.service.js';
3
+ declare class AuthService {
4
+ private cachedCredentials;
5
+ private refreshInFlight;
6
+ private getEnvAuthToken;
7
+ login(email: string, password: string): Promise<void>;
8
+ loginViaBrowser({ onOpenUrl, }?: {
9
+ onOpenUrl?: (url: string) => void;
10
+ }): Promise<UserInfo>;
11
+ loginViaDeviceCode({ onPrompt, }: {
12
+ onPrompt: (prompt: DeviceLoginPrompt) => void | Promise<void>;
13
+ }): Promise<UserInfo>;
14
+ private buildAuthResponse;
15
+ logout(): Promise<void>;
16
+ isAuthenticated(): Promise<boolean>;
17
+ getCredentials(): Promise<StoredCredentials | null>;
18
+ getValidToken(): Promise<string>;
19
+ generateCIToken(): Promise<string>;
20
+ verifyToken(): Promise<{
21
+ valid: boolean;
22
+ user?: any;
23
+ }>;
24
+ private storeAuthResponse;
25
+ private refreshTokenOrFallback;
26
+ }
27
+ export { AuthService };
28
+ export declare const authService: AuthService;
29
+ //# sourceMappingURL=auth.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iBAAiB,EAAgB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGlF,OAAO,EAEH,KAAK,iBAAiB,EACzB,MAAM,2BAA2B,CAAC;AAInC,cAAM,WAAW;IACb,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,eAAe,CAAgC;IAEvD,OAAO,CAAC,eAAe;IAcjB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrD,eAAe,CAAC,EAClB,SAAS,GACZ,GAAE;QACC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAChC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYpB,kBAAkB,CAAC,EACrB,QAAQ,GACX,EAAE;QACC,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACjE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrB,OAAO,CAAC,iBAAiB;IAkBnB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAevB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAcnC,cAAc,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IASnD,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IA6BhC,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAKlC,WAAW,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;YAU9C,iBAAiB;YAYjB,sBAAsB;CA+BvC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,190 @@
1
+ import { api } from './api/index.js';
2
+ import { loadCredentials, saveCredentials, clearCredentials, } from '../utils/credentials.js';
3
+ import { loadConfig, clearConfig } from '../utils/config.js';
4
+ import { AuthError } from '../types/errors.js';
5
+ import { loginViaBrowser } from './browser-login.service.js';
6
+ import { loginViaDeviceCode, } from './device-login.service.js';
7
+ const TOKEN_REFRESH_BUFFER_MS = 5 * 60 * 1000;
8
+ class AuthService {
9
+ cachedCredentials = null;
10
+ refreshInFlight = null;
11
+ getEnvAuthToken() {
12
+ const token = process.env.MESRAI_TOKEN?.trim();
13
+ if (token) {
14
+ return token;
15
+ }
16
+ const teamKey = process.env.MESRAI_TEAM_KEY?.trim();
17
+ if (teamKey) {
18
+ return teamKey;
19
+ }
20
+ return null;
21
+ }
22
+ async login(email, password) {
23
+ const response = await api.auth.login(email, password);
24
+ await this.storeAuthResponse(response);
25
+ // Successful login switches auth mode to user credentials.
26
+ try {
27
+ await clearConfig();
28
+ }
29
+ catch {
30
+ // Best effort cleanup.
31
+ }
32
+ }
33
+ async loginViaBrowser({ onOpenUrl, } = {}) {
34
+ const result = await loginViaBrowser({ onOpenUrl });
35
+ const response = this.buildAuthResponse(result);
36
+ await this.storeAuthResponse(response);
37
+ try {
38
+ await clearConfig();
39
+ }
40
+ catch {
41
+ // Best effort cleanup.
42
+ }
43
+ return response.user;
44
+ }
45
+ async loginViaDeviceCode({ onPrompt, }) {
46
+ const result = await loginViaDeviceCode({ onPrompt });
47
+ const response = this.buildAuthResponse(result);
48
+ await this.storeAuthResponse(response);
49
+ try {
50
+ await clearConfig();
51
+ }
52
+ catch {
53
+ // Best effort cleanup.
54
+ }
55
+ return response.user;
56
+ }
57
+ buildAuthResponse(input) {
58
+ const decoded = decodeJwtClaims(input.accessToken);
59
+ return {
60
+ accessToken: input.accessToken,
61
+ refreshToken: input.refreshToken,
62
+ expiresIn: decoded.expiresIn ?? 3600,
63
+ user: {
64
+ id: decoded.sub ?? 'unknown',
65
+ email: input.userEmail ?? decoded.email ?? 'unknown',
66
+ orgs: decoded.organizationId ? [decoded.organizationId] : [],
67
+ },
68
+ };
69
+ }
70
+ async logout() {
71
+ const credentials = await this.getCredentials();
72
+ if (credentials) {
73
+ try {
74
+ await api.auth.logout(credentials.accessToken);
75
+ }
76
+ catch {
77
+ // Ignore logout errors
78
+ }
79
+ }
80
+ await Promise.all([clearCredentials(), clearConfig()]);
81
+ this.cachedCredentials = null;
82
+ }
83
+ async isAuthenticated() {
84
+ if (this.getEnvAuthToken()) {
85
+ return true;
86
+ }
87
+ const credentials = await this.getCredentials();
88
+ if (credentials !== null) {
89
+ return true;
90
+ }
91
+ const config = await loadConfig();
92
+ return !!config?.teamKey;
93
+ }
94
+ async getCredentials() {
95
+ if (this.cachedCredentials) {
96
+ return this.cachedCredentials;
97
+ }
98
+ this.cachedCredentials = await loadCredentials();
99
+ return this.cachedCredentials;
100
+ }
101
+ async getValidToken() {
102
+ const envToken = this.getEnvAuthToken();
103
+ if (envToken) {
104
+ return envToken;
105
+ }
106
+ const credentials = await this.getCredentials();
107
+ if (credentials) {
108
+ const isExpired = Date.now() > credentials.expiresAt - TOKEN_REFRESH_BUFFER_MS;
109
+ if (isExpired) {
110
+ return this.refreshTokenOrFallback(credentials.refreshToken);
111
+ }
112
+ return credentials.accessToken;
113
+ }
114
+ const config = await loadConfig();
115
+ if (config?.teamKey) {
116
+ return config.teamKey;
117
+ }
118
+ throw new AuthError('Not authenticated. Run: mesrai auth login or mesrai auth team-key --key <your-key>');
119
+ }
120
+ async generateCIToken() {
121
+ const token = await this.getValidToken();
122
+ return api.auth.generateCIToken(token);
123
+ }
124
+ async verifyToken() {
125
+ const credentials = await this.getCredentials();
126
+ if (!credentials) {
127
+ return { valid: false };
128
+ }
129
+ return api.auth.verify(credentials.accessToken);
130
+ }
131
+ async storeAuthResponse(response) {
132
+ const credentials = {
133
+ accessToken: response.accessToken,
134
+ refreshToken: response.refreshToken,
135
+ expiresAt: Date.now() + response.expiresIn * 1000,
136
+ user: response.user,
137
+ };
138
+ await saveCredentials(credentials);
139
+ this.cachedCredentials = credentials;
140
+ }
141
+ async refreshTokenOrFallback(refreshToken) {
142
+ if (!this.refreshInFlight) {
143
+ this.refreshInFlight = (async () => {
144
+ try {
145
+ const response = await api.auth.refresh(refreshToken);
146
+ await this.storeAuthResponse(response);
147
+ return response.accessToken;
148
+ }
149
+ catch {
150
+ await clearCredentials();
151
+ this.cachedCredentials = null;
152
+ const config = await loadConfig();
153
+ if (config?.teamKey) {
154
+ return config.teamKey;
155
+ }
156
+ throw new AuthError('Session expired. Run: mesrai auth login');
157
+ }
158
+ })();
159
+ }
160
+ try {
161
+ return await this.refreshInFlight;
162
+ }
163
+ finally {
164
+ this.refreshInFlight = null;
165
+ }
166
+ }
167
+ }
168
+ export { AuthService };
169
+ export const authService = new AuthService();
170
+ function decodeJwtClaims(token) {
171
+ try {
172
+ const parts = token.split('.');
173
+ if (parts.length !== 3)
174
+ return {};
175
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
176
+ const expiresIn = typeof payload.exp === 'number'
177
+ ? Math.max(0, payload.exp - Math.floor(Date.now() / 1000))
178
+ : undefined;
179
+ return {
180
+ sub: payload.sub,
181
+ email: payload.email,
182
+ organizationId: payload.organizationId,
183
+ expiresIn,
184
+ };
185
+ }
186
+ catch {
187
+ return {};
188
+ }
189
+ }
190
+ //# sourceMappingURL=auth.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface BrowserLoginResult {
2
+ accessToken: string;
3
+ refreshToken: string;
4
+ userEmail?: string;
5
+ }
6
+ /**
7
+ * Loopback OAuth-style login (RFC 8252).
8
+ *
9
+ * Flow:
10
+ * 1. Spin up an HTTP server on a random localhost port.
11
+ * 2. POST /cli/auth/login-init with that port — backend returns the
12
+ * verification URI (already composed from API_FRONTEND_URL on the
13
+ * server side, so self-hosted just works).
14
+ * 3. Open the verification URI in the user's browser.
15
+ * 4. After the user clicks "Authorize" on the web, the backend redirects
16
+ * the browser to http://127.0.0.1:<port>/callback?state=<state>.
17
+ * 5. Server resolves the callback, then we GET /cli/auth/login-poll?state=
18
+ * over HTTPS to fetch the JWT. The token never traverses the browser.
19
+ */
20
+ export declare function loginViaBrowser({ onOpenUrl, }?: {
21
+ onOpenUrl?: (url: string) => void;
22
+ }): Promise<BrowserLoginResult>;
23
+ //# sourceMappingURL=browser-login.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-login.service.d.ts","sourceRoot":"","sources":["../../src/services/browser-login.service.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,kBAAkB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CAAC,EAClC,SAAS,GACZ,GAAE;IACC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4CnC"}
@@ -0,0 +1,187 @@
1
+ import http from 'node:http';
2
+ import open from 'open';
3
+ import { cliAuthApi } from './api/cli-auth.api.js';
4
+ const POLL_INTERVAL_MS = 1_000;
5
+ const POLL_MAX_DELAY_MS = 5_000;
6
+ const TOTAL_TIMEOUT_MS = 10 * 60 * 1000;
7
+ const CALLBACK_HTML = `<!doctype html>
8
+ <html lang="en">
9
+ <head>
10
+ <meta charset="utf-8">
11
+ <title>Mesrai CLI authorized</title>
12
+ <style>
13
+ body { font: 14px system-ui, sans-serif; padding: 4rem; text-align: center; color: #1f2937; }
14
+ h1 { font-size: 1.25rem; }
15
+ p { color: #6b7280; }
16
+ </style>
17
+ </head>
18
+ <body>
19
+ <h1>You're all set</h1>
20
+ <p>The Mesrai CLI received your authorization. You can close this tab.</p>
21
+ </body>
22
+ </html>`;
23
+ /**
24
+ * Loopback OAuth-style login (RFC 8252).
25
+ *
26
+ * Flow:
27
+ * 1. Spin up an HTTP server on a random localhost port.
28
+ * 2. POST /cli/auth/login-init with that port — backend returns the
29
+ * verification URI (already composed from API_FRONTEND_URL on the
30
+ * server side, so self-hosted just works).
31
+ * 3. Open the verification URI in the user's browser.
32
+ * 4. After the user clicks "Authorize" on the web, the backend redirects
33
+ * the browser to http://127.0.0.1:<port>/callback?state=<state>.
34
+ * 5. Server resolves the callback, then we GET /cli/auth/login-poll?state=
35
+ * over HTTPS to fetch the JWT. The token never traverses the browser.
36
+ */
37
+ export async function loginViaBrowser({ onOpenUrl, } = {}) {
38
+ const { server, port, callbackPromise } = await startCallbackServer();
39
+ try {
40
+ const init = await cliAuthApi.initLoopback(port);
41
+ if (onOpenUrl) {
42
+ onOpenUrl(init.verificationUri);
43
+ }
44
+ try {
45
+ await open(init.verificationUri);
46
+ }
47
+ catch {
48
+ // Browser may not be available; user can still copy the URL
49
+ // manually. The callback server keeps waiting either way.
50
+ }
51
+ // Race the callback against an expiry timeout. We MUST cancel the
52
+ // timer once the callback wins — without `cancel()` the underlying
53
+ // `setTimeout` keeps the Node event loop alive for the full
54
+ // `expiresIn` window (10 min by default), so the CLI hangs after a
55
+ // successful login until the timer naturally fires.
56
+ const expiry = timeout(init.expiresIn * 1000, 'Authorization timed out. Run `mesrai auth login` again.');
57
+ let callback;
58
+ try {
59
+ callback = await Promise.race([callbackPromise, expiry.promise]);
60
+ }
61
+ finally {
62
+ expiry.cancel();
63
+ }
64
+ if (callback.state !== init.state) {
65
+ throw new Error('Authorization state mismatch. The callback did not match the initial request — refusing to use the response for security reasons.');
66
+ }
67
+ const tokens = await pollUntilTerminal(init.state);
68
+ return tokens;
69
+ }
70
+ finally {
71
+ await closeServer(server);
72
+ }
73
+ }
74
+ async function startCallbackServer() {
75
+ let resolveCallback;
76
+ let rejectCallback;
77
+ const callbackPromise = new Promise((resolve, reject) => {
78
+ resolveCallback = resolve;
79
+ rejectCallback = reject;
80
+ });
81
+ const server = http.createServer((req, res) => {
82
+ if (!req.url) {
83
+ res.writeHead(400).end();
84
+ return;
85
+ }
86
+ const url = new URL(req.url, 'http://127.0.0.1');
87
+ if (url.pathname !== '/callback') {
88
+ res.writeHead(404, { Connection: 'close' }).end();
89
+ return;
90
+ }
91
+ const state = url.searchParams.get('state');
92
+ const error = url.searchParams.get('error');
93
+ // Connection: close — keep-alive sockets would block the Node event
94
+ // loop after server.close(), leaving the CLI hanging when the user
95
+ // tries to run another command in the same shell.
96
+ res.writeHead(error ? 400 : 200, {
97
+ 'Content-Type': 'text/html; charset=utf-8',
98
+ Connection: 'close',
99
+ });
100
+ res.end(CALLBACK_HTML);
101
+ if (error) {
102
+ rejectCallback(new Error(`Authorization denied: ${error}`));
103
+ return;
104
+ }
105
+ if (!state) {
106
+ rejectCallback(new Error('Callback missing state parameter'));
107
+ return;
108
+ }
109
+ resolveCallback({ state });
110
+ });
111
+ // Don't keep keep-alive sockets idle — the browser will sometimes hold
112
+ // the connection open after the response, which would prevent the
113
+ // process from exiting after the login finishes.
114
+ server.keepAliveTimeout = 0;
115
+ // Bind only to loopback — never expose this server to other hosts.
116
+ await new Promise((resolve, reject) => {
117
+ server.once('error', reject);
118
+ server.listen(0, '127.0.0.1', () => resolve());
119
+ });
120
+ const address = server.address();
121
+ return { server, port: address.port, callbackPromise };
122
+ }
123
+ function closeServer(server) {
124
+ return new Promise((resolve) => {
125
+ // closeAllConnections is available on Node 18.2+. Force any
126
+ // lingering keep-alive sockets to drop so the process can exit.
127
+ const anyServer = server;
128
+ try {
129
+ anyServer.closeIdleConnections?.();
130
+ anyServer.closeAllConnections?.();
131
+ }
132
+ catch {
133
+ // ignore — best effort
134
+ }
135
+ server.close(() => resolve());
136
+ });
137
+ }
138
+ async function pollUntilTerminal(state) {
139
+ const startedAt = Date.now();
140
+ let delay = POLL_INTERVAL_MS;
141
+ while (Date.now() - startedAt < TOTAL_TIMEOUT_MS) {
142
+ const response = await cliAuthApi.poll({ state });
143
+ if (response.status === 'completed') {
144
+ if (!response.accessToken || !response.refreshToken) {
145
+ throw new Error('Authorization completed but the server returned no tokens');
146
+ }
147
+ return {
148
+ accessToken: response.accessToken,
149
+ refreshToken: response.refreshToken,
150
+ userEmail: response.userEmail,
151
+ };
152
+ }
153
+ if (response.status === 'expired' ||
154
+ response.status === 'denied' ||
155
+ response.status === 'consumed' ||
156
+ response.status === 'not_found') {
157
+ throw new Error(`Authorization ${response.status}. Run \`mesrai auth login\` again.`);
158
+ }
159
+ await sleep(delay);
160
+ delay = Math.min(delay * 2, POLL_MAX_DELAY_MS);
161
+ }
162
+ throw new Error('Authorization timed out while polling for tokens');
163
+ }
164
+ function sleep(ms) {
165
+ return new Promise((resolve) => setTimeout(resolve, ms));
166
+ }
167
+ /**
168
+ * Cancellable timeout: returns a promise that rejects after `ms`, plus a
169
+ * `cancel()` to clear the underlying timer when the caller no longer
170
+ * needs it (e.g. when racing against another promise that won). Without
171
+ * `cancel()`, the unref'd timer would keep the event loop alive for the
172
+ * full duration even after the race resolved.
173
+ */
174
+ function timeout(ms, message) {
175
+ let timer;
176
+ const promise = new Promise((_, reject) => {
177
+ timer = setTimeout(() => reject(new Error(message)), ms);
178
+ });
179
+ return {
180
+ promise,
181
+ cancel: () => {
182
+ if (timer)
183
+ clearTimeout(timer);
184
+ },
185
+ };
186
+ }
187
+ //# sourceMappingURL=browser-login.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-login.service.js","sourceRoot":"","sources":["../../src/services/browser-login.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { CentralizedConfigActionResponse, CentralizedConfigStatus, ConfigRepository } from '../types/config.js';
2
+ type InitOptions = {
3
+ repository?: string;
4
+ syncOption: 'pr' | 'manual';
5
+ };
6
+ declare class CentralizedConfigService {
7
+ getStatus(): Promise<CentralizedConfigStatus>;
8
+ init(options: InitOptions): Promise<CentralizedConfigActionResponse & {
9
+ repository: ConfigRepository;
10
+ }>;
11
+ sync(): Promise<CentralizedConfigActionResponse>;
12
+ disable(): Promise<CentralizedConfigActionResponse>;
13
+ download(outPath: string): Promise<{
14
+ outputPath: string;
15
+ bytes: number;
16
+ }>;
17
+ private resolveRepositoryForInit;
18
+ private resolveCurrentRepositoryReference;
19
+ private toRepositoryFullName;
20
+ private requireTeamKey;
21
+ }
22
+ export declare const centralizedConfigService: CentralizedConfigService;
23
+ export {};
24
+ //# sourceMappingURL=centralized-config.service.d.ts.map