@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.
Files changed (401) hide show
  1. package/README.md +221 -0
  2. package/bin/dscode.exe +12 -0
  3. package/cli-wrapper.cjs +105 -0
  4. package/install.cjs +177 -0
  5. package/package.json +39 -0
  6. package/scripts/figure/compose.py +363 -0
  7. package/scripts/figure/replay-shots.mjs +205 -0
  8. package/web/dist/assets/AssistantsView-OMdgsTIj.js +1 -0
  9. package/web/dist/assets/AutomationView-BPwjLbkL.js +1 -0
  10. package/web/dist/assets/ChannelConfigView-JDljUn42.js +8 -0
  11. package/web/dist/assets/ConnectorsView-AemNT1Ae.js +1 -0
  12. package/web/dist/assets/FileTreeView-DYx-0jFV.js +11 -0
  13. package/web/dist/assets/HookConfigView-CS1QqgPx.js +1 -0
  14. package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  15. package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  16. package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  17. package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  18. package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  19. package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  20. package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  21. package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  22. package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  23. package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  24. package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  25. package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  26. package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  27. package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  28. package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  29. package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  30. package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  31. package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  32. package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  33. package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  34. package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  35. package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  36. package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  37. package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  38. package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  39. package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  40. package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  41. package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  42. package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  43. package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  44. package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  45. package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  46. package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  47. package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  48. package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  49. package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  50. package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  51. package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  52. package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  53. package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  54. package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  55. package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  56. package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  57. package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  58. package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  59. package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  60. package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  61. package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  62. package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  63. package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  64. package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  65. package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  66. package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  67. package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  68. package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  69. package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  70. package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  71. package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  72. package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  73. package/web/dist/assets/ModelsView-B3nHezvJ.js +1 -0
  74. package/web/dist/assets/PluginsView-C4Xc70ec.js +1 -0
  75. package/web/dist/assets/SessionGrid-BGpz0-op.css +1 -0
  76. package/web/dist/assets/SessionGrid-C9-LeJH0.js +47 -0
  77. package/web/dist/assets/SettingsModal-CjWT1C66.js +4 -0
  78. package/web/dist/assets/SkillsView-DTZyXald.js +1 -0
  79. package/web/dist/assets/TemplatesTab-CE-CfCf2.js +1 -0
  80. package/web/dist/assets/ThreeScene-CMqkpyKO.js +2863 -0
  81. package/web/dist/assets/ThreeScene-DvOrMIoG.css +1 -0
  82. package/web/dist/assets/ToolsView-CrEHDTEO.js +1 -0
  83. package/web/dist/assets/abap-BdImnpbu.js +1 -0
  84. package/web/dist/assets/actionscript-3-B3316cI-.js +1 -0
  85. package/web/dist/assets/ada-bCR0ucgS.js +1 -0
  86. package/web/dist/assets/ahk-CsyLZFj1.js +1 -0
  87. package/web/dist/assets/ahk2-8Zs4aa1G.js +1 -0
  88. package/web/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  89. package/web/dist/assets/angular-html-DA-rfuFy.js +1 -0
  90. package/web/dist/assets/angular-ts-BrjP3tb8.js +1 -0
  91. package/web/dist/assets/apache-Pmp26Uib.js +1 -0
  92. package/web/dist/assets/apex-DhZFqWV2.js +1 -0
  93. package/web/dist/assets/apl-CORt7UWP.js +1 -0
  94. package/web/dist/assets/applescript-Co6uUVPk.js +1 -0
  95. package/web/dist/assets/ara-BRHolxvo.js +1 -0
  96. package/web/dist/assets/asciidoc-CSVQ5wI8.js +1 -0
  97. package/web/dist/assets/asm-D_Q5rh1f.js +1 -0
  98. package/web/dist/assets/astro-HNnZUWAn.js +1 -0
  99. package/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  100. package/web/dist/assets/awk-DMzUqQB5.js +1 -0
  101. package/web/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
  102. package/web/dist/assets/ayu-light-BA47KaF1.js +1 -0
  103. package/web/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
  104. package/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
  105. package/web/dist/assets/bat-CickPsom.js +1 -0
  106. package/web/dist/assets/beancount-k_qm7-4y.js +1 -0
  107. package/web/dist/assets/berry-uYugtg8r.js +1 -0
  108. package/web/dist/assets/bibtex-CHM0blh-.js +1 -0
  109. package/web/dist/assets/bicep-Bmn6On1c.js +1 -0
  110. package/web/dist/assets/bird2-Bx8U0n9b.js +1 -0
  111. package/web/dist/assets/blade-2xfisSek.js +1 -0
  112. package/web/dist/assets/bsl-DlhNcFeZ.js +1 -0
  113. package/web/dist/assets/c-BIGW1oBm.js +1 -0
  114. package/web/dist/assets/c3-Dp5svz6Z.js +1 -0
  115. package/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  116. package/web/dist/assets/cairo-KRGpt6FW.js +1 -0
  117. package/web/dist/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
  118. package/web/dist/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
  119. package/web/dist/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
  120. package/web/dist/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
  121. package/web/dist/assets/chapel-DTp_pixX.js +1 -0
  122. package/web/dist/assets/clarity-Dn5IMItf.js +1 -0
  123. package/web/dist/assets/clojure-P80f7IUj.js +1 -0
  124. package/web/dist/assets/cmake-D1j8_8rp.js +1 -0
  125. package/web/dist/assets/cobol-nBiQ_Alo.js +1 -0
  126. package/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
  127. package/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
  128. package/web/dist/assets/coffee-Ch7k5sss.js +1 -0
  129. package/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  130. package/web/dist/assets/coq-C7JzOVbR.js +1 -0
  131. package/web/dist/assets/cpp-BMRokrvK.js +1 -0
  132. package/web/dist/assets/crystal-DGywbUpC.js +1 -0
  133. package/web/dist/assets/csharp-DSvCPggb.js +1 -0
  134. package/web/dist/assets/css-CLj8gQPS.js +1 -0
  135. package/web/dist/assets/csv-fuZLfV_i.js +1 -0
  136. package/web/dist/assets/cue-D82EKSYY.js +1 -0
  137. package/web/dist/assets/cypher-COkxafJQ.js +1 -0
  138. package/web/dist/assets/d-85-TOEBH.js +1 -0
  139. package/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  140. package/web/dist/assets/dart-bE4Kk8sk.js +1 -0
  141. package/web/dist/assets/dax-CEL-wOlO.js +1 -0
  142. package/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
  143. package/web/dist/assets/diff-D97Zzqfu.js +1 -0
  144. package/web/dist/assets/docker-BcOcwvcX.js +1 -0
  145. package/web/dist/assets/dotenv-Da5cRb03.js +1 -0
  146. package/web/dist/assets/dracula-BzJJZx-M.js +1 -0
  147. package/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  148. package/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  149. package/web/dist/assets/edge-FbVlp4U3.js +1 -0
  150. package/web/dist/assets/elixir-CkH2-t6x.js +1 -0
  151. package/web/dist/assets/elm-DbKCFpqz.js +1 -0
  152. package/web/dist/assets/emacs-lisp-C_m_b--Z.js +1 -0
  153. package/web/dist/assets/erb-DXfck5VN.js +1 -0
  154. package/web/dist/assets/erlang-DsQrWhSR.js +1 -0
  155. package/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  156. package/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
  157. package/web/dist/assets/fennel-BYunw83y.js +1 -0
  158. package/web/dist/assets/fish-BvzEVeQv.js +1 -0
  159. package/web/dist/assets/fluent-C4IJs8-o.js +1 -0
  160. package/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  161. package/web/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  162. package/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
  163. package/web/dist/assets/gdresource-TyuKm33G.js +1 -0
  164. package/web/dist/assets/gdscript-DqcFQ5yU.js +1 -0
  165. package/web/dist/assets/gdshader-DkwncUOv.js +1 -0
  166. package/web/dist/assets/genie-D0YGMca9.js +1 -0
  167. package/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
  168. package/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
  169. package/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
  170. package/web/dist/assets/github-dark-DHJKELXO.js +1 -0
  171. package/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  172. package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  173. package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  174. package/web/dist/assets/github-light-DAi9KRSo.js +1 -0
  175. package/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  176. package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  177. package/web/dist/assets/gleam-BspZqrRM.js +1 -0
  178. package/web/dist/assets/glimmer-js-ByusRIyA.js +1 -0
  179. package/web/dist/assets/glimmer-ts-BfAWNZQY.js +1 -0
  180. package/web/dist/assets/glsl-DplSGwfg.js +1 -0
  181. package/web/dist/assets/gn-n2N0HUVH.js +1 -0
  182. package/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
  183. package/web/dist/assets/go-C27-OAKa.js +1 -0
  184. package/web/dist/assets/graphql-ChdNCCLP.js +1 -0
  185. package/web/dist/assets/groovy-gcz8RCvz.js +1 -0
  186. package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  187. package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  188. package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  189. package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  190. package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  191. package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  192. package/web/dist/assets/hack-BWmVpMyf.js +1 -0
  193. package/web/dist/assets/haml-D5jkg6IW.js +1 -0
  194. package/web/dist/assets/handlebars-BpdQsYii.js +1 -0
  195. package/web/dist/assets/haskell-Df6bDoY_.js +1 -0
  196. package/web/dist/assets/haxe-CfZj7gIn.js +1 -0
  197. package/web/dist/assets/hcl-BWvSN4gD.js +1 -0
  198. package/web/dist/assets/hjson-D5-asLiD.js +1 -0
  199. package/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
  200. package/web/dist/assets/horizon-BUw7H-hv.js +1 -0
  201. package/web/dist/assets/horizon-bright-CUuTKBJd.js +1 -0
  202. package/web/dist/assets/houston-DnULxvSX.js +1 -0
  203. package/web/dist/assets/html-derivative-DlHx6ybY.js +1 -0
  204. package/web/dist/assets/html-pp8916En.js +1 -0
  205. package/web/dist/assets/http-jrhK8wxY.js +1 -0
  206. package/web/dist/assets/hurl-irOxFIW8.js +1 -0
  207. package/web/dist/assets/hxml-2-FPmUDs.js +1 -0
  208. package/web/dist/assets/hy-DFXneXwc.js +1 -0
  209. package/web/dist/assets/icons-f1hlMKvD.js +724 -0
  210. package/web/dist/assets/imba-DGztddWO.js +1 -0
  211. package/web/dist/assets/index-BCHbHIbw.css +1 -0
  212. package/web/dist/assets/index-u1vYyqna.js +592 -0
  213. package/web/dist/assets/ini-BEwlwnbL.js +1 -0
  214. package/web/dist/assets/java-CylS5w8V.js +1 -0
  215. package/web/dist/assets/javascript-wDzz0qaB.js +1 -0
  216. package/web/dist/assets/jinja-f2NsQr07.js +1 -0
  217. package/web/dist/assets/jison-wvAkD_A8.js +1 -0
  218. package/web/dist/assets/json-Cp-IABpG.js +1 -0
  219. package/web/dist/assets/json5-C9tS-k6U.js +1 -0
  220. package/web/dist/assets/jsonc-Des-eS-w.js +1 -0
  221. package/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
  222. package/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
  223. package/web/dist/assets/jssm-C2t-YnRu.js +1 -0
  224. package/web/dist/assets/jsx-g9-lgVsj.js +1 -0
  225. package/web/dist/assets/julia-5Bft2YPA.js +1 -0
  226. package/web/dist/assets/just-Cwhn7H3k.js +1 -0
  227. package/web/dist/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
  228. package/web/dist/assets/kanagawa-lotus-C3DzagqV.js +1 -0
  229. package/web/dist/assets/kanagawa-wave-DFGoQZhC.js +1 -0
  230. package/web/dist/assets/kdl-DV7GczEv.js +1 -0
  231. package/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  232. package/web/dist/assets/kusto-wEQ09or8.js +1 -0
  233. package/web/dist/assets/laserwave-DUszq2jm.js +1 -0
  234. package/web/dist/assets/latex-D5pSuvFb.js +1 -0
  235. package/web/dist/assets/lean-BZvkOJ9d.js +1 -0
  236. package/web/dist/assets/less-B1dDrJ26.js +1 -0
  237. package/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
  238. package/web/dist/assets/liquid-C0sCDyMI.js +1 -0
  239. package/web/dist/assets/llvm-BZoOZj88.js +1 -0
  240. package/web/dist/assets/log-2UxHyX5q.js +1 -0
  241. package/web/dist/assets/logo-BtOb2qkB.js +1 -0
  242. package/web/dist/assets/lua-BaeVxFsk.js +1 -0
  243. package/web/dist/assets/luau-BnpPk5vE.js +1 -0
  244. package/web/dist/assets/make-CHLpvVh8.js +1 -0
  245. package/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  246. package/web/dist/assets/markdown-DEtuzEyz.js +30 -0
  247. package/web/dist/assets/marko-DjSrsDqO.js +1 -0
  248. package/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
  249. package/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  250. package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  251. package/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  252. package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  253. package/web/dist/assets/matlab-D7o27uSR.js +1 -0
  254. package/web/dist/assets/mdc-D1_yUvq7.js +1 -0
  255. package/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  256. package/web/dist/assets/mermaid-CQcHuHx7.js +1 -0
  257. package/web/dist/assets/min-dark-CafNBF8u.js +1 -0
  258. package/web/dist/assets/min-light-CTRr51gU.js +1 -0
  259. package/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  260. package/web/dist/assets/mojo-DJz3ZmWd.js +1 -0
  261. package/web/dist/assets/monokai-BRVnQi9A.js +1 -0
  262. package/web/dist/assets/moonbit-CHtswR0a.js +1 -0
  263. package/web/dist/assets/move-el3G9tDJ.js +1 -0
  264. package/web/dist/assets/narrat-DRg8JJMk.js +1 -0
  265. package/web/dist/assets/nextflow-C-mBbutL.js +1 -0
  266. package/web/dist/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  267. package/web/dist/assets/nginx-BpAMiNFr.js +1 -0
  268. package/web/dist/assets/night-owl-C39BiMTA.js +1 -0
  269. package/web/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  270. package/web/dist/assets/nim-BIad80T-.js +1 -0
  271. package/web/dist/assets/nix-CwoSXNpI.js +1 -0
  272. package/web/dist/assets/nord-Ddv68eIx.js +1 -0
  273. package/web/dist/assets/nsis-BlV79W_Q.js +1 -0
  274. package/web/dist/assets/nushell-D3jzshHO.js +1 -0
  275. package/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
  276. package/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  277. package/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
  278. package/web/dist/assets/odin-BBf5iR-q.js +1 -0
  279. package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  280. package/web/dist/assets/one-light-C3Wv6jpd.js +1 -0
  281. package/web/dist/assets/openscad-C4EeE6gA.js +1 -0
  282. package/web/dist/assets/org-DM6o9KBp.js +1 -0
  283. package/web/dist/assets/panels-Bn-2wCur.js +1 -0
  284. package/web/dist/assets/pascal-D93ZcfNL.js +1 -0
  285. package/web/dist/assets/perl-B9cMNwum.js +1 -0
  286. package/web/dist/assets/php-Csjmro_R.js +1 -0
  287. package/web/dist/assets/pkl-u5AG7uiY.js +1 -0
  288. package/web/dist/assets/plastic-3e1v2bzS.js +1 -0
  289. package/web/dist/assets/plsql-ChMvpjG-.js +1 -0
  290. package/web/dist/assets/po-BTJTHyun.js +1 -0
  291. package/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
  292. package/web/dist/assets/polar-C0HS_06l.js +1 -0
  293. package/web/dist/assets/postcss-CXtECtnM.js +1 -0
  294. package/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
  295. package/web/dist/assets/powershell-BmBUJMz7.js +1 -0
  296. package/web/dist/assets/prisma-Vru482bI.js +1 -0
  297. package/web/dist/assets/prolog-CbFg5uaA.js +1 -0
  298. package/web/dist/assets/proto-C7zT0LnQ.js +1 -0
  299. package/web/dist/assets/pug-DKIMFp6K.js +1 -0
  300. package/web/dist/assets/puppet-BMWR74SV.js +1 -0
  301. package/web/dist/assets/purescript-CklMAg4u.js +1 -0
  302. package/web/dist/assets/python-B6aJPvgy.js +1 -0
  303. package/web/dist/assets/qml-3beO22l8.js +1 -0
  304. package/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
  305. package/web/dist/assets/qss-IeuSbFQv.js +1 -0
  306. package/web/dist/assets/r-Cf5RLm7j.js +1 -0
  307. package/web/dist/assets/racket-BqYA7rlc.js +1 -0
  308. package/web/dist/assets/raku-DXvB9xmW.js +1 -0
  309. package/web/dist/assets/razor-BjBPvh-w.js +1 -0
  310. package/web/dist/assets/rbs-CpoqiR4B.js +1 -0
  311. package/web/dist/assets/react-vendor-ClBKp0t-.js +9 -0
  312. package/web/dist/assets/red-hvxz__6c.js +1 -0
  313. package/web/dist/assets/reg-C-SQnVFl.js +1 -0
  314. package/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
  315. package/web/dist/assets/rel-C3B-1QV4.js +1 -0
  316. package/web/dist/assets/riscv-BM1_JUlF.js +1 -0
  317. package/web/dist/assets/ron-D8l8udqQ.js +1 -0
  318. package/web/dist/assets/rose-pine-5qJOZa0Y.js +1 -0
  319. package/web/dist/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
  320. package/web/dist/assets/rose-pine-moon-C9pEdX9L.js +1 -0
  321. package/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  322. package/web/dist/assets/rst-bs7f0vWN.js +1 -0
  323. package/web/dist/assets/ruby-C0TQ7zu5.js +1 -0
  324. package/web/dist/assets/rust-B1yitclQ.js +1 -0
  325. package/web/dist/assets/sas-DEy46yEz.js +1 -0
  326. package/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
  327. package/web/dist/assets/scala-CqE71os6.js +1 -0
  328. package/web/dist/assets/scheme-C98Dy4si.js +1 -0
  329. package/web/dist/assets/scss-D5BDwBP9.js +1 -0
  330. package/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
  331. package/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  332. package/web/dist/assets/shellscript-Yzrsuije.js +1 -0
  333. package/web/dist/assets/shellsession-BADoaaVG.js +1 -0
  334. package/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
  335. package/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  336. package/web/dist/assets/smalltalk-BOQMe2GC.js +1 -0
  337. package/web/dist/assets/smithy-cds9vsN8.js +1 -0
  338. package/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  339. package/web/dist/assets/solarized-dark-CpvCGNkr.js +1 -0
  340. package/web/dist/assets/solarized-light-Dlz6yCKv.js +1 -0
  341. package/web/dist/assets/solidity-DijEV5ha.js +1 -0
  342. package/web/dist/assets/soy-8wufbnw4.js +1 -0
  343. package/web/dist/assets/sparql-rVzFXLq3.js +1 -0
  344. package/web/dist/assets/splunk-BtCnVYZw.js +1 -0
  345. package/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  346. package/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  347. package/web/dist/assets/stata-DI20mbqo.js +1 -0
  348. package/web/dist/assets/state-xD58vmym.js +17 -0
  349. package/web/dist/assets/sttLanguages-BNRptAQA.js +1 -0
  350. package/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
  351. package/web/dist/assets/surrealql-Cjom0U5J.js +1 -0
  352. package/web/dist/assets/svelte-Cy7k_4gC.js +1 -0
  353. package/web/dist/assets/swift-C2oV4EkX.js +1 -0
  354. package/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  355. package/web/dist/assets/system-verilog-0hqHdDBg.js +1 -0
  356. package/web/dist/assets/systemd-4A_iFExJ.js +1 -0
  357. package/web/dist/assets/talonscript-CkByrt1z.js +1 -0
  358. package/web/dist/assets/tasl-QIJgUcNo.js +1 -0
  359. package/web/dist/assets/tcl-dwOrl1Do.js +1 -0
  360. package/web/dist/assets/templ-DhtptRzy.js +1 -0
  361. package/web/dist/assets/terraform-BETggiCN.js +1 -0
  362. package/web/dist/assets/tex-D96PA37w.js +1 -0
  363. package/web/dist/assets/tokyo-night-hegEt444.js +1 -0
  364. package/web/dist/assets/toml-vGWfd6FD.js +1 -0
  365. package/web/dist/assets/ts-tags-D351s5mN.js +1 -0
  366. package/web/dist/assets/tsv-B_m7g4N7.js +1 -0
  367. package/web/dist/assets/tsx-COt5Ahok.js +1 -0
  368. package/web/dist/assets/turtle-BsS91CYL.js +1 -0
  369. package/web/dist/assets/twig-27uCiNez.js +1 -0
  370. package/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
  371. package/web/dist/assets/typespec-CAFt9gP4.js +1 -0
  372. package/web/dist/assets/typst-BUadGCkm.js +1 -0
  373. package/web/dist/assets/v-BGw2Nkan.js +1 -0
  374. package/web/dist/assets/vala-CsfeWuGM.js +1 -0
  375. package/web/dist/assets/vb-Cu-pLBUe.js +1 -0
  376. package/web/dist/assets/verilog-nZwndyjY.js +1 -0
  377. package/web/dist/assets/vesper-DRje8inN.js +1 -0
  378. package/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  379. package/web/dist/assets/viml-CJc9bBzg.js +1 -0
  380. package/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  381. package/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  382. package/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  383. package/web/dist/assets/vue-BqiEGhQt.js +1 -0
  384. package/web/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  385. package/web/dist/assets/vue-vine-BoDAl6tE.js +1 -0
  386. package/web/dist/assets/vyper-CDx5xZoG.js +1 -0
  387. package/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
  388. package/web/dist/assets/wasm-MzD3tlZU.js +1 -0
  389. package/web/dist/assets/wenyan-BV7otONQ.js +1 -0
  390. package/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  391. package/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
  392. package/web/dist/assets/wit-5i3qLPDT.js +1 -0
  393. package/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
  394. package/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  395. package/web/dist/assets/xsl-CtQFsRM5.js +1 -0
  396. package/web/dist/assets/yaml-Buea-lGh.js +1 -0
  397. package/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
  398. package/web/dist/assets/zig-VOosw3JB.js +1 -0
  399. package/web/dist/favicon.svg +40 -0
  400. package/web/dist/index.html +26 -0
  401. package/web/dist/logo.svg +40 -0
package/README.md ADDED
@@ -0,0 +1,221 @@
1
+ # @deepseekcode/cli
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@deepseekcode/cli.svg)](https://www.npmjs.com/package/@deepseekcode/cli)
4
+ [![License: Proprietary](https://img.shields.io/badge/license-Proprietary-red.svg)](#license)
5
+ [![Node version](https://img.shields.io/node/v/@deepseekcode/cli.svg)](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
@@ -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
+ }