@mx-space/cli 0.15.1 → 0.15.2

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 (611) hide show
  1. package/dist/{Lexical.dev-BSvx45_E.mjs → Lexical.dev-Df5TNMgP.mjs} +2 -2
  2. package/dist/{Lexical.node-kAh5GM2n.mjs → Lexical.node-B064E4Hy.mjs} +1 -1
  3. package/dist/{Lexical.prod-Bqwgb3ez.mjs → Lexical.prod-DRFSwoE7.mjs} +2 -2
  4. package/dist/{LexicalClipboard.dev-BWU3KXIa.mjs → LexicalClipboard.dev-ClOWeg5v.mjs} +5 -5
  5. package/dist/{LexicalClipboard.node-BygAdNdF.mjs → LexicalClipboard.node-BJBLWpEi.mjs} +1 -1
  6. package/dist/{LexicalClipboard.prod-BtMuKNyT.mjs → LexicalClipboard.prod-Ytt65eQo.mjs} +5 -5
  7. package/dist/{LexicalCodeCore.dev-CD2xgvDs.mjs → LexicalCodeCore.dev-CzEPINOT.mjs} +4 -4
  8. package/dist/{LexicalCodeCore.prod-Bl6FFMc7.mjs → LexicalCodeCore.prod-DOVk7lL_.mjs} +4 -4
  9. package/dist/{LexicalDragon.dev-BwdYhm4K.mjs → LexicalDragon.dev-DxePN9fP.mjs} +2 -2
  10. package/dist/{LexicalDragon.node-CpJhkCVV.mjs → LexicalDragon.node-DBwaqStp.mjs} +1 -1
  11. package/dist/{LexicalDragon.prod-CvXmWwo1.mjs → LexicalDragon.prod-Bji84-Hq.mjs} +2 -2
  12. package/dist/{LexicalExtension.dev-LcRLXI5Z.mjs → LexicalExtension.dev-DtSRyjbf.mjs} +2 -2
  13. package/dist/{LexicalExtension.node-BwJt2LXV.mjs → LexicalExtension.node-3nsS5NjU.mjs} +1 -1
  14. package/dist/{LexicalExtension.prod-lg8_33-H.mjs → LexicalExtension.prod-Ddk0ja_6.mjs} +2 -2
  15. package/dist/{LexicalHeadless.dev-BeUbKBes.mjs → LexicalHeadless.dev-DdWJsPoH.mjs} +1 -1
  16. package/dist/{LexicalHeadless.prod-4gbIA8HM.mjs → LexicalHeadless.prod-CH74ZDMt.mjs} +1 -1
  17. package/dist/{LexicalHtml.dev-BLdZWTCJ.mjs → LexicalHtml.dev-DN7QIb_7.mjs} +4 -4
  18. package/dist/{LexicalHtml.node-BeuJMvvt.mjs → LexicalHtml.node-DAwuaPeI.mjs} +1 -1
  19. package/dist/{LexicalHtml.prod-CHUyCocN.mjs → LexicalHtml.prod-X4eTHEfI.mjs} +4 -4
  20. package/dist/{LexicalLink.dev-DgsFRqw0.mjs → LexicalLink.dev-owitIl6I.mjs} +4 -4
  21. package/dist/{LexicalLink.prod-CkXkeKY2.mjs → LexicalLink.prod-BZ7ZZkVD.mjs} +4 -4
  22. package/dist/{LexicalList.dev-OOms3kQi.mjs → LexicalList.dev-CUbi09Yo.mjs} +4 -4
  23. package/dist/{LexicalList.prod-DzMBeqHn.mjs → LexicalList.prod-pUsUZa0r.mjs} +4 -4
  24. package/dist/{LexicalMarkdown.dev-DJLKbZtD.mjs → LexicalMarkdown.dev-S2yWckH9.mjs} +3 -3
  25. package/dist/{LexicalMarkdown.prod-Cp21kDCU.mjs → LexicalMarkdown.prod-TRkMWfmC.mjs} +3 -3
  26. package/dist/{LexicalRichText.dev-0rkAGjUf.mjs → LexicalRichText.dev-Y3ybFF2S.mjs} +7 -7
  27. package/dist/{LexicalRichText.node-Cd-BySPE.mjs → LexicalRichText.node-wNAi2Z4i.mjs} +4 -4
  28. package/dist/{LexicalRichText.prod-DTQiEr8C.mjs → LexicalRichText.prod-HLxqZ6hQ.mjs} +7 -7
  29. package/dist/{LexicalSelection.dev-Bi0VlUEv.mjs → LexicalSelection.dev-CyhKOKbs.mjs} +1 -1
  30. package/dist/{LexicalSelection.node-t2U46EF_.mjs → LexicalSelection.node-BCuHMbzl.mjs} +1 -1
  31. package/dist/{LexicalSelection.prod-CrFG111g.mjs → LexicalSelection.prod-RebDJliC.mjs} +1 -1
  32. package/dist/{LexicalTable.dev-D-sFhO-o.mjs → LexicalTable.dev-DN3ezVey.mjs} +5 -5
  33. package/dist/{LexicalTable.prod-DwYaa_dN.mjs → LexicalTable.prod-B0MioVyq.mjs} +5 -5
  34. package/dist/{LexicalUtils.dev-Q2q3-UDM.mjs → LexicalUtils.dev-Bw6LFRlt.mjs} +2 -2
  35. package/dist/{LexicalUtils.node-Dl7OvqJV.mjs → LexicalUtils.node-BPKMFN80.mjs} +1 -1
  36. package/dist/{LexicalUtils.prod-CBnq_iEV.mjs → LexicalUtils.prod-CJYQVQJO.mjs} +2 -2
  37. package/dist/bin/mxs.mjs +1 -1
  38. package/dist/{esm-ZXjJmLEC.mjs → esm-7vSMGlFz.mjs} +171 -245
  39. package/dist/esm-ZrfYH2y2.mjs +2 -0
  40. package/dist/index.mjs +1 -1
  41. package/dist/{mxs-DC9zR3f2.mjs → mxs-DKv-4ZTg.mjs} +362 -297
  42. package/dist/vendor/litexml/cli.mjs +94 -38
  43. package/dist/vendor/litexml/litexml-html-preview-client.css +329 -836
  44. package/dist/vendor/litexml/litexml-html-preview-client.js +6048 -5832
  45. package/dist/vendor/litexml/style.css +5 -1
  46. package/package.json +10 -10
  47. package/dist/esm-CNZ7kdTg.mjs +0 -2
  48. package/dist/src/bin/mxs.d.ts +0 -2
  49. package/dist/src/bin/mxs.js +0 -310
  50. package/dist/src/cli/ai/_poll.d.ts +0 -12
  51. package/dist/src/cli/ai/_poll.js +0 -38
  52. package/dist/src/cli/ai/_resolve.d.ts +0 -8
  53. package/dist/src/cli/ai/_resolve.js +0 -27
  54. package/dist/src/cli/ai/index.d.ts +0 -127
  55. package/dist/src/cli/ai/index.js +0 -46
  56. package/dist/src/cli/ai/insights/by-article.d.ts +0 -10
  57. package/dist/src/cli/ai/insights/by-article.js +0 -21
  58. package/dist/src/cli/ai/insights/delete.d.ts +0 -7
  59. package/dist/src/cli/ai/insights/delete.js +0 -18
  60. package/dist/src/cli/ai/insights/edit.d.ts +0 -8
  61. package/dist/src/cli/ai/insights/edit.js +0 -54
  62. package/dist/src/cli/ai/insights/get.d.ts +0 -6
  63. package/dist/src/cli/ai/insights/get.js +0 -11
  64. package/dist/src/cli/ai/insights/index.d.ts +0 -30
  65. package/dist/src/cli/ai/insights/index.js +0 -17
  66. package/dist/src/cli/ai/insights/list.d.ts +0 -10
  67. package/dist/src/cli/ai/insights/list.js +0 -20
  68. package/dist/src/cli/ai/insights/refresh.d.ts +0 -10
  69. package/dist/src/cli/ai/insights/refresh.js +0 -25
  70. package/dist/src/cli/ai/insights/translate.d.ts +0 -10
  71. package/dist/src/cli/ai/insights/translate.js +0 -25
  72. package/dist/src/cli/ai/overview/by-article.d.ts +0 -7
  73. package/dist/src/cli/ai/overview/by-article.js +0 -15
  74. package/dist/src/cli/ai/overview/index.d.ts +0 -11
  75. package/dist/src/cli/ai/overview/index.js +0 -4
  76. package/dist/src/cli/ai/overview/list.d.ts +0 -10
  77. package/dist/src/cli/ai/overview/list.js +0 -20
  78. package/dist/src/cli/ai/summary/by-article.d.ts +0 -10
  79. package/dist/src/cli/ai/summary/by-article.js +0 -21
  80. package/dist/src/cli/ai/summary/delete.d.ts +0 -7
  81. package/dist/src/cli/ai/summary/delete.js +0 -18
  82. package/dist/src/cli/ai/summary/edit.d.ts +0 -8
  83. package/dist/src/cli/ai/summary/edit.js +0 -54
  84. package/dist/src/cli/ai/summary/get.d.ts +0 -6
  85. package/dist/src/cli/ai/summary/get.js +0 -11
  86. package/dist/src/cli/ai/summary/index.d.ts +0 -30
  87. package/dist/src/cli/ai/summary/index.js +0 -9
  88. package/dist/src/cli/ai/summary/list.d.ts +0 -10
  89. package/dist/src/cli/ai/summary/list.js +0 -20
  90. package/dist/src/cli/ai/summary/regen.d.ts +0 -10
  91. package/dist/src/cli/ai/summary/regen.js +0 -25
  92. package/dist/src/cli/ai/summary/translate.d.ts +0 -10
  93. package/dist/src/cli/ai/summary/translate.js +0 -25
  94. package/dist/src/cli/ai/translate/by-article.d.ts +0 -9
  95. package/dist/src/cli/ai/translate/by-article.js +0 -19
  96. package/dist/src/cli/ai/translate/delete.d.ts +0 -7
  97. package/dist/src/cli/ai/translate/delete.js +0 -18
  98. package/dist/src/cli/ai/translate/edit.d.ts +0 -8
  99. package/dist/src/cli/ai/translate/edit.js +0 -97
  100. package/dist/src/cli/ai/translate/entries/delete.d.ts +0 -7
  101. package/dist/src/cli/ai/translate/entries/delete.js +0 -18
  102. package/dist/src/cli/ai/translate/entries/edit.d.ts +0 -8
  103. package/dist/src/cli/ai/translate/entries/edit.js +0 -73
  104. package/dist/src/cli/ai/translate/entries/generate.d.ts +0 -7
  105. package/dist/src/cli/ai/translate/entries/generate.js +0 -15
  106. package/dist/src/cli/ai/translate/entries/index.d.ts +0 -17
  107. package/dist/src/cli/ai/translate/entries/index.js +0 -6
  108. package/dist/src/cli/ai/translate/entries/list.d.ts +0 -10
  109. package/dist/src/cli/ai/translate/entries/list.js +0 -20
  110. package/dist/src/cli/ai/translate/get.d.ts +0 -6
  111. package/dist/src/cli/ai/translate/get.js +0 -11
  112. package/dist/src/cli/ai/translate/index.d.ts +0 -40
  113. package/dist/src/cli/ai/translate/index.js +0 -19
  114. package/dist/src/cli/ai/translate/languages.d.ts +0 -7
  115. package/dist/src/cli/ai/translate/languages.js +0 -15
  116. package/dist/src/cli/ai/translate/list.d.ts +0 -9
  117. package/dist/src/cli/ai/translate/list.js +0 -19
  118. package/dist/src/cli/ai/translate/run.d.ts +0 -10
  119. package/dist/src/cli/ai/translate/run.js +0 -31
  120. package/dist/src/cli/ai/tts/by-article.d.ts +0 -7
  121. package/dist/src/cli/ai/tts/by-article.js +0 -15
  122. package/dist/src/cli/ai/tts/delete.d.ts +0 -7
  123. package/dist/src/cli/ai/tts/delete.js +0 -18
  124. package/dist/src/cli/ai/tts/index.d.ts +0 -22
  125. package/dist/src/cli/ai/tts/index.js +0 -7
  126. package/dist/src/cli/ai/tts/list.d.ts +0 -10
  127. package/dist/src/cli/ai/tts/list.js +0 -20
  128. package/dist/src/cli/ai/tts/run.d.ts +0 -10
  129. package/dist/src/cli/ai/tts/run.js +0 -25
  130. package/dist/src/cli/ai/tts/voices.d.ts +0 -7
  131. package/dist/src/cli/ai/tts/voices.js +0 -12
  132. package/dist/src/cli/ai/views.d.ts +0 -3
  133. package/dist/src/cli/ai/views.js +0 -45
  134. package/dist/src/cli/auth/index.d.ts +0 -6
  135. package/dist/src/cli/auth/index.js +0 -22
  136. package/dist/src/cli/auth/login.d.ts +0 -11
  137. package/dist/src/cli/auth/login.js +0 -168
  138. package/dist/src/cli/auth/logout.d.ts +0 -6
  139. package/dist/src/cli/auth/logout.js +0 -21
  140. package/dist/src/cli/auth/status.d.ts +0 -4
  141. package/dist/src/cli/auth/status.js +0 -31
  142. package/dist/src/cli/auth/view.d.ts +0 -25
  143. package/dist/src/cli/auth/view.js +0 -46
  144. package/dist/src/cli/auth/whoami.d.ts +0 -7
  145. package/dist/src/cli/auth/whoami.js +0 -44
  146. package/dist/src/cli/category/create.d.ts +0 -10
  147. package/dist/src/cli/category/create.js +0 -24
  148. package/dist/src/cli/category/delete.d.ts +0 -8
  149. package/dist/src/cli/category/delete.js +0 -21
  150. package/dist/src/cli/category/get.d.ts +0 -6
  151. package/dist/src/cli/category/get.js +0 -11
  152. package/dist/src/cli/category/index.d.ts +0 -20
  153. package/dist/src/cli/category/index.js +0 -41
  154. package/dist/src/cli/category/list.d.ts +0 -4
  155. package/dist/src/cli/category/list.js +0 -10
  156. package/dist/src/cli/category/update.d.ts +0 -12
  157. package/dist/src/cli/category/update.js +0 -34
  158. package/dist/src/cli/comment/_flags.d.ts +0 -28
  159. package/dist/src/cli/comment/_flags.js +0 -48
  160. package/dist/src/cli/comment/approve.d.ts +0 -9
  161. package/dist/src/cli/comment/approve.js +0 -23
  162. package/dist/src/cli/comment/delete.d.ts +0 -9
  163. package/dist/src/cli/comment/delete.js +0 -24
  164. package/dist/src/cli/comment/get.d.ts +0 -6
  165. package/dist/src/cli/comment/get.js +0 -12
  166. package/dist/src/cli/comment/index.d.ts +0 -34
  167. package/dist/src/cli/comment/index.js +0 -53
  168. package/dist/src/cli/comment/list.d.ts +0 -9
  169. package/dist/src/cli/comment/list.js +0 -20
  170. package/dist/src/cli/comment/reject.d.ts +0 -9
  171. package/dist/src/cli/comment/reject.js +0 -23
  172. package/dist/src/cli/comment/reply.d.ts +0 -9
  173. package/dist/src/cli/comment/reply.js +0 -31
  174. package/dist/src/cli/comment/unread.d.ts +0 -7
  175. package/dist/src/cli/comment/unread.js +0 -21
  176. package/dist/src/cli/comment/view.d.ts +0 -3
  177. package/dist/src/cli/comment/view.js +0 -197
  178. package/dist/src/cli/config/edit.d.ts +0 -5
  179. package/dist/src/cli/config/edit.js +0 -36
  180. package/dist/src/cli/config/get.d.ts +0 -6
  181. package/dist/src/cli/config/get.js +0 -11
  182. package/dist/src/cli/config/index.d.ts +0 -10
  183. package/dist/src/cli/config/index.js +0 -22
  184. package/dist/src/cli/config/list.d.ts +0 -4
  185. package/dist/src/cli/config/list.js +0 -10
  186. package/dist/src/cli/config/set.d.ts +0 -9
  187. package/dist/src/cli/config/set.js +0 -48
  188. package/dist/src/cli/draft/_shared.d.ts +0 -27
  189. package/dist/src/cli/draft/_shared.js +0 -85
  190. package/dist/src/cli/draft/create.d.ts +0 -21
  191. package/dist/src/cli/draft/create.js +0 -34
  192. package/dist/src/cli/draft/delete.d.ts +0 -7
  193. package/dist/src/cli/draft/delete.js +0 -20
  194. package/dist/src/cli/draft/get.d.ts +0 -6
  195. package/dist/src/cli/draft/get.js +0 -11
  196. package/dist/src/cli/draft/index.d.ts +0 -54
  197. package/dist/src/cli/draft/index.js +0 -42
  198. package/dist/src/cli/draft/list.d.ts +0 -11
  199. package/dist/src/cli/draft/list.js +0 -23
  200. package/dist/src/cli/draft/publish.d.ts +0 -8
  201. package/dist/src/cli/draft/publish.js +0 -64
  202. package/dist/src/cli/draft/update.d.ts +0 -22
  203. package/dist/src/cli/draft/update.js +0 -29
  204. package/dist/src/cli/file/_shared.d.ts +0 -6
  205. package/dist/src/cli/file/_shared.js +0 -5
  206. package/dist/src/cli/file/delete.d.ts +0 -8
  207. package/dist/src/cli/file/delete.js +0 -21
  208. package/dist/src/cli/file/index.d.ts +0 -19
  209. package/dist/src/cli/file/index.js +0 -33
  210. package/dist/src/cli/file/list.d.ts +0 -6
  211. package/dist/src/cli/file/list.js +0 -11
  212. package/dist/src/cli/file/rename.d.ts +0 -8
  213. package/dist/src/cli/file/rename.js +0 -16
  214. package/dist/src/cli/file/upload.d.ts +0 -9
  215. package/dist/src/cli/file/upload.js +0 -32
  216. package/dist/src/cli/help/index.d.ts +0 -62
  217. package/dist/src/cli/help/index.js +0 -276
  218. package/dist/src/cli/help/registry.d.ts +0 -28
  219. package/dist/src/cli/help/registry.js +0 -29
  220. package/dist/src/cli/note/_flags.d.ts +0 -66
  221. package/dist/src/cli/note/_flags.js +0 -73
  222. package/dist/src/cli/note/create.d.ts +0 -23
  223. package/dist/src/cli/note/create.js +0 -25
  224. package/dist/src/cli/note/delete.d.ts +0 -8
  225. package/dist/src/cli/note/delete.js +0 -21
  226. package/dist/src/cli/note/edit.d.ts +0 -28
  227. package/dist/src/cli/note/edit.js +0 -114
  228. package/dist/src/cli/note/get.d.ts +0 -6
  229. package/dist/src/cli/note/get.js +0 -29
  230. package/dist/src/cli/note/index.d.ts +0 -77
  231. package/dist/src/cli/note/index.js +0 -63
  232. package/dist/src/cli/note/list.d.ts +0 -10
  233. package/dist/src/cli/note/list.js +0 -22
  234. package/dist/src/cli/note/publish.d.ts +0 -7
  235. package/dist/src/cli/note/publish.js +0 -17
  236. package/dist/src/cli/note/unpublish.d.ts +0 -7
  237. package/dist/src/cli/note/unpublish.js +0 -17
  238. package/dist/src/cli/note/update.d.ts +0 -25
  239. package/dist/src/cli/note/update.js +0 -36
  240. package/dist/src/cli/note/view.d.ts +0 -3
  241. package/dist/src/cli/note/view.js +0 -162
  242. package/dist/src/cli/page/create.d.ts +0 -41
  243. package/dist/src/cli/page/create.js +0 -56
  244. package/dist/src/cli/page/delete.d.ts +0 -7
  245. package/dist/src/cli/page/delete.js +0 -37
  246. package/dist/src/cli/page/edit.d.ts +0 -19
  247. package/dist/src/cli/page/edit.js +0 -117
  248. package/dist/src/cli/page/get.d.ts +0 -6
  249. package/dist/src/cli/page/get.js +0 -16
  250. package/dist/src/cli/page/index.d.ts +0 -44
  251. package/dist/src/cli/page/index.js +0 -38
  252. package/dist/src/cli/page/list.d.ts +0 -4
  253. package/dist/src/cli/page/list.js +0 -10
  254. package/dist/src/cli/page/update.d.ts +0 -16
  255. package/dist/src/cli/page/update.js +0 -48
  256. package/dist/src/cli/page/view.d.ts +0 -2
  257. package/dist/src/cli/page/view.js +0 -79
  258. package/dist/src/cli/post/_flags.d.ts +0 -66
  259. package/dist/src/cli/post/_flags.js +0 -96
  260. package/dist/src/cli/post/apply.d.ts +0 -7
  261. package/dist/src/cli/post/apply.js +0 -70
  262. package/dist/src/cli/post/create.d.ts +0 -21
  263. package/dist/src/cli/post/create.js +0 -24
  264. package/dist/src/cli/post/delete.d.ts +0 -8
  265. package/dist/src/cli/post/delete.js +0 -21
  266. package/dist/src/cli/post/edit.d.ts +0 -26
  267. package/dist/src/cli/post/edit.js +0 -115
  268. package/dist/src/cli/post/get.d.ts +0 -7
  269. package/dist/src/cli/post/get.js +0 -15
  270. package/dist/src/cli/post/index.d.ts +0 -91
  271. package/dist/src/cli/post/index.js +0 -73
  272. package/dist/src/cli/post/list.d.ts +0 -10
  273. package/dist/src/cli/post/list.js +0 -23
  274. package/dist/src/cli/post/publish.d.ts +0 -7
  275. package/dist/src/cli/post/publish.js +0 -17
  276. package/dist/src/cli/post/stage.d.ts +0 -23
  277. package/dist/src/cli/post/stage.js +0 -55
  278. package/dist/src/cli/post/unpublish.d.ts +0 -7
  279. package/dist/src/cli/post/unpublish.js +0 -17
  280. package/dist/src/cli/post/update.d.ts +0 -23
  281. package/dist/src/cli/post/update.js +0 -38
  282. package/dist/src/cli/post/view.d.ts +0 -3
  283. package/dist/src/cli/post/view.js +0 -150
  284. package/dist/src/cli/preview/index.d.ts +0 -13
  285. package/dist/src/cli/preview/index.js +0 -226
  286. package/dist/src/cli/profile/index.d.ts +0 -14
  287. package/dist/src/cli/profile/index.js +0 -36
  288. package/dist/src/cli/profile/ls.d.ts +0 -5
  289. package/dist/src/cli/profile/ls.js +0 -26
  290. package/dist/src/cli/profile/mark.d.ts +0 -9
  291. package/dist/src/cli/profile/mark.js +0 -23
  292. package/dist/src/cli/profile/rm.d.ts +0 -12
  293. package/dist/src/cli/profile/rm.js +0 -50
  294. package/dist/src/cli/profile/show.d.ts +0 -9
  295. package/dist/src/cli/profile/show.js +0 -40
  296. package/dist/src/cli/profile/use.d.ts +0 -6
  297. package/dist/src/cli/profile/use.js +0 -11
  298. package/dist/src/cli/profile/view.d.ts +0 -8
  299. package/dist/src/cli/profile/view.js +0 -21
  300. package/dist/src/cli/project/_flags.d.ts +0 -56
  301. package/dist/src/cli/project/_flags.js +0 -130
  302. package/dist/src/cli/project/create.d.ts +0 -17
  303. package/dist/src/cli/project/create.js +0 -25
  304. package/dist/src/cli/project/delete.d.ts +0 -8
  305. package/dist/src/cli/project/delete.js +0 -22
  306. package/dist/src/cli/project/edit.d.ts +0 -11
  307. package/dist/src/cli/project/edit.js +0 -61
  308. package/dist/src/cli/project/get.d.ts +0 -7
  309. package/dist/src/cli/project/get.js +0 -14
  310. package/dist/src/cli/project/index.d.ts +0 -43
  311. package/dist/src/cli/project/index.js +0 -52
  312. package/dist/src/cli/project/list.d.ts +0 -8
  313. package/dist/src/cli/project/list.js +0 -19
  314. package/dist/src/cli/project/update.d.ts +0 -18
  315. package/dist/src/cli/project/update.js +0 -24
  316. package/dist/src/cli/project/view-cmd.d.ts +0 -7
  317. package/dist/src/cli/project/view-cmd.js +0 -15
  318. package/dist/src/cli/project/view.d.ts +0 -3
  319. package/dist/src/cli/project/view.js +0 -102
  320. package/dist/src/cli/render/codehighlight.d.ts +0 -8
  321. package/dist/src/cli/render/codehighlight.js +0 -264
  322. package/dist/src/cli/render/envelope.d.ts +0 -7
  323. package/dist/src/cli/render/envelope.js +0 -23
  324. package/dist/src/cli/render/frontmatter.d.ts +0 -8
  325. package/dist/src/cli/render/frontmatter.js +0 -50
  326. package/dist/src/cli/render/helpers.d.ts +0 -2
  327. package/dist/src/cli/render/helpers.js +0 -11
  328. package/dist/src/cli/render/index.d.ts +0 -7
  329. package/dist/src/cli/render/index.js +0 -10
  330. package/dist/src/cli/render/lexical/blocks.d.ts +0 -19
  331. package/dist/src/cli/render/lexical/blocks.js +0 -208
  332. package/dist/src/cli/render/lexical/code.d.ts +0 -2
  333. package/dist/src/cli/render/lexical/code.js +0 -22
  334. package/dist/src/cli/render/lexical/embeds.d.ts +0 -6
  335. package/dist/src/cli/render/lexical/embeds.js +0 -51
  336. package/dist/src/cli/render/lexical/index.d.ts +0 -9
  337. package/dist/src/cli/render/lexical/index.js +0 -25
  338. package/dist/src/cli/render/lexical/inlines.d.ts +0 -17
  339. package/dist/src/cli/render/lexical/inlines.js +0 -76
  340. package/dist/src/cli/render/lexical/parser.d.ts +0 -10
  341. package/dist/src/cli/render/lexical/parser.js +0 -64
  342. package/dist/src/cli/render/lexical/walker.d.ts +0 -21
  343. package/dist/src/cli/render/lexical/walker.js +0 -51
  344. package/dist/src/cli/render/markdown.d.ts +0 -18
  345. package/dist/src/cli/render/markdown.js +0 -196
  346. package/dist/src/cli/render/metadata-block.d.ts +0 -14
  347. package/dist/src/cli/render/metadata-block.js +0 -50
  348. package/dist/src/cli/skill/all.d.ts +0 -4
  349. package/dist/src/cli/skill/all.js +0 -11
  350. package/dist/src/cli/skill/get.d.ts +0 -6
  351. package/dist/src/cli/skill/get.js +0 -12
  352. package/dist/src/cli/skill/index.d.ts +0 -10
  353. package/dist/src/cli/skill/index.js +0 -34
  354. package/dist/src/cli/skill/list.d.ts +0 -4
  355. package/dist/src/cli/skill/list.js +0 -11
  356. package/dist/src/cli/skill/search.d.ts +0 -6
  357. package/dist/src/cli/skill/search.js +0 -12
  358. package/dist/src/cli/skill/views.d.ts +0 -6
  359. package/dist/src/cli/skill/views.js +0 -90
  360. package/dist/src/cli/snippet/_flags.d.ts +0 -57
  361. package/dist/src/cli/snippet/_flags.js +0 -123
  362. package/dist/src/cli/snippet/_resolve.d.ts +0 -4
  363. package/dist/src/cli/snippet/_resolve.js +0 -32
  364. package/dist/src/cli/snippet/_sync.d.ts +0 -5
  365. package/dist/src/cli/snippet/_sync.js +0 -54
  366. package/dist/src/cli/snippet/create.d.ts +0 -19
  367. package/dist/src/cli/snippet/create.js +0 -35
  368. package/dist/src/cli/snippet/delete.d.ts +0 -8
  369. package/dist/src/cli/snippet/delete.js +0 -28
  370. package/dist/src/cli/snippet/edit.d.ts +0 -7
  371. package/dist/src/cli/snippet/edit.js +0 -29
  372. package/dist/src/cli/snippet/get.d.ts +0 -6
  373. package/dist/src/cli/snippet/get.js +0 -12
  374. package/dist/src/cli/snippet/index.d.ts +0 -43
  375. package/dist/src/cli/snippet/index.js +0 -58
  376. package/dist/src/cli/snippet/list.d.ts +0 -9
  377. package/dist/src/cli/snippet/list.js +0 -20
  378. package/dist/src/cli/snippet/pull.d.ts +0 -8
  379. package/dist/src/cli/snippet/pull.js +0 -33
  380. package/dist/src/cli/snippet/push.d.ts +0 -10
  381. package/dist/src/cli/snippet/push.js +0 -31
  382. package/dist/src/cli/snippet/update.d.ts +0 -8
  383. package/dist/src/cli/snippet/update.js +0 -16
  384. package/dist/src/cli/topic/create.d.ts +0 -10
  385. package/dist/src/cli/topic/create.js +0 -24
  386. package/dist/src/cli/topic/delete.d.ts +0 -7
  387. package/dist/src/cli/topic/delete.js +0 -37
  388. package/dist/src/cli/topic/get.d.ts +0 -6
  389. package/dist/src/cli/topic/get.js +0 -15
  390. package/dist/src/cli/topic/index.d.ts +0 -20
  391. package/dist/src/cli/topic/index.js +0 -32
  392. package/dist/src/cli/topic/list.d.ts +0 -4
  393. package/dist/src/cli/topic/list.js +0 -10
  394. package/dist/src/cli/topic/update.d.ts +0 -11
  395. package/dist/src/cli/topic/update.js +0 -51
  396. package/dist/src/cli/ui/index.d.ts +0 -24
  397. package/dist/src/cli/ui/index.js +0 -83
  398. package/dist/src/cli/update/index.d.ts +0 -10
  399. package/dist/src/cli/update/index.js +0 -142
  400. package/dist/src/domain/admin-link.d.ts +0 -12
  401. package/dist/src/domain/admin-link.js +0 -45
  402. package/dist/src/domain/content-spec.d.ts +0 -20
  403. package/dist/src/domain/content-spec.js +0 -78
  404. package/dist/src/domain/envelope-compat.d.ts +0 -68
  405. package/dist/src/domain/envelope-compat.js +0 -121
  406. package/dist/src/domain/envelope.d.ts +0 -34
  407. package/dist/src/domain/envelope.js +0 -355
  408. package/dist/src/domain/errors.d.ts +0 -336
  409. package/dist/src/domain/errors.js +0 -239
  410. package/dist/src/domain/gate.d.ts +0 -14
  411. package/dist/src/domain/gate.js +0 -18
  412. package/dist/src/domain/payload.d.ts +0 -64
  413. package/dist/src/domain/payload.js +0 -237
  414. package/dist/src/domain/preflight-guards.d.ts +0 -54
  415. package/dist/src/domain/preflight-guards.js +0 -130
  416. package/dist/src/domain/runtime-flags.d.ts +0 -33
  417. package/dist/src/domain/runtime-flags.js +0 -166
  418. package/dist/src/domain/schema/api-envelope.d.ts +0 -67
  419. package/dist/src/domain/schema/api-envelope.js +0 -65
  420. package/dist/src/domain/schema/category.d.ts +0 -23
  421. package/dist/src/domain/schema/category.js +0 -19
  422. package/dist/src/domain/schema/config.d.ts +0 -13
  423. package/dist/src/domain/schema/config.js +0 -18
  424. package/dist/src/domain/schema/note.d.ts +0 -76
  425. package/dist/src/domain/schema/note.js +0 -35
  426. package/dist/src/domain/schema/page.d.ts +0 -40
  427. package/dist/src/domain/schema/page.js +0 -22
  428. package/dist/src/domain/schema/post.d.ts +0 -68
  429. package/dist/src/domain/schema/post.js +0 -35
  430. package/dist/src/domain/schema/profile.d.ts +0 -14
  431. package/dist/src/domain/schema/profile.js +0 -22
  432. package/dist/src/domain/schema/topic.d.ts +0 -24
  433. package/dist/src/domain/schema/topic.js +0 -16
  434. package/dist/src/domain/version.d.ts +0 -15
  435. package/dist/src/domain/version.js +0 -43
  436. package/dist/src/index.d.ts +0 -4
  437. package/dist/src/index.js +0 -8
  438. package/dist/src/layers/App.d.ts +0 -30
  439. package/dist/src/layers/App.js +0 -39
  440. package/dist/src/services/Ai/index.d.ts +0 -13
  441. package/dist/src/services/Ai/index.js +0 -127
  442. package/dist/src/services/Ai/overview.d.ts +0 -7
  443. package/dist/src/services/Ai/overview.js +0 -11
  444. package/dist/src/services/Ai/resources.d.ts +0 -7
  445. package/dist/src/services/Ai/resources.js +0 -59
  446. package/dist/src/services/Ai/shared.d.ts +0 -2
  447. package/dist/src/services/Ai/shared.js +0 -11
  448. package/dist/src/services/Ai/tasks.d.ts +0 -8
  449. package/dist/src/services/Ai/tasks.js +0 -144
  450. package/dist/src/services/Ai/types.d.ts +0 -130
  451. package/dist/src/services/Ai/types.js +0 -1
  452. package/dist/src/services/Api.d.ts +0 -67
  453. package/dist/src/services/Api.js +0 -348
  454. package/dist/src/services/Auth.d.ts +0 -101
  455. package/dist/src/services/Auth.js +0 -402
  456. package/dist/src/services/Backup.d.ts +0 -8
  457. package/dist/src/services/Backup.js +0 -4
  458. package/dist/src/services/Cache.d.ts +0 -8
  459. package/dist/src/services/Cache.js +0 -4
  460. package/dist/src/services/Comment.d.ts +0 -48
  461. package/dist/src/services/Comment.js +0 -102
  462. package/dist/src/services/Config.d.ts +0 -95
  463. package/dist/src/services/Config.js +0 -359
  464. package/dist/src/services/Editor.d.ts +0 -28
  465. package/dist/src/services/Editor.js +0 -95
  466. package/dist/src/services/Lexical.d.ts +0 -27
  467. package/dist/src/services/Lexical.js +0 -56
  468. package/dist/src/services/Migration.d.ts +0 -31
  469. package/dist/src/services/Migration.js +0 -177
  470. package/dist/src/services/Profile.d.ts +0 -29
  471. package/dist/src/services/Profile.js +0 -115
  472. package/dist/src/services/Renderer/content.d.ts +0 -16
  473. package/dist/src/services/Renderer/content.js +0 -110
  474. package/dist/src/services/Renderer/datetime.d.ts +0 -38
  475. package/dist/src/services/Renderer/datetime.js +0 -147
  476. package/dist/src/services/Renderer/errors.d.ts +0 -3
  477. package/dist/src/services/Renderer/errors.js +0 -59
  478. package/dist/src/services/Renderer/index.d.ts +0 -13
  479. package/dist/src/services/Renderer/index.js +0 -11
  480. package/dist/src/services/Renderer/lists.d.ts +0 -1
  481. package/dist/src/services/Renderer/lists.js +0 -101
  482. package/dist/src/services/Renderer/options.d.ts +0 -10
  483. package/dist/src/services/Renderer/options.js +0 -13
  484. package/dist/src/services/Renderer/primitives.d.ts +0 -4
  485. package/dist/src/services/Renderer/primitives.js +0 -12
  486. package/dist/src/services/Renderer/service.d.ts +0 -35
  487. package/dist/src/services/Renderer/service.js +0 -123
  488. package/dist/src/services/Renderer/view.d.ts +0 -16
  489. package/dist/src/services/Renderer/view.js +0 -1
  490. package/dist/src/services/Resolver.d.ts +0 -47
  491. package/dist/src/services/Resolver.js +0 -269
  492. package/dist/src/services/Skill.d.ts +0 -29
  493. package/dist/src/services/Skill.js +0 -421
  494. package/dist/src/services/UpdateNotifier.d.ts +0 -162
  495. package/dist/src/services/UpdateNotifier.js +0 -572
  496. package/dist/test/cli/ai/ai.test.d.ts +0 -1
  497. package/dist/test/cli/ai/ai.test.js +0 -507
  498. package/dist/test/cli/ai/verbs.test.d.ts +0 -1
  499. package/dist/test/cli/ai/verbs.test.js +0 -235
  500. package/dist/test/cli/auth/login.test.d.ts +0 -1
  501. package/dist/test/cli/auth/login.test.js +0 -236
  502. package/dist/test/cli/auth/logout-whoami.test.d.ts +0 -1
  503. package/dist/test/cli/auth/logout-whoami.test.js +0 -124
  504. package/dist/test/cli/auth/status.test.d.ts +0 -1
  505. package/dist/test/cli/auth/status.test.js +0 -90
  506. package/dist/test/cli/category/category.test.d.ts +0 -1
  507. package/dist/test/cli/category/category.test.js +0 -175
  508. package/dist/test/cli/comment/comment.test.d.ts +0 -1
  509. package/dist/test/cli/comment/comment.test.js +0 -445
  510. package/dist/test/cli/config/config.test.d.ts +0 -1
  511. package/dist/test/cli/config/config.test.js +0 -281
  512. package/dist/test/cli/edit-roundtrip.test.d.ts +0 -1
  513. package/dist/test/cli/edit-roundtrip.test.js +0 -259
  514. package/dist/test/cli/file/file.test.d.ts +0 -1
  515. package/dist/test/cli/file/file.test.js +0 -185
  516. package/dist/test/cli/help.test.d.ts +0 -1
  517. package/dist/test/cli/help.test.js +0 -289
  518. package/dist/test/cli/note/create.test.d.ts +0 -1
  519. package/dist/test/cli/note/create.test.js +0 -155
  520. package/dist/test/cli/note/list.test.d.ts +0 -1
  521. package/dist/test/cli/note/list.test.js +0 -115
  522. package/dist/test/cli/note/publish.test.d.ts +0 -1
  523. package/dist/test/cli/note/publish.test.js +0 -123
  524. package/dist/test/cli/page/page.test.d.ts +0 -1
  525. package/dist/test/cli/page/page.test.js +0 -185
  526. package/dist/test/cli/post/create.test.d.ts +0 -1
  527. package/dist/test/cli/post/create.test.js +0 -172
  528. package/dist/test/cli/post/list.test.d.ts +0 -1
  529. package/dist/test/cli/post/list.test.js +0 -133
  530. package/dist/test/cli/post/publish.test.d.ts +0 -1
  531. package/dist/test/cli/post/publish.test.js +0 -139
  532. package/dist/test/cli/post/stage-apply.test.d.ts +0 -1
  533. package/dist/test/cli/post/stage-apply.test.js +0 -215
  534. package/dist/test/cli/post/update.test.d.ts +0 -1
  535. package/dist/test/cli/post/update.test.js +0 -160
  536. package/dist/test/cli/post-note-crud.test.d.ts +0 -1
  537. package/dist/test/cli/post-note-crud.test.js +0 -362
  538. package/dist/test/cli/profile/ls.test.d.ts +0 -1
  539. package/dist/test/cli/profile/ls.test.js +0 -93
  540. package/dist/test/cli/profile/mark-use.test.d.ts +0 -1
  541. package/dist/test/cli/profile/mark-use.test.js +0 -216
  542. package/dist/test/cli/project-crud.test.d.ts +0 -1
  543. package/dist/test/cli/project-crud.test.js +0 -315
  544. package/dist/test/cli/render/lexical.test.d.ts +0 -1
  545. package/dist/test/cli/render/lexical.test.js +0 -216
  546. package/dist/test/cli/render/markdown.test.d.ts +0 -1
  547. package/dist/test/cli/render/markdown.test.js +0 -39
  548. package/dist/test/cli/snippet-crud.test.d.ts +0 -1
  549. package/dist/test/cli/snippet-crud.test.js +0 -293
  550. package/dist/test/cli/topic/topic.test.d.ts +0 -1
  551. package/dist/test/cli/topic/topic.test.js +0 -181
  552. package/dist/test/cli/update.test.d.ts +0 -1
  553. package/dist/test/cli/update.test.js +0 -395
  554. package/dist/test/domain/content-spec.test.d.ts +0 -1
  555. package/dist/test/domain/content-spec.test.js +0 -126
  556. package/dist/test/domain/envelope-compat.test.d.ts +0 -1
  557. package/dist/test/domain/envelope-compat.test.js +0 -126
  558. package/dist/test/domain/envelope.test.d.ts +0 -1
  559. package/dist/test/domain/envelope.test.js +0 -149
  560. package/dist/test/domain/errors.test.d.ts +0 -1
  561. package/dist/test/domain/errors.test.js +0 -127
  562. package/dist/test/domain/gate.test.d.ts +0 -1
  563. package/dist/test/domain/gate.test.js +0 -128
  564. package/dist/test/domain/payload.test.d.ts +0 -1
  565. package/dist/test/domain/payload.test.js +0 -259
  566. package/dist/test/helper/test-fs.d.ts +0 -24
  567. package/dist/test/helper/test-fs.js +0 -161
  568. package/dist/test/helper/test-http.d.ts +0 -31
  569. package/dist/test/helper/test-http.js +0 -66
  570. package/dist/test/integration/_helpers.d.ts +0 -5
  571. package/dist/test/integration/_helpers.js +0 -24
  572. package/dist/test/integration/cli-error-envelope.test.d.ts +0 -1
  573. package/dist/test/integration/cli-error-envelope.test.js +0 -137
  574. package/dist/test/integration/cli-help-render.test.d.ts +0 -1
  575. package/dist/test/integration/cli-help-render.test.js +0 -149
  576. package/dist/test/integration/cli-help.test.d.ts +0 -1
  577. package/dist/test/integration/cli-help.test.js +0 -67
  578. package/dist/test/integration/cli-post-list.test.d.ts +0 -1
  579. package/dist/test/integration/cli-post-list.test.js +0 -140
  580. package/dist/test/integration/cli-skill.test.d.ts +0 -1
  581. package/dist/test/integration/cli-skill.test.js +0 -74
  582. package/dist/test/integration/cli-version.test.d.ts +0 -1
  583. package/dist/test/integration/cli-version.test.js +0 -37
  584. package/dist/test/services/Api.test.d.ts +0 -1
  585. package/dist/test/services/Api.test.js +0 -553
  586. package/dist/test/services/Auth.test.d.ts +0 -1
  587. package/dist/test/services/Auth.test.js +0 -650
  588. package/dist/test/services/Config.test.d.ts +0 -1
  589. package/dist/test/services/Config.test.js +0 -510
  590. package/dist/test/services/Datetime.test.d.ts +0 -1
  591. package/dist/test/services/Datetime.test.js +0 -113
  592. package/dist/test/services/Editor.test.d.ts +0 -1
  593. package/dist/test/services/Editor.test.js +0 -205
  594. package/dist/test/services/Lexical.errors.test.d.ts +0 -1
  595. package/dist/test/services/Lexical.errors.test.js +0 -60
  596. package/dist/test/services/Lexical.test.d.ts +0 -1
  597. package/dist/test/services/Lexical.test.js +0 -68
  598. package/dist/test/services/Migration.test.d.ts +0 -1
  599. package/dist/test/services/Migration.test.js +0 -376
  600. package/dist/test/services/Profile.test.d.ts +0 -1
  601. package/dist/test/services/Profile.test.js +0 -277
  602. package/dist/test/services/Renderer.test.d.ts +0 -1
  603. package/dist/test/services/Renderer.test.js +0 -538
  604. package/dist/test/services/Resolver.test.d.ts +0 -1
  605. package/dist/test/services/Resolver.test.js +0 -320
  606. package/dist/test/services/Skill.test.d.ts +0 -1
  607. package/dist/test/services/Skill.test.js +0 -261
  608. package/dist/test/services/UpdateNotifier.spawn.test.d.ts +0 -1
  609. package/dist/test/services/UpdateNotifier.spawn.test.js +0 -73
  610. package/dist/test/services/UpdateNotifier.test.d.ts +0 -1
  611. package/dist/test/services/UpdateNotifier.test.js +0 -912
