@kimicode/cli 1.0.37
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 +221 -0
- package/bin/dscode.exe +12 -0
- package/cli-wrapper.cjs +105 -0
- package/install.cjs +177 -0
- package/package.json +39 -0
- package/scripts/figure/compose.py +363 -0
- package/scripts/figure/replay-shots.mjs +205 -0
- package/web/dist/assets/AssistantsView-OMdgsTIj.js +1 -0
- package/web/dist/assets/AutomationView-BPwjLbkL.js +1 -0
- package/web/dist/assets/ChannelConfigView-JDljUn42.js +8 -0
- package/web/dist/assets/ConnectorsView-AemNT1Ae.js +1 -0
- package/web/dist/assets/FileTreeView-DYx-0jFV.js +11 -0
- package/web/dist/assets/HookConfigView-CS1QqgPx.js +1 -0
- package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web/dist/assets/ModelsView-B3nHezvJ.js +1 -0
- package/web/dist/assets/PluginsView-C4Xc70ec.js +1 -0
- package/web/dist/assets/SessionGrid-BGpz0-op.css +1 -0
- package/web/dist/assets/SessionGrid-C9-LeJH0.js +47 -0
- package/web/dist/assets/SettingsModal-CjWT1C66.js +4 -0
- package/web/dist/assets/SkillsView-DTZyXald.js +1 -0
- package/web/dist/assets/TemplatesTab-CE-CfCf2.js +1 -0
- package/web/dist/assets/ThreeScene-CMqkpyKO.js +2863 -0
- package/web/dist/assets/ThreeScene-DvOrMIoG.css +1 -0
- package/web/dist/assets/ToolsView-CrEHDTEO.js +1 -0
- package/web/dist/assets/abap-BdImnpbu.js +1 -0
- package/web/dist/assets/actionscript-3-B3316cI-.js +1 -0
- package/web/dist/assets/ada-bCR0ucgS.js +1 -0
- package/web/dist/assets/ahk-CsyLZFj1.js +1 -0
- package/web/dist/assets/ahk2-8Zs4aa1G.js +1 -0
- package/web/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/web/dist/assets/angular-html-DA-rfuFy.js +1 -0
- package/web/dist/assets/angular-ts-BrjP3tb8.js +1 -0
- package/web/dist/assets/apache-Pmp26Uib.js +1 -0
- package/web/dist/assets/apex-DhZFqWV2.js +1 -0
- package/web/dist/assets/apl-CORt7UWP.js +1 -0
- package/web/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/web/dist/assets/ara-BRHolxvo.js +1 -0
- package/web/dist/assets/asciidoc-CSVQ5wI8.js +1 -0
- package/web/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/web/dist/assets/astro-HNnZUWAn.js +1 -0
- package/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/web/dist/assets/awk-DMzUqQB5.js +1 -0
- package/web/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/web/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/web/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/web/dist/assets/bat-CickPsom.js +1 -0
- package/web/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/web/dist/assets/berry-uYugtg8r.js +1 -0
- package/web/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/web/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/web/dist/assets/bird2-Bx8U0n9b.js +1 -0
- package/web/dist/assets/blade-2xfisSek.js +1 -0
- package/web/dist/assets/bsl-DlhNcFeZ.js +1 -0
- package/web/dist/assets/c-BIGW1oBm.js +1 -0
- package/web/dist/assets/c3-Dp5svz6Z.js +1 -0
- package/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/web/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/web/dist/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
- package/web/dist/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
- package/web/dist/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
- package/web/dist/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
- package/web/dist/assets/chapel-DTp_pixX.js +1 -0
- package/web/dist/assets/clarity-Dn5IMItf.js +1 -0
- package/web/dist/assets/clojure-P80f7IUj.js +1 -0
- package/web/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/web/dist/assets/cobol-nBiQ_Alo.js +1 -0
- package/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/web/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/web/dist/assets/coq-C7JzOVbR.js +1 -0
- package/web/dist/assets/cpp-BMRokrvK.js +1 -0
- package/web/dist/assets/crystal-DGywbUpC.js +1 -0
- package/web/dist/assets/csharp-DSvCPggb.js +1 -0
- package/web/dist/assets/css-CLj8gQPS.js +1 -0
- package/web/dist/assets/csv-fuZLfV_i.js +1 -0
- package/web/dist/assets/cue-D82EKSYY.js +1 -0
- package/web/dist/assets/cypher-COkxafJQ.js +1 -0
- package/web/dist/assets/d-85-TOEBH.js +1 -0
- package/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/web/dist/assets/dart-bE4Kk8sk.js +1 -0
- package/web/dist/assets/dax-CEL-wOlO.js +1 -0
- package/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/web/dist/assets/diff-D97Zzqfu.js +1 -0
- package/web/dist/assets/docker-BcOcwvcX.js +1 -0
- package/web/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/web/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/web/dist/assets/edge-FbVlp4U3.js +1 -0
- package/web/dist/assets/elixir-CkH2-t6x.js +1 -0
- package/web/dist/assets/elm-DbKCFpqz.js +1 -0
- package/web/dist/assets/emacs-lisp-C_m_b--Z.js +1 -0
- package/web/dist/assets/erb-DXfck5VN.js +1 -0
- package/web/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/web/dist/assets/fennel-BYunw83y.js +1 -0
- package/web/dist/assets/fish-BvzEVeQv.js +1 -0
- package/web/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/web/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/web/dist/assets/gdresource-TyuKm33G.js +1 -0
- package/web/dist/assets/gdscript-DqcFQ5yU.js +1 -0
- package/web/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/web/dist/assets/genie-D0YGMca9.js +1 -0
- package/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/web/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/web/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/web/dist/assets/gleam-BspZqrRM.js +1 -0
- package/web/dist/assets/glimmer-js-ByusRIyA.js +1 -0
- package/web/dist/assets/glimmer-ts-BfAWNZQY.js +1 -0
- package/web/dist/assets/glsl-DplSGwfg.js +1 -0
- package/web/dist/assets/gn-n2N0HUVH.js +1 -0
- package/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/web/dist/assets/go-C27-OAKa.js +1 -0
- package/web/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/web/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/web/dist/assets/hack-BWmVpMyf.js +1 -0
- package/web/dist/assets/haml-D5jkg6IW.js +1 -0
- package/web/dist/assets/handlebars-BpdQsYii.js +1 -0
- package/web/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/web/dist/assets/haxe-CfZj7gIn.js +1 -0
- package/web/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/web/dist/assets/hjson-D5-asLiD.js +1 -0
- package/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/web/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/web/dist/assets/horizon-bright-CUuTKBJd.js +1 -0
- package/web/dist/assets/houston-DnULxvSX.js +1 -0
- package/web/dist/assets/html-derivative-DlHx6ybY.js +1 -0
- package/web/dist/assets/html-pp8916En.js +1 -0
- package/web/dist/assets/http-jrhK8wxY.js +1 -0
- package/web/dist/assets/hurl-irOxFIW8.js +1 -0
- package/web/dist/assets/hxml-2-FPmUDs.js +1 -0
- package/web/dist/assets/hy-DFXneXwc.js +1 -0
- package/web/dist/assets/icons-f1hlMKvD.js +724 -0
- package/web/dist/assets/imba-DGztddWO.js +1 -0
- package/web/dist/assets/index-BCHbHIbw.css +1 -0
- package/web/dist/assets/index-u1vYyqna.js +592 -0
- package/web/dist/assets/ini-BEwlwnbL.js +1 -0
- package/web/dist/assets/java-CylS5w8V.js +1 -0
- package/web/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/web/dist/assets/jinja-f2NsQr07.js +1 -0
- package/web/dist/assets/jison-wvAkD_A8.js +1 -0
- package/web/dist/assets/json-Cp-IABpG.js +1 -0
- package/web/dist/assets/json5-C9tS-k6U.js +1 -0
- package/web/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/web/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/web/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/web/dist/assets/julia-5Bft2YPA.js +1 -0
- package/web/dist/assets/just-Cwhn7H3k.js +1 -0
- package/web/dist/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
- package/web/dist/assets/kanagawa-lotus-C3DzagqV.js +1 -0
- package/web/dist/assets/kanagawa-wave-DFGoQZhC.js +1 -0
- package/web/dist/assets/kdl-DV7GczEv.js +1 -0
- package/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/web/dist/assets/kusto-wEQ09or8.js +1 -0
- package/web/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/web/dist/assets/latex-D5pSuvFb.js +1 -0
- package/web/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/web/dist/assets/less-B1dDrJ26.js +1 -0
- package/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/web/dist/assets/liquid-C0sCDyMI.js +1 -0
- package/web/dist/assets/llvm-BZoOZj88.js +1 -0
- package/web/dist/assets/log-2UxHyX5q.js +1 -0
- package/web/dist/assets/logo-BtOb2qkB.js +1 -0
- package/web/dist/assets/lua-BaeVxFsk.js +1 -0
- package/web/dist/assets/luau-BnpPk5vE.js +1 -0
- package/web/dist/assets/make-CHLpvVh8.js +1 -0
- package/web/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/web/dist/assets/markdown-DEtuzEyz.js +30 -0
- package/web/dist/assets/marko-DjSrsDqO.js +1 -0
- package/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/web/dist/assets/matlab-D7o27uSR.js +1 -0
- package/web/dist/assets/mdc-D1_yUvq7.js +1 -0
- package/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/web/dist/assets/mermaid-CQcHuHx7.js +1 -0
- package/web/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/web/dist/assets/min-light-CTRr51gU.js +1 -0
- package/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/web/dist/assets/mojo-DJz3ZmWd.js +1 -0
- package/web/dist/assets/monokai-BRVnQi9A.js +1 -0
- package/web/dist/assets/moonbit-CHtswR0a.js +1 -0
- package/web/dist/assets/move-el3G9tDJ.js +1 -0
- package/web/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/web/dist/assets/nextflow-C-mBbutL.js +1 -0
- package/web/dist/assets/nextflow-groovy-vE_lwT2v.js +1 -0
- package/web/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/web/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/web/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/web/dist/assets/nim-BIad80T-.js +1 -0
- package/web/dist/assets/nix-CwoSXNpI.js +1 -0
- package/web/dist/assets/nord-Ddv68eIx.js +1 -0
- package/web/dist/assets/nsis-BlV79W_Q.js +1 -0
- package/web/dist/assets/nushell-D3jzshHO.js +1 -0
- package/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/web/dist/assets/odin-BBf5iR-q.js +1 -0
- package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/web/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/web/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/web/dist/assets/org-DM6o9KBp.js +1 -0
- package/web/dist/assets/panels-Bn-2wCur.js +1 -0
- package/web/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/web/dist/assets/perl-B9cMNwum.js +1 -0
- package/web/dist/assets/php-Csjmro_R.js +1 -0
- package/web/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/web/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/web/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/web/dist/assets/po-BTJTHyun.js +1 -0
- package/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/web/dist/assets/polar-C0HS_06l.js +1 -0
- package/web/dist/assets/postcss-CXtECtnM.js +1 -0
- package/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/web/dist/assets/powershell-BmBUJMz7.js +1 -0
- package/web/dist/assets/prisma-Vru482bI.js +1 -0
- package/web/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/web/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/web/dist/assets/pug-DKIMFp6K.js +1 -0
- package/web/dist/assets/puppet-BMWR74SV.js +1 -0
- package/web/dist/assets/purescript-CklMAg4u.js +1 -0
- package/web/dist/assets/python-B6aJPvgy.js +1 -0
- package/web/dist/assets/qml-3beO22l8.js +1 -0
- package/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/web/dist/assets/qss-IeuSbFQv.js +1 -0
- package/web/dist/assets/r-Cf5RLm7j.js +1 -0
- package/web/dist/assets/racket-BqYA7rlc.js +1 -0
- package/web/dist/assets/raku-DXvB9xmW.js +1 -0
- package/web/dist/assets/razor-BjBPvh-w.js +1 -0
- package/web/dist/assets/rbs-CpoqiR4B.js +1 -0
- package/web/dist/assets/react-vendor-ClBKp0t-.js +9 -0
- package/web/dist/assets/red-hvxz__6c.js +1 -0
- package/web/dist/assets/reg-C-SQnVFl.js +1 -0
- package/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/web/dist/assets/rel-C3B-1QV4.js +1 -0
- package/web/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/web/dist/assets/ron-D8l8udqQ.js +1 -0
- package/web/dist/assets/rose-pine-5qJOZa0Y.js +1 -0
- package/web/dist/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
- package/web/dist/assets/rose-pine-moon-C9pEdX9L.js +1 -0
- package/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/web/dist/assets/rst-bs7f0vWN.js +1 -0
- package/web/dist/assets/ruby-C0TQ7zu5.js +1 -0
- package/web/dist/assets/rust-B1yitclQ.js +1 -0
- package/web/dist/assets/sas-DEy46yEz.js +1 -0
- package/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/web/dist/assets/scala-CqE71os6.js +1 -0
- package/web/dist/assets/scheme-C98Dy4si.js +1 -0
- package/web/dist/assets/scss-D5BDwBP9.js +1 -0
- package/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/web/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/web/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/web/dist/assets/smalltalk-BOQMe2GC.js +1 -0
- package/web/dist/assets/smithy-cds9vsN8.js +1 -0
- package/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/web/dist/assets/solarized-dark-CpvCGNkr.js +1 -0
- package/web/dist/assets/solarized-light-Dlz6yCKv.js +1 -0
- package/web/dist/assets/solidity-DijEV5ha.js +1 -0
- package/web/dist/assets/soy-8wufbnw4.js +1 -0
- package/web/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/web/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/web/dist/assets/sql-CRqJ_cUM.js +1 -0
- package/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/web/dist/assets/stata-DI20mbqo.js +1 -0
- package/web/dist/assets/state-xD58vmym.js +17 -0
- package/web/dist/assets/sttLanguages-BNRptAQA.js +1 -0
- package/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/web/dist/assets/surrealql-Cjom0U5J.js +1 -0
- package/web/dist/assets/svelte-Cy7k_4gC.js +1 -0
- package/web/dist/assets/swift-C2oV4EkX.js +1 -0
- package/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/web/dist/assets/system-verilog-0hqHdDBg.js +1 -0
- package/web/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/web/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/web/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/web/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/web/dist/assets/templ-DhtptRzy.js +1 -0
- package/web/dist/assets/terraform-BETggiCN.js +1 -0
- package/web/dist/assets/tex-D96PA37w.js +1 -0
- package/web/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/web/dist/assets/toml-vGWfd6FD.js +1 -0
- package/web/dist/assets/ts-tags-D351s5mN.js +1 -0
- package/web/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/web/dist/assets/tsx-COt5Ahok.js +1 -0
- package/web/dist/assets/turtle-BsS91CYL.js +1 -0
- package/web/dist/assets/twig-27uCiNez.js +1 -0
- package/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/web/dist/assets/typespec-CAFt9gP4.js +1 -0
- package/web/dist/assets/typst-BUadGCkm.js +1 -0
- package/web/dist/assets/v-BGw2Nkan.js +1 -0
- package/web/dist/assets/vala-CsfeWuGM.js +1 -0
- package/web/dist/assets/vb-Cu-pLBUe.js +1 -0
- package/web/dist/assets/verilog-nZwndyjY.js +1 -0
- package/web/dist/assets/vesper-DRje8inN.js +1 -0
- package/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/web/dist/assets/viml-CJc9bBzg.js +1 -0
- package/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/web/dist/assets/vue-BqiEGhQt.js +1 -0
- package/web/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/web/dist/assets/vue-vine-BoDAl6tE.js +1 -0
- package/web/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/web/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/web/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/web/dist/assets/wit-5i3qLPDT.js +1 -0
- package/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/web/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/web/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/web/dist/assets/yaml-Buea-lGh.js +1 -0
- package/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/web/dist/assets/zig-VOosw3JB.js +1 -0
- package/web/dist/favicon.svg +40 -0
- package/web/dist/index.html +26 -0
- package/web/dist/logo.svg +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# @deepseekcode/cli
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@deepseekcode/cli)
|
|
4
|
+
[](#license)
|
|
5
|
+
[](https://nodejs.org)
|
|
6
|
+
|
|
7
|
+
**DeepSeekCode CLI** — a TypeScript-first AI coding agent with an interactive terminal UI, a built-in web UI, and a local HTTP/WS runtime. It starts a full agent core in-process, opens an [Ink](https://github.com/vadimdemedes/ink) (React-for-terminal) interface in your terminal, and serves a companion web UI you can use for configuration and remote access.
|
|
8
|
+
|
|
9
|
+
- **TUI** — interactive, keyboard-first coding agent in your terminal
|
|
10
|
+
- **Local runtime** — spins up an in-process server (HTTP + WebSocket), no separate install needed
|
|
11
|
+
- **Web UI** — configuration & model management at `http://localhost:8080`
|
|
12
|
+
- **Non-interactive modes** — `exec`, `codeview`, `test-fix` for scripts & CI
|
|
13
|
+
- **Multi-theme** — dark / light / nord / dracula / monokai / one-dark / tokyo-night
|
|
14
|
+
|
|
15
|
+
Requires **Node.js >= 18**.
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Install
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install -g @deepseekcode/cli
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Or with your favorite package manager:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# pnpm
|
|
29
|
+
pnpm add -g @deepseekcode/cli
|
|
30
|
+
|
|
31
|
+
# yarn
|
|
32
|
+
yarn global add @deepseekcode/cli
|
|
33
|
+
|
|
34
|
+
# bun
|
|
35
|
+
bun add -g @deepseekcode/cli
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This installs two commands: **`dscode`** (short) and **`deepseekcode`** (full name).
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
dscode
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
That's it. The CLI starts the local agent runtime and opens the interactive terminal. On first run (no provider configured) it prints a link to the web UI where you can set up your LLM provider and model:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# model/provider setup page (also served by the CLI)
|
|
50
|
+
# → http://localhost:8080/#models
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
If your terminal's stdin isn't a TTY (e.g. a script or CI pipeline), the CLI skips the TUI and runs **headless** — the web UI stays available at the printed URL.
|
|
54
|
+
|
|
55
|
+
Connect to an **existing** backend instead of starting a local one:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
dscode run --backend http://localhost:8080
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Resume your last session (or a specific one):
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
dscode --resume # last session
|
|
65
|
+
dscode --resume <id> # specific session
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## CLI Commands
|
|
69
|
+
|
|
70
|
+
| Command | Description |
|
|
71
|
+
|---------|-------------|
|
|
72
|
+
| `dscode` / `dscode start` | Start local runtime + interactive TUI (also serves Web UI + API) |
|
|
73
|
+
| `dscode start --auto` | Start with auto-approval mode enabled |
|
|
74
|
+
| `dscode run --backend URL` | Connect to an existing backend instead of starting one |
|
|
75
|
+
| `dscode exec <command>` | Execute a command non-interactively (JSONL output) |
|
|
76
|
+
| `dscode exec --file <path>` | Read the command from a file |
|
|
77
|
+
| `dscode codeview` | AI code review — bugs + unwired features (JSON output) |
|
|
78
|
+
| `dscode review` | Review current code changes (legacy) |
|
|
79
|
+
| `dscode test-fix` | Run the auto-fix test loop |
|
|
80
|
+
| `dscode --resume [id]` | Resume the last session, or a specific one |
|
|
81
|
+
| `dscode version` | Print version |
|
|
82
|
+
|
|
83
|
+
Run `dscode --help` (or `-h`) for the full list.
|
|
84
|
+
|
|
85
|
+
### Non-interactive examples
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Execute a command, get JSONL results
|
|
89
|
+
dscode exec "fix the failing test in src/utils"
|
|
90
|
+
|
|
91
|
+
# Plain text output, command from file
|
|
92
|
+
dscode exec --file ./task.txt --text
|
|
93
|
+
|
|
94
|
+
# AI code review focused on security, write report to file
|
|
95
|
+
dscode codeview --focus security --output review.json
|
|
96
|
+
|
|
97
|
+
# Auto-fix test loop (max 5 retries, analyze only)
|
|
98
|
+
dscode test-fix --packages packages/cli --retries 5 --dry-run
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Interactive Commands
|
|
102
|
+
|
|
103
|
+
Inside the TUI, use `/help` for the full list (most commands have Chinese aliases). Highlights:
|
|
104
|
+
|
|
105
|
+
| Command | Action |
|
|
106
|
+
|---------|--------|
|
|
107
|
+
| `/help` | Show all commands |
|
|
108
|
+
| `/model [name]` | Open model picker or switch model directly |
|
|
109
|
+
| `/theme [name]` | Show or change terminal theme |
|
|
110
|
+
| `/plan` | Toggle plan mode (review before executing) |
|
|
111
|
+
| `/auto` | Toggle auto-approval mode |
|
|
112
|
+
| `/mode <mode>` | Cycle/set mode: act · auto-act · plan · auto-plan · goal · auto-goal |
|
|
113
|
+
| `/goal` | Set goal-directed mode |
|
|
114
|
+
| `/thinking` | Toggle think mode on/off |
|
|
115
|
+
| `/context` | Show current conversation state |
|
|
116
|
+
| `/sessions [id]` / `/resume [id]` | List history / switch session |
|
|
117
|
+
| `/tasks` | Toggle sub-task output panel |
|
|
118
|
+
| `/undo [list]` | Undo the most recent file change |
|
|
119
|
+
| `/clear` | Start a new session (current session is saved, resumable via `/sessions`) |
|
|
120
|
+
| `/mcp <action>` | Manage MCP servers |
|
|
121
|
+
| `/skills` | Insert a skill |
|
|
122
|
+
| `/trace <traceId>` | Query a trace by id |
|
|
123
|
+
| `/stop` `/pause` `/continue` | Control AI generation |
|
|
124
|
+
| `/exit` | Exit |
|
|
125
|
+
|
|
126
|
+
## Options
|
|
127
|
+
|
|
128
|
+
| Option | Description |
|
|
129
|
+
|--------|-------------|
|
|
130
|
+
| `-p, --port <port>` | HTTP port (default: first available from 8080) |
|
|
131
|
+
| `--ws-port <port>` | WebSocket port (default: HTTP port + 1) |
|
|
132
|
+
| `-w, --workspace <dir>` | Workspace directory (default: current directory) |
|
|
133
|
+
| `-F, --force` | Kill an existing process on the target port before starting |
|
|
134
|
+
| `-b, --backend <url>` | Backend URL for `run` mode |
|
|
135
|
+
| `--ws <url>` | Override WebSocket URL |
|
|
136
|
+
| `--provider <name>` | Provider to use (exec/review) |
|
|
137
|
+
| `--model <name>` | Model to use (exec/review) |
|
|
138
|
+
| `--theme <name\|path>` | Theme name or JSON theme file path |
|
|
139
|
+
| `--prompt-version <ver>` | Prompt template version |
|
|
140
|
+
| `--timeout <ms>` | Per-attempt LLM timeout (default: 300000 = 5 min) |
|
|
141
|
+
| `--stall-threshold <ms>` | Stream stall detection threshold (default: 240000 = 4 min) |
|
|
142
|
+
| `--no-update-check` | Disable the startup new-version notice |
|
|
143
|
+
| `--no-auto-update` | Disable background auto-update (notice still shown) |
|
|
144
|
+
|
|
145
|
+
## Configuration
|
|
146
|
+
|
|
147
|
+
The CLI reads `~/.agent/config.yaml`:
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
backend_url: http://localhost:8080
|
|
151
|
+
ws_url: ws://localhost:8081/ws
|
|
152
|
+
workspace_dir: /path/to/workspace
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Provider / model settings are managed through the web UI at `http://localhost:8080/#models`.
|
|
156
|
+
|
|
157
|
+
## Themes
|
|
158
|
+
|
|
159
|
+
Set the theme at startup via the `DEEPSEEKCODE_THEME` env var (or `--theme`):
|
|
160
|
+
|
|
161
|
+
| Theme | Env Value | Style |
|
|
162
|
+
|-------|-----------|-------|
|
|
163
|
+
| Dark (default) | `dark` | ANSI named colors, broad compat |
|
|
164
|
+
| Light | `light` | Light terminal variant |
|
|
165
|
+
| Nord | `nord` | Arctic blue-grey palette |
|
|
166
|
+
| Dracula | `dracula` | Dark purple-vibrant |
|
|
167
|
+
| Monokai | `monokai` | Classic code editor |
|
|
168
|
+
| One Dark | `one-dark` | Atom's iconic dark |
|
|
169
|
+
| Tokyo Night | `tokyo-night` | Deep navy + vibrant accents |
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
DEEPSEEKCODE_THEME=nord dscode
|
|
173
|
+
DEEPSEEKCODE_THEME=/path/to/my-theme.json dscode
|
|
174
|
+
|
|
175
|
+
# Partial overrides on the current theme (JSON)
|
|
176
|
+
DEEPSEEKCODE_THEME_COLORS='{"primary":"#ff0000"}' dscode
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Switch themes at runtime with `/theme [name]`.
|
|
180
|
+
|
|
181
|
+
## Auto-Update
|
|
182
|
+
|
|
183
|
+
On startup, `dscode` checks npm for the latest version asynchronously (non-blocking). When a newer version is found, the CLI **automatically reinstalls the global package** in the background (`npm install -g @deepseekcode/cli@latest`); the new version takes effect on the next launch.
|
|
184
|
+
|
|
185
|
+
- Only affects **global npm installs** — source builds and `npx`/`bunx` caches are never touched.
|
|
186
|
+
- Disable auto-install (keep the version notice): `DEEPSEEKCODE_NO_AUTO_UPDATE=1` or `--no-auto-update`
|
|
187
|
+
- Disable the check entirely: `DEEPSEEKCODE_NO_UPDATE_CHECK=1` or `--no-update-check`
|
|
188
|
+
|
|
189
|
+
## Environment Variables
|
|
190
|
+
|
|
191
|
+
| Variable | Description |
|
|
192
|
+
|----------|-------------|
|
|
193
|
+
| `DEEPSEEKCODE_THEME` | Theme name or JSON theme file |
|
|
194
|
+
| `DEEPSEEKCODE_THEME_COLORS` | JSON partial color overrides |
|
|
195
|
+
| `DEEPSEEKCODE_HTTP_PORT` / `DEEPSEEKCODE_WS_PORT` | Default HTTP / WebSocket ports |
|
|
196
|
+
| `DEEPSEEKCODE_QUIET=1` | Suppress non-fatal startup warnings |
|
|
197
|
+
| `DEEPSEEKCODE_NO_AUTO_UPDATE=1` | Disable background auto-update |
|
|
198
|
+
| `DEEPSEEKCODE_NO_UPDATE_CHECK=1` | Disable the version check |
|
|
199
|
+
| `DEEPSEEKCODE_FORCE_UTF8=0` | Skip forcing the Windows console to UTF-8 |
|
|
200
|
+
| `DSC_HEAP_LIMIT_MB` | Node heap limit hint for large sessions (default: 8192) |
|
|
201
|
+
|
|
202
|
+
## Terminal Verdict Figures
|
|
203
|
+
|
|
204
|
+
The `terminal_figure` tool and the Web UI's terminal-verdict button replay captured ANSI bytes through xterm.js and Playwright, then compose a PNG with Python Pillow.
|
|
205
|
+
|
|
206
|
+
The published package includes the replay/composition scripts and declares its Node dependencies. The host still needs:
|
|
207
|
+
|
|
208
|
+
- a Python interpreter with Pillow installed;
|
|
209
|
+
- a Playwright Chromium browser (`npx playwright install chromium` or the equivalent for your package manager).
|
|
210
|
+
|
|
211
|
+
If either prerequisite is unavailable, the feature returns an actionable setup error and does not silently write outside the workspace. Capture remains a separate CLI/TUI step because it depends on the specific interface under test.
|
|
212
|
+
|
|
213
|
+
## License
|
|
214
|
+
|
|
215
|
+
Proprietary — © 2026 DeepSeekCode. All rights reserved.
|
|
216
|
+
|
|
217
|
+
This software is proprietary and closed source; it is **not** open source. Copying,
|
|
218
|
+
modifying, distributing, sublicensing, or selling it requires the prior written
|
|
219
|
+
permission of the copyright holder.
|
|
220
|
+
|
|
221
|
+
See `LICENSE.md` for the full terms.
|
package/bin/dscode.exe
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
echo "Error: dscode native binary not installed." >&2
|
|
3
|
+
echo "" >&2
|
|
4
|
+
echo "Either postinstall did not run (--ignore-scripts, some pnpm configs)" >&2
|
|
5
|
+
echo "or the platform-native optional dependency was not downloaded" >&2
|
|
6
|
+
echo "(--omit=optional)." >&2
|
|
7
|
+
echo "" >&2
|
|
8
|
+
echo "Run the postinstall manually (adjust path for local vs global install):" >&2
|
|
9
|
+
echo " node node_modules/@deepseekcode/cli/install.cjs" >&2
|
|
10
|
+
echo "" >&2
|
|
11
|
+
echo "Or reinstall without --ignore-scripts / --omit=optional." >&2
|
|
12
|
+
exit 1
|
package/cli-wrapper.cjs
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Fallback launcher for the @deepseekcode/cli wrapper package.
|
|
3
|
+
//
|
|
4
|
+
// Normally the postinstall script (install.cjs) copies the native binary over
|
|
5
|
+
// bin/dscode(.exe), so this file is never invoked. It exists for environments
|
|
6
|
+
// where postinstall doesn't run (--ignore-scripts) — users can run
|
|
7
|
+
// `node cli-wrapper.cjs` directly and pay the Node-process overhead as the
|
|
8
|
+
// price. Marks the child with DEEPSEEKCODE_INSTALLED_VIA_NPM_WRAPPER so the
|
|
9
|
+
// binary knows it was reached through the npm wrapper (update path decisions).
|
|
10
|
+
|
|
11
|
+
const { spawnSync } = require('child_process')
|
|
12
|
+
const { arch, constants } = require('os')
|
|
13
|
+
const path = require('path')
|
|
14
|
+
|
|
15
|
+
// Platform detection + PLATFORMS map is duplicated in install.cjs — keep in sync.
|
|
16
|
+
const WRAPPER_NAME = require('./package.json').name
|
|
17
|
+
// Same scope as the wrapper (@<scope>/cli-<platform>) — derived, not hard-coded,
|
|
18
|
+
// so one source file serves every published scope. Keep in sync with install.cjs.
|
|
19
|
+
const PACKAGE_PREFIX = WRAPPER_NAME
|
|
20
|
+
const BINARY_NAME = 'dscode'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
const PLATFORMS = {
|
|
24
|
+
'darwin-arm64': { pkg: PACKAGE_PREFIX + '-darwin-arm64', bin: BINARY_NAME },
|
|
25
|
+
'darwin-x64': { pkg: PACKAGE_PREFIX + '-darwin-x64', bin: BINARY_NAME },
|
|
26
|
+
'linux-x64': { pkg: PACKAGE_PREFIX + '-linux-x64', bin: BINARY_NAME },
|
|
27
|
+
'linux-arm64': { pkg: PACKAGE_PREFIX + '-linux-arm64', bin: BINARY_NAME },
|
|
28
|
+
'linux-x64-musl': { pkg: PACKAGE_PREFIX + '-linux-x64-musl', bin: BINARY_NAME },
|
|
29
|
+
'linux-arm64-musl': { pkg: PACKAGE_PREFIX + '-linux-arm64-musl', bin: BINARY_NAME },
|
|
30
|
+
'win32-x64': { pkg: PACKAGE_PREFIX + '-win32-x64', bin: BINARY_NAME + '.exe' },
|
|
31
|
+
'win32-arm64': { pkg: PACKAGE_PREFIX + '-win32-arm64', bin: BINARY_NAME + '.exe' },
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function detectMusl() {
|
|
35
|
+
if (process.platform !== 'linux') return false
|
|
36
|
+
const report =
|
|
37
|
+
typeof process.report?.getReport === 'function'
|
|
38
|
+
? process.report.getReport()
|
|
39
|
+
: null
|
|
40
|
+
return report != null && report.header?.glibcVersionRuntime === undefined
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getPlatformKey() {
|
|
44
|
+
const platform = process.platform
|
|
45
|
+
let cpu = arch()
|
|
46
|
+
if (platform === 'linux') {
|
|
47
|
+
return 'linux-' + cpu + (detectMusl() ? '-musl' : '')
|
|
48
|
+
}
|
|
49
|
+
if (platform === 'darwin' && cpu === 'x64') {
|
|
50
|
+
const r = spawnSync('sysctl', ['-n', 'sysctl.proc_translated'], { encoding: 'utf8' })
|
|
51
|
+
if (r.stdout?.trim() === '1') cpu = 'arm64'
|
|
52
|
+
}
|
|
53
|
+
return platform + '-' + cpu
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function getBinaryPath() {
|
|
57
|
+
const platformKey = getPlatformKey()
|
|
58
|
+
const info = PLATFORMS[platformKey]
|
|
59
|
+
if (!info) {
|
|
60
|
+
console.error(`[${WRAPPER_NAME}] Unsupported platform: ${process.platform} ${arch()}. Supported: ${Object.keys(PLATFORMS).join(', ')}`)
|
|
61
|
+
process.exit(1)
|
|
62
|
+
}
|
|
63
|
+
const optionalDeps = require('./package.json').optionalDependencies || {}
|
|
64
|
+
if (!optionalDeps[info.pkg]) {
|
|
65
|
+
console.error(`[${WRAPPER_NAME}] Native binaries for ${platformKey} are not available on this release channel.`)
|
|
66
|
+
console.error(` Available: ${Object.keys(optionalDeps).map((p) => p.replace(PACKAGE_PREFIX + '-', '')).join(', ')}`)
|
|
67
|
+
process.exit(1)
|
|
68
|
+
}
|
|
69
|
+
try {
|
|
70
|
+
const pkgDir = path.dirname(require.resolve(info.pkg + '/package.json'))
|
|
71
|
+
return path.join(pkgDir, info.bin)
|
|
72
|
+
} catch {
|
|
73
|
+
console.error(`[${WRAPPER_NAME}] Could not find native binary package "${info.pkg}".`)
|
|
74
|
+
if (platformKey === 'darwin-arm64' && arch() === 'x64') {
|
|
75
|
+
console.error(' You are running x64 Node under Rosetta 2 on Apple Silicon. npm only')
|
|
76
|
+
console.error(' installed the darwin-x64 binary.')
|
|
77
|
+
} else {
|
|
78
|
+
console.error(' Try reinstalling with: npm install')
|
|
79
|
+
}
|
|
80
|
+
process.exit(1)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function main() {
|
|
85
|
+
const binaryPath = getBinaryPath()
|
|
86
|
+
const result = spawnSync(binaryPath, process.argv.slice(2), {
|
|
87
|
+
stdio: 'inherit',
|
|
88
|
+
env: { ...process.env, DEEPSEEKCODE_INSTALLED_VIA_NPM_WRAPPER: '1' },
|
|
89
|
+
})
|
|
90
|
+
if (result.error) {
|
|
91
|
+
console.error(`[${WRAPPER_NAME}] Failed to execute native binary at ` + binaryPath)
|
|
92
|
+
console.error(' ' + result.error.message)
|
|
93
|
+
process.exit(1)
|
|
94
|
+
}
|
|
95
|
+
if (result.signal) {
|
|
96
|
+
// Node.js ignores some signals (e.g. SIGPIPE → SIG_IGN), so re-raising is
|
|
97
|
+
// unreliable. Exit with the POSIX convention 128+signum instead.
|
|
98
|
+
const signum = constants.signals[result.signal] ?? 0
|
|
99
|
+
process.exit(128 + signum)
|
|
100
|
+
} else {
|
|
101
|
+
process.exit(result.status ?? 1)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
main()
|
package/install.cjs
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Postinstall for the @deepseekcode/cli wrapper package.
|
|
3
|
+
//
|
|
4
|
+
// Mirrors the Claude Code 2.x distribution model: the npm package is a thin
|
|
5
|
+
// installer. This script detects the platform, finds the matching native binary
|
|
6
|
+
// from optionalDependencies (@deepseekcode/cli-<platform>), and copies it over
|
|
7
|
+
// the bin/dscode.exe placeholder. After this runs, `dscode` execs the native
|
|
8
|
+
// binary directly — no Node process stays resident.
|
|
9
|
+
//
|
|
10
|
+
// If the native package isn't present (--omit=optional), prints instructions and
|
|
11
|
+
// leaves the placeholder stub in place. cli-wrapper.cjs (same directory) can be
|
|
12
|
+
// invoked manually as a fallback.
|
|
13
|
+
//
|
|
14
|
+
// On Windows the stub (a non-PE .exe) surfaces as a native "not a valid Win32
|
|
15
|
+
// application" error, so its message is best-effort; install.cjs failure output
|
|
16
|
+
// above is the primary guidance when postinstall does run.
|
|
17
|
+
//
|
|
18
|
+
// Platform detection + PLATFORMS map is duplicated in cli-wrapper.cjs — keep in sync.
|
|
19
|
+
|
|
20
|
+
const { spawnSync } = require('child_process')
|
|
21
|
+
const {
|
|
22
|
+
copyFileSync,
|
|
23
|
+
linkSync,
|
|
24
|
+
unlinkSync,
|
|
25
|
+
chmodSync,
|
|
26
|
+
readFileSync,
|
|
27
|
+
writeFileSync,
|
|
28
|
+
statSync,
|
|
29
|
+
} = require('fs')
|
|
30
|
+
const { arch } = require('os')
|
|
31
|
+
const path = require('path')
|
|
32
|
+
|
|
33
|
+
const WRAPPER_NAME = require('./package.json').name
|
|
34
|
+
// Platform packages live in the SAME npm scope as the wrapper
|
|
35
|
+
// (@<scope>/cli-<platform>). Derived rather than hard-coded so one source file
|
|
36
|
+
// serves every scope the release is published to (see scripts/multi-publish.mjs).
|
|
37
|
+
const PACKAGE_PREFIX = WRAPPER_NAME
|
|
38
|
+
const BINARY_NAME = 'dscode'
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
const PLATFORMS = {
|
|
42
|
+
'darwin-arm64': { pkg: PACKAGE_PREFIX + '-darwin-arm64', bin: BINARY_NAME },
|
|
43
|
+
'darwin-x64': { pkg: PACKAGE_PREFIX + '-darwin-x64', bin: BINARY_NAME },
|
|
44
|
+
'linux-x64': { pkg: PACKAGE_PREFIX + '-linux-x64', bin: BINARY_NAME },
|
|
45
|
+
'linux-arm64': { pkg: PACKAGE_PREFIX + '-linux-arm64', bin: BINARY_NAME },
|
|
46
|
+
'linux-x64-musl': { pkg: PACKAGE_PREFIX + '-linux-x64-musl', bin: BINARY_NAME },
|
|
47
|
+
'linux-arm64-musl': { pkg: PACKAGE_PREFIX + '-linux-arm64-musl', bin: BINARY_NAME },
|
|
48
|
+
'win32-x64': { pkg: PACKAGE_PREFIX + '-win32-x64', bin: BINARY_NAME + '.exe' },
|
|
49
|
+
'win32-arm64': { pkg: PACKAGE_PREFIX + '-win32-arm64', bin: BINARY_NAME + '.exe' },
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function detectMusl() {
|
|
53
|
+
if (process.platform !== 'linux') return false
|
|
54
|
+
// process.report is available in Node ≥12; glibcVersionRuntime is absent on musl.
|
|
55
|
+
// Faster than spawning `ldd` and avoids the ENOENT→musl false positive when ldd
|
|
56
|
+
// isn't on PATH (minimal containers).
|
|
57
|
+
const report =
|
|
58
|
+
typeof process.report?.getReport === 'function'
|
|
59
|
+
? process.report.getReport()
|
|
60
|
+
: null
|
|
61
|
+
return report != null && report.header?.glibcVersionRuntime === undefined
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function getPlatformKey() {
|
|
65
|
+
const platform = process.platform
|
|
66
|
+
let cpu = arch()
|
|
67
|
+
if (platform === 'linux') {
|
|
68
|
+
return 'linux-' + cpu + (detectMusl() ? '-musl' : '')
|
|
69
|
+
}
|
|
70
|
+
// Rosetta 2: an x64 Node on Apple Silicon reports arch()==='x64'. Prefer the
|
|
71
|
+
// native arm64 binary — the x64 build needs AVX, which Rosetta doesn't emulate.
|
|
72
|
+
if (platform === 'darwin' && cpu === 'x64') {
|
|
73
|
+
const r = spawnSync('sysctl', ['-n', 'sysctl.proc_translated'], { encoding: 'utf8' })
|
|
74
|
+
if (r.stdout?.trim() === '1') cpu = 'arm64'
|
|
75
|
+
}
|
|
76
|
+
return platform + '-' + cpu
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function placeBinary(src, dest) {
|
|
80
|
+
// Try hardlink first (instant, zero extra disk for a ~110MB binary; src and
|
|
81
|
+
// dest are both under node_modules/ so same-filesystem is the common case).
|
|
82
|
+
// We attempt the link BEFORE touching dest — if src is missing (partial
|
|
83
|
+
// extraction) the first linkSync throws ENOENT and the fallback stub stays.
|
|
84
|
+
try {
|
|
85
|
+
linkSync(src, dest)
|
|
86
|
+
} catch (err) {
|
|
87
|
+
if (err.code === 'EEXIST') {
|
|
88
|
+
// Read the stub before unlinking so we can restore it if both link and
|
|
89
|
+
// copy fail (ENOSPC, NFS error mid-copy). Only read if dest is
|
|
90
|
+
// stub-sized — on re-install dest is the ~110MB binary.
|
|
91
|
+
const stub = statSync(dest).size < 4096 ? readFileSync(dest) : null
|
|
92
|
+
unlinkSync(dest)
|
|
93
|
+
try {
|
|
94
|
+
linkSync(src, dest)
|
|
95
|
+
} catch {
|
|
96
|
+
try {
|
|
97
|
+
copyFileSync(src, dest)
|
|
98
|
+
} catch (copyErr) {
|
|
99
|
+
if (stub) {
|
|
100
|
+
try {
|
|
101
|
+
writeFileSync(dest, stub, { mode: 0o755 })
|
|
102
|
+
} catch {
|
|
103
|
+
// Do nothing
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
throw copyErr
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
} else if (err.code === 'EXDEV' || err.code === 'EPERM') {
|
|
110
|
+
// Cross-device or no-link-perms — copyFileSync overwrites existing dest.
|
|
111
|
+
copyFileSync(src, dest)
|
|
112
|
+
} else {
|
|
113
|
+
throw err
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (process.platform !== 'win32') {
|
|
117
|
+
chmodSync(dest, 0o755)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function main() {
|
|
122
|
+
const platformKey = getPlatformKey()
|
|
123
|
+
const info = PLATFORMS[platformKey]
|
|
124
|
+
|
|
125
|
+
if (!info) {
|
|
126
|
+
console.error(
|
|
127
|
+
`[${WRAPPER_NAME} postinstall] Unsupported platform: ${process.platform} ${arch()}`,
|
|
128
|
+
)
|
|
129
|
+
console.error(` Supported: ${Object.keys(PLATFORMS).join(', ')}`)
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const optionalDeps = require('./package.json').optionalDependencies || {}
|
|
134
|
+
if (!optionalDeps[info.pkg]) {
|
|
135
|
+
console.error(
|
|
136
|
+
`[${WRAPPER_NAME} postinstall] Native binaries for ${platformKey} are not available on this release channel.`,
|
|
137
|
+
)
|
|
138
|
+
console.error(` Available: ${Object.keys(optionalDeps).map((p) => p.replace(PACKAGE_PREFIX + '-', '')).join(', ')}`)
|
|
139
|
+
return
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let src
|
|
143
|
+
try {
|
|
144
|
+
const pkgDir = path.dirname(require.resolve(info.pkg + '/package.json'))
|
|
145
|
+
src = path.join(pkgDir, info.bin)
|
|
146
|
+
} catch {
|
|
147
|
+
console.error(`[${WRAPPER_NAME} postinstall] Native package "${info.pkg}" not found.`)
|
|
148
|
+
if (platformKey === 'darwin-arm64' && arch() === 'x64') {
|
|
149
|
+
console.error(' You are running x64 Node under Rosetta 2 on Apple Silicon. npm only')
|
|
150
|
+
console.error(' installed the darwin-x64 binary. Install arm64 Node and reinstall:')
|
|
151
|
+
console.error(' arch -arm64 zsh -c "nvm install --lts && npm i -g ' + WRAPPER_NAME + '"')
|
|
152
|
+
return
|
|
153
|
+
}
|
|
154
|
+
console.error(' This happens with --omit=optional or when the download failed.')
|
|
155
|
+
console.error(' The `dscode` command will print instructions when invoked.')
|
|
156
|
+
console.error(' Fallback: node ' + path.join(__dirname, 'cli-wrapper.cjs'))
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Always write to bin/dscode.exe — the package.json bin field points here
|
|
161
|
+
// (npm generates its shim/symlink from the .exe extension at install time).
|
|
162
|
+
// On Unix npm links `bin/dscode` → `bin/dscode.exe` and ignores the
|
|
163
|
+
// extension, so overwriting the .exe path replaces the running target on
|
|
164
|
+
// every platform. Same pattern as Claude Code / Bun npm packages.
|
|
165
|
+
const dest = path.join(__dirname, 'bin', 'dscode.exe')
|
|
166
|
+
|
|
167
|
+
try {
|
|
168
|
+
placeBinary(src, dest)
|
|
169
|
+
console.log(`[${WRAPPER_NAME} postinstall] Native binary placed → ${dest}`)
|
|
170
|
+
} catch (err) {
|
|
171
|
+
console.error(`[${WRAPPER_NAME} postinstall] Failed to place binary: ${err.message}`)
|
|
172
|
+
console.error(' Fallback: node ' + path.join(__dirname, 'cli-wrapper.cjs'))
|
|
173
|
+
process.exitCode = 1
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
main()
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kimicode/cli",
|
|
3
|
+
"version": "1.0.37",
|
|
4
|
+
"description": "DeepSeekCode TypeScript CLI",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
7
|
+
"bin": {
|
|
8
|
+
"dscode": "bin/dscode.exe",
|
|
9
|
+
"kimicode": "bin/dscode.exe"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"postinstall": "node install.cjs"
|
|
13
|
+
},
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"playwright": "1.62.1",
|
|
19
|
+
"xterm": "5.3.0"
|
|
20
|
+
},
|
|
21
|
+
"optionalDependencies": {
|
|
22
|
+
"@kimicode/cli-darwin-arm64": "1.0.37",
|
|
23
|
+
"@kimicode/cli-darwin-x64": "1.0.37",
|
|
24
|
+
"@kimicode/cli-linux-x64": "1.0.37",
|
|
25
|
+
"@kimicode/cli-linux-arm64": "1.0.37",
|
|
26
|
+
"@kimicode/cli-linux-x64-musl": "1.0.37",
|
|
27
|
+
"@kimicode/cli-linux-arm64-musl": "1.0.37",
|
|
28
|
+
"@kimicode/cli-win32-x64": "1.0.37",
|
|
29
|
+
"@kimicode/cli-win32-arm64": "1.0.37"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"bin/",
|
|
33
|
+
"install.cjs",
|
|
34
|
+
"cli-wrapper.cjs",
|
|
35
|
+
"web/dist/",
|
|
36
|
+
"scripts/figure/",
|
|
37
|
+
"README.md"
|
|
38
|
+
]
|
|
39
|
+
}
|