@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,59 @@
1
+ import { codeForTag, defaultMessageFor, toErrorEnvelope, } from '../../domain/errors';
2
+ import { color, writeStderr, writeStdout } from './primitives';
3
+ const formatIssue = (issue) => {
4
+ if (!issue || typeof issue !== 'object')
5
+ return String(issue);
6
+ const obj = issue;
7
+ const path = Array.isArray(obj.path) ? obj.path.join('.') : '';
8
+ const message = typeof obj.message === 'string' ? obj.message : JSON.stringify(obj);
9
+ const line = typeof obj.line === 'number' ? ` (line ${obj.line})` : '';
10
+ const suggestions = Array.isArray(obj.suggestions)
11
+ ? ` — did you mean ${obj.suggestions.join(', ')}?`
12
+ : '';
13
+ return `${path ? `${path}: ` : ''}${message}${line}${suggestions}`;
14
+ };
15
+ const formatDetails = (details) => {
16
+ if (!details || typeof details !== 'object')
17
+ return [String(details)];
18
+ if (Array.isArray(details)) {
19
+ return details.map((item) => formatIssue(item));
20
+ }
21
+ if ('issues' in details &&
22
+ Array.isArray(details.issues)) {
23
+ return details.issues.map((issue) => formatIssue(issue));
24
+ }
25
+ return [JSON.stringify(details)];
26
+ };
27
+ export const emitErrorSync = (err, opts) => {
28
+ const tag = err._tag;
29
+ if (opts.json) {
30
+ if (tag === 'WriteRequiresExplicit') {
31
+ // Preserve legacy special-case JSON shape for the production write
32
+ // gate (`error`, `profile`, `api_url`, `hint`).
33
+ const e = err;
34
+ writeStdout(`${JSON.stringify({
35
+ ok: false,
36
+ error: codeForTag(tag),
37
+ profile: e.profile ?? null,
38
+ api_url: e.apiUrl ?? null,
39
+ hint: e.hint ?? null,
40
+ })}\n`);
41
+ return;
42
+ }
43
+ writeStdout(`${JSON.stringify(toErrorEnvelope(err))}\n`);
44
+ return;
45
+ }
46
+ const message = 'message' in err && typeof err.message === 'string' && err.message
47
+ ? err.message
48
+ : defaultMessageFor(tag);
49
+ writeStderr(`${color(process.stderr, 31, '✘')} ${message}\n`);
50
+ if ('details' in err && err.details !== undefined) {
51
+ const detailLines = formatDetails(err.details);
52
+ for (const line of detailLines) {
53
+ writeStderr(` · ${line}\n`);
54
+ }
55
+ }
56
+ if ('hint' in err && typeof err.hint === 'string' && err.hint.length > 0) {
57
+ writeStderr(`\nhint: ${err.hint}\n`);
58
+ }
59
+ };
@@ -0,0 +1,13 @@
1
+ import { Context, Effect, Layer } from 'effect';
2
+ import { type RendererService } from './service';
3
+ export { type DateTimeStyle, formatAbsoluteDateTime, formatDateTime, type FormatDateTimeOptions, formatRelativeTime, looksLikeTimestamp, toDate, tryFormatTimestamp, } from './datetime';
4
+ export { renderReadableGeneric } from './lists';
5
+ export { currentOutputOptions, defaultOutputOptions, type OutputMode, type OutputOptions, } from './options';
6
+ export type { RendererService } from './service';
7
+ export type { View, ViewCtx } from './view';
8
+ declare const Renderer_base: Context.TagClass<Renderer, "Renderer", RendererService>;
9
+ export declare class Renderer extends Renderer_base {
10
+ static Default: Layer.Layer<Renderer>;
11
+ /** Apply the given `OutputOptions` for the duration of `effect`. */
12
+ static withOptions: <A, E, R>(options: import('./options').OutputOptions) => (effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E, R>;
13
+ }
@@ -0,0 +1,11 @@
1
+ import { Context, Effect, Layer } from 'effect';
2
+ import { currentOutputOptions } from './options';
3
+ import { makeService } from './service';
4
+ export { formatAbsoluteDateTime, formatDateTime, formatRelativeTime, looksLikeTimestamp, toDate, tryFormatTimestamp, } from './datetime';
5
+ export { renderReadableGeneric } from './lists';
6
+ export { currentOutputOptions, defaultOutputOptions, } from './options';
7
+ export class Renderer extends Context.Tag('Renderer')() {
8
+ static Default = Layer.succeed(Renderer, makeService());
9
+ /** Apply the given `OutputOptions` for the duration of `effect`. */
10
+ static withOptions = (options) => (effect) => Effect.locally(effect, currentOutputOptions, options);
11
+ }
@@ -0,0 +1 @@
1
+ export declare const renderReadableGeneric: (data: unknown) => string;
@@ -0,0 +1,101 @@
1
+ import { formatScalar } from './content';
2
+ import { tryFormatTimestamp } from './datetime';
3
+ // Generic readable renderer for arbitrary payloads. Drives the default
4
+ // `--output readable` rendering for commands that emit ad-hoc objects via
5
+ // `emitSuccess` (mutation responses for auth/profile/config/update/category/
6
+ // topic/...). Keep the shape close to YAML so the output remains pasteable
7
+ // into prose.
8
+ const isPlainObject = (value) => Boolean(value) &&
9
+ typeof value === 'object' &&
10
+ !Array.isArray(value) &&
11
+ !(value instanceof Date);
12
+ // Auto-detect timestamps inside arbitrary payloads and route them through
13
+ // the friendlier formatter so the raw machine form never leaks into the
14
+ // readable output.
15
+ const formatLeaf = (value) => tryFormatTimestamp(value, { style: 'both' }) ?? formatScalar(value);
16
+ const renderReadableLines = (data, indent) => {
17
+ const pad = ' '.repeat(indent);
18
+ if (data === null || data === undefined)
19
+ return [];
20
+ if (data instanceof Date) {
21
+ return [`${pad}${formatLeaf(data)}`];
22
+ }
23
+ if (typeof data === 'string') {
24
+ if (data.length === 0)
25
+ return [];
26
+ const ts = tryFormatTimestamp(data, { style: 'both' });
27
+ if (ts !== null)
28
+ return [`${pad}${ts}`];
29
+ return data.split('\n').map((line) => `${pad}${line}`);
30
+ }
31
+ if (typeof data === 'number' || typeof data === 'boolean') {
32
+ return [`${pad}${String(data)}`];
33
+ }
34
+ if (Array.isArray(data)) {
35
+ const lines = [];
36
+ for (const item of data) {
37
+ if (isPlainObject(item)) {
38
+ const inner = renderReadableLines(item, indent + 1);
39
+ if (inner.length === 0)
40
+ continue;
41
+ // Replace the first line's leading pad with "- " marker.
42
+ const first = inner[0];
43
+ const stripped = first.startsWith(pad + ' ')
44
+ ? first.slice((pad + ' ').length)
45
+ : first.trimStart();
46
+ lines.push(`${pad}- ${stripped}`);
47
+ for (let i = 1; i < inner.length; i++)
48
+ lines.push(inner[i]);
49
+ }
50
+ else if (Array.isArray(item)) {
51
+ const inner = renderReadableLines(item, indent + 1);
52
+ if (inner.length === 0)
53
+ continue;
54
+ lines.push(`${pad}-`);
55
+ lines.push(...inner);
56
+ }
57
+ else if (item !== null && item !== undefined) {
58
+ lines.push(`${pad}- ${formatLeaf(item)}`);
59
+ }
60
+ }
61
+ return lines;
62
+ }
63
+ if (isPlainObject(data)) {
64
+ const lines = [];
65
+ for (const [key, value] of Object.entries(data)) {
66
+ if (value === null || value === undefined || value === '')
67
+ continue;
68
+ if (Array.isArray(value)) {
69
+ if (value.length === 0)
70
+ continue;
71
+ const allScalar = value.every((v) => v === null ||
72
+ v === undefined ||
73
+ v instanceof Date ||
74
+ typeof v !== 'object');
75
+ if (allScalar) {
76
+ const parts = value
77
+ .filter((v) => v !== null && v !== undefined)
78
+ .map((v) => formatLeaf(v));
79
+ lines.push(`${pad}${key}: ${parts.join(', ')}`);
80
+ }
81
+ else {
82
+ lines.push(`${pad}${key}:`);
83
+ lines.push(...renderReadableLines(value, indent + 1));
84
+ }
85
+ }
86
+ else if (isPlainObject(value)) {
87
+ const inner = renderReadableLines(value, indent + 1);
88
+ if (inner.length === 0)
89
+ continue;
90
+ lines.push(`${pad}${key}:`);
91
+ lines.push(...inner);
92
+ }
93
+ else {
94
+ lines.push(`${pad}${key}: ${formatLeaf(value)}`);
95
+ }
96
+ }
97
+ return lines;
98
+ }
99
+ return [`${pad}${String(data)}`];
100
+ };
101
+ export const renderReadableGeneric = (data) => renderReadableLines(data, 0).join('\n');
@@ -0,0 +1,10 @@
1
+ import { FiberRef } from 'effect';
2
+ export type OutputMode = 'pretty-json' | 'json' | 'readable' | 'llm' | 'xml';
3
+ export interface OutputOptions {
4
+ readonly json: boolean;
5
+ readonly output: OutputMode;
6
+ readonly quiet: boolean;
7
+ readonly verbose: boolean;
8
+ }
9
+ export declare const defaultOutputOptions: OutputOptions;
10
+ export declare const currentOutputOptions: FiberRef.FiberRef<OutputOptions>;
@@ -0,0 +1,13 @@
1
+ import { FiberRef } from 'effect';
2
+ export const defaultOutputOptions = {
3
+ json: false,
4
+ output: 'readable',
5
+ quiet: false,
6
+ verbose: false,
7
+ };
8
+ // One FiberRef carries the per-run output options. The bin entry sets it once
9
+ // at the root after parsing global flags; tests override it per-Effect via
10
+ // `Effect.locally(currentOutputOptions, ...)`. Choosing a FiberRef over a
11
+ // command-level context parameter keeps every `Api`/`Renderer`/command body
12
+ // free of an explicit options argument while still being fully testable.
13
+ export const currentOutputOptions = FiberRef.unsafeMake(defaultOutputOptions);
@@ -0,0 +1,4 @@
1
+ export declare const isTTY: (stream: NodeJS.WriteStream) => boolean;
2
+ export declare const color: (stream: NodeJS.WriteStream, code: number, text: string) => string;
3
+ export declare const writeStdout: (s: string) => void;
4
+ export declare const writeStderr: (s: string) => void;
@@ -0,0 +1,12 @@
1
+ export const isTTY = (stream) => Boolean(stream.isTTY);
2
+ export const color = (stream, code, text) => {
3
+ if (!isTTY(stream))
4
+ return text;
5
+ return `\x1B[${code}m${text}\x1B[0m`;
6
+ };
7
+ export const writeStdout = (s) => {
8
+ process.stdout.write(s);
9
+ };
10
+ export const writeStderr = (s) => {
11
+ process.stderr.write(s);
12
+ };
@@ -0,0 +1,35 @@
1
+ import { Effect } from 'effect';
2
+ import type { CliError } from '../../domain/errors';
3
+ import { type OutputOptions } from './options';
4
+ import type { View } from './view';
5
+ export interface RendererService {
6
+ /** Active output configuration in the current fiber. */
7
+ readonly options: Effect.Effect<OutputOptions>;
8
+ /** Typed view dispatch — primary path. */
9
+ readonly emit: <T>(view: View<T>, data: T) => Effect.Effect<void>;
10
+ /** Generic success payload for ad-hoc data (mutation responses, etc.). */
11
+ readonly emitSuccess: (data: unknown) => Effect.Effect<void>;
12
+ /** Info line on stderr (suppressed by `--quiet` / `--json`). */
13
+ readonly emitInfo: (message: string) => Effect.Effect<void>;
14
+ /** Warning line on stderr (suppressed by `--json`). */
15
+ readonly emitWarn: (message: string) => Effect.Effect<void>;
16
+ /** Error envelope or pretty error to stderr/stdout per output mode. */
17
+ readonly emitError: (err: CliError) => Effect.Effect<void>;
18
+ /**
19
+ * Emit a bespoke ANSI/text view (ad-hoc, no schema — banners). In `--json`
20
+ * mode the function is never called — `data` is wrapped as a JSON envelope.
21
+ */
22
+ readonly emitView: (data: unknown, view: (ctx: {
23
+ readonly color: boolean;
24
+ }) => string) => Effect.Effect<void>;
25
+ /** Convenience for `emitView` whose body is a markdown source string. */
26
+ readonly emitMarkdown: (data: unknown, markdown: () => string) => Effect.Effect<void>;
27
+ /**
28
+ * Multi-line info block on stderr. Honours `--quiet` / `--json` like
29
+ * `emitInfo`; useful for boxed banners (device-code, etc.).
30
+ */
31
+ readonly emitInfoBlock: (block: (ctx: {
32
+ readonly color: boolean;
33
+ }) => string) => Effect.Effect<void>;
34
+ }
35
+ export declare const makeService: () => RendererService;
@@ -0,0 +1,123 @@
1
+ import { Effect, FiberRef } from 'effect';
2
+ import { isColorEnabled, renderMarkdownToAnsi } from '../../cli/render';
3
+ import { emitErrorSync } from './errors';
4
+ import { renderReadableGeneric } from './lists';
5
+ import { currentOutputOptions, } from './options';
6
+ import { color, writeStderr, writeStdout } from './primitives';
7
+ export const makeService = () => {
8
+ const getOpts = FiberRef.get(currentOutputOptions);
9
+ const emitSuccessSync = (data, opts) => {
10
+ if (opts.json || opts.output === 'json') {
11
+ writeStdout(`${JSON.stringify({ ok: true, data })}\n`);
12
+ return;
13
+ }
14
+ if (data === null || data === undefined)
15
+ return;
16
+ if (typeof data === 'string') {
17
+ writeStdout(`${data}\n`);
18
+ return;
19
+ }
20
+ if (opts.output === 'readable') {
21
+ const rendered = renderReadableGeneric(data);
22
+ if (rendered)
23
+ writeStdout(`${rendered}\n`);
24
+ return;
25
+ }
26
+ writeStdout(`${JSON.stringify(data, null, 2)}\n`);
27
+ };
28
+ return {
29
+ options: getOpts,
30
+ emit: (view, data) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => {
31
+ // JSON family bypasses the view entirely — kind-agnostic envelope.
32
+ if (opts.json || opts.output === 'json') {
33
+ writeStdout(`${JSON.stringify({ ok: true, data })}\n`);
34
+ return;
35
+ }
36
+ if (opts.output === 'pretty-json') {
37
+ writeStdout(`${JSON.stringify(data, null, 2)}\n`);
38
+ return;
39
+ }
40
+ const mode = opts.output;
41
+ if (!view.modes.has(mode)) {
42
+ writeStderr(`${color(process.stderr, 31, '✘')} unsupported --output value for ${view.kind}: ${mode}\n`);
43
+ return;
44
+ }
45
+ let text;
46
+ if (mode === 'xml' && view.xml) {
47
+ text = view.xml(data);
48
+ }
49
+ else if (mode === 'llm' && view.llm) {
50
+ text = view.llm(data);
51
+ }
52
+ else if (mode === 'llm') {
53
+ // Fallback: render readable with color disabled — strips all ANSI.
54
+ const ctx = { color: false, verbose: opts.verbose };
55
+ text = view.readable(data, ctx);
56
+ }
57
+ else {
58
+ const ctx = {
59
+ color: isColorEnabled(process.stdout),
60
+ verbose: opts.verbose,
61
+ };
62
+ text = view.readable(data, ctx);
63
+ }
64
+ writeStdout(`${text}\n`);
65
+ })),
66
+ emitSuccess: (data) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => emitSuccessSync(data, opts))),
67
+ emitInfo: (message) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => {
68
+ if (opts.quiet || opts.json)
69
+ return;
70
+ writeStderr(`${message}\n`);
71
+ })),
72
+ emitWarn: (message) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => {
73
+ if (opts.json)
74
+ return;
75
+ writeStderr(`${color(process.stderr, 33, 'warn')}: ${message}\n`);
76
+ })),
77
+ emitError: (err) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => emitErrorSync(err, opts))),
78
+ emitView: (data, view) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => {
79
+ if (opts.json || opts.output === 'json') {
80
+ writeStdout(`${JSON.stringify({ ok: true, data })}\n`);
81
+ return;
82
+ }
83
+ if (opts.output === 'pretty-json') {
84
+ if (data !== null && data !== undefined) {
85
+ writeStdout(`${JSON.stringify(data, null, 2)}\n`);
86
+ }
87
+ return;
88
+ }
89
+ if (data === null || data === undefined)
90
+ return;
91
+ const color = isColorEnabled(process.stdout);
92
+ const text = view({ color });
93
+ if (text)
94
+ writeStdout(`${text}\n`);
95
+ })),
96
+ emitMarkdown: (data, markdown) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => {
97
+ if (opts.json || opts.output === 'json') {
98
+ writeStdout(`${JSON.stringify({ ok: true, data })}\n`);
99
+ return;
100
+ }
101
+ if (opts.output === 'pretty-json') {
102
+ if (data !== null && data !== undefined) {
103
+ writeStdout(`${JSON.stringify(data, null, 2)}\n`);
104
+ }
105
+ return;
106
+ }
107
+ if (data === null || data === undefined)
108
+ return;
109
+ const color = isColorEnabled(process.stdout);
110
+ const text = renderMarkdownToAnsi(markdown(), { color });
111
+ if (text)
112
+ writeStdout(`${text}\n`);
113
+ })),
114
+ emitInfoBlock: (block) => Effect.flatMap(getOpts, (opts) => Effect.sync(() => {
115
+ if (opts.quiet || opts.json)
116
+ return;
117
+ const color = isColorEnabled(process.stderr);
118
+ const text = block({ color });
119
+ if (text)
120
+ writeStderr(`${text}\n`);
121
+ })),
122
+ };
123
+ };
@@ -0,0 +1,16 @@
1
+ import type { OutputMode } from './options';
2
+ export interface ViewCtx {
3
+ readonly color: boolean;
4
+ /** Reserved for per-view verbosity toggles (e.g. `whoami --verbose`). */
5
+ readonly verbose: boolean;
6
+ }
7
+ export interface View<T> {
8
+ /** Human-readable kind label used only in error messages. Not a lookup key. */
9
+ readonly kind: string;
10
+ /** Modes this view supports. `json` / `pretty-json` are always supported by the service. */
11
+ readonly modes: ReadonlySet<OutputMode>;
12
+ readonly readable: (data: T, ctx: ViewCtx) => string;
13
+ /** Optional. Missing llm falls back to readable with color disabled. */
14
+ readonly llm?: (data: T) => string;
15
+ readonly xml?: (data: T) => string;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,47 @@
1
+ import { Context, Effect, Layer } from 'effect';
2
+ import { Generic, ResourceNotFound, ValidationFailed } from '../domain/errors';
3
+ import { Api, type ApiService } from './Api';
4
+ export type ResolverKind = 'category' | 'topic' | 'project';
5
+ export interface ResolvableItem {
6
+ readonly id: string;
7
+ readonly slug?: string;
8
+ readonly name?: string;
9
+ }
10
+ export interface ResolverService {
11
+ /** Resolve a slug/name/id to an id. Snowflake ids pass through unchanged. */
12
+ readonly resolveCategory: (value: string) => Effect.Effect<string, ValidationFailed | Generic>;
13
+ readonly resolveTopic: (value: string) => Effect.Effect<string, ValidationFailed | Generic>;
14
+ /** Resolve a list of refs (category slugs/ids) to ids. */
15
+ readonly resolveCategoryRefs: (refs: ReadonlyArray<string>) => Effect.Effect<ReadonlyArray<string>, ValidationFailed | Generic>;
16
+ /** Resolve a post slug/id to a snowflake id. */
17
+ readonly resolvePostId: (slugOrId: string) => Effect.Effect<string, ResourceNotFound | ValidationFailed | Generic>;
18
+ /** Build the read path (`/posts/<category>/<slug>` or `/posts/<id>`). */
19
+ readonly resolvePostReadPath: (slugOrId: string) => Effect.Effect<string, ResourceNotFound | ValidationFailed | Generic>;
20
+ /** Resolve a note slug or numeric nid to its snowflake id. */
21
+ readonly resolveNoteId: (slugOrId: string) => Effect.Effect<string, ResourceNotFound | ValidationFailed | Generic>;
22
+ /** Resolve a category slug to its snowflake id (via /categories/:slug). */
23
+ readonly resolveCategoryId: (slugOrId: string) => Effect.Effect<string, ResourceNotFound | ValidationFailed | Generic>;
24
+ /** Resolve a project name or snowflake id to its id (via /projects/all). */
25
+ readonly resolveProjectId: (nameOrId: string) => Effect.Effect<string, ResourceNotFound | ValidationFailed | Generic>;
26
+ /** Bust cache for a given kind, or all if omitted. */
27
+ readonly invalidate: (kind?: ResolverKind) => Effect.Effect<void>;
28
+ }
29
+ export declare const isSnowflakeId: (value: string) => boolean;
30
+ export declare function matchItem(items: ReadonlyArray<ResolvableItem>, value: string): ResolvableItem | null;
31
+ export declare function levenshtein(a: string, b: string): number;
32
+ export declare function fuzzySuggest(items: ReadonlyArray<ResolvableItem>, value: string, maxDistance?: number): string[];
33
+ export interface ResolverDeps {
34
+ readonly ttlMs?: number;
35
+ }
36
+ export declare const make: (api: ApiService, deps?: ResolverDeps) => ResolverService;
37
+ declare const Resolver_base: Context.TagClass<Resolver, "Resolver", ResolverService>;
38
+ export declare class Resolver extends Resolver_base {
39
+ /**
40
+ * Default layer composes `Resolver` from the ambient `Api` service. Tests can
41
+ * provide an alternate layer via {@link layer}.
42
+ */
43
+ static Default: Layer.Layer<Resolver, never, Api>;
44
+ }
45
+ /** Build a Resolver layer from an explicit `ApiService` (tests). */
46
+ export declare const layer: (api: ApiService, deps?: ResolverDeps) => Layer.Layer<Resolver>;
47
+ export {};