@@ -1,320 +0,0 @@
1
- import { Effect, Layer } from 'effect';
2
- import { describe, expect, it, vi } from 'vitest';
3
- import { Api, } from '../../src/services/Api';
4
- import { Generic } from '../../src/domain/errors';
5
- import { isSnowflakeId, layer as resolverLayer, make, matchItem, Resolver, } from '../../src/services/Resolver';
6
- function mockApi(responses) {
7
- const raw = (path, _options) => Effect.tryPromise({
8
- try: async () => {
9
- if (!(path in responses)) {
10
- throw new Error(`unexpected request: ${path}`);
11
- }
12
- const v = responses[path];
13
- return typeof v === 'function' ? await v() : v;
14
- },
15
- catch: (e) => new Generic({
16
- message: String(e?.message ?? e),
17
- }),
18
- });
19
- const request = (path, options) => raw(path, options);
20
- return { request, raw };
21
- }
22
- // ---------------------------------------------------------------------------
23
- // Pure helpers
24
- // ---------------------------------------------------------------------------
25
- describe('isSnowflakeId', () => {
26
- it('accepts 15-digit numeric ids', () => {
27
- expect(isSnowflakeId('123456789012345')).toBe(true);
28
- expect(isSnowflakeId('1234567890123456789')).toBe(true);
29
- });
30
- it('rejects short ids and slugs', () => {
31
- expect(isSnowflakeId('12345')).toBe(false);
32
- expect(isSnowflakeId('hello-world')).toBe(false);
33
- });
34
- });
35
- describe('matchItem', () => {
36
- const items = [
37
- { id: 'a', slug: 'blog', name: 'Blog' },
38
- { id: 'b', slug: 'tech', name: 'Technology' },
39
- ];
40
- it('matches by exact slug', () => {
41
- expect(matchItem(items, 'tech')?.id).toBe('b');
42
- });
43
- it('matches by exact name', () => {
44
- expect(matchItem(items, 'Blog')?.id).toBe('a');
45
- });
46
- it('matches case-insensitively as fallback', () => {
47
- expect(matchItem(items, 'BLOG')?.id).toBe('a');
48
- });
49
- it('returns null when nothing matches', () => {
50
- expect(matchItem(items, 'nope')).toBeNull();
51
- });
52
- });
53
- // ---------------------------------------------------------------------------
54
- // resolveCategory / resolveTopic via in-memory mock Api
55
- // ---------------------------------------------------------------------------
56
- describe('resolveCategory / resolveTopic', () => {
57
- it('returns snowflake ids unchanged without a request', async () => {
58
- const api = mockApi({});
59
- const svc = make(api);
60
- const id = await Effect.runPromise(svc.resolveCategory('123456789012345'));
61
- expect(id).toBe('123456789012345');
62
- });
63
- it('resolves a slug through /categories', async () => {
64
- const api = mockApi({
65
- '/categories': { data: [{ id: 'cat-1', slug: 'blog', name: 'Blog' }] },
66
- });
67
- const svc = make(api);
68
- const id = await Effect.runPromise(svc.resolveCategory('blog'));
69
- expect(id).toBe('cat-1');
70
- });
71
- it('fails ValidationFailed with suggestions on unknown slug', async () => {
72
- const api = mockApi({
73
- '/categories': { data: [{ id: 'cat-1', slug: 'blog', name: 'Blog' }] },
74
- });
75
- const svc = make(api);
76
- const exit = await Effect.runPromiseExit(svc.resolveCategory('blo'));
77
- expect(exit._tag).toBe('Failure');
78
- if (exit._tag === 'Failure') {
79
- const err = extractError(exit.cause);
80
- expect(err?._tag).toBe('ValidationFailed');
81
- expect(err.message).toMatch(/category "blo" not found/);
82
- // suggestion label picks `name` before `slug` (legacy fuzzySuggest behavior)
83
- expect(err.details?.issues?.[0]?.suggestions).toContain('Blog');
84
- }
85
- });
86
- it('hits topic endpoint /topics/all', async () => {
87
- const api = mockApi({
88
- '/topics/all': [{ id: 'topic-1', slug: 'misc', name: 'Misc' }],
89
- });
90
- const svc = make(api);
91
- const id = await Effect.runPromise(svc.resolveTopic('misc'));
92
- expect(id).toBe('topic-1');
93
- });
94
- it('caches list within ttl window', async () => {
95
- const responses = {
96
- '/categories': vi.fn(() => ({
97
- data: [{ id: 'cat-1', slug: 'blog' }],
98
- })),
99
- };
100
- const api = mockApi(responses);
101
- const svc = make(api);
102
- await Effect.runPromise(svc.resolveCategory('blog'));
103
- await Effect.runPromise(svc.resolveCategory('blog'));
104
- expect(responses['/categories']).toHaveBeenCalledTimes(1);
105
- });
106
- it('invalidate(kind) forces re-fetch', async () => {
107
- const responses = {
108
- '/categories': vi.fn(() => ({
109
- data: [{ id: 'cat-1', slug: 'blog' }],
110
- })),
111
- };
112
- const api = mockApi(responses);
113
- const svc = make(api);
114
- await Effect.runPromise(svc.resolveCategory('blog'));
115
- await Effect.runPromise(svc.invalidate('category'));
116
- await Effect.runPromise(svc.resolveCategory('blog'));
117
- expect(responses['/categories']).toHaveBeenCalledTimes(2);
118
- });
119
- });
120
- // ---------------------------------------------------------------------------
121
- // resolveCategoryRefs
122
- // ---------------------------------------------------------------------------
123
- describe('resolveCategoryRefs', () => {
124
- it('maps a list of slugs/ids to ids', async () => {
125
- const api = mockApi({
126
- '/categories': {
127
- data: [
128
- { id: 'cat-1', slug: 'blog' },
129
- { id: 'cat-2', slug: 'tech' },
130
- ],
131
- },
132
- });
133
- const svc = make(api);
134
- const ids = await Effect.runPromise(svc.resolveCategoryRefs(['blog', '999999999999999', 'tech']));
135
- expect(ids).toEqual(['cat-1', '999999999999999', 'cat-2']);
136
- });
137
- it('fails on first unknown ref', async () => {
138
- const api = mockApi({
139
- '/categories': { data: [{ id: 'cat-1', slug: 'blog' }] },
140
- });
141
- const svc = make(api);
142
- const exit = await Effect.runPromiseExit(svc.resolveCategoryRefs(['blog', 'missing']));
143
- expect(exit._tag).toBe('Failure');
144
- if (exit._tag === 'Failure') {
145
- expect(extractError(exit.cause)?._tag).toBe('ValidationFailed');
146
- }
147
- });
148
- });
149
- // ---------------------------------------------------------------------------
150
- // Direct API resolvers (port of commands/post/note/category/resolve.ts)
151
- // ---------------------------------------------------------------------------
152
- describe('resolvePostReadPath / resolvePostId', () => {
153
- it('resolves ordinary post slugs through /posts/get-url', async () => {
154
- const api = mockApi({
155
- '/posts/get-url/hello-world': { path: '/writing/hello-world' },
156
- });
157
- const svc = make(api);
158
- expect(await Effect.runPromise(svc.resolvePostReadPath('hello-world'))).toBe('/posts/writing/hello-world');
159
- });
160
- it('resolves a post id by reading the resolved category route', async () => {
161
- const api = mockApi({
162
- '/posts/get-url/hello-world': { path: '/writing/hello-world' },
163
- '/posts/writing/hello-world': { id: 'post-1' },
164
- });
165
- const svc = make(api);
166
- expect(await Effect.runPromise(svc.resolvePostId('hello-world'))).toBe('post-1');
167
- });
168
- it('keeps snowflake ids without a network round-trip', async () => {
169
- const api = mockApi({});
170
- const svc = make(api);
171
- expect(await Effect.runPromise(svc.resolvePostReadPath('123456789012345'))).toBe('/posts/123456789012345');
172
- });
173
- it('fails ResourceNotFound when /posts/get-url returns no path', async () => {
174
- const api = mockApi({
175
- '/posts/get-url/missing': {},
176
- });
177
- const svc = make(api);
178
- const exit = await Effect.runPromiseExit(svc.resolvePostId('missing'));
179
- expect(exit._tag).toBe('Failure');
180
- if (exit._tag === 'Failure') {
181
- expect(extractError(exit.cause)?._tag).toBe('ResourceNotFound');
182
- }
183
- });
184
- it('unwraps the response envelope ({ data: { path } }) from /posts/get-url', async () => {
185
- const api = mockApi({
186
- '/posts/get-url/aws-vless': { data: { path: '/writing/aws-vless' } },
187
- });
188
- const svc = make(api);
189
- expect(await Effect.runPromise(svc.resolvePostReadPath('aws-vless'))).toBe('/posts/writing/aws-vless');
190
- });
191
- it('unwraps the response envelope ({ data: { id } }) from the post detail route', async () => {
192
- const api = mockApi({
193
- '/posts/get-url/aws-vless': { data: { path: '/writing/aws-vless' } },
194
- '/posts/writing/aws-vless': { data: { id: 'post-9' }, meta: {} },
195
- });
196
- const svc = make(api);
197
- expect(await Effect.runPromise(svc.resolvePostId('aws-vless'))).toBe('post-9');
198
- });
199
- });
200
- describe('resolveNoteId', () => {
201
- it('returns snowflake ids unchanged', async () => {
202
- const api = mockApi({});
203
- const svc = make(api);
204
- expect(await Effect.runPromise(svc.resolveNoteId('123456789012345'))).toBe('123456789012345');
205
- });
206
- it('resolves numeric nid through /notes/nid/:nid envelope', async () => {
207
- const api = mockApi({
208
- '/notes/nid/42': { data: { id: 'note-1', nid: 42 } },
209
- });
210
- const svc = make(api);
211
- expect(await Effect.runPromise(svc.resolveNoteId('42'))).toBe('note-1');
212
- });
213
- it('accepts the flat envelope shape', async () => {
214
- const api = mockApi({
215
- '/notes/nid/7': { id: 'note-flat' },
216
- });
217
- const svc = make(api);
218
- expect(await Effect.runPromise(svc.resolveNoteId('7'))).toBe('note-flat');
219
- });
220
- it('rejects non-snowflake non-numeric input with ValidationFailed', async () => {
221
- const api = mockApi({});
222
- const svc = make(api);
223
- const exit = await Effect.runPromiseExit(svc.resolveNoteId('hello-world'));
224
- expect(exit._tag).toBe('Failure');
225
- if (exit._tag === 'Failure') {
226
- const err = extractError(exit.cause);
227
- expect(err?._tag).toBe('ValidationFailed');
228
- expect(err.message).toMatch(/invalid note reference: hello-world/);
229
- }
230
- });
231
- it('fails ResourceNotFound when nid lookup returns no id', async () => {
232
- const api = mockApi({
233
- '/notes/nid/99': { data: {} },
234
- });
235
- const svc = make(api);
236
- const exit = await Effect.runPromiseExit(svc.resolveNoteId('99'));
237
- expect(exit._tag).toBe('Failure');
238
- if (exit._tag === 'Failure') {
239
- expect(extractError(exit.cause)?._tag).toBe('ResourceNotFound');
240
- }
241
- });
242
- });
243
- describe('resolveCategoryId (direct /categories/:slug envelope)', () => {
244
- it('returns snowflake ids unchanged', async () => {
245
- const api = mockApi({});
246
- const svc = make(api);
247
- expect(await Effect.runPromise(svc.resolveCategoryId('123456789012345'))).toBe('123456789012345');
248
- });
249
- it('unwraps the double envelope', async () => {
250
- const api = mockApi({
251
- '/categories/blog': { data: { id: 'cat-1', name: 'Blog' } },
252
- });
253
- const svc = make(api);
254
- expect(await Effect.runPromise(svc.resolveCategoryId('blog'))).toBe('cat-1');
255
- });
256
- it('percent-encodes slug characters before hitting the API', async () => {
257
- const api = mockApi({
258
- '/categories/hello%20world': { data: { id: 'cat-2' } },
259
- });
260
- const svc = make(api);
261
- expect(await Effect.runPromise(svc.resolveCategoryId('hello world'))).toBe('cat-2');
262
- });
263
- it('fails ResourceNotFound when envelope has no id', async () => {
264
- const api = mockApi({
265
- '/categories/missing': { data: {} },
266
- });
267
- const svc = make(api);
268
- const exit = await Effect.runPromiseExit(svc.resolveCategoryId('missing'));
269
- expect(exit._tag).toBe('Failure');
270
- if (exit._tag === 'Failure') {
271
- const err = extractError(exit.cause);
272
- expect(err?._tag).toBe('ResourceNotFound');
273
- expect(err.message).toMatch(/category not found: missing/);
274
- }
275
- });
276
- });
277
- // ---------------------------------------------------------------------------
278
- // Layer wiring: Default Resolver layer composes from Api
279
- // ---------------------------------------------------------------------------
280
- describe('Resolver tag layer wiring', () => {
281
- it('composes via Layer with an ambient Api service', async () => {
282
- const api = mockApi({
283
- '/categories': { data: [{ id: 'cat-1', slug: 'blog' }] },
284
- });
285
- const program = Effect.gen(function* () {
286
- const r = yield* Resolver;
287
- return yield* r.resolveCategory('blog');
288
- });
289
- const apiLayer = Layer.succeed(Api, api);
290
- const out = await Effect.runPromise(program.pipe(Effect.provide(Resolver.Default), Effect.provide(apiLayer)));
291
- expect(out).toBe('cat-1');
292
- });
293
- it('layer(api) helper exposes Resolver service directly', async () => {
294
- const api = mockApi({
295
- '/categories': { data: [{ id: 'cat-1', slug: 'blog' }] },
296
- });
297
- const program = Effect.flatMap(Resolver, (r) => r.resolveCategory('blog'));
298
- const out = await Effect.runPromise(program.pipe(Effect.provide(resolverLayer(api))));
299
- expect(out).toBe('cat-1');
300
- });
301
- });
302
- function extractError(cause) {
303
- const seen = new Set();
304
- const visit = (node) => {
305
- if (!node || typeof node !== 'object' || seen.has(node))
306
- return undefined;
307
- seen.add(node);
308
- const obj = node;
309
- if (typeof obj._tag === 'string' && obj._tag !== 'Die' && obj._tag !== 'Fail' && obj._tag !== 'Sequential' && obj._tag !== 'Parallel' && obj._tag !== 'Interrupt' && obj._tag !== 'Empty' && obj._tag !== 'Annotated') {
310
- return obj;
311
- }
312
- for (const v of Object.values(obj)) {
313
- const t = visit(v);
314
- if (t)
315
- return t;
316
- }
317
- return undefined;
318
- };
319
- return visit(cause);
320
- }
@@ -1 +0,0 @@
1
- export {};
@@ -1,261 +0,0 @@
1
- import { Effect, Exit, Layer } from 'effect';
2
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
3
- import { Skill } from '../../src/services/Skill';
4
- import { makeMemFs, TestFsLive, TestPathLive } from '../helper/test-fs';
5
- const CLI_DIR = '/test/cli-skills';
6
- const HAKLEX_DIR = '/test/haklex-skills';
7
- const chapter = (slug, title, description, order, body) => `---\nslug: ${slug}\ntitle: ${title}\ndescription: ${description}\norder: ${order}\n---\n\n${body}\n`;
8
- const makeLayer = (seed) => {
9
- const mem = makeMemFs();
10
- seed(mem);
11
- const fsLayer = TestFsLive(mem);
12
- const baseLayer = Layer.merge(fsLayer, TestPathLive);
13
- const skillLayer = Skill.Default.pipe(Layer.provide(baseLayer));
14
- return Layer.mergeAll(baseLayer, skillLayer);
15
- };
16
- const tagOf = (cause) => {
17
- const err = cause?.error ?? cause?.failure ?? cause;
18
- return err?._tag ?? err?.error?._tag ?? err?.failure?._tag;
19
- };
20
- beforeEach(() => {
21
- process.env.MXS_SKILL_CLI_DIR = CLI_DIR;
22
- process.env.MXS_SKILL_HAKLEX_DIR = HAKLEX_DIR;
23
- });
24
- afterEach(() => {
25
- delete process.env.MXS_SKILL_CLI_DIR;
26
- delete process.env.MXS_SKILL_HAKLEX_DIR;
27
- });
28
- describe('Skill.list', () => {
29
- it('returns chapters sorted by order, with cli + haklex sources merged', async () => {
30
- const layer = makeLayer((mem) => {
31
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
32
- mem.nodes.set(HAKLEX_DIR, { type: 'dir', mode: 0o755 });
33
- mem.nodes.set(`${HAKLEX_DIR}/references`, { type: 'dir', mode: 0o755 });
34
- mem.nodes.set(`${CLI_DIR}/overview.md`, {
35
- type: 'file',
36
- data: chapter('overview', 'Overview', 'desc-0', 0, 'body 0'),
37
- mode: 0o644,
38
- });
39
- mem.nodes.set(`${CLI_DIR}/safety.md`, {
40
- type: 'file',
41
- data: chapter('safety', 'Safety', 'desc-60', 60, 'body 60'),
42
- mode: 0o644,
43
- });
44
- mem.nodes.set(`${HAKLEX_DIR}/SKILL.md`, {
45
- type: 'file',
46
- data: `---\nname: litexml-authoring\ndescription: haklex overview\n---\n\nliteXML body\n`,
47
- mode: 0o644,
48
- });
49
- mem.nodes.set(`${HAKLEX_DIR}/references/cli.md`, {
50
- type: 'file',
51
- data: `# cli reference\n\nbody\n`,
52
- mode: 0o644,
53
- });
54
- });
55
- const result = await Effect.runPromise(Effect.gen(function* () {
56
- const skill = yield* Skill;
57
- return yield* skill.list;
58
- }).pipe(Effect.provide(layer)));
59
- expect(result.map((c) => c.slug)).toEqual([
60
- 'overview',
61
- 'safety',
62
- 'litexml',
63
- 'litexml-cli',
64
- ]);
65
- expect(result.find((c) => c.slug === 'litexml')?.source).toBe('haklex');
66
- expect(result.find((c) => c.slug === 'litexml-cli')?.source).toBe('haklex');
67
- expect(result[0].source).toBe('cli');
68
- });
69
- it('fails with SkillCorpusEmpty when both sources are empty', async () => {
70
- const layer = makeLayer(() => { });
71
- const exit = await Effect.runPromiseExit(Effect.gen(function* () {
72
- const skill = yield* Skill;
73
- return yield* skill.list;
74
- }).pipe(Effect.provide(layer)));
75
- expect(Exit.isFailure(exit)).toBe(true);
76
- if (Exit.isFailure(exit)) {
77
- expect(tagOf(exit.cause)).toBe('SkillCorpusEmpty');
78
- }
79
- });
80
- });
81
- describe('Skill.get', () => {
82
- it('fetches a chapter by slug', async () => {
83
- const layer = makeLayer((mem) => {
84
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
85
- mem.nodes.set(`${CLI_DIR}/overview.md`, {
86
- type: 'file',
87
- data: chapter('overview', 'Overview', 'desc', 0, 'body'),
88
- mode: 0o644,
89
- });
90
- });
91
- const result = await Effect.runPromise(Effect.gen(function* () {
92
- const skill = yield* Skill;
93
- return yield* skill.get('overview');
94
- }).pipe(Effect.provide(layer)));
95
- expect(result.title).toBe('Overview');
96
- expect(result.body.trim()).toBe('body');
97
- });
98
- it('fails with ChapterNotFound when slug is missing', async () => {
99
- const layer = makeLayer((mem) => {
100
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
101
- mem.nodes.set(`${CLI_DIR}/overview.md`, {
102
- type: 'file',
103
- data: chapter('overview', 'Overview', 'desc', 0, 'body'),
104
- mode: 0o644,
105
- });
106
- });
107
- const exit = await Effect.runPromiseExit(Effect.gen(function* () {
108
- const skill = yield* Skill;
109
- return yield* skill.get('nonexistent');
110
- }).pipe(Effect.provide(layer)));
111
- expect(Exit.isFailure(exit)).toBe(true);
112
- if (Exit.isFailure(exit)) {
113
- expect(tagOf(exit.cause)).toBe('ChapterNotFound');
114
- }
115
- });
116
- it('hints at haklex upgrade when missing slug starts with litexml', async () => {
117
- const layer = makeLayer((mem) => {
118
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
119
- mem.nodes.set(`${CLI_DIR}/overview.md`, {
120
- type: 'file',
121
- data: chapter('overview', 'Overview', 'desc', 0, 'body'),
122
- mode: 0o644,
123
- });
124
- });
125
- const exit = await Effect.runPromiseExit(Effect.gen(function* () {
126
- const skill = yield* Skill;
127
- return yield* skill.get('litexml');
128
- }).pipe(Effect.provide(layer)));
129
- expect(Exit.isFailure(exit)).toBe(true);
130
- if (Exit.isFailure(exit)) {
131
- const err = exit.cause.error ?? exit.cause.failure;
132
- expect(err?.hint).toMatch(/haklex/);
133
- }
134
- });
135
- });
136
- describe('Skill.search', () => {
137
- it('returns chapters ranked by match, with snippets', async () => {
138
- const layer = makeLayer((mem) => {
139
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
140
- mem.nodes.set(`${CLI_DIR}/a.md`, {
141
- type: 'file',
142
- data: chapter('a', 'Alpha dryrun', 'd', 0, 'first dryrun appears here\nand again dryrun in body'),
143
- mode: 0o644,
144
- });
145
- mem.nodes.set(`${CLI_DIR}/b.md`, {
146
- type: 'file',
147
- data: chapter('b', 'Beta', 'all about dryrun', 1, 'no body match'),
148
- mode: 0o644,
149
- });
150
- mem.nodes.set(`${CLI_DIR}/c.md`, {
151
- type: 'file',
152
- data: chapter('c', 'Gamma', 'd', 2, 'totally unrelated content'),
153
- mode: 0o644,
154
- });
155
- });
156
- const hits = await Effect.runPromise(Effect.gen(function* () {
157
- const skill = yield* Skill;
158
- return yield* skill.search('dryrun');
159
- }).pipe(Effect.provide(layer)));
160
- expect(hits.length).toBe(2);
161
- expect(hits[0].slug).toBe('a');
162
- expect(hits[0].snippets.length).toBeGreaterThanOrEqual(2);
163
- expect(hits[1].slug).toBe('b');
164
- });
165
- it('matches a multi-word AND query across hyphen-joined tokens', async () => {
166
- const layer = makeLayer((mem) => {
167
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
168
- mem.nodes.set(`${CLI_DIR}/a.md`, {
169
- type: 'file',
170
- data: chapter('a', 'AI Authoring', 'AI involvement disclosure', 0, 'Fully AI-generated bodies should declare aiGen 2.'),
171
- mode: 0o644,
172
- });
173
- mem.nodes.set(`${CLI_DIR}/b.md`, {
174
- type: 'file',
175
- data: chapter('b', 'Other', 'unrelated', 1, 'only ai here, no second token'),
176
- mode: 0o644,
177
- });
178
- });
179
- const hits = await Effect.runPromise(Effect.gen(function* () {
180
- const skill = yield* Skill;
181
- return yield* skill.search('ai generated');
182
- }).pipe(Effect.provide(layer)));
183
- expect(hits.map((h) => h.slug)).toEqual(['a']);
184
- expect(hits[0].snippets.length).toBeGreaterThan(0);
185
- });
186
- it('matches a prefix query (aigen → aiGen)', async () => {
187
- const layer = makeLayer((mem) => {
188
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
189
- mem.nodes.set(`${CLI_DIR}/a.md`, {
190
- type: 'file',
191
- data: chapter('a', 'Authoring', 'meta presets', 0, 'set meta.aiGen to 2 for full AI'),
192
- mode: 0o644,
193
- });
194
- });
195
- const hits = await Effect.runPromise(Effect.gen(function* () {
196
- const skill = yield* Skill;
197
- return yield* skill.search('aigen');
198
- }).pipe(Effect.provide(layer)));
199
- expect(hits.length).toBe(1);
200
- expect(hits[0].slug).toBe('a');
201
- expect(hits[0].snippets[0]).toMatch(/aiGen/);
202
- });
203
- it('returns empty array for blank keyword', async () => {
204
- const layer = makeLayer((mem) => {
205
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
206
- mem.nodes.set(`${CLI_DIR}/a.md`, {
207
- type: 'file',
208
- data: chapter('a', 'A', 'd', 0, 'body'),
209
- mode: 0o644,
210
- });
211
- });
212
- const hits = await Effect.runPromise(Effect.gen(function* () {
213
- const skill = yield* Skill;
214
- return yield* skill.search(' ');
215
- }).pipe(Effect.provide(layer)));
216
- expect(hits).toEqual([]);
217
- });
218
- });
219
- describe('Skill frontmatter parser', () => {
220
- it('fails when required field is missing', async () => {
221
- const layer = makeLayer((mem) => {
222
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
223
- mem.nodes.set(`${CLI_DIR}/bad.md`, {
224
- type: 'file',
225
- data: `---\nslug: bad\ntitle: B\n---\n\nbody\n`,
226
- mode: 0o644,
227
- });
228
- });
229
- const exit = await Effect.runPromiseExit(Effect.gen(function* () {
230
- const skill = yield* Skill;
231
- return yield* skill.list;
232
- }).pipe(Effect.provide(layer)));
233
- expect(Exit.isFailure(exit)).toBe(true);
234
- if (Exit.isFailure(exit)) {
235
- expect(tagOf(exit.cause)).toBe('SkillCorpusEmpty');
236
- }
237
- });
238
- it('fails when two cli chapters declare the same slug', async () => {
239
- const layer = makeLayer((mem) => {
240
- mem.nodes.set(CLI_DIR, { type: 'dir', mode: 0o755 });
241
- mem.nodes.set(`${CLI_DIR}/a.md`, {
242
- type: 'file',
243
- data: chapter('dup', 'A', 'd', 0, 'a'),
244
- mode: 0o644,
245
- });
246
- mem.nodes.set(`${CLI_DIR}/b.md`, {
247
- type: 'file',
248
- data: chapter('dup', 'B', 'd', 1, 'b'),
249
- mode: 0o644,
250
- });
251
- });
252
- const exit = await Effect.runPromiseExit(Effect.gen(function* () {
253
- const skill = yield* Skill;
254
- return yield* skill.list;
255
- }).pipe(Effect.provide(layer)));
256
- expect(Exit.isFailure(exit)).toBe(true);
257
- if (Exit.isFailure(exit)) {
258
- expect(tagOf(exit.cause)).toBe('SkillCorpusEmpty');
259
- }
260
- });
261
- });
@@ -1 +0,0 @@
1
- export {};
@@ -1,73 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { Effect } from 'effect';
3
- import { beforeEach, describe, expect, it, vi } from 'vitest';
4
- const spawnMock = vi.hoisted(() => vi.fn());
5
- vi.mock('node:child_process', () => ({ spawn: spawnMock }));
6
- import { make } from '../../src/services/UpdateNotifier';
7
- const makeFetchOK = () => async () => ({
8
- ok: true,
9
- status: 200,
10
- headers: { get: () => null },
11
- async json() {
12
- return { version: '9.9.9', engines: { node: '>=22' } };
13
- },
14
- async text() {
15
- return '';
16
- },
17
- });
18
- const makeChild = () => {
19
- const child = new EventEmitter();
20
- child.stderr = new EventEmitter();
21
- return child;
22
- };
23
- describe('UpdateNotifier default spawn adapter', () => {
24
- beforeEach(() => {
25
- spawnMock.mockReset();
26
- });
27
- it('uses child_process.spawn when no spawn override is supplied', async () => {
28
- spawnMock.mockImplementation(() => {
29
- const child = makeChild();
30
- queueMicrotask(() => {
31
- child.stderr.emit('data', Buffer.from('npm notice\n'));
32
- child.emit('exit', 0);
33
- });
34
- return child;
35
- });
36
- const stderrSpy = vi
37
- .spyOn(process.stderr, 'write')
38
- .mockImplementation(() => true);
39
- try {
40
- const svc = make({ fetchImpl: makeFetchOK() });
41
- const res = await Effect.runPromise(svc.runUpdate({
42
- currentVersion: '0.2.0',
43
- entrypoint: '/usr/local/lib/node_modules/@mx-space/cli/dist/bin/mxs.mjs',
44
- yes: true,
45
- json: true,
46
- }));
47
- expect(res.upgraded).toBe(true);
48
- expect(spawnMock).toHaveBeenCalledWith('npm', ['install', '-g', '@mx-space/cli@latest'], expect.objectContaining({
49
- stdio: ['ignore', 'inherit', 'pipe'],
50
- }));
51
- }
52
- finally {
53
- stderrSpy.mockRestore();
54
- }
55
- });
56
- it('turns child spawn errors into a failed update result', async () => {
57
- spawnMock.mockImplementation(() => {
58
- const child = makeChild();
59
- queueMicrotask(() => {
60
- child.emit('error', new Error('spawn denied'));
61
- });
62
- return child;
63
- });
64
- const svc = make({ fetchImpl: makeFetchOK() });
65
- const exit = await Effect.runPromiseExit(svc.runUpdate({
66
- currentVersion: '0.2.0',
67
- entrypoint: '/usr/local/lib/node_modules/@mx-space/cli/dist/bin/mxs.mjs',
68
- yes: true,
69
- json: true,
70
- }));
71
- expect(exit._tag).toBe('Failure');
72
- });
73
- });
@@ -1 +0,0 @@
1
- export {};