@mx-space/cli 0.15.0 → 0.15.1

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 (615) hide show
  1. package/README.md +1 -1
  2. package/dist/{Lexical.dev-Cck4n26y.mjs → Lexical.dev-BSvx45_E.mjs} +127 -94
  3. package/dist/{Lexical.node-D6wf2D5M.mjs → Lexical.node-kAh5GM2n.mjs} +1 -1
  4. package/dist/{Lexical.prod-DCwS1oTq.mjs → Lexical.prod-Bqwgb3ez.mjs} +4 -2
  5. package/dist/{LexicalClipboard.dev-CMkPHV7O.mjs → LexicalClipboard.dev-BWU3KXIa.mjs} +18 -14
  6. package/dist/{LexicalClipboard.node-m4nZ7IYw.mjs → LexicalClipboard.node-BygAdNdF.mjs} +1 -1
  7. package/dist/{LexicalClipboard.prod-B_rN1vE1.mjs → LexicalClipboard.prod-BtMuKNyT.mjs} +10 -10
  8. package/dist/{LexicalCodeCore.dev-DyJw3i8V.mjs → LexicalCodeCore.dev-CD2xgvDs.mjs} +43 -25
  9. package/dist/{LexicalCodeCore.prod-DPXLHQLF.mjs → LexicalCodeCore.prod-Bl6FFMc7.mjs} +6 -6
  10. package/dist/{LexicalDragon.dev-ZkNfMwrE.mjs → LexicalDragon.dev-BwdYhm4K.mjs} +2 -2
  11. package/dist/{LexicalDragon.node-Ds9oLUFh.mjs → LexicalDragon.node-CpJhkCVV.mjs} +1 -1
  12. package/dist/{LexicalDragon.prod-B58ic2av.mjs → LexicalDragon.prod-CvXmWwo1.mjs} +2 -2
  13. package/dist/{LexicalExtension.dev-DvwHs1Xv.mjs → LexicalExtension.dev-LcRLXI5Z.mjs} +25 -13
  14. package/dist/{LexicalExtension.node-5OymZQfy.mjs → LexicalExtension.node-BwJt2LXV.mjs} +1 -1
  15. package/dist/{LexicalExtension.prod-Ce0T5smQ.mjs → LexicalExtension.prod-lg8_33-H.mjs} +16 -13
  16. package/dist/{LexicalHeadless.dev-DA0WldSR.mjs → LexicalHeadless.dev-BeUbKBes.mjs} +1 -1
  17. package/dist/{LexicalHeadless.prod-1kQgKB6c.mjs → LexicalHeadless.prod-4gbIA8HM.mjs} +1 -1
  18. package/dist/{LexicalHtml.dev-BDB7CUrx.mjs → LexicalHtml.dev-BLdZWTCJ.mjs} +20 -14
  19. package/dist/{LexicalHtml.node-DpVNt7It.mjs → LexicalHtml.node-BeuJMvvt.mjs} +1 -1
  20. package/dist/{LexicalHtml.prod-HkxM5scw.mjs → LexicalHtml.prod-CHUyCocN.mjs} +4 -4
  21. package/dist/{LexicalLink.dev-C5zNJlrm.mjs → LexicalLink.dev-DgsFRqw0.mjs} +28 -21
  22. package/dist/{LexicalLink.prod-Bkt9hQAt.mjs → LexicalLink.prod-CkXkeKY2.mjs} +6 -5
  23. package/dist/{LexicalList.dev-B7VgME-m.mjs → LexicalList.dev-OOms3kQi.mjs} +4 -4
  24. package/dist/{LexicalList.prod-B8c7TDjH.mjs → LexicalList.prod-DzMBeqHn.mjs} +4 -4
  25. package/dist/{LexicalMarkdown.dev-B5z9kLbV.mjs → LexicalMarkdown.dev-DJLKbZtD.mjs} +40 -29
  26. package/dist/{LexicalMarkdown.prod-wKzw7FFH.mjs → LexicalMarkdown.prod-Cp21kDCU.mjs} +10 -7
  27. package/dist/{LexicalRichText.dev-CUd6Li5F.mjs → LexicalRichText.dev-0rkAGjUf.mjs} +15 -11
  28. package/dist/{LexicalRichText.node-BKfaQ-CH.mjs → LexicalRichText.node-Cd-BySPE.mjs} +4 -4
  29. package/dist/{LexicalRichText.prod-SBewjJHx.mjs → LexicalRichText.prod-DTQiEr8C.mjs} +17 -11
  30. package/dist/{LexicalSelection.dev-D27JOCqj.mjs → LexicalSelection.dev-Bi0VlUEv.mjs} +28 -24
  31. package/dist/{LexicalSelection.node-DBEwPjBu.mjs → LexicalSelection.node-t2U46EF_.mjs} +1 -1
  32. package/dist/{LexicalSelection.prod-OaYhXHOL.mjs → LexicalSelection.prod-CrFG111g.mjs} +2 -2
  33. package/dist/{LexicalTable.dev-6IFFOAE0.mjs → LexicalTable.dev-D-sFhO-o.mjs} +33 -28
  34. package/dist/{LexicalTable.prod-2CaLZ7fH.mjs → LexicalTable.prod-DwYaa_dN.mjs} +10 -9
  35. package/dist/{LexicalUtils.dev-DJA7J_7v.mjs → LexicalUtils.dev-Q2q3-UDM.mjs} +8 -5
  36. package/dist/{LexicalUtils.node-Df9oPTlA.mjs → LexicalUtils.node-Dl7OvqJV.mjs} +1 -1
  37. package/dist/{LexicalUtils.prod-Bb7V4Ewg.mjs → LexicalUtils.prod-CBnq_iEV.mjs} +7 -6
  38. package/dist/bin/mxs.mjs +1 -1
  39. package/dist/esm-CNZ7kdTg.mjs +2 -0
  40. package/dist/{esm-DLzrv7gD.mjs → esm-ZXjJmLEC.mjs} +257 -260
  41. package/dist/index.mjs +1 -1
  42. package/dist/{mxs-BIRW5Axj.mjs → mxs-DC9zR3f2.mjs} +759 -539
  43. package/dist/{rolldown-runtime-JspESFgx.mjs → rolldown-runtime-B4iAMlE-.mjs} +1 -1
  44. package/dist/src/bin/mxs.d.ts +2 -0
  45. package/dist/src/bin/mxs.js +310 -0
  46. package/dist/src/cli/ai/_poll.d.ts +12 -0
  47. package/dist/src/cli/ai/_poll.js +38 -0
  48. package/dist/src/cli/ai/_resolve.d.ts +8 -0
  49. package/dist/src/cli/ai/_resolve.js +27 -0
  50. package/dist/src/cli/ai/index.d.ts +127 -0
  51. package/dist/src/cli/ai/index.js +46 -0
  52. package/dist/src/cli/ai/insights/by-article.d.ts +10 -0
  53. package/dist/src/cli/ai/insights/by-article.js +21 -0
  54. package/dist/src/cli/ai/insights/delete.d.ts +7 -0
  55. package/dist/src/cli/ai/insights/delete.js +18 -0
  56. package/dist/src/cli/ai/insights/edit.d.ts +8 -0
  57. package/dist/src/cli/ai/insights/edit.js +54 -0
  58. package/dist/src/cli/ai/insights/get.d.ts +6 -0
  59. package/dist/src/cli/ai/insights/get.js +11 -0
  60. package/dist/src/cli/ai/insights/index.d.ts +30 -0
  61. package/dist/src/cli/ai/insights/index.js +17 -0
  62. package/dist/src/cli/ai/insights/list.d.ts +10 -0
  63. package/dist/src/cli/ai/insights/list.js +20 -0
  64. package/dist/src/cli/ai/insights/refresh.d.ts +10 -0
  65. package/dist/src/cli/ai/insights/refresh.js +25 -0
  66. package/dist/src/cli/ai/insights/translate.d.ts +10 -0
  67. package/dist/src/cli/ai/insights/translate.js +25 -0
  68. package/dist/src/cli/ai/overview/by-article.d.ts +7 -0
  69. package/dist/src/cli/ai/overview/by-article.js +15 -0
  70. package/dist/src/cli/ai/overview/index.d.ts +11 -0
  71. package/dist/src/cli/ai/overview/index.js +4 -0
  72. package/dist/src/cli/ai/overview/list.d.ts +10 -0
  73. package/dist/src/cli/ai/overview/list.js +20 -0
  74. package/dist/src/cli/ai/summary/by-article.d.ts +10 -0
  75. package/dist/src/cli/ai/summary/by-article.js +21 -0
  76. package/dist/src/cli/ai/summary/delete.d.ts +7 -0
  77. package/dist/src/cli/ai/summary/delete.js +18 -0
  78. package/dist/src/cli/ai/summary/edit.d.ts +8 -0
  79. package/dist/src/cli/ai/summary/edit.js +54 -0
  80. package/dist/src/cli/ai/summary/get.d.ts +6 -0
  81. package/dist/src/cli/ai/summary/get.js +11 -0
  82. package/dist/src/cli/ai/summary/index.d.ts +30 -0
  83. package/dist/src/cli/ai/summary/index.js +9 -0
  84. package/dist/src/cli/ai/summary/list.d.ts +10 -0
  85. package/dist/src/cli/ai/summary/list.js +20 -0
  86. package/dist/src/cli/ai/summary/regen.d.ts +10 -0
  87. package/dist/src/cli/ai/summary/regen.js +25 -0
  88. package/dist/src/cli/ai/summary/translate.d.ts +10 -0
  89. package/dist/src/cli/ai/summary/translate.js +25 -0
  90. package/dist/src/cli/ai/translate/by-article.d.ts +9 -0
  91. package/dist/src/cli/ai/translate/by-article.js +19 -0
  92. package/dist/src/cli/ai/translate/delete.d.ts +7 -0
  93. package/dist/src/cli/ai/translate/delete.js +18 -0
  94. package/dist/src/cli/ai/translate/edit.d.ts +8 -0
  95. package/dist/src/cli/ai/translate/edit.js +97 -0
  96. package/dist/src/cli/ai/translate/entries/delete.d.ts +7 -0
  97. package/dist/src/cli/ai/translate/entries/delete.js +18 -0
  98. package/dist/src/cli/ai/translate/entries/edit.d.ts +8 -0
  99. package/dist/src/cli/ai/translate/entries/edit.js +73 -0
  100. package/dist/src/cli/ai/translate/entries/generate.d.ts +7 -0
  101. package/dist/src/cli/ai/translate/entries/generate.js +15 -0
  102. package/dist/src/cli/ai/translate/entries/index.d.ts +17 -0
  103. package/dist/src/cli/ai/translate/entries/index.js +6 -0
  104. package/dist/src/cli/ai/translate/entries/list.d.ts +10 -0
  105. package/dist/src/cli/ai/translate/entries/list.js +20 -0
  106. package/dist/src/cli/ai/translate/get.d.ts +6 -0
  107. package/dist/src/cli/ai/translate/get.js +11 -0
  108. package/dist/src/cli/ai/translate/index.d.ts +40 -0
  109. package/dist/src/cli/ai/translate/index.js +19 -0
  110. package/dist/src/cli/ai/translate/languages.d.ts +7 -0
  111. package/dist/src/cli/ai/translate/languages.js +15 -0
  112. package/dist/src/cli/ai/translate/list.d.ts +9 -0
  113. package/dist/src/cli/ai/translate/list.js +19 -0
  114. package/dist/src/cli/ai/translate/run.d.ts +10 -0
  115. package/dist/src/cli/ai/translate/run.js +31 -0
  116. package/dist/src/cli/ai/tts/by-article.d.ts +7 -0
  117. package/dist/src/cli/ai/tts/by-article.js +15 -0
  118. package/dist/src/cli/ai/tts/delete.d.ts +7 -0
  119. package/dist/src/cli/ai/tts/delete.js +18 -0
  120. package/dist/src/cli/ai/tts/index.d.ts +22 -0
  121. package/dist/src/cli/ai/tts/index.js +7 -0
  122. package/dist/src/cli/ai/tts/list.d.ts +10 -0
  123. package/dist/src/cli/ai/tts/list.js +20 -0
  124. package/dist/src/cli/ai/tts/run.d.ts +10 -0
  125. package/dist/src/cli/ai/tts/run.js +25 -0
  126. package/dist/src/cli/ai/tts/voices.d.ts +7 -0
  127. package/dist/src/cli/ai/tts/voices.js +12 -0
  128. package/dist/src/cli/ai/views.d.ts +3 -0
  129. package/dist/src/cli/ai/views.js +45 -0
  130. package/dist/src/cli/auth/index.d.ts +6 -0
  131. package/dist/src/cli/auth/index.js +22 -0
  132. package/dist/src/cli/auth/login.d.ts +11 -0
  133. package/dist/src/cli/auth/login.js +168 -0
  134. package/dist/src/cli/auth/logout.d.ts +6 -0
  135. package/dist/src/cli/auth/logout.js +21 -0
  136. package/dist/src/cli/auth/status.d.ts +4 -0
  137. package/dist/src/cli/auth/status.js +31 -0
  138. package/dist/src/cli/auth/view.d.ts +25 -0
  139. package/dist/src/cli/auth/view.js +46 -0
  140. package/dist/src/cli/auth/whoami.d.ts +7 -0
  141. package/dist/src/cli/auth/whoami.js +44 -0
  142. package/dist/src/cli/category/create.d.ts +10 -0
  143. package/dist/src/cli/category/create.js +24 -0
  144. package/dist/src/cli/category/delete.d.ts +8 -0
  145. package/dist/src/cli/category/delete.js +21 -0
  146. package/dist/src/cli/category/get.d.ts +6 -0
  147. package/dist/src/cli/category/get.js +11 -0
  148. package/dist/src/cli/category/index.d.ts +20 -0
  149. package/dist/src/cli/category/index.js +41 -0
  150. package/dist/src/cli/category/list.d.ts +4 -0
  151. package/dist/src/cli/category/list.js +10 -0
  152. package/dist/src/cli/category/update.d.ts +12 -0
  153. package/dist/src/cli/category/update.js +34 -0
  154. package/dist/src/cli/comment/_flags.d.ts +28 -0
  155. package/dist/src/cli/comment/_flags.js +48 -0
  156. package/dist/src/cli/comment/approve.d.ts +9 -0
  157. package/dist/src/cli/comment/approve.js +23 -0
  158. package/dist/src/cli/comment/delete.d.ts +9 -0
  159. package/dist/src/cli/comment/delete.js +24 -0
  160. package/dist/src/cli/comment/get.d.ts +6 -0
  161. package/dist/src/cli/comment/get.js +12 -0
  162. package/dist/src/cli/comment/index.d.ts +34 -0
  163. package/dist/src/cli/comment/index.js +53 -0
  164. package/dist/src/cli/comment/list.d.ts +9 -0
  165. package/dist/src/cli/comment/list.js +20 -0
  166. package/dist/src/cli/comment/reject.d.ts +9 -0
  167. package/dist/src/cli/comment/reject.js +23 -0
  168. package/dist/src/cli/comment/reply.d.ts +9 -0
  169. package/dist/src/cli/comment/reply.js +31 -0
  170. package/dist/src/cli/comment/unread.d.ts +7 -0
  171. package/dist/src/cli/comment/unread.js +21 -0
  172. package/dist/src/cli/comment/view.d.ts +3 -0
  173. package/dist/src/cli/comment/view.js +197 -0
  174. package/dist/src/cli/config/edit.d.ts +5 -0
  175. package/dist/src/cli/config/edit.js +36 -0
  176. package/dist/src/cli/config/get.d.ts +6 -0
  177. package/dist/src/cli/config/get.js +11 -0
  178. package/dist/src/cli/config/index.d.ts +10 -0
  179. package/dist/src/cli/config/index.js +22 -0
  180. package/dist/src/cli/config/list.d.ts +4 -0
  181. package/dist/src/cli/config/list.js +10 -0
  182. package/dist/src/cli/config/set.d.ts +9 -0
  183. package/dist/src/cli/config/set.js +48 -0
  184. package/dist/src/cli/draft/_shared.d.ts +27 -0
  185. package/dist/src/cli/draft/_shared.js +85 -0
  186. package/dist/src/cli/draft/create.d.ts +21 -0
  187. package/dist/src/cli/draft/create.js +34 -0
  188. package/dist/src/cli/draft/delete.d.ts +7 -0
  189. package/dist/src/cli/draft/delete.js +20 -0
  190. package/dist/src/cli/draft/get.d.ts +6 -0
  191. package/dist/src/cli/draft/get.js +11 -0
  192. package/dist/src/cli/draft/index.d.ts +54 -0
  193. package/dist/src/cli/draft/index.js +42 -0
  194. package/dist/src/cli/draft/list.d.ts +11 -0
  195. package/dist/src/cli/draft/list.js +23 -0
  196. package/dist/src/cli/draft/publish.d.ts +8 -0
  197. package/dist/src/cli/draft/publish.js +64 -0
  198. package/dist/src/cli/draft/update.d.ts +22 -0
  199. package/dist/src/cli/draft/update.js +29 -0
  200. package/dist/src/cli/file/_shared.d.ts +6 -0
  201. package/dist/src/cli/file/_shared.js +5 -0
  202. package/dist/src/cli/file/delete.d.ts +8 -0
  203. package/dist/src/cli/file/delete.js +21 -0
  204. package/dist/src/cli/file/index.d.ts +19 -0
  205. package/dist/src/cli/file/index.js +33 -0
  206. package/dist/src/cli/file/list.d.ts +6 -0
  207. package/dist/src/cli/file/list.js +11 -0
  208. package/dist/src/cli/file/rename.d.ts +8 -0
  209. package/dist/src/cli/file/rename.js +16 -0
  210. package/dist/src/cli/file/upload.d.ts +9 -0
  211. package/dist/src/cli/file/upload.js +32 -0
  212. package/dist/src/cli/help/index.d.ts +62 -0
  213. package/dist/src/cli/help/index.js +276 -0
  214. package/dist/src/cli/help/registry.d.ts +28 -0
  215. package/dist/src/cli/help/registry.js +29 -0
  216. package/dist/src/cli/note/_flags.d.ts +66 -0
  217. package/dist/src/cli/note/_flags.js +73 -0
  218. package/dist/src/cli/note/create.d.ts +23 -0
  219. package/dist/src/cli/note/create.js +25 -0
  220. package/dist/src/cli/note/delete.d.ts +8 -0
  221. package/dist/src/cli/note/delete.js +21 -0
  222. package/dist/src/cli/note/edit.d.ts +28 -0
  223. package/dist/src/cli/note/edit.js +114 -0
  224. package/dist/src/cli/note/get.d.ts +6 -0
  225. package/dist/src/cli/note/get.js +29 -0
  226. package/dist/src/cli/note/index.d.ts +77 -0
  227. package/dist/src/cli/note/index.js +63 -0
  228. package/dist/src/cli/note/list.d.ts +10 -0
  229. package/dist/src/cli/note/list.js +22 -0
  230. package/dist/src/cli/note/publish.d.ts +7 -0
  231. package/dist/src/cli/note/publish.js +17 -0
  232. package/dist/src/cli/note/unpublish.d.ts +7 -0
  233. package/dist/src/cli/note/unpublish.js +17 -0
  234. package/dist/src/cli/note/update.d.ts +25 -0
  235. package/dist/src/cli/note/update.js +36 -0
  236. package/dist/src/cli/note/view.d.ts +3 -0
  237. package/dist/src/cli/note/view.js +162 -0
  238. package/dist/src/cli/page/create.d.ts +41 -0
  239. package/dist/src/cli/page/create.js +56 -0
  240. package/dist/src/cli/page/delete.d.ts +7 -0
  241. package/dist/src/cli/page/delete.js +37 -0
  242. package/dist/src/cli/page/edit.d.ts +19 -0
  243. package/dist/src/cli/page/edit.js +117 -0
  244. package/dist/src/cli/page/get.d.ts +6 -0
  245. package/dist/src/cli/page/get.js +16 -0
  246. package/dist/src/cli/page/index.d.ts +44 -0
  247. package/dist/src/cli/page/index.js +38 -0
  248. package/dist/src/cli/page/list.d.ts +4 -0
  249. package/dist/src/cli/page/list.js +10 -0
  250. package/dist/src/cli/page/update.d.ts +16 -0
  251. package/dist/src/cli/page/update.js +48 -0
  252. package/dist/src/cli/page/view.d.ts +2 -0
  253. package/dist/src/cli/page/view.js +79 -0
  254. package/dist/src/cli/post/_flags.d.ts +66 -0
  255. package/dist/src/cli/post/_flags.js +96 -0
  256. package/dist/src/cli/post/apply.d.ts +7 -0
  257. package/dist/src/cli/post/apply.js +70 -0
  258. package/dist/src/cli/post/create.d.ts +21 -0
  259. package/dist/src/cli/post/create.js +24 -0
  260. package/dist/src/cli/post/delete.d.ts +8 -0
  261. package/dist/src/cli/post/delete.js +21 -0
  262. package/dist/src/cli/post/edit.d.ts +26 -0
  263. package/dist/src/cli/post/edit.js +115 -0
  264. package/dist/src/cli/post/get.d.ts +7 -0
  265. package/dist/src/cli/post/get.js +15 -0
  266. package/dist/src/cli/post/index.d.ts +91 -0
  267. package/dist/src/cli/post/index.js +73 -0
  268. package/dist/src/cli/post/list.d.ts +10 -0
  269. package/dist/src/cli/post/list.js +23 -0
  270. package/dist/src/cli/post/publish.d.ts +7 -0
  271. package/dist/src/cli/post/publish.js +17 -0
  272. package/dist/src/cli/post/stage.d.ts +23 -0
  273. package/dist/src/cli/post/stage.js +55 -0
  274. package/dist/src/cli/post/unpublish.d.ts +7 -0
  275. package/dist/src/cli/post/unpublish.js +17 -0
  276. package/dist/src/cli/post/update.d.ts +23 -0
  277. package/dist/src/cli/post/update.js +38 -0
  278. package/dist/src/cli/post/view.d.ts +3 -0
  279. package/dist/src/cli/post/view.js +150 -0
  280. package/dist/src/cli/preview/index.d.ts +13 -0
  281. package/dist/src/cli/preview/index.js +226 -0
  282. package/dist/src/cli/profile/index.d.ts +14 -0
  283. package/dist/src/cli/profile/index.js +36 -0
  284. package/dist/src/cli/profile/ls.d.ts +5 -0
  285. package/dist/src/cli/profile/ls.js +26 -0
  286. package/dist/src/cli/profile/mark.d.ts +9 -0
  287. package/dist/src/cli/profile/mark.js +23 -0
  288. package/dist/src/cli/profile/rm.d.ts +12 -0
  289. package/dist/src/cli/profile/rm.js +50 -0
  290. package/dist/src/cli/profile/show.d.ts +9 -0
  291. package/dist/src/cli/profile/show.js +40 -0
  292. package/dist/src/cli/profile/use.d.ts +6 -0
  293. package/dist/src/cli/profile/use.js +11 -0
  294. package/dist/src/cli/profile/view.d.ts +8 -0
  295. package/dist/src/cli/profile/view.js +21 -0
  296. package/dist/src/cli/project/_flags.d.ts +56 -0
  297. package/dist/src/cli/project/_flags.js +130 -0
  298. package/dist/src/cli/project/create.d.ts +17 -0
  299. package/dist/src/cli/project/create.js +25 -0
  300. package/dist/src/cli/project/delete.d.ts +8 -0
  301. package/dist/src/cli/project/delete.js +22 -0
  302. package/dist/src/cli/project/edit.d.ts +11 -0
  303. package/dist/src/cli/project/edit.js +61 -0
  304. package/dist/src/cli/project/get.d.ts +7 -0
  305. package/dist/src/cli/project/get.js +14 -0
  306. package/dist/src/cli/project/index.d.ts +43 -0
  307. package/dist/src/cli/project/index.js +52 -0
  308. package/dist/src/cli/project/list.d.ts +8 -0
  309. package/dist/src/cli/project/list.js +19 -0
  310. package/dist/src/cli/project/update.d.ts +18 -0
  311. package/dist/src/cli/project/update.js +24 -0
  312. package/dist/src/cli/project/view-cmd.d.ts +7 -0
  313. package/dist/src/cli/project/view-cmd.js +15 -0
  314. package/dist/src/cli/project/view.d.ts +3 -0
  315. package/dist/src/cli/project/view.js +102 -0
  316. package/dist/src/cli/render/codehighlight.d.ts +8 -0
  317. package/dist/src/cli/render/codehighlight.js +264 -0
  318. package/dist/src/cli/render/envelope.d.ts +7 -0
  319. package/dist/src/cli/render/envelope.js +23 -0
  320. package/dist/src/cli/render/frontmatter.d.ts +8 -0
  321. package/dist/src/cli/render/frontmatter.js +50 -0
  322. package/dist/src/cli/render/helpers.d.ts +2 -0
  323. package/dist/src/cli/render/helpers.js +11 -0
  324. package/dist/src/cli/render/index.d.ts +7 -0
  325. package/dist/src/cli/render/index.js +10 -0
  326. package/dist/src/cli/render/lexical/blocks.d.ts +19 -0
  327. package/dist/src/cli/render/lexical/blocks.js +208 -0
  328. package/dist/src/cli/render/lexical/code.d.ts +2 -0
  329. package/dist/src/cli/render/lexical/code.js +22 -0
  330. package/dist/src/cli/render/lexical/embeds.d.ts +6 -0
  331. package/dist/src/cli/render/lexical/embeds.js +51 -0
  332. package/dist/src/cli/render/lexical/index.d.ts +9 -0
  333. package/dist/src/cli/render/lexical/index.js +25 -0
  334. package/dist/src/cli/render/lexical/inlines.d.ts +17 -0
  335. package/dist/src/cli/render/lexical/inlines.js +76 -0
  336. package/dist/src/cli/render/lexical/parser.d.ts +10 -0
  337. package/dist/src/cli/render/lexical/parser.js +64 -0
  338. package/dist/src/cli/render/lexical/walker.d.ts +21 -0
  339. package/dist/src/cli/render/lexical/walker.js +51 -0
  340. package/dist/src/cli/render/markdown.d.ts +18 -0
  341. package/dist/src/cli/render/markdown.js +196 -0
  342. package/dist/src/cli/render/metadata-block.d.ts +14 -0
  343. package/dist/src/cli/render/metadata-block.js +50 -0
  344. package/dist/src/cli/skill/all.d.ts +4 -0
  345. package/dist/src/cli/skill/all.js +11 -0
  346. package/dist/src/cli/skill/get.d.ts +6 -0
  347. package/dist/src/cli/skill/get.js +12 -0
  348. package/dist/src/cli/skill/index.d.ts +10 -0
  349. package/dist/src/cli/skill/index.js +34 -0
  350. package/dist/src/cli/skill/list.d.ts +4 -0
  351. package/dist/src/cli/skill/list.js +11 -0
  352. package/dist/src/cli/skill/search.d.ts +6 -0
  353. package/dist/src/cli/skill/search.js +12 -0
  354. package/dist/src/cli/skill/views.d.ts +6 -0
  355. package/dist/src/cli/skill/views.js +90 -0
  356. package/dist/src/cli/snippet/_flags.d.ts +57 -0
  357. package/dist/src/cli/snippet/_flags.js +123 -0
  358. package/dist/src/cli/snippet/_resolve.d.ts +4 -0
  359. package/dist/src/cli/snippet/_resolve.js +32 -0
  360. package/dist/src/cli/snippet/_sync.d.ts +5 -0
  361. package/dist/src/cli/snippet/_sync.js +54 -0
  362. package/dist/src/cli/snippet/create.d.ts +19 -0
  363. package/dist/src/cli/snippet/create.js +35 -0
  364. package/dist/src/cli/snippet/delete.d.ts +8 -0
  365. package/dist/src/cli/snippet/delete.js +28 -0
  366. package/dist/src/cli/snippet/edit.d.ts +7 -0
  367. package/dist/src/cli/snippet/edit.js +29 -0
  368. package/dist/src/cli/snippet/get.d.ts +6 -0
  369. package/dist/src/cli/snippet/get.js +12 -0
  370. package/dist/src/cli/snippet/index.d.ts +43 -0
  371. package/dist/src/cli/snippet/index.js +58 -0
  372. package/dist/src/cli/snippet/list.d.ts +9 -0
  373. package/dist/src/cli/snippet/list.js +20 -0
  374. package/dist/src/cli/snippet/pull.d.ts +8 -0
  375. package/dist/src/cli/snippet/pull.js +33 -0
  376. package/dist/src/cli/snippet/push.d.ts +10 -0
  377. package/dist/src/cli/snippet/push.js +31 -0
  378. package/dist/src/cli/snippet/update.d.ts +8 -0
  379. package/dist/src/cli/snippet/update.js +16 -0
  380. package/dist/src/cli/topic/create.d.ts +10 -0
  381. package/dist/src/cli/topic/create.js +24 -0
  382. package/dist/src/cli/topic/delete.d.ts +7 -0
  383. package/dist/src/cli/topic/delete.js +37 -0
  384. package/dist/src/cli/topic/get.d.ts +6 -0
  385. package/dist/src/cli/topic/get.js +15 -0
  386. package/dist/src/cli/topic/index.d.ts +20 -0
  387. package/dist/src/cli/topic/index.js +32 -0
  388. package/dist/src/cli/topic/list.d.ts +4 -0
  389. package/dist/src/cli/topic/list.js +10 -0
  390. package/dist/src/cli/topic/update.d.ts +11 -0
  391. package/dist/src/cli/topic/update.js +51 -0
  392. package/dist/src/cli/ui/index.d.ts +24 -0
  393. package/dist/src/cli/ui/index.js +83 -0
  394. package/dist/src/cli/update/index.d.ts +10 -0
  395. package/dist/src/cli/update/index.js +142 -0
  396. package/dist/src/domain/admin-link.d.ts +12 -0
  397. package/dist/src/domain/admin-link.js +45 -0
  398. package/dist/src/domain/content-spec.d.ts +20 -0
  399. package/dist/src/domain/content-spec.js +78 -0
  400. package/dist/src/domain/envelope-compat.d.ts +68 -0
  401. package/dist/src/domain/envelope-compat.js +121 -0
  402. package/dist/src/domain/envelope.d.ts +34 -0
  403. package/dist/src/domain/envelope.js +355 -0
  404. package/dist/src/domain/errors.d.ts +336 -0
  405. package/dist/src/domain/errors.js +239 -0
  406. package/dist/src/domain/gate.d.ts +14 -0
  407. package/dist/src/domain/gate.js +18 -0
  408. package/dist/src/domain/payload.d.ts +64 -0
  409. package/dist/src/domain/payload.js +237 -0
  410. package/dist/src/domain/preflight-guards.d.ts +54 -0
  411. package/dist/src/domain/preflight-guards.js +130 -0
  412. package/dist/src/domain/runtime-flags.d.ts +33 -0
  413. package/dist/src/domain/runtime-flags.js +166 -0
  414. package/dist/src/domain/schema/api-envelope.d.ts +67 -0
  415. package/dist/src/domain/schema/api-envelope.js +65 -0
  416. package/dist/src/domain/schema/category.d.ts +23 -0
  417. package/dist/src/domain/schema/category.js +19 -0
  418. package/dist/src/domain/schema/config.d.ts +13 -0
  419. package/dist/src/domain/schema/config.js +18 -0
  420. package/dist/src/domain/schema/note.d.ts +76 -0
  421. package/dist/src/domain/schema/note.js +35 -0
  422. package/dist/src/domain/schema/page.d.ts +40 -0
  423. package/dist/src/domain/schema/page.js +22 -0
  424. package/dist/src/domain/schema/post.d.ts +68 -0
  425. package/dist/src/domain/schema/post.js +35 -0
  426. package/dist/src/domain/schema/profile.d.ts +14 -0
  427. package/dist/src/domain/schema/profile.js +22 -0
  428. package/dist/src/domain/schema/topic.d.ts +24 -0
  429. package/dist/src/domain/schema/topic.js +16 -0
  430. package/dist/src/domain/version.d.ts +15 -0
  431. package/dist/src/domain/version.js +43 -0
  432. package/dist/src/index.d.ts +4 -0
  433. package/dist/src/index.js +8 -0
  434. package/dist/src/layers/App.d.ts +30 -0
  435. package/dist/src/layers/App.js +39 -0
  436. package/dist/src/services/Ai/index.d.ts +13 -0
  437. package/dist/src/services/Ai/index.js +127 -0
  438. package/dist/src/services/Ai/overview.d.ts +7 -0
  439. package/dist/src/services/Ai/overview.js +11 -0
  440. package/dist/src/services/Ai/resources.d.ts +7 -0
  441. package/dist/src/services/Ai/resources.js +59 -0
  442. package/dist/src/services/Ai/shared.d.ts +2 -0
  443. package/dist/src/services/Ai/shared.js +11 -0
  444. package/dist/src/services/Ai/tasks.d.ts +8 -0
  445. package/dist/src/services/Ai/tasks.js +144 -0
  446. package/dist/src/services/Ai/types.d.ts +130 -0
  447. package/dist/src/services/Ai/types.js +1 -0
  448. package/dist/src/services/Api.d.ts +67 -0
  449. package/dist/src/services/Api.js +348 -0
  450. package/dist/src/services/Auth.d.ts +101 -0
  451. package/dist/src/services/Auth.js +402 -0
  452. package/dist/src/services/Backup.d.ts +8 -0
  453. package/dist/src/services/Backup.js +4 -0
  454. package/dist/src/services/Cache.d.ts +8 -0
  455. package/dist/src/services/Cache.js +4 -0
  456. package/dist/src/services/Comment.d.ts +48 -0
  457. package/dist/src/services/Comment.js +102 -0
  458. package/dist/src/services/Config.d.ts +95 -0
  459. package/dist/src/services/Config.js +359 -0
  460. package/dist/src/services/Editor.d.ts +28 -0
  461. package/dist/src/services/Editor.js +95 -0
  462. package/dist/src/services/Lexical.d.ts +27 -0
  463. package/dist/src/services/Lexical.js +56 -0
  464. package/dist/src/services/Migration.d.ts +31 -0
  465. package/dist/src/services/Migration.js +177 -0
  466. package/dist/src/services/Profile.d.ts +29 -0
  467. package/dist/src/services/Profile.js +115 -0
  468. package/dist/src/services/Renderer/content.d.ts +16 -0
  469. package/dist/src/services/Renderer/content.js +110 -0
  470. package/dist/src/services/Renderer/datetime.d.ts +38 -0
  471. package/dist/src/services/Renderer/datetime.js +147 -0
  472. package/dist/src/services/Renderer/errors.d.ts +3 -0
  473. package/dist/src/services/Renderer/errors.js +59 -0
  474. package/dist/src/services/Renderer/index.d.ts +13 -0
  475. package/dist/src/services/Renderer/index.js +11 -0
  476. package/dist/src/services/Renderer/lists.d.ts +1 -0
  477. package/dist/src/services/Renderer/lists.js +101 -0
  478. package/dist/src/services/Renderer/options.d.ts +10 -0
  479. package/dist/src/services/Renderer/options.js +13 -0
  480. package/dist/src/services/Renderer/primitives.d.ts +4 -0
  481. package/dist/src/services/Renderer/primitives.js +12 -0
  482. package/dist/src/services/Renderer/service.d.ts +35 -0
  483. package/dist/src/services/Renderer/service.js +123 -0
  484. package/dist/src/services/Renderer/view.d.ts +16 -0
  485. package/dist/src/services/Renderer/view.js +1 -0
  486. package/dist/src/services/Resolver.d.ts +47 -0
  487. package/dist/src/services/Resolver.js +269 -0
  488. package/dist/src/services/Skill.d.ts +29 -0
  489. package/dist/src/services/Skill.js +421 -0
  490. package/dist/src/services/UpdateNotifier.d.ts +162 -0
  491. package/dist/src/services/UpdateNotifier.js +572 -0
  492. package/dist/test/cli/ai/ai.test.d.ts +1 -0
  493. package/dist/test/cli/ai/ai.test.js +507 -0
  494. package/dist/test/cli/ai/verbs.test.d.ts +1 -0
  495. package/dist/test/cli/ai/verbs.test.js +235 -0
  496. package/dist/test/cli/auth/login.test.d.ts +1 -0
  497. package/dist/test/cli/auth/login.test.js +236 -0
  498. package/dist/test/cli/auth/logout-whoami.test.d.ts +1 -0
  499. package/dist/test/cli/auth/logout-whoami.test.js +124 -0
  500. package/dist/test/cli/auth/status.test.d.ts +1 -0
  501. package/dist/test/cli/auth/status.test.js +90 -0
  502. package/dist/test/cli/category/category.test.d.ts +1 -0
  503. package/dist/test/cli/category/category.test.js +175 -0
  504. package/dist/test/cli/comment/comment.test.d.ts +1 -0
  505. package/dist/test/cli/comment/comment.test.js +445 -0
  506. package/dist/test/cli/config/config.test.d.ts +1 -0
  507. package/dist/test/cli/config/config.test.js +281 -0
  508. package/dist/test/cli/edit-roundtrip.test.d.ts +1 -0
  509. package/dist/test/cli/edit-roundtrip.test.js +259 -0
  510. package/dist/test/cli/file/file.test.d.ts +1 -0
  511. package/dist/test/cli/file/file.test.js +185 -0
  512. package/dist/test/cli/help.test.d.ts +1 -0
  513. package/dist/test/cli/help.test.js +289 -0
  514. package/dist/test/cli/note/create.test.d.ts +1 -0
  515. package/dist/test/cli/note/create.test.js +155 -0
  516. package/dist/test/cli/note/list.test.d.ts +1 -0
  517. package/dist/test/cli/note/list.test.js +115 -0
  518. package/dist/test/cli/note/publish.test.d.ts +1 -0
  519. package/dist/test/cli/note/publish.test.js +123 -0
  520. package/dist/test/cli/page/page.test.d.ts +1 -0
  521. package/dist/test/cli/page/page.test.js +185 -0
  522. package/dist/test/cli/post/create.test.d.ts +1 -0
  523. package/dist/test/cli/post/create.test.js +172 -0
  524. package/dist/test/cli/post/list.test.d.ts +1 -0
  525. package/dist/test/cli/post/list.test.js +133 -0
  526. package/dist/test/cli/post/publish.test.d.ts +1 -0
  527. package/dist/test/cli/post/publish.test.js +139 -0
  528. package/dist/test/cli/post/stage-apply.test.d.ts +1 -0
  529. package/dist/test/cli/post/stage-apply.test.js +215 -0
  530. package/dist/test/cli/post/update.test.d.ts +1 -0
  531. package/dist/test/cli/post/update.test.js +160 -0
  532. package/dist/test/cli/post-note-crud.test.d.ts +1 -0
  533. package/dist/test/cli/post-note-crud.test.js +362 -0
  534. package/dist/test/cli/profile/ls.test.d.ts +1 -0
  535. package/dist/test/cli/profile/ls.test.js +93 -0
  536. package/dist/test/cli/profile/mark-use.test.d.ts +1 -0
  537. package/dist/test/cli/profile/mark-use.test.js +216 -0
  538. package/dist/test/cli/project-crud.test.d.ts +1 -0
  539. package/dist/test/cli/project-crud.test.js +315 -0
  540. package/dist/test/cli/render/lexical.test.d.ts +1 -0
  541. package/dist/test/cli/render/lexical.test.js +216 -0
  542. package/dist/test/cli/render/markdown.test.d.ts +1 -0
  543. package/dist/test/cli/render/markdown.test.js +39 -0
  544. package/dist/test/cli/snippet-crud.test.d.ts +1 -0
  545. package/dist/test/cli/snippet-crud.test.js +293 -0
  546. package/dist/test/cli/topic/topic.test.d.ts +1 -0
  547. package/dist/test/cli/topic/topic.test.js +181 -0
  548. package/dist/test/cli/update.test.d.ts +1 -0
  549. package/dist/test/cli/update.test.js +395 -0
  550. package/dist/test/domain/content-spec.test.d.ts +1 -0
  551. package/dist/test/domain/content-spec.test.js +126 -0
  552. package/dist/test/domain/envelope-compat.test.d.ts +1 -0
  553. package/dist/test/domain/envelope-compat.test.js +126 -0
  554. package/dist/test/domain/envelope.test.d.ts +1 -0
  555. package/dist/test/domain/envelope.test.js +149 -0
  556. package/dist/test/domain/errors.test.d.ts +1 -0
  557. package/dist/test/domain/errors.test.js +127 -0
  558. package/dist/test/domain/gate.test.d.ts +1 -0
  559. package/dist/test/domain/gate.test.js +128 -0
  560. package/dist/test/domain/payload.test.d.ts +1 -0
  561. package/dist/test/domain/payload.test.js +259 -0
  562. package/dist/test/helper/test-fs.d.ts +24 -0
  563. package/dist/test/helper/test-fs.js +161 -0
  564. package/dist/test/helper/test-http.d.ts +31 -0
  565. package/dist/test/helper/test-http.js +66 -0
  566. package/dist/test/integration/_helpers.d.ts +5 -0
  567. package/dist/test/integration/_helpers.js +24 -0
  568. package/dist/test/integration/cli-error-envelope.test.d.ts +1 -0
  569. package/dist/test/integration/cli-error-envelope.test.js +137 -0
  570. package/dist/test/integration/cli-help-render.test.d.ts +1 -0
  571. package/dist/test/integration/cli-help-render.test.js +149 -0
  572. package/dist/test/integration/cli-help.test.d.ts +1 -0
  573. package/dist/test/integration/cli-help.test.js +67 -0
  574. package/dist/test/integration/cli-post-list.test.d.ts +1 -0
  575. package/dist/test/integration/cli-post-list.test.js +140 -0
  576. package/dist/test/integration/cli-skill.test.d.ts +1 -0
  577. package/dist/test/integration/cli-skill.test.js +74 -0
  578. package/dist/test/integration/cli-version.test.d.ts +1 -0
  579. package/dist/test/integration/cli-version.test.js +37 -0
  580. package/dist/test/services/Api.test.d.ts +1 -0
  581. package/dist/test/services/Api.test.js +553 -0
  582. package/dist/test/services/Auth.test.d.ts +1 -0
  583. package/dist/test/services/Auth.test.js +650 -0
  584. package/dist/test/services/Config.test.d.ts +1 -0
  585. package/dist/test/services/Config.test.js +510 -0
  586. package/dist/test/services/Datetime.test.d.ts +1 -0
  587. package/dist/test/services/Datetime.test.js +113 -0
  588. package/dist/test/services/Editor.test.d.ts +1 -0
  589. package/dist/test/services/Editor.test.js +205 -0
  590. package/dist/test/services/Lexical.errors.test.d.ts +1 -0
  591. package/dist/test/services/Lexical.errors.test.js +60 -0
  592. package/dist/test/services/Lexical.test.d.ts +1 -0
  593. package/dist/test/services/Lexical.test.js +68 -0
  594. package/dist/test/services/Migration.test.d.ts +1 -0
  595. package/dist/test/services/Migration.test.js +376 -0
  596. package/dist/test/services/Profile.test.d.ts +1 -0
  597. package/dist/test/services/Profile.test.js +277 -0
  598. package/dist/test/services/Renderer.test.d.ts +1 -0
  599. package/dist/test/services/Renderer.test.js +538 -0
  600. package/dist/test/services/Resolver.test.d.ts +1 -0
  601. package/dist/test/services/Resolver.test.js +320 -0
  602. package/dist/test/services/Skill.test.d.ts +1 -0
  603. package/dist/test/services/Skill.test.js +261 -0
  604. package/dist/test/services/UpdateNotifier.spawn.test.d.ts +1 -0
  605. package/dist/test/services/UpdateNotifier.spawn.test.js +73 -0
  606. package/dist/test/services/UpdateNotifier.test.d.ts +1 -0
  607. package/dist/test/services/UpdateNotifier.test.js +912 -0
  608. package/dist/vendor/litexml/cli.mjs +19 -4
  609. package/dist/vendor/litexml/litexml-html-preview-client.css +98 -13
  610. package/dist/vendor/litexml/litexml-html-preview-client.js +5794 -4976
  611. package/dist/vendor/litexml/style.css +5 -5
  612. package/package.json +29 -26
  613. package/skills/safety.md +1 -1
  614. package/LICENSE +0 -33
  615. package/dist/esm-CDcJmHkG.mjs +0 -2
