buninu-linux 0.2.0

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 (621) hide show
  1. package/LICENSE +21 -0
  2. package/LICENSES/Bun-LICENSE.md +84 -0
  3. package/LICENSES/GCC-Runtime-Library-Exception-3.1.txt +73 -0
  4. package/LICENSES/GPL-2.0.txt +338 -0
  5. package/LICENSES/GPL-3.0.txt +674 -0
  6. package/LICENSES/LGPL-2.1.txt +501 -0
  7. package/LICENSES/Linux-syscall-note.txt +25 -0
  8. package/LICENSES/musl-COPYRIGHT.txt +193 -0
  9. package/NOTICE.md +184 -0
  10. package/README.md +537 -0
  11. package/build-image.sh +44 -0
  12. package/build-uki.sh +75 -0
  13. package/fetch-alpine.sh +80 -0
  14. package/fetch-bun.sh +41 -0
  15. package/fetch-plus-build.sh +11 -0
  16. package/hello/build-hello.sh +14 -0
  17. package/hello/hello.c +50 -0
  18. package/index.js +235 -0
  19. package/initramfs/bin/sh +3 -0
  20. package/initramfs/buninu/.bashrc +11 -0
  21. package/initramfs/buninu/ARCHITECTURE.md +452 -0
  22. package/initramfs/buninu/CHANGELOG.md +580 -0
  23. package/initramfs/buninu/LICENSE +21 -0
  24. package/initramfs/buninu/README.md +1161 -0
  25. package/initramfs/buninu/apps/bun/make-bunBin.sh +99 -0
  26. package/initramfs/buninu/apps/bunmsh/CHANGELOG.md +493 -0
  27. package/initramfs/buninu/apps/bunmsh/LICENSE +21 -0
  28. package/initramfs/buninu/apps/bunmsh/LICENSE-MICRO +58 -0
  29. package/initramfs/buninu/apps/bunmsh/LICENSE-MKSH +295 -0
  30. package/initramfs/buninu/apps/bunmsh/PORTING.md +192 -0
  31. package/initramfs/buninu/apps/bunmsh/README.md +1042 -0
  32. package/initramfs/buninu/apps/bunmsh/bunmsh +7 -0
  33. package/initramfs/buninu/apps/bunmsh/bunshell.md +61 -0
  34. package/initramfs/buninu/apps/bunmsh/help/README.md +2237 -0
  35. package/initramfs/buninu/apps/bunmsh/help/alias.md +22 -0
  36. package/initramfs/buninu/apps/bunmsh/help/basename.md +38 -0
  37. package/initramfs/buninu/apps/bunmsh/help/builtin.md +25 -0
  38. package/initramfs/buninu/apps/bunmsh/help/bun.md +27 -0
  39. package/initramfs/buninu/apps/bunmsh/help/bunmsh.md +47 -0
  40. package/initramfs/buninu/apps/bunmsh/help/cat.md +31 -0
  41. package/initramfs/buninu/apps/bunmsh/help/catfancy.md +35 -0
  42. package/initramfs/buninu/apps/bunmsh/help/cd.md +22 -0
  43. package/initramfs/buninu/apps/bunmsh/help/chmod.md +27 -0
  44. package/initramfs/buninu/apps/bunmsh/help/clear.md +21 -0
  45. package/initramfs/buninu/apps/bunmsh/help/colon.md +22 -0
  46. package/initramfs/buninu/apps/bunmsh/help/command.md +27 -0
  47. package/initramfs/buninu/apps/bunmsh/help/cp.md +28 -0
  48. package/initramfs/buninu/apps/bunmsh/help/curl.md +181 -0
  49. package/initramfs/buninu/apps/bunmsh/help/cut.md +25 -0
  50. package/initramfs/buninu/apps/bunmsh/help/date.md +25 -0
  51. package/initramfs/buninu/apps/bunmsh/help/dirname.md +25 -0
  52. package/initramfs/buninu/apps/bunmsh/help/echo.md +25 -0
  53. package/initramfs/buninu/apps/bunmsh/help/env.md +27 -0
  54. package/initramfs/buninu/apps/bunmsh/help/eval.md +22 -0
  55. package/initramfs/buninu/apps/bunmsh/help/exec.md +22 -0
  56. package/initramfs/buninu/apps/bunmsh/help/exit.md +21 -0
  57. package/initramfs/buninu/apps/bunmsh/help/export.md +22 -0
  58. package/initramfs/buninu/apps/bunmsh/help/false.md +22 -0
  59. package/initramfs/buninu/apps/bunmsh/help/find.md +33 -0
  60. package/initramfs/buninu/apps/bunmsh/help/getopts.md +28 -0
  61. package/initramfs/buninu/apps/bunmsh/help/grep.md +34 -0
  62. package/initramfs/buninu/apps/bunmsh/help/head.md +27 -0
  63. package/initramfs/buninu/apps/bunmsh/help/kill.md +43 -0
  64. package/initramfs/buninu/apps/bunmsh/help/ln.md +28 -0
  65. package/initramfs/buninu/apps/bunmsh/help/ls.md +37 -0
  66. package/initramfs/buninu/apps/bunmsh/help/lsbun.md +29 -0
  67. package/initramfs/buninu/apps/bunmsh/help/lsfancy.md +37 -0
  68. package/initramfs/buninu/apps/bunmsh/help/md5sum.md +21 -0
  69. package/initramfs/buninu/apps/bunmsh/help/mkdir.md +27 -0
  70. package/initramfs/buninu/apps/bunmsh/help/mktemp.md +26 -0
  71. package/initramfs/buninu/apps/bunmsh/help/mv.md +26 -0
  72. package/initramfs/buninu/apps/bunmsh/help/print.md +30 -0
  73. package/initramfs/buninu/apps/bunmsh/help/printf.md +25 -0
  74. package/initramfs/buninu/apps/bunmsh/help/pspa.md +38 -0
  75. package/initramfs/buninu/apps/bunmsh/help/pspac.md +57 -0
  76. package/initramfs/buninu/apps/bunmsh/help/pwd.md +21 -0
  77. package/initramfs/buninu/apps/bunmsh/help/read.md +27 -0
  78. package/initramfs/buninu/apps/bunmsh/help/readonly.md +27 -0
  79. package/initramfs/buninu/apps/bunmsh/help/realpath.md +21 -0
  80. package/initramfs/buninu/apps/bunmsh/help/rm.md +33 -0
  81. package/initramfs/buninu/apps/bunmsh/help/rmdir.md +27 -0
  82. package/initramfs/buninu/apps/bunmsh/help/sed.md +29 -0
  83. package/initramfs/buninu/apps/bunmsh/help/seq.md +29 -0
  84. package/initramfs/buninu/apps/bunmsh/help/serve.md +50 -0
  85. package/initramfs/buninu/apps/bunmsh/help/set.md +26 -0
  86. package/initramfs/buninu/apps/bunmsh/help/sha256sum.md +21 -0
  87. package/initramfs/buninu/apps/bunmsh/help/shift.md +23 -0
  88. package/initramfs/buninu/apps/bunmsh/help/sleep.md +25 -0
  89. package/initramfs/buninu/apps/bunmsh/help/sort.md +29 -0
  90. package/initramfs/buninu/apps/bunmsh/help/source.md +23 -0
  91. package/initramfs/buninu/apps/bunmsh/help/tab.md +30 -0
  92. package/initramfs/buninu/apps/bunmsh/help/tac.md +29 -0
  93. package/initramfs/buninu/apps/bunmsh/help/tail.md +27 -0
  94. package/initramfs/buninu/apps/bunmsh/help/tee.md +25 -0
  95. package/initramfs/buninu/apps/bunmsh/help/test.md +30 -0
  96. package/initramfs/buninu/apps/bunmsh/help/time.md +29 -0
  97. package/initramfs/buninu/apps/bunmsh/help/touch.md +26 -0
  98. package/initramfs/buninu/apps/bunmsh/help/tr.md +26 -0
  99. package/initramfs/buninu/apps/bunmsh/help/true.md +22 -0
  100. package/initramfs/buninu/apps/bunmsh/help/type.md +21 -0
  101. package/initramfs/buninu/apps/bunmsh/help/umask.md +22 -0
  102. package/initramfs/buninu/apps/bunmsh/help/unalias.md +28 -0
  103. package/initramfs/buninu/apps/bunmsh/help/uname.md +31 -0
  104. package/initramfs/buninu/apps/bunmsh/help/unset.md +28 -0
  105. package/initramfs/buninu/apps/bunmsh/help/wc.md +27 -0
  106. package/initramfs/buninu/apps/bunmsh/help/whence.md +26 -0
  107. package/initramfs/buninu/apps/bunmsh/help/which.md +41 -0
  108. package/initramfs/buninu/apps/bunmsh/help/yes.md +23 -0
  109. package/initramfs/buninu/apps/bunmsh/index.js +7 -0
  110. package/initramfs/buninu/apps/bunmsh/package.json +30 -0
  111. package/initramfs/buninu/apps/bunmsh/serve.js +468 -0
  112. package/initramfs/buninu/apps/bunmsh/single-exe/README.md +402 -0
  113. package/initramfs/buninu/apps/bunmsh/single-exe/assetsHelper.js +371 -0
  114. package/initramfs/buninu/apps/bunmsh/single-exe/assetsLoader.mjs +85 -0
  115. package/initramfs/buninu/apps/bunmsh/single-exe/assetsPacker.js +218 -0
  116. package/initramfs/buninu/apps/bunmsh/single-exe/compiled.js +527 -0
  117. package/initramfs/buninu/apps/bunmsh/single-exe/entry.mjs +17 -0
  118. package/initramfs/buninu/apps/bunmsh/src/cat-fancy.js +117 -0
  119. package/initramfs/buninu/apps/bunmsh/src/cat-operands.js +31 -0
  120. package/initramfs/buninu/apps/bunmsh/src/completion.js +363 -0
  121. package/initramfs/buninu/apps/bunmsh/src/curl.js +1191 -0
  122. package/initramfs/buninu/apps/bunmsh/src/environment.js +61 -0
  123. package/initramfs/buninu/apps/bunmsh/src/fancy-ls.js +186 -0
  124. package/initramfs/buninu/apps/bunmsh/src/find.js +119 -0
  125. package/initramfs/buninu/apps/bunmsh/src/history.js +198 -0
  126. package/initramfs/buninu/apps/bunmsh/src/main.js +850 -0
  127. package/initramfs/buninu/apps/bunmsh/src/mouse.js +103 -0
  128. package/initramfs/buninu/apps/bunmsh/src/shell.js +3932 -0
  129. package/initramfs/buninu/apps/bunmsh/test/catfancy.test.js +102 -0
  130. package/initramfs/buninu/apps/bunmsh/test/curl.test.js +335 -0
  131. package/initramfs/buninu/apps/bunmsh/test/reference-source.sh +1 -0
  132. package/initramfs/buninu/apps/bunmsh/test/reference.test.js +817 -0
  133. package/initramfs/buninu/apps/bunmsh/test/serve/README.md +3 -0
  134. package/initramfs/buninu/apps/bunmsh/test/serve/bad.json +1 -0
  135. package/initramfs/buninu/apps/bunmsh/test/serve/data.json +1 -0
  136. package/initramfs/buninu/apps/bunmsh/test/serve/data.json5 +1 -0
  137. package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonc +2 -0
  138. package/initramfs/buninu/apps/bunmsh/test/serve/data.jsonl +2 -0
  139. package/initramfs/buninu/apps/bunmsh/test/serve/data.ndjson +1 -0
  140. package/initramfs/buninu/apps/bunmsh/test/serve/data.toml +3 -0
  141. package/initramfs/buninu/apps/bunmsh/test/serve/data.ts +15 -0
  142. package/initramfs/buninu/apps/bunmsh/test/serve/data.xml +1 -0
  143. package/initramfs/buninu/apps/bunmsh/test/serve/data.yaml +3 -0
  144. package/initramfs/buninu/apps/bunmsh/test/serve/data.yml +1 -0
  145. package/initramfs/buninu/apps/bunmsh/test/serve.test.js +241 -0
  146. package/initramfs/buninu/apps/bunmsh/test/shell.test.js +2092 -0
  147. package/initramfs/buninu/apps/bunmsh/test/shell1.test.js +1087 -0
  148. package/initramfs/buninu/apps/bunmsh/test/shell2.test.js +457 -0
  149. package/initramfs/buninu/apps/bunmsh/test/shell3.test.js +741 -0
  150. package/initramfs/buninu/apps/bunmsh/test/t.sh +12 -0
  151. package/initramfs/buninu/apps/bunx/bunx.js +172 -0
  152. package/initramfs/buninu/apps/cmdlist +48 -0
  153. package/initramfs/buninu/apps/jsgotty/LICENSE +23 -0
  154. package/initramfs/buninu/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
  155. package/initramfs/buninu/apps/jsgotty/NOTICE +21 -0
  156. package/initramfs/buninu/apps/jsgotty/README.en.md +294 -0
  157. package/initramfs/buninu/apps/jsgotty/README.md +296 -0
  158. package/initramfs/buninu/apps/jsgotty/client.mjs +700 -0
  159. package/initramfs/buninu/apps/jsgotty/env.sh +2 -0
  160. package/initramfs/buninu/apps/jsgotty/gotty.js +3334 -0
  161. package/initramfs/buninu/apps/jsgotty/node_modules/.package-lock.json +35 -0
  162. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
  163. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
  164. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
  165. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
  166. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
  167. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  168. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
  169. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
  170. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
  171. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
  172. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
  173. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
  174. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
  175. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
  176. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
  177. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
  178. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
  179. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
  180. package/initramfs/buninu/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
  181. package/initramfs/buninu/apps/jsgotty/node_modules/ws/LICENSE +20 -0
  182. package/initramfs/buninu/apps/jsgotty/node_modules/ws/README.md +548 -0
  183. package/initramfs/buninu/apps/jsgotty/node_modules/ws/browser.js +8 -0
  184. package/initramfs/buninu/apps/jsgotty/node_modules/ws/index.js +22 -0
  185. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
  186. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
  187. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
  188. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
  189. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
  190. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
  191. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
  192. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
  193. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
  194. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
  195. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
  196. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
  197. package/initramfs/buninu/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
  198. package/initramfs/buninu/apps/jsgotty/node_modules/ws/package.json +70 -0
  199. package/initramfs/buninu/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
  200. package/initramfs/buninu/apps/jsgotty/package-lock.json +46 -0
  201. package/initramfs/buninu/apps/jsgotty/package.json +19 -0
  202. package/initramfs/buninu/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
  203. package/initramfs/buninu/apps/jsgotty/patches/windowsTerminal.js +204 -0
  204. package/initramfs/buninu/apps/jsgotty/rz.js +199 -0
  205. package/initramfs/buninu/apps/jsgotty/single-exe/README.md +384 -0
  206. package/initramfs/buninu/apps/jsgotty/single-exe/assetsHelper.js +371 -0
  207. package/initramfs/buninu/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
  208. package/initramfs/buninu/apps/jsgotty/single-exe/assetsPacker.js +218 -0
  209. package/initramfs/buninu/apps/jsgotty/single-exe/compiled.js +498 -0
  210. package/initramfs/buninu/apps/jsgotty/single-exe/entry.mjs +23 -0
  211. package/initramfs/buninu/apps/jsgotty/single-exe/packAssets.sh +7 -0
  212. package/initramfs/buninu/apps/jsgotty/static/css/index.css +13 -0
  213. package/initramfs/buninu/apps/jsgotty/static/css/kitty.css +61 -0
  214. package/initramfs/buninu/apps/jsgotty/static/css/xterm.css +218 -0
  215. package/initramfs/buninu/apps/jsgotty/static/css/xterm_customize.css +35 -0
  216. package/initramfs/buninu/apps/jsgotty/static/favicon.ico +0 -0
  217. package/initramfs/buninu/apps/jsgotty/static/help.md +125 -0
  218. package/initramfs/buninu/apps/jsgotty/static/icon.svg +66 -0
  219. package/initramfs/buninu/apps/jsgotty/static/icon_192.png +0 -0
  220. package/initramfs/buninu/apps/jsgotty/static/index.html +164 -0
  221. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js +31537 -0
  222. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
  223. package/initramfs/buninu/apps/jsgotty/static/js/gotty.js.map +1 -0
  224. package/initramfs/buninu/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
  225. package/initramfs/buninu/apps/jsgotty/static/js/kitty.js +1101 -0
  226. package/initramfs/buninu/apps/jsgotty/static/js/windows_bridge.js +194 -0
  227. package/initramfs/buninu/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
  228. package/initramfs/buninu/apps/jsgotty/static/js/zmodem.js +1 -0
  229. package/initramfs/buninu/apps/jsgotty/static/manifest.json +15 -0
  230. package/initramfs/buninu/apps/jsgotty/sz.js +273 -0
  231. package/initramfs/buninu/apps/jsgotty/tests/kitty-order.test.js +58 -0
  232. package/initramfs/buninu/apps/jsgotty/tests/websocket-origin.test.js +54 -0
  233. package/initramfs/buninu/apps/jsgotty/viu.mjs +422 -0
  234. package/initramfs/buninu/apps/jsgotty/wgotty +62 -0
  235. package/initramfs/buninu/apps/jsgotty/windows-bridge-node.js +60 -0
  236. package/initramfs/buninu/apps/jsgotty/zmodem-node.js +262 -0
  237. package/initramfs/buninu/apps/jsmdcui/CHANGELOG.md +1118 -0
  238. package/initramfs/buninu/apps/jsmdcui/LICENSE +22 -0
  239. package/initramfs/buninu/apps/jsmdcui/README.md +1283 -0
  240. package/initramfs/buninu/apps/jsmdcui/cdp-maze.js +141 -0
  241. package/initramfs/buninu/apps/jsmdcui/clean.sh +9 -0
  242. package/initramfs/buninu/apps/jsmdcui/demos/basic.jpg +0 -0
  243. package/initramfs/buninu/apps/jsmdcui/demos/chinese.md +32 -0
  244. package/initramfs/buninu/apps/jsmdcui/demos/event.md +170 -0
  245. package/initramfs/buninu/apps/jsmdcui/demos/good.jpg +0 -0
  246. package/initramfs/buninu/apps/jsmdcui/demos/image-processor.md +366 -0
  247. package/initramfs/buninu/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
  248. package/initramfs/buninu/apps/jsmdcui/demos/img-change.md +73 -0
  249. package/initramfs/buninu/apps/jsmdcui/demos/imgtool-zh.md +298 -0
  250. package/initramfs/buninu/apps/jsmdcui/demos/imgtool.md +298 -0
  251. package/initramfs/buninu/apps/jsmdcui/demos/maze.md +149 -0
  252. package/initramfs/buninu/apps/jsmdcui/demos/reactive.md +40 -0
  253. package/initramfs/buninu/apps/jsmdcui/demos/reader.md +513 -0
  254. package/initramfs/buninu/apps/jsmdcui/demos/select.md +63 -0
  255. package/initramfs/buninu/apps/jsmdcui/demos/todo-zh.md +190 -0
  256. package/initramfs/buninu/apps/jsmdcui/demos/todo.md +191 -0
  257. package/initramfs/buninu/apps/jsmdcui/edit +9 -0
  258. package/initramfs/buninu/apps/jsmdcui/jsmdcui.sh +16 -0
  259. package/initramfs/buninu/apps/jsmdcui/llm-maze.txt +94 -0
  260. package/initramfs/buninu/apps/jsmdcui/package.json +29 -0
  261. package/initramfs/buninu/apps/jsmdcui/project_structure.txt +35 -0
  262. package/initramfs/buninu/apps/jsmdcui/runmd.mjs +1140 -0
  263. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
  264. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
  265. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
  266. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
  267. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
  268. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
  269. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
  270. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
  271. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
  272. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
  273. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
  274. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
  275. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
  276. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
  277. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
  278. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
  279. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
  280. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
  281. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
  282. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
  283. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
  284. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
  285. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
  286. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
  287. package/initramfs/buninu/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
  288. package/initramfs/buninu/apps/jsmdcui/runtime/help/actions.md +161 -0
  289. package/initramfs/buninu/apps/jsmdcui/runtime/help/cdp.md +130 -0
  290. package/initramfs/buninu/apps/jsmdcui/runtime/help/colors.md +421 -0
  291. package/initramfs/buninu/apps/jsmdcui/runtime/help/commands.md +161 -0
  292. package/initramfs/buninu/apps/jsmdcui/runtime/help/copypaste.md +149 -0
  293. package/initramfs/buninu/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
  294. package/initramfs/buninu/apps/jsmdcui/runtime/help/help.md +1283 -0
  295. package/initramfs/buninu/apps/jsmdcui/runtime/help/keybindings.md +355 -0
  296. package/initramfs/buninu/apps/jsmdcui/runtime/help/linter.md +90 -0
  297. package/initramfs/buninu/apps/jsmdcui/runtime/help/options.md +709 -0
  298. package/initramfs/buninu/apps/jsmdcui/runtime/help/plugins.md +544 -0
  299. package/initramfs/buninu/apps/jsmdcui/runtime/help/tutorial.md +112 -0
  300. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1263 -0
  301. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +203 -0
  302. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
  303. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
  304. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
  305. package/initramfs/buninu/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
  306. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
  307. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
  308. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
  309. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
  310. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
  311. package/initramfs/buninu/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
  312. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
  313. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
  314. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/README.md +63 -0
  315. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
  316. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
  317. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
  318. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
  319. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
  320. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
  321. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
  322. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
  323. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
  324. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
  325. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
  326. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
  327. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
  328. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
  329. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
  330. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
  331. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
  332. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
  333. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
  334. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
  335. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
  336. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
  337. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
  338. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
  339. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
  340. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
  341. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
  342. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
  343. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
  344. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
  345. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
  346. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
  347. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
  348. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
  349. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
  350. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
  351. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
  352. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
  353. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
  354. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
  355. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
  356. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
  357. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
  358. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
  359. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
  360. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
  361. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
  362. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
  363. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
  364. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
  365. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
  366. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
  367. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
  368. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
  369. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
  370. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
  371. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
  372. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
  373. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
  374. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
  375. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
  376. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
  377. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
  378. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
  379. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
  380. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
  381. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
  382. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
  383. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
  384. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
  385. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
  386. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
  387. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
  388. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
  389. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
  390. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
  391. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
  392. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
  393. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
  394. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
  395. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
  396. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
  397. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
  398. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
  399. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
  400. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/markdown.yaml +65 -0
  401. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
  402. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
  403. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
  404. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
  405. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
  406. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
  407. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
  408. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
  409. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
  410. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
  411. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
  412. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
  413. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
  414. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
  415. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
  416. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
  417. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
  418. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
  419. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
  420. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
  421. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
  422. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
  423. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
  424. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
  425. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
  426. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
  427. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
  428. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
  429. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
  430. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
  431. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
  432. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
  433. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
  434. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
  435. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
  436. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
  437. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
  438. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
  439. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
  440. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
  441. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
  442. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
  443. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
  444. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
  445. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
  446. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
  447. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
  448. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
  449. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
  450. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
  451. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
  452. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
  453. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
  454. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
  455. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
  456. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
  457. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
  458. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
  459. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
  460. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
  461. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
  462. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
  463. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
  464. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
  465. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
  466. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
  467. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
  468. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
  469. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
  470. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
  471. package/initramfs/buninu/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
  472. package/initramfs/buninu/apps/jsmdcui/single-exe/README.md +396 -0
  473. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsHelper.js +371 -0
  474. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
  475. package/initramfs/buninu/apps/jsmdcui/single-exe/assetsPacker.js +218 -0
  476. package/initramfs/buninu/apps/jsmdcui/single-exe/compiled.js +498 -0
  477. package/initramfs/buninu/apps/jsmdcui/single-exe/entry.mjs +17 -0
  478. package/initramfs/buninu/apps/jsmdcui/single-exe/packAssets.sh +7 -0
  479. package/initramfs/buninu/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
  480. package/initramfs/buninu/apps/jsmdcui/src/buffer/backup.js +165 -0
  481. package/initramfs/buninu/apps/jsmdcui/src/buffer/buffer.js +126 -0
  482. package/initramfs/buninu/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
  483. package/initramfs/buninu/apps/jsmdcui/src/buffer/loc.js +38 -0
  484. package/initramfs/buninu/apps/jsmdcui/src/buffer/message.js +29 -0
  485. package/initramfs/buninu/apps/jsmdcui/src/build-args.js +40 -0
  486. package/initramfs/buninu/apps/jsmdcui/src/config/clean.js +172 -0
  487. package/initramfs/buninu/apps/jsmdcui/src/config/colorscheme.js +99 -0
  488. package/initramfs/buninu/apps/jsmdcui/src/config/config.js +125 -0
  489. package/initramfs/buninu/apps/jsmdcui/src/config/defaults.js +109 -0
  490. package/initramfs/buninu/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
  491. package/initramfs/buninu/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
  492. package/initramfs/buninu/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
  493. package/initramfs/buninu/apps/jsmdcui/src/cui/identity.mjs +26 -0
  494. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
  495. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
  496. package/initramfs/buninu/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
  497. package/initramfs/buninu/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
  498. package/initramfs/buninu/apps/jsmdcui/src/cui/rpc.mjs +1554 -0
  499. package/initramfs/buninu/apps/jsmdcui/src/cui/server.mjs +128 -0
  500. package/initramfs/buninu/apps/jsmdcui/src/cui/table-render.mjs +286 -0
  501. package/initramfs/buninu/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
  502. package/initramfs/buninu/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
  503. package/initramfs/buninu/apps/jsmdcui/src/cui/template-components.mjs +253 -0
  504. package/initramfs/buninu/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
  505. package/initramfs/buninu/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
  506. package/initramfs/buninu/apps/jsmdcui/src/display/ansi-style.js +60 -0
  507. package/initramfs/buninu/apps/jsmdcui/src/highlight/highlighter.js +243 -0
  508. package/initramfs/buninu/apps/jsmdcui/src/highlight/parser.js +225 -0
  509. package/initramfs/buninu/apps/jsmdcui/src/index.js +9586 -0
  510. package/initramfs/buninu/apps/jsmdcui/src/lua/engine.js +68 -0
  511. package/initramfs/buninu/apps/jsmdcui/src/platform/archive.js +50 -0
  512. package/initramfs/buninu/apps/jsmdcui/src/platform/clipboard.js +278 -0
  513. package/initramfs/buninu/apps/jsmdcui/src/platform/commands.js +221 -0
  514. package/initramfs/buninu/apps/jsmdcui/src/platform/terminal.js +5 -0
  515. package/initramfs/buninu/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
  516. package/initramfs/buninu/apps/jsmdcui/src/plugins/manager.js +674 -0
  517. package/initramfs/buninu/apps/jsmdcui/src/runtime/encodings.js +10 -0
  518. package/initramfs/buninu/apps/jsmdcui/src/runtime/registry.js +134 -0
  519. package/initramfs/buninu/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
  520. package/initramfs/buninu/apps/jsmdcui/src/screen/events.js +263 -0
  521. package/initramfs/buninu/apps/jsmdcui/src/screen/screen.js +249 -0
  522. package/initramfs/buninu/apps/jsmdcui/src/screen/vt100.js +571 -0
  523. package/initramfs/buninu/apps/jsmdcui/src/shell/shell.js +70 -0
  524. package/initramfs/buninu/apps/jsmdcui/testapp.md +78 -0
  525. package/initramfs/buninu/apps/jsmdcui/tests/assets-helper.test.js +150 -0
  526. package/initramfs/buninu/apps/jsmdcui/tests/backup.test.js +158 -0
  527. package/initramfs/buninu/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
  528. package/initramfs/buninu/apps/jsmdcui/tests/cdp-security.test.js +32 -0
  529. package/initramfs/buninu/apps/jsmdcui/tests/cdp-websocket-test.html +46 -0
  530. package/initramfs/buninu/apps/jsmdcui/tests/cmphex3b64.js +95 -0
  531. package/initramfs/buninu/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
  532. package/initramfs/buninu/apps/jsmdcui/tests/config-settings.test.js +52 -0
  533. package/initramfs/buninu/apps/jsmdcui/tests/demo.test.js +448 -0
  534. package/initramfs/buninu/apps/jsmdcui/tests/docs-sync.test.js +14 -0
  535. package/initramfs/buninu/apps/jsmdcui/tests/fence-events.test.js +1293 -0
  536. package/initramfs/buninu/apps/jsmdcui/tests/heading-ids.test.js +559 -0
  537. package/initramfs/buninu/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
  538. package/initramfs/buninu/apps/jsmdcui/tests/id-collision.test.js +514 -0
  539. package/initramfs/buninu/apps/jsmdcui/tests/jmigt.js +16 -0
  540. package/initramfs/buninu/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
  541. package/initramfs/buninu/apps/jsmdcui/tests/key-event.md +10 -0
  542. package/initramfs/buninu/apps/jsmdcui/tests/kitty-demo.md +184 -0
  543. package/initramfs/buninu/apps/jsmdcui/tests/kitty-images.test.js +288 -0
  544. package/initramfs/buninu/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
  545. package/initramfs/buninu/apps/jsmdcui/tests/platform-commands.test.js +18 -0
  546. package/initramfs/buninu/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
  547. package/initramfs/buninu/apps/jsmdcui/tests/pty-demo.js +492 -0
  548. package/initramfs/buninu/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
  549. package/initramfs/buninu/apps/jsmdcui/tests/table-render.test.js +150 -0
  550. package/initramfs/buninu/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
  551. package/initramfs/buninu/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
  552. package/initramfs/buninu/apps/jsmdcui/tests/template-components.test.js +422 -0
  553. package/initramfs/buninu/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
  554. package/initramfs/buninu/apps/jsmdcui/tests/textarea.md +8 -0
  555. package/initramfs/buninu/apps/jsmdcui/tests/tui-links.test.js +298 -0
  556. package/initramfs/buninu/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
  557. package/initramfs/buninu/apps/jsmdcui/tests/wui.test.js +108 -0
  558. package/initramfs/buninu/apps/jsmdcui/tests/wv-client.js +96 -0
  559. package/initramfs/buninu/apps/jsmdcui/tui +7 -0
  560. package/initramfs/buninu/apps/jsmdcui/wui +9 -0
  561. package/initramfs/buninu/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
  562. package/initramfs/buninu/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
  563. package/initramfs/buninu/apps/musl-la/LICENSE_musl.txt +193 -0
  564. package/initramfs/buninu/apps/musl-la/NOTICE +41 -0
  565. package/initramfs/buninu/apps/musl-la/ld-musl-aarch64.so.1 +0 -0
  566. package/initramfs/buninu/apps/musl-la/libgcc_s.so.1 +0 -0
  567. package/initramfs/buninu/apps/musl-la/libstdc++.so.6 +0 -0
  568. package/initramfs/buninu/apps/musl-la/musl-la.sh +36 -0
  569. package/initramfs/buninu/apps/native-bridge/native-bridge.js +199 -0
  570. package/initramfs/buninu/apps/native-bridge/package.json +8 -0
  571. package/initramfs/buninu/apps/tts/tts.js +214 -0
  572. package/initramfs/buninu/apps/xclip/xclip.js +121 -0
  573. package/initramfs/buninu/apps/xdg-open/xdg-open.js +151 -0
  574. package/initramfs/buninu/bin/bun.bat +37 -0
  575. package/initramfs/buninu/bin/bun.sh +57 -0
  576. package/initramfs/buninu/bin/buninu-help.bat +4 -0
  577. package/initramfs/buninu/bin/buninu-help.sh +7 -0
  578. package/initramfs/buninu/bin/bunmsh.bat +3 -0
  579. package/initramfs/buninu/bin/bunmsh.sh +5 -0
  580. package/initramfs/buninu/bin/bunx.bat +3 -0
  581. package/initramfs/buninu/bin/glow.bat +3 -0
  582. package/initramfs/buninu/bin/glow.sh +5 -0
  583. package/initramfs/buninu/bin/init.js +779 -0
  584. package/initramfs/buninu/bin/install.js +570 -0
  585. package/initramfs/buninu/bin/jmi.bat +3 -0
  586. package/initramfs/buninu/bin/jmi.sh +5 -0
  587. package/initramfs/buninu/bin/jsgotty.bat +3 -0
  588. package/initramfs/buninu/bin/jsgotty.sh +5 -0
  589. package/initramfs/buninu/bin/jsmdcui.bat +11 -0
  590. package/initramfs/buninu/bin/libsh-loader.c +135 -0
  591. package/initramfs/buninu/bin/libsh-loader.so +0 -0
  592. package/initramfs/buninu/bin/multicall.sh +103 -0
  593. package/initramfs/buninu/bin/native-bridge.bat +3 -0
  594. package/initramfs/buninu/bin/rz.bat +3 -0
  595. package/initramfs/buninu/bin/rz.sh +5 -0
  596. package/initramfs/buninu/bin/shc.js +5 -0
  597. package/initramfs/buninu/bin/showimg.bat +3 -0
  598. package/initramfs/buninu/bin/showimg.sh +5 -0
  599. package/initramfs/buninu/bin/switch_to_android.sh +9 -0
  600. package/initramfs/buninu/bin/switch_to_linux.sh +7 -0
  601. package/initramfs/buninu/bin/sz.bat +3 -0
  602. package/initramfs/buninu/bin/sz.sh +5 -0
  603. package/initramfs/buninu/bin/tts.bat +3 -0
  604. package/initramfs/buninu/bin/xclip.bat +3 -0
  605. package/initramfs/buninu/bin/xdg-open.bat +3 -0
  606. package/initramfs/buninu/demo-server.js +64 -0
  607. package/initramfs/buninu/icon.png +0 -0
  608. package/initramfs/buninu/package.json +59 -0
  609. package/initramfs/etc/resolv.conf +1 -0
  610. package/initramfs/init.js +339 -0
  611. package/initramfs/lib/ld-musl-x86_64.so.1 +0 -0
  612. package/initramfs/lib/libc.musl-x86_64.so.1 +0 -0
  613. package/initramfs/lib/libgcc_s.so.1 +0 -0
  614. package/initramfs/lib/libstdc++.so.6 +0 -0
  615. package/initramfs/usr/bin/env +7 -0
  616. package/package.json +42 -0
  617. package/run-qemu.sh +44 -0
  618. package/scripts/fetch.sh +26 -0
  619. package/scripts/pack-initramfs.sh +41 -0
  620. package/test/build-init-bootstrap.sh +23 -0
  621. package/test/init-bootstrap.c +55 -0
