@openbuddy/cli 0.0.0-stage → 1.0.40

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 (485) hide show
  1. package/LICENSE.md +12 -0
  2. package/README.md +625 -2
  3. package/bin/dscode.exe +12 -0
  4. package/bin/stt/requirements.txt +32 -0
  5. package/bin/stt/stt_server.py +619 -0
  6. package/bin/tts/requirements.txt +21 -0
  7. package/bin/tts/tts_server.py +404 -0
  8. package/cli-wrapper.cjs +109 -0
  9. package/install.cjs +177 -0
  10. package/llms.txt +88 -0
  11. package/package.json +56 -4
  12. package/scripts/figure/compose.py +363 -0
  13. package/scripts/figure/replay-shots.mjs +205 -0
  14. package/web/dist/assets/AssistantsView-BiUiWjhF.js +1 -0
  15. package/web/dist/assets/AutomationView-Dcf_yNaI.js +1 -0
  16. package/web/dist/assets/ChannelConfigView-BLnxsMGm.js +8 -0
  17. package/web/dist/assets/ConnectorsView-CX3E6X6c.js +1 -0
  18. package/web/dist/assets/DesignSystemView--x-P-lpD.js +1 -0
  19. package/web/dist/assets/Drawer-CjAgqH3B.js +1 -0
  20. package/web/dist/assets/FileTreeView-Chb_fzTK.js +11 -0
  21. package/web/dist/assets/HookConfigView-EafYlWdN.js +1 -0
  22. package/web/dist/assets/InputArea-BbHslX7b.js +50 -0
  23. package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  24. package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  25. package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  26. package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  27. package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  28. package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  29. package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  30. package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  31. package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  32. package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  33. package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  34. package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  35. package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  36. package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  37. package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  38. package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  39. package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  40. package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  41. package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  42. package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  43. package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  44. package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  45. package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  46. package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  47. package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  48. package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  49. package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  50. package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  51. package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  52. package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  53. package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  54. package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  55. package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  56. package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  57. package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  58. package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  59. package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  60. package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  61. package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  62. package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  63. package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  64. package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  65. package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  66. package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  67. package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  68. package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  69. package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  70. package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  71. package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  72. package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  73. package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  74. package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  75. package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  76. package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  77. package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  78. package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  79. package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  80. package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  81. package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  82. package/web/dist/assets/ModelsView-CGN5Nljr.js +1 -0
  83. package/web/dist/assets/PluginsView-CDiJgvI8.js +2 -0
  84. package/web/dist/assets/ProjectsView-C5Usmwqy.js +1 -0
  85. package/web/dist/assets/SessionGrid-BGpz0-op.css +1 -0
  86. package/web/dist/assets/SessionGrid-Drxg0r_u.js +4 -0
  87. package/web/dist/assets/SettingsModal-Cmts6aBG.js +10 -0
  88. package/web/dist/assets/Skeleton-Dsk6B0U3.js +1 -0
  89. package/web/dist/assets/SkillsView-TEDR_3XX.js +1 -0
  90. package/web/dist/assets/TemplatesTab-DtN5Kdgh.js +1 -0
  91. package/web/dist/assets/ToolsView-VukZnIt1.js +1 -0
  92. package/web/dist/assets/VizCardsSkeleton-C_GaEfXd.js +1 -0
  93. package/web/dist/assets/abap-BdImnpbu.js +1 -0
  94. package/web/dist/assets/abnfDiagram-YUKMZFIV-BIFw6B_N.js +1 -0
  95. package/web/dist/assets/actionscript-3-B3316cI-.js +1 -0
  96. package/web/dist/assets/ada-bCR0ucgS.js +1 -0
  97. package/web/dist/assets/ahk-CsyLZFj1.js +1 -0
  98. package/web/dist/assets/ahk2-8Zs4aa1G.js +1 -0
  99. package/web/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  100. package/web/dist/assets/angular-html-DA-rfuFy.js +1 -0
  101. package/web/dist/assets/angular-ts-BrjP3tb8.js +1 -0
  102. package/web/dist/assets/apache-Pmp26Uib.js +1 -0
  103. package/web/dist/assets/apex-DhZFqWV2.js +1 -0
  104. package/web/dist/assets/apl-CORt7UWP.js +1 -0
  105. package/web/dist/assets/applescript-Co6uUVPk.js +1 -0
  106. package/web/dist/assets/ara-BRHolxvo.js +1 -0
  107. package/web/dist/assets/arc-BZQ951h9.js +1 -0
  108. package/web/dist/assets/architectureDiagram-47P4ROYG-BP5qiXzf.js +36 -0
  109. package/web/dist/assets/asciidoc-CSVQ5wI8.js +1 -0
  110. package/web/dist/assets/asm-D_Q5rh1f.js +1 -0
  111. package/web/dist/assets/astro-HNnZUWAn.js +1 -0
  112. package/web/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  113. package/web/dist/assets/awk-DMzUqQB5.js +1 -0
  114. package/web/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
  115. package/web/dist/assets/ayu-light-BA47KaF1.js +1 -0
  116. package/web/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
  117. package/web/dist/assets/ballerina-BFfxhgS-.js +1 -0
  118. package/web/dist/assets/bat-CickPsom.js +1 -0
  119. package/web/dist/assets/beancount-k_qm7-4y.js +1 -0
  120. package/web/dist/assets/berry-uYugtg8r.js +1 -0
  121. package/web/dist/assets/bibtex-CHM0blh-.js +1 -0
  122. package/web/dist/assets/bicep-Bmn6On1c.js +1 -0
  123. package/web/dist/assets/bird2-Bx8U0n9b.js +1 -0
  124. package/web/dist/assets/blade-2xfisSek.js +1 -0
  125. package/web/dist/assets/blockDiagram-E7TT5TSB-DtRpcE7F.js +140 -0
  126. package/web/dist/assets/bsl-DlhNcFeZ.js +1 -0
  127. package/web/dist/assets/c-BIGW1oBm.js +1 -0
  128. package/web/dist/assets/c3-Dp5svz6Z.js +1 -0
  129. package/web/dist/assets/c4Diagram-CRA5TL53-Gdzn8UBh.js +38 -0
  130. package/web/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  131. package/web/dist/assets/cairo-KRGpt6FW.js +1 -0
  132. package/web/dist/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
  133. package/web/dist/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
  134. package/web/dist/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
  135. package/web/dist/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
  136. package/web/dist/assets/channel-BND6_KSH.js +1 -0
  137. package/web/dist/assets/chapel-DTp_pixX.js +1 -0
  138. package/web/dist/assets/chunk-2Q5K7J3B-3U6HMlsm.js +1 -0
  139. package/web/dist/assets/chunk-5VM5RSS4-CYl9mwa-.js +15 -0
  140. package/web/dist/assets/chunk-7TKQ45FW-Dn6ktcY5.js +1 -0
  141. package/web/dist/assets/chunk-AW2ZBBNX-De0QX6p1.js +88 -0
  142. package/web/dist/assets/chunk-FVRAUYC3-CpXDfvz4.js +2 -0
  143. package/web/dist/assets/chunk-HTAEGDNF-D1KDvcDd.js +1 -0
  144. package/web/dist/assets/chunk-JWPE2WC7-umm4A-fq.js +1 -0
  145. package/web/dist/assets/chunk-KQW6MTUR-JYH94hpE.js +1 -0
  146. package/web/dist/assets/chunk-XXDRQBXY-CSlCFByc.js +1 -0
  147. package/web/dist/assets/clarity-Dn5IMItf.js +1 -0
  148. package/web/dist/assets/classDiagram-v2-K4WV4PDN-DnFwS0qN.js +217 -0
  149. package/web/dist/assets/clojure-P80f7IUj.js +1 -0
  150. package/web/dist/assets/cmake-D1j8_8rp.js +1 -0
  151. package/web/dist/assets/cobol-nBiQ_Alo.js +1 -0
  152. package/web/dist/assets/codeowners-Bp6g37R7.js +1 -0
  153. package/web/dist/assets/codeql-DsOJ9woJ.js +1 -0
  154. package/web/dist/assets/coffee-Ch7k5sss.js +1 -0
  155. package/web/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  156. package/web/dist/assets/coq-C7JzOVbR.js +1 -0
  157. package/web/dist/assets/cose-bilkent-JH36ORCC-BxUTUyep.js +1 -0
  158. package/web/dist/assets/cpp-BMRokrvK.js +1 -0
  159. package/web/dist/assets/crystal-DGywbUpC.js +1 -0
  160. package/web/dist/assets/csharp-DSvCPggb.js +1 -0
  161. package/web/dist/assets/css-CLj8gQPS.js +1 -0
  162. package/web/dist/assets/csv-fuZLfV_i.js +1 -0
  163. package/web/dist/assets/cue-D82EKSYY.js +1 -0
  164. package/web/dist/assets/cynefin-EF2NZ3EQ-CiMvulJr.js +141 -0
  165. package/web/dist/assets/cynefinDiagram-3GCD6N5R-DuXFORdW.js +62 -0
  166. package/web/dist/assets/cypher-COkxafJQ.js +1 -0
  167. package/web/dist/assets/cytoscape.esm-Ix0LnXOy.js +331 -0
  168. package/web/dist/assets/d-85-TOEBH.js +1 -0
  169. package/web/dist/assets/dagre-W4DXFKR2-DzMZHXci.js +4 -0
  170. package/web/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  171. package/web/dist/assets/dart-bE4Kk8sk.js +1 -0
  172. package/web/dist/assets/dax-CEL-wOlO.js +1 -0
  173. package/web/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  174. package/web/dist/assets/desktop-BmXAJ9_W.js +1 -0
  175. package/web/dist/assets/diagram-2UJZ2QOL-B6tO5G1v.js +200 -0
  176. package/web/dist/assets/diagram-OVF4WLC6-DRZt8tGc.js +24 -0
  177. package/web/dist/assets/diagram-PFPMY2P6-DGh6IecR.js +30 -0
  178. package/web/dist/assets/diagram-UMYRVEAY-BLbnt0yT.js +24 -0
  179. package/web/dist/assets/diagram-YEKJPTXX-C-S5DVhj.js +41 -0
  180. package/web/dist/assets/diagram-ZIFT7M5P-JrGHTWbo.js +3 -0
  181. package/web/dist/assets/diff-D97Zzqfu.js +1 -0
  182. package/web/dist/assets/docker-BcOcwvcX.js +1 -0
  183. package/web/dist/assets/dotenv-Da5cRb03.js +1 -0
  184. package/web/dist/assets/dracula-BzJJZx-M.js +1 -0
  185. package/web/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  186. package/web/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  187. package/web/dist/assets/ebnfDiagram-VR2GEFS7-DPXA-YOi.js +1 -0
  188. package/web/dist/assets/edge-FbVlp4U3.js +1 -0
  189. package/web/dist/assets/elixir-CkH2-t6x.js +1 -0
  190. package/web/dist/assets/elk-IJKZMXRS-CINeWt2W.js +27 -0
  191. package/web/dist/assets/elm-DbKCFpqz.js +1 -0
  192. package/web/dist/assets/emacs-lisp-C_m_b--Z.js +1 -0
  193. package/web/dist/assets/erDiagram-O2IAPWRE-PPaHmqA1.js +99 -0
  194. package/web/dist/assets/erb-DXfck5VN.js +1 -0
  195. package/web/dist/assets/erlang-DsQrWhSR.js +1 -0
  196. package/web/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  197. package/web/dist/assets/everforest-light-C8M2exoo.js +1 -0
  198. package/web/dist/assets/fennel-BYunw83y.js +1 -0
  199. package/web/dist/assets/fish-BvzEVeQv.js +1 -0
  200. package/web/dist/assets/flowDiagram-OXPTDLAJ-t-u0QXEA.js +213 -0
  201. package/web/dist/assets/fluent-C4IJs8-o.js +1 -0
  202. package/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  203. package/web/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  204. package/web/dist/assets/fsharp-CXgrBDvD.js +1 -0
  205. package/web/dist/assets/ganttDiagram-R7TSEDQI-Bw49ZD_b.js +292 -0
  206. package/web/dist/assets/gdresource-TyuKm33G.js +1 -0
  207. package/web/dist/assets/gdscript-DqcFQ5yU.js +1 -0
  208. package/web/dist/assets/gdshader-DkwncUOv.js +1 -0
  209. package/web/dist/assets/genie-D0YGMca9.js +1 -0
  210. package/web/dist/assets/gherkin-DyxjwDmM.js +1 -0
  211. package/web/dist/assets/git-commit-F4YmCXRG.js +1 -0
  212. package/web/dist/assets/git-rebase-r7XF79zn.js +1 -0
  213. package/web/dist/assets/gitGraphDiagram-XJZIOB7I-BAfOqeeg.js +106 -0
  214. package/web/dist/assets/github-dark-DHJKELXO.js +1 -0
  215. package/web/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  216. package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  217. package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  218. package/web/dist/assets/github-light-DAi9KRSo.js +1 -0
  219. package/web/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  220. package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  221. package/web/dist/assets/gleam-BspZqrRM.js +1 -0
  222. package/web/dist/assets/glimmer-js-ByusRIyA.js +1 -0
  223. package/web/dist/assets/glimmer-ts-BfAWNZQY.js +1 -0
  224. package/web/dist/assets/glsl-DplSGwfg.js +1 -0
  225. package/web/dist/assets/gn-n2N0HUVH.js +1 -0
  226. package/web/dist/assets/gnuplot-DdkO51Og.js +1 -0
  227. package/web/dist/assets/go-C27-OAKa.js +1 -0
  228. package/web/dist/assets/graph-Bn3Yngep.js +1 -0
  229. package/web/dist/assets/graphql-ChdNCCLP.js +1 -0
  230. package/web/dist/assets/groovy-gcz8RCvz.js +1 -0
  231. package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  232. package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  233. package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  234. package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  235. package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  236. package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  237. package/web/dist/assets/hack-BWmVpMyf.js +1 -0
  238. package/web/dist/assets/haml-D5jkg6IW.js +1 -0
  239. package/web/dist/assets/handlebars-BpdQsYii.js +1 -0
  240. package/web/dist/assets/haskell-Df6bDoY_.js +1 -0
  241. package/web/dist/assets/haxe-CfZj7gIn.js +1 -0
  242. package/web/dist/assets/hcl-BWvSN4gD.js +1 -0
  243. package/web/dist/assets/hjson-D5-asLiD.js +1 -0
  244. package/web/dist/assets/hlsl-D3lLCCz7.js +1 -0
  245. package/web/dist/assets/horizon-BUw7H-hv.js +1 -0
  246. package/web/dist/assets/horizon-bright-CUuTKBJd.js +1 -0
  247. package/web/dist/assets/houston-DnULxvSX.js +1 -0
  248. package/web/dist/assets/html-derivative-DlHx6ybY.js +1 -0
  249. package/web/dist/assets/html-pp8916En.js +1 -0
  250. package/web/dist/assets/http-jrhK8wxY.js +1 -0
  251. package/web/dist/assets/hurl-irOxFIW8.js +1 -0
  252. package/web/dist/assets/hxml-2-FPmUDs.js +1 -0
  253. package/web/dist/assets/hy-DFXneXwc.js +1 -0
  254. package/web/dist/assets/icons-Bm_ZzSAy.js +964 -0
  255. package/web/dist/assets/imba-DGztddWO.js +1 -0
  256. package/web/dist/assets/index-CeeLdENM.js +677 -0
  257. package/web/dist/assets/index-Ceez9lYk.css +1 -0
  258. package/web/dist/assets/infoDiagram-5W2HQ5XZ-Bv4RBxYW.js +2 -0
  259. package/web/dist/assets/ini-BEwlwnbL.js +1 -0
  260. package/web/dist/assets/init-Gi6I4Gst.js +1 -0
  261. package/web/dist/assets/ishikawaDiagram-K3B6WC7H-DEpj0bRp.js +70 -0
  262. package/web/dist/assets/java-CylS5w8V.js +1 -0
  263. package/web/dist/assets/javascript-wDzz0qaB.js +1 -0
  264. package/web/dist/assets/jinja-f2NsQr07.js +1 -0
  265. package/web/dist/assets/jison-wvAkD_A8.js +1 -0
  266. package/web/dist/assets/journeyDiagram-COXZFDF6-MJu84Iiz.js +139 -0
  267. package/web/dist/assets/json-Cp-IABpG.js +1 -0
  268. package/web/dist/assets/json5-C9tS-k6U.js +1 -0
  269. package/web/dist/assets/jsonc-Des-eS-w.js +1 -0
  270. package/web/dist/assets/jsonl-DcaNXYhu.js +1 -0
  271. package/web/dist/assets/jsonnet-DFQXde-d.js +1 -0
  272. package/web/dist/assets/jssm-C2t-YnRu.js +1 -0
  273. package/web/dist/assets/jsx-g9-lgVsj.js +1 -0
  274. package/web/dist/assets/julia-5Bft2YPA.js +1 -0
  275. package/web/dist/assets/just-Cwhn7H3k.js +1 -0
  276. package/web/dist/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
  277. package/web/dist/assets/kanagawa-lotus-C3DzagqV.js +1 -0
  278. package/web/dist/assets/kanagawa-wave-DFGoQZhC.js +1 -0
  279. package/web/dist/assets/kanban-definition-P3RFRI5V-mlYSRALK.js +89 -0
  280. package/web/dist/assets/kdl-DV7GczEv.js +1 -0
  281. package/web/dist/assets/kotlin-BdnUsdx6.js +1 -0
  282. package/web/dist/assets/kusto-wEQ09or8.js +1 -0
  283. package/web/dist/assets/laserwave-DUszq2jm.js +1 -0
  284. package/web/dist/assets/latex-D5pSuvFb.js +1 -0
  285. package/web/dist/assets/lean-BZvkOJ9d.js +1 -0
  286. package/web/dist/assets/less-B1dDrJ26.js +1 -0
  287. package/web/dist/assets/light-plus-B7mTdjB0.js +1 -0
  288. package/web/dist/assets/linear-5j9gt8MV.js +1 -0
  289. package/web/dist/assets/liquid-C0sCDyMI.js +1 -0
  290. package/web/dist/assets/llvm-BZoOZj88.js +1 -0
  291. package/web/dist/assets/log-2UxHyX5q.js +1 -0
  292. package/web/dist/assets/logo-BtOb2qkB.js +1 -0
  293. package/web/dist/assets/lua-BaeVxFsk.js +1 -0
  294. package/web/dist/assets/luau-BnpPk5vE.js +1 -0
  295. package/web/dist/assets/make-CHLpvVh8.js +1 -0
  296. package/web/dist/assets/markdown-BWXjRrSw.js +30 -0
  297. package/web/dist/assets/markdown-Cvjx9yec.js +1 -0
  298. package/web/dist/assets/marko-DjSrsDqO.js +1 -0
  299. package/web/dist/assets/material-theme-D5KoaKCx.js +1 -0
  300. package/web/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  301. package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  302. package/web/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  303. package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  304. package/web/dist/assets/matlab-D7o27uSR.js +1 -0
  305. package/web/dist/assets/mdc-D1_yUvq7.js +1 -0
  306. package/web/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  307. package/web/dist/assets/mermaid-CQcHuHx7.js +1 -0
  308. package/web/dist/assets/mermaid.core-DLb6eAON.js +314 -0
  309. package/web/dist/assets/min-dark-CafNBF8u.js +1 -0
  310. package/web/dist/assets/min-light-CTRr51gU.js +1 -0
  311. package/web/dist/assets/mindmap-definition-LZFPQGKD-C9v_57Ex.js +96 -0
  312. package/web/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  313. package/web/dist/assets/mojo-DJz3ZmWd.js +1 -0
  314. package/web/dist/assets/monokai-BRVnQi9A.js +1 -0
  315. package/web/dist/assets/moonbit-CHtswR0a.js +1 -0
  316. package/web/dist/assets/move-el3G9tDJ.js +1 -0
  317. package/web/dist/assets/narrat-DRg8JJMk.js +1 -0
  318. package/web/dist/assets/nextflow-C-mBbutL.js +1 -0
  319. package/web/dist/assets/nextflow-groovy-vE_lwT2v.js +1 -0
  320. package/web/dist/assets/nginx-BpAMiNFr.js +1 -0
  321. package/web/dist/assets/night-owl-C39BiMTA.js +1 -0
  322. package/web/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  323. package/web/dist/assets/nim-BIad80T-.js +1 -0
  324. package/web/dist/assets/nix-CwoSXNpI.js +1 -0
  325. package/web/dist/assets/nord-Ddv68eIx.js +1 -0
  326. package/web/dist/assets/nsis-BlV79W_Q.js +1 -0
  327. package/web/dist/assets/nushell-D3jzshHO.js +1 -0
  328. package/web/dist/assets/objective-c-DXmwc3jG.js +1 -0
  329. package/web/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  330. package/web/dist/assets/ocaml-C0hk2d4L.js +1 -0
  331. package/web/dist/assets/odin-BBf5iR-q.js +1 -0
  332. package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  333. package/web/dist/assets/one-light-C3Wv6jpd.js +1 -0
  334. package/web/dist/assets/openscad-C4EeE6gA.js +1 -0
  335. package/web/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  336. package/web/dist/assets/org-DM6o9KBp.js +1 -0
  337. package/web/dist/assets/panels-BQOvnbWH.js +1 -0
  338. package/web/dist/assets/pascal-D93ZcfNL.js +1 -0
  339. package/web/dist/assets/pegDiagram-BGZESJAR-KQP26s3-.js +1 -0
  340. package/web/dist/assets/perl-B9cMNwum.js +1 -0
  341. package/web/dist/assets/php-Csjmro_R.js +1 -0
  342. package/web/dist/assets/pieDiagram-CAPJLFHJ-DN3RQ_ih.js +39 -0
  343. package/web/dist/assets/pkl-u5AG7uiY.js +1 -0
  344. package/web/dist/assets/plastic-3e1v2bzS.js +1 -0
  345. package/web/dist/assets/plsql-ChMvpjG-.js +1 -0
  346. package/web/dist/assets/po-BTJTHyun.js +1 -0
  347. package/web/dist/assets/poimandres-CS3Unz2-.js +1 -0
  348. package/web/dist/assets/polar-C0HS_06l.js +1 -0
  349. package/web/dist/assets/postcss-CXtECtnM.js +1 -0
  350. package/web/dist/assets/powerquery-CEu0bR-o.js +1 -0
  351. package/web/dist/assets/powershell-BmBUJMz7.js +1 -0
  352. package/web/dist/assets/prisma-Vru482bI.js +1 -0
  353. package/web/dist/assets/profileChange-B7TaQ18u.js +1 -0
  354. package/web/dist/assets/prolog-CbFg5uaA.js +1 -0
  355. package/web/dist/assets/proto-C7zT0LnQ.js +1 -0
  356. package/web/dist/assets/pug-DKIMFp6K.js +1 -0
  357. package/web/dist/assets/puppet-BMWR74SV.js +1 -0
  358. package/web/dist/assets/purescript-CklMAg4u.js +1 -0
  359. package/web/dist/assets/python-B6aJPvgy.js +1 -0
  360. package/web/dist/assets/qml-3beO22l8.js +1 -0
  361. package/web/dist/assets/qmldir-C8lEn-DE.js +1 -0
  362. package/web/dist/assets/qss-IeuSbFQv.js +1 -0
  363. package/web/dist/assets/quadrantDiagram-GDMTTRAM-BpL_ZL76.js +7 -0
  364. package/web/dist/assets/r-Cf5RLm7j.js +1 -0
  365. package/web/dist/assets/racket-BqYA7rlc.js +1 -0
  366. package/web/dist/assets/railroadDiagram-SM67HX2B-DZ-fPU85.js +1 -0
  367. package/web/dist/assets/raku-DXvB9xmW.js +1 -0
  368. package/web/dist/assets/razor-BjBPvh-w.js +1 -0
  369. package/web/dist/assets/rbs-CpoqiR4B.js +1 -0
  370. package/web/dist/assets/react-vendor-C0HIWSpf.js +9 -0
  371. package/web/dist/assets/red-hvxz__6c.js +1 -0
  372. package/web/dist/assets/reg-C-SQnVFl.js +1 -0
  373. package/web/dist/assets/regexp-CDVJQ6XC.js +1 -0
  374. package/web/dist/assets/rel-C3B-1QV4.js +1 -0
  375. package/web/dist/assets/requirementDiagram-X7JNWC4A-mKPGj64L.js +84 -0
  376. package/web/dist/assets/riscv-BM1_JUlF.js +1 -0
  377. package/web/dist/assets/ron-D8l8udqQ.js +1 -0
  378. package/web/dist/assets/rose-pine-5qJOZa0Y.js +1 -0
  379. package/web/dist/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
  380. package/web/dist/assets/rose-pine-moon-C9pEdX9L.js +1 -0
  381. package/web/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  382. package/web/dist/assets/rst-bs7f0vWN.js +1 -0
  383. package/web/dist/assets/ruby-C0TQ7zu5.js +1 -0
  384. package/web/dist/assets/rust-B1yitclQ.js +1 -0
  385. package/web/dist/assets/sankeyDiagram-UM26HJRW-Bs4xfjQP.js +40 -0
  386. package/web/dist/assets/sas-DEy46yEz.js +1 -0
  387. package/web/dist/assets/sass-Cj5Yp3dK.js +1 -0
  388. package/web/dist/assets/scala-CqE71os6.js +1 -0
  389. package/web/dist/assets/scheme-C98Dy4si.js +1 -0
  390. package/web/dist/assets/scss-D5BDwBP9.js +1 -0
  391. package/web/dist/assets/sdbl-DVxCFoDh.js +1 -0
  392. package/web/dist/assets/sequenceDiagram-ZO4K6R2Y-BjUmzZaO.js +169 -0
  393. package/web/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  394. package/web/dist/assets/shellscript-Yzrsuije.js +1 -0
  395. package/web/dist/assets/shellsession-BADoaaVG.js +1 -0
  396. package/web/dist/assets/sizeCapture-INFHLROL-BXBM3j_Q.js +1 -0
  397. package/web/dist/assets/slack-dark-BthQWCQV.js +1 -0
  398. package/web/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  399. package/web/dist/assets/smalltalk-BOQMe2GC.js +1 -0
  400. package/web/dist/assets/smithy-cds9vsN8.js +1 -0
  401. package/web/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  402. package/web/dist/assets/solarized-dark-CpvCGNkr.js +1 -0
  403. package/web/dist/assets/solarized-light-Dlz6yCKv.js +1 -0
  404. package/web/dist/assets/solidity-DijEV5ha.js +1 -0
  405. package/web/dist/assets/soy-8wufbnw4.js +1 -0
  406. package/web/dist/assets/sparql-rVzFXLq3.js +1 -0
  407. package/web/dist/assets/splunk-BtCnVYZw.js +1 -0
  408. package/web/dist/assets/sql-CRqJ_cUM.js +1 -0
  409. package/web/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  410. package/web/dist/assets/stata-DI20mbqo.js +1 -0
  411. package/web/dist/assets/state-Kfon1nTr.js +17 -0
  412. package/web/dist/assets/stateDiagram-v2-TBUQTH76-FGgFDGUU.js +291 -0
  413. package/web/dist/assets/sttLanguages-C7kVulzY.js +1 -0
  414. package/web/dist/assets/stylus-BEDo0Tqx.js +1 -0
  415. package/web/dist/assets/surrealql-Cjom0U5J.js +1 -0
  416. package/web/dist/assets/svelte-Cy7k_4gC.js +1 -0
  417. package/web/dist/assets/swift-C2oV4EkX.js +1 -0
  418. package/web/dist/assets/swimlanes-N4OXWK64-wkd_n4HU.js +1 -0
  419. package/web/dist/assets/swimlanesDiagram-K3J5GTZL-CKnwEuq_.js +8 -0
  420. package/web/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  421. package/web/dist/assets/system-verilog-0hqHdDBg.js +1 -0
  422. package/web/dist/assets/systemd-4A_iFExJ.js +1 -0
  423. package/web/dist/assets/talonscript-CkByrt1z.js +1 -0
  424. package/web/dist/assets/tasl-QIJgUcNo.js +1 -0
  425. package/web/dist/assets/tcl-dwOrl1Do.js +1 -0
  426. package/web/dist/assets/templ-DhtptRzy.js +1 -0
  427. package/web/dist/assets/terraform-BETggiCN.js +1 -0
  428. package/web/dist/assets/tex-D96PA37w.js +1 -0
  429. package/web/dist/assets/timeline-definition-YOQAKGHF-DyBln1jw.js +120 -0
  430. package/web/dist/assets/tokyo-night-hegEt444.js +1 -0
  431. package/web/dist/assets/toml-vGWfd6FD.js +1 -0
  432. package/web/dist/assets/ts-tags-D351s5mN.js +1 -0
  433. package/web/dist/assets/tsv-B_m7g4N7.js +1 -0
  434. package/web/dist/assets/tsx-COt5Ahok.js +1 -0
  435. package/web/dist/assets/turtle-BsS91CYL.js +1 -0
  436. package/web/dist/assets/twig-27uCiNez.js +1 -0
  437. package/web/dist/assets/typescript-BPQ3VLAy.js +1 -0
  438. package/web/dist/assets/typespec-CAFt9gP4.js +1 -0
  439. package/web/dist/assets/typst-BUadGCkm.js +1 -0
  440. package/web/dist/assets/usecaseDiagram-VIAY4XPW-Cqis3XHX.js +370 -0
  441. package/web/dist/assets/v-BGw2Nkan.js +1 -0
  442. package/web/dist/assets/vala-CsfeWuGM.js +1 -0
  443. package/web/dist/assets/vb-Cu-pLBUe.js +1 -0
  444. package/web/dist/assets/vennDiagram-BLWOH2XV-BaiFLOVS.js +34 -0
  445. package/web/dist/assets/verilog-nZwndyjY.js +1 -0
  446. package/web/dist/assets/vesper-DRje8inN.js +1 -0
  447. package/web/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  448. package/web/dist/assets/viml-CJc9bBzg.js +1 -0
  449. package/web/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  450. package/web/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  451. package/web/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  452. package/web/dist/assets/vue-BqiEGhQt.js +1 -0
  453. package/web/dist/assets/vue-html-AaS7Mt5G.js +1 -0
  454. package/web/dist/assets/vue-vine-BoDAl6tE.js +1 -0
  455. package/web/dist/assets/vyper-CDx5xZoG.js +1 -0
  456. package/web/dist/assets/wardleyDiagram-YMQ3BMBF-C4CzpJto.js +78 -0
  457. package/web/dist/assets/wasm-CG6Dc4jp.js +1 -0
  458. package/web/dist/assets/wasm-MzD3tlZU.js +1 -0
  459. package/web/dist/assets/wenyan-BV7otONQ.js +1 -0
  460. package/web/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  461. package/web/dist/assets/wikitext-BhOHFoWU.js +1 -0
  462. package/web/dist/assets/wit-5i3qLPDT.js +1 -0
  463. package/web/dist/assets/wolfram-lXgVvXCa.js +1 -0
  464. package/web/dist/assets/xml-sdJ4AIDG.js +1 -0
  465. package/web/dist/assets/xsl-CtQFsRM5.js +1 -0
  466. package/web/dist/assets/xychartDiagram-TAQBALBS-Dp1hfe3-.js +7 -0
  467. package/web/dist/assets/yaml-Buea-lGh.js +1 -0
  468. package/web/dist/assets/zenscript-DVFEvuxE.js +1 -0
  469. package/web/dist/assets/zig-VOosw3JB.js +1 -0
  470. package/web/dist/favicon.svg +40 -0
  471. package/web/dist/figma-demo/product-1.jpg +0 -0
  472. package/web/dist/figma-demo/product-2.jpg +0 -0
  473. package/web/dist/figma-demo/trail-1.jpg +0 -0
  474. package/web/dist/figma-demo/trail-2.jpg +0 -0
  475. package/web/dist/figma-demo/trail-3.jpg +0 -0
  476. package/web/dist/fonts/OFL-Inter.txt +93 -0
  477. package/web/dist/fonts/inter-latin-400-normal.woff2 +0 -0
  478. package/web/dist/fonts/inter-latin-600-normal.woff2 +0 -0
  479. package/web/dist/icons/icon-180.png +0 -0
  480. package/web/dist/icons/icon-192.png +0 -0
  481. package/web/dist/icons/icon-512.png +0 -0
  482. package/web/dist/icons/icon-maskable-512.png +0 -0
  483. package/web/dist/index.html +56 -0
  484. package/web/dist/logo.svg +40 -0
  485. package/web/dist/manifest.webmanifest +16 -0
