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,61 @@
1
+ export function environmentValue(env, name, platform = process.platform) {
2
+ if (Object.hasOwn(env, name)) return env[name];
3
+ if (platform !== "win32") return undefined;
4
+ const key = Object.keys(env).find((candidate) => candidate.toLowerCase() === name.toLowerCase());
5
+ return key === undefined ? undefined : env[key];
6
+ }
7
+
8
+ export function canonicalEnvironment(env, platform = process.platform) {
9
+ const output = { ...env };
10
+ if (platform !== "win32") return output;
11
+ const canonicalize = (name) => {
12
+ const keys = Object.keys(output).filter((key) => key.toLowerCase() === name.toLowerCase());
13
+ if (!keys.length) return undefined;
14
+ const value = output[keys.at(-1)];
15
+ for (const key of keys) delete output[key];
16
+ output[name] = value;
17
+ return value;
18
+ };
19
+ if (canonicalize("PATH") === undefined) delete output.PATH;
20
+ let home = canonicalize("HOME");
21
+ if (!home) {
22
+ home = environmentValue(output, "USERPROFILE", platform);
23
+ if (!home) {
24
+ const drive = environmentValue(output, "HOMEDRIVE", platform) ?? "";
25
+ const path = environmentValue(output, "HOMEPATH", platform) ?? "";
26
+ home = drive && path ? `${drive}${path}` : "";
27
+ }
28
+ }
29
+ if (home) {
30
+ output.HOME = String(home).replaceAll("\\", "/");
31
+ } else {
32
+ delete output.HOME;
33
+ }
34
+ return output;
35
+ }
36
+
37
+ export function homeRelativePath(cwd, home, platform = process.platform) {
38
+ if (!home) return null;
39
+ const trim = (value) => {
40
+ const normalized = String(value).replaceAll("\\", "/");
41
+ return normalized === "/" ? "/" : normalized.replace(/\/+$/, "");
42
+ };
43
+ // Android exposes app data through both /data/data/PACKAGE and
44
+ // /data/user/0/PACKAGE. They are the same app sandbox but string comparison
45
+ // alone cannot recognise HOME when the two spellings are mixed.
46
+ const comparable = (value) => trim(value).replace(
47
+ /^\/data\/user\/0\/([^/]+)(?=\/|$)/,
48
+ "/data/data/$1",
49
+ );
50
+ let comparedCwd = comparable(cwd);
51
+ let comparedHome = comparable(home);
52
+ if (platform === "win32") {
53
+ comparedCwd = comparedCwd.toLowerCase();
54
+ comparedHome = comparedHome.toLowerCase();
55
+ }
56
+ if (comparedCwd === comparedHome) return "";
57
+ if (comparedHome === "/" && comparedCwd.startsWith("/")) return comparedCwd;
58
+ return comparedCwd.startsWith(`${comparedHome}/`)
59
+ ? comparable(cwd).slice(comparedHome.length)
60
+ : null;
61
+ }
@@ -0,0 +1,186 @@
1
+ import { existsSync, lstatSync, readdirSync, readlinkSync } from "node:fs";
2
+ import { basename, isAbsolute, resolve } from "node:path";
3
+
4
+ const IMAGE = new Set(["png", "jpg", "jpeg", "gif", "webp", "svg", "bmp", "ico", "avif", "heic"]);
5
+ const MUSIC = new Set(["mp3", "wav", "flac", "ogg", "m4a", "aac", "opus", "mid", "midi"]);
6
+ const VIDEO = new Set(["mp4", "mkv", "webm", "mov", "avi", "m4v", "mpeg", "mpg"]);
7
+ const ICONS = new Map([
8
+ ["js", "🟨"], ["mjs", "🟨"], ["cjs", "🟨"],
9
+ ["ts", "🟦"], ["mts", "🟦"], ["cts", "🟦"],
10
+ ["py", "🐍"], ["c", "🔧"], ["h", "🧩"], ["rs", "🦀"],
11
+ ["html", "🌐"], ["htm", "🌐"], ["css", "🎨"],
12
+ ]);
13
+
14
+ function extension(name) {
15
+ const index = name.lastIndexOf(".");
16
+ return index > 0 ? name.slice(index + 1).toLowerCase() : "";
17
+ }
18
+
19
+ export function iconFor(name, stats, path = null) {
20
+ if (stats.isDirectory()) return "📦";
21
+ if (stats.isSymbolicLink()) return path !== null && !existsSync(path) ? "🚫" : "🔗";
22
+ const ext = extension(name);
23
+ if (IMAGE.has(ext)) return "🖼️";
24
+ if (MUSIC.has(ext)) return "🎵";
25
+ if (VIDEO.has(ext)) return "🎬";
26
+ if (ICONS.has(ext)) return ICONS.get(ext);
27
+ if (stats.mode & 0o111) return "⚙️";
28
+ return "📄";
29
+ }
30
+
31
+ // Only touches cross-platform-safe fs.Stats methods (isDirectory/
32
+ // isSymbolicLink/isSocket/isFIFO always return a real boolean on Windows
33
+ // too, just typically false for socket/FIFO since NTFS directory entries
34
+ // aren't reported as those) and the same mode-bit check iconFor already
35
+ // uses elsewhere in this file, so this needs no platform-specific handling.
36
+ function classifySuffix(stats) {
37
+ if (stats.isDirectory()) return "/";
38
+ if (stats.isSymbolicLink()) return "@";
39
+ if (stats.isSocket()) return "=";
40
+ if (stats.isFIFO()) return "|";
41
+ if (stats.mode & 0o111) return "*";
42
+ return "";
43
+ }
44
+
45
+ function displayEntry(entry, options) {
46
+ const suffix = options.classify ? classifySuffix(entry.stats) : entry.stats.isDirectory() ? "/" : "";
47
+ return `${iconFor(entry.name, entry.stats, entry.path)} ${entry.name}${suffix}`;
48
+ }
49
+
50
+ function columns(items, width) {
51
+ if (!items.length) return "";
52
+ const widest = Math.max(...items.map((item) => Bun.stringWidth(item))) + 2;
53
+ const count = Math.max(1, Math.floor(width / widest));
54
+ let output = "";
55
+ for (let index = 0; index < items.length; index++) {
56
+ const last = index % count === count - 1 || index === items.length - 1;
57
+ output += items[index];
58
+ output += last ? "\n" : " ".repeat(widest - Bun.stringWidth(items[index]));
59
+ }
60
+ return output;
61
+ }
62
+
63
+ function modeString(mode) {
64
+ const kinds = [[0o400, "r"], [0o200, "w"], [0o100, "x"], [0o040, "r"], [0o020, "w"], [0o010, "x"], [0o004, "r"], [0o002, "w"], [0o001, "x"]];
65
+ return kinds.map(([bit, letter]) => mode & bit ? letter : "-").join("");
66
+ }
67
+
68
+ function linkTarget(path) {
69
+ try {
70
+ // Node/Bun read the reparse point's stored target on Windows the same
71
+ // way as a POSIX symlink; only the separator needs normalizing to match
72
+ // the forward-slash paths the rest of the shell displays.
73
+ const target = readlinkSync(path);
74
+ return process.platform === "win32" ? target.replaceAll("\\", "/") : target;
75
+ } catch {
76
+ return null;
77
+ }
78
+ }
79
+
80
+ function localDateTime(ms) {
81
+ const date = new Date(ms);
82
+ const pad = (n) => String(n).padStart(2, "0");
83
+ return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} `
84
+ + `${pad(date.getHours())}:${pad(date.getMinutes())}`;
85
+ }
86
+
87
+ function humanSize(bytes) {
88
+ if (bytes < 1024) return String(bytes);
89
+ const units = ["K", "M", "G", "T", "P"];
90
+ let value = bytes;
91
+ let unit = -1;
92
+ do { value /= 1024; unit++; } while (value >= 1024 && unit < units.length - 1);
93
+ return `${value >= 10 ? value.toFixed(0) : value.toFixed(1).replace(/\.0$/, "")}${units[unit]}`;
94
+ }
95
+
96
+ function listDirectory(path, options) {
97
+ let entries = readdirSync(path, { withFileTypes: true })
98
+ .filter((entry) => options.all || options.almostAll || !entry.name.startsWith("."))
99
+ .map((entry) => {
100
+ const entryPath = resolve(path, entry.name);
101
+ return { name: entry.name, stats: lstatSync(entryPath), path: entryPath };
102
+ });
103
+ if (options.all) entries = [
104
+ { name: ".", stats: lstatSync(path), path },
105
+ { name: "..", stats: lstatSync(resolve(path, "..")), path: resolve(path, "..") },
106
+ ...entries,
107
+ ];
108
+ entries.sort(options.size
109
+ ? (a, b) => b.stats.size - a.stats.size || a.name.localeCompare(b.name)
110
+ : options.time
111
+ ? (a, b) => b.stats.mtimeMs - a.stats.mtimeMs || a.name.localeCompare(b.name)
112
+ : (a, b) => a.name.localeCompare(b.name));
113
+ if (options.reverse) entries.reverse();
114
+ return entries;
115
+ }
116
+
117
+ export function fancyLs(argv, state, terminal = Boolean(process.stdout.isTTY)) {
118
+ const options = {
119
+ all: false, almostAll: false, directory: false, long: false, human: false,
120
+ recursive: false, time: false, reverse: false, size: false, one: false, classify: false,
121
+ };
122
+ const operands = [];
123
+ for (const argument of argv.slice(1)) {
124
+ if (argument === "--color=auto" || argument === "--color" || argument === "--") continue;
125
+ if (/^-[^-]/.test(argument)) {
126
+ for (const flag of argument.slice(1)) {
127
+ if (flag === "a") options.all = true;
128
+ else if (flag === "A") options.almostAll = true;
129
+ else if (flag === "d") options.directory = true;
130
+ else if (flag === "l") options.long = true;
131
+ else if (flag === "h") options.human = true;
132
+ else if (flag === "R") options.recursive = true;
133
+ else if (flag === "t") options.time = true;
134
+ else if (flag === "r") options.reverse = true;
135
+ else if (flag === "S") options.size = true;
136
+ else if (flag === "1") options.one = true;
137
+ else if (flag === "F") options.classify = true;
138
+ else return { status: 2, stdout: "", stderr: `bunmsh: ${argv[0]}: unsupported option: -${flag}\n` };
139
+ }
140
+ } else operands.push(argument);
141
+ }
142
+ if (!operands.length) operands.push(".");
143
+ let status = 0, stdout = "", stderr = "";
144
+ const visited = new Set();
145
+ const show = (operand, heading = operands.length > 1) => {
146
+ const path = isAbsolute(operand) ? operand : resolve(state.cwd, operand);
147
+ try {
148
+ const stats = lstatSync(path);
149
+ let entries;
150
+ if (!stats.isDirectory() || options.directory)
151
+ entries = [{ name: basename(operand) || operand, stats, path }];
152
+ else entries = listDirectory(path, options);
153
+ if (heading) stdout += `${operand}:\n`;
154
+ const rendered = entries.map((entry) => displayEntry(entry, options));
155
+ if (options.long) {
156
+ for (let i = 0; i < entries.length; i++) {
157
+ const item = entries[i];
158
+ const date = localDateTime(item.stats.mtimeMs);
159
+ const size = options.human ? humanSize(item.stats.size) : String(item.stats.size);
160
+ const target = item.stats.isSymbolicLink() ? linkTarget(item.path) : null;
161
+ const suffix = target === null ? "" : ` -> ${target}`;
162
+ stdout += `${item.stats.isDirectory() ? "d" : item.stats.isSymbolicLink() ? "l" : "-"}${modeString(item.stats.mode)} ${size.padStart(8)} ${date} ${rendered[i]}${suffix}\n`;
163
+ }
164
+ } else stdout += terminal && !options.one
165
+ ? columns(rendered, process.stdout.columns ?? 80)
166
+ : `${rendered.join("\n")}${rendered.length ? "\n" : ""}`;
167
+ if (options.recursive && stats.isDirectory() && !options.directory) {
168
+ for (const entry of entries) if (entry.stats.isDirectory() && entry.name !== "." && entry.name !== "..") {
169
+ const child = resolve(path, entry.name);
170
+ if (visited.has(child)) continue;
171
+ visited.add(child);
172
+ stdout += "\n";
173
+ show(`${operand.replace(/\/$/, "")}/${entry.name}`, true);
174
+ }
175
+ }
176
+ } catch (error) {
177
+ status = 1;
178
+ stderr += `bunmsh: ${argv[0]}: ${operand}: ${error.message}\n`;
179
+ }
180
+ };
181
+ for (let i = 0; i < operands.length; i++) {
182
+ if (i) stdout += "\n";
183
+ show(operands[i]);
184
+ }
185
+ return { status, stdout, stderr };
186
+ }
@@ -0,0 +1,119 @@
1
+ import { lstatSync, readdirSync } from "node:fs";
2
+ import { basename, isAbsolute, resolve } from "node:path";
3
+
4
+ const shellPath = (value) => value.replaceAll("\\", "/");
5
+ const nativePath = (value, platform) => platform === "win32" ? value.replaceAll("/", "\\") : value;
6
+
7
+ function globRegex(pattern, insensitive = false) {
8
+ let source = "^";
9
+ for (let i = 0; i < pattern.length; i++) {
10
+ const ch = pattern[i];
11
+ if (ch === "*") source += ".*";
12
+ else if (ch === "?") source += ".";
13
+ else if (ch === "[") {
14
+ const end = pattern.indexOf("]", i + 1);
15
+ if (end < 0) source += "\\[";
16
+ else { source += pattern.slice(i, end + 1); i = end; }
17
+ } else source += ch.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
18
+ }
19
+ return new RegExp(`${source}$`, insensitive ? "i" : "");
20
+ }
21
+
22
+ export function findIsRegularBuiltin(platform = process.platform) {
23
+ return platform === "win32";
24
+ }
25
+
26
+ export async function runFind(argv, state, platform = process.platform, execute = null) {
27
+ let index = 1;
28
+ const roots = [];
29
+ while (index < argv.length && argv[index] !== "!" && argv[index] !== "-not" &&
30
+ !argv[index].startsWith("-")) roots.push(argv[index++]);
31
+ if (!roots.length) roots.push(".");
32
+ let minDepth = 0, maxDepth = Infinity, print0 = false, negate = false, explicitPrint = false;
33
+ const predicates = [];
34
+ const actions = [];
35
+ while (index < argv.length) {
36
+ const option = argv[index++];
37
+ if (option === "!" || option === "-not") { negate = !negate; continue; }
38
+ if (option === "-print") { explicitPrint = true; continue; }
39
+ if (option === "-print0") { explicitPrint = true; print0 = true; continue; }
40
+ if (option === "-exec") {
41
+ const command = [];
42
+ while (index < argv.length && argv[index] !== ";" && argv[index] !== "+")
43
+ command.push(argv[index++]);
44
+ const terminator = argv[index++];
45
+ if (!command.length || (terminator !== ";" && terminator !== "+"))
46
+ return { status: 2, stdout: "", stderr: "bunmsh: find: -exec: missing command or terminator\n" };
47
+ if (!command.includes("{}"))
48
+ return { status: 2, stdout: "", stderr: "bunmsh: find: -exec: command must contain {}\n" };
49
+ actions.push({ command, mode: terminator });
50
+ continue;
51
+ }
52
+ const argument = argv[index++];
53
+ if (argument === undefined)
54
+ return { status: 2, stdout: "", stderr: `bunmsh: find: ${option}: missing argument\n` };
55
+ let predicate;
56
+ if (option === "-name" || option === "-iname") {
57
+ const regex = globRegex(argument, option === "-iname");
58
+ predicate = (entry) => regex.test(basename(entry.shown));
59
+ } else if (option === "-path" || option === "-ipath") {
60
+ const regex = globRegex(argument, option === "-ipath");
61
+ predicate = (entry) => regex.test(entry.shown);
62
+ } else if (option === "-type") {
63
+ if (!/^[fdl]$/.test(argument))
64
+ return { status: 2, stdout: "", stderr: `bunmsh: find: unsupported type: ${argument}\n` };
65
+ predicate = (entry) => argument === "f" ? entry.stats.isFile() :
66
+ argument === "d" ? entry.stats.isDirectory() : entry.stats.isSymbolicLink();
67
+ } else if (option === "-mindepth" || option === "-maxdepth") {
68
+ if (!/^\d+$/.test(argument))
69
+ return { status: 2, stdout: "", stderr: `bunmsh: find: ${option}: invalid depth: ${argument}\n` };
70
+ if (option === "-mindepth") minDepth = Number(argument); else maxDepth = Number(argument);
71
+ continue;
72
+ } else return { status: 2, stdout: "", stderr: `bunmsh: find: unsupported option: ${option}\n` };
73
+ predicates.push(negate ? (entry) => !predicate(entry) : predicate);
74
+ negate = false;
75
+ }
76
+ if (negate) return { status: 2, stdout: "", stderr: "bunmsh: find: expected expression after !\n" };
77
+ let status = 0, stdout = "", stderr = "";
78
+ const decoder = new TextDecoder();
79
+ const appendExecution = (execution) => {
80
+ stdout += typeof execution.stdout === "string" ? execution.stdout : decoder.decode(execution.stdout);
81
+ stderr += typeof execution.stderr === "string" ? execution.stderr : decoder.decode(execution.stderr);
82
+ };
83
+ const matches = [];
84
+ const emit = (shown) => { stdout += shown + (print0 ? "\0" : "\n"); };
85
+ const visit = async (native, shown, depth) => {
86
+ let stats;
87
+ try { stats = lstatSync(native); }
88
+ catch (error) { status = 1; stderr += `bunmsh: find: ${shown}: ${error.message}\n`; return; }
89
+ const entry = { shown, stats };
90
+ if (depth >= minDepth && predicates.every((predicate) => predicate(entry))) {
91
+ matches.push(shown);
92
+ if (!actions.length || explicitPrint) emit(shown);
93
+ for (const action of actions) if (action.mode === ";") {
94
+ if (!execute) return;
95
+ const command = action.command.map((argument) => argument === "{}" ? shown : argument);
96
+ appendExecution(await execute(command));
97
+ }
98
+ }
99
+ if (!stats.isDirectory() || depth >= maxDepth) return;
100
+ let children;
101
+ try { children = readdirSync(native).sort(); }
102
+ catch (error) { status = 1; stderr += `bunmsh: find: ${shown}: ${error.message}\n`; return; }
103
+ for (const child of children)
104
+ await visit(resolve(native, child), shown === "." ? `./${child}` : `${shown.replace(/\/$/, "")}/${child}`, depth + 1);
105
+ };
106
+ for (const root of roots) {
107
+ const native = isAbsolute(nativePath(root, platform))
108
+ ? nativePath(root, platform) : resolve(nativePath(state.cwd, platform), nativePath(root, platform));
109
+ await visit(native, shellPath(root), 0);
110
+ }
111
+ for (const action of actions) if (action.mode === "+" && matches.length) {
112
+ if (!execute) continue;
113
+ const command = action.command.flatMap((argument) => argument === "{}" ? matches : [argument]);
114
+ const execution = await execute(command);
115
+ appendExecution(execution);
116
+ if (execution.status !== 0) status = 1;
117
+ }
118
+ return { status, stdout, stderr };
119
+ }
@@ -0,0 +1,198 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import { appendFile, rename, stat } from "node:fs/promises";
3
+ import { dirname } from "node:path";
4
+
5
+ function importEnabled(env) {
6
+ return !/^(?:0|false|off|no)$/i.test(env.BUNMSH_IMPORT_HISTORY ?? "");
7
+ }
8
+
9
+ // History is rendered directly beside the prompt. Reject the entire entry
10
+ // instead of stripping bytes and accidentally turning it into another command.
11
+ export function safeHistoryEntry(entry) {
12
+ return typeof entry === "string" && entry.length > 0 &&
13
+ !/[\u0000-\u001f\u007f-\u009f\u200b-\u200f\u2028-\u202e\u2066-\u2069\ufeff]/u.test(entry);
14
+ }
15
+
16
+ // node:readline stores its history newest-first, while bunmsh keeps history in
17
+ // chronological order for saving and ghost completion.
18
+ export function readlineHistory(history) {
19
+ return history.filter(safeHistoryEntry).toReversed();
20
+ }
21
+
22
+ export function bunmshHistoryPath(env = process.env, platform = process.platform) {
23
+ const trim = (value) => value?.replace(/[\\/]+$/, "");
24
+ if (platform === "win32") {
25
+ const base = trim(env.LOCALAPPDATA || env.APPDATA ||
26
+ (env.USERPROFILE ? `${trim(env.USERPROFILE)}/AppData/Local` : ""));
27
+ return base ? `${base}/bunmsh/history` : null;
28
+ }
29
+ const base = trim(env.XDG_DATA_HOME || (env.HOME ? `${trim(env.HOME)}/.local/share` : ""));
30
+ return base ? `${base}/bunmsh/history` : null;
31
+ }
32
+
33
+ async function readableText(path) {
34
+ const file = Bun.file(path);
35
+ return await file.exists() ? file.text() : null;
36
+ }
37
+
38
+ async function statSafe(path) {
39
+ try { return await stat(path); } catch { return null; }
40
+ }
41
+
42
+ export function parseBashHistory(source) {
43
+ return source
44
+ .split(/\r?\n/)
45
+ .filter((line) => !/^#[0-9]+$/.test(line) && safeHistoryEntry(line));
46
+ }
47
+
48
+ export function parseFishHistory(source) {
49
+ const records = source.split(/\r?\n/)
50
+ .map((line) => /^- cmd:\s?(.*)$/.exec(line)?.[1] ?? null)
51
+ .filter((entry) => entry !== null);
52
+ // Fish documents this as "YAML-style", not YAML. Command scalars use Fish's
53
+ // own escaping and can be rejected or only partially consumed by YAML
54
+ // parsers. The stable record boundary is the unindented `- cmd:` prefix.
55
+ return records
56
+ .map((entry) => entry.replace(/\\(\\|n)/g, (_match, escaped) => escaped === "n" ? "\n" : "\\"))
57
+ .filter(safeHistoryEntry);
58
+ }
59
+
60
+ // bunmsh saved its own history as a single JSON array before switching to
61
+ // one-JSON-value-per-line (JSONL). Detecting and reading that old format
62
+ // keeps existing history files working; see saveBunmshHistory for where the
63
+ // on-disk file actually gets converted.
64
+ function isLegacyArrayFormat(source) {
65
+ return source.trimStart().startsWith("[");
66
+ }
67
+
68
+ function parseLegacyArrayFormat(source) {
69
+ const parsed = JSON.parse(source);
70
+ return Array.isArray(parsed) ? parsed.filter(safeHistoryEntry) : [];
71
+ }
72
+
73
+ // Bun.JSONL.parse stops at the first line it can't parse instead of skipping
74
+ // it, which would silently discard every entry after one corrupted line (for
75
+ // example from a write torn by a crash). Detect that by comparing against the
76
+ // non-empty line count, and fall back to a per-line parse that only skips the
77
+ // bad lines when it looks like that happened.
78
+ function parseJsonlFormat(source) {
79
+ const lines = source.split(/\r?\n/).filter((line) => line.trim() !== "");
80
+ let parsed;
81
+ try { parsed = Bun.JSONL.parse(source); } catch { parsed = []; }
82
+ if (parsed.length < lines.length) {
83
+ parsed = [];
84
+ for (const line of lines) {
85
+ try { parsed.push(JSON.parse(line)); } catch {}
86
+ }
87
+ }
88
+ return parsed.filter(safeHistoryEntry);
89
+ }
90
+
91
+ function parseBunmshHistoryContent(source) {
92
+ if (source.trim() === "") return [];
93
+ return isLegacyArrayFormat(source) ? parseLegacyArrayFormat(source) : parseJsonlFormat(source);
94
+ }
95
+
96
+ function encodeJsonlLines(entries) {
97
+ return entries.map((entry) => `${JSON.stringify(entry)}\n`).join("");
98
+ }
99
+
100
+ // Writes the whole file in one shot via a temp file plus atomic rename, so a
101
+ // crash or interruption mid-write can never leave a half-written, unreadable
102
+ // history file behind — only ever the old content or the new content.
103
+ async function writeHistoryFileAtomic(path, entries) {
104
+ const tmpPath = `${path}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
105
+ await Bun.write(tmpPath, encodeJsonlLines(entries));
106
+ await rename(tmpPath, path);
107
+ }
108
+
109
+ function dedupeEntries(entries) {
110
+ const seen = new Set();
111
+ const unique = [];
112
+ for (let index = entries.length - 1; index >= 0; index--) {
113
+ const entry = entries[index];
114
+ if (!safeHistoryEntry(entry) || seen.has(entry)) continue;
115
+ seen.add(entry);
116
+ unique.push(entry);
117
+ }
118
+ return unique.reverse();
119
+ }
120
+
121
+ // The routine, frequent save path (manual `tab s`/`tab save`, the periodic
122
+ // autosave, and the on-exit flush all call this). It only appends the
123
+ // entries this session hasn't persisted yet — tracked on `state` via
124
+ // historySaved, a count into state.history — instead of rewriting the whole
125
+ // file, so it stays safe to call from multiple bunmsh sessions at once:
126
+ // each one only ever adds its own new lines to the end, never touching (or
127
+ // needing to know about) what any other session already wrote.
128
+ export async function saveBunmshHistory(state, env = process.env, platform = process.platform) {
129
+ const path = bunmshHistoryPath(env, platform);
130
+ if (!path) throw new Error("cannot determine bunmsh history path");
131
+ mkdirSync(dirname(path), { recursive: true });
132
+ if (!state.historyMigrated) {
133
+ // One-time upgrade for a pre-existing legacy (JSON-array) file. Like the
134
+ // explicit dedupe below, this rewrites the whole file, so it carries the
135
+ // same small risk of racing another session's concurrent write — but it
136
+ // happens at most once per history file, ever.
137
+ const source = await readableText(path);
138
+ if (source !== null && isLegacyArrayFormat(source))
139
+ await writeHistoryFileAtomic(path, parseLegacyArrayFormat(source));
140
+ state.historyMigrated = true;
141
+ }
142
+ const saved = state.historySaved ?? 0;
143
+ const pending = (state.history ?? []).slice(saved).filter(safeHistoryEntry);
144
+ if (pending.length) await appendFile(path, encodeJsonlLines(pending));
145
+ state.historySaved = (state.history ?? []).length;
146
+ return path;
147
+ }
148
+
149
+ // The explicit, occasional maintenance path (`tab s d` / `tab save dedupe`):
150
+ // rewrites the whole file with only the most recent occurrence of each
151
+ // command kept. Unlike saveBunmshHistory, this can race a concurrent save
152
+ // from another session — that's the trade-off for being able to shrink the
153
+ // file at all, since dropping duplicates means looking at (and replacing)
154
+ // entries this session didn't itself write. `raced` reports whether the
155
+ // file's mtime/size changed while this ran, as a best-effort heads-up (not a
156
+ // guarantee) that another session's write may have been overwritten by it.
157
+ export async function dedupeBunmshHistory(state, env = process.env, platform = process.platform) {
158
+ // Flush this session's own pending entries through the safe path first, so
159
+ // the dedupe/rewrite below is never the reason they'd be lost.
160
+ const path = await saveBunmshHistory(state, env, platform);
161
+ const before = await statSafe(path);
162
+ const source = await readableText(path);
163
+ const deduped = dedupeEntries(source === null ? [] : parseBunmshHistoryContent(source));
164
+ const after = await statSafe(path);
165
+ const raced = Boolean(before && after &&
166
+ (before.mtimeMs !== after.mtimeMs || before.size !== after.size));
167
+ await writeHistoryFileAtomic(path, deduped);
168
+ return { path, raced, count: deduped.length };
169
+ }
170
+
171
+ export async function importedHistory(env = process.env, platform = process.platform) {
172
+ const home = env.HOME?.replace(/\/+$/, "");
173
+ const paths = [];
174
+ if (importEnabled(env) && home) paths.push(
175
+ { type: "bash", path: env.HISTFILE || `${home}/.bash_history` },
176
+ { type: "fish", path: `${home}/.local/share/fish/fish_history` },
177
+ );
178
+ const ownPath = bunmshHistoryPath(env, platform);
179
+ if (ownPath) paths.push({ type: "bunmsh", path: ownPath });
180
+ const history = [];
181
+ for (const item of paths) {
182
+ try {
183
+ const source = await readableText(item.path);
184
+ if (source === null) continue;
185
+ history.push(...(item.type === "fish" ? parseFishHistory(source) :
186
+ item.type === "bunmsh" ? parseBunmshHistoryContent(source) : parseBashHistory(source)));
187
+ } catch {}
188
+ }
189
+ // Keep the most recent occurrence, matching historyGhost's reverse lookup.
190
+ const seen = new Set();
191
+ const unique = [];
192
+ for (let index = history.length - 1; index >= 0; index--) {
193
+ if (seen.has(history[index])) continue;
194
+ seen.add(history[index]);
195
+ unique.push(history[index]);
196
+ }
197
+ return unique.reverse();
198
+ }