@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.
- package/README.md +36 -12
- package/dist/{Lexical.dev-CtGmYDoh.mjs → Lexical.dev-BSvx45_E.mjs} +350 -402
- package/dist/{Lexical.node-8sRFmq2X.mjs → Lexical.node-kAh5GM2n.mjs} +2 -2
- package/dist/{Lexical.prod-D-VfeKDz.mjs → Lexical.prod-Bqwgb3ez.mjs} +1757 -1785
- package/dist/{LexicalClipboard.dev-CzQ15z6E.mjs → LexicalClipboard.dev-BWU3KXIa.mjs} +19 -15
- package/dist/{LexicalClipboard.node-D4gMGws6.mjs → LexicalClipboard.node-BygAdNdF.mjs} +2 -2
- package/dist/{LexicalClipboard.prod-CltkQpzS.mjs → LexicalClipboard.prod-BtMuKNyT.mjs} +11 -11
- package/dist/{LexicalCodeCore.dev-DkYBZRGB.mjs → LexicalCodeCore.dev-CD2xgvDs.mjs} +95 -89
- package/dist/{LexicalCodeCore.prod-COc3_QL8.mjs → LexicalCodeCore.prod-Bl6FFMc7.mjs} +146 -158
- package/dist/{LexicalDragon.dev-Dv5_WUae.mjs → LexicalDragon.dev-BwdYhm4K.mjs} +3 -3
- package/dist/{LexicalDragon.node-DgjrmWkd.mjs → LexicalDragon.node-CpJhkCVV.mjs} +2 -2
- package/dist/{LexicalDragon.prod-DnpbDe-_.mjs → LexicalDragon.prod-CvXmWwo1.mjs} +3 -3
- package/dist/{LexicalExtension.dev-JMH_6-OZ.mjs → LexicalExtension.dev-LcRLXI5Z.mjs} +33 -30
- package/dist/{LexicalExtension.node-BUozzx4t.mjs → LexicalExtension.node-BwJt2LXV.mjs} +2 -2
- package/dist/{LexicalExtension.prod-UiyDgmou.mjs → LexicalExtension.prod-lg8_33-H.mjs} +87 -93
- package/dist/{LexicalHeadless.dev-BfLGciiX.mjs → LexicalHeadless.dev-BeUbKBes.mjs} +2 -2
- package/dist/{LexicalHeadless.prod-CWF7edmQ.mjs → LexicalHeadless.prod-4gbIA8HM.mjs} +2 -2
- package/dist/{LexicalHtml.dev-D5EF5PGW.mjs → LexicalHtml.dev-BLdZWTCJ.mjs} +22 -16
- package/dist/{LexicalHtml.node-BYbzHNVe.mjs → LexicalHtml.node-BeuJMvvt.mjs} +2 -2
- package/dist/{LexicalHtml.prod-D_FfkvVD.mjs → LexicalHtml.prod-CHUyCocN.mjs} +6 -6
- package/dist/{LexicalLink.dev-D3Pgh6ik.mjs → LexicalLink.dev-DgsFRqw0.mjs} +41 -58
- package/dist/{LexicalLink.prod-XZoAYVYD.mjs → LexicalLink.prod-CkXkeKY2.mjs} +115 -138
- package/dist/{LexicalList.dev-B5d3ObhB.mjs → LexicalList.dev-OOms3kQi.mjs} +15 -47
- package/dist/{LexicalList.prod-OQDpVAEb.mjs → LexicalList.prod-DzMBeqHn.mjs} +208 -224
- package/dist/{LexicalMarkdown.dev-BkM8G3DG.mjs → LexicalMarkdown.dev-DJLKbZtD.mjs} +42 -30
- package/dist/{LexicalMarkdown.prod-DcVXCex6.mjs → LexicalMarkdown.prod-Cp21kDCU.mjs} +12 -8
- package/dist/{LexicalRichText.dev-DppD7IrA.mjs → LexicalRichText.dev-0rkAGjUf.mjs} +84 -86
- package/dist/{LexicalRichText.node-CPSn7dkg.mjs → LexicalRichText.node-Cd-BySPE.mjs} +8 -8
- package/dist/{LexicalRichText.prod-h7JPxFNp.mjs → LexicalRichText.prod-DTQiEr8C.mjs} +96 -100
- package/dist/{LexicalSelection.dev-CD0SLbxP.mjs → LexicalSelection.dev-Bi0VlUEv.mjs} +29 -25
- package/dist/{LexicalSelection.node-CGlJgUlZ.mjs → LexicalSelection.node-t2U46EF_.mjs} +2 -2
- package/dist/{LexicalSelection.prod-DbVZN5AV.mjs → LexicalSelection.prod-CrFG111g.mjs} +3 -3
- package/dist/{LexicalTable.dev-D0HU14UV.mjs → LexicalTable.dev-D-sFhO-o.mjs} +288 -154
- package/dist/{LexicalTable.prod-BcPNSrxP.mjs → LexicalTable.prod-DwYaa_dN.mjs} +689 -632
- package/dist/{LexicalUtils.dev-iKy_TrRT.mjs → LexicalUtils.dev-Q2q3-UDM.mjs} +9 -6
- package/dist/{LexicalUtils.node-CIgMS8cG.mjs → LexicalUtils.node-Dl7OvqJV.mjs} +2 -2
- package/dist/{LexicalUtils.prod-DIAsKJzu.mjs → LexicalUtils.prod-CBnq_iEV.mjs} +8 -7
- package/dist/bin/mxs.mjs +1 -1
- package/dist/esm-CNZ7kdTg.mjs +2 -0
- package/dist/{esm-CwXl1N0a.mjs → esm-ZXjJmLEC.mjs} +422 -391
- package/dist/index.d.mts +16 -16
- package/dist/index.mjs +1 -1
- package/dist/{mxs-iW9DgqSZ.mjs → mxs-DC9zR3f2.mjs} +2203 -2782
- package/dist/{rolldown-runtime-JspESFgx.mjs → rolldown-runtime-B4iAMlE-.mjs} +1 -1
- package/dist/src/bin/mxs.d.ts +2 -0
- package/dist/src/bin/mxs.js +310 -0
- package/dist/src/cli/ai/_poll.d.ts +12 -0
- package/dist/src/cli/ai/_poll.js +38 -0
- package/dist/src/cli/ai/_resolve.d.ts +8 -0
- package/dist/src/cli/ai/_resolve.js +27 -0
- package/dist/src/cli/ai/index.d.ts +127 -0
- package/dist/src/cli/ai/index.js +46 -0
- package/dist/src/cli/ai/insights/by-article.d.ts +10 -0
- package/dist/src/cli/ai/insights/by-article.js +21 -0
- package/dist/src/cli/ai/insights/delete.d.ts +7 -0
- package/dist/src/cli/ai/insights/delete.js +18 -0
- package/dist/src/cli/ai/insights/edit.d.ts +8 -0
- package/dist/src/cli/ai/insights/edit.js +54 -0
- package/dist/src/cli/ai/insights/get.d.ts +6 -0
- package/dist/src/cli/ai/insights/get.js +11 -0
- package/dist/src/cli/ai/insights/index.d.ts +30 -0
- package/dist/src/cli/ai/insights/index.js +17 -0
- package/dist/src/cli/ai/insights/list.d.ts +10 -0
- package/dist/src/cli/ai/insights/list.js +20 -0
- package/dist/src/cli/ai/insights/refresh.d.ts +10 -0
- package/dist/src/cli/ai/insights/refresh.js +25 -0
- package/dist/src/cli/ai/insights/translate.d.ts +10 -0
- package/dist/src/cli/ai/insights/translate.js +25 -0
- package/dist/src/cli/ai/overview/by-article.d.ts +7 -0
- package/dist/src/cli/ai/overview/by-article.js +15 -0
- package/dist/src/cli/ai/overview/index.d.ts +11 -0
- package/dist/src/cli/ai/overview/index.js +4 -0
- package/dist/src/cli/ai/overview/list.d.ts +10 -0
- package/dist/src/cli/ai/overview/list.js +20 -0
- package/dist/src/cli/ai/summary/by-article.d.ts +10 -0
- package/dist/src/cli/ai/summary/by-article.js +21 -0
- package/dist/src/cli/ai/summary/delete.d.ts +7 -0
- package/dist/src/cli/ai/summary/delete.js +18 -0
- package/dist/src/cli/ai/summary/edit.d.ts +8 -0
- package/dist/src/cli/ai/summary/edit.js +54 -0
- package/dist/src/cli/ai/summary/get.d.ts +6 -0
- package/dist/src/cli/ai/summary/get.js +11 -0
- package/dist/src/cli/ai/summary/index.d.ts +30 -0
- package/dist/src/cli/ai/summary/index.js +9 -0
- package/dist/src/cli/ai/summary/list.d.ts +10 -0
- package/dist/src/cli/ai/summary/list.js +20 -0
- package/dist/src/cli/ai/summary/regen.d.ts +10 -0
- package/dist/src/cli/ai/summary/regen.js +25 -0
- package/dist/src/cli/ai/summary/translate.d.ts +10 -0
- package/dist/src/cli/ai/summary/translate.js +25 -0
- package/dist/src/cli/ai/translate/by-article.d.ts +9 -0
- package/dist/src/cli/ai/translate/by-article.js +19 -0
- package/dist/src/cli/ai/translate/delete.d.ts +7 -0
- package/dist/src/cli/ai/translate/delete.js +18 -0
- package/dist/src/cli/ai/translate/edit.d.ts +8 -0
- package/dist/src/cli/ai/translate/edit.js +97 -0
- package/dist/src/cli/ai/translate/entries/delete.d.ts +7 -0
- package/dist/src/cli/ai/translate/entries/delete.js +18 -0
- package/dist/src/cli/ai/translate/entries/edit.d.ts +8 -0
- package/dist/src/cli/ai/translate/entries/edit.js +73 -0
- package/dist/src/cli/ai/translate/entries/generate.d.ts +7 -0
- package/dist/src/cli/ai/translate/entries/generate.js +15 -0
- package/dist/src/cli/ai/translate/entries/index.d.ts +17 -0
- package/dist/src/cli/ai/translate/entries/index.js +6 -0
- package/dist/src/cli/ai/translate/entries/list.d.ts +10 -0
- package/dist/src/cli/ai/translate/entries/list.js +20 -0
- package/dist/src/cli/ai/translate/get.d.ts +6 -0
- package/dist/src/cli/ai/translate/get.js +11 -0
- package/dist/src/cli/ai/translate/index.d.ts +40 -0
- package/dist/src/cli/ai/translate/index.js +19 -0
- package/dist/src/cli/ai/translate/languages.d.ts +7 -0
- package/dist/src/cli/ai/translate/languages.js +15 -0
- package/dist/src/cli/ai/translate/list.d.ts +9 -0
- package/dist/src/cli/ai/translate/list.js +19 -0
- package/dist/src/cli/ai/translate/run.d.ts +10 -0
- package/dist/src/cli/ai/translate/run.js +31 -0
- package/dist/src/cli/ai/tts/by-article.d.ts +7 -0
- package/dist/src/cli/ai/tts/by-article.js +15 -0
- package/dist/src/cli/ai/tts/delete.d.ts +7 -0
- package/dist/src/cli/ai/tts/delete.js +18 -0
- package/dist/src/cli/ai/tts/index.d.ts +22 -0
- package/dist/src/cli/ai/tts/index.js +7 -0
- package/dist/src/cli/ai/tts/list.d.ts +10 -0
- package/dist/src/cli/ai/tts/list.js +20 -0
- package/dist/src/cli/ai/tts/run.d.ts +10 -0
- package/dist/src/cli/ai/tts/run.js +25 -0
- package/dist/src/cli/ai/tts/voices.d.ts +7 -0
- package/dist/src/cli/ai/tts/voices.js +12 -0
- package/dist/src/cli/ai/views.d.ts +3 -0
- package/dist/src/cli/ai/views.js +45 -0
- package/dist/src/cli/auth/index.d.ts +6 -0
- package/dist/src/cli/auth/index.js +22 -0
- package/dist/src/cli/auth/login.d.ts +11 -0
- package/dist/src/cli/auth/login.js +168 -0
- package/dist/src/cli/auth/logout.d.ts +6 -0
- package/dist/src/cli/auth/logout.js +21 -0
- package/dist/src/cli/auth/status.d.ts +4 -0
- package/dist/src/cli/auth/status.js +31 -0
- package/dist/src/cli/auth/view.d.ts +25 -0
- package/dist/src/cli/auth/view.js +46 -0
- package/dist/src/cli/auth/whoami.d.ts +7 -0
- package/dist/src/cli/auth/whoami.js +44 -0
- package/dist/src/cli/category/create.d.ts +10 -0
- package/dist/src/cli/category/create.js +24 -0
- package/dist/src/cli/category/delete.d.ts +8 -0
- package/dist/src/cli/category/delete.js +21 -0
- package/dist/src/cli/category/get.d.ts +6 -0
- package/dist/src/cli/category/get.js +11 -0
- package/dist/src/cli/category/index.d.ts +20 -0
- package/dist/src/cli/category/index.js +41 -0
- package/dist/src/cli/category/list.d.ts +4 -0
- package/dist/src/cli/category/list.js +10 -0
- package/dist/src/cli/category/update.d.ts +12 -0
- package/dist/src/cli/category/update.js +34 -0
- package/dist/src/cli/comment/_flags.d.ts +28 -0
- package/dist/src/cli/comment/_flags.js +48 -0
- package/dist/src/cli/comment/approve.d.ts +9 -0
- package/dist/src/cli/comment/approve.js +23 -0
- package/dist/src/cli/comment/delete.d.ts +9 -0
- package/dist/src/cli/comment/delete.js +24 -0
- package/dist/src/cli/comment/get.d.ts +6 -0
- package/dist/src/cli/comment/get.js +12 -0
- package/dist/src/cli/comment/index.d.ts +34 -0
- package/dist/src/cli/comment/index.js +53 -0
- package/dist/src/cli/comment/list.d.ts +9 -0
- package/dist/src/cli/comment/list.js +20 -0
- package/dist/src/cli/comment/reject.d.ts +9 -0
- package/dist/src/cli/comment/reject.js +23 -0
- package/dist/src/cli/comment/reply.d.ts +9 -0
- package/dist/src/cli/comment/reply.js +31 -0
- package/dist/src/cli/comment/unread.d.ts +7 -0
- package/dist/src/cli/comment/unread.js +21 -0
- package/dist/src/cli/comment/view.d.ts +3 -0
- package/dist/src/cli/comment/view.js +197 -0
- package/dist/src/cli/config/edit.d.ts +5 -0
- package/dist/src/cli/config/edit.js +36 -0
- package/dist/src/cli/config/get.d.ts +6 -0
- package/dist/src/cli/config/get.js +11 -0
- package/dist/src/cli/config/index.d.ts +10 -0
- package/dist/src/cli/config/index.js +22 -0
- package/dist/src/cli/config/list.d.ts +4 -0
- package/dist/src/cli/config/list.js +10 -0
- package/dist/src/cli/config/set.d.ts +9 -0
- package/dist/src/cli/config/set.js +48 -0
- package/dist/src/cli/draft/_shared.d.ts +27 -0
- package/dist/src/cli/draft/_shared.js +85 -0
- package/dist/src/cli/draft/create.d.ts +21 -0
- package/dist/src/cli/draft/create.js +34 -0
- package/dist/src/cli/draft/delete.d.ts +7 -0
- package/dist/src/cli/draft/delete.js +20 -0
- package/dist/src/cli/draft/get.d.ts +6 -0
- package/dist/src/cli/draft/get.js +11 -0
- package/dist/src/cli/draft/index.d.ts +54 -0
- package/dist/src/cli/draft/index.js +42 -0
- package/dist/src/cli/draft/list.d.ts +11 -0
- package/dist/src/cli/draft/list.js +23 -0
- package/dist/src/cli/draft/publish.d.ts +8 -0
- package/dist/src/cli/draft/publish.js +64 -0
- package/dist/src/cli/draft/update.d.ts +22 -0
- package/dist/src/cli/draft/update.js +29 -0
- package/dist/src/cli/file/_shared.d.ts +6 -0
- package/dist/src/cli/file/_shared.js +5 -0
- package/dist/src/cli/file/delete.d.ts +8 -0
- package/dist/src/cli/file/delete.js +21 -0
- package/dist/src/cli/file/index.d.ts +19 -0
- package/dist/src/cli/file/index.js +33 -0
- package/dist/src/cli/file/list.d.ts +6 -0
- package/dist/src/cli/file/list.js +11 -0
- package/dist/src/cli/file/rename.d.ts +8 -0
- package/dist/src/cli/file/rename.js +16 -0
- package/dist/src/cli/file/upload.d.ts +9 -0
- package/dist/src/cli/file/upload.js +32 -0
- package/dist/src/cli/help/index.d.ts +62 -0
- package/dist/src/cli/help/index.js +276 -0
- package/dist/src/cli/help/registry.d.ts +28 -0
- package/dist/src/cli/help/registry.js +29 -0
- package/dist/src/cli/note/_flags.d.ts +66 -0
- package/dist/src/cli/note/_flags.js +73 -0
- package/dist/src/cli/note/create.d.ts +23 -0
- package/dist/src/cli/note/create.js +25 -0
- package/dist/src/cli/note/delete.d.ts +8 -0
- package/dist/src/cli/note/delete.js +21 -0
- package/dist/src/cli/note/edit.d.ts +28 -0
- package/dist/src/cli/note/edit.js +114 -0
- package/dist/src/cli/note/get.d.ts +6 -0
- package/dist/src/cli/note/get.js +29 -0
- package/dist/src/cli/note/index.d.ts +77 -0
- package/dist/src/cli/note/index.js +63 -0
- package/dist/src/cli/note/list.d.ts +10 -0
- package/dist/src/cli/note/list.js +22 -0
- package/dist/src/cli/note/publish.d.ts +7 -0
- package/dist/src/cli/note/publish.js +17 -0
- package/dist/src/cli/note/unpublish.d.ts +7 -0
- package/dist/src/cli/note/unpublish.js +17 -0
- package/dist/src/cli/note/update.d.ts +25 -0
- package/dist/src/cli/note/update.js +36 -0
- package/dist/src/cli/note/view.d.ts +3 -0
- package/dist/src/cli/note/view.js +162 -0
- package/dist/src/cli/page/create.d.ts +41 -0
- package/dist/src/cli/page/create.js +56 -0
- package/dist/src/cli/page/delete.d.ts +7 -0
- package/dist/src/cli/page/delete.js +37 -0
- package/dist/src/cli/page/edit.d.ts +19 -0
- package/dist/src/cli/page/edit.js +117 -0
- package/dist/src/cli/page/get.d.ts +6 -0
- package/dist/src/cli/page/get.js +16 -0
- package/dist/src/cli/page/index.d.ts +44 -0
- package/dist/src/cli/page/index.js +38 -0
- package/dist/src/cli/page/list.d.ts +4 -0
- package/dist/src/cli/page/list.js +10 -0
- package/dist/src/cli/page/update.d.ts +16 -0
- package/dist/src/cli/page/update.js +48 -0
- package/dist/src/cli/page/view.d.ts +2 -0
- package/dist/src/cli/page/view.js +79 -0
- package/dist/src/cli/post/_flags.d.ts +66 -0
- package/dist/src/cli/post/_flags.js +96 -0
- package/dist/src/cli/post/apply.d.ts +7 -0
- package/dist/src/cli/post/apply.js +70 -0
- package/dist/src/cli/post/create.d.ts +21 -0
- package/dist/src/cli/post/create.js +24 -0
- package/dist/src/cli/post/delete.d.ts +8 -0
- package/dist/src/cli/post/delete.js +21 -0
- package/dist/src/cli/post/edit.d.ts +26 -0
- package/dist/src/cli/post/edit.js +115 -0
- package/dist/src/cli/post/get.d.ts +7 -0
- package/dist/src/cli/post/get.js +15 -0
- package/dist/src/cli/post/index.d.ts +91 -0
- package/dist/src/cli/post/index.js +73 -0
- package/dist/src/cli/post/list.d.ts +10 -0
- package/dist/src/cli/post/list.js +23 -0
- package/dist/src/cli/post/publish.d.ts +7 -0
- package/dist/src/cli/post/publish.js +17 -0
- package/dist/src/cli/post/stage.d.ts +23 -0
- package/dist/src/cli/post/stage.js +55 -0
- package/dist/src/cli/post/unpublish.d.ts +7 -0
- package/dist/src/cli/post/unpublish.js +17 -0
- package/dist/src/cli/post/update.d.ts +23 -0
- package/dist/src/cli/post/update.js +38 -0
- package/dist/src/cli/post/view.d.ts +3 -0
- package/dist/src/cli/post/view.js +150 -0
- package/dist/src/cli/preview/index.d.ts +13 -0
- package/dist/src/cli/preview/index.js +226 -0
- package/dist/src/cli/profile/index.d.ts +14 -0
- package/dist/src/cli/profile/index.js +36 -0
- package/dist/src/cli/profile/ls.d.ts +5 -0
- package/dist/src/cli/profile/ls.js +26 -0
- package/dist/src/cli/profile/mark.d.ts +9 -0
- package/dist/src/cli/profile/mark.js +23 -0
- package/dist/src/cli/profile/rm.d.ts +12 -0
- package/dist/src/cli/profile/rm.js +50 -0
- package/dist/src/cli/profile/show.d.ts +9 -0
- package/dist/src/cli/profile/show.js +40 -0
- package/dist/src/cli/profile/use.d.ts +6 -0
- package/dist/src/cli/profile/use.js +11 -0
- package/dist/src/cli/profile/view.d.ts +8 -0
- package/dist/src/cli/profile/view.js +21 -0
- package/dist/src/cli/project/_flags.d.ts +56 -0
- package/dist/src/cli/project/_flags.js +130 -0
- package/dist/src/cli/project/create.d.ts +17 -0
- package/dist/src/cli/project/create.js +25 -0
- package/dist/src/cli/project/delete.d.ts +8 -0
- package/dist/src/cli/project/delete.js +22 -0
- package/dist/src/cli/project/edit.d.ts +11 -0
- package/dist/src/cli/project/edit.js +61 -0
- package/dist/src/cli/project/get.d.ts +7 -0
- package/dist/src/cli/project/get.js +14 -0
- package/dist/src/cli/project/index.d.ts +43 -0
- package/dist/src/cli/project/index.js +52 -0
- package/dist/src/cli/project/list.d.ts +8 -0
- package/dist/src/cli/project/list.js +19 -0
- package/dist/src/cli/project/update.d.ts +18 -0
- package/dist/src/cli/project/update.js +24 -0
- package/dist/src/cli/project/view-cmd.d.ts +7 -0
- package/dist/src/cli/project/view-cmd.js +15 -0
- package/dist/src/cli/project/view.d.ts +3 -0
- package/dist/src/cli/project/view.js +102 -0
- package/dist/src/cli/render/codehighlight.d.ts +8 -0
- package/dist/src/cli/render/codehighlight.js +264 -0
- package/dist/src/cli/render/envelope.d.ts +7 -0
- package/dist/src/cli/render/envelope.js +23 -0
- package/dist/src/cli/render/frontmatter.d.ts +8 -0
- package/dist/src/cli/render/frontmatter.js +50 -0
- package/dist/src/cli/render/helpers.d.ts +2 -0
- package/dist/src/cli/render/helpers.js +11 -0
- package/dist/src/cli/render/index.d.ts +7 -0
- package/dist/src/cli/render/index.js +10 -0
- package/dist/src/cli/render/lexical/blocks.d.ts +19 -0
- package/dist/src/cli/render/lexical/blocks.js +208 -0
- package/dist/src/cli/render/lexical/code.d.ts +2 -0
- package/dist/src/cli/render/lexical/code.js +22 -0
- package/dist/src/cli/render/lexical/embeds.d.ts +6 -0
- package/dist/src/cli/render/lexical/embeds.js +51 -0
- package/dist/src/cli/render/lexical/index.d.ts +9 -0
- package/dist/src/cli/render/lexical/index.js +25 -0
- package/dist/src/cli/render/lexical/inlines.d.ts +17 -0
- package/dist/src/cli/render/lexical/inlines.js +76 -0
- package/dist/src/cli/render/lexical/parser.d.ts +10 -0
- package/dist/src/cli/render/lexical/parser.js +64 -0
- package/dist/src/cli/render/lexical/walker.d.ts +21 -0
- package/dist/src/cli/render/lexical/walker.js +51 -0
- package/dist/src/cli/render/markdown.d.ts +18 -0
- package/dist/src/cli/render/markdown.js +196 -0
- package/dist/src/cli/render/metadata-block.d.ts +14 -0
- package/dist/src/cli/render/metadata-block.js +50 -0
- package/dist/src/cli/skill/all.d.ts +4 -0
- package/dist/src/cli/skill/all.js +11 -0
- package/dist/src/cli/skill/get.d.ts +6 -0
- package/dist/src/cli/skill/get.js +12 -0
- package/dist/src/cli/skill/index.d.ts +10 -0
- package/dist/src/cli/skill/index.js +34 -0
- package/dist/src/cli/skill/list.d.ts +4 -0
- package/dist/src/cli/skill/list.js +11 -0
- package/dist/src/cli/skill/search.d.ts +6 -0
- package/dist/src/cli/skill/search.js +12 -0
- package/dist/src/cli/skill/views.d.ts +6 -0
- package/dist/src/cli/skill/views.js +90 -0
- package/dist/src/cli/snippet/_flags.d.ts +57 -0
- package/dist/src/cli/snippet/_flags.js +123 -0
- package/dist/src/cli/snippet/_resolve.d.ts +4 -0
- package/dist/src/cli/snippet/_resolve.js +32 -0
- package/dist/src/cli/snippet/_sync.d.ts +5 -0
- package/dist/src/cli/snippet/_sync.js +54 -0
- package/dist/src/cli/snippet/create.d.ts +19 -0
- package/dist/src/cli/snippet/create.js +35 -0
- package/dist/src/cli/snippet/delete.d.ts +8 -0
- package/dist/src/cli/snippet/delete.js +28 -0
- package/dist/src/cli/snippet/edit.d.ts +7 -0
- package/dist/src/cli/snippet/edit.js +29 -0
- package/dist/src/cli/snippet/get.d.ts +6 -0
- package/dist/src/cli/snippet/get.js +12 -0
- package/dist/src/cli/snippet/index.d.ts +43 -0
- package/dist/src/cli/snippet/index.js +58 -0
- package/dist/src/cli/snippet/list.d.ts +9 -0
- package/dist/src/cli/snippet/list.js +20 -0
- package/dist/src/cli/snippet/pull.d.ts +8 -0
- package/dist/src/cli/snippet/pull.js +33 -0
- package/dist/src/cli/snippet/push.d.ts +10 -0
- package/dist/src/cli/snippet/push.js +31 -0
- package/dist/src/cli/snippet/update.d.ts +8 -0
- package/dist/src/cli/snippet/update.js +16 -0
- package/dist/src/cli/topic/create.d.ts +10 -0
- package/dist/src/cli/topic/create.js +24 -0
- package/dist/src/cli/topic/delete.d.ts +7 -0
- package/dist/src/cli/topic/delete.js +37 -0
- package/dist/src/cli/topic/get.d.ts +6 -0
- package/dist/src/cli/topic/get.js +15 -0
- package/dist/src/cli/topic/index.d.ts +20 -0
- package/dist/src/cli/topic/index.js +32 -0
- package/dist/src/cli/topic/list.d.ts +4 -0
- package/dist/src/cli/topic/list.js +10 -0
- package/dist/src/cli/topic/update.d.ts +11 -0
- package/dist/src/cli/topic/update.js +51 -0
- package/dist/src/cli/ui/index.d.ts +24 -0
- package/dist/src/cli/ui/index.js +83 -0
- package/dist/src/cli/update/index.d.ts +10 -0
- package/dist/src/cli/update/index.js +142 -0
- package/dist/src/domain/admin-link.d.ts +12 -0
- package/dist/src/domain/admin-link.js +45 -0
- package/dist/src/domain/content-spec.d.ts +20 -0
- package/dist/src/domain/content-spec.js +78 -0
- package/dist/src/domain/envelope-compat.d.ts +68 -0
- package/dist/src/domain/envelope-compat.js +121 -0
- package/dist/src/domain/envelope.d.ts +34 -0
- package/dist/src/domain/envelope.js +355 -0
- package/dist/src/domain/errors.d.ts +336 -0
- package/dist/src/domain/errors.js +239 -0
- package/dist/src/domain/gate.d.ts +14 -0
- package/dist/src/domain/gate.js +18 -0
- package/dist/src/domain/payload.d.ts +64 -0
- package/dist/src/domain/payload.js +237 -0
- package/dist/src/domain/preflight-guards.d.ts +54 -0
- package/dist/src/domain/preflight-guards.js +130 -0
- package/dist/src/domain/runtime-flags.d.ts +33 -0
- package/dist/src/domain/runtime-flags.js +166 -0
- package/dist/src/domain/schema/api-envelope.d.ts +67 -0
- package/dist/src/domain/schema/api-envelope.js +65 -0
- package/dist/src/domain/schema/category.d.ts +23 -0
- package/dist/src/domain/schema/category.js +19 -0
- package/dist/src/domain/schema/config.d.ts +13 -0
- package/dist/src/domain/schema/config.js +18 -0
- package/dist/src/domain/schema/note.d.ts +76 -0
- package/dist/src/domain/schema/note.js +35 -0
- package/dist/src/domain/schema/page.d.ts +40 -0
- package/dist/src/domain/schema/page.js +22 -0
- package/dist/src/domain/schema/post.d.ts +68 -0
- package/dist/src/domain/schema/post.js +35 -0
- package/dist/src/domain/schema/profile.d.ts +14 -0
- package/dist/src/domain/schema/profile.js +22 -0
- package/dist/src/domain/schema/topic.d.ts +24 -0
- package/dist/src/domain/schema/topic.js +16 -0
- package/dist/src/domain/version.d.ts +15 -0
- package/dist/src/domain/version.js +43 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +8 -0
- package/dist/src/layers/App.d.ts +30 -0
- package/dist/src/layers/App.js +39 -0
- package/dist/src/services/Ai/index.d.ts +13 -0
- package/dist/src/services/Ai/index.js +127 -0
- package/dist/src/services/Ai/overview.d.ts +7 -0
- package/dist/src/services/Ai/overview.js +11 -0
- package/dist/src/services/Ai/resources.d.ts +7 -0
- package/dist/src/services/Ai/resources.js +59 -0
- package/dist/src/services/Ai/shared.d.ts +2 -0
- package/dist/src/services/Ai/shared.js +11 -0
- package/dist/src/services/Ai/tasks.d.ts +8 -0
- package/dist/src/services/Ai/tasks.js +144 -0
- package/dist/src/services/Ai/types.d.ts +130 -0
- package/dist/src/services/Ai/types.js +1 -0
- package/dist/src/services/Api.d.ts +67 -0
- package/dist/src/services/Api.js +348 -0
- package/dist/src/services/Auth.d.ts +101 -0
- package/dist/src/services/Auth.js +402 -0
- package/dist/src/services/Backup.d.ts +8 -0
- package/dist/src/services/Backup.js +4 -0
- package/dist/src/services/Cache.d.ts +8 -0
- package/dist/src/services/Cache.js +4 -0
- package/dist/src/services/Comment.d.ts +48 -0
- package/dist/src/services/Comment.js +102 -0
- package/dist/src/services/Config.d.ts +95 -0
- package/dist/src/services/Config.js +359 -0
- package/dist/src/services/Editor.d.ts +28 -0
- package/dist/src/services/Editor.js +95 -0
- package/dist/src/services/Lexical.d.ts +27 -0
- package/dist/src/services/Lexical.js +56 -0
- package/dist/src/services/Migration.d.ts +31 -0
- package/dist/src/services/Migration.js +177 -0
- package/dist/src/services/Profile.d.ts +29 -0
- package/dist/src/services/Profile.js +115 -0
- package/dist/src/services/Renderer/content.d.ts +16 -0
- package/dist/src/services/Renderer/content.js +110 -0
- package/dist/src/services/Renderer/datetime.d.ts +38 -0
- package/dist/src/services/Renderer/datetime.js +147 -0
- package/dist/src/services/Renderer/errors.d.ts +3 -0
- package/dist/src/services/Renderer/errors.js +59 -0
- package/dist/src/services/Renderer/index.d.ts +13 -0
- package/dist/src/services/Renderer/index.js +11 -0
- package/dist/src/services/Renderer/lists.d.ts +1 -0
- package/dist/src/services/Renderer/lists.js +101 -0
- package/dist/src/services/Renderer/options.d.ts +10 -0
- package/dist/src/services/Renderer/options.js +13 -0
- package/dist/src/services/Renderer/primitives.d.ts +4 -0
- package/dist/src/services/Renderer/primitives.js +12 -0
- package/dist/src/services/Renderer/service.d.ts +35 -0
- package/dist/src/services/Renderer/service.js +123 -0
- package/dist/src/services/Renderer/view.d.ts +16 -0
- package/dist/src/services/Renderer/view.js +1 -0
- package/dist/src/services/Resolver.d.ts +47 -0
- package/dist/src/services/Resolver.js +269 -0
- package/dist/src/services/Skill.d.ts +29 -0
- package/dist/src/services/Skill.js +421 -0
- package/dist/src/services/UpdateNotifier.d.ts +162 -0
- package/dist/src/services/UpdateNotifier.js +572 -0
- package/dist/test/cli/ai/ai.test.d.ts +1 -0
- package/dist/test/cli/ai/ai.test.js +507 -0
- package/dist/test/cli/ai/verbs.test.d.ts +1 -0
- package/dist/test/cli/ai/verbs.test.js +235 -0
- package/dist/test/cli/auth/login.test.d.ts +1 -0
- package/dist/test/cli/auth/login.test.js +236 -0
- package/dist/test/cli/auth/logout-whoami.test.d.ts +1 -0
- package/dist/test/cli/auth/logout-whoami.test.js +124 -0
- package/dist/test/cli/auth/status.test.d.ts +1 -0
- package/dist/test/cli/auth/status.test.js +90 -0
- package/dist/test/cli/category/category.test.d.ts +1 -0
- package/dist/test/cli/category/category.test.js +175 -0
- package/dist/test/cli/comment/comment.test.d.ts +1 -0
- package/dist/test/cli/comment/comment.test.js +445 -0
- package/dist/test/cli/config/config.test.d.ts +1 -0
- package/dist/test/cli/config/config.test.js +281 -0
- package/dist/test/cli/edit-roundtrip.test.d.ts +1 -0
- package/dist/test/cli/edit-roundtrip.test.js +259 -0
- package/dist/test/cli/file/file.test.d.ts +1 -0
- package/dist/test/cli/file/file.test.js +185 -0
- package/dist/test/cli/help.test.d.ts +1 -0
- package/dist/test/cli/help.test.js +289 -0
- package/dist/test/cli/note/create.test.d.ts +1 -0
- package/dist/test/cli/note/create.test.js +155 -0
- package/dist/test/cli/note/list.test.d.ts +1 -0
- package/dist/test/cli/note/list.test.js +115 -0
- package/dist/test/cli/note/publish.test.d.ts +1 -0
- package/dist/test/cli/note/publish.test.js +123 -0
- package/dist/test/cli/page/page.test.d.ts +1 -0
- package/dist/test/cli/page/page.test.js +185 -0
- package/dist/test/cli/post/create.test.d.ts +1 -0
- package/dist/test/cli/post/create.test.js +172 -0
- package/dist/test/cli/post/list.test.d.ts +1 -0
- package/dist/test/cli/post/list.test.js +133 -0
- package/dist/test/cli/post/publish.test.d.ts +1 -0
- package/dist/test/cli/post/publish.test.js +139 -0
- package/dist/test/cli/post/stage-apply.test.d.ts +1 -0
- package/dist/test/cli/post/stage-apply.test.js +215 -0
- package/dist/test/cli/post/update.test.d.ts +1 -0
- package/dist/test/cli/post/update.test.js +160 -0
- package/dist/test/cli/post-note-crud.test.d.ts +1 -0
- package/dist/test/cli/post-note-crud.test.js +362 -0
- package/dist/test/cli/profile/ls.test.d.ts +1 -0
- package/dist/test/cli/profile/ls.test.js +93 -0
- package/dist/test/cli/profile/mark-use.test.d.ts +1 -0
- package/dist/test/cli/profile/mark-use.test.js +216 -0
- package/dist/test/cli/project-crud.test.d.ts +1 -0
- package/dist/test/cli/project-crud.test.js +315 -0
- package/dist/test/cli/render/lexical.test.d.ts +1 -0
- package/dist/test/cli/render/lexical.test.js +216 -0
- package/dist/test/cli/render/markdown.test.d.ts +1 -0
- package/dist/test/cli/render/markdown.test.js +39 -0
- package/dist/test/cli/snippet-crud.test.d.ts +1 -0
- package/dist/test/cli/snippet-crud.test.js +293 -0
- package/dist/test/cli/topic/topic.test.d.ts +1 -0
- package/dist/test/cli/topic/topic.test.js +181 -0
- package/dist/test/cli/update.test.d.ts +1 -0
- package/dist/test/cli/update.test.js +395 -0
- package/dist/test/domain/content-spec.test.d.ts +1 -0
- package/dist/test/domain/content-spec.test.js +126 -0
- package/dist/test/domain/envelope-compat.test.d.ts +1 -0
- package/dist/test/domain/envelope-compat.test.js +126 -0
- package/dist/test/domain/envelope.test.d.ts +1 -0
- package/dist/test/domain/envelope.test.js +149 -0
- package/dist/test/domain/errors.test.d.ts +1 -0
- package/dist/test/domain/errors.test.js +127 -0
- package/dist/test/domain/gate.test.d.ts +1 -0
- package/dist/test/domain/gate.test.js +128 -0
- package/dist/test/domain/payload.test.d.ts +1 -0
- package/dist/test/domain/payload.test.js +259 -0
- package/dist/test/helper/test-fs.d.ts +24 -0
- package/dist/test/helper/test-fs.js +161 -0
- package/dist/test/helper/test-http.d.ts +31 -0
- package/dist/test/helper/test-http.js +66 -0
- package/dist/test/integration/_helpers.d.ts +5 -0
- package/dist/test/integration/_helpers.js +24 -0
- package/dist/test/integration/cli-error-envelope.test.d.ts +1 -0
- package/dist/test/integration/cli-error-envelope.test.js +137 -0
- package/dist/test/integration/cli-help-render.test.d.ts +1 -0
- package/dist/test/integration/cli-help-render.test.js +149 -0
- package/dist/test/integration/cli-help.test.d.ts +1 -0
- package/dist/test/integration/cli-help.test.js +67 -0
- package/dist/test/integration/cli-post-list.test.d.ts +1 -0
- package/dist/test/integration/cli-post-list.test.js +140 -0
- package/dist/test/integration/cli-skill.test.d.ts +1 -0
- package/dist/test/integration/cli-skill.test.js +74 -0
- package/dist/test/integration/cli-version.test.d.ts +1 -0
- package/dist/test/integration/cli-version.test.js +37 -0
- package/dist/test/services/Api.test.d.ts +1 -0
- package/dist/test/services/Api.test.js +553 -0
- package/dist/test/services/Auth.test.d.ts +1 -0
- package/dist/test/services/Auth.test.js +650 -0
- package/dist/test/services/Config.test.d.ts +1 -0
- package/dist/test/services/Config.test.js +510 -0
- package/dist/test/services/Datetime.test.d.ts +1 -0
- package/dist/test/services/Datetime.test.js +113 -0
- package/dist/test/services/Editor.test.d.ts +1 -0
- package/dist/test/services/Editor.test.js +205 -0
- package/dist/test/services/Lexical.errors.test.d.ts +1 -0
- package/dist/test/services/Lexical.errors.test.js +60 -0
- package/dist/test/services/Lexical.test.d.ts +1 -0
- package/dist/test/services/Lexical.test.js +68 -0
- package/dist/test/services/Migration.test.d.ts +1 -0
- package/dist/test/services/Migration.test.js +376 -0
- package/dist/test/services/Profile.test.d.ts +1 -0
- package/dist/test/services/Profile.test.js +277 -0
- package/dist/test/services/Renderer.test.d.ts +1 -0
- package/dist/test/services/Renderer.test.js +538 -0
- package/dist/test/services/Resolver.test.d.ts +1 -0
- package/dist/test/services/Resolver.test.js +320 -0
- package/dist/test/services/Skill.test.d.ts +1 -0
- package/dist/test/services/Skill.test.js +261 -0
- package/dist/test/services/UpdateNotifier.spawn.test.d.ts +1 -0
- package/dist/test/services/UpdateNotifier.spawn.test.js +73 -0
- package/dist/test/services/UpdateNotifier.test.d.ts +1 -0
- package/dist/test/services/UpdateNotifier.test.js +912 -0
- package/dist/vendor/litexml/cli.mjs +2481 -2561
- package/dist/vendor/litexml/litexml-html-preview-client.css +178 -60
- package/dist/vendor/litexml/litexml-html-preview-client.js +9950 -8762
- package/dist/vendor/litexml/style.css +11 -7
- package/package.json +23 -21
- package/skills/commands-ai.md +45 -12
- package/skills/overview.md +1 -1
- package/skills/safety.md +1 -1
- package/dist/esm-CH7CrOvh.mjs +0 -2
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { FileSystem, Path } from '@effect/platform';
|
|
5
|
+
import { Context, Effect, Layer, Ref } from 'effect';
|
|
6
|
+
import MiniSearch from 'minisearch';
|
|
7
|
+
import { ChapterNotFound, SkillCorpusEmpty } from '../domain/errors';
|
|
8
|
+
const requireFrom = createRequire(import.meta.url);
|
|
9
|
+
const findCliPackageRoot = () => {
|
|
10
|
+
const here = fileURLToPath(import.meta.url);
|
|
11
|
+
let dir = here.slice(0, Math.max(0, here.lastIndexOf('/')));
|
|
12
|
+
for (let i = 0; i < 8; i++) {
|
|
13
|
+
if (!dir || dir === '/')
|
|
14
|
+
break;
|
|
15
|
+
try {
|
|
16
|
+
const pkg = requireFrom(`${dir}/package.json`);
|
|
17
|
+
if (pkg.name === '@mx-space/cli')
|
|
18
|
+
return dir;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// not a pkg dir, keep walking
|
|
22
|
+
}
|
|
23
|
+
const next = dir.slice(0, Math.max(0, dir.lastIndexOf('/')));
|
|
24
|
+
if (next === dir)
|
|
25
|
+
break;
|
|
26
|
+
dir = next;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
};
|
|
30
|
+
const resolveCliSkillsDir = () => {
|
|
31
|
+
const override = process.env.MXS_SKILL_CLI_DIR;
|
|
32
|
+
if (override && override.length > 0)
|
|
33
|
+
return override;
|
|
34
|
+
const root = findCliPackageRoot();
|
|
35
|
+
return root ? `${root}/skills` : null;
|
|
36
|
+
};
|
|
37
|
+
const resolveHaklexSkillsDir = () => {
|
|
38
|
+
const override = process.env.MXS_SKILL_HAKLEX_DIR;
|
|
39
|
+
if (override && override.length > 0)
|
|
40
|
+
return override;
|
|
41
|
+
try {
|
|
42
|
+
const pkgJson = requireFrom.resolve('@haklex/rich-litexml/package.json');
|
|
43
|
+
const dir = pkgJson.slice(0, Math.max(0, pkgJson.lastIndexOf('/')));
|
|
44
|
+
return `${dir}/.claude/skills/litexml-authoring`;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Older `@haklex/rich-litexml` (<= 0.15.2) omits `./package.json` from
|
|
48
|
+
// its `exports`, so direct resolve throws under strict ESM resolution.
|
|
49
|
+
// Fall back to walking node_modules upward from the cli package root.
|
|
50
|
+
const root = findCliPackageRoot();
|
|
51
|
+
if (!root)
|
|
52
|
+
return null;
|
|
53
|
+
const candidates = [];
|
|
54
|
+
let dir = root;
|
|
55
|
+
while (dir && dir.length > 1) {
|
|
56
|
+
candidates.push(`${dir}/node_modules/@haklex/rich-litexml/.claude/skills/litexml-authoring`);
|
|
57
|
+
const next = dir.slice(0, Math.max(0, dir.lastIndexOf('/')));
|
|
58
|
+
if (next === dir)
|
|
59
|
+
break;
|
|
60
|
+
dir = next;
|
|
61
|
+
}
|
|
62
|
+
for (const c of candidates) {
|
|
63
|
+
if (existsSync(c))
|
|
64
|
+
return c;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const parseFrontmatter = (raw, file) => {
|
|
70
|
+
if (!raw.startsWith('---\n')) {
|
|
71
|
+
return { error: `${file}: missing frontmatter (no leading '---' line)` };
|
|
72
|
+
}
|
|
73
|
+
const end = raw.indexOf('\n---\n', 4);
|
|
74
|
+
if (end < 0) {
|
|
75
|
+
return { error: `${file}: missing frontmatter terminator ('---' line)` };
|
|
76
|
+
}
|
|
77
|
+
const head = raw.slice(4, end);
|
|
78
|
+
const body = raw.slice(end + 5).replace(/^\n+/, '');
|
|
79
|
+
const fields = {};
|
|
80
|
+
for (const line of head.split('\n')) {
|
|
81
|
+
if (line.trim().length === 0)
|
|
82
|
+
continue;
|
|
83
|
+
const colon = line.indexOf(':');
|
|
84
|
+
if (colon < 0) {
|
|
85
|
+
return { error: `${file}: malformed frontmatter line: ${line}` };
|
|
86
|
+
}
|
|
87
|
+
const key = line.slice(0, colon).trim();
|
|
88
|
+
let value = line.slice(colon + 1).trim();
|
|
89
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
90
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
91
|
+
value = value.slice(1, -1);
|
|
92
|
+
}
|
|
93
|
+
fields[key] = value;
|
|
94
|
+
}
|
|
95
|
+
const slug = fields.slug;
|
|
96
|
+
const title = fields.title;
|
|
97
|
+
const description = fields.description;
|
|
98
|
+
const orderRaw = fields.order;
|
|
99
|
+
if (!slug)
|
|
100
|
+
return { error: `${file}: frontmatter missing required 'slug'` };
|
|
101
|
+
if (!title)
|
|
102
|
+
return { error: `${file}: frontmatter missing required 'title'` };
|
|
103
|
+
if (!description)
|
|
104
|
+
return { error: `${file}: frontmatter missing required 'description'` };
|
|
105
|
+
if (!orderRaw)
|
|
106
|
+
return { error: `${file}: frontmatter missing required 'order'` };
|
|
107
|
+
const order = Number.parseInt(orderRaw, 10);
|
|
108
|
+
if (!Number.isFinite(order)) {
|
|
109
|
+
return { error: `${file}: frontmatter 'order' not an integer: ${orderRaw}` };
|
|
110
|
+
}
|
|
111
|
+
if (!/^[\da-z][\da-z-]*$/.test(slug)) {
|
|
112
|
+
return { error: `${file}: frontmatter 'slug' not kebab-case: ${slug}` };
|
|
113
|
+
}
|
|
114
|
+
return { slug, title, description, order, body };
|
|
115
|
+
};
|
|
116
|
+
const scanCliDir = (fs, path, dir) => Effect.gen(function* () {
|
|
117
|
+
const exists = yield* fs
|
|
118
|
+
.exists(dir)
|
|
119
|
+
.pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
120
|
+
if (!exists)
|
|
121
|
+
return [];
|
|
122
|
+
const entries = yield* fs
|
|
123
|
+
.readDirectory(dir)
|
|
124
|
+
.pipe(Effect.catchAll(() => Effect.succeed([])));
|
|
125
|
+
const chapters = [];
|
|
126
|
+
for (const name of entries) {
|
|
127
|
+
if (!name.endsWith('.md'))
|
|
128
|
+
continue;
|
|
129
|
+
const full = path.join(dir, name);
|
|
130
|
+
const raw = yield* fs
|
|
131
|
+
.readFileString(full)
|
|
132
|
+
.pipe(Effect.catchAll(() => Effect.succeed('')));
|
|
133
|
+
if (!raw)
|
|
134
|
+
continue;
|
|
135
|
+
const parsed = parseFrontmatter(raw, full);
|
|
136
|
+
if ('error' in parsed) {
|
|
137
|
+
return yield* Effect.die(parsed.error);
|
|
138
|
+
}
|
|
139
|
+
chapters.push({ ...parsed, source: 'cli' });
|
|
140
|
+
}
|
|
141
|
+
return chapters;
|
|
142
|
+
});
|
|
143
|
+
const stripAnyFrontmatter = (raw) => {
|
|
144
|
+
if (!raw.startsWith('---\n')) {
|
|
145
|
+
return { fields: {}, body: raw };
|
|
146
|
+
}
|
|
147
|
+
const end = raw.indexOf('\n---\n', 4);
|
|
148
|
+
if (end < 0)
|
|
149
|
+
return { fields: {}, body: raw };
|
|
150
|
+
const head = raw.slice(4, end);
|
|
151
|
+
const body = raw.slice(end + 5).replace(/^\n+/, '');
|
|
152
|
+
const fields = {};
|
|
153
|
+
for (const line of head.split('\n')) {
|
|
154
|
+
if (line.trim().length === 0)
|
|
155
|
+
continue;
|
|
156
|
+
const colon = line.indexOf(':');
|
|
157
|
+
if (colon < 0)
|
|
158
|
+
continue;
|
|
159
|
+
const key = line.slice(0, colon).trim();
|
|
160
|
+
let value = line.slice(colon + 1).trim();
|
|
161
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
162
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
163
|
+
value = value.slice(1, -1);
|
|
164
|
+
}
|
|
165
|
+
fields[key] = value;
|
|
166
|
+
}
|
|
167
|
+
return { fields, body };
|
|
168
|
+
};
|
|
169
|
+
const humanizeBase = (name) => name.replaceAll(/[_-]+/g, ' ').replaceAll(/\b\w/g, (c) => c.toUpperCase());
|
|
170
|
+
const firstNonEmptyLine = (body) => {
|
|
171
|
+
for (const line of body.split('\n')) {
|
|
172
|
+
const trimmed = line.trim();
|
|
173
|
+
if (!trimmed)
|
|
174
|
+
continue;
|
|
175
|
+
if (trimmed.startsWith('#'))
|
|
176
|
+
continue;
|
|
177
|
+
return trimmed.slice(0, 200);
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
};
|
|
181
|
+
const scanHaklexDir = (fs, path, dir) => Effect.gen(function* () {
|
|
182
|
+
const exists = yield* fs
|
|
183
|
+
.exists(dir)
|
|
184
|
+
.pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
185
|
+
if (!exists)
|
|
186
|
+
return [];
|
|
187
|
+
const chapters = [];
|
|
188
|
+
const skillMdPath = path.join(dir, 'SKILL.md');
|
|
189
|
+
const skillMdExists = yield* fs
|
|
190
|
+
.exists(skillMdPath)
|
|
191
|
+
.pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
192
|
+
if (skillMdExists) {
|
|
193
|
+
const raw = yield* fs
|
|
194
|
+
.readFileString(skillMdPath)
|
|
195
|
+
.pipe(Effect.catchAll(() => Effect.succeed('')));
|
|
196
|
+
if (raw) {
|
|
197
|
+
const { fields, body } = stripAnyFrontmatter(raw);
|
|
198
|
+
chapters.push({
|
|
199
|
+
slug: 'litexml',
|
|
200
|
+
title: 'liteXML overview',
|
|
201
|
+
description: fields.description ||
|
|
202
|
+
firstNonEmptyLine(body) ||
|
|
203
|
+
'liteXML node and authoring reference',
|
|
204
|
+
order: 70,
|
|
205
|
+
source: 'haklex',
|
|
206
|
+
body,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const refsDir = path.join(dir, 'references');
|
|
211
|
+
const refsExists = yield* fs
|
|
212
|
+
.exists(refsDir)
|
|
213
|
+
.pipe(Effect.catchAll(() => Effect.succeed(false)));
|
|
214
|
+
if (refsExists) {
|
|
215
|
+
const refFiles = yield* fs
|
|
216
|
+
.readDirectory(refsDir)
|
|
217
|
+
.pipe(Effect.catchAll(() => Effect.succeed([])));
|
|
218
|
+
const sorted = [...refFiles].filter((n) => n.endsWith('.md')).sort();
|
|
219
|
+
let order = 71;
|
|
220
|
+
for (const name of sorted) {
|
|
221
|
+
const full = path.join(refsDir, name);
|
|
222
|
+
const raw = yield* fs
|
|
223
|
+
.readFileString(full)
|
|
224
|
+
.pipe(Effect.catchAll(() => Effect.succeed('')));
|
|
225
|
+
if (!raw)
|
|
226
|
+
continue;
|
|
227
|
+
const baseName = name.replace(/\.md$/, '');
|
|
228
|
+
const { fields, body } = stripAnyFrontmatter(raw);
|
|
229
|
+
chapters.push({
|
|
230
|
+
slug: `litexml-${baseName}`,
|
|
231
|
+
title: `liteXML ${humanizeBase(baseName)}`,
|
|
232
|
+
description: fields.description ||
|
|
233
|
+
firstNonEmptyLine(body) ||
|
|
234
|
+
`liteXML reference: ${baseName}`,
|
|
235
|
+
order: order++,
|
|
236
|
+
source: 'haklex',
|
|
237
|
+
body,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return chapters;
|
|
242
|
+
});
|
|
243
|
+
const buildRegistry = (fs, path, cliDir, haklexDir) => Effect.gen(function* () {
|
|
244
|
+
const [cliChapters, haklexChapters] = yield* Effect.all([
|
|
245
|
+
cliDir
|
|
246
|
+
? scanCliDir(fs, path, cliDir)
|
|
247
|
+
: Effect.succeed([]),
|
|
248
|
+
haklexDir
|
|
249
|
+
? scanHaklexDir(fs, path, haklexDir)
|
|
250
|
+
: Effect.succeed([]),
|
|
251
|
+
], { concurrency: 2 }).pipe(Effect.catchAllDefect((d) => Effect.fail(new SkillCorpusEmpty({
|
|
252
|
+
message: typeof d === 'string' ? d : 'failed to load skill corpus',
|
|
253
|
+
cause: d,
|
|
254
|
+
}))));
|
|
255
|
+
const all = [...cliChapters, ...haklexChapters];
|
|
256
|
+
if (all.length === 0) {
|
|
257
|
+
return yield* Effect.fail(new SkillCorpusEmpty({
|
|
258
|
+
message: 'no chapters found',
|
|
259
|
+
hint: 'reinstall @mx-space/cli, or check the MXS_SKILL_CLI_DIR / MXS_SKILL_HAKLEX_DIR overrides',
|
|
260
|
+
}));
|
|
261
|
+
}
|
|
262
|
+
const seen = new Set();
|
|
263
|
+
for (const c of all) {
|
|
264
|
+
if (seen.has(c.slug)) {
|
|
265
|
+
return yield* Effect.fail(new SkillCorpusEmpty({
|
|
266
|
+
message: `duplicate slug across sources: ${c.slug}`,
|
|
267
|
+
hint: 'each chapter slug must be globally unique',
|
|
268
|
+
}));
|
|
269
|
+
}
|
|
270
|
+
seen.add(c.slug);
|
|
271
|
+
}
|
|
272
|
+
return [...all].sort((a, b) => a.order - b.order);
|
|
273
|
+
});
|
|
274
|
+
const buildIndex = (chapters) => {
|
|
275
|
+
const mini = new MiniSearch({
|
|
276
|
+
fields: ['title', 'description', 'body'],
|
|
277
|
+
storeFields: ['slug'],
|
|
278
|
+
idField: 'slug',
|
|
279
|
+
searchOptions: {
|
|
280
|
+
boost: { title: 3, description: 2 },
|
|
281
|
+
combineWith: 'AND',
|
|
282
|
+
prefix: true,
|
|
283
|
+
fuzzy: 0.2,
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
mini.addAll(chapters.map((c) => ({
|
|
287
|
+
slug: c.slug,
|
|
288
|
+
title: c.title,
|
|
289
|
+
description: c.description,
|
|
290
|
+
body: c.body,
|
|
291
|
+
})));
|
|
292
|
+
return mini;
|
|
293
|
+
};
|
|
294
|
+
/**
|
|
295
|
+
* Tokenize the user's query string the same way MiniSearch does for indexing,
|
|
296
|
+
* so snippets can be located in the body. We use this lightweight tokenizer
|
|
297
|
+
* rather than `r.terms` because fuzzy / prefix matches expose the indexed
|
|
298
|
+
* term, not the substring that appears in the body verbatim.
|
|
299
|
+
*/
|
|
300
|
+
const tokenizeQuery = (s) => s
|
|
301
|
+
.toLowerCase()
|
|
302
|
+
.split(/[\s\p{P}]+/u)
|
|
303
|
+
.filter((t) => t.length > 0);
|
|
304
|
+
const buildSnippets = (body, terms) => {
|
|
305
|
+
if (terms.length === 0)
|
|
306
|
+
return [];
|
|
307
|
+
const lower = body.toLowerCase();
|
|
308
|
+
// Pre-collect up to 5 occurrences per term so single-term queries can
|
|
309
|
+
// surface multiple snippets and multi-term queries stay balanced via
|
|
310
|
+
// round-robin emission below.
|
|
311
|
+
const occs = terms.map((term) => {
|
|
312
|
+
const t = term.toLowerCase();
|
|
313
|
+
if (!t)
|
|
314
|
+
return [];
|
|
315
|
+
const positions = [];
|
|
316
|
+
let from = 0;
|
|
317
|
+
while (positions.length < 5) {
|
|
318
|
+
const idx = lower.indexOf(t, from);
|
|
319
|
+
if (idx < 0)
|
|
320
|
+
break;
|
|
321
|
+
positions.push(idx);
|
|
322
|
+
from = idx + t.length;
|
|
323
|
+
}
|
|
324
|
+
return positions;
|
|
325
|
+
});
|
|
326
|
+
const cursors = Array.from({ length: terms.length }, () => 0);
|
|
327
|
+
const out = [];
|
|
328
|
+
let progressed = true;
|
|
329
|
+
while (out.length < 3 && progressed) {
|
|
330
|
+
progressed = false;
|
|
331
|
+
for (let i = 0; i < terms.length && out.length < 3; i++) {
|
|
332
|
+
const c = cursors[i];
|
|
333
|
+
if (c >= occs[i].length)
|
|
334
|
+
continue;
|
|
335
|
+
const idx = occs[i][c];
|
|
336
|
+
const tLen = terms[i].length;
|
|
337
|
+
cursors[i] = c + 1;
|
|
338
|
+
progressed = true;
|
|
339
|
+
const start = Math.max(0, idx - 60);
|
|
340
|
+
const end = Math.min(body.length, idx + tLen + 60);
|
|
341
|
+
let snippet = body.slice(start, end).replaceAll(/\s+/g, ' ').trim();
|
|
342
|
+
if (start > 0)
|
|
343
|
+
snippet = `…${snippet}`;
|
|
344
|
+
if (end < body.length)
|
|
345
|
+
snippet = `${snippet}…`;
|
|
346
|
+
out.push(snippet);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return out;
|
|
350
|
+
};
|
|
351
|
+
const make = Effect.gen(function* () {
|
|
352
|
+
const fs = yield* FileSystem.FileSystem;
|
|
353
|
+
const path = yield* Path.Path;
|
|
354
|
+
const cliDir = resolveCliSkillsDir();
|
|
355
|
+
const haklexDir = resolveHaklexSkillsDir();
|
|
356
|
+
const cache = yield* Ref.make(null);
|
|
357
|
+
const indexCache = yield* Ref.make(null);
|
|
358
|
+
const load = Effect.gen(function* () {
|
|
359
|
+
const cached = yield* Ref.get(cache);
|
|
360
|
+
if (cached)
|
|
361
|
+
return cached;
|
|
362
|
+
const chapters = yield* buildRegistry(fs, path, cliDir, haklexDir);
|
|
363
|
+
yield* Ref.set(cache, chapters);
|
|
364
|
+
return chapters;
|
|
365
|
+
});
|
|
366
|
+
const loadIndex = Effect.gen(function* () {
|
|
367
|
+
const cached = yield* Ref.get(indexCache);
|
|
368
|
+
if (cached)
|
|
369
|
+
return cached;
|
|
370
|
+
const chapters = yield* load;
|
|
371
|
+
const mini = buildIndex(chapters);
|
|
372
|
+
yield* Ref.set(indexCache, mini);
|
|
373
|
+
return mini;
|
|
374
|
+
});
|
|
375
|
+
const svc = {
|
|
376
|
+
list: load,
|
|
377
|
+
all: load,
|
|
378
|
+
get: (slug) => Effect.gen(function* () {
|
|
379
|
+
const chapters = yield* load;
|
|
380
|
+
const found = chapters.find((c) => c.slug === slug);
|
|
381
|
+
if (!found) {
|
|
382
|
+
const isLitexml = slug.startsWith('litexml');
|
|
383
|
+
return yield* Effect.fail(new ChapterNotFound({
|
|
384
|
+
slug,
|
|
385
|
+
message: `no skill chapter with slug '${slug}'`,
|
|
386
|
+
hint: isLitexml
|
|
387
|
+
? 'upgrade @haklex/rich-litexml to >=0.36.1 to ship liteXML chapters'
|
|
388
|
+
: 'run `mxs skill` to list available chapters',
|
|
389
|
+
}));
|
|
390
|
+
}
|
|
391
|
+
return found;
|
|
392
|
+
}),
|
|
393
|
+
search: (keyword) => Effect.gen(function* () {
|
|
394
|
+
const kw = keyword.trim();
|
|
395
|
+
if (!kw)
|
|
396
|
+
return [];
|
|
397
|
+
const chapters = yield* load;
|
|
398
|
+
const mini = yield* loadIndex;
|
|
399
|
+
const tokens = tokenizeQuery(kw);
|
|
400
|
+
const results = mini.search(kw);
|
|
401
|
+
const bySlug = new Map(chapters.map((c) => [c.slug, c]));
|
|
402
|
+
return results.flatMap((r) => {
|
|
403
|
+
const chapter = bySlug.get(r.id);
|
|
404
|
+
if (!chapter)
|
|
405
|
+
return [];
|
|
406
|
+
return [
|
|
407
|
+
{
|
|
408
|
+
slug: chapter.slug,
|
|
409
|
+
title: chapter.title,
|
|
410
|
+
description: chapter.description,
|
|
411
|
+
snippets: buildSnippets(chapter.body, tokens),
|
|
412
|
+
},
|
|
413
|
+
];
|
|
414
|
+
});
|
|
415
|
+
}),
|
|
416
|
+
};
|
|
417
|
+
return svc;
|
|
418
|
+
});
|
|
419
|
+
export class Skill extends Context.Tag('Skill')() {
|
|
420
|
+
static Default = Layer.effect(Skill, make);
|
|
421
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from 'effect';
|
|
2
|
+
import { type Generic, UpdateDevEnvironment, UpdateNodeIncompatible, UpdatePermissionDenied, UpdatePmUnknown, UpdateRegistryUnreachable, UpdateSpawnFailed, UpdateTransientInstall } from '../domain/errors';
|
|
3
|
+
export type UpdateChannel = 'stable' | 'next';
|
|
4
|
+
export type PmKind = 'npm' | 'pnpm' | 'yarn' | 'bun';
|
|
5
|
+
export declare const PACKAGE_NAME = "@mx-space/cli";
|
|
6
|
+
export declare const DEFAULT_REGISTRY = "https://registry.npmjs.org";
|
|
7
|
+
export interface NotifyOptions {
|
|
8
|
+
readonly currentVersion: string;
|
|
9
|
+
readonly channel?: UpdateChannel;
|
|
10
|
+
readonly quiet?: boolean;
|
|
11
|
+
readonly json?: boolean;
|
|
12
|
+
readonly output?: string;
|
|
13
|
+
readonly commandName?: string;
|
|
14
|
+
readonly parentName?: string;
|
|
15
|
+
readonly force?: boolean;
|
|
16
|
+
readonly isTTY?: boolean;
|
|
17
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
18
|
+
readonly emit?: (message: string) => void;
|
|
19
|
+
readonly configDir?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface RunUpdateOptions {
|
|
22
|
+
readonly currentVersion: string;
|
|
23
|
+
readonly channel?: UpdateChannel;
|
|
24
|
+
readonly dryRun?: boolean;
|
|
25
|
+
readonly check?: boolean;
|
|
26
|
+
readonly prerelease?: boolean;
|
|
27
|
+
readonly pm?: string;
|
|
28
|
+
readonly yes?: boolean;
|
|
29
|
+
readonly force?: boolean;
|
|
30
|
+
readonly json?: boolean;
|
|
31
|
+
/** Override `process.argv[1]` for pm detection (tests). */
|
|
32
|
+
readonly entrypoint?: string;
|
|
33
|
+
/** Override Node version for engine compatibility check (tests). */
|
|
34
|
+
readonly nodeVersion?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface RunUpdateResult {
|
|
37
|
+
readonly fromVersion: string;
|
|
38
|
+
readonly toVersion: string;
|
|
39
|
+
readonly pm: PmKind | null;
|
|
40
|
+
readonly channel: UpdateChannel;
|
|
41
|
+
readonly status: number;
|
|
42
|
+
/** true when the package manager actually ran and succeeded. */
|
|
43
|
+
readonly upgraded: boolean;
|
|
44
|
+
/** true when no install was performed (already up to date / --check / --dry-run / cancelled). */
|
|
45
|
+
readonly dryRun: boolean;
|
|
46
|
+
/** true when local version >= registry latest. */
|
|
47
|
+
readonly upToDate: boolean;
|
|
48
|
+
readonly command?: string;
|
|
49
|
+
readonly cancelled?: boolean;
|
|
50
|
+
}
|
|
51
|
+
export type RunUpdateError = UpdateDevEnvironment | UpdateTransientInstall | UpdatePmUnknown | UpdateRegistryUnreachable | UpdateNodeIncompatible | UpdateSpawnFailed | UpdatePermissionDenied | Generic;
|
|
52
|
+
export interface UpdateNotifierService {
|
|
53
|
+
readonly maybeNotify: (opts: NotifyOptions) => Effect.Effect<void>;
|
|
54
|
+
readonly runUpdate: (opts: RunUpdateOptions) => Effect.Effect<RunUpdateResult, RunUpdateError>;
|
|
55
|
+
}
|
|
56
|
+
export type PmDetection = {
|
|
57
|
+
kind: 'global';
|
|
58
|
+
pm: PmKind;
|
|
59
|
+
realPath: string;
|
|
60
|
+
} | {
|
|
61
|
+
kind: 'dev';
|
|
62
|
+
reason: 'monorepo-source' | 'monorepo-dist';
|
|
63
|
+
realPath: string;
|
|
64
|
+
} | {
|
|
65
|
+
kind: 'transient';
|
|
66
|
+
cache: 'npx' | 'pnpm-dlx' | 'bunx';
|
|
67
|
+
realPath: string;
|
|
68
|
+
} | {
|
|
69
|
+
kind: 'unknown';
|
|
70
|
+
realPath: string;
|
|
71
|
+
};
|
|
72
|
+
export declare function detectPackageManager(argv1: string): PmDetection;
|
|
73
|
+
export interface RegistryHit {
|
|
74
|
+
notModified?: false;
|
|
75
|
+
version: string;
|
|
76
|
+
engines?: {
|
|
77
|
+
node?: string;
|
|
78
|
+
};
|
|
79
|
+
tarball?: string;
|
|
80
|
+
etag?: string;
|
|
81
|
+
}
|
|
82
|
+
export interface NotModified {
|
|
83
|
+
notModified: true;
|
|
84
|
+
etag?: string;
|
|
85
|
+
}
|
|
86
|
+
export type FetchImpl = (input: string, init?: {
|
|
87
|
+
headers?: Record<string, string>;
|
|
88
|
+
signal?: AbortSignal;
|
|
89
|
+
}) => Promise<{
|
|
90
|
+
ok: boolean;
|
|
91
|
+
status: number;
|
|
92
|
+
headers: {
|
|
93
|
+
get: (name: string) => string | null;
|
|
94
|
+
};
|
|
95
|
+
json: () => Promise<unknown>;
|
|
96
|
+
text: () => Promise<string>;
|
|
97
|
+
}>;
|
|
98
|
+
export interface FetchOpts {
|
|
99
|
+
etag?: string;
|
|
100
|
+
signal?: AbortSignal;
|
|
101
|
+
registry?: string;
|
|
102
|
+
fetchImpl?: FetchImpl;
|
|
103
|
+
}
|
|
104
|
+
export declare function fetchLatestVersion(channel: UpdateChannel, opts?: FetchOpts): Promise<RegistryHit | NotModified>;
|
|
105
|
+
export declare function compareSemver(a: string, b: string): -1 | 0 | 1;
|
|
106
|
+
export declare function satisfiesNodeEngine(currentVersion: string, range: string | undefined): boolean;
|
|
107
|
+
export declare function buildUpgradeCommand(pm: PmKind, channel: UpdateChannel): {
|
|
108
|
+
cmd: string;
|
|
109
|
+
args: string[];
|
|
110
|
+
};
|
|
111
|
+
export interface SpawnUpgradeResult {
|
|
112
|
+
status: number;
|
|
113
|
+
stderr: string;
|
|
114
|
+
}
|
|
115
|
+
export type SpawnDetached = (cmd: string, args: string[], logPath: string) => void;
|
|
116
|
+
export interface CachedState {
|
|
117
|
+
last_check_ts: number;
|
|
118
|
+
latest_version?: string;
|
|
119
|
+
etag?: string;
|
|
120
|
+
/**
|
|
121
|
+
* Timestamp of the most recent background auto-update spawn. Used to throttle
|
|
122
|
+
* silent installs so a single new release doesn't trigger an `npm i -g` on
|
|
123
|
+
* every `mxs <cmd>` invocation within the 24h check window.
|
|
124
|
+
*/
|
|
125
|
+
last_auto_update_ts?: number;
|
|
126
|
+
}
|
|
127
|
+
export declare function readCache(configDir: string): CachedState | null;
|
|
128
|
+
export declare function writeCacheAtomic(state: CachedState, configDir: string): void;
|
|
129
|
+
export declare function shouldSkipNotify(opts: NotifyOptions): boolean;
|
|
130
|
+
export interface UpdateNotifierDeps {
|
|
131
|
+
readonly now?: () => number;
|
|
132
|
+
readonly fetchImpl?: FetchImpl;
|
|
133
|
+
readonly spawnImpl?: (cmd: string, args: string[]) => Promise<SpawnUpgradeResult>;
|
|
134
|
+
/**
|
|
135
|
+
* Fire-and-forget detached spawn used by the background auto-update path.
|
|
136
|
+
* Unit tests can inject a spy to verify that an install was triggered
|
|
137
|
+
* without actually running the package manager.
|
|
138
|
+
*/
|
|
139
|
+
readonly spawnDetached?: SpawnDetached;
|
|
140
|
+
/**
|
|
141
|
+
* @deprecated The interactive confirm prompt was removed when `mxs update`
|
|
142
|
+
* became auto-install by default. Accepted for backward compatibility with
|
|
143
|
+
* older `make()` call sites; never invoked.
|
|
144
|
+
*/
|
|
145
|
+
readonly confirmImpl?: (message: string) => Promise<boolean>;
|
|
146
|
+
readonly emitInfo?: (msg: string) => void;
|
|
147
|
+
readonly configDir?: string;
|
|
148
|
+
/**
|
|
149
|
+
* Override `process.argv[1]` for the background auto-update path's pm
|
|
150
|
+
* detection. Production callers leave this unset and the helper reads
|
|
151
|
+
* argv directly.
|
|
152
|
+
*/
|
|
153
|
+
readonly entrypoint?: string;
|
|
154
|
+
}
|
|
155
|
+
export declare const make: (deps?: UpdateNotifierDeps) => UpdateNotifierService;
|
|
156
|
+
declare const UpdateNotifier_base: Context.TagClass<UpdateNotifier, "UpdateNotifier", UpdateNotifierService>;
|
|
157
|
+
export declare class UpdateNotifier extends UpdateNotifier_base {
|
|
158
|
+
static Default: Layer.Layer<UpdateNotifier>;
|
|
159
|
+
}
|
|
160
|
+
/** Build a custom UpdateNotifier layer (tests). */
|
|
161
|
+
export declare const layer: (deps?: UpdateNotifierDeps) => Layer.Layer<UpdateNotifier>;
|
|
162
|
+
export {};
|