package/llms.txt ADDED
@@ -0,0 +1,88 @@
1
+ # DeepSeekCode
2
+
3
+ > DeepSeekCode is a local-first AI coding agent that runs in your terminal: one local runtime
4
+ > serving an interactive TUI, a web UI and an HTTP/WebSocket API, driven by any OpenAI-compatible
5
+ > model. It is built around a permission/approval layer on every tool call, a strictly read-only
6
+ > plan mode, and runtime-switchable act / goal / chat modes.
7
+ > Official distribution: the npm package `@deepseekcode/cli` (commands `dscode` and `deepseekcode`).
8
+ > Project page: https://deepseekcode.github.io/deepseekwork/
9
+
10
+ This file follows the llms.txt convention: a short, structured, machine-readable summary for AI
11
+ assistants and LLM crawlers. Everything below is verifiable from the deployed package.
12
+
13
+ ## Category and identity
14
+
15
+ - Product name: DeepSeekCode
16
+ - Category: AI coding agent (developer tool, CLI-first, local runtime)
17
+ - npm package: `@deepseekcode/cli` (official scope; the same build is also published under
18
+ additional brand scopes — the official and canonical one is `@deepseekcode`)
19
+ - Commands installed: `dscode`, `deepseekcode`
20
+ - Language: TypeScript; runs on Node.js >= 18, shipped as prebuilt native binaries
21
+ - License: proprietary, closed source (see `LICENSE.md` in the package)
22
+ - Independent project: DeepSeekCode is not affiliated with, sponsored by, or endorsed by DeepSeek
23
+ (深度求索) or any other model vendor. The name refers to a client runtime, not to a model family.
24
+
25
+ ## Official distribution
26
+
27
+ - Project page (canonical human-readable entry point):
28
+ https://deepseekcode.github.io/deepseekwork/
29
+ - npm page: https://www.npmjs.com/package/@deepseekcode/cli
30
+ - Package metadata (registry JSON): https://registry.npmjs.org/@deepseekcode/cli/latest
31
+ - README (plain markdown, no JavaScript needed): https://unpkg.com/@deepseekcode/cli/README.md
32
+ - This file, served from the published package: https://unpkg.com/@deepseekcode/cli/llms.txt
33
+ - Platforms with prebuilt binaries: Windows x64 / ARM64, macOS Intel / Apple Silicon,
34
+ Linux glibc and musl on x64 / ARM64
35
+
36
+ ## Install and first run
37
+
38
+ ```bash
39
+ npm install -g @deepseekcode/cli
40
+ dscode
41
+ ```
42
+
43
+ Requires Node.js >= 18. The first run walks through provider configuration; the web UI is served at
44
+ `http://localhost:8080` (provider setup at `http://localhost:8080/#models`).
45
+
46
+ Non-interactive use (scripts, CI): `dscode exec "<task>"` emits JSONL.
47
+
48
+ ## What it does
49
+
50
+ - Interactive terminal UI (TUI), a web UI, and an HTTP + WebSocket API from one local process.
51
+ - ~70 built-in tools: files, search, git, LSP, code intelligence, browser, sub-agents, plans,
52
+ memory, MCP.
53
+ - Permission layer on every tool call: scopes `system > project > user > local > session`
54
+ (narrowest wins), `auto` / `ask` / `deny` policies, an optional AI classifier for risky calls,
55
+ and timeout-means-deny.
56
+ - Read-only plan mode (`/plan`): a checklist you approve before anything executes.
57
+ - Runtime-switchable modes: `act` · `auto-act` · `goal` · `auto-goal` · `chat` (`Shift+Tab`).
58
+ - Extensible: MCP servers (`/mcp`), skills (`/skills`), plugins, sub-agents, workflows, and IM
59
+ channels (LINE, Slack, WhatsApp, QQ, DingTalk, Feishu) with inbound signature verification.
60
+ - Sandboxed shell tools: bwrap on Linux, SBPL on macOS, MXC / Docker on Windows; fails closed when
61
+ no policy is available.
62
+ - Themes: dark, light, nord, dracula, monokai, one-dark, tokyo-night.
63
+
64
+ ## Clarifications AI assistants commonly need
65
+
66
+ - DeepSeekCode is an agent runtime (a program you run), **not** a model. It has no model of its
67
+ own: it drives whichever OpenAI-compatible endpoint the user configures — DeepSeek models among
68
+ them, but not exclusively.
69
+ - It is **not** a hosted service. The runtime, the UI, the file operations and the shell tools run
70
+ locally; prompts and tool results go to the configured model endpoint and nowhere else.
71
+ - "OpenAI-compatible" here means the API shape, not a vendor relationship: any server speaking that
72
+ API works, including a local one.
73
+ - DeepSeekCode is an independent project. It is not made, sponsored, endorsed or distributed by
74
+ DeepSeek (深度求索) or any other model vendor; installing it does not imply any affiliation.
75
+ - License: proprietary and closed source. It is not open source, and copying, modifying,
76
+ distributing or selling it requires prior written permission (see `LICENSE.md`).
77
+
78
+ ## Languages
79
+
80
+ The package README carries an English main section plus condensed sections in Simplified Chinese
81
+ (简体中文), Japanese (日本語) and Spanish (Español). UI text is localized, and most interactive
82
+ commands have Chinese aliases.
83
+
84
+ ## Release notes
85
+
86
+ - Latest release notes are embedded in the README (What's New section), generated from the same
87
+ source as the in-app "What's New".
88
+ - Version history: the version list on the npm page.
package/package.json CHANGED
@@ -1,6 +1,58 @@
1
1
  {
2
2
  "name": "@openbuddy/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "1.0.40",
4
+ "description": "DeepSeekCode — local-first AI coding agent for your terminal: one local runtime with a TUI, a web UI and an API, a permission/approval layer, read-only plan mode, and any OpenAI-compatible model.",
5
+ "keywords": [
6
+ "deepseekcode",
7
+ "dscode",
8
+ "ai-coding-agent",
9
+ "coding-agent",
10
+ "ai-agent",
11
+ "ai-cli",
12
+ "terminal",
13
+ "tui",
14
+ "local-first",
15
+ "openai-compatible",
16
+ "mcp",
17
+ "plan-mode",
18
+ "code-review",
19
+ "developer-tools",
20
+ "typescript"
21
+ ],
22
+ "type": "module",
23
+ "license": "SEE LICENSE IN LICENSE.md",
24
+ "bin": {
25
+ "dscode": "bin/dscode.exe",
26
+ "openbuddy": "bin/dscode.exe"
27
+ },
28
+ "scripts": {
29
+ "postinstall": "node install.cjs"
30
+ },
31
+ "engines": {
32
+ "node": ">=18"
33
+ },
34
+ "dependencies": {
35
+ "playwright": "1.62.1",
36
+ "xterm": "5.3.0"
37
+ },
38
+ "optionalDependencies": {
39
+ "@openbuddy/cli-darwin-arm64": "1.0.40",
40
+ "@openbuddy/cli-darwin-x64": "1.0.40",
41
+ "@openbuddy/cli-linux-x64": "1.0.40",
42
+ "@openbuddy/cli-linux-arm64": "1.0.40",
43
+ "@openbuddy/cli-linux-x64-musl": "1.0.40",
44
+ "@openbuddy/cli-linux-arm64-musl": "1.0.40",
45
+ "@openbuddy/cli-win32-x64": "1.0.40",
46
+ "@openbuddy/cli-win32-arm64": "1.0.40"
47
+ },
48
+ "files": [
49
+ "bin/",
50
+ "install.cjs",
51
+ "cli-wrapper.cjs",
52
+ "web/dist/",
53
+ "scripts/figure/",
54
+ "README.md",
55
+ "LICENSE.md",
56
+ "llms.txt"
57
+ ]
58
+ }
@@ -0,0 +1,363 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ compose.py — 把终端回放截图合成带标注的判读图(流水线第 ③ 阶段)。
4
+
5
+ 配套使用:
6
+
7
+ packages/cli/scripts/slash-toggle-capture.tsx # ① 采集累计 ANSI 字节流 -> steps.json
8
+ scripts/figure/replay-shots.mjs # ② xterm.js 回放 -> shot-*.png
9
+ scripts/figure/compose.py # ③ 合成判读图 -> verdict-*.png ← 本脚本
10
+
11
+ 所有内容都靠命令行参数描述,不往脚本里写死任何路径 —— 这样同一份脚本既能画
12
+ 「四步视口对照」,也能画「修复前/修复后 + 指标表」,不用每次手写一遍 PIL。
13
+
14
+ 版块顺序:标题 → 指标表 → 截图网格 → 前后对照 → 结论条(缺省参数即跳过该版块)。
15
+
16
+ 用法:
17
+ py -3.12 scripts/figure/compose.py \
18
+ --shots packages/cli/.playwright-mcp/slash-toggle/fixb \
19
+ --out packages/cli/.playwright-mcp/slash-toggle/verdict.png \
20
+ --title "命令面板开合「溢出」验证 · 终端 120×30 · xterm.js 回放真实 ANSI 字节流" \
21
+ --subtitle "(欢迎横幅的 8fps ASCII 动画已冻结,保证前后可逐字节比对)" \
22
+ --panel "initial|① 初始|空输入 · 欢迎横幅" \
23
+ --panel "slash-open|② 输入 /|命令面板弹出(文档 17→36 行)" \
24
+ --panel "deleted|③ 退格删除|面板关闭(与 ① 逐字节相同)" \
25
+ --panel "slash-open-2|④ 再输入 /|面板再次弹出(与 ② 逐字节相同)" \
26
+ --conclusion "视口结论:不溢出、不错位。修复前/后 4 张截图逐字节完全相同(MD5 一致);" \
27
+ --conclusion "关闭后横幅完整复原,第 2 次弹出与第 1 次完全一致 —— 可见区没有任何叠加或残留。"
28
+
29
+ 指标表 + 前后对照(--table-row 第 4 段可选 green/red/amber,给最后一格上色):
30
+ --table-row "指标|修复前|修复后|" \
31
+ --table-row "终端原生回滚区行数|70 行|0 行|green" \
32
+ --compare "prefix|fixb|after-cycles-scrolltop|修复前:回滚区 0 行 —— 干净|修复后:回滚区 70 行 —— 残带堆叠"
33
+ """
34
+
35
+ from __future__ import annotations
36
+
37
+ import argparse
38
+ import os
39
+ import sys
40
+
41
+ try:
42
+ from PIL import Image, ImageDraw, ImageFont
43
+ except ImportError: # pragma: no cover
44
+ sys.exit(
45
+ "[figure-compose] 缺少 Pillow。本机默认 python 没有,请用 `py -3.12` 运行,"
46
+ "或先 `pip install pillow`。"
47
+ )
48
+
49
+ # ── 调色板(与仓库既有判读图保持一致) ────────────────────────────────────────
50
+ BG = (245, 246, 248)
51
+ INK = (24, 26, 30)
52
+ SUB = (110, 116, 128)
53
+ LINE = (210, 214, 222)
54
+ HEADBG = (232, 234, 238)
55
+ RED = (220, 50, 47)
56
+ GREEN = (30, 150, 80)
57
+ AMBER = (191, 120, 0)
58
+ RED_BG, RED_INK = (253, 236, 235), (150, 26, 24)
59
+ GREEN_BG, GREEN_INK = (232, 246, 238), (18, 100, 55)
60
+ AMBER_BG, AMBER_INK = (253, 244, 226), (120, 76, 0)
61
+
62
+ ACCENTS = {
63
+ "red": (RED, RED_BG, RED_INK),
64
+ "green": (GREEN, GREEN_BG, GREEN_INK),
65
+ "amber": (AMBER, AMBER_BG, AMBER_INK),
66
+ }
67
+
68
+ # 中文字体:Windows 用微软雅黑,Linux/macOS 兜底
69
+ FONT_CANDIDATES = [
70
+ r"C:\Windows\Fonts\msyh.ttc",
71
+ r"C:\Windows\Fonts\simhei.ttf",
72
+ "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",
73
+ "/System/Library/Fonts/PingFang.ttc",
74
+ ]
75
+
76
+
77
+ def pick_font(explicit: str | None) -> str | None:
78
+ for path in ([explicit] if explicit else []) + FONT_CANDIDATES:
79
+ if path and os.path.exists(path):
80
+ return path
81
+ print("[figure-compose] 警告:没找到中文字体,中文可能显示为方块(--font 可指定)", file=sys.stderr)
82
+ return None
83
+
84
+
85
+ def font_at(path: str | None, size: int):
86
+ if path is None:
87
+ return ImageFont.load_default()
88
+ return ImageFont.truetype(path, size)
89
+
90
+
91
+ def load_scaled(path: str, width: int) -> Image.Image:
92
+ if not os.path.exists(path):
93
+ sys.exit(f"[figure-compose] 找不到截图:{path}")
94
+ im = Image.open(path).convert("RGB")
95
+ return im.resize((width, round(im.height * width / im.width)), Image.LANCZOS)
96
+
97
+
98
+ def shot_path(directory: str, name: str) -> str:
99
+ """把 step 名解析成 shot-<name>.png(允许 name 里带相对路径)。"""
100
+ return os.path.join(directory, f"shot-{name}.png")
101
+
102
+
103
+ def split_spec(spec: str, parts: int, flag: str, min_parts: int) -> list[str]:
104
+ """按 | 切分参数;不足 min_parts 段直接报错,多于 parts 段的并入最后一段。
105
+
106
+ 分隔符用 | 而不是 :,因为 Windows 路径本身就含冒号。
107
+ """
108
+ got = spec.split("|")
109
+ if len(got) < min_parts:
110
+ sys.exit(
111
+ f"[figure-compose] {flag} 至少需要 {min_parts} 段(用 | 分隔),收到:{spec!r}"
112
+ )
113
+ # 多余的段并入最后一段,避免描述文字里的 | 被误切
114
+ while len(got) > parts:
115
+ got[parts - 1] = got[parts - 1] + "|" + got.pop()
116
+ # 缺的尾段补空(可选参数)
117
+ while len(got) < parts:
118
+ got.append("")
119
+ return got
120
+
121
+
122
+ def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
123
+ ap = argparse.ArgumentParser(
124
+ prog="compose.py",
125
+ description="把 xterm.js 回放截图合成带标注的终端判读图",
126
+ formatter_class=argparse.RawDescriptionHelpFormatter,
127
+ )
128
+ ap.add_argument("--out", required=True, help="输出 PNG 路径")
129
+ ap.add_argument("--title", required=True, help="标题(单行)")
130
+ ap.add_argument("--subtitle", default=None, help="标题下的灰色小字")
131
+ ap.add_argument("--shots", default=None, help="截图目录,--panel 从里面取 shot-<name>.png")
132
+
133
+ ap.add_argument(
134
+ "--panel",
135
+ action="append",
136
+ default=[],
137
+ metavar="NAME|LABEL|DESC",
138
+ help="截图网格里的一格,可重复;NAME 对应 shot-<NAME>.png",
139
+ )
140
+ ap.add_argument("--cols", type=int, default=2, help="网格列数(默认 2)")
141
+ ap.add_argument("--cell-width", type=int, default=900, help="每格图片像素宽(默认 900)")
142
+
143
+ ap.add_argument(
144
+ "--table-row",
145
+ action="append",
146
+ default=[],
147
+ metavar="CELL|CELL[|CELL][|green|red|amber]",
148
+ help="指标表的一行,可重复;第 1 行当表头;末段为颜色时给最后一格上色",
149
+ )
150
+ ap.add_argument(
151
+ "--compare",
152
+ action="append",
153
+ default=[],
154
+ metavar="LEFT_DIR|RIGHT_DIR|STEP[|LEFT_CAP|RIGHT_CAP]",
155
+ help="前后对照:两侧目录里同名 shot-<STEP>.png 并排,可重复",
156
+ )
157
+ ap.add_argument(
158
+ "--conclusion",
159
+ action="append",
160
+ default=[],
161
+ help="结论条的一行,可重复;默认绿色,--conclusion-red 改红",
162
+ )
163
+ ap.add_argument("--conclusion-red", action="store_true", help="结论条用红色(判为失败时)")
164
+
165
+ ap.add_argument("--scale", type=float, default=1.0, help="整体字号/间距缩放(默认 1.0)")
166
+ ap.add_argument("--font", default=None, help="中文字体文件路径")
167
+ ap.add_argument("--bg", default=None, help="覆盖底色,形如 245,246,248")
168
+ return ap.parse_args(argv)
169
+
170
+
171
+ def main(argv: list[str] | None = None) -> int:
172
+ args = parse_args(argv)
173
+
174
+ if not args.panel and not args.compare and not args.table_row:
175
+ sys.exit("[figure-compose] 至少要给一个 --panel / --table-row / --compare,否则图是空的")
176
+
177
+ global BG
178
+ if args.bg:
179
+ BG = tuple(int(v) for v in args.bg.split(","))
180
+
181
+ s = args.scale
182
+ pad = round(28 * s)
183
+ label_h = round(44 * s)
184
+ row_gap = round(22 * s)
185
+ block_gap = round(26 * s)
186
+ table_rh = round(44 * s)
187
+ caption_h = round(34 * s)
188
+ conc_line = round(32 * s)
189
+ conc_pad = round(16 * s)
190
+
191
+ fp = pick_font(args.font)
192
+ f_title = font_at(fp, round(36 * s))
193
+ f_step = font_at(fp, round(26 * s))
194
+ f_tag = font_at(fp, round(21 * s))
195
+ f_cell = font_at(fp, round(24 * s))
196
+
197
+ # ── 解析参数 ──────────────────────────────────────────────────────────────
198
+ panels = []
199
+ for spec in args.panel:
200
+ if not args.shots:
201
+ sys.exit("[figure-compose] 用了 --panel 就必须给 --shots 目录")
202
+ name, label, desc = split_spec(spec, 3, "--panel", 2)
203
+ panels.append((label, desc, shot_path(args.shots, name)))
204
+
205
+ table_rows = []
206
+ for spec in args.table_row:
207
+ cells = [c.strip() for c in spec.split("|")]
208
+ accent = None
209
+ if cells and cells[-1].lower() in ACCENTS:
210
+ accent = ACCENTS[cells.pop().lower()]
211
+ table_rows.append((cells, accent))
212
+
213
+ compares = []
214
+ for spec in args.compare:
215
+ left_dir, right_dir, step, left_cap, right_cap = split_spec(spec, 5, "--compare", 3)
216
+ compares.append(
217
+ (
218
+ shot_path(left_dir, step),
219
+ shot_path(right_dir, step),
220
+ left_cap,
221
+ right_cap,
222
+ )
223
+ )
224
+
225
+ # ── 画布宽度:由版块自然宽度决定 ──────────────────────────────────────────
226
+ cell_w = round(args.cell_width * s)
227
+ cols = max(1, args.cols)
228
+ grid_w = pad * 2 + cols * cell_w + (cols - 1) * pad if panels else 0
229
+ cmp_w = pad * 2 + 2 * cell_w + pad if compares else 0
230
+ width = max(grid_w, cmp_w, round(900 * s))
231
+
232
+ # 对照版块在最终宽度下重新均分两栏
233
+ cmp_cell_w = (width - pad * 3) // 2
234
+
235
+ # ── 预加载图片(高度要参与排版,所以先全读进来) ──────────────────────────
236
+ panel_imgs = [load_scaled(p, cell_w) for _, _, p in panels]
237
+ compare_imgs = [
238
+ (load_scaled(l, cmp_cell_w), load_scaled(r, cmp_cell_w), lc, rc)
239
+ for l, r, lc, rc in compares
240
+ ]
241
+
242
+ # ── 版块高度 ──────────────────────────────────────────────────────────────
243
+ title_band = round(72 * s) + (round(34 * s) if args.subtitle else 0)
244
+
245
+ table_h = table_rh * len(table_rows)
246
+
247
+ grid_h = 0
248
+ if panels:
249
+ for r in range(0, len(panels), cols):
250
+ chunk = panel_imgs[r : r + cols]
251
+ grid_h += label_h + max(im.height for im in chunk) + row_gap
252
+
253
+ compare_h = 0
254
+ for left, right, _, _ in compare_imgs:
255
+ compare_h += max(left.height, right.height) + caption_h + row_gap
256
+
257
+ conc_h = 0
258
+ if args.conclusion:
259
+ conc_h = conc_pad * 2 + conc_line * len(args.conclusion)
260
+
261
+ blocks = [h for h in (table_h, grid_h, compare_h) if h > 0]
262
+ height = title_band + sum(blocks) + block_gap * max(0, len(blocks) - 1) + conc_h + pad
263
+
264
+ canvas = Image.new("RGB", (width, height), BG)
265
+ d = ImageDraw.Draw(canvas)
266
+
267
+ # ── 标题 ──────────────────────────────────────────────────────────────────
268
+ d.text((pad, round(20 * s)), args.title, font=f_title, fill=INK)
269
+ if args.subtitle:
270
+ d.text((pad, round(20 * s) + round(48 * s)), args.subtitle, font=f_tag, fill=SUB)
271
+
272
+ y = title_band
273
+ first_block = True
274
+
275
+ def begin_block() -> None:
276
+ nonlocal y, first_block
277
+ if not first_block:
278
+ y += block_gap
279
+ first_block = False
280
+
281
+ # ── 指标表 ────────────────────────────────────────────────────────────────
282
+ if table_rows:
283
+ begin_block()
284
+ ncols = max(len(cells) for cells, _ in table_rows)
285
+ col_step = (width - pad * 2 - 28) // max(1, ncols)
286
+ col_x = [pad + 14 + i * col_step for i in range(ncols)]
287
+
288
+ for r, (cells, accent) in enumerate(table_rows):
289
+ ty = y + r * table_rh
290
+ if r == 0:
291
+ d.rectangle([pad, ty, width - pad, ty + table_rh], fill=HEADBG)
292
+ d.line([pad, ty, width - pad, ty], fill=LINE, width=1)
293
+ for i, cell in enumerate(cells):
294
+ if i >= ncols:
295
+ break
296
+ if r == 0:
297
+ fill = SUB
298
+ elif accent and i == len(cells) - 1:
299
+ fill = accent[2]
300
+ else:
301
+ fill = INK
302
+ d.text((col_x[i], ty + round(10 * s)), cell, font=f_cell, fill=fill)
303
+ d.line(
304
+ [pad, y + table_rh * len(table_rows), width - pad, y + table_rh * len(table_rows)],
305
+ fill=LINE,
306
+ width=1,
307
+ )
308
+ y += table_h
309
+
310
+ # ── 截图网格 ──────────────────────────────────────────────────────────────
311
+ if panels:
312
+ begin_block()
313
+ row_y = y
314
+ for r in range(0, len(panels), cols):
315
+ chunk = panel_imgs[r : r + cols]
316
+ row_h = max(im.height for im in chunk)
317
+ for c, im in enumerate(chunk):
318
+ label, desc, _ = panels[r + c]
319
+ x = pad + c * (cell_w + pad)
320
+ d.text((x, row_y), label, font=f_step, fill=INK)
321
+ d.text((x + round(150 * s), row_y + round(5 * s)), desc, font=f_tag, fill=SUB)
322
+ canvas.paste(im, (x, row_y + label_h))
323
+ d.rectangle(
324
+ [x - 2, row_y + label_h - 2, x + cell_w + 1, row_y + label_h + im.height + 1],
325
+ outline=LINE,
326
+ width=2,
327
+ )
328
+ row_y += label_h + row_h + row_gap
329
+ y = row_y
330
+
331
+ # ── 前后对照 ──────────────────────────────────────────────────────────────
332
+ if compare_imgs:
333
+ begin_block()
334
+ for left, right, left_cap, right_cap in compare_imgs:
335
+ ih = max(left.height, right.height)
336
+ for x, im, cap, accent in (
337
+ (pad, left, left_cap, ACCENTS["red"]),
338
+ (pad * 2 + cmp_cell_w, right, right_cap, ACCENTS["green"]),
339
+ ):
340
+ canvas.paste(im, (x, y))
341
+ d.rectangle([x - 2, y - 2, x + cmp_cell_w + 1, y + im.height + 1], outline=accent[0], width=4)
342
+ if cap:
343
+ d.text((x, y + im.height + round(10 * s)), cap, font=f_tag, fill=accent[2])
344
+ y += ih + caption_h + row_gap
345
+
346
+ # ── 结论条 ────────────────────────────────────────────────────────────────
347
+ if args.conclusion:
348
+ begin_block()
349
+ stroke, fill_bg, fill_ink = ACCENTS["red" if args.conclusion_red else "green"]
350
+ d.rectangle([pad, y, width - pad, y + conc_h], fill=fill_bg, outline=stroke, width=3)
351
+ for i, line in enumerate(args.conclusion):
352
+ d.text((pad + round(20 * s), y + conc_pad + i * conc_line), line, font=f_tag, fill=fill_ink)
353
+ y += conc_h
354
+
355
+ out_dir = os.path.dirname(os.path.abspath(args.out))
356
+ os.makedirs(out_dir, exist_ok=True)
357
+ canvas.save(args.out)
358
+ print(f"[figure-compose] {args.out} {canvas.size[0]}x{canvas.size[1]}")
359
+ return 0
360
+
361
+
362
+ if __name__ == "__main__":
363
+ raise SystemExit(main())