@mx-space/cli 0.14.2 → 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 (617) hide show
  1. package/README.md +36 -12
  2. package/dist/{Lexical.dev-CtGmYDoh.mjs → Lexical.dev-BSvx45_E.mjs} +350 -402
  3. package/dist/{Lexical.node-8sRFmq2X.mjs → Lexical.node-kAh5GM2n.mjs} +2 -2
  4. package/dist/{Lexical.prod-D-VfeKDz.mjs → Lexical.prod-Bqwgb3ez.mjs} +1757 -1785
  5. package/dist/{LexicalClipboard.dev-CzQ15z6E.mjs → LexicalClipboard.dev-BWU3KXIa.mjs} +19 -15
  6. package/dist/{LexicalClipboard.node-D4gMGws6.mjs → LexicalClipboard.node-BygAdNdF.mjs} +2 -2
  7. package/dist/{LexicalClipboard.prod-CltkQpzS.mjs → LexicalClipboard.prod-BtMuKNyT.mjs} +11 -11
  8. package/dist/{LexicalCodeCore.dev-DkYBZRGB.mjs → LexicalCodeCore.dev-CD2xgvDs.mjs} +95 -89
  9. package/dist/{LexicalCodeCore.prod-COc3_QL8.mjs → LexicalCodeCore.prod-Bl6FFMc7.mjs} +146 -158
  10. package/dist/{LexicalDragon.dev-Dv5_WUae.mjs → LexicalDragon.dev-BwdYhm4K.mjs} +3 -3
  11. package/dist/{LexicalDragon.node-DgjrmWkd.mjs → LexicalDragon.node-CpJhkCVV.mjs} +2 -2
  12. package/dist/{LexicalDragon.prod-DnpbDe-_.mjs → LexicalDragon.prod-CvXmWwo1.mjs} +3 -3
  13. package/dist/{LexicalExtension.dev-JMH_6-OZ.mjs → LexicalExtension.dev-LcRLXI5Z.mjs} +33 -30
  14. package/dist/{LexicalExtension.node-BUozzx4t.mjs → LexicalExtension.node-BwJt2LXV.mjs} +2 -2
  15. package/dist/{LexicalExtension.prod-UiyDgmou.mjs → LexicalExtension.prod-lg8_33-H.mjs} +87 -93
  16. package/dist/{LexicalHeadless.dev-BfLGciiX.mjs → LexicalHeadless.dev-BeUbKBes.mjs} +2 -2
  17. package/dist/{LexicalHeadless.prod-CWF7edmQ.mjs → LexicalHeadless.prod-4gbIA8HM.mjs} +2 -2
  18. package/dist/{LexicalHtml.dev-D5EF5PGW.mjs → LexicalHtml.dev-BLdZWTCJ.mjs} +22 -16
  19. package/dist/{LexicalHtml.node-BYbzHNVe.mjs → LexicalHtml.node-BeuJMvvt.mjs} +2 -2
  20. package/dist/{LexicalHtml.prod-D_FfkvVD.mjs → LexicalHtml.prod-CHUyCocN.mjs} +6 -6
  21. package/dist/{LexicalLink.dev-D3Pgh6ik.mjs → LexicalLink.dev-DgsFRqw0.mjs} +41 -58
  22. package/dist/{LexicalLink.prod-XZoAYVYD.mjs → LexicalLink.prod-CkXkeKY2.mjs} +115 -138
  23. package/dist/{LexicalList.dev-B5d3ObhB.mjs → LexicalList.dev-OOms3kQi.mjs} +15 -47
  24. package/dist/{LexicalList.prod-OQDpVAEb.mjs → LexicalList.prod-DzMBeqHn.mjs} +208 -224
  25. package/dist/{LexicalMarkdown.dev-BkM8G3DG.mjs → LexicalMarkdown.dev-DJLKbZtD.mjs} +42 -30
  26. package/dist/{LexicalMarkdown.prod-DcVXCex6.mjs → LexicalMarkdown.prod-Cp21kDCU.mjs} +12 -8
  27. package/dist/{LexicalRichText.dev-DppD7IrA.mjs → LexicalRichText.dev-0rkAGjUf.mjs} +84 -86
  28. package/dist/{LexicalRichText.node-CPSn7dkg.mjs → LexicalRichText.node-Cd-BySPE.mjs} +8 -8
  29. package/dist/{LexicalRichText.prod-h7JPxFNp.mjs → LexicalRichText.prod-DTQiEr8C.mjs} +96 -100
  30. package/dist/{LexicalSelection.dev-CD0SLbxP.mjs → LexicalSelection.dev-Bi0VlUEv.mjs} +29 -25
  31. package/dist/{LexicalSelection.node-CGlJgUlZ.mjs → LexicalSelection.node-t2U46EF_.mjs} +2 -2
  32. package/dist/{LexicalSelection.prod-DbVZN5AV.mjs → LexicalSelection.prod-CrFG111g.mjs} +3 -3
  33. package/dist/{LexicalTable.dev-D0HU14UV.mjs → LexicalTable.dev-D-sFhO-o.mjs} +288 -154
  34. package/dist/{LexicalTable.prod-BcPNSrxP.mjs → LexicalTable.prod-DwYaa_dN.mjs} +689 -632
  35. package/dist/{LexicalUtils.dev-iKy_TrRT.mjs → LexicalUtils.dev-Q2q3-UDM.mjs} +9 -6
  36. package/dist/{LexicalUtils.node-CIgMS8cG.mjs → LexicalUtils.node-Dl7OvqJV.mjs} +2 -2
  37. package/dist/{LexicalUtils.prod-DIAsKJzu.mjs → LexicalUtils.prod-CBnq_iEV.mjs} +8 -7
  38. package/dist/bin/mxs.mjs +1 -1
  39. package/dist/esm-CNZ7kdTg.mjs +2 -0
  40. package/dist/{esm-CwXl1N0a.mjs → esm-ZXjJmLEC.mjs} +422 -391
  41. package/dist/index.d.mts +16 -16
  42. package/dist/index.mjs +1 -1
  43. package/dist/{mxs-iW9DgqSZ.mjs → mxs-DC9zR3f2.mjs} +2203 -2782
  44. package/dist/{rolldown-runtime-JspESFgx.mjs → rolldown-runtime-B4iAMlE-.mjs} +1 -1
  45. package/dist/src/bin/mxs.d.ts +2 -0
  46. package/dist/src/bin/mxs.js +310 -0
  47. package/dist/src/cli/ai/_poll.d.ts +12 -0
  48. package/dist/src/cli/ai/_poll.js +38 -0
  49. package/dist/src/cli/ai/_resolve.d.ts +8 -0
  50. package/dist/src/cli/ai/_resolve.js +27 -0
  51. package/dist/src/cli/ai/index.d.ts +127 -0
  52. package/dist/src/cli/ai/index.js +46 -0
  53. package/dist/src/cli/ai/insights/by-article.d.ts +10 -0
  54. package/dist/src/cli/ai/insights/by-article.js +21 -0
  55. package/dist/src/cli/ai/insights/delete.d.ts +7 -0
  56. package/dist/src/cli/ai/insights/delete.js +18 -0
  57. package/dist/src/cli/ai/insights/edit.d.ts +8 -0
  58. package/dist/src/cli/ai/insights/edit.js +54 -0
  59. package/dist/src/cli/ai/insights/get.d.ts +6 -0
  60. package/dist/src/cli/ai/insights/get.js +11 -0
  61. package/dist/src/cli/ai/insights/index.d.ts +30 -0
  62. package/dist/src/cli/ai/insights/index.js +17 -0
  63. package/dist/src/cli/ai/insights/list.d.ts +10 -0
  64. package/dist/src/cli/ai/insights/list.js +20 -0
  65. package/dist/src/cli/ai/insights/refresh.d.ts +10 -0
  66. package/dist/src/cli/ai/insights/refresh.js +25 -0
  67. package/dist/src/cli/ai/insights/translate.d.ts +10 -0
  68. package/dist/src/cli/ai/insights/translate.js +25 -0
  69. package/dist/src/cli/ai/overview/by-article.d.ts +7 -0
  70. package/dist/src/cli/ai/overview/by-article.js +15 -0
  71. package/dist/src/cli/ai/overview/index.d.ts +11 -0
  72. package/dist/src/cli/ai/overview/index.js +4 -0
  73. package/dist/src/cli/ai/overview/list.d.ts +10 -0
  74. package/dist/src/cli/ai/overview/list.js +20 -0
  75. package/dist/src/cli/ai/summary/by-article.d.ts +10 -0
  76. package/dist/src/cli/ai/summary/by-article.js +21 -0
  77. package/dist/src/cli/ai/summary/delete.d.ts +7 -0
  78. package/dist/src/cli/ai/summary/delete.js +18 -0
  79. package/dist/src/cli/ai/summary/edit.d.ts +8 -0
  80. package/dist/src/cli/ai/summary/edit.js +54 -0
  81. package/dist/src/cli/ai/summary/get.d.ts +6 -0
  82. package/dist/src/cli/ai/summary/get.js +11 -0
  83. package/dist/src/cli/ai/summary/index.d.ts +30 -0
  84. package/dist/src/cli/ai/summary/index.js +9 -0
  85. package/dist/src/cli/ai/summary/list.d.ts +10 -0
  86. package/dist/src/cli/ai/summary/list.js +20 -0
  87. package/dist/src/cli/ai/summary/regen.d.ts +10 -0
  88. package/dist/src/cli/ai/summary/regen.js +25 -0
  89. package/dist/src/cli/ai/summary/translate.d.ts +10 -0
  90. package/dist/src/cli/ai/summary/translate.js +25 -0
  91. package/dist/src/cli/ai/translate/by-article.d.ts +9 -0
  92. package/dist/src/cli/ai/translate/by-article.js +19 -0
  93. package/dist/src/cli/ai/translate/delete.d.ts +7 -0
  94. package/dist/src/cli/ai/translate/delete.js +18 -0
  95. package/dist/src/cli/ai/translate/edit.d.ts +8 -0
  96. package/dist/src/cli/ai/translate/edit.js +97 -0
  97. package/dist/src/cli/ai/translate/entries/delete.d.ts +7 -0
  98. package/dist/src/cli/ai/translate/entries/delete.js +18 -0
  99. package/dist/src/cli/ai/translate/entries/edit.d.ts +8 -0
  100. package/dist/src/cli/ai/translate/entries/edit.js +73 -0
  101. package/dist/src/cli/ai/translate/entries/generate.d.ts +7 -0
  102. package/dist/src/cli/ai/translate/entries/generate.js +15 -0
  103. package/dist/src/cli/ai/translate/entries/index.d.ts +17 -0
  104. package/dist/src/cli/ai/translate/entries/index.js +6 -0
  105. package/dist/src/cli/ai/translate/entries/list.d.ts +10 -0
  106. package/dist/src/cli/ai/translate/entries/list.js +20 -0
  107. package/dist/src/cli/ai/translate/get.d.ts +6 -0
  108. package/dist/src/cli/ai/translate/get.js +11 -0
  109. package/dist/src/cli/ai/translate/index.d.ts +40 -0
  110. package/dist/src/cli/ai/translate/index.js +19 -0
  111. package/dist/src/cli/ai/translate/languages.d.ts +7 -0
  112. package/dist/src/cli/ai/translate/languages.js +15 -0
  113. package/dist/src/cli/ai/translate/list.d.ts +9 -0
  114. package/dist/src/cli/ai/translate/list.js +19 -0
  115. package/dist/src/cli/ai/translate/run.d.ts +10 -0
  116. package/dist/src/cli/ai/translate/run.js +31 -0
  117. package/dist/src/cli/ai/tts/by-article.d.ts +7 -0
  118. package/dist/src/cli/ai/tts/by-article.js +15 -0
  119. package/dist/src/cli/ai/tts/delete.d.ts +7 -0
  120. package/dist/src/cli/ai/tts/delete.js +18 -0
  121. package/dist/src/cli/ai/tts/index.d.ts +22 -0
  122. package/dist/src/cli/ai/tts/index.js +7 -0
  123. package/dist/src/cli/ai/tts/list.d.ts +10 -0
  124. package/dist/src/cli/ai/tts/list.js +20 -0
  125. package/dist/src/cli/ai/tts/run.d.ts +10 -0
  126. package/dist/src/cli/ai/tts/run.js +25 -0
  127. package/dist/src/cli/ai/tts/voices.d.ts +7 -0
  128. package/dist/src/cli/ai/tts/voices.js +12 -0
  129. package/dist/src/cli/ai/views.d.ts +3 -0
  130. package/dist/src/cli/ai/views.js +45 -0
  131. package/dist/src/cli/auth/index.d.ts +6 -0
  132. package/dist/src/cli/auth/index.js +22 -0
  133. package/dist/src/cli/auth/login.d.ts +11 -0
  134. package/dist/src/cli/auth/login.js +168 -0
  135. package/dist/src/cli/auth/logout.d.ts +6 -0
  136. package/dist/src/cli/auth/logout.js +21 -0
  137. package/dist/src/cli/auth/status.d.ts +4 -0
  138. package/dist/src/cli/auth/status.js +31 -0
  139. package/dist/src/cli/auth/view.d.ts +25 -0
  140. package/dist/src/cli/auth/view.js +46 -0
  141. package/dist/src/cli/auth/whoami.d.ts +7 -0
  142. package/dist/src/cli/auth/whoami.js +44 -0
  143. package/dist/src/cli/category/create.d.ts +10 -0
  144. package/dist/src/cli/category/create.js +24 -0
  145. package/dist/src/cli/category/delete.d.ts +8 -0
  146. package/dist/src/cli/category/delete.js +21 -0
  147. package/dist/src/cli/category/get.d.ts +6 -0
  148. package/dist/src/cli/category/get.js +11 -0
  149. package/dist/src/cli/category/index.d.ts +20 -0
  150. package/dist/src/cli/category/index.js +41 -0
  151. package/dist/src/cli/category/list.d.ts +4 -0
  152. package/dist/src/cli/category/list.js +10 -0
  153. package/dist/src/cli/category/update.d.ts +12 -0
  154. package/dist/src/cli/category/update.js +34 -0
  155. package/dist/src/cli/comment/_flags.d.ts +28 -0
  156. package/dist/src/cli/comment/_flags.js +48 -0
  157. package/dist/src/cli/comment/approve.d.ts +9 -0
  158. package/dist/src/cli/comment/approve.js +23 -0
  159. package/dist/src/cli/comment/delete.d.ts +9 -0
  160. package/dist/src/cli/comment/delete.js +24 -0
  161. package/dist/src/cli/comment/get.d.ts +6 -0
  162. package/dist/src/cli/comment/get.js +12 -0
  163. package/dist/src/cli/comment/index.d.ts +34 -0
  164. package/dist/src/cli/comment/index.js +53 -0
  165. package/dist/src/cli/comment/list.d.ts +9 -0
  166. package/dist/src/cli/comment/list.js +20 -0
  167. package/dist/src/cli/comment/reject.d.ts +9 -0
  168. package/dist/src/cli/comment/reject.js +23 -0
  169. package/dist/src/cli/comment/reply.d.ts +9 -0
  170. package/dist/src/cli/comment/reply.js +31 -0
  171. package/dist/src/cli/comment/unread.d.ts +7 -0
  172. package/dist/src/cli/comment/unread.js +21 -0
  173. package/dist/src/cli/comment/view.d.ts +3 -0
  174. package/dist/src/cli/comment/view.js +197 -0
  175. package/dist/src/cli/config/edit.d.ts +5 -0
  176. package/dist/src/cli/config/edit.js +36 -0
  177. package/dist/src/cli/config/get.d.ts +6 -0
  178. package/dist/src/cli/config/get.js +11 -0
  179. package/dist/src/cli/config/index.d.ts +10 -0
  180. package/dist/src/cli/config/index.js +22 -0
  181. package/dist/src/cli/config/list.d.ts +4 -0
  182. package/dist/src/cli/config/list.js +10 -0
  183. package/dist/src/cli/config/set.d.ts +9 -0
  184. package/dist/src/cli/config/set.js +48 -0
  185. package/dist/src/cli/draft/_shared.d.ts +27 -0
  186. package/dist/src/cli/draft/_shared.js +85 -0
  187. package/dist/src/cli/draft/create.d.ts +21 -0
  188. package/dist/src/cli/draft/create.js +34 -0
  189. package/dist/src/cli/draft/delete.d.ts +7 -0
  190. package/dist/src/cli/draft/delete.js +20 -0
  191. package/dist/src/cli/draft/get.d.ts +6 -0
  192. package/dist/src/cli/draft/get.js +11 -0
  193. package/dist/src/cli/draft/index.d.ts +54 -0
  194. package/dist/src/cli/draft/index.js +42 -0
  195. package/dist/src/cli/draft/list.d.ts +11 -0
  196. package/dist/src/cli/draft/list.js +23 -0
  197. package/dist/src/cli/draft/publish.d.ts +8 -0
  198. package/dist/src/cli/draft/publish.js +64 -0
  199. package/dist/src/cli/draft/update.d.ts +22 -0
  200. package/dist/src/cli/draft/update.js +29 -0
  201. package/dist/src/cli/file/_shared.d.ts +6 -0
  202. package/dist/src/cli/file/_shared.js +5 -0
  203. package/dist/src/cli/file/delete.d.ts +8 -0
  204. package/dist/src/cli/file/delete.js +21 -0
  205. package/dist/src/cli/file/index.d.ts +19 -0
  206. package/dist/src/cli/file/index.js +33 -0
  207. package/dist/src/cli/file/list.d.ts +6 -0
  208. package/dist/src/cli/file/list.js +11 -0
  209. package/dist/src/cli/file/rename.d.ts +8 -0
  210. package/dist/src/cli/file/rename.js +16 -0
  211. package/dist/src/cli/file/upload.d.ts +9 -0
  212. package/dist/src/cli/file/upload.js +32 -0
  213. package/dist/src/cli/help/index.d.ts +62 -0
  214. package/dist/src/cli/help/index.js +276 -0
  215. package/dist/src/cli/help/registry.d.ts +28 -0
  216. package/dist/src/cli/help/registry.js +29 -0
  217. package/dist/src/cli/note/_flags.d.ts +66 -0
  218. package/dist/src/cli/note/_flags.js +73 -0
  219. package/dist/src/cli/note/create.d.ts +23 -0
  220. package/dist/src/cli/note/create.js +25 -0
  221. package/dist/src/cli/note/delete.d.ts +8 -0
  222. package/dist/src/cli/note/delete.js +21 -0
  223. package/dist/src/cli/note/edit.d.ts +28 -0
  224. package/dist/src/cli/note/edit.js +114 -0
  225. package/dist/src/cli/note/get.d.ts +6 -0
  226. package/dist/src/cli/note/get.js +29 -0
  227. package/dist/src/cli/note/index.d.ts +77 -0
  228. package/dist/src/cli/note/index.js +63 -0
  229. package/dist/src/cli/note/list.d.ts +10 -0
  230. package/dist/src/cli/note/list.js +22 -0
  231. package/dist/src/cli/note/publish.d.ts +7 -0
  232. package/dist/src/cli/note/publish.js +17 -0
  233. package/dist/src/cli/note/unpublish.d.ts +7 -0
  234. package/dist/src/cli/note/unpublish.js +17 -0
  235. package/dist/src/cli/note/update.d.ts +25 -0
  236. package/dist/src/cli/note/update.js +36 -0
  237. package/dist/src/cli/note/view.d.ts +3 -0
  238. package/dist/src/cli/note/view.js +162 -0
  239. package/dist/src/cli/page/create.d.ts +41 -0
  240. package/dist/src/cli/page/create.js +56 -0
  241. package/dist/src/cli/page/delete.d.ts +7 -0
  242. package/dist/src/cli/page/delete.js +37 -0
  243. package/dist/src/cli/page/edit.d.ts +19 -0
  244. package/dist/src/cli/page/edit.js +117 -0
  245. package/dist/src/cli/page/get.d.ts +6 -0
  246. package/dist/src/cli/page/get.js +16 -0
  247. package/dist/src/cli/page/index.d.ts +44 -0
  248. package/dist/src/cli/page/index.js +38 -0
  249. package/dist/src/cli/page/list.d.ts +4 -0
  250. package/dist/src/cli/page/list.js +10 -0
  251. package/dist/src/cli/page/update.d.ts +16 -0
  252. package/dist/src/cli/page/update.js +48 -0
  253. package/dist/src/cli/page/view.d.ts +2 -0
  254. package/dist/src/cli/page/view.js +79 -0
  255. package/dist/src/cli/post/_flags.d.ts +66 -0
  256. package/dist/src/cli/post/_flags.js +96 -0
  257. package/dist/src/cli/post/apply.d.ts +7 -0
  258. package/dist/src/cli/post/apply.js +70 -0
  259. package/dist/src/cli/post/create.d.ts +21 -0
  260. package/dist/src/cli/post/create.js +24 -0
  261. package/dist/src/cli/post/delete.d.ts +8 -0
  262. package/dist/src/cli/post/delete.js +21 -0
  263. package/dist/src/cli/post/edit.d.ts +26 -0
  264. package/dist/src/cli/post/edit.js +115 -0
  265. package/dist/src/cli/post/get.d.ts +7 -0
  266. package/dist/src/cli/post/get.js +15 -0
  267. package/dist/src/cli/post/index.d.ts +91 -0
  268. package/dist/src/cli/post/index.js +73 -0
  269. package/dist/src/cli/post/list.d.ts +10 -0
  270. package/dist/src/cli/post/list.js +23 -0
  271. package/dist/src/cli/post/publish.d.ts +7 -0
  272. package/dist/src/cli/post/publish.js +17 -0
  273. package/dist/src/cli/post/stage.d.ts +23 -0
  274. package/dist/src/cli/post/stage.js +55 -0
  275. package/dist/src/cli/post/unpublish.d.ts +7 -0
  276. package/dist/src/cli/post/unpublish.js +17 -0
  277. package/dist/src/cli/post/update.d.ts +23 -0
  278. package/dist/src/cli/post/update.js +38 -0
  279. package/dist/src/cli/post/view.d.ts +3 -0
  280. package/dist/src/cli/post/view.js +150 -0
  281. package/dist/src/cli/preview/index.d.ts +13 -0
  282. package/dist/src/cli/preview/index.js +226 -0
  283. package/dist/src/cli/profile/index.d.ts +14 -0
  284. package/dist/src/cli/profile/index.js +36 -0
  285. package/dist/src/cli/profile/ls.d.ts +5 -0
  286. package/dist/src/cli/profile/ls.js +26 -0
  287. package/dist/src/cli/profile/mark.d.ts +9 -0
  288. package/dist/src/cli/profile/mark.js +23 -0
  289. package/dist/src/cli/profile/rm.d.ts +12 -0
  290. package/dist/src/cli/profile/rm.js +50 -0
  291. package/dist/src/cli/profile/show.d.ts +9 -0
  292. package/dist/src/cli/profile/show.js +40 -0
  293. package/dist/src/cli/profile/use.d.ts +6 -0
  294. package/dist/src/cli/profile/use.js +11 -0
  295. package/dist/src/cli/profile/view.d.ts +8 -0
  296. package/dist/src/cli/profile/view.js +21 -0
  297. package/dist/src/cli/project/_flags.d.ts +56 -0
  298. package/dist/src/cli/project/_flags.js +130 -0
  299. package/dist/src/cli/project/create.d.ts +17 -0
  300. package/dist/src/cli/project/create.js +25 -0
  301. package/dist/src/cli/project/delete.d.ts +8 -0
  302. package/dist/src/cli/project/delete.js +22 -0
  303. package/dist/src/cli/project/edit.d.ts +11 -0
  304. package/dist/src/cli/project/edit.js +61 -0
  305. package/dist/src/cli/project/get.d.ts +7 -0
  306. package/dist/src/cli/project/get.js +14 -0
  307. package/dist/src/cli/project/index.d.ts +43 -0
  308. package/dist/src/cli/project/index.js +52 -0
  309. package/dist/src/cli/project/list.d.ts +8 -0
  310. package/dist/src/cli/project/list.js +19 -0
  311. package/dist/src/cli/project/update.d.ts +18 -0
  312. package/dist/src/cli/project/update.js +24 -0
  313. package/dist/src/cli/project/view-cmd.d.ts +7 -0
  314. package/dist/src/cli/project/view-cmd.js +15 -0
  315. package/dist/src/cli/project/view.d.ts +3 -0
  316. package/dist/src/cli/project/view.js +102 -0
  317. package/dist/src/cli/render/codehighlight.d.ts +8 -0
  318. package/dist/src/cli/render/codehighlight.js +264 -0
  319. package/dist/src/cli/render/envelope.d.ts +7 -0
  320. package/dist/src/cli/render/envelope.js +23 -0
  321. package/dist/src/cli/render/frontmatter.d.ts +8 -0
  322. package/dist/src/cli/render/frontmatter.js +50 -0
  323. package/dist/src/cli/render/helpers.d.ts +2 -0
  324. package/dist/src/cli/render/helpers.js +11 -0
  325. package/dist/src/cli/render/index.d.ts +7 -0
  326. package/dist/src/cli/render/index.js +10 -0
  327. package/dist/src/cli/render/lexical/blocks.d.ts +19 -0
  328. package/dist/src/cli/render/lexical/blocks.js +208 -0
  329. package/dist/src/cli/render/lexical/code.d.ts +2 -0
  330. package/dist/src/cli/render/lexical/code.js +22 -0
  331. package/dist/src/cli/render/lexical/embeds.d.ts +6 -0
  332. package/dist/src/cli/render/lexical/embeds.js +51 -0
  333. package/dist/src/cli/render/lexical/index.d.ts +9 -0
  334. package/dist/src/cli/render/lexical/index.js +25 -0
  335. package/dist/src/cli/render/lexical/inlines.d.ts +17 -0
  336. package/dist/src/cli/render/lexical/inlines.js +76 -0
  337. package/dist/src/cli/render/lexical/parser.d.ts +10 -0
  338. package/dist/src/cli/render/lexical/parser.js +64 -0
  339. package/dist/src/cli/render/lexical/walker.d.ts +21 -0
  340. package/dist/src/cli/render/lexical/walker.js +51 -0
  341. package/dist/src/cli/render/markdown.d.ts +18 -0
  342. package/dist/src/cli/render/markdown.js +196 -0
  343. package/dist/src/cli/render/metadata-block.d.ts +14 -0
  344. package/dist/src/cli/render/metadata-block.js +50 -0
  345. package/dist/src/cli/skill/all.d.ts +4 -0
  346. package/dist/src/cli/skill/all.js +11 -0
  347. package/dist/src/cli/skill/get.d.ts +6 -0
  348. package/dist/src/cli/skill/get.js +12 -0
  349. package/dist/src/cli/skill/index.d.ts +10 -0
  350. package/dist/src/cli/skill/index.js +34 -0
  351. package/dist/src/cli/skill/list.d.ts +4 -0
  352. package/dist/src/cli/skill/list.js +11 -0
  353. package/dist/src/cli/skill/search.d.ts +6 -0
  354. package/dist/src/cli/skill/search.js +12 -0
  355. package/dist/src/cli/skill/views.d.ts +6 -0
  356. package/dist/src/cli/skill/views.js +90 -0
  357. package/dist/src/cli/snippet/_flags.d.ts +57 -0
  358. package/dist/src/cli/snippet/_flags.js +123 -0
  359. package/dist/src/cli/snippet/_resolve.d.ts +4 -0
  360. package/dist/src/cli/snippet/_resolve.js +32 -0
  361. package/dist/src/cli/snippet/_sync.d.ts +5 -0
  362. package/dist/src/cli/snippet/_sync.js +54 -0
  363. package/dist/src/cli/snippet/create.d.ts +19 -0
  364. package/dist/src/cli/snippet/create.js +35 -0
  365. package/dist/src/cli/snippet/delete.d.ts +8 -0
  366. package/dist/src/cli/snippet/delete.js +28 -0
  367. package/dist/src/cli/snippet/edit.d.ts +7 -0
  368. package/dist/src/cli/snippet/edit.js +29 -0
  369. package/dist/src/cli/snippet/get.d.ts +6 -0
  370. package/dist/src/cli/snippet/get.js +12 -0
  371. package/dist/src/cli/snippet/index.d.ts +43 -0
  372. package/dist/src/cli/snippet/index.js +58 -0
  373. package/dist/src/cli/snippet/list.d.ts +9 -0
  374. package/dist/src/cli/snippet/list.js +20 -0
  375. package/dist/src/cli/snippet/pull.d.ts +8 -0
  376. package/dist/src/cli/snippet/pull.js +33 -0
  377. package/dist/src/cli/snippet/push.d.ts +10 -0
  378. package/dist/src/cli/snippet/push.js +31 -0
  379. package/dist/src/cli/snippet/update.d.ts +8 -0
  380. package/dist/src/cli/snippet/update.js +16 -0
  381. package/dist/src/cli/topic/create.d.ts +10 -0
  382. package/dist/src/cli/topic/create.js +24 -0
  383. package/dist/src/cli/topic/delete.d.ts +7 -0
  384. package/dist/src/cli/topic/delete.js +37 -0
  385. package/dist/src/cli/topic/get.d.ts +6 -0
  386. package/dist/src/cli/topic/get.js +15 -0
  387. package/dist/src/cli/topic/index.d.ts +20 -0
  388. package/dist/src/cli/topic/index.js +32 -0
  389. package/dist/src/cli/topic/list.d.ts +4 -0
  390. package/dist/src/cli/topic/list.js +10 -0
  391. package/dist/src/cli/topic/update.d.ts +11 -0
  392. package/dist/src/cli/topic/update.js +51 -0
  393. package/dist/src/cli/ui/index.d.ts +24 -0
  394. package/dist/src/cli/ui/index.js +83 -0
  395. package/dist/src/cli/update/index.d.ts +10 -0
  396. package/dist/src/cli/update/index.js +142 -0
  397. package/dist/src/domain/admin-link.d.ts +12 -0
  398. package/dist/src/domain/admin-link.js +45 -0
  399. package/dist/src/domain/content-spec.d.ts +20 -0
  400. package/dist/src/domain/content-spec.js +78 -0
  401. package/dist/src/domain/envelope-compat.d.ts +68 -0
  402. package/dist/src/domain/envelope-compat.js +121 -0
  403. package/dist/src/domain/envelope.d.ts +34 -0
  404. package/dist/src/domain/envelope.js +355 -0
  405. package/dist/src/domain/errors.d.ts +336 -0
  406. package/dist/src/domain/errors.js +239 -0
  407. package/dist/src/domain/gate.d.ts +14 -0
  408. package/dist/src/domain/gate.js +18 -0
  409. package/dist/src/domain/payload.d.ts +64 -0
  410. package/dist/src/domain/payload.js +237 -0
  411. package/dist/src/domain/preflight-guards.d.ts +54 -0
  412. package/dist/src/domain/preflight-guards.js +130 -0
  413. package/dist/src/domain/runtime-flags.d.ts +33 -0
  414. package/dist/src/domain/runtime-flags.js +166 -0
  415. package/dist/src/domain/schema/api-envelope.d.ts +67 -0
  416. package/dist/src/domain/schema/api-envelope.js +65 -0
  417. package/dist/src/domain/schema/category.d.ts +23 -0
  418. package/dist/src/domain/schema/category.js +19 -0
  419. package/dist/src/domain/schema/config.d.ts +13 -0
  420. package/dist/src/domain/schema/config.js +18 -0
  421. package/dist/src/domain/schema/note.d.ts +76 -0
  422. package/dist/src/domain/schema/note.js +35 -0
  423. package/dist/src/domain/schema/page.d.ts +40 -0
  424. package/dist/src/domain/schema/page.js +22 -0
  425. package/dist/src/domain/schema/post.d.ts +68 -0
  426. package/dist/src/domain/schema/post.js +35 -0
  427. package/dist/src/domain/schema/profile.d.ts +14 -0
  428. package/dist/src/domain/schema/profile.js +22 -0
  429. package/dist/src/domain/schema/topic.d.ts +24 -0
  430. package/dist/src/domain/schema/topic.js +16 -0
  431. package/dist/src/domain/version.d.ts +15 -0
  432. package/dist/src/domain/version.js +43 -0
  433. package/dist/src/index.d.ts +4 -0
  434. package/dist/src/index.js +8 -0
  435. package/dist/src/layers/App.d.ts +30 -0
  436. package/dist/src/layers/App.js +39 -0
  437. package/dist/src/services/Ai/index.d.ts +13 -0
  438. package/dist/src/services/Ai/index.js +127 -0
  439. package/dist/src/services/Ai/overview.d.ts +7 -0
  440. package/dist/src/services/Ai/overview.js +11 -0
  441. package/dist/src/services/Ai/resources.d.ts +7 -0
  442. package/dist/src/services/Ai/resources.js +59 -0
  443. package/dist/src/services/Ai/shared.d.ts +2 -0
  444. package/dist/src/services/Ai/shared.js +11 -0
  445. package/dist/src/services/Ai/tasks.d.ts +8 -0
  446. package/dist/src/services/Ai/tasks.js +144 -0
  447. package/dist/src/services/Ai/types.d.ts +130 -0
  448. package/dist/src/services/Ai/types.js +1 -0
  449. package/dist/src/services/Api.d.ts +67 -0
  450. package/dist/src/services/Api.js +348 -0
  451. package/dist/src/services/Auth.d.ts +101 -0
  452. package/dist/src/services/Auth.js +402 -0
  453. package/dist/src/services/Backup.d.ts +8 -0
  454. package/dist/src/services/Backup.js +4 -0
  455. package/dist/src/services/Cache.d.ts +8 -0
  456. package/dist/src/services/Cache.js +4 -0
  457. package/dist/src/services/Comment.d.ts +48 -0
  458. package/dist/src/services/Comment.js +102 -0
  459. package/dist/src/services/Config.d.ts +95 -0
  460. package/dist/src/services/Config.js +359 -0
  461. package/dist/src/services/Editor.d.ts +28 -0
  462. package/dist/src/services/Editor.js +95 -0
  463. package/dist/src/services/Lexical.d.ts +27 -0
  464. package/dist/src/services/Lexical.js +56 -0
  465. package/dist/src/services/Migration.d.ts +31 -0
  466. package/dist/src/services/Migration.js +177 -0
  467. package/dist/src/services/Profile.d.ts +29 -0
  468. package/dist/src/services/Profile.js +115 -0
  469. package/dist/src/services/Renderer/content.d.ts +16 -0
  470. package/dist/src/services/Renderer/content.js +110 -0
  471. package/dist/src/services/Renderer/datetime.d.ts +38 -0
  472. package/dist/src/services/Renderer/datetime.js +147 -0
  473. package/dist/src/services/Renderer/errors.d.ts +3 -0
  474. package/dist/src/services/Renderer/errors.js +59 -0
  475. package/dist/src/services/Renderer/index.d.ts +13 -0
  476. package/dist/src/services/Renderer/index.js +11 -0
  477. package/dist/src/services/Renderer/lists.d.ts +1 -0
  478. package/dist/src/services/Renderer/lists.js +101 -0
  479. package/dist/src/services/Renderer/options.d.ts +10 -0
  480. package/dist/src/services/Renderer/options.js +13 -0
  481. package/dist/src/services/Renderer/primitives.d.ts +4 -0
  482. package/dist/src/services/Renderer/primitives.js +12 -0
  483. package/dist/src/services/Renderer/service.d.ts +35 -0
  484. package/dist/src/services/Renderer/service.js +123 -0
  485. package/dist/src/services/Renderer/view.d.ts +16 -0
  486. package/dist/src/services/Renderer/view.js +1 -0
  487. package/dist/src/services/Resolver.d.ts +47 -0
  488. package/dist/src/services/Resolver.js +269 -0
  489. package/dist/src/services/Skill.d.ts +29 -0
  490. package/dist/src/services/Skill.js +421 -0
  491. package/dist/src/services/UpdateNotifier.d.ts +162 -0
  492. package/dist/src/services/UpdateNotifier.js +572 -0
  493. package/dist/test/cli/ai/ai.test.d.ts +1 -0
  494. package/dist/test/cli/ai/ai.test.js +507 -0
  495. package/dist/test/cli/ai/verbs.test.d.ts +1 -0
  496. package/dist/test/cli/ai/verbs.test.js +235 -0
  497. package/dist/test/cli/auth/login.test.d.ts +1 -0
  498. package/dist/test/cli/auth/login.test.js +236 -0
  499. package/dist/test/cli/auth/logout-whoami.test.d.ts +1 -0
  500. package/dist/test/cli/auth/logout-whoami.test.js +124 -0
  501. package/dist/test/cli/auth/status.test.d.ts +1 -0
  502. package/dist/test/cli/auth/status.test.js +90 -0
  503. package/dist/test/cli/category/category.test.d.ts +1 -0
  504. package/dist/test/cli/category/category.test.js +175 -0
  505. package/dist/test/cli/comment/comment.test.d.ts +1 -0
  506. package/dist/test/cli/comment/comment.test.js +445 -0
  507. package/dist/test/cli/config/config.test.d.ts +1 -0
  508. package/dist/test/cli/config/config.test.js +281 -0
  509. package/dist/test/cli/edit-roundtrip.test.d.ts +1 -0
  510. package/dist/test/cli/edit-roundtrip.test.js +259 -0
  511. package/dist/test/cli/file/file.test.d.ts +1 -0
  512. package/dist/test/cli/file/file.test.js +185 -0
  513. package/dist/test/cli/help.test.d.ts +1 -0
  514. package/dist/test/cli/help.test.js +289 -0
  515. package/dist/test/cli/note/create.test.d.ts +1 -0
  516. package/dist/test/cli/note/create.test.js +155 -0
  517. package/dist/test/cli/note/list.test.d.ts +1 -0
  518. package/dist/test/cli/note/list.test.js +115 -0
  519. package/dist/test/cli/note/publish.test.d.ts +1 -0
  520. package/dist/test/cli/note/publish.test.js +123 -0
  521. package/dist/test/cli/page/page.test.d.ts +1 -0
  522. package/dist/test/cli/page/page.test.js +185 -0
  523. package/dist/test/cli/post/create.test.d.ts +1 -0
  524. package/dist/test/cli/post/create.test.js +172 -0
  525. package/dist/test/cli/post/list.test.d.ts +1 -0
  526. package/dist/test/cli/post/list.test.js +133 -0
  527. package/dist/test/cli/post/publish.test.d.ts +1 -0
  528. package/dist/test/cli/post/publish.test.js +139 -0
  529. package/dist/test/cli/post/stage-apply.test.d.ts +1 -0
  530. package/dist/test/cli/post/stage-apply.test.js +215 -0
  531. package/dist/test/cli/post/update.test.d.ts +1 -0
  532. package/dist/test/cli/post/update.test.js +160 -0
  533. package/dist/test/cli/post-note-crud.test.d.ts +1 -0
  534. package/dist/test/cli/post-note-crud.test.js +362 -0
  535. package/dist/test/cli/profile/ls.test.d.ts +1 -0
  536. package/dist/test/cli/profile/ls.test.js +93 -0
  537. package/dist/test/cli/profile/mark-use.test.d.ts +1 -0
  538. package/dist/test/cli/profile/mark-use.test.js +216 -0
  539. package/dist/test/cli/project-crud.test.d.ts +1 -0
  540. package/dist/test/cli/project-crud.test.js +315 -0
  541. package/dist/test/cli/render/lexical.test.d.ts +1 -0
  542. package/dist/test/cli/render/lexical.test.js +216 -0
  543. package/dist/test/cli/render/markdown.test.d.ts +1 -0
  544. package/dist/test/cli/render/markdown.test.js +39 -0
  545. package/dist/test/cli/snippet-crud.test.d.ts +1 -0
  546. package/dist/test/cli/snippet-crud.test.js +293 -0
  547. package/dist/test/cli/topic/topic.test.d.ts +1 -0
  548. package/dist/test/cli/topic/topic.test.js +181 -0
  549. package/dist/test/cli/update.test.d.ts +1 -0
  550. package/dist/test/cli/update.test.js +395 -0
  551. package/dist/test/domain/content-spec.test.d.ts +1 -0
  552. package/dist/test/domain/content-spec.test.js +126 -0
  553. package/dist/test/domain/envelope-compat.test.d.ts +1 -0
  554. package/dist/test/domain/envelope-compat.test.js +126 -0
  555. package/dist/test/domain/envelope.test.d.ts +1 -0
  556. package/dist/test/domain/envelope.test.js +149 -0
  557. package/dist/test/domain/errors.test.d.ts +1 -0
  558. package/dist/test/domain/errors.test.js +127 -0
  559. package/dist/test/domain/gate.test.d.ts +1 -0
  560. package/dist/test/domain/gate.test.js +128 -0
  561. package/dist/test/domain/payload.test.d.ts +1 -0
  562. package/dist/test/domain/payload.test.js +259 -0
  563. package/dist/test/helper/test-fs.d.ts +24 -0
  564. package/dist/test/helper/test-fs.js +161 -0
  565. package/dist/test/helper/test-http.d.ts +31 -0
  566. package/dist/test/helper/test-http.js +66 -0
  567. package/dist/test/integration/_helpers.d.ts +5 -0
  568. package/dist/test/integration/_helpers.js +24 -0
  569. package/dist/test/integration/cli-error-envelope.test.d.ts +1 -0
  570. package/dist/test/integration/cli-error-envelope.test.js +137 -0
  571. package/dist/test/integration/cli-help-render.test.d.ts +1 -0
  572. package/dist/test/integration/cli-help-render.test.js +149 -0
  573. package/dist/test/integration/cli-help.test.d.ts +1 -0
  574. package/dist/test/integration/cli-help.test.js +67 -0
  575. package/dist/test/integration/cli-post-list.test.d.ts +1 -0
  576. package/dist/test/integration/cli-post-list.test.js +140 -0
  577. package/dist/test/integration/cli-skill.test.d.ts +1 -0
  578. package/dist/test/integration/cli-skill.test.js +74 -0
  579. package/dist/test/integration/cli-version.test.d.ts +1 -0
  580. package/dist/test/integration/cli-version.test.js +37 -0
  581. package/dist/test/services/Api.test.d.ts +1 -0
  582. package/dist/test/services/Api.test.js +553 -0
  583. package/dist/test/services/Auth.test.d.ts +1 -0
  584. package/dist/test/services/Auth.test.js +650 -0
  585. package/dist/test/services/Config.test.d.ts +1 -0
  586. package/dist/test/services/Config.test.js +510 -0
  587. package/dist/test/services/Datetime.test.d.ts +1 -0
  588. package/dist/test/services/Datetime.test.js +113 -0
  589. package/dist/test/services/Editor.test.d.ts +1 -0
  590. package/dist/test/services/Editor.test.js +205 -0
  591. package/dist/test/services/Lexical.errors.test.d.ts +1 -0
  592. package/dist/test/services/Lexical.errors.test.js +60 -0
  593. package/dist/test/services/Lexical.test.d.ts +1 -0
  594. package/dist/test/services/Lexical.test.js +68 -0
  595. package/dist/test/services/Migration.test.d.ts +1 -0
  596. package/dist/test/services/Migration.test.js +376 -0
  597. package/dist/test/services/Profile.test.d.ts +1 -0
  598. package/dist/test/services/Profile.test.js +277 -0
  599. package/dist/test/services/Renderer.test.d.ts +1 -0
  600. package/dist/test/services/Renderer.test.js +538 -0
  601. package/dist/test/services/Resolver.test.d.ts +1 -0
  602. package/dist/test/services/Resolver.test.js +320 -0
  603. package/dist/test/services/Skill.test.d.ts +1 -0
  604. package/dist/test/services/Skill.test.js +261 -0
  605. package/dist/test/services/UpdateNotifier.spawn.test.d.ts +1 -0
  606. package/dist/test/services/UpdateNotifier.spawn.test.js +73 -0
  607. package/dist/test/services/UpdateNotifier.test.d.ts +1 -0
  608. package/dist/test/services/UpdateNotifier.test.js +912 -0
  609. package/dist/vendor/litexml/cli.mjs +2481 -2561
  610. package/dist/vendor/litexml/litexml-html-preview-client.css +178 -60
  611. package/dist/vendor/litexml/litexml-html-preview-client.js +9950 -8762
  612. package/dist/vendor/litexml/style.css +11 -7
  613. package/package.json +23 -21
  614. package/skills/commands-ai.md +45 -12
  615. package/skills/overview.md +1 -1
  616. package/skills/safety.md +1 -1
  617. package/dist/esm-CH7CrOvh.mjs +0 -2
