@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,421 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { FileSystem, Path } from '@effect/platform';
5
+ import { Context, Effect, Layer, Ref } from 'effect';
6
+ import MiniSearch from 'minisearch';
7
+ import { ChapterNotFound, SkillCorpusEmpty } from '../domain/errors';
8
+ const requireFrom = createRequire(import.meta.url);
9
+ const findCliPackageRoot = () => {
10
+ const here = fileURLToPath(import.meta.url);
11
+ let dir = here.slice(0, Math.max(0, here.lastIndexOf('/')));
12
+ for (let i = 0; i < 8; i++) {
13
+ if (!dir || dir === '/')
14
+ break;
15
+ try {
16
+ const pkg = requireFrom(`${dir}/package.json`);
17
+ if (pkg.name === '@mx-space/cli')
18
+ return dir;
19
+ }
20
+ catch {
21
+ // not a pkg dir, keep walking
22
+ }
23
+ const next = dir.slice(0, Math.max(0, dir.lastIndexOf('/')));
24
+ if (next === dir)
25
+ break;
26
+ dir = next;
27
+ }
28
+ return null;
29
+ };
30
+ const resolveCliSkillsDir = () => {
31
+ const override = process.env.MXS_SKILL_CLI_DIR;
32
+ if (override && override.length > 0)
33
+ return override;
34
+ const root = findCliPackageRoot();
35
+ return root ? `${root}/skills` : null;
36
+ };
37
+ const resolveHaklexSkillsDir = () => {
38
+ const override = process.env.MXS_SKILL_HAKLEX_DIR;
39
+ if (override && override.length > 0)
40
+ return override;
41
+ try {
42
+ const pkgJson = requireFrom.resolve('@haklex/rich-litexml/package.json');
43
+ const dir = pkgJson.slice(0, Math.max(0, pkgJson.lastIndexOf('/')));
44
+ return `${dir}/.claude/skills/litexml-authoring`;
45
+ }
46
+ catch {
47
+ // Older `@haklex/rich-litexml` (<= 0.15.2) omits `./package.json` from
48
+ // its `exports`, so direct resolve throws under strict ESM resolution.
49
+ // Fall back to walking node_modules upward from the cli package root.
50
+ const root = findCliPackageRoot();
51
+ if (!root)
52
+ return null;
53
+ const candidates = [];
54
+ let dir = root;
55
+ while (dir && dir.length > 1) {
56
+ candidates.push(`${dir}/node_modules/@haklex/rich-litexml/.claude/skills/litexml-authoring`);
57
+ const next = dir.slice(0, Math.max(0, dir.lastIndexOf('/')));
58
+ if (next === dir)
59
+ break;
60
+ dir = next;
61
+ }
62
+ for (const c of candidates) {
63
+ if (existsSync(c))
64
+ return c;
65
+ }
66
+ return null;
67
+ }
68
+ };
69
+ const parseFrontmatter = (raw, file) => {
70
+ if (!raw.startsWith('---\n')) {
71
+ return { error: `${file}: missing frontmatter (no leading '---' line)` };
72
+ }
73
+ const end = raw.indexOf('\n---\n', 4);
74
+ if (end < 0) {
75
+ return { error: `${file}: missing frontmatter terminator ('---' line)` };
76
+ }
77
+ const head = raw.slice(4, end);
78
+ const body = raw.slice(end + 5).replace(/^\n+/, '');
79
+ const fields = {};
80
+ for (const line of head.split('\n')) {
81
+ if (line.trim().length === 0)
82
+ continue;
83
+ const colon = line.indexOf(':');
84
+ if (colon < 0) {
85
+ return { error: `${file}: malformed frontmatter line: ${line}` };
86
+ }
87
+ const key = line.slice(0, colon).trim();
88
+ let value = line.slice(colon + 1).trim();
89
+ if ((value.startsWith('"') && value.endsWith('"')) ||
90
+ (value.startsWith("'") && value.endsWith("'"))) {
91
+ value = value.slice(1, -1);
92
+ }
93
+ fields[key] = value;
94
+ }
95
+ const slug = fields.slug;
96
+ const title = fields.title;
97
+ const description = fields.description;
98
+ const orderRaw = fields.order;
99
+ if (!slug)
100
+ return { error: `${file}: frontmatter missing required 'slug'` };
101
+ if (!title)
102
+ return { error: `${file}: frontmatter missing required 'title'` };
103
+ if (!description)
104
+ return { error: `${file}: frontmatter missing required 'description'` };
105
+ if (!orderRaw)
106
+ return { error: `${file}: frontmatter missing required 'order'` };
107
+ const order = Number.parseInt(orderRaw, 10);
108
+ if (!Number.isFinite(order)) {
109
+ return { error: `${file}: frontmatter 'order' not an integer: ${orderRaw}` };
110
+ }
111
+ if (!/^[\da-z][\da-z-]*$/.test(slug)) {
112
+ return { error: `${file}: frontmatter 'slug' not kebab-case: ${slug}` };
113
+ }
114
+ return { slug, title, description, order, body };
115
+ };
116
+ const scanCliDir = (fs, path, dir) => Effect.gen(function* () {
117
+ const exists = yield* fs
118
+ .exists(dir)
119
+ .pipe(Effect.catchAll(() => Effect.succeed(false)));
120
+ if (!exists)
121
+ return [];
122
+ const entries = yield* fs
123
+ .readDirectory(dir)
124
+ .pipe(Effect.catchAll(() => Effect.succeed([])));
125
+ const chapters = [];
126
+ for (const name of entries) {
127
+ if (!name.endsWith('.md'))
128
+ continue;
129
+ const full = path.join(dir, name);
130
+ const raw = yield* fs
131
+ .readFileString(full)
132
+ .pipe(Effect.catchAll(() => Effect.succeed('')));
133
+ if (!raw)
134
+ continue;
135
+ const parsed = parseFrontmatter(raw, full);
136
+ if ('error' in parsed) {
137
+ return yield* Effect.die(parsed.error);
138
+ }
139
+ chapters.push({ ...parsed, source: 'cli' });
140
+ }
141
+ return chapters;
142
+ });
143
+ const stripAnyFrontmatter = (raw) => {
144
+ if (!raw.startsWith('---\n')) {
145
+ return { fields: {}, body: raw };
146
+ }
147
+ const end = raw.indexOf('\n---\n', 4);
148
+ if (end < 0)
149
+ return { fields: {}, body: raw };
150
+ const head = raw.slice(4, end);
151
+ const body = raw.slice(end + 5).replace(/^\n+/, '');
152
+ const fields = {};
153
+ for (const line of head.split('\n')) {
154
+ if (line.trim().length === 0)
155
+ continue;
156
+ const colon = line.indexOf(':');
157
+ if (colon < 0)
158
+ continue;
159
+ const key = line.slice(0, colon).trim();
160
+ let value = line.slice(colon + 1).trim();
161
+ if ((value.startsWith('"') && value.endsWith('"')) ||
162
+ (value.startsWith("'") && value.endsWith("'"))) {
163
+ value = value.slice(1, -1);
164
+ }
165
+ fields[key] = value;
166
+ }
167
+ return { fields, body };
168
+ };
169
+ const humanizeBase = (name) => name.replaceAll(/[_-]+/g, ' ').replaceAll(/\b\w/g, (c) => c.toUpperCase());
170
+ const firstNonEmptyLine = (body) => {
171
+ for (const line of body.split('\n')) {
172
+ const trimmed = line.trim();
173
+ if (!trimmed)
174
+ continue;
175
+ if (trimmed.startsWith('#'))
176
+ continue;
177
+ return trimmed.slice(0, 200);
178
+ }
179
+ return null;
180
+ };
181
+ const scanHaklexDir = (fs, path, dir) => Effect.gen(function* () {
182
+ const exists = yield* fs
183
+ .exists(dir)
184
+ .pipe(Effect.catchAll(() => Effect.succeed(false)));
185
+ if (!exists)
186
+ return [];
187
+ const chapters = [];
188
+ const skillMdPath = path.join(dir, 'SKILL.md');
189
+ const skillMdExists = yield* fs
190
+ .exists(skillMdPath)
191
+ .pipe(Effect.catchAll(() => Effect.succeed(false)));
192
+ if (skillMdExists) {
193
+ const raw = yield* fs
194
+ .readFileString(skillMdPath)
195
+ .pipe(Effect.catchAll(() => Effect.succeed('')));
196
+ if (raw) {
197
+ const { fields, body } = stripAnyFrontmatter(raw);
198
+ chapters.push({
199
+ slug: 'litexml',
200
+ title: 'liteXML overview',
201
+ description: fields.description ||
202
+ firstNonEmptyLine(body) ||
203
+ 'liteXML node and authoring reference',
204
+ order: 70,
205
+ source: 'haklex',
206
+ body,
207
+ });
208
+ }
209
+ }
210
+ const refsDir = path.join(dir, 'references');
211
+ const refsExists = yield* fs
212
+ .exists(refsDir)
213
+ .pipe(Effect.catchAll(() => Effect.succeed(false)));
214
+ if (refsExists) {
215
+ const refFiles = yield* fs
216
+ .readDirectory(refsDir)
217
+ .pipe(Effect.catchAll(() => Effect.succeed([])));
218
+ const sorted = [...refFiles].filter((n) => n.endsWith('.md')).sort();
219
+ let order = 71;
220
+ for (const name of sorted) {
221
+ const full = path.join(refsDir, name);
222
+ const raw = yield* fs
223
+ .readFileString(full)
224
+ .pipe(Effect.catchAll(() => Effect.succeed('')));
225
+ if (!raw)
226
+ continue;
227
+ const baseName = name.replace(/\.md$/, '');
228
+ const { fields, body } = stripAnyFrontmatter(raw);
229
+ chapters.push({
230
+ slug: `litexml-${baseName}`,
231
+ title: `liteXML ${humanizeBase(baseName)}`,
232
+ description: fields.description ||
233
+ firstNonEmptyLine(body) ||
234
+ `liteXML reference: ${baseName}`,
235
+ order: order++,
236
+ source: 'haklex',
237
+ body,
238
+ });
239
+ }
240
+ }
241
+ return chapters;
242
+ });
243
+ const buildRegistry = (fs, path, cliDir, haklexDir) => Effect.gen(function* () {
244
+ const [cliChapters, haklexChapters] = yield* Effect.all([
245
+ cliDir
246
+ ? scanCliDir(fs, path, cliDir)
247
+ : Effect.succeed([]),
248
+ haklexDir
249
+ ? scanHaklexDir(fs, path, haklexDir)
250
+ : Effect.succeed([]),
251
+ ], { concurrency: 2 }).pipe(Effect.catchAllDefect((d) => Effect.fail(new SkillCorpusEmpty({
252
+ message: typeof d === 'string' ? d : 'failed to load skill corpus',
253
+ cause: d,
254
+ }))));
255
+ const all = [...cliChapters, ...haklexChapters];
256
+ if (all.length === 0) {
257
+ return yield* Effect.fail(new SkillCorpusEmpty({
258
+ message: 'no chapters found',
259
+ hint: 'reinstall @mx-space/cli, or check the MXS_SKILL_CLI_DIR / MXS_SKILL_HAKLEX_DIR overrides',
260
+ }));
261
+ }
262
+ const seen = new Set();
263
+ for (const c of all) {
264
+ if (seen.has(c.slug)) {
265
+ return yield* Effect.fail(new SkillCorpusEmpty({
266
+ message: `duplicate slug across sources: ${c.slug}`,
267
+ hint: 'each chapter slug must be globally unique',
268
+ }));
269
+ }
270
+ seen.add(c.slug);
271
+ }
272
+ return [...all].sort((a, b) => a.order - b.order);
273
+ });
274
+ const buildIndex = (chapters) => {
275
+ const mini = new MiniSearch({
276
+ fields: ['title', 'description', 'body'],
277
+ storeFields: ['slug'],
278
+ idField: 'slug',
279
+ searchOptions: {
280
+ boost: { title: 3, description: 2 },
281
+ combineWith: 'AND',
282
+ prefix: true,
283
+ fuzzy: 0.2,
284
+ },
285
+ });
286
+ mini.addAll(chapters.map((c) => ({
287
+ slug: c.slug,
288
+ title: c.title,
289
+ description: c.description,
290
+ body: c.body,
291
+ })));
292
+ return mini;
293
+ };
294
+ /**
295
+ * Tokenize the user's query string the same way MiniSearch does for indexing,
296
+ * so snippets can be located in the body. We use this lightweight tokenizer
297
+ * rather than `r.terms` because fuzzy / prefix matches expose the indexed
298
+ * term, not the substring that appears in the body verbatim.
299
+ */
300
+ const tokenizeQuery = (s) => s
301
+ .toLowerCase()
302
+ .split(/[\s\p{P}]+/u)
303
+ .filter((t) => t.length > 0);
304
+ const buildSnippets = (body, terms) => {
305
+ if (terms.length === 0)
306
+ return [];
307
+ const lower = body.toLowerCase();
308
+ // Pre-collect up to 5 occurrences per term so single-term queries can
309
+ // surface multiple snippets and multi-term queries stay balanced via
310
+ // round-robin emission below.
311
+ const occs = terms.map((term) => {
312
+ const t = term.toLowerCase();
313
+ if (!t)
314
+ return [];
315
+ const positions = [];
316
+ let from = 0;
317
+ while (positions.length < 5) {
318
+ const idx = lower.indexOf(t, from);
319
+ if (idx < 0)
320
+ break;
321
+ positions.push(idx);
322
+ from = idx + t.length;
323
+ }
324
+ return positions;
325
+ });
326
+ const cursors = Array.from({ length: terms.length }, () => 0);
327
+ const out = [];
328
+ let progressed = true;
329
+ while (out.length < 3 && progressed) {
330
+ progressed = false;
331
+ for (let i = 0; i < terms.length && out.length < 3; i++) {
332
+ const c = cursors[i];
333
+ if (c >= occs[i].length)
334
+ continue;
335
+ const idx = occs[i][c];
336
+ const tLen = terms[i].length;
337
+ cursors[i] = c + 1;
338
+ progressed = true;
339
+ const start = Math.max(0, idx - 60);
340
+ const end = Math.min(body.length, idx + tLen + 60);
341
+ let snippet = body.slice(start, end).replaceAll(/\s+/g, ' ').trim();
342
+ if (start > 0)
343
+ snippet = `…${snippet}`;
344
+ if (end < body.length)
345
+ snippet = `${snippet}…`;
346
+ out.push(snippet);
347
+ }
348
+ }
349
+ return out;
350
+ };
351
+ const make = Effect.gen(function* () {
352
+ const fs = yield* FileSystem.FileSystem;
353
+ const path = yield* Path.Path;
354
+ const cliDir = resolveCliSkillsDir();
355
+ const haklexDir = resolveHaklexSkillsDir();
356
+ const cache = yield* Ref.make(null);
357
+ const indexCache = yield* Ref.make(null);
358
+ const load = Effect.gen(function* () {
359
+ const cached = yield* Ref.get(cache);
360
+ if (cached)
361
+ return cached;
362
+ const chapters = yield* buildRegistry(fs, path, cliDir, haklexDir);
363
+ yield* Ref.set(cache, chapters);
364
+ return chapters;
365
+ });
366
+ const loadIndex = Effect.gen(function* () {
367
+ const cached = yield* Ref.get(indexCache);
368
+ if (cached)
369
+ return cached;
370
+ const chapters = yield* load;
371
+ const mini = buildIndex(chapters);
372
+ yield* Ref.set(indexCache, mini);
373
+ return mini;
374
+ });
375
+ const svc = {
376
+ list: load,
377
+ all: load,
378
+ get: (slug) => Effect.gen(function* () {
379
+ const chapters = yield* load;
380
+ const found = chapters.find((c) => c.slug === slug);
381
+ if (!found) {
382
+ const isLitexml = slug.startsWith('litexml');
383
+ return yield* Effect.fail(new ChapterNotFound({
384
+ slug,
385
+ message: `no skill chapter with slug '${slug}'`,
386
+ hint: isLitexml
387
+ ? 'upgrade @haklex/rich-litexml to >=0.36.1 to ship liteXML chapters'
388
+ : 'run `mxs skill` to list available chapters',
389
+ }));
390
+ }
391
+ return found;
392
+ }),
393
+ search: (keyword) => Effect.gen(function* () {
394
+ const kw = keyword.trim();
395
+ if (!kw)
396
+ return [];
397
+ const chapters = yield* load;
398
+ const mini = yield* loadIndex;
399
+ const tokens = tokenizeQuery(kw);
400
+ const results = mini.search(kw);
401
+ const bySlug = new Map(chapters.map((c) => [c.slug, c]));
402
+ return results.flatMap((r) => {
403
+ const chapter = bySlug.get(r.id);
404
+ if (!chapter)
405
+ return [];
406
+ return [
407
+ {
408
+ slug: chapter.slug,
409
+ title: chapter.title,
410
+ description: chapter.description,
411
+ snippets: buildSnippets(chapter.body, tokens),
412
+ },
413
+ ];
414
+ });
415
+ }),
416
+ };
417
+ return svc;
418
+ });
419
+ export class Skill extends Context.Tag('Skill')() {
420
+ static Default = Layer.effect(Skill, make);
421
+ }
@@ -0,0 +1,162 @@
1
+ import { Context, Effect, Layer } from 'effect';
2
+ import { type Generic, UpdateDevEnvironment, UpdateNodeIncompatible, UpdatePermissionDenied, UpdatePmUnknown, UpdateRegistryUnreachable, UpdateSpawnFailed, UpdateTransientInstall } from '../domain/errors';
3
+ export type UpdateChannel = 'stable' | 'next';
4
+ export type PmKind = 'npm' | 'pnpm' | 'yarn' | 'bun';
5
+ export declare const PACKAGE_NAME = "@mx-space/cli";
6
+ export declare const DEFAULT_REGISTRY = "https://registry.npmjs.org";
7
+ export interface NotifyOptions {
8
+ readonly currentVersion: string;
9
+ readonly channel?: UpdateChannel;
10
+ readonly quiet?: boolean;
11
+ readonly json?: boolean;
12
+ readonly output?: string;
13
+ readonly commandName?: string;
14
+ readonly parentName?: string;
15
+ readonly force?: boolean;
16
+ readonly isTTY?: boolean;
17
+ readonly env?: NodeJS.ProcessEnv;
18
+ readonly emit?: (message: string) => void;
19
+ readonly configDir?: string;
20
+ }
21
+ export interface RunUpdateOptions {
22
+ readonly currentVersion: string;
23
+ readonly channel?: UpdateChannel;
24
+ readonly dryRun?: boolean;
25
+ readonly check?: boolean;
26
+ readonly prerelease?: boolean;
27
+ readonly pm?: string;
28
+ readonly yes?: boolean;
29
+ readonly force?: boolean;
30
+ readonly json?: boolean;
31
+ /** Override `process.argv[1]` for pm detection (tests). */
32
+ readonly entrypoint?: string;
33
+ /** Override Node version for engine compatibility check (tests). */
34
+ readonly nodeVersion?: string;
35
+ }
36
+ export interface RunUpdateResult {
37
+ readonly fromVersion: string;
38
+ readonly toVersion: string;
39
+ readonly pm: PmKind | null;
40
+ readonly channel: UpdateChannel;
41
+ readonly status: number;
42
+ /** true when the package manager actually ran and succeeded. */
43
+ readonly upgraded: boolean;
44
+ /** true when no install was performed (already up to date / --check / --dry-run / cancelled). */
45
+ readonly dryRun: boolean;
46
+ /** true when local version >= registry latest. */
47
+ readonly upToDate: boolean;
48
+ readonly command?: string;
49
+ readonly cancelled?: boolean;
50
+ }
51
+ export type RunUpdateError = UpdateDevEnvironment | UpdateTransientInstall | UpdatePmUnknown | UpdateRegistryUnreachable | UpdateNodeIncompatible | UpdateSpawnFailed | UpdatePermissionDenied | Generic;
52
+ export interface UpdateNotifierService {
53
+ readonly maybeNotify: (opts: NotifyOptions) => Effect.Effect<void>;
54
+ readonly runUpdate: (opts: RunUpdateOptions) => Effect.Effect<RunUpdateResult, RunUpdateError>;
55
+ }
56
+ export type PmDetection = {
57
+ kind: 'global';
58
+ pm: PmKind;
59
+ realPath: string;
60
+ } | {
61
+ kind: 'dev';
62
+ reason: 'monorepo-source' | 'monorepo-dist';
63
+ realPath: string;
64
+ } | {
65
+ kind: 'transient';
66
+ cache: 'npx' | 'pnpm-dlx' | 'bunx';
67
+ realPath: string;
68
+ } | {
69
+ kind: 'unknown';
70
+ realPath: string;
71
+ };
72
+ export declare function detectPackageManager(argv1: string): PmDetection;
73
+ export interface RegistryHit {
74
+ notModified?: false;
75
+ version: string;
76
+ engines?: {
77
+ node?: string;
78
+ };
79
+ tarball?: string;
80
+ etag?: string;
81
+ }
82
+ export interface NotModified {
83
+ notModified: true;
84
+ etag?: string;
85
+ }
86
+ export type FetchImpl = (input: string, init?: {
87
+ headers?: Record<string, string>;
88
+ signal?: AbortSignal;
89
+ }) => Promise<{
90
+ ok: boolean;
91
+ status: number;
92
+ headers: {
93
+ get: (name: string) => string | null;
94
+ };
95
+ json: () => Promise<unknown>;
96
+ text: () => Promise<string>;
97
+ }>;
98
+ export interface FetchOpts {
99
+ etag?: string;
100
+ signal?: AbortSignal;
101
+ registry?: string;
102
+ fetchImpl?: FetchImpl;
103
+ }
104
+ export declare function fetchLatestVersion(channel: UpdateChannel, opts?: FetchOpts): Promise<RegistryHit | NotModified>;
105
+ export declare function compareSemver(a: string, b: string): -1 | 0 | 1;
106
+ export declare function satisfiesNodeEngine(currentVersion: string, range: string | undefined): boolean;
107
+ export declare function buildUpgradeCommand(pm: PmKind, channel: UpdateChannel): {
108
+ cmd: string;
109
+ args: string[];
110
+ };
111
+ export interface SpawnUpgradeResult {
112
+ status: number;
113
+ stderr: string;
114
+ }
115
+ export type SpawnDetached = (cmd: string, args: string[], logPath: string) => void;
116
+ export interface CachedState {
117
+ last_check_ts: number;
118
+ latest_version?: string;
119
+ etag?: string;
120
+ /**
121
+ * Timestamp of the most recent background auto-update spawn. Used to throttle
122
+ * silent installs so a single new release doesn't trigger an `npm i -g` on
123
+ * every `mxs <cmd>` invocation within the 24h check window.
124
+ */
125
+ last_auto_update_ts?: number;
126
+ }
127
+ export declare function readCache(configDir: string): CachedState | null;
128
+ export declare function writeCacheAtomic(state: CachedState, configDir: string): void;
129
+ export declare function shouldSkipNotify(opts: NotifyOptions): boolean;
130
+ export interface UpdateNotifierDeps {
131
+ readonly now?: () => number;
132
+ readonly fetchImpl?: FetchImpl;
133
+ readonly spawnImpl?: (cmd: string, args: string[]) => Promise<SpawnUpgradeResult>;
134
+ /**
135
+ * Fire-and-forget detached spawn used by the background auto-update path.
136
+ * Unit tests can inject a spy to verify that an install was triggered
137
+ * without actually running the package manager.
138
+ */
139
+ readonly spawnDetached?: SpawnDetached;
140
+ /**
141
+ * @deprecated The interactive confirm prompt was removed when `mxs update`
142
+ * became auto-install by default. Accepted for backward compatibility with
143
+ * older `make()` call sites; never invoked.
144
+ */
145
+ readonly confirmImpl?: (message: string) => Promise<boolean>;
146
+ readonly emitInfo?: (msg: string) => void;
147
+ readonly configDir?: string;
148
+ /**
149
+ * Override `process.argv[1]` for the background auto-update path's pm
150
+ * detection. Production callers leave this unset and the helper reads
151
+ * argv directly.
152
+ */
153
+ readonly entrypoint?: string;
154
+ }
155
+ export declare const make: (deps?: UpdateNotifierDeps) => UpdateNotifierService;
156
+ declare const UpdateNotifier_base: Context.TagClass<UpdateNotifier, "UpdateNotifier", UpdateNotifierService>;
157
+ export declare class UpdateNotifier extends UpdateNotifier_base {
158
+ static Default: Layer.Layer<UpdateNotifier>;
159
+ }
160
+ /** Build a custom UpdateNotifier layer (tests). */
161
+ export declare const layer: (deps?: UpdateNotifierDeps) => Layer.Layer<UpdateNotifier>;
162
+ export {};