@@ -0,0 +1,276 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Root `--help` + group help renderers.
3
+ //
4
+ // Why a custom renderer? `@effect/cli` flattens every nested verb into the
5
+ // root COMMANDS section and aligns columns to the longest line, producing a
6
+ // huge wall of whitespace. It also can't see our pre-parsed global flags
7
+ // (those are stripped from argv before `Command.run` is invoked — see
8
+ // `domain/runtime-flags.ts`), so they never appear under OPTIONS.
9
+ //
10
+ // Scope:
11
+ // - Root `mxs --help` (and bare `mxs`) → custom renderer here.
12
+ // - Top-level group help (`mxs <group> --help`,
13
+ // `mxs <group>`) → custom renderer here.
14
+ // - Verb help (`mxs post create --help`, ...) → @effect/cli default.
15
+ //
16
+ // Per-command help content lives next to each command module via the
17
+ // `registerCommandHelp` call (see `./registry.ts`). This file aggregates
18
+ // nothing description-wise — it only owns:
19
+ // - the global-flag table (not per-command),
20
+ // - the canonical display order of top-level commands,
21
+ // - markdown → ANSI rendering + banner composition.
22
+ //
23
+ // The side-effect imports below ensure every command module has been loaded
24
+ // (and has called `registerCommandHelp`) before the renderers run. Required
25
+ // for direct importers of this module (e.g. unit tests) that don't go
26
+ // through `bin/mxs.ts`.
27
+ // ---------------------------------------------------------------------------
28
+ import '../ai';
29
+ import '../auth';
30
+ import '../category';
31
+ import '../comment';
32
+ import '../config';
33
+ import '../draft';
34
+ import '../note';
35
+ import '../page';
36
+ import '../post';
37
+ import '../preview';
38
+ import '../profile';
39
+ import '../project';
40
+ import '../skill';
41
+ import '../snippet';
42
+ import '../topic';
43
+ import '../update';
44
+ import { ANSI, isColorEnabled, renderMarkdownToAnsi, wrap, } from '../render/markdown';
45
+ import { getCommandHelp, } from './registry';
46
+ export { renderMarkdownToAnsi } from '../render/markdown';
47
+ export { isLeafCommand, registerCommandHelp, } from './registry';
48
+ // ---------------------------------------------------------------------------
49
+ // Canonical display order for the root `mxs --help` table and the set of
50
+ // names the bin treats as known top-level commands. Decoupled from the
51
+ // (alphabetised) import order at the top of this file.
52
+ // ---------------------------------------------------------------------------
53
+ export const GROUP_NAMES = [
54
+ 'auth',
55
+ 'profile',
56
+ 'post',
57
+ 'note',
58
+ 'page',
59
+ 'draft',
60
+ 'project',
61
+ 'category',
62
+ 'topic',
63
+ 'comment',
64
+ 'snippet',
65
+ 'ai',
66
+ 'config',
67
+ 'skill',
68
+ 'preview',
69
+ 'update',
70
+ ];
71
+ export const isGroupName = (s) => GROUP_NAMES.includes(s);
72
+ const orderedCommandHelp = () => GROUP_NAMES.map((name) => getCommandHelp(name)).filter((c) => c !== undefined);
73
+ const ROOT_DESCRIPTION = 'mx-space CLI — manage your mx-core blog from the command line.';
74
+ const GLOBAL_OPTIONS = [
75
+ {
76
+ flag: '--json',
77
+ description: 'emit JSON output (shorthand for `--output json`)',
78
+ },
79
+ {
80
+ flag: '--output <mode>',
81
+ description: 'one of: readable (default), pretty-json, json, llm, xml',
82
+ },
83
+ { flag: '--api-url <url>', description: 'override the configured API URL' },
84
+ { flag: '--token <t>', description: 'override the stored access token' },
85
+ {
86
+ flag: '--api-key <key>',
87
+ description: 'authenticate with an x-api-key API key',
88
+ },
89
+ {
90
+ flag: '--lang <code>',
91
+ description: 'request translated read data for a locale',
92
+ },
93
+ { flag: '--profile <name>', description: 'profile to use' },
94
+ { flag: '-q, --quiet', description: 'suppress non-error stderr' },
95
+ { flag: '--verbose', description: 'log HTTP method/url/status/duration' },
96
+ {
97
+ flag: '--dry-run',
98
+ description: 'show resolved payload without calling the server',
99
+ },
100
+ { flag: '-h, --help', description: 'show this help' },
101
+ { flag: '--version', description: 'print version and exit' },
102
+ ];
103
+ export const buildRootHelpData = (version) => ({
104
+ programName: 'mxs',
105
+ version,
106
+ description: ROOT_DESCRIPTION,
107
+ globalOptions: GLOBAL_OPTIONS,
108
+ commands: orderedCommandHelp().map((c) => ({
109
+ name: c.name,
110
+ description: c.description,
111
+ verbs: c.verbs?.map((v) => v.name),
112
+ })),
113
+ });
114
+ const formatVerbs = (verbs) => {
115
+ if (!verbs || verbs.length === 0)
116
+ return '';
117
+ return ` (${verbs.join(', ')})`;
118
+ };
119
+ export const renderRootHelp = (data) => {
120
+ // The banner is rendered separately by `emitHelp`. We emit a short tagline
121
+ // line first (after the banner) so the full description is still searchable
122
+ // in piped output; the banner only shows the short form.
123
+ const lines = [
124
+ data.description,
125
+ '',
126
+ '## Bundled skill (for AI agents)',
127
+ '',
128
+ `Per-command \`--help\` covers most usage. For deeper context — content authoring, LiteXML envelopes, output modes, mutation safety, AI artifacts — \`${data.programName} skill\` lists bundled chapters; \`${data.programName} skill get <slug>\` prints one as raw markdown. Pass \`--output llm\` for ANSI-free output.`,
129
+ '',
130
+ '## Usage',
131
+ '',
132
+ ` ${data.programName} [global-options] <command> [command-options] [args]`,
133
+ '',
134
+ '## Global options',
135
+ '',
136
+ '| Flag | Description |',
137
+ '| ---- | ----------- |',
138
+ ];
139
+ for (const opt of data.globalOptions) {
140
+ lines.push(`| \`${opt.flag}\` | ${opt.description} |`);
141
+ }
142
+ lines.push('');
143
+ lines.push('## Commands');
144
+ lines.push('');
145
+ lines.push('| Command | Description |');
146
+ lines.push('| ------- | ----------- |');
147
+ for (const cmd of data.commands) {
148
+ const desc = `${cmd.description}${formatVerbs(cmd.verbs)}`;
149
+ lines.push(`| \`${cmd.name}\` | ${desc} |`);
150
+ }
151
+ lines.push('');
152
+ lines.push('## Per-command help');
153
+ lines.push('');
154
+ lines.push(`Run \`${data.programName} <command> --help\` for the full option list of a specific command.`);
155
+ lines.push('');
156
+ return lines.join('\n');
157
+ };
158
+ // ---------------------------------------------------------------------------
159
+ // Banner + emitters.
160
+ // ---------------------------------------------------------------------------
161
+ /**
162
+ * Render the banner line `<title> — <subtitle>` followed by a dim rule.
163
+ * The rule width matches the visible width of the banner line, capped at
164
+ * the terminal width (or 80 as fallback).
165
+ */
166
+ const renderBanner = (title, subtitle, opts) => {
167
+ const sep = ' — ';
168
+ const plainLine = `${title}${sep}${subtitle}`;
169
+ const termWidth = process.stdout.columns && process.stdout.columns > 0
170
+ ? process.stdout.columns
171
+ : 80;
172
+ const ruleWidth = Math.min(plainLine.length, termWidth);
173
+ const styledLine = wrap(`${ANSI.bold}${ANSI.magenta}`, title, opts.color) +
174
+ wrap(ANSI.dim, sep, opts.color) +
175
+ wrap(ANSI.bold, subtitle, opts.color);
176
+ const rule = wrap(ANSI.dim, '─'.repeat(ruleWidth), opts.color);
177
+ return `${styledLine}\n${rule}\n`;
178
+ };
179
+ /**
180
+ * Render the root help and write it to stdout, followed by a trailing
181
+ * newline. Honors `NO_COLOR` and non-TTY stdout (strips ANSI styling).
182
+ */
183
+ export const emitHelp = (data) => {
184
+ const color = isColorEnabled(process.stdout);
185
+ // Banner subtitle is the short tagline only — split off the first segment
186
+ // of the description (before " — "), so the banner stays compact. The full
187
+ // description is rendered as a paragraph by `renderRootHelp`.
188
+ const tagline = data.description.split(' — ')[0] || data.description;
189
+ const banner = renderBanner(`${data.programName} ${data.version}`, tagline, {
190
+ color,
191
+ });
192
+ const md = renderRootHelp(data);
193
+ const ansi = renderMarkdownToAnsi(md, { color });
194
+ process.stdout.write(banner + ansi + '\n');
195
+ };
196
+ const renderVerbSignature = (verb) => {
197
+ const parts = [verb.name, ...(verb.args ?? [])];
198
+ return parts.join(' ');
199
+ };
200
+ export const groupHelpDataFor = (name, version) => {
201
+ const entry = getCommandHelp(name);
202
+ if (!entry) {
203
+ throw new Error(`unknown group: ${name}`);
204
+ }
205
+ return {
206
+ programName: 'mxs',
207
+ version,
208
+ groupName: name,
209
+ description: entry.description,
210
+ verbs: entry.verbs ?? [],
211
+ isLeaf: entry.isLeaf,
212
+ leafOptions: entry.leafOptions,
213
+ skillChapter: entry.skillChapter,
214
+ };
215
+ };
216
+ export const renderGroupHelp = (data) => {
217
+ // The banner is rendered separately by `emitGroupHelp`. Body starts here.
218
+ const lines = ['## Usage', ''];
219
+ if (data.isLeaf) {
220
+ lines.push(` ${data.programName} [global-options] ${data.groupName} [options]`);
221
+ }
222
+ else {
223
+ lines.push(` ${data.programName} [global-options] ${data.groupName} <verb> [verb-options] [args]`);
224
+ }
225
+ lines.push('');
226
+ if (data.isLeaf) {
227
+ const opts = data.leafOptions ?? [];
228
+ if (opts.length > 0) {
229
+ lines.push('## Options');
230
+ lines.push('');
231
+ lines.push('| Flag | Description |');
232
+ lines.push('| ---- | ----------- |');
233
+ for (const o of opts) {
234
+ lines.push(`| \`${o.flag}\` | ${o.description} |`);
235
+ }
236
+ lines.push('');
237
+ }
238
+ }
239
+ else {
240
+ lines.push('## Verbs');
241
+ lines.push('');
242
+ lines.push('| Verb | Description |');
243
+ lines.push('| ---- | ----------- |');
244
+ for (const v of data.verbs) {
245
+ lines.push(`| \`${renderVerbSignature(v)}\` | ${v.description} |`);
246
+ }
247
+ lines.push('');
248
+ }
249
+ lines.push('## Global options');
250
+ lines.push('');
251
+ lines.push(`See \`${data.programName} --help\` for the global flag list.`);
252
+ lines.push('');
253
+ if (!data.isLeaf) {
254
+ lines.push('## Help');
255
+ lines.push('');
256
+ lines.push(`Use \`${data.programName} ${data.groupName} <verb> --help\` for the full options of a verb.`);
257
+ lines.push('');
258
+ }
259
+ lines.push('## Bundled skill (for AI agents)');
260
+ lines.push('');
261
+ if (data.skillChapter) {
262
+ lines.push(`For deeper reference: \`${data.programName} skill get ${data.skillChapter}\` (or \`${data.programName} skill\` for the full list).`);
263
+ }
264
+ else {
265
+ lines.push(`For deeper reference run \`${data.programName} skill\` to see the bundled chapter list.`);
266
+ }
267
+ lines.push('');
268
+ return lines.join('\n');
269
+ };
270
+ export const emitGroupHelp = (data) => {
271
+ const color = isColorEnabled(process.stdout);
272
+ const banner = renderBanner(`${data.programName} ${data.groupName}`, data.description, { color });
273
+ const md = renderGroupHelp(data);
274
+ const ansi = renderMarkdownToAnsi(md, { color });
275
+ process.stdout.write(banner + ansi + '\n');
276
+ };
@@ -0,0 +1,28 @@
1
+ export interface VerbDescriptor {
2
+ readonly name: string;
3
+ readonly args?: readonly string[];
4
+ readonly description: string;
5
+ }
6
+ export interface LeafOptionHelp {
7
+ readonly flag: string;
8
+ readonly description: string;
9
+ }
10
+ export interface CommandHelp {
11
+ readonly name: string;
12
+ readonly description: string;
13
+ readonly verbs?: readonly VerbDescriptor[];
14
+ readonly isLeaf?: boolean;
15
+ readonly leafOptions?: readonly LeafOptionHelp[];
16
+ readonly skillChapter?: string;
17
+ }
18
+ /**
19
+ * Register help metadata for a top-level command. Returns the registered
20
+ * entry so callers can reuse `entry.description` for
21
+ * `Command.withDescription(...)` without restating the string.
22
+ */
23
+ export declare const registerCommandHelp: (help: CommandHelp) => CommandHelp;
24
+ export declare const getCommandHelp: (name: string) => CommandHelp | undefined;
25
+ export declare const getAllCommandHelp: () => readonly CommandHelp[];
26
+ export declare const getRegisteredNames: () => readonly string[];
27
+ export declare const isRegisteredCommand: (name: string) => boolean;
28
+ export declare const isLeafCommand: (name: string) => boolean;
@@ -0,0 +1,29 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Per-command help registry.
3
+ //
4
+ // Each top-level command module (auth, post, profile, ..., update) calls
5
+ // `registerCommandHelp({...})` at import time to publish its own help
6
+ // metadata. The root and group renderers in `./index.ts` consume the
7
+ // registry instead of hard-coding the command list in one place.
8
+ //
9
+ // The registry is a module-level Map keyed by command name. Insertion order
10
+ // is preserved, but the canonical display order is decided by
11
+ // `COMMAND_ORDER` in `./index.ts` (decoupled from import order).
12
+ // ---------------------------------------------------------------------------
13
+ const REGISTRY = new Map();
14
+ /**
15
+ * Register help metadata for a top-level command. Returns the registered
16
+ * entry so callers can reuse `entry.description` for
17
+ * `Command.withDescription(...)` without restating the string.
18
+ */
19
+ export const registerCommandHelp = (help) => {
20
+ REGISTRY.set(help.name, help);
21
+ return help;
22
+ };
23
+ export const getCommandHelp = (name) => REGISTRY.get(name);
24
+ export const getAllCommandHelp = () => [
25
+ ...REGISTRY.values(),
26
+ ];
27
+ export const getRegisteredNames = () => [...REGISTRY.keys()];
28
+ export const isRegisteredCommand = (name) => REGISTRY.has(name);
29
+ export const isLeafCommand = (name) => REGISTRY.get(name)?.isLeaf === true;
@@ -0,0 +1,66 @@
1
+ import { Options } from '@effect/cli';
2
+ import { Effect, Option } from 'effect';
3
+ import type { Generic, ValidationFailed } from '../../domain/errors';
4
+ import type { ContentFormat, NoteFlagInputs } from '../../domain/payload';
5
+ import { Resolver } from '../../services/Resolver';
6
+ export declare const title: Options.Options<Option.Option<string>>;
7
+ export declare const slug: Options.Options<Option.Option<string>>;
8
+ export declare const topic: Options.Options<Option.Option<string>>;
9
+ export declare const content: Options.Options<Option.Option<string>>;
10
+ export declare const mood: Options.Options<Option.Option<string>>;
11
+ export declare const weather: Options.Options<Option.Option<string>>;
12
+ export declare const publicAt: Options.Options<Option.Option<string>>;
13
+ export declare const password: Options.Options<Option.Option<string>>;
14
+ export declare const coords: Options.Options<Option.Option<string>>;
15
+ export declare const location: Options.Options<Option.Option<string>>;
16
+ export declare const images: Options.Options<Option.Option<string>>;
17
+ export declare const meta: Options.Options<Option.Option<string>>;
18
+ export declare const file: Options.Options<Option.Option<string>>;
19
+ export declare const bookmark: Options.Options<Option.Option<string>>;
20
+ export declare const format: Options.Options<Option.Option<"markdown" | "lexical">>;
21
+ export declare const state: Options.Options<Option.Option<"draft" | "publish">>;
22
+ export declare const openFlag: Options.Options<boolean>;
23
+ export declare const silentFlag: Options.Options<boolean>;
24
+ export declare const noteWriteOptions: {
25
+ title: Options.Options<Option.Option<string>>;
26
+ slug: Options.Options<Option.Option<string>>;
27
+ topic: Options.Options<Option.Option<string>>;
28
+ content: Options.Options<Option.Option<string>>;
29
+ format: Options.Options<Option.Option<"markdown" | "lexical">>;
30
+ state: Options.Options<Option.Option<"draft" | "publish">>;
31
+ mood: Options.Options<Option.Option<string>>;
32
+ weather: Options.Options<Option.Option<string>>;
33
+ publicAt: Options.Options<Option.Option<string>>;
34
+ password: Options.Options<Option.Option<string>>;
35
+ bookmark: Options.Options<Option.Option<string>>;
36
+ coords: Options.Options<Option.Option<string>>;
37
+ location: Options.Options<Option.Option<string>>;
38
+ images: Options.Options<Option.Option<string>>;
39
+ meta: Options.Options<Option.Option<string>>;
40
+ file: Options.Options<Option.Option<string>>;
41
+ open: Options.Options<boolean>;
42
+ silent: Options.Options<boolean>;
43
+ };
44
+ export type NoteWriteOptionsParsed = {
45
+ readonly title: Option.Option<string>;
46
+ readonly slug: Option.Option<string>;
47
+ readonly topic: Option.Option<string>;
48
+ readonly content: Option.Option<string>;
49
+ readonly format: Option.Option<ContentFormat>;
50
+ readonly state: Option.Option<'publish' | 'draft'>;
51
+ readonly mood: Option.Option<string>;
52
+ readonly weather: Option.Option<string>;
53
+ readonly publicAt: Option.Option<string>;
54
+ readonly password: Option.Option<string>;
55
+ readonly bookmark: Option.Option<string>;
56
+ readonly coords: Option.Option<string>;
57
+ readonly location: Option.Option<string>;
58
+ readonly images: Option.Option<string>;
59
+ readonly meta: Option.Option<string>;
60
+ readonly file: Option.Option<string>;
61
+ readonly open: boolean;
62
+ readonly silent: boolean;
63
+ };
64
+ export declare const toNoteFlagInputs: (opts: NoteWriteOptionsParsed) => NoteFlagInputs;
65
+ /** Resolve `__topicName` placeholder → `topicId`. */
66
+ export declare const resolveTopicRefs: (payload: Record<string, unknown>) => Effect.Effect<Record<string, unknown>, ValidationFailed | Generic, Resolver>;
@@ -0,0 +1,73 @@
1
+ import { Options } from '@effect/cli';
2
+ import { Effect, Option } from 'effect';
3
+ import { Resolver } from '../../services/Resolver';
4
+ const optional = (self) => Options.optional(self);
5
+ const unwrap = (value) => Option.getOrUndefined(value);
6
+ export const title = optional(Options.text('title'));
7
+ export const slug = optional(Options.text('slug'));
8
+ export const topic = optional(Options.text('topic'));
9
+ export const content = optional(Options.text('content'));
10
+ export const mood = optional(Options.text('mood'));
11
+ export const weather = optional(Options.text('weather'));
12
+ export const publicAt = optional(Options.text('public-at'));
13
+ export const password = optional(Options.text('password'));
14
+ export const coords = optional(Options.text('coords'));
15
+ export const location = optional(Options.text('location'));
16
+ export const images = optional(Options.text('images'));
17
+ export const meta = optional(Options.text('meta'));
18
+ export const file = optional(Options.text('file'));
19
+ export const bookmark = optional(Options.text('bookmark'));
20
+ export const format = Options.choice('format', ['lexical', 'markdown']).pipe(Options.optional);
21
+ export const state = Options.choice('state', ['publish', 'draft']).pipe(Options.optional);
22
+ export const openFlag = Options.boolean('open').pipe(Options.withDescription('After success, open the admin edit page in the default browser.'));
23
+ export const silentFlag = Options.boolean('silent').pipe(Options.withDescription('On success, emit a minimal `ok` instead of the full server response (saves output tokens). Errors still print normally.'));
24
+ export const noteWriteOptions = {
25
+ title,
26
+ slug,
27
+ topic,
28
+ content,
29
+ format,
30
+ state,
31
+ mood,
32
+ weather,
33
+ publicAt,
34
+ password,
35
+ bookmark,
36
+ coords,
37
+ location,
38
+ images,
39
+ meta,
40
+ file,
41
+ open: openFlag,
42
+ silent: silentFlag,
43
+ };
44
+ const parseBoolean = (v) => v === undefined ? undefined : v === 'true';
45
+ export const toNoteFlagInputs = (opts) => ({
46
+ title: unwrap(opts.title),
47
+ slug: unwrap(opts.slug),
48
+ topic: unwrap(opts.topic),
49
+ content: unwrap(opts.content),
50
+ format: unwrap(opts.format),
51
+ state: unwrap(opts.state),
52
+ mood: unwrap(opts.mood),
53
+ weather: unwrap(opts.weather),
54
+ publicAt: unwrap(opts.publicAt),
55
+ password: unwrap(opts.password),
56
+ bookmark: parseBoolean(unwrap(opts.bookmark)),
57
+ coords: unwrap(opts.coords),
58
+ location: unwrap(opts.location),
59
+ images: unwrap(opts.images),
60
+ meta: unwrap(opts.meta),
61
+ file: unwrap(opts.file),
62
+ });
63
+ /** Resolve `__topicName` placeholder → `topicId`. */
64
+ export const resolveTopicRefs = (payload) => Effect.gen(function* () {
65
+ const next = { ...payload };
66
+ const nameRef = next.__topicName;
67
+ delete next.__topicName;
68
+ if (typeof nameRef === 'string' && nameRef.length > 0 && !next.topicId) {
69
+ const resolver = yield* Resolver;
70
+ next.topicId = yield* resolver.resolveTopic(nameRef);
71
+ }
72
+ return next;
73
+ });
@@ -0,0 +1,23 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Api } from '../../services/Api';
3
+ import { Renderer } from '../../services/Renderer';
4
+ export declare const create: Command.Command<"create", import("@effect/platform/Path").Path | import("@effect/platform/FileSystem").FileSystem | Api | Renderer | import("../../services/Resolver").Resolver | import("../../services/Lexical").Lexical, import("../../domain/errors").ValidationXml | import("../../services/Api").ApiError, {
5
+ readonly title: import("effect/Option").Option<string>;
6
+ readonly slug: import("effect/Option").Option<string>;
7
+ readonly topic: import("effect/Option").Option<string>;
8
+ readonly content: import("effect/Option").Option<string>;
9
+ readonly format: import("effect/Option").Option<"markdown" | "lexical">;
10
+ readonly state: import("effect/Option").Option<"draft" | "publish">;
11
+ readonly mood: import("effect/Option").Option<string>;
12
+ readonly weather: import("effect/Option").Option<string>;
13
+ readonly publicAt: import("effect/Option").Option<string>;
14
+ readonly password: import("effect/Option").Option<string>;
15
+ readonly bookmark: import("effect/Option").Option<string>;
16
+ readonly coords: import("effect/Option").Option<string>;
17
+ readonly location: import("effect/Option").Option<string>;
18
+ readonly images: import("effect/Option").Option<string>;
19
+ readonly meta: import("effect/Option").Option<string>;
20
+ readonly file: import("effect/Option").Option<string>;
21
+ readonly open: boolean;
22
+ readonly silent: boolean;
23
+ }>;
@@ -0,0 +1,25 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Effect } from 'effect';
3
+ import { openAdminEdit } from '../../domain/admin-link';
4
+ import { buildNotePayload } from '../../domain/payload';
5
+ import { Api } from '../../services/Api';
6
+ import { Renderer } from '../../services/Renderer';
7
+ import { extractId } from '../post/_flags';
8
+ import { noteWriteOptions, resolveTopicRefs, toNoteFlagInputs } from './_flags';
9
+ export const create = Command.make('create', noteWriteOptions, (opts) => Effect.gen(function* () {
10
+ const flags = toNoteFlagInputs(opts);
11
+ const built = yield* buildNotePayload(flags);
12
+ const payload = yield* resolveTopicRefs(built.payload);
13
+ const api = yield* Api;
14
+ const renderer = yield* Renderer;
15
+ const res = yield* api.request('/notes', {
16
+ method: 'POST',
17
+ body: payload,
18
+ });
19
+ yield* renderer.emitSuccess(opts.silent ? { ok: true } : res);
20
+ if (opts.open) {
21
+ const id = extractId(res);
22
+ if (id)
23
+ yield* openAdminEdit('notes', id);
24
+ }
25
+ })).pipe(Command.withDescription('create a note'));
@@ -0,0 +1,8 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Api } from '../../services/Api';
3
+ import { Renderer } from '../../services/Renderer';
4
+ import { Resolver } from '../../services/Resolver';
5
+ export declare const del: Command.Command<"delete", Api | Renderer | Resolver, import("../../services/Api").ApiError, {
6
+ readonly slugOrId: string;
7
+ readonly force: boolean;
8
+ }>;
@@ -0,0 +1,21 @@
1
+ import { Args, Command, Options } from '@effect/cli';
2
+ import { Effect } from 'effect';
3
+ import { ValidationFailed } from '../../domain/errors';
4
+ import { Api } from '../../services/Api';
5
+ import { Renderer } from '../../services/Renderer';
6
+ import { Resolver } from '../../services/Resolver';
7
+ const slugOrId = Args.text({ name: 'slugOrId' });
8
+ const force = Options.boolean('force').pipe(Options.withDescription('skip confirmation'));
9
+ export const del = Command.make('delete', { slugOrId, force }, ({ slugOrId, force }) => Effect.gen(function* () {
10
+ if (!force && !process.stdin.isTTY) {
11
+ return yield* Effect.fail(new ValidationFailed({
12
+ message: 'refusing to delete without --force in non-TTY context',
13
+ }));
14
+ }
15
+ const resolver = yield* Resolver;
16
+ const api = yield* Api;
17
+ const renderer = yield* Renderer;
18
+ const id = yield* resolver.resolveNoteId(slugOrId);
19
+ yield* api.request(`/notes/${id}`, { method: 'DELETE' });
20
+ yield* renderer.emitSuccess({ deleted: id });
21
+ })).pipe(Command.withDescription('delete a note'));
@@ -0,0 +1,28 @@
1
+ import { Command } from '@effect/cli';
2
+ import { ValidationXml } from '../../domain/errors';
3
+ import { Api } from '../../services/Api';
4
+ import { Editor } from '../../services/Editor';
5
+ import { Lexical } from '../../services/Lexical';
6
+ import { Renderer } from '../../services/Renderer';
7
+ import { Resolver } from '../../services/Resolver';
8
+ export declare const edit: Command.Command<"edit", import("@effect/platform/Path").Path | import("@effect/platform/FileSystem").FileSystem | Api | Renderer | Resolver | Editor | Lexical, ValidationXml | import("../../services/Api").ApiError, {
9
+ readonly title: import("effect/Option").Option<string>;
10
+ readonly slug: import("effect/Option").Option<string>;
11
+ readonly topic: import("effect/Option").Option<string>;
12
+ readonly content: import("effect/Option").Option<string>;
13
+ readonly format: import("effect/Option").Option<"markdown" | "lexical">;
14
+ readonly state: import("effect/Option").Option<"draft" | "publish">;
15
+ readonly mood: import("effect/Option").Option<string>;
16
+ readonly weather: import("effect/Option").Option<string>;
17
+ readonly publicAt: import("effect/Option").Option<string>;
18
+ readonly password: import("effect/Option").Option<string>;
19
+ readonly bookmark: import("effect/Option").Option<string>;
20
+ readonly coords: import("effect/Option").Option<string>;
21
+ readonly location: import("effect/Option").Option<string>;
22
+ readonly images: import("effect/Option").Option<string>;
23
+ readonly meta: import("effect/Option").Option<string>;
24
+ readonly file: import("effect/Option").Option<string>;
25
+ readonly open: boolean;
26
+ readonly silent: boolean;
27
+ readonly slugOrId: string;
28
+ }>;