@@ -0,0 +1,32 @@
1
+ import { Command } from '@effect/cli';
2
+ import { registerCommandHelp } from '../help/registry';
3
+ import { create } from './create';
4
+ import { del } from './delete';
5
+ import { get } from './get';
6
+ import { list } from './list';
7
+ import { update } from './update';
8
+ const help = registerCommandHelp({
9
+ name: 'topic',
10
+ description: 'manage topics',
11
+ skillChapter: 'commands-topic',
12
+ verbs: [
13
+ { name: 'list', description: 'list topics' },
14
+ { name: 'get', args: ['<slugOrId>'], description: 'show a single topic' },
15
+ {
16
+ name: 'create',
17
+ args: ['--name <n>', '--slug <s>', '[--description ...]', '[--icon ...]'],
18
+ description: 'create a topic',
19
+ },
20
+ {
21
+ name: 'update',
22
+ args: ['<slugOrId>', '[--name ...]', '...'],
23
+ description: 'update a topic',
24
+ },
25
+ {
26
+ name: 'delete',
27
+ args: ['<slugOrId>', '[--force]'],
28
+ description: 'delete a topic',
29
+ },
30
+ ],
31
+ });
32
+ export const topicCmd = Command.make('topic').pipe(Command.withDescription(help.description), Command.withSubcommands([list, get, create, update, del]));
@@ -0,0 +1,4 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Api } from '../../services/Api';
3
+ import { Renderer } from '../../services/Renderer';
4
+ export declare const list: Command.Command<"list", Api | Renderer, import("../../services/Api").ApiError, {}>;
@@ -0,0 +1,10 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Effect } from 'effect';
3
+ import { Api } from '../../services/Api';
4
+ import { Renderer } from '../../services/Renderer';
5
+ export const list = Command.make('list', {}, () => Effect.gen(function* () {
6
+ const api = yield* Api;
7
+ const renderer = yield* Renderer;
8
+ const res = yield* api.request('/topics/all');
9
+ yield* renderer.emitSuccess(res);
10
+ }));
@@ -0,0 +1,11 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Option } from 'effect';
3
+ import { Api } from '../../services/Api';
4
+ import { Renderer } from '../../services/Renderer';
5
+ export declare const update: Command.Command<"update", Api | Renderer, import("../../services/Api").ApiError, {
6
+ readonly slugOrId: string;
7
+ readonly name: Option.Option<string>;
8
+ readonly slug: Option.Option<string>;
9
+ readonly description: Option.Option<string>;
10
+ readonly icon: Option.Option<string>;
11
+ }>;
@@ -0,0 +1,51 @@
1
+ import { Args, Command, Options } from '@effect/cli';
2
+ import { Effect, Option } from 'effect';
3
+ import { ResourceNotFound } from '../../domain/errors';
4
+ import { Api } from '../../services/Api';
5
+ import { Renderer } from '../../services/Renderer';
6
+ import { isSnowflakeId } from '../../services/Resolver';
7
+ const slugOrId = Args.text({ name: 'slugOrId' });
8
+ const name = Options.text('name').pipe(Options.optional);
9
+ const slug = Options.text('slug').pipe(Options.optional);
10
+ const description = Options.text('description').pipe(Options.optional);
11
+ const icon = Options.text('icon').pipe(Options.optional);
12
+ const resolveTopicId = (api, ref) => Effect.gen(function* () {
13
+ if (isSnowflakeId(ref))
14
+ return ref;
15
+ const res = yield* api
16
+ .request(`/topics/slug/${encodeURIComponent(ref)}`)
17
+ .pipe(Effect.catchAll(() => Effect.succeed(null)));
18
+ const id = (res && res.id) ??
19
+ (res && res.data?.id);
20
+ if (!id) {
21
+ return yield* Effect.fail(new ResourceNotFound({
22
+ kind: 'topic',
23
+ ref,
24
+ message: `topic not found: ${ref}`,
25
+ }));
26
+ }
27
+ return id;
28
+ });
29
+ export const update = Command.make('update', { slugOrId, name, slug, description, icon }, ({ slugOrId, name, slug, description, icon }) => Effect.gen(function* () {
30
+ const body = {};
31
+ const n = Option.getOrUndefined(name);
32
+ if (n)
33
+ body.name = n;
34
+ const s = Option.getOrUndefined(slug);
35
+ if (s)
36
+ body.slug = s;
37
+ const d = Option.getOrUndefined(description);
38
+ if (d)
39
+ body.description = d;
40
+ const ic = Option.getOrUndefined(icon);
41
+ if (ic)
42
+ body.icon = ic;
43
+ const api = yield* Api;
44
+ const renderer = yield* Renderer;
45
+ const id = yield* resolveTopicId(api, slugOrId);
46
+ const res = yield* api.request(`/topics/${id}`, {
47
+ method: 'PATCH',
48
+ body,
49
+ });
50
+ yield* renderer.emitSuccess(res);
51
+ }));
@@ -0,0 +1,24 @@
1
+ export { ANSI, isColorEnabled, visibleLen, wrap } from '../render';
2
+ export declare const ok: (text: string, color: boolean) => string;
3
+ export declare const fail: (text: string, color: boolean) => string;
4
+ export declare const arrow: (text: string, color: boolean) => string;
5
+ export declare const star: (text: string, color: boolean) => string;
6
+ export declare const dot: (text: string, color: boolean) => string;
7
+ export declare const dim: (text: string, color: boolean) => string;
8
+ export declare const bold: (text: string, color: boolean) => string;
9
+ export declare const roundedBox: (lines: string[]) => string;
10
+ /** Indent every line of `text` by `pad` spaces. */
11
+ export declare const indent: (text: string, pad: number) => string;
12
+ export interface TableColumn {
13
+ readonly key: string;
14
+ readonly label: string;
15
+ /** Minimum column width (auto-grows to fit content). */
16
+ readonly minWidth?: number;
17
+ }
18
+ export declare const renderTable: (cols: readonly TableColumn[], rows: readonly Record<string, string>[], opts: {
19
+ readonly color: boolean;
20
+ readonly prefix?: (row: number) => string;
21
+ }) => string;
22
+ export declare const humanDuration: (seconds: number) => string;
23
+ /** Format milliseconds-since-epoch as `<duration>` until that point. */
24
+ export declare const humanUntil: (epochMs: number) => string;
@@ -0,0 +1,83 @@
1
+ // Small TTY-aware UI primitives for command-specific rendering.
2
+ //
3
+ // `renderMarkdownToAnsi` (in ../render) handles structured prose, but
4
+ // some commands need bespoke layouts — boxed device-codes, fixed-width tables,
5
+ // status badges. Those primitives live here. Each takes an explicit
6
+ // `{ color: boolean }` so callers can opt out (NO_COLOR / non-TTY).
7
+ import { ANSI, visibleLen, wrap } from '../render';
8
+ export { ANSI, isColorEnabled, visibleLen, wrap } from '../render';
9
+ // ---------------------------------------------------------------------------
10
+ // Badges — leading icon + text, coloured when permitted.
11
+ // ---------------------------------------------------------------------------
12
+ export const ok = (text, color) => `${wrap(ANSI.green, '✓', color)} ${text}`;
13
+ export const fail = (text, color) => `${wrap(ANSI.red, '✗', color)} ${text}`;
14
+ export const arrow = (text, color) => `${wrap(ANSI.cyan, '→', color)} ${text}`;
15
+ export const star = (text, color) => `${wrap(ANSI.yellow, '✦', color)} ${text}`;
16
+ export const dot = (text, color) => `${wrap(ANSI.cyan, '●', color)} ${text}`;
17
+ export const dim = (text, color) => wrap(ANSI.dim, text, color);
18
+ export const bold = (text, color) => wrap(ANSI.bold, text, color);
19
+ // ---------------------------------------------------------------------------
20
+ // Rounded box — `╭─╮│╰─╯`. Always unicode; modern terminals handle it.
21
+ // ---------------------------------------------------------------------------
22
+ export const roundedBox = (lines) => {
23
+ const inner = lines.map((l) => l);
24
+ const width = inner.reduce((max, l) => Math.max(max, visibleLen(l)), 0);
25
+ const horizontal = '─'.repeat(width + 2);
26
+ const top = `╭${horizontal}╮`;
27
+ const bottom = `╰${horizontal}╯`;
28
+ const middle = inner.map((l) => {
29
+ const pad = ' '.repeat(width - visibleLen(l));
30
+ return `│ ${l}${pad} │`;
31
+ });
32
+ return [top, ...middle, bottom].join('\n');
33
+ };
34
+ /** Indent every line of `text` by `pad` spaces. */
35
+ export const indent = (text, pad) => {
36
+ const prefix = ' '.repeat(pad);
37
+ return text
38
+ .split('\n')
39
+ .map((l) => `${prefix}${l}`)
40
+ .join('\n');
41
+ };
42
+ export const renderTable = (cols, rows, opts) => {
43
+ if (rows.length === 0) {
44
+ return dim('(no rows)', opts.color);
45
+ }
46
+ const widths = cols.map((c) => Math.max(c.label.length, c.minWidth ?? 0, ...rows.map((r) => visibleLen(r[c.key] ?? ''))));
47
+ const renderRow = (cells) => cells
48
+ .map((cell, i) => {
49
+ const padLen = widths[i] - visibleLen(cell);
50
+ return `${cell}${' '.repeat(Math.max(0, padLen))}`;
51
+ })
52
+ .join(' ');
53
+ const header = wrap(ANSI.dim, renderRow(cols.map((c) => c.label.toUpperCase())), opts.color);
54
+ const body = rows.map((row, idx) => {
55
+ const prefix = opts.prefix?.(idx) ?? ' ';
56
+ return `${prefix} ${renderRow(cols.map((c) => row[c.key] ?? ''))}`;
57
+ });
58
+ return [` ${header}`, ...body].join('\n');
59
+ };
60
+ // ---------------------------------------------------------------------------
61
+ // Human-readable duration — seconds → "30 min", "2h 14m", "45s".
62
+ // ---------------------------------------------------------------------------
63
+ export const humanDuration = (seconds) => {
64
+ if (seconds < 0)
65
+ return 'expired';
66
+ if (seconds < 60)
67
+ return `${seconds}s`;
68
+ const minutes = Math.floor(seconds / 60);
69
+ if (minutes < 60)
70
+ return `${minutes} min`;
71
+ const hours = Math.floor(minutes / 60);
72
+ const remMin = minutes % 60;
73
+ if (hours < 24)
74
+ return remMin ? `${hours}h ${remMin}m` : `${hours}h`;
75
+ const days = Math.floor(hours / 24);
76
+ const remH = hours % 24;
77
+ return remH ? `${days}d ${remH}h` : `${days}d`;
78
+ };
79
+ /** Format milliseconds-since-epoch as `<duration>` until that point. */
80
+ export const humanUntil = (epochMs) => {
81
+ const seconds = Math.round((epochMs - Date.now()) / 1000);
82
+ return humanDuration(seconds);
83
+ };
@@ -0,0 +1,10 @@
1
+ import { Command } from '@effect/cli';
2
+ import { Option } from 'effect';
3
+ import { Renderer } from '../../services/Renderer';
4
+ export declare const updateCmd: Command.Command<"update", Renderer, import("../../services/UpdateNotifier").RunUpdateError, {
5
+ readonly check: Option.Option<boolean>;
6
+ readonly prerelease: Option.Option<boolean>;
7
+ readonly pm: Option.Option<"npm" | "pnpm" | "yarn" | "bun">;
8
+ readonly force: Option.Option<boolean>;
9
+ readonly yes: Option.Option<boolean>;
10
+ }>;
@@ -0,0 +1,142 @@
1
+ import { createRequire } from 'node:module';
2
+ import { Command, Options } from '@effect/cli';
3
+ import { Effect, Option } from 'effect';
4
+ import { Renderer } from '../../services/Renderer';
5
+ import { make as makeUpdater, } from '../../services/UpdateNotifier';
6
+ import { registerCommandHelp } from '../help/registry';
7
+ import { bold, dim, fail, ok, star } from '../ui';
8
+ registerCommandHelp({
9
+ name: 'update',
10
+ description: 'install the newest mxs release (auto, no prompt)',
11
+ isLeaf: true,
12
+ leafOptions: [
13
+ { flag: '--check', description: 'compare versions only; do not install' },
14
+ { flag: '--prerelease', description: 'use the `next` dist-tag channel' },
15
+ {
16
+ flag: '--pm <name>',
17
+ description: 'force package manager (one of: npm, pnpm, yarn, bun)',
18
+ },
19
+ { flag: '--force', description: 'bypass the 24h passive-check cache' },
20
+ {
21
+ flag: '--yes',
22
+ description: 'deprecated no-op (kept for back-compat; updates run without a prompt by default)',
23
+ },
24
+ ],
25
+ });
26
+ // Read package version once at module load. Walks up to find the cli
27
+ // package.json so the lookup works for both dev (`tsx src/...`) and the
28
+ // bundled `dist/*.mjs` layouts.
29
+ const requireFrom = createRequire(import.meta.url);
30
+ const resolveCliVersion = () => {
31
+ const candidates = [
32
+ '../package.json',
33
+ '../../package.json',
34
+ '../../../package.json',
35
+ ];
36
+ for (const candidate of candidates) {
37
+ try {
38
+ const pkg = requireFrom(candidate);
39
+ if (pkg.name === '@mx-space/cli' && typeof pkg.version === 'string') {
40
+ return pkg.version;
41
+ }
42
+ }
43
+ catch {
44
+ // try next candidate
45
+ }
46
+ }
47
+ return '0.0.0-unknown';
48
+ };
49
+ const CLI_VERSION = resolveCliVersion();
50
+ const check = Options.boolean('check').pipe(Options.optional);
51
+ const prerelease = Options.boolean('prerelease').pipe(Options.optional);
52
+ const pm = Options.choice('pm', ['npm', 'pnpm', 'yarn', 'bun']).pipe(Options.optional);
53
+ const force = Options.boolean('force').pipe(Options.optional);
54
+ const yes = Options.boolean('yes').pipe(Options.optional);
55
+ const optBool = (opt) => Option.getOrUndefined(opt);
56
+ export const updateCmd = Command.make('update', { check, prerelease, pm, force, yes }, ({ check, prerelease, pm, force, yes }) => Effect.gen(function* () {
57
+ const renderer = yield* Renderer;
58
+ const outOpts = yield* renderer.options;
59
+ // Auto-install: `mxs update` no longer prompts. Foreground runs go
60
+ // through the same notifier as the passive background path; we do not
61
+ // wire `Editor.confirm` here because `runUpdate` itself stopped calling
62
+ // any confirmImpl.
63
+ const updater = makeUpdater();
64
+ const opts = {
65
+ currentVersion: CLI_VERSION,
66
+ check: optBool(check),
67
+ prerelease: optBool(prerelease),
68
+ pm: Option.getOrUndefined(pm),
69
+ force: optBool(force),
70
+ yes: optBool(yes),
71
+ json: outOpts.json,
72
+ };
73
+ const result = yield* updater.runUpdate(opts);
74
+ // The UpdateNotifier already streams `emitInfo` lines via deps.emitInfo
75
+ // (default: process.stderr). The renderer.emitSuccess emits the final
76
+ // structured result for JSON consumers + a closing info line in TTY.
77
+ const command = result.command ?? null;
78
+ if (result.upToDate) {
79
+ yield* renderer.emitView({
80
+ current: result.fromVersion,
81
+ latest: result.toVersion,
82
+ channel: result.channel,
83
+ up_to_date: true,
84
+ }, ({ color }) => ok(`up to date · ${bold(result.fromVersion, color)} ${dim(`(${result.channel})`, color)}`, color));
85
+ return;
86
+ }
87
+ if (result.cancelled) {
88
+ yield* renderer.emitView({
89
+ current: result.fromVersion,
90
+ latest: result.toVersion,
91
+ channel: result.channel,
92
+ pm: result.pm,
93
+ command,
94
+ cancelled: true,
95
+ }, ({ color }) => fail(`update cancelled · ${dim(`${result.fromVersion} → ${result.toVersion}`, color)}`, color));
96
+ return;
97
+ }
98
+ if (result.upgraded) {
99
+ yield* renderer.emitView({
100
+ current: result.fromVersion,
101
+ latest: result.toVersion,
102
+ channel: result.channel,
103
+ pm: result.pm,
104
+ upgraded: true,
105
+ }, ({ color }) => ok(`upgraded · ${bold(`${result.fromVersion} → ${result.toVersion}`, color)} ${dim(`(${result.channel}, ${result.pm})`, color)}`, color));
106
+ return;
107
+ }
108
+ // --check path: not up to date, but no install ran.
109
+ if (opts.check) {
110
+ yield* renderer.emitView({
111
+ current: result.fromVersion,
112
+ latest: result.toVersion,
113
+ channel: result.channel,
114
+ pm: result.pm,
115
+ up_to_date: false,
116
+ }, ({ color }) => {
117
+ const head = star('update available', color);
118
+ const versions = ` ${bold(result.fromVersion, color)} → ${bold(result.toVersion, color)} ${dim(result.channel, color)}`;
119
+ const cmd = command
120
+ ? `\n\n ${dim('run:', color)} ${bold(command, color)}`
121
+ : '';
122
+ return `${head}\n\n${versions}${cmd}`;
123
+ });
124
+ return;
125
+ }
126
+ // --dry-run path
127
+ yield* renderer.emitView({
128
+ current: result.fromVersion,
129
+ latest: result.toVersion,
130
+ channel: result.channel,
131
+ pm: result.pm,
132
+ command,
133
+ dry_run: true,
134
+ }, ({ color }) => {
135
+ const head = star('would upgrade', color);
136
+ const versions = ` ${bold(result.fromVersion, color)} → ${bold(result.toVersion, color)} ${dim(result.channel, color)}`;
137
+ const cmd = command
138
+ ? `\n\n ${dim('would run:', color)} ${bold(command, color)}`
139
+ : '';
140
+ return `${head}\n\n${versions}${cmd}`;
141
+ });
142
+ }));
@@ -0,0 +1,12 @@
1
+ import { Effect } from 'effect';
2
+ import { Api } from '../services/Api';
3
+ import { Renderer } from '../services/Renderer';
4
+ export type AdminEditKind = 'posts' | 'notes' | 'pages' | 'projects';
5
+ /**
6
+ * Resolve the server's admin URL from `/options/url`, build the admin
7
+ * edit-page URL for the given resource, and open it in the user's browser.
8
+ * Non-fatal: missing admin_url or browser-launch failures emit a warning
9
+ * and the parent effect continues.
10
+ */
11
+ export declare const openAdminEdit: (kind: AdminEditKind, id: string) => Effect.Effect<void, import("../services/Api").ApiError, Api | Renderer>;
12
+ export declare const openAdminDraftEdit: (kind: AdminEditKind, draftId: string, refId?: string) => Effect.Effect<void, import("../services/Api").ApiError, Api | Renderer>;
@@ -0,0 +1,45 @@
1
+ import { Effect } from 'effect';
2
+ import open from 'open';
3
+ import { Api } from '../services/Api';
4
+ import { Renderer } from '../services/Renderer';
5
+ const buildEditUrl = (adminUrl, kind, id) => {
6
+ // Admin uses hash-based react-router. posts/notes/pages route at
7
+ // `#/<kind>/edit?id=<id>`; projects route at `#/projects/<id>`.
8
+ const base = adminUrl.replace(/\/+$/, '');
9
+ if (kind === 'projects') {
10
+ return `${base}#/projects/${encodeURIComponent(id)}`;
11
+ }
12
+ return `${base}#/${kind}/edit?id=${encodeURIComponent(id)}`;
13
+ };
14
+ const buildDraftEditUrl = (adminUrl, kind, draftId, refId) => {
15
+ const base = adminUrl.replace(/\/+$/, '');
16
+ const params = new URLSearchParams();
17
+ params.set('draftId', draftId);
18
+ if (refId)
19
+ params.set('id', refId);
20
+ return `${base}#/${kind}/edit?${params.toString()}`;
21
+ };
22
+ const openAdminUrl = (buildUrl) => Effect.gen(function* () {
23
+ const renderer = yield* Renderer;
24
+ const api = yield* Api;
25
+ const opts = yield* api.request('/options/url');
26
+ const adminUrl = opts.data?.admin_url ?? opts.admin_url;
27
+ if (!adminUrl) {
28
+ yield* renderer.emitWarn('admin_url is not configured on the server; skipping --open');
29
+ return;
30
+ }
31
+ const url = buildUrl(adminUrl);
32
+ yield* renderer.emitInfo(`opening admin: ${url}`);
33
+ yield* Effect.tryPromise({
34
+ try: () => open(url),
35
+ catch: () => new Error('failed to launch browser'),
36
+ }).pipe(Effect.catchAll((e) => renderer.emitWarn(`could not launch browser: ${e instanceof Error ? e.message : String(e)}`)));
37
+ });
38
+ /**
39
+ * Resolve the server's admin URL from `/options/url`, build the admin
40
+ * edit-page URL for the given resource, and open it in the user's browser.
41
+ * Non-fatal: missing admin_url or browser-launch failures emit a warning
42
+ * and the parent effect continues.
43
+ */
44
+ export const openAdminEdit = (kind, id) => openAdminUrl((adminUrl) => buildEditUrl(adminUrl, kind, id));
45
+ export const openAdminDraftEdit = (kind, draftId, refId) => openAdminUrl((adminUrl) => buildDraftEditUrl(adminUrl, kind, draftId, refId));
@@ -0,0 +1,20 @@
1
+ import { FileSystem, Path } from '@effect/platform';
2
+ import { Effect } from 'effect';
3
+ import { ValidationFailed } from './errors';
4
+ export interface ContentSource {
5
+ readonly text: string;
6
+ readonly origin: 'inline' | 'file' | 'stdin';
7
+ readonly path?: string;
8
+ }
9
+ /**
10
+ * Resolve a content spec — one of:
11
+ * - `undefined` → returns `null`
12
+ * - `"-"` or `"stdin"` → reads stdin
13
+ * - `"file=<path>"` → reads that file (relative to cwd)
14
+ * - any other value → inline literal
15
+ */
16
+ export declare const readContentSpec: (spec: string | undefined, opts?: {
17
+ readonly cwd?: string;
18
+ }) => Effect.Effect<ContentSource | null, ValidationFailed, FileSystem.FileSystem | Path.Path>;
19
+ export declare const readJsonSpec: (spec: string | undefined) => Effect.Effect<unknown, ValidationFailed, FileSystem.FileSystem | Path.Path>;
20
+ export declare const readStdin: Effect.Effect<string, ValidationFailed>;
@@ -0,0 +1,78 @@
1
+ import { FileSystem, Path } from '@effect/platform';
2
+ import { Effect } from 'effect';
3
+ import { ValidationFailed } from './errors';
4
+ const messageOf = (err) => {
5
+ if (err instanceof Error)
6
+ return err.message;
7
+ if (typeof err === 'string')
8
+ return err;
9
+ return String(err);
10
+ };
11
+ /**
12
+ * Resolve a content spec — one of:
13
+ * - `undefined` → returns `null`
14
+ * - `"-"` or `"stdin"` → reads stdin
15
+ * - `"file=<path>"` → reads that file (relative to cwd)
16
+ * - any other value → inline literal
17
+ */
18
+ export const readContentSpec = (spec, opts = {}) => Effect.gen(function* () {
19
+ if (spec === undefined)
20
+ return null;
21
+ if (spec === '-' || spec === 'stdin') {
22
+ const text = yield* readStdin;
23
+ return { text, origin: 'stdin' };
24
+ }
25
+ if (spec.startsWith('file=')) {
26
+ const path = yield* Path.Path;
27
+ const fs = yield* FileSystem.FileSystem;
28
+ const p = path.resolve(opts.cwd ?? process.cwd(), spec.slice('file='.length));
29
+ const text = yield* fs.readFileString(p).pipe(Effect.mapError((err) => new ValidationFailed({
30
+ message: `failed to read ${p}: ${messageOf(err)}`,
31
+ })));
32
+ return { text, origin: 'file', path: p };
33
+ }
34
+ return { text: spec, origin: 'inline' };
35
+ });
36
+ export const readJsonSpec = (spec) => Effect.gen(function* () {
37
+ if (spec === undefined)
38
+ return undefined;
39
+ if (spec.startsWith('file=')) {
40
+ const path = yield* Path.Path;
41
+ const fs = yield* FileSystem.FileSystem;
42
+ const p = path.resolve(process.cwd(), spec.slice('file='.length));
43
+ const text = yield* fs.readFileString(p).pipe(Effect.mapError((err) => new ValidationFailed({
44
+ message: `failed to read JSON from ${p}: ${messageOf(err)}`,
45
+ })));
46
+ return yield* Effect.try({
47
+ try: () => JSON.parse(text),
48
+ catch: (err) => new ValidationFailed({
49
+ message: `failed to parse JSON: ${messageOf(err)}`,
50
+ }),
51
+ });
52
+ }
53
+ return yield* Effect.try({
54
+ try: () => JSON.parse(spec),
55
+ catch: (err) => new ValidationFailed({
56
+ message: `failed to parse JSON: ${messageOf(err)}`,
57
+ }),
58
+ });
59
+ });
60
+ export const readStdin = Effect.gen(function* () {
61
+ if (process.stdin.isTTY) {
62
+ return yield* Effect.fail(new ValidationFailed({
63
+ message: 'requested stdin content but stdin is a TTY',
64
+ }));
65
+ }
66
+ return yield* Effect.tryPromise({
67
+ try: async () => {
68
+ const chunks = [];
69
+ for await (const chunk of process.stdin) {
70
+ chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);
71
+ }
72
+ return Buffer.concat(chunks).toString('utf8');
73
+ },
74
+ catch: (err) => new ValidationFailed({
75
+ message: `failed to read stdin: ${messageOf(err)}`,
76
+ }),
77
+ });
78
+ });
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @deprecated Compat shim for the V2 → V3 mx-core wire-format transition.
3
+ *
4
+ * Remove this file once all deployments referenced by the CLI's user base are
5
+ * confirmed V3 (`API_VERSION = 3` in mx-core). Removal checklist:
6
+ *
7
+ * 1. Delete this file (`envelope-compat.ts`) and its test
8
+ * (`test/domain/envelope-compat.test.ts`).
9
+ * 2. In `src/services/Api.ts`, `grep -n 'COMPAT:envelope'` and delete the
10
+ * two normalizer calls + the `Ref<WireVersion>` field + verbose log
11
+ * annotation.
12
+ * 3. In `src/services/Config.ts`, change `parsed.apiVersion ?? 2` to
13
+ * `?? 3`.
14
+ * 4. In `test/integration/cli-post-list.test.ts` and
15
+ * `test/integration/cli-error-envelope.test.ts`, drop the V2 `it`
16
+ * block; keep only the V3 mock.
17
+ * 5. Run `pnpm -C packages/cli typecheck && pnpm -C packages/cli test` —
18
+ * no references should remain.
19
+ *
20
+ * Full design: `packages/cli/docs/specs/2026-05-21-v2-v3-envelope-compat-layer.md`.
21
+ */
22
+ export type WireVersion = 'v2' | 'v3';
23
+ /**
24
+ * Sniff the wire version from a parsed response body. Returns `null` if the
25
+ * body is too small (raw scalar, FormData echo, dry-run synthetic) to decide.
26
+ * Callers must tolerate `null`.
27
+ *
28
+ * V3 markers (any one suffices):
29
+ * - object has a `meta` key, OR
30
+ * - object has `error.code` (string) or `error.message` (string).
31
+ *
32
+ * V2 markers (any one):
33
+ * - object has a root-level `pagination` key, OR
34
+ * - object has a root-level `message: string | string[]` and no `error` key.
35
+ *
36
+ * When both V2 and V3 markers are present, V3 wins.
37
+ */
38
+ export declare const detectWireVersion: (body: unknown) => WireVersion | null;
39
+ /**
40
+ * Normalize a 2xx response body to the V3 shape `{ data, meta? }`.
41
+ *
42
+ * - V3 (`{ data, meta? }`) → returned as-is
43
+ * - V2 paginated (`{ data, pagination }`) → `{ data, meta: { pagination } }`
44
+ * - V2 bare (`{ data }`) → returned as-is
45
+ * - Anything else (arrays, scalars, non-object, already-unwrapped doc) → unchanged
46
+ *
47
+ * Shape-tolerant: unrecognized inputs pass through unchanged. Never mutates
48
+ * the input.
49
+ */
50
+ export declare const normalizeSuccessBody: (body: unknown) => unknown;
51
+ export interface NormalizedError {
52
+ code?: string;
53
+ message?: string;
54
+ details?: unknown;
55
+ }
56
+ /**
57
+ * Normalize a non-2xx response body to a flat `{ code?, message?, details? }`
58
+ * tuple.
59
+ *
60
+ * - V3 (`{ error: { code, message, details? } }`) → unwrapped
61
+ * - V2 (`{ message: string | string[], code?, details? }`) → flattened.
62
+ * Array messages join with `'; '` to match the legacy `extractMessage`
63
+ * helper in `api-envelope.ts`.
64
+ * - Non-object body → `{}`
65
+ *
66
+ * Never throws, never mutates.
67
+ */
68
+ export declare const normalizeErrorBody: (body: unknown) => NormalizedError;