@mx-space/cli 0.15.0 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/{Lexical.dev-Cck4n26y.mjs → Lexical.dev-BSvx45_E.mjs} +127 -94
- package/dist/{Lexical.node-D6wf2D5M.mjs → Lexical.node-kAh5GM2n.mjs} +1 -1
- package/dist/{Lexical.prod-DCwS1oTq.mjs → Lexical.prod-Bqwgb3ez.mjs} +4 -2
- package/dist/{LexicalClipboard.dev-CMkPHV7O.mjs → LexicalClipboard.dev-BWU3KXIa.mjs} +18 -14
- package/dist/{LexicalClipboard.node-m4nZ7IYw.mjs → LexicalClipboard.node-BygAdNdF.mjs} +1 -1
- package/dist/{LexicalClipboard.prod-B_rN1vE1.mjs → LexicalClipboard.prod-BtMuKNyT.mjs} +10 -10
- package/dist/{LexicalCodeCore.dev-DyJw3i8V.mjs → LexicalCodeCore.dev-CD2xgvDs.mjs} +43 -25
- package/dist/{LexicalCodeCore.prod-DPXLHQLF.mjs → LexicalCodeCore.prod-Bl6FFMc7.mjs} +6 -6
- package/dist/{LexicalDragon.dev-ZkNfMwrE.mjs → LexicalDragon.dev-BwdYhm4K.mjs} +2 -2
- package/dist/{LexicalDragon.node-Ds9oLUFh.mjs → LexicalDragon.node-CpJhkCVV.mjs} +1 -1
- package/dist/{LexicalDragon.prod-B58ic2av.mjs → LexicalDragon.prod-CvXmWwo1.mjs} +2 -2
- package/dist/{LexicalExtension.dev-DvwHs1Xv.mjs → LexicalExtension.dev-LcRLXI5Z.mjs} +25 -13
- package/dist/{LexicalExtension.node-5OymZQfy.mjs → LexicalExtension.node-BwJt2LXV.mjs} +1 -1
- package/dist/{LexicalExtension.prod-Ce0T5smQ.mjs → LexicalExtension.prod-lg8_33-H.mjs} +16 -13
- package/dist/{LexicalHeadless.dev-DA0WldSR.mjs → LexicalHeadless.dev-BeUbKBes.mjs} +1 -1
- package/dist/{LexicalHeadless.prod-1kQgKB6c.mjs → LexicalHeadless.prod-4gbIA8HM.mjs} +1 -1
- package/dist/{LexicalHtml.dev-BDB7CUrx.mjs → LexicalHtml.dev-BLdZWTCJ.mjs} +20 -14
- package/dist/{LexicalHtml.node-DpVNt7It.mjs → LexicalHtml.node-BeuJMvvt.mjs} +1 -1
- package/dist/{LexicalHtml.prod-HkxM5scw.mjs → LexicalHtml.prod-CHUyCocN.mjs} +4 -4
- package/dist/{LexicalLink.dev-C5zNJlrm.mjs → LexicalLink.dev-DgsFRqw0.mjs} +28 -21
- package/dist/{LexicalLink.prod-Bkt9hQAt.mjs → LexicalLink.prod-CkXkeKY2.mjs} +6 -5
- package/dist/{LexicalList.dev-B7VgME-m.mjs → LexicalList.dev-OOms3kQi.mjs} +4 -4
- package/dist/{LexicalList.prod-B8c7TDjH.mjs → LexicalList.prod-DzMBeqHn.mjs} +4 -4
- package/dist/{LexicalMarkdown.dev-B5z9kLbV.mjs → LexicalMarkdown.dev-DJLKbZtD.mjs} +40 -29
- package/dist/{LexicalMarkdown.prod-wKzw7FFH.mjs → LexicalMarkdown.prod-Cp21kDCU.mjs} +10 -7
- package/dist/{LexicalRichText.dev-CUd6Li5F.mjs → LexicalRichText.dev-0rkAGjUf.mjs} +15 -11
- package/dist/{LexicalRichText.node-BKfaQ-CH.mjs → LexicalRichText.node-Cd-BySPE.mjs} +4 -4
- package/dist/{LexicalRichText.prod-SBewjJHx.mjs → LexicalRichText.prod-DTQiEr8C.mjs} +17 -11
- package/dist/{LexicalSelection.dev-D27JOCqj.mjs → LexicalSelection.dev-Bi0VlUEv.mjs} +28 -24
- package/dist/{LexicalSelection.node-DBEwPjBu.mjs → LexicalSelection.node-t2U46EF_.mjs} +1 -1
- package/dist/{LexicalSelection.prod-OaYhXHOL.mjs → LexicalSelection.prod-CrFG111g.mjs} +2 -2
- package/dist/{LexicalTable.dev-6IFFOAE0.mjs → LexicalTable.dev-D-sFhO-o.mjs} +33 -28
- package/dist/{LexicalTable.prod-2CaLZ7fH.mjs → LexicalTable.prod-DwYaa_dN.mjs} +10 -9
- package/dist/{LexicalUtils.dev-DJA7J_7v.mjs → LexicalUtils.dev-Q2q3-UDM.mjs} +8 -5
- package/dist/{LexicalUtils.node-Df9oPTlA.mjs → LexicalUtils.node-Dl7OvqJV.mjs} +1 -1
- package/dist/{LexicalUtils.prod-Bb7V4Ewg.mjs → LexicalUtils.prod-CBnq_iEV.mjs} +7 -6
- package/dist/bin/mxs.mjs +1 -1
- package/dist/esm-CNZ7kdTg.mjs +2 -0
- package/dist/{esm-DLzrv7gD.mjs → esm-ZXjJmLEC.mjs} +257 -260
- package/dist/index.mjs +1 -1
- package/dist/{mxs-BIRW5Axj.mjs → mxs-DC9zR3f2.mjs} +759 -539
- 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 +19 -4
- package/dist/vendor/litexml/litexml-html-preview-client.css +98 -13
- package/dist/vendor/litexml/litexml-html-preview-client.js +5794 -4976
- package/dist/vendor/litexml/style.css +5 -5
- package/package.json +29 -26
- package/skills/safety.md +1 -1
- package/LICENSE +0 -33
- package/dist/esm-CDcJmHkG.mjs +0 -2
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { FileSystem } from '@effect/platform';
|
|
2
|
+
import { Effect } from 'effect';
|
|
3
|
+
import { Lexical } from '../services/Lexical';
|
|
4
|
+
import { readContentSpec, readJsonSpec, readStdin } from './content-spec';
|
|
5
|
+
import { coerceMeta, parseEnvelope, } from './envelope';
|
|
6
|
+
import { ValidationFailed, ValidationXml } from './errors';
|
|
7
|
+
const messageOf = (err) => {
|
|
8
|
+
if (err instanceof Error)
|
|
9
|
+
return err.message;
|
|
10
|
+
if (typeof err === 'string')
|
|
11
|
+
return err;
|
|
12
|
+
return String(err);
|
|
13
|
+
};
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Envelope loading
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
export const loadEnvelopeIfAny = (filePath, kind) => Effect.gen(function* () {
|
|
18
|
+
if (!filePath)
|
|
19
|
+
return null;
|
|
20
|
+
let xml;
|
|
21
|
+
if (filePath === '-' || filePath === 'stdin' || filePath === '/dev/stdin') {
|
|
22
|
+
xml = yield* readStdin;
|
|
23
|
+
}
|
|
24
|
+
else if (filePath.startsWith('file=')) {
|
|
25
|
+
const src = yield* readContentSpec(filePath);
|
|
26
|
+
xml = src?.text ?? '';
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const fs = yield* FileSystem.FileSystem;
|
|
30
|
+
xml = yield* fs.readFileString(filePath).pipe(Effect.mapError((err) => new ValidationFailed({
|
|
31
|
+
message: `failed to read ${filePath}: ${messageOf(err)}`,
|
|
32
|
+
})));
|
|
33
|
+
}
|
|
34
|
+
return yield* parseEnvelopeEffect(xml, kind);
|
|
35
|
+
});
|
|
36
|
+
// `parseEnvelope` throws `ValidationXml` — wrap in Effect.try so the error
|
|
37
|
+
// surfaces through the channel.
|
|
38
|
+
const parseEnvelopeEffect = (xml, kind) => Effect.try({
|
|
39
|
+
try: () => parseEnvelope(xml, kind),
|
|
40
|
+
catch: (err) => err instanceof ValidationXml
|
|
41
|
+
? err
|
|
42
|
+
: new ValidationXml({
|
|
43
|
+
message: messageOf(err),
|
|
44
|
+
cause: err,
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Post payload
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
export const buildPostPayload = (flags) => Effect.gen(function* () {
|
|
51
|
+
const envelope = yield* loadEnvelopeIfAny(flags.file, 'post');
|
|
52
|
+
const envMeta = envelope ? coerceMeta(envelope.meta) : {};
|
|
53
|
+
const payload = {};
|
|
54
|
+
const title = flags.title ?? envMeta.title;
|
|
55
|
+
if (title !== undefined)
|
|
56
|
+
payload.title = title;
|
|
57
|
+
const slug = flags.slug ?? envMeta.slug;
|
|
58
|
+
if (slug !== undefined)
|
|
59
|
+
payload.slug = slug;
|
|
60
|
+
if (flags.category)
|
|
61
|
+
payload.__categoryName = flags.category;
|
|
62
|
+
else if (envMeta.category)
|
|
63
|
+
payload.__categoryName = envMeta.category;
|
|
64
|
+
const summary = flags.summary ?? envMeta.summary;
|
|
65
|
+
if (summary !== undefined)
|
|
66
|
+
payload.summary = summary;
|
|
67
|
+
const state = flags.state ?? envMeta.state;
|
|
68
|
+
if (state !== undefined)
|
|
69
|
+
payload.isPublished = state === 'publish';
|
|
70
|
+
const tags = flags.tags ?? envMeta.tags;
|
|
71
|
+
if (tags !== undefined)
|
|
72
|
+
payload.tags = tags;
|
|
73
|
+
const copyright = flags.copyright ?? envMeta.copyright;
|
|
74
|
+
if (copyright !== undefined)
|
|
75
|
+
payload.copyright = copyright;
|
|
76
|
+
const pin = flags.pin ?? envMeta.pin;
|
|
77
|
+
if (pin !== undefined)
|
|
78
|
+
payload.pin = pin;
|
|
79
|
+
const pinOrder = flags.pinOrder ?? envMeta.pinOrder;
|
|
80
|
+
if (pinOrder !== undefined)
|
|
81
|
+
payload.pinOrder = pinOrder;
|
|
82
|
+
const related = flags.related ?? envMeta.related;
|
|
83
|
+
if (related !== undefined)
|
|
84
|
+
payload.relatedId = related;
|
|
85
|
+
if (flags.meta !== undefined) {
|
|
86
|
+
payload.meta = yield* readJsonSpec(flags.meta);
|
|
87
|
+
}
|
|
88
|
+
const format = flags.format ?? envMeta.format ?? 'lexical';
|
|
89
|
+
payload.contentFormat = format;
|
|
90
|
+
const contentSrc = yield* resolveContent(flags.content, envelope, format);
|
|
91
|
+
if (contentSrc) {
|
|
92
|
+
payload.content = contentSrc.content;
|
|
93
|
+
payload.text = contentSrc.text;
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
payload,
|
|
97
|
+
envelopeMeta: envMeta,
|
|
98
|
+
contentSource: contentSrc?.origin ?? 'none',
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Note payload
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
export const buildNotePayload = (flags) => Effect.gen(function* () {
|
|
105
|
+
const envelope = yield* loadEnvelopeIfAny(flags.file, 'note');
|
|
106
|
+
const envMeta = envelope ? coerceMeta(envelope.meta) : {};
|
|
107
|
+
const payload = {};
|
|
108
|
+
const title = flags.title ?? envMeta.title ?? '无题';
|
|
109
|
+
payload.title = title;
|
|
110
|
+
const slug = flags.slug ?? envMeta.slug;
|
|
111
|
+
if (slug !== undefined)
|
|
112
|
+
payload.slug = slug;
|
|
113
|
+
if (flags.topic)
|
|
114
|
+
payload.__topicName = flags.topic;
|
|
115
|
+
else if (envMeta.topic)
|
|
116
|
+
payload.__topicName = envMeta.topic;
|
|
117
|
+
const state = flags.state ?? envMeta.state;
|
|
118
|
+
if (state !== undefined)
|
|
119
|
+
payload.isPublished = state === 'publish';
|
|
120
|
+
const mood = flags.mood ?? envMeta.mood;
|
|
121
|
+
if (mood !== undefined)
|
|
122
|
+
payload.mood = mood;
|
|
123
|
+
const weather = flags.weather ?? envMeta.weather;
|
|
124
|
+
if (weather !== undefined)
|
|
125
|
+
payload.weather = weather;
|
|
126
|
+
const publicAt = flags.publicAt ?? envMeta.publicAt;
|
|
127
|
+
if (publicAt !== undefined)
|
|
128
|
+
payload.publicAt = publicAt;
|
|
129
|
+
const password = flags.password ?? envMeta.password;
|
|
130
|
+
if (password !== undefined)
|
|
131
|
+
payload.password = password;
|
|
132
|
+
const bookmark = flags.bookmark ?? envMeta.bookmark;
|
|
133
|
+
if (bookmark !== undefined)
|
|
134
|
+
payload.bookmark = bookmark;
|
|
135
|
+
const location = flags.location ?? envMeta.location;
|
|
136
|
+
if (location !== undefined)
|
|
137
|
+
payload.location = location;
|
|
138
|
+
if (flags.coords) {
|
|
139
|
+
const [latRaw, lngRaw] = flags.coords.split(',').map((s) => s.trim());
|
|
140
|
+
const lat = Number(latRaw);
|
|
141
|
+
const lng = Number(lngRaw);
|
|
142
|
+
if (Number.isNaN(lat) || Number.isNaN(lng)) {
|
|
143
|
+
return yield* Effect.fail(new ValidationFailed({
|
|
144
|
+
message: `invalid --coords value "${flags.coords}", expected "lat,lng"`,
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
payload.coordinates = { latitude: lat, longitude: lng };
|
|
148
|
+
}
|
|
149
|
+
if (flags.images !== undefined) {
|
|
150
|
+
payload.images = yield* readJsonSpec(flags.images);
|
|
151
|
+
}
|
|
152
|
+
if (flags.meta !== undefined) {
|
|
153
|
+
payload.meta = yield* readJsonSpec(flags.meta);
|
|
154
|
+
}
|
|
155
|
+
const format = flags.format ?? envMeta.format ?? 'lexical';
|
|
156
|
+
payload.contentFormat = format;
|
|
157
|
+
const contentSrc = yield* resolveContent(flags.content, envelope, format);
|
|
158
|
+
if (contentSrc) {
|
|
159
|
+
payload.content = contentSrc.content;
|
|
160
|
+
payload.text = contentSrc.text;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
payload,
|
|
164
|
+
envelopeMeta: envMeta,
|
|
165
|
+
contentSource: contentSrc?.origin ?? 'none',
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
// Page payload — exported for W2-B's page commands to consume.
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
export const buildPagePayload = (flags) => Effect.gen(function* () {
|
|
172
|
+
// Pages reuse the `<mxpost>` envelope shape (per legacy behavior).
|
|
173
|
+
const envelope = yield* loadEnvelopeIfAny(flags.file, 'post');
|
|
174
|
+
const envMeta = envelope ? coerceMeta(envelope.meta) : {};
|
|
175
|
+
const payload = {};
|
|
176
|
+
const title = flags.title ?? envMeta.title;
|
|
177
|
+
if (title !== undefined)
|
|
178
|
+
payload.title = title;
|
|
179
|
+
const slug = flags.slug ?? envMeta.slug;
|
|
180
|
+
if (slug !== undefined)
|
|
181
|
+
payload.slug = slug;
|
|
182
|
+
const subtitle = flags.subtitle ?? envMeta.subtitle;
|
|
183
|
+
if (subtitle !== undefined)
|
|
184
|
+
payload.subtitle = subtitle;
|
|
185
|
+
const order = flags.order ?? envMeta.order;
|
|
186
|
+
if (order !== undefined)
|
|
187
|
+
payload.order = order;
|
|
188
|
+
if (flags.meta !== undefined) {
|
|
189
|
+
payload.meta = yield* readJsonSpec(flags.meta);
|
|
190
|
+
}
|
|
191
|
+
const format = flags.format ?? envMeta.format ?? 'lexical';
|
|
192
|
+
payload.contentFormat = format;
|
|
193
|
+
const contentSrc = yield* resolveContent(flags.content, envelope, format);
|
|
194
|
+
if (contentSrc) {
|
|
195
|
+
payload.content = contentSrc.content;
|
|
196
|
+
payload.text = contentSrc.text;
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
payload,
|
|
200
|
+
envelopeMeta: envMeta,
|
|
201
|
+
contentSource: contentSrc?.origin ?? 'none',
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
const resolveContent = (flagSpec, envelope, format) => Effect.gen(function* () {
|
|
205
|
+
let source = null;
|
|
206
|
+
if (flagSpec !== undefined) {
|
|
207
|
+
const src = yield* readContentSpec(flagSpec);
|
|
208
|
+
if (src)
|
|
209
|
+
source = { text: src.text, origin: 'flag' };
|
|
210
|
+
}
|
|
211
|
+
else if (envelope) {
|
|
212
|
+
source = { text: envelope.contentXml, origin: 'envelope' };
|
|
213
|
+
}
|
|
214
|
+
if (!source)
|
|
215
|
+
return null;
|
|
216
|
+
if (format === 'markdown') {
|
|
217
|
+
return { content: source.text, text: source.text, origin: source.origin };
|
|
218
|
+
}
|
|
219
|
+
if (source.text.length === 0) {
|
|
220
|
+
return yield* Effect.fail(new ValidationFailed({
|
|
221
|
+
message: 'content is required when contentFormat is lexical',
|
|
222
|
+
details: { issues: [{ path: ['content'], message: 'required' }] },
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
const lexical = yield* Lexical;
|
|
226
|
+
const state = yield* lexical.litexmlToPayload(source.text);
|
|
227
|
+
const lexicalJson = JSON.stringify(state);
|
|
228
|
+
const text = yield* lexical.lexicalJsonToMarkdown(state);
|
|
229
|
+
return { content: lexicalJson, text, origin: source.origin };
|
|
230
|
+
});
|
|
231
|
+
export const emptyPayload = (format) => Effect.gen(function* () {
|
|
232
|
+
if (format === 'markdown')
|
|
233
|
+
return { content: '', text: '' };
|
|
234
|
+
const lexical = yield* Lexical;
|
|
235
|
+
const state = yield* lexical.emptyState;
|
|
236
|
+
return { content: JSON.stringify(state), text: '' };
|
|
237
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for preflight exemptions (the `@effect/cli`
|
|
3
|
+
* equivalent of the v0.2.x `preAction` hook in `src/bin/mxs.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Any subcommand registered in `cli/*` MUST match the names declared here —
|
|
6
|
+
* this is the contract. Ported from `src/core/preaction-guards.ts`.
|
|
7
|
+
*/
|
|
8
|
+
/** Parent command names whose entire subtree is exempt from the none_active guard. */
|
|
9
|
+
export declare const PREFLIGHT_EXEMPT_PARENTS: ReadonlySet<string>;
|
|
10
|
+
export interface ExemptCommand {
|
|
11
|
+
readonly parent: string;
|
|
12
|
+
readonly name: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Individual (parent, name) pairs that are exempt regardless of profile state.
|
|
16
|
+
* `auth login` is included unconditionally so a fresh install can bootstrap.
|
|
17
|
+
*/
|
|
18
|
+
export declare const PREFLIGHT_EXEMPT_COMMANDS: readonly ExemptCommand[];
|
|
19
|
+
/**
|
|
20
|
+
* Top-level command names that are exempt from the profile.none_active guard.
|
|
21
|
+
* Used for commands that should work without a configured server (e.g. `mxs update`).
|
|
22
|
+
*/
|
|
23
|
+
export declare const PREFLIGHT_EXEMPT_TOPLEVEL: ReadonlySet<string>;
|
|
24
|
+
export interface GuardInput {
|
|
25
|
+
readonly profileFlag: string | undefined;
|
|
26
|
+
readonly apiUrlFlag: string | undefined;
|
|
27
|
+
readonly envProfile: string | undefined;
|
|
28
|
+
readonly envApiUrl: string | undefined;
|
|
29
|
+
readonly currentProfile: string | null;
|
|
30
|
+
readonly parentName: string;
|
|
31
|
+
readonly commandName: string;
|
|
32
|
+
}
|
|
33
|
+
/** Returns true if the command is exempt from the profile.none_active guard. */
|
|
34
|
+
export declare function isPreflightExempt(input: GuardInput): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Returns true if the guard should throw profile.none_active.
|
|
37
|
+
* A resolved profile, any URL override, or an exempt command all suppress it.
|
|
38
|
+
*/
|
|
39
|
+
export declare function requiresActiveProfile(input: GuardInput): boolean;
|
|
40
|
+
/** Set of valid top-level subcommand names. Used to walk `process.argv`. */
|
|
41
|
+
export declare const TOPLEVEL_COMMANDS: ReadonlySet<string>;
|
|
42
|
+
export interface InvokedCommand {
|
|
43
|
+
readonly parentName: string;
|
|
44
|
+
readonly commandName: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Inspect argv to determine which command is being invoked. Skips known
|
|
48
|
+
* global flags so `mxs --profile foo post list` resolves to (`post`,`list`).
|
|
49
|
+
*
|
|
50
|
+
* Returns an empty pair when no subcommand is on argv (e.g. `mxs --help`).
|
|
51
|
+
*/
|
|
52
|
+
export declare function detectInvokedCommand(argv: readonly string[], knownGlobalFlags?: ReadonlySet<string>): InvokedCommand;
|
|
53
|
+
/** Known global flag names; used by `detectInvokedCommand` to skip their values. */
|
|
54
|
+
export declare const DEFAULT_KNOWN_GLOBAL_FLAGS: ReadonlySet<string>;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for preflight exemptions (the `@effect/cli`
|
|
3
|
+
* equivalent of the v0.2.x `preAction` hook in `src/bin/mxs.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Any subcommand registered in `cli/*` MUST match the names declared here —
|
|
6
|
+
* this is the contract. Ported from `src/core/preaction-guards.ts`.
|
|
7
|
+
*/
|
|
8
|
+
/** Parent command names whose entire subtree is exempt from the none_active guard. */
|
|
9
|
+
export const PREFLIGHT_EXEMPT_PARENTS = new Set([
|
|
10
|
+
'profile',
|
|
11
|
+
'skill',
|
|
12
|
+
]);
|
|
13
|
+
/**
|
|
14
|
+
* Individual (parent, name) pairs that are exempt regardless of profile state.
|
|
15
|
+
* `auth login` is included unconditionally so a fresh install can bootstrap.
|
|
16
|
+
*/
|
|
17
|
+
export const PREFLIGHT_EXEMPT_COMMANDS = [
|
|
18
|
+
{ parent: 'auth', name: 'login' },
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Top-level command names that are exempt from the profile.none_active guard.
|
|
22
|
+
* Used for commands that should work without a configured server (e.g. `mxs update`).
|
|
23
|
+
*/
|
|
24
|
+
export const PREFLIGHT_EXEMPT_TOPLEVEL = new Set([
|
|
25
|
+
'update',
|
|
26
|
+
'skill',
|
|
27
|
+
'preview',
|
|
28
|
+
]);
|
|
29
|
+
/** Returns true if the command is exempt from the profile.none_active guard. */
|
|
30
|
+
export function isPreflightExempt(input) {
|
|
31
|
+
return (PREFLIGHT_EXEMPT_PARENTS.has(input.parentName) ||
|
|
32
|
+
input.commandName === 'profile' ||
|
|
33
|
+
PREFLIGHT_EXEMPT_TOPLEVEL.has(input.commandName) ||
|
|
34
|
+
PREFLIGHT_EXEMPT_COMMANDS.some((c) => c.parent === input.parentName && c.name === input.commandName));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Returns true if the guard should throw profile.none_active.
|
|
38
|
+
* A resolved profile, any URL override, or an exempt command all suppress it.
|
|
39
|
+
*/
|
|
40
|
+
export function requiresActiveProfile(input) {
|
|
41
|
+
if (input.profileFlag || input.envProfile)
|
|
42
|
+
return false;
|
|
43
|
+
if (input.apiUrlFlag || input.envApiUrl)
|
|
44
|
+
return false;
|
|
45
|
+
if (input.currentProfile)
|
|
46
|
+
return false;
|
|
47
|
+
if (isPreflightExempt(input))
|
|
48
|
+
return false;
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// argv inspection — derive the (parentName, commandName) being invoked.
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
/** Set of valid top-level subcommand names. Used to walk `process.argv`. */
|
|
55
|
+
export const TOPLEVEL_COMMANDS = new Set([
|
|
56
|
+
'auth',
|
|
57
|
+
'profile',
|
|
58
|
+
'post',
|
|
59
|
+
'note',
|
|
60
|
+
'page',
|
|
61
|
+
'category',
|
|
62
|
+
'topic',
|
|
63
|
+
'config',
|
|
64
|
+
'skill',
|
|
65
|
+
'preview',
|
|
66
|
+
'update',
|
|
67
|
+
]);
|
|
68
|
+
/**
|
|
69
|
+
* Inspect argv to determine which command is being invoked. Skips known
|
|
70
|
+
* global flags so `mxs --profile foo post list` resolves to (`post`,`list`).
|
|
71
|
+
*
|
|
72
|
+
* Returns an empty pair when no subcommand is on argv (e.g. `mxs --help`).
|
|
73
|
+
*/
|
|
74
|
+
export function detectInvokedCommand(argv, knownGlobalFlags = DEFAULT_KNOWN_GLOBAL_FLAGS) {
|
|
75
|
+
const positional = [];
|
|
76
|
+
// argv[0] = node, argv[1] = script — skip both.
|
|
77
|
+
for (let i = 2; i < argv.length; i++) {
|
|
78
|
+
const arg = argv[i];
|
|
79
|
+
if (arg === '--')
|
|
80
|
+
break;
|
|
81
|
+
if (arg.startsWith('--')) {
|
|
82
|
+
const eq = arg.indexOf('=');
|
|
83
|
+
const name = eq === -1 ? arg : arg.slice(0, eq);
|
|
84
|
+
if (knownGlobalFlags.has(name) &&
|
|
85
|
+
eq === -1 &&
|
|
86
|
+
FLAG_TAKES_VALUE.has(name)) {
|
|
87
|
+
i++; // skip its value
|
|
88
|
+
}
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (arg.startsWith('-')) {
|
|
92
|
+
if (arg === '-q')
|
|
93
|
+
continue;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
positional.push(arg);
|
|
97
|
+
}
|
|
98
|
+
if (positional.length === 0)
|
|
99
|
+
return { parentName: '', commandName: '' };
|
|
100
|
+
const first = positional[0];
|
|
101
|
+
if (!TOPLEVEL_COMMANDS.has(first))
|
|
102
|
+
return { parentName: '', commandName: first };
|
|
103
|
+
if (positional.length === 1)
|
|
104
|
+
return { parentName: '', commandName: first };
|
|
105
|
+
return { parentName: first, commandName: positional[1] };
|
|
106
|
+
}
|
|
107
|
+
/** Known global flag names; used by `detectInvokedCommand` to skip their values. */
|
|
108
|
+
export const DEFAULT_KNOWN_GLOBAL_FLAGS = new Set([
|
|
109
|
+
'--json',
|
|
110
|
+
'--output',
|
|
111
|
+
'--api-url',
|
|
112
|
+
'--token',
|
|
113
|
+
'--api-key',
|
|
114
|
+
'--lang',
|
|
115
|
+
'--quiet',
|
|
116
|
+
'--verbose',
|
|
117
|
+
'--dry-run',
|
|
118
|
+
'--profile',
|
|
119
|
+
'--help',
|
|
120
|
+
'--version',
|
|
121
|
+
]);
|
|
122
|
+
/** Subset of global flags that take a value. */
|
|
123
|
+
const FLAG_TAKES_VALUE = new Set([
|
|
124
|
+
'--output',
|
|
125
|
+
'--api-url',
|
|
126
|
+
'--token',
|
|
127
|
+
'--api-key',
|
|
128
|
+
'--lang',
|
|
129
|
+
'--profile',
|
|
130
|
+
]);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { FiberRef } from 'effect';
|
|
2
|
+
import type { OutputMode } from '../services/Renderer';
|
|
3
|
+
export interface GlobalFlags {
|
|
4
|
+
readonly json: boolean;
|
|
5
|
+
readonly output: OutputMode;
|
|
6
|
+
readonly apiUrl?: string;
|
|
7
|
+
readonly token?: string;
|
|
8
|
+
readonly apiKey?: string;
|
|
9
|
+
readonly lang?: string;
|
|
10
|
+
readonly quiet: boolean;
|
|
11
|
+
readonly verbose: boolean;
|
|
12
|
+
readonly dryRun: boolean;
|
|
13
|
+
readonly profile?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const defaultGlobalFlags: GlobalFlags;
|
|
16
|
+
/**
|
|
17
|
+
* Walk `argv` once, extracting recognized global flags and returning both the
|
|
18
|
+
* resolved `GlobalFlags` and the residual `argv` (with those flags removed).
|
|
19
|
+
*
|
|
20
|
+
* Unknown flags pass through untouched — `@effect/cli` will surface them at
|
|
21
|
+
* the proper command layer.
|
|
22
|
+
*
|
|
23
|
+
* Notes:
|
|
24
|
+
* - Both `--key value` and `--key=value` are supported for value flags.
|
|
25
|
+
* - argv[0] (node) and argv[1] (script) pass through unchanged.
|
|
26
|
+
* - We stop processing global flags at the first `--` (POSIX convention).
|
|
27
|
+
*/
|
|
28
|
+
export declare const parseGlobalFlags: (argv: readonly string[]) => {
|
|
29
|
+
readonly flags: GlobalFlags;
|
|
30
|
+
readonly rest: readonly string[];
|
|
31
|
+
};
|
|
32
|
+
export declare const currentDryRun: FiberRef.FiberRef<boolean>;
|
|
33
|
+
export declare const currentProfileFlag: FiberRef.FiberRef<string | undefined>;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { FiberRef } from 'effect';
|
|
2
|
+
export const defaultGlobalFlags = {
|
|
3
|
+
json: false,
|
|
4
|
+
output: 'readable',
|
|
5
|
+
quiet: false,
|
|
6
|
+
verbose: false,
|
|
7
|
+
dryRun: false,
|
|
8
|
+
};
|
|
9
|
+
const VALID_OUTPUT_MODES = new Set([
|
|
10
|
+
'pretty-json',
|
|
11
|
+
'json',
|
|
12
|
+
'readable',
|
|
13
|
+
'llm',
|
|
14
|
+
'xml',
|
|
15
|
+
]);
|
|
16
|
+
const isOutputMode = (s) => VALID_OUTPUT_MODES.has(s);
|
|
17
|
+
/** Long-name flags that take a value (consume the next argv slot if no `=`). */
|
|
18
|
+
const VALUE_FLAGS = new Set([
|
|
19
|
+
'--output',
|
|
20
|
+
'--api-url',
|
|
21
|
+
'--token',
|
|
22
|
+
'--api-key',
|
|
23
|
+
'--lang',
|
|
24
|
+
'--profile',
|
|
25
|
+
]);
|
|
26
|
+
/** Long-name boolean flags (no value). */
|
|
27
|
+
const BOOL_FLAGS = new Set([
|
|
28
|
+
'--json',
|
|
29
|
+
'--quiet',
|
|
30
|
+
'--verbose',
|
|
31
|
+
'--dry-run',
|
|
32
|
+
]);
|
|
33
|
+
/** Aliases handled separately because they share the leading dash. */
|
|
34
|
+
const SHORT_BOOL_FLAGS = {
|
|
35
|
+
'-q': 'quiet',
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Walk `argv` once, extracting recognized global flags and returning both the
|
|
39
|
+
* resolved `GlobalFlags` and the residual `argv` (with those flags removed).
|
|
40
|
+
*
|
|
41
|
+
* Unknown flags pass through untouched — `@effect/cli` will surface them at
|
|
42
|
+
* the proper command layer.
|
|
43
|
+
*
|
|
44
|
+
* Notes:
|
|
45
|
+
* - Both `--key value` and `--key=value` are supported for value flags.
|
|
46
|
+
* - argv[0] (node) and argv[1] (script) pass through unchanged.
|
|
47
|
+
* - We stop processing global flags at the first `--` (POSIX convention).
|
|
48
|
+
*/
|
|
49
|
+
export const parseGlobalFlags = (argv) => {
|
|
50
|
+
const rest = [];
|
|
51
|
+
let json = false;
|
|
52
|
+
let output = 'readable';
|
|
53
|
+
let apiUrl;
|
|
54
|
+
let token;
|
|
55
|
+
let apiKey;
|
|
56
|
+
let lang;
|
|
57
|
+
let quiet = false;
|
|
58
|
+
let verbose = false;
|
|
59
|
+
let dryRun = false;
|
|
60
|
+
let profile;
|
|
61
|
+
// Preserve argv[0] (node) and argv[1] (script).
|
|
62
|
+
if (argv.length > 0)
|
|
63
|
+
rest.push(argv[0]);
|
|
64
|
+
if (argv.length > 1)
|
|
65
|
+
rest.push(argv[1]);
|
|
66
|
+
let passThrough = false;
|
|
67
|
+
for (let i = 2; i < argv.length; i++) {
|
|
68
|
+
const arg = argv[i];
|
|
69
|
+
if (passThrough) {
|
|
70
|
+
rest.push(arg);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (arg === '--') {
|
|
74
|
+
passThrough = true;
|
|
75
|
+
rest.push(arg);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (arg.startsWith('--')) {
|
|
79
|
+
const eqIdx = arg.indexOf('=');
|
|
80
|
+
const name = eqIdx === -1 ? arg : arg.slice(0, eqIdx);
|
|
81
|
+
const inlineValue = eqIdx === -1 ? undefined : arg.slice(eqIdx + 1);
|
|
82
|
+
if (BOOL_FLAGS.has(name)) {
|
|
83
|
+
if (name === '--json')
|
|
84
|
+
json = true;
|
|
85
|
+
else if (name === '--quiet')
|
|
86
|
+
quiet = true;
|
|
87
|
+
else if (name === '--verbose')
|
|
88
|
+
verbose = true;
|
|
89
|
+
else if (name === '--dry-run')
|
|
90
|
+
dryRun = true;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (VALUE_FLAGS.has(name)) {
|
|
94
|
+
const value = inlineValue !== undefined
|
|
95
|
+
? inlineValue
|
|
96
|
+
: i + 1 < argv.length
|
|
97
|
+
? argv[++i]
|
|
98
|
+
: undefined;
|
|
99
|
+
if (value === undefined)
|
|
100
|
+
continue;
|
|
101
|
+
if (name === '--output') {
|
|
102
|
+
if (isOutputMode(value))
|
|
103
|
+
output = value;
|
|
104
|
+
}
|
|
105
|
+
else if (name === '--api-url') {
|
|
106
|
+
apiUrl = value;
|
|
107
|
+
}
|
|
108
|
+
else if (name === '--token') {
|
|
109
|
+
token = value;
|
|
110
|
+
}
|
|
111
|
+
else if (name === '--api-key') {
|
|
112
|
+
apiKey = value;
|
|
113
|
+
}
|
|
114
|
+
else if (name === '--lang') {
|
|
115
|
+
lang = value;
|
|
116
|
+
}
|
|
117
|
+
else if (name === '--profile') {
|
|
118
|
+
profile = value;
|
|
119
|
+
}
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
// Unknown long flag → pass through.
|
|
123
|
+
rest.push(arg);
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
// Short flags.
|
|
127
|
+
if (arg.startsWith('-') && arg.length > 1 && !arg.startsWith('--')) {
|
|
128
|
+
const target = SHORT_BOOL_FLAGS[arg];
|
|
129
|
+
if (target === 'quiet') {
|
|
130
|
+
quiet = true;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
rest.push(arg);
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
rest.push(arg);
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
flags: {
|
|
140
|
+
json,
|
|
141
|
+
output: json ? 'json' : output,
|
|
142
|
+
apiUrl,
|
|
143
|
+
token,
|
|
144
|
+
apiKey,
|
|
145
|
+
lang,
|
|
146
|
+
quiet,
|
|
147
|
+
verbose,
|
|
148
|
+
dryRun,
|
|
149
|
+
profile,
|
|
150
|
+
},
|
|
151
|
+
rest,
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// FiberRef: --dry-run. Read by `Api.layer({...})` at construction time;
|
|
156
|
+
// surfaced as a FiberRef as well so individual handlers can introspect when
|
|
157
|
+
// they need bespoke dry-run behaviour (none today; placeholder for v2/v3).
|
|
158
|
+
// ---------------------------------------------------------------------------
|
|
159
|
+
export const currentDryRun = FiberRef.unsafeMake(false);
|
|
160
|
+
// ---------------------------------------------------------------------------
|
|
161
|
+
// FiberRef: --profile. The flag is already threaded into `Api.layer` via
|
|
162
|
+
// `StoreOverrides`, but commands that talk to the Profile/Config services
|
|
163
|
+
// directly (notably `auth login`, which creates profiles) need to read it
|
|
164
|
+
// without re-parsing argv. Set once in `bin/mxs.ts` after `parseGlobalFlags`.
|
|
165
|
+
// ---------------------------------------------------------------------------
|
|
166
|
+
export const currentProfileFlag = FiberRef.unsafeMake(undefined);
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
/**
|
|
3
|
+
* Wire-format error envelope emitted by `Renderer.emitError` (and consumed
|
|
4
|
+
* by tests as a regression oracle). Mirrors `MxsError.toJSON()` from the
|
|
5
|
+
* v0.2.x core, plus the `tagToCode` table in `domain/errors.ts`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ErrorEnvelopeSchema: Schema.Struct<{
|
|
8
|
+
ok: Schema.Literal<[false]>;
|
|
9
|
+
code: typeof Schema.String;
|
|
10
|
+
message: typeof Schema.String;
|
|
11
|
+
details: Schema.optional<typeof Schema.Unknown>;
|
|
12
|
+
hint: Schema.optional<typeof Schema.String>;
|
|
13
|
+
}>;
|
|
14
|
+
export type ErrorEnvelope = Schema.Schema.Type<typeof ErrorEnvelopeSchema>;
|
|
15
|
+
/**
|
|
16
|
+
* Server-side pagination block. mx-core servers emit `page/size/total` —
|
|
17
|
+
* the CLI also accepts the legacy aliases (`currentPage`/`pageSize`/
|
|
18
|
+
* `totalCount`) for back-compat with old fixtures.
|
|
19
|
+
*/
|
|
20
|
+
export declare const PaginationSchema: Schema.Struct<{
|
|
21
|
+
page: Schema.optional<typeof Schema.Number>;
|
|
22
|
+
size: Schema.optional<typeof Schema.Number>;
|
|
23
|
+
total: Schema.optional<typeof Schema.Number>;
|
|
24
|
+
totalPage: Schema.optional<typeof Schema.Number>;
|
|
25
|
+
currentPage: Schema.optional<typeof Schema.Number>;
|
|
26
|
+
pageSize: Schema.optional<typeof Schema.Number>;
|
|
27
|
+
totalCount: Schema.optional<typeof Schema.Number>;
|
|
28
|
+
}>;
|
|
29
|
+
export type Pagination = Schema.Schema.Type<typeof PaginationSchema>;
|
|
30
|
+
/**
|
|
31
|
+
* `{ data, pagination }` envelope — produced by paginator-decorated
|
|
32
|
+
* controllers in mx-core (`ResponseInterceptor`).
|
|
33
|
+
*/
|
|
34
|
+
export declare const paginatedEnvelopeSchema: <A, I, R>(item: Schema.Schema<A, I, R>) => Schema.Struct<{
|
|
35
|
+
data: Schema.Array$<Schema.Schema<A, I, R>>;
|
|
36
|
+
pagination: Schema.optional<Schema.Struct<{
|
|
37
|
+
page: Schema.optional<typeof Schema.Number>;
|
|
38
|
+
size: Schema.optional<typeof Schema.Number>;
|
|
39
|
+
total: Schema.optional<typeof Schema.Number>;
|
|
40
|
+
totalPage: Schema.optional<typeof Schema.Number>;
|
|
41
|
+
currentPage: Schema.optional<typeof Schema.Number>;
|
|
42
|
+
pageSize: Schema.optional<typeof Schema.Number>;
|
|
43
|
+
totalCount: Schema.optional<typeof Schema.Number>;
|
|
44
|
+
}>>;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* `{ data: [...] }` envelope — produced by array responses without
|
|
48
|
+
* paginator decoration.
|
|
49
|
+
*/
|
|
50
|
+
export declare const dataArrayEnvelopeSchema: <A, I, R>(item: Schema.Schema<A, I, R>) => Schema.Struct<{
|
|
51
|
+
data: Schema.Array$<Schema.Schema<A, I, R>>;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Common server error body shape — used to extract the human `message`
|
|
55
|
+
* when mapping non-2xx responses to `TaggedError`s.
|
|
56
|
+
*/
|
|
57
|
+
export declare const ServerErrorBodySchema: Schema.Struct<{
|
|
58
|
+
message: Schema.optional<Schema.Union<[typeof Schema.String, Schema.Array$<typeof Schema.String>]>>;
|
|
59
|
+
code: Schema.optional<typeof Schema.String>;
|
|
60
|
+
details: Schema.optional<typeof Schema.Unknown>;
|
|
61
|
+
}>;
|
|
62
|
+
export type ServerErrorBody = Schema.Schema.Type<typeof ServerErrorBodySchema>;
|
|
63
|
+
/**
|
|
64
|
+
* Extract a flattened `message` string from an arbitrary error body,
|
|
65
|
+
* matching the legacy `extractMessage` helper in `api-client.ts`.
|
|
66
|
+
*/
|
|
67
|
+
export declare const extractServerMessage: (body: unknown) => string | null;
|