@@ -0,0 +1,779 @@
1
+ #!/usr/bin/env bun
2
+
3
+ import pkg from "../package.json" with { type: "json" };
4
+ import { existsSync, lstatSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, unlinkSync } from "node:fs";
5
+ import { homedir, tmpdir as systemTmpDir } from "node:os";
6
+ import { basename, delimiter, dirname, isAbsolute, resolve } from "node:path";
7
+ import { createInterface } from "node:readline/promises";
8
+ import { fileURLToPath } from "node:url";
9
+
10
+ const binDir = dirname(fileURLToPath(import.meta.url));
11
+ const rootDir = resolve(binDir, "..");
12
+ const REPO_ROOT = rootDir;
13
+
14
+ function fail(message) {
15
+ console.error(`${pkg.name}: ${message}`);
16
+ process.exit(1);
17
+ }
18
+
19
+ function usage() {
20
+ return `${pkg.name} - ${pkg.description}
21
+
22
+ Usage:
23
+ ${pkg.name} [init options] [jsgotty options]
24
+
25
+ Init options:
26
+ --local
27
+ Start Buninu in this terminal
28
+ instead of a Remote Shell
29
+ reached from a browser
30
+ (via jsgotty, the default)
31
+
32
+ -h, --help
33
+ Show this help and exit
34
+ -V, --version
35
+ Show version & runtime info, then exit
36
+
37
+ --readme
38
+ Render README.md in the terminal and exit
39
+ --changelog
40
+ Render CHANGELOG.md in the terminal and exit
41
+
42
+ --readme-tui
43
+ Open README.md as a Terminal UI
44
+ --readme-wui
45
+ Serve README.md as a Web UI
46
+
47
+ --export [output.tgz]
48
+ Export this Buninu installation
49
+ (default: ./buninu.tgz)
50
+
51
+ --export-config [output.json]
52
+ Export Buninu's package.json
53
+ (default: ./buninu.json)
54
+
55
+ Install options:
56
+ -i, --install [dir]
57
+ Install this package into <dir>/${pkg.name}
58
+ (default: .)
59
+
60
+ -si, --strip-install [dir]
61
+ Install into <dir> directly
62
+ Without a top-level directory of its own
63
+
64
+ (--install --help for full options)
65
+
66
+ Remote Shell options:
67
+ --shell <path|name>
68
+ Override buninu.shell for this run
69
+ --command <command>
70
+ Override buninu.command for this run
71
+
72
+ Direct app launch
73
+ (must be the first argument)
74
+ (skips the shell/command startup flow entirely):
75
+
76
+ --jsgotty [args...]
77
+ Spawn jsgotty directly,
78
+ forwarding remaining arguments,
79
+ and exit with its exit code
80
+ (--jsgotty --help = jsgotty options)
81
+
82
+ --jsmdcui [args...]
83
+ Spawn jsmdcui directly,
84
+ same forwarding behavior
85
+
86
+ --bunmsh [args...]
87
+ Spawn bunmsh directly,
88
+ same forwarding behavior
89
+
90
+ --musl-la [args...]
91
+ Spawn musl-la directly,
92
+ same forwarding behavior
93
+
94
+ Package configuration:
95
+ package.json contains a buninu section for default and platform settings.
96
+ buninu.shell Select the shell to start
97
+ buninu.command Run a startup command before entering the shell
98
+ buninu.exitAfterCmd Exit after buninu.command instead of falling back to
99
+ the shell (default: false)
100
+
101
+ All other options are forwarded to jsgotty. Without buninu.command, the
102
+ selected shell starts directly. With a command, it runs from the package.json
103
+ directory and then returns to the interactive shell regardless of exit status,
104
+ unless buninu.exitAfterCmd is true, in which case it exits instead.
105
+ `;
106
+ }
107
+
108
+ async function handleInformationArguments(arguments_) {
109
+ if (arguments_.includes("-h") || arguments_.includes("--help")) {
110
+ console.log(usage());
111
+ return true;
112
+ }
113
+
114
+ if (arguments_.includes("-V") || arguments_.includes("--version")) {
115
+ console.log(`${pkg.name}: ${pkg.description}`);
116
+ console.log("Version:", pkg.version);
117
+ console.log("Runtime:", `Bun ${Bun.version}`);
118
+ console.log("Platform:", `${process.platform}/${process.arch}`);
119
+ return true;
120
+ }
121
+
122
+ const exportOption = readExportArgument(arguments_);
123
+ if (exportOption) {
124
+ await exportInstallation(exportOption.output);
125
+ return true;
126
+ }
127
+
128
+ const exportConfigOption = readExportConfigArgument(arguments_);
129
+ if (exportConfigOption) {
130
+ await exportConfig(exportConfigOption.output);
131
+ return true;
132
+ }
133
+
134
+ if (arguments_.includes("--readme")) {
135
+ const readmePath = resolve(REPO_ROOT, "README.md");
136
+ if (!await pathExists(readmePath)) fail(`README not found: ${readmePath}`);
137
+ const markdown = await Bun.file(readmePath).text();
138
+ process.stdout.write(Bun.markdown.ansi(markdown, { hyperlinks: true }));
139
+ if (!markdown.endsWith("\n")) process.stdout.write("\n");
140
+ return true;
141
+ }
142
+
143
+ const markdownUi = arguments_.includes("--readme-tui")
144
+ ? "--tui"
145
+ : arguments_.includes("--readme-wui")
146
+ ? "--wui"
147
+ : null;
148
+ if (markdownUi) {
149
+ await openReadmeMarkdownUi(markdownUi);
150
+ return true;
151
+ }
152
+
153
+ if (arguments_.includes("--changelog")) {
154
+ const changelogPath = resolve(REPO_ROOT, "CHANGELOG.md");
155
+ if (!await pathExists(changelogPath)) fail(`CHANGELOG not found: ${changelogPath}`);
156
+ const markdown = await Bun.file(changelogPath).text();
157
+ process.stdout.write(Bun.markdown.ansi(markdown, { hyperlinks: true }));
158
+ if (!markdown.endsWith("\n")) process.stdout.write("\n");
159
+ return true;
160
+ }
161
+
162
+ return false;
163
+ }
164
+
165
+ // jsmdcui writes five generated companion files beside the Markdown it opens
166
+ // (`*.md.front.js`, `*.md.back.js`, `*.md.html`, `*.md-rpc.js`,
167
+ // `*.md-server.js`), and needs that directory to be writable. Run it on a copy
168
+ // under TMPDIR rather than on README.md in place: an installation is the
169
+ // user's to keep, `--export` would carry the generated files to another
170
+ // machine, an update never deletes them again, and under `npx` the package
171
+ // directory is a cache that should not be written to at all. Nothing is lost
172
+ // by the move -- the README's only image is a remote URL, and what makes it
173
+ // navigable is same-document `#heading-id` links, which resolve wherever the
174
+ // file sits.
175
+ async function openReadmeMarkdownUi(mode) {
176
+ const readmePath = resolve(REPO_ROOT, "README.md");
177
+ if (!await pathExists(readmePath)) fail(`README not found: ${readmePath}`);
178
+
179
+ const entry = resolve(rootDir, "apps", "jsmdcui", "src", "index.js");
180
+ if (!await pathExists(entry)) fail(`jsmdcui not found: ${entry}`);
181
+
182
+ const environment = await detectEnvironment();
183
+ const workDir = resolve(resolveTmpDir(environment), "buninu-readme");
184
+ // Start from a clean directory so a stale generated file from an older
185
+ // README can never be served in place of a freshly generated one.
186
+ rmSync(workDir, { recursive: true, force: true });
187
+ mkdirSync(workDir, { recursive: true });
188
+
189
+ const target = resolve(workDir, "README.md");
190
+ await Bun.write(target, Bun.file(readmePath));
191
+
192
+ // jsmdcui's entry point is a bundled CLI with no exports: it reads
193
+ // process.argv at the top level and runs. Set the argv it expects and import
194
+ // it, so this stays one process instead of spawning a second Bun.
195
+ process.argv = [process.argv[0], entry, mode, target];
196
+ await import(entry);
197
+
198
+ // jsmdcui owns the process from here on: it holds the terminal UI, or the
199
+ // Web UI server, open. Never resolve -- returning would hand control back to
200
+ // the caller, whose process.exit(0) would cut the UI off before it draws.
201
+ // This keeps no handle of its own, so once jsmdcui's are gone the process
202
+ // still ends on its own.
203
+ await new Promise(() => {});
204
+ }
205
+
206
+ function readExportArgument(arguments_) {
207
+ for (let index = 0; index < arguments_.length; index += 1) {
208
+ const argument = arguments_[index];
209
+ if (argument === "--export") {
210
+ const next = arguments_[index + 1];
211
+ return { output: next || "buninu.tgz" };
212
+ }
213
+ if (argument.startsWith("--export=")) {
214
+ const output = argument.slice("--export=".length);
215
+ if (!output) fail("--export= requires an output path");
216
+ return { output };
217
+ }
218
+ }
219
+ return null;
220
+ }
221
+
222
+ function readExportConfigArgument(arguments_) {
223
+ for (let index = 0; index < arguments_.length; index += 1) {
224
+ const argument = arguments_[index];
225
+ if (argument === "--export-config") {
226
+ const next = arguments_[index + 1];
227
+ return { output: next || "buninu.json" };
228
+ }
229
+ if (argument.startsWith("--export-config=")) {
230
+ const output = argument.slice("--export-config=".length);
231
+ if (!output) fail("--export-config= requires an output path");
232
+ return { output };
233
+ }
234
+ }
235
+ return null;
236
+ }
237
+
238
+ async function exportInstallation(output) {
239
+ const outputPath = resolve(process.cwd(), output);
240
+ const tar = Bun.which(process.platform === "win32" ? "tar.exe" : "tar") || Bun.which("tar");
241
+ if (!tar) fail("tar was not found in PATH");
242
+
243
+ mkdirSync(dirname(outputPath), { recursive: true });
244
+ const temporaryDir = mkdtempSync(resolve(systemTmpDir(), "buninu-export-"));
245
+ const temporaryArchive = resolve(temporaryDir, "buninu.tgz");
246
+ const temporaryBackup = resolve(temporaryDir, "previous-output.tgz");
247
+ const hadExistingOutput = existsSync(outputPath);
248
+ let exportError = null;
249
+ try {
250
+ // Keep the previous output recoverable, but remove it from its original
251
+ // path while tar walks REPO_ROOT so an in-tree export cannot include itself.
252
+ if (hadExistingOutput) {
253
+ if (!lstatSync(outputPath).isFile()) throw new Error(`export path is not a file: ${outputPath}`);
254
+ await Bun.write(temporaryBackup, Bun.file(outputPath));
255
+ unlinkSync(outputPath);
256
+ }
257
+ const process_ = Bun.spawn(
258
+ [tar, "-czf", temporaryArchive, "-C", dirname(REPO_ROOT), basename(REPO_ROOT)],
259
+ { env: { ...process.env }, stdin: "inherit", stdout: "inherit", stderr: "inherit" },
260
+ );
261
+ const status = await process_.exited;
262
+ if (status !== 0) throw new Error(`tar failed with exit ${status}`);
263
+ await Bun.write(outputPath, Bun.file(temporaryArchive));
264
+ } catch (error) {
265
+ exportError = error;
266
+ if (hadExistingOutput && await pathExists(temporaryBackup)) {
267
+ await Bun.write(outputPath, Bun.file(temporaryBackup));
268
+ }
269
+ } finally {
270
+ rmSync(temporaryDir, { recursive: true, force: true });
271
+ }
272
+
273
+ if (exportError) fail(exportError?.message || String(exportError));
274
+ console.log(outputPath);
275
+ }
276
+
277
+ async function exportConfig(output) {
278
+ const outputPath = resolve(process.cwd(), output);
279
+
280
+ if (existsSync(outputPath)) {
281
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
282
+ let answer;
283
+ try {
284
+ answer = await rl.question(`${outputPath} already exists and may be overwritten. Continue? [y/N] `);
285
+ } finally {
286
+ rl.close();
287
+ }
288
+ if (!/^[yY]/.test(answer.trim())) fail("Cancelled: output file was not overwritten");
289
+ }
290
+
291
+ const packageJsonPath = resolve(REPO_ROOT, "package.json");
292
+ await Bun.write(outputPath, Bun.file(packageJsonPath));
293
+ console.log(outputPath);
294
+ }
295
+
296
+ function splitCommand(command) {
297
+ const words = [];
298
+ let word = "";
299
+ let quote = "";
300
+ let escaped = false;
301
+
302
+ for (const char of command.trim()) {
303
+ if (escaped) {
304
+ word += char;
305
+ escaped = false;
306
+ } else if (char === "\\" && quote !== "'") {
307
+ escaped = true;
308
+ } else if (quote) {
309
+ if (char === quote) quote = "";
310
+ else word += char;
311
+ } else if (char === "'" || char === '"') {
312
+ quote = char;
313
+ } else if (/\s/.test(char)) {
314
+ if (word) words.push(word), word = "";
315
+ } else {
316
+ word += char;
317
+ }
318
+ }
319
+
320
+ if (escaped || quote) fail("invalid quoting in package.json scripts.start");
321
+ if (word) words.push(word);
322
+ return words;
323
+ }
324
+
325
+ async function pathExists(path) {
326
+ return Bun.file(path).exists();
327
+ }
328
+
329
+ async function findCommand(command) {
330
+ if (!command) return null;
331
+ if (command.includes("/") || command.includes("\\")) {
332
+ const path = isAbsolute(command) ? command : resolve(rootDir, command);
333
+ return await pathExists(path) ? path : null;
334
+ }
335
+ return Bun.which(command);
336
+ }
337
+
338
+ async function detectEnvironment() {
339
+ const windows = process.platform === "win32" || Boolean(process.env.WINDIR);
340
+ const termux = !windows && await pathExists("/data/data/com.termux/files/usr/bin/bash");
341
+ const android = !windows && !termux && (
342
+ process.platform === "android" ||
343
+ await pathExists("/system/bin/linker64") ||
344
+ Boolean(process.env.ANDROID_ROOT && process.env.ANDROID_DATA)
345
+ );
346
+
347
+ if (windows) {
348
+ return {
349
+ name: "windows",
350
+ shell:
351
+ Bun.which("pwsh.exe") ||
352
+ Bun.which("powershell.exe") ||
353
+ await findCommand(process.env.COMSPEC) ||
354
+ Bun.which("cmd.exe") ||
355
+ "cmd.exe",
356
+ };
357
+ }
358
+
359
+ if (termux) {
360
+ return {
361
+ name: "linux",
362
+ shell:
363
+ // await findCommand(process.env.SHELL) ||
364
+ Bun.which("bash") ||
365
+ Bun.which("sh") ||
366
+ "/bin/sh",
367
+ };
368
+ }
369
+
370
+ if (android) {
371
+ return {
372
+ name: "android",
373
+ shell:
374
+ // await findCommand(process.env.SHELL) ||
375
+ (await pathExists("/system/bin/sh") ? "/system/bin/sh" : null) ||
376
+ Bun.which("bash") ||
377
+ Bun.which("sh") ||
378
+ "/bin/sh",
379
+ };
380
+ }
381
+
382
+ if (process.platform === "darwin") {
383
+ return {
384
+ name: "macos",
385
+ shell:
386
+ // await findCommand(process.env.SHELL) ||
387
+ Bun.which("zsh") ||
388
+ Bun.which("bash") ||
389
+ Bun.which("sh") ||
390
+ "/bin/zsh",
391
+ };
392
+ }
393
+
394
+ if (process.platform === "linux") {
395
+ return {
396
+ name: "linux",
397
+ shell:
398
+ // await findCommand(process.env.SHELL) ||
399
+ Bun.which("bash") ||
400
+ Bun.which("sh") ||
401
+ "/bin/sh",
402
+ };
403
+ }
404
+
405
+ return {
406
+ name: `unix:${process.platform}`,
407
+ shell:
408
+ // await findCommand(process.env.SHELL) ||
409
+ Bun.which("bash") ||
410
+ Bun.which("sh") ||
411
+ "/bin/sh",
412
+ };
413
+ }
414
+
415
+ async function runPlatformSwitch(environment) {
416
+ const scriptName = environment.name === "android"
417
+ ? "switch_to_android.sh"
418
+ : environment.name === "linux"
419
+ ? "switch_to_linux.sh"
420
+ : null;
421
+ if (!scriptName) return;
422
+
423
+ const scriptPath = resolve(binDir, scriptName);
424
+ if (!await pathExists(scriptPath)) {
425
+ fail(`platform switch script does not exist: ${scriptPath}`);
426
+ }
427
+
428
+ const shell = environment.name === "android" && await pathExists("/system/bin/sh")
429
+ ? "/system/bin/sh"
430
+ : Bun.which("sh") || "/bin/sh";
431
+ const result = Bun.spawn([shell, scriptPath], {
432
+ cwd: rootDir,
433
+ env: { ...process.env },
434
+ stdin: "inherit",
435
+ stdout: "inherit",
436
+ stderr: "inherit",
437
+ });
438
+ const status = await result.exited;
439
+ if (status !== 0) {
440
+ fail(`${scriptName} failed with exit ${status}`);
441
+ }
442
+ }
443
+
444
+ async function rebuildNativeSymlinks(environment) {
445
+ if (environment.name === "windows") return;
446
+
447
+ const platformLinks = environment.name === "android"
448
+ ? {
449
+ bun: "androidNativeLibs/libbun.so",
450
+ shloader: "androidNativeLibs/libsh-loader.so",
451
+ }
452
+ : {
453
+ bun: "bun.sh",
454
+ shloader: "multicall.sh",
455
+ };
456
+ const cmdlistPath = resolve(rootDir, "apps", "cmdlist");
457
+ if (!await pathExists(cmdlistPath)) {
458
+ fail(`command list does not exist: ${cmdlistPath}`);
459
+ }
460
+
461
+ const commandNames = [...new Set(
462
+ (await Bun.file(cmdlistPath).text())
463
+ .split(/\r?\n/)
464
+ .map((line) => line.trim())
465
+ .filter((line) => line && !line.startsWith("#")),
466
+ )];
467
+ for (const name of commandNames) {
468
+ if (!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(name)) {
469
+ fail(`invalid command name in ${cmdlistPath}: ${name}`);
470
+ }
471
+ }
472
+
473
+ const links = Object.fromEntries([
474
+ ...Object.entries(platformLinks),
475
+ ...commandNames.map((name) => [name, "shloader"]),
476
+ ]);
477
+
478
+ for (const [name, target] of Object.entries(links)) {
479
+ const linkPath = resolve(binDir, name);
480
+ try {
481
+ const existing = lstatSync(linkPath);
482
+ if (!existing.isSymbolicLink()) {
483
+ fail(`cannot rebuild symlink over non-symlink: ${linkPath}`);
484
+ }
485
+ unlinkSync(linkPath);
486
+ } catch (error) {
487
+ if (error?.code !== "ENOENT") throw error;
488
+ }
489
+ symlinkSync(target, linkPath);
490
+ }
491
+ }
492
+
493
+ function getFreePort() {
494
+ const listener = Bun.listen({
495
+ hostname: "127.0.0.1",
496
+ port: 0,
497
+ socket: {
498
+ data() {},
499
+ },
500
+ });
501
+ const port = listener.port;
502
+ listener.stop(true);
503
+ return port;
504
+ }
505
+
506
+ // buninu.xdgDataHome moves the data directory XDG-aware programs write to,
507
+ // bunmsh's command history among them, without touching HOME: a shell started
508
+ // here still finds the SSH keys and Git configuration in the user's own home.
509
+ // `true` puts it inside the installation so it travels with a copied tree; a
510
+ // string names a directory, resolved from the package.json directory when it
511
+ // is relative, the way buninu.shell already resolves one.
512
+ function configuredXdgDataHome() {
513
+ const configured = pkg.buninu?.xdgDataHome;
514
+ if (configured === true) return resolve(rootDir, ".local", "share");
515
+ if (typeof configured !== "string" || !configured.trim()) return null;
516
+ return isAbsolute(configured) ? configured : resolve(rootDir, configured);
517
+ }
518
+
519
+ function resolveTmpDir(environment) {
520
+ const androidCacheDir = resolve(dirname(rootDir), "cache");
521
+ return process.env.TMPDIR || (
522
+ environment.name === "android"
523
+ ? existsSync(androidCacheDir)
524
+ ? androidCacheDir
525
+ : resolve(rootDir, "tmp")
526
+ : systemTmpDir()
527
+ );
528
+ }
529
+
530
+ async function createChildEnvironment(environment) {
531
+ const tmpDir = resolveTmpDir(environment);
532
+ const homeDir = process.env.HOME || homedir() || rootDir;
533
+ const envFile = await pathExists(resolve(rootDir, ".bashrc"))
534
+ ? resolve(rootDir, ".bashrc")
535
+ : await pathExists(resolve(homeDir, ".bashrc"))
536
+ ? resolve(homeDir, ".bashrc")
537
+ : null;
538
+
539
+ const xdgDataHome = configuredXdgDataHome();
540
+
541
+ mkdirSync(tmpDir, { recursive: true });
542
+ if (xdgDataHome) mkdirSync(xdgDataHome, { recursive: true });
543
+
544
+ const inheritedPath = process.env.PATH || "";
545
+ const hasTermuxExecPreload =
546
+ environment.name === "android" &&
547
+ String(process.env.LD_PRELOAD || "").includes("libtermux-exec.so");
548
+ const pathEntries = [
549
+ ...(hasTermuxExecPreload ? ["/system/bin"] : []),
550
+ inheritedPath,
551
+ binDir,
552
+ ].filter(Boolean);
553
+
554
+ const childEnvironment = { ...process.env };
555
+ for (const key of Object.keys(childEnvironment)) {
556
+ if (key.toLowerCase() === "path") delete childEnvironment[key];
557
+ }
558
+ childEnvironment[environment.name === "windows" ? "Path" : "PATH"] =
559
+ pathEntries.join(delimiter);
560
+
561
+ return {
562
+ ...childEnvironment,
563
+ HOME: homeDir,
564
+ TMPDIR: tmpDir,
565
+ SHELL: process.env.SHELL || environment.shell,
566
+ BUNINU_HOME: rootDir,
567
+ ...(xdgDataHome ? { XDG_DATA_HOME: xdgDataHome } : {}),
568
+ ...(envFile ? { ENV: envFile } : {}),
569
+ TERM: process.env.TERM || "xterm-256color",
570
+ COLORTERM: process.env.COLORTERM || "truecolor",
571
+ DISPLAY: process.env.DISPLAY || "127.0.0.1:0",
572
+ };
573
+ }
574
+
575
+ const directAppTargets = {
576
+ "--jsgotty": "jsgotty",
577
+ "--jsmdcui": "jsmdcui",
578
+ "--bunmsh": "bunmsh",
579
+ "--musl-la": "musl-la",
580
+ };
581
+
582
+ async function runDirectApp(name, forwardedArgs, environment) {
583
+ const isWindows = environment.name === "windows";
584
+ const launcherPath = resolve(binDir, isWindows ? `${name}.bat` : name);
585
+ if (!await pathExists(launcherPath)) {
586
+ fail(`${name} is not available on ${environment.name}: ${launcherPath}`);
587
+ }
588
+
589
+ const childEnvironment = await createChildEnvironment(environment);
590
+ const argv = isWindows
591
+ ? [process.env.ComSpec || "cmd.exe", "/c", launcherPath, ...forwardedArgs]
592
+ : [launcherPath, ...forwardedArgs];
593
+
594
+ const child = Bun.spawn(argv, {
595
+ cwd: rootDir,
596
+ env: childEnvironment,
597
+ stdin: "inherit",
598
+ stdout: "inherit",
599
+ stderr: "inherit",
600
+ });
601
+ process.exit(await child.exited);
602
+ }
603
+
604
+ function readInitArguments(arguments_) {
605
+ const forwarded = [];
606
+ let shell = null;
607
+ let command = null;
608
+
609
+ for (let index = 0; index < arguments_.length; index += 1) {
610
+ const argument = arguments_[index];
611
+ if (argument === "--shell" || argument === "--terminal") {
612
+ shell = arguments_[index + 1];
613
+ if (!shell) fail(`${argument} requires a command or executable path`);
614
+ index += 1;
615
+ } else if (argument.startsWith("--shell=") || argument.startsWith("--terminal=")) {
616
+ shell = argument.slice(argument.indexOf("=") + 1);
617
+ if (!shell) fail(`${argument.split("=")[0]} requires a command or executable path`);
618
+ } else if (argument === "--command") {
619
+ command = arguments_[index + 1];
620
+ if (!command) fail("--command requires a shell command string");
621
+ index += 1;
622
+ } else if (argument.startsWith("--command=")) {
623
+ command = argument.slice("--command=".length);
624
+ if (!command) fail("--command requires a shell command string");
625
+ } else {
626
+ forwarded.push(argument);
627
+ }
628
+ }
629
+
630
+ return { shell, command, forwarded };
631
+ }
632
+
633
+ function shellCommandArguments(shell, command, exitAfterCmd) {
634
+ if (!command) return [shell];
635
+
636
+ const shellName = basename(shell).toLowerCase();
637
+ if (shellName === "cmd" || shellName === "cmd.exe") {
638
+ if (exitAfterCmd) return [shell, "/d", "/s", "/c", command];
639
+ const quotedShell = `"${shell.replaceAll('"', '""')}"`;
640
+ return [shell, "/d", "/s", "/c", `${command} & ${quotedShell}`];
641
+ }
642
+
643
+ if (["powershell", "powershell.exe", "pwsh", "pwsh.exe"].includes(shellName)) {
644
+ if (exitAfterCmd) {
645
+ return [
646
+ shell,
647
+ "-NoLogo",
648
+ "-Command",
649
+ `& { ${command}; if (-not $?) { Write-Error 'Startup command failed' } }`,
650
+ ];
651
+ }
652
+ const escapedShell = shell.replaceAll("'", "''");
653
+ return [
654
+ shell,
655
+ "-NoLogo",
656
+ "-Command",
657
+ `& { ${command}; if (-not $?) { Write-Error 'Startup command failed' }; & '${escapedShell}' -NoExit }`,
658
+ ];
659
+ }
660
+
661
+ const wrapped =
662
+ `buninu_command=$1; shift; ( eval "$buninu_command" ); _buninu_status=$?; ` +
663
+ `if [ "$_buninu_status" -ne 0 ]; then ` +
664
+ `echo "buninu: startup command failed with exit $_buninu_status" >&2; ` +
665
+ (exitAfterCmd ? `fi; exit "$_buninu_status"` : `fi; exec "$0"`);
666
+ // Pass both the shell and startup command as argv instead of interpolating
667
+ // them into the wrapper. This keeps the wrapper single-line and avoids LF
668
+ // (Ctrl+J) characters in its process-list representation.
669
+ return [shell, "-c", wrapped, shell, command];
670
+ }
671
+
672
+ // Install is a mode of its own rather than a startup option, so it follows the
673
+ // same "must be the first argument" rule as the direct app launches above and
674
+ // never competes with an argument being forwarded to jsgotty.
675
+ function isInstallArgument(argument = "") {
676
+ return argument === "-i" || argument === "--install" ||
677
+ argument === "-si" || argument === "--strip-install" ||
678
+ argument.startsWith("--install=") || argument.startsWith("--strip-install=");
679
+ }
680
+
681
+ if (isInstallArgument(process.argv[2])) {
682
+ const { runInstall } = await import("./install.js");
683
+ process.exit(await runInstall(process.argv.slice(2)));
684
+ }
685
+
686
+ let startScript = pkg.scripts?.start;
687
+
688
+ if(process.argv.includes('--local'))
689
+ startScript = pkg.scripts?.local ;
690
+
691
+ if (typeof startScript !== "string" || !startScript.trim()) {
692
+ fail("package.json does not define scripts.start");
693
+ }
694
+
695
+ const directAppTarget = directAppTargets[process.argv[2]];
696
+ if (directAppTarget) {
697
+ const directEnvironment = await detectEnvironment();
698
+ await runPlatformSwitch(directEnvironment);
699
+ await rebuildNativeSymlinks(directEnvironment);
700
+ await runDirectApp(directAppTarget, process.argv.slice(3), directEnvironment);
701
+ }
702
+
703
+ if (await handleInformationArguments(process.argv.slice(2))) process.exit(0);
704
+
705
+ const command = splitCommand(startScript);
706
+ if (!command.length) fail("package.json scripts.start is empty");
707
+
708
+ // Use the Bun currently running init.js instead of relying on a second PATH lookup.
709
+ if (command[0] === "bun") command[0] = process.execPath;
710
+
711
+ const environment = await detectEnvironment();
712
+ await runPlatformSwitch(environment);
713
+ await rebuildNativeSymlinks(environment);
714
+ const initArguments = readInitArguments(process.argv.slice(2));
715
+ const configuredShell =
716
+ pkg.buninu?.shell?.[environment.name] ??
717
+ pkg.buninu?.shell?.default ??
718
+ null;
719
+ const requestedShell =
720
+ initArguments.shell ||
721
+ configuredShell;
722
+
723
+ if (requestedShell) {
724
+ const resolvedShell = await findCommand(requestedShell);
725
+ if (!resolvedShell) {
726
+ fail(`configured shell does not exist: ${requestedShell}`);
727
+ }
728
+ environment.shell = resolvedShell;
729
+ }
730
+
731
+ const commandConfiguration = pkg.buninu?.command;
732
+ const configuredCommand =
733
+ typeof commandConfiguration === "string"
734
+ ? commandConfiguration
735
+ : commandConfiguration?.[environment.name] ??
736
+ commandConfiguration?.default ??
737
+ null;
738
+ const startupCommand = initArguments.command ?? configuredCommand;
739
+ const exitAfterCmd = Boolean(pkg.buninu?.exitAfterCmd);
740
+
741
+ const forwardedArguments = initArguments.forwarded;
742
+ const hasExplicitPort = forwardedArguments.some((argument) =>
743
+ argument === "-p" ||
744
+ argument === "--port" ||
745
+ argument.startsWith("--port=")
746
+ );
747
+ const portArguments = hasExplicitPort ? [] : ["-p", String(getFreePort())];
748
+ const childEnvironment = await createChildEnvironment(environment);
749
+
750
+ const infoSuffix =
751
+ process.argv.includes('--local') ?
752
+ 'bunmsh' :
753
+ `port=${portArguments[1] || "user-defined"}, shell=${environment.shell}` ;
754
+
755
+ console.error(
756
+ `${pkg.name}@${pkg.version}: ${environment.name}/${process.arch}, ` + infoSuffix
757
+ );
758
+
759
+ const child = Bun.spawn(
760
+ [
761
+ ...command,
762
+ ...portArguments,
763
+ ...forwardedArguments,
764
+ ...shellCommandArguments(environment.shell, startupCommand, exitAfterCmd),
765
+ ],
766
+ {
767
+ cwd: rootDir,
768
+ env: childEnvironment,
769
+ stdin: "inherit",
770
+ stdout: "inherit",
771
+ stderr: "inherit",
772
+ },
773
+ );
774
+
775
+ for (const signal of ["SIGINT", "SIGTERM"]) {
776
+ process.on(signal, () => child.kill(signal));
777
+ }
778
+
779
+ process.exit(await child.exited);