buninu 0.1.1

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 (435) hide show
  1. package/.bashrc +11 -0
  2. package/ARCHITECTURE.md +452 -0
  3. package/LICENSE +21 -0
  4. package/README.md +121 -0
  5. package/apps/bun/make-bunBin.sh +84 -0
  6. package/apps/jsgotty/LICENSE +23 -0
  7. package/apps/jsgotty/LICENSES/Apache-2.0-zmodem.js.txt +201 -0
  8. package/apps/jsgotty/NOTICE +21 -0
  9. package/apps/jsgotty/README.en.md +290 -0
  10. package/apps/jsgotty/README.md +292 -0
  11. package/apps/jsgotty/client.mjs +700 -0
  12. package/apps/jsgotty/env.sh +2 -0
  13. package/apps/jsgotty/gotty.js +3325 -0
  14. package/apps/jsgotty/node_modules/.package-lock.json +35 -0
  15. package/apps/jsgotty/node_modules/node-addon-api/LICENSE.md +9 -0
  16. package/apps/jsgotty/node_modules/node-addon-api/README.md +319 -0
  17. package/apps/jsgotty/node_modules/node-addon-api/common.gypi +20 -0
  18. package/apps/jsgotty/node_modules/node-addon-api/except.gypi +25 -0
  19. package/apps/jsgotty/node_modules/node-addon-api/index.js +12 -0
  20. package/apps/jsgotty/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
  21. package/apps/jsgotty/node_modules/node-addon-api/napi-inl.h +6607 -0
  22. package/apps/jsgotty/node_modules/node-addon-api/napi.h +3201 -0
  23. package/apps/jsgotty/node_modules/node-addon-api/node_addon_api.gyp +32 -0
  24. package/apps/jsgotty/node_modules/node-addon-api/node_api.gyp +9 -0
  25. package/apps/jsgotty/node_modules/node-addon-api/noexcept.gypi +26 -0
  26. package/apps/jsgotty/node_modules/node-addon-api/nothing.c +0 -0
  27. package/apps/jsgotty/node_modules/node-addon-api/package-support.json +21 -0
  28. package/apps/jsgotty/node_modules/node-addon-api/package.json +480 -0
  29. package/apps/jsgotty/node_modules/node-addon-api/tools/README.md +73 -0
  30. package/apps/jsgotty/node_modules/node-addon-api/tools/check-napi.js +99 -0
  31. package/apps/jsgotty/node_modules/node-addon-api/tools/clang-format.js +71 -0
  32. package/apps/jsgotty/node_modules/node-addon-api/tools/conversion.js +301 -0
  33. package/apps/jsgotty/node_modules/node-addon-api/tools/eslint-format.js +79 -0
  34. package/apps/jsgotty/node_modules/ws/LICENSE +20 -0
  35. package/apps/jsgotty/node_modules/ws/README.md +548 -0
  36. package/apps/jsgotty/node_modules/ws/browser.js +8 -0
  37. package/apps/jsgotty/node_modules/ws/index.js +22 -0
  38. package/apps/jsgotty/node_modules/ws/lib/buffer-util.js +131 -0
  39. package/apps/jsgotty/node_modules/ws/lib/constants.js +19 -0
  40. package/apps/jsgotty/node_modules/ws/lib/event-target.js +292 -0
  41. package/apps/jsgotty/node_modules/ws/lib/extension.js +203 -0
  42. package/apps/jsgotty/node_modules/ws/lib/limiter.js +55 -0
  43. package/apps/jsgotty/node_modules/ws/lib/permessage-deflate.js +528 -0
  44. package/apps/jsgotty/node_modules/ws/lib/receiver.js +760 -0
  45. package/apps/jsgotty/node_modules/ws/lib/sender.js +607 -0
  46. package/apps/jsgotty/node_modules/ws/lib/stream.js +161 -0
  47. package/apps/jsgotty/node_modules/ws/lib/subprotocol.js +62 -0
  48. package/apps/jsgotty/node_modules/ws/lib/validation.js +152 -0
  49. package/apps/jsgotty/node_modules/ws/lib/websocket-server.js +562 -0
  50. package/apps/jsgotty/node_modules/ws/lib/websocket.js +1407 -0
  51. package/apps/jsgotty/node_modules/ws/package.json +70 -0
  52. package/apps/jsgotty/node_modules/ws/wrapper.mjs +21 -0
  53. package/apps/jsgotty/package-lock.json +46 -0
  54. package/apps/jsgotty/package.json +13 -0
  55. package/apps/jsgotty/patches/windowsPtyAgent.js +326 -0
  56. package/apps/jsgotty/patches/windowsTerminal.js +204 -0
  57. package/apps/jsgotty/rz.js +199 -0
  58. package/apps/jsgotty/single-exe/README.md +80 -0
  59. package/apps/jsgotty/single-exe/assetsHelper.js +90 -0
  60. package/apps/jsgotty/single-exe/assetsLoader.mjs +85 -0
  61. package/apps/jsgotty/single-exe/compiled.js +138 -0
  62. package/apps/jsgotty/single-exe/entry.mjs +9 -0
  63. package/apps/jsgotty/single-exe/packAssets.sh +7 -0
  64. package/apps/jsgotty/static/css/index.css +13 -0
  65. package/apps/jsgotty/static/css/kitty.css +61 -0
  66. package/apps/jsgotty/static/css/xterm.css +218 -0
  67. package/apps/jsgotty/static/css/xterm_customize.css +32 -0
  68. package/apps/jsgotty/static/favicon.ico +0 -0
  69. package/apps/jsgotty/static/help.md +125 -0
  70. package/apps/jsgotty/static/icon.svg +66 -0
  71. package/apps/jsgotty/static/icon_192.png +0 -0
  72. package/apps/jsgotty/static/index.html +164 -0
  73. package/apps/jsgotty/static/js/gotty.js +31537 -0
  74. package/apps/jsgotty/static/js/gotty.js.LICENSE.txt +7 -0
  75. package/apps/jsgotty/static/js/gotty.js.map +1 -0
  76. package/apps/jsgotty/static/js/gotty.licenses.txt +650 -0
  77. package/apps/jsgotty/static/js/kitty.js +1045 -0
  78. package/apps/jsgotty/static/js/windows_bridge.js +194 -0
  79. package/apps/jsgotty/static/js/xterm-addon-unicode11.js +2 -0
  80. package/apps/jsgotty/static/js/zmodem.js +1 -0
  81. package/apps/jsgotty/static/manifest.json +15 -0
  82. package/apps/jsgotty/sz.js +273 -0
  83. package/apps/jsgotty/tests/kitty-order.test.js +58 -0
  84. package/apps/jsgotty/viu.mjs +393 -0
  85. package/apps/jsgotty/wgotty +62 -0
  86. package/apps/jsgotty/windows-bridge-node.js +60 -0
  87. package/apps/jsgotty/zmodem-node.js +260 -0
  88. package/apps/jsmdcui/CHANGELOG.md +1048 -0
  89. package/apps/jsmdcui/LICENSE +22 -0
  90. package/apps/jsmdcui/README.md +1269 -0
  91. package/apps/jsmdcui/cdp-maze.js +141 -0
  92. package/apps/jsmdcui/clean.sh +9 -0
  93. package/apps/jsmdcui/demos/basic.jpg +0 -0
  94. package/apps/jsmdcui/demos/chinese.md +32 -0
  95. package/apps/jsmdcui/demos/event.md +170 -0
  96. package/apps/jsmdcui/demos/good.jpg +0 -0
  97. package/apps/jsmdcui/demos/image-processor.md +366 -0
  98. package/apps/jsmdcui/demos/image-processor.zh-TW.md +366 -0
  99. package/apps/jsmdcui/demos/img-change.md +73 -0
  100. package/apps/jsmdcui/demos/imgtool-zh.md +298 -0
  101. package/apps/jsmdcui/demos/imgtool.md +298 -0
  102. package/apps/jsmdcui/demos/maze.md +149 -0
  103. package/apps/jsmdcui/demos/reactive.md +40 -0
  104. package/apps/jsmdcui/demos/reader.md +513 -0
  105. package/apps/jsmdcui/demos/select.md +63 -0
  106. package/apps/jsmdcui/demos/todo-zh.md +190 -0
  107. package/apps/jsmdcui/demos/todo.md +191 -0
  108. package/apps/jsmdcui/edit +9 -0
  109. package/apps/jsmdcui/jsmdcui.sh +5 -0
  110. package/apps/jsmdcui/llm-maze.txt +94 -0
  111. package/apps/jsmdcui/package.json +19 -0
  112. package/apps/jsmdcui/project_structure.txt +35 -0
  113. package/apps/jsmdcui/runmd.mjs +1140 -0
  114. package/apps/jsmdcui/runtime/colorschemes/atom-dark.micro +33 -0
  115. package/apps/jsmdcui/runtime/colorschemes/bubblegum.micro +31 -0
  116. package/apps/jsmdcui/runtime/colorschemes/cmc-16.micro +47 -0
  117. package/apps/jsmdcui/runtime/colorschemes/cmc-tc.micro +43 -0
  118. package/apps/jsmdcui/runtime/colorschemes/darcula.micro +34 -0
  119. package/apps/jsmdcui/runtime/colorschemes/default.micro +1 -0
  120. package/apps/jsmdcui/runtime/colorschemes/dracula-tc.micro +49 -0
  121. package/apps/jsmdcui/runtime/colorschemes/dukedark-tc.micro +38 -0
  122. package/apps/jsmdcui/runtime/colorschemes/dukelight-tc.micro +38 -0
  123. package/apps/jsmdcui/runtime/colorschemes/dukeubuntu-tc.micro +38 -0
  124. package/apps/jsmdcui/runtime/colorschemes/geany.micro +29 -0
  125. package/apps/jsmdcui/runtime/colorschemes/gotham.micro +29 -0
  126. package/apps/jsmdcui/runtime/colorschemes/gruvbox-tc.micro +29 -0
  127. package/apps/jsmdcui/runtime/colorschemes/gruvbox.micro +26 -0
  128. package/apps/jsmdcui/runtime/colorschemes/material-tc.micro +36 -0
  129. package/apps/jsmdcui/runtime/colorschemes/monokai-dark.micro +28 -0
  130. package/apps/jsmdcui/runtime/colorschemes/monokai.micro +34 -0
  131. package/apps/jsmdcui/runtime/colorschemes/one-dark.micro +39 -0
  132. package/apps/jsmdcui/runtime/colorschemes/railscast.micro +37 -0
  133. package/apps/jsmdcui/runtime/colorschemes/simple.micro +33 -0
  134. package/apps/jsmdcui/runtime/colorschemes/solarized-tc.micro +31 -0
  135. package/apps/jsmdcui/runtime/colorschemes/solarized.micro +30 -0
  136. package/apps/jsmdcui/runtime/colorschemes/sunny-day.micro +29 -0
  137. package/apps/jsmdcui/runtime/colorschemes/twilight.micro +40 -0
  138. package/apps/jsmdcui/runtime/colorschemes/zenburn.micro +30 -0
  139. package/apps/jsmdcui/runtime/help/actions.md +161 -0
  140. package/apps/jsmdcui/runtime/help/cdp.md +124 -0
  141. package/apps/jsmdcui/runtime/help/colors.md +421 -0
  142. package/apps/jsmdcui/runtime/help/commands.md +161 -0
  143. package/apps/jsmdcui/runtime/help/copypaste.md +149 -0
  144. package/apps/jsmdcui/runtime/help/defaultkeys.md +148 -0
  145. package/apps/jsmdcui/runtime/help/help.md +1269 -0
  146. package/apps/jsmdcui/runtime/help/keybindings.md +355 -0
  147. package/apps/jsmdcui/runtime/help/linter.md +90 -0
  148. package/apps/jsmdcui/runtime/help/options.md +709 -0
  149. package/apps/jsmdcui/runtime/help/plugins.md +544 -0
  150. package/apps/jsmdcui/runtime/help/tutorial.md +112 -0
  151. package/apps/jsmdcui/runtime/jsplugins/cdp/cdp-server.js +1185 -0
  152. package/apps/jsmdcui/runtime/jsplugins/cdp/cdp.js +201 -0
  153. package/apps/jsmdcui/runtime/jsplugins/chapter/chapter.js +111 -0
  154. package/apps/jsmdcui/runtime/jsplugins/diff/diff.js +46 -0
  155. package/apps/jsmdcui/runtime/jsplugins/example/example.js +117 -0
  156. package/apps/jsmdcui/runtime/jsplugins/linter/linter.js +281 -0
  157. package/apps/jsmdcui/runtime/plugins/autoclose/autoclose.lua +75 -0
  158. package/apps/jsmdcui/runtime/plugins/ftoptions/ftoptions.lua +17 -0
  159. package/apps/jsmdcui/runtime/plugins/literate/README.md +5 -0
  160. package/apps/jsmdcui/runtime/plugins/literate/literate.lua +55 -0
  161. package/apps/jsmdcui/runtime/plugins/status/help/status.md +21 -0
  162. package/apps/jsmdcui/runtime/plugins/status/status.lua +62 -0
  163. package/apps/jsmdcui/runtime/syntax/LICENSE +22 -0
  164. package/apps/jsmdcui/runtime/syntax/PowerShell.yaml +128 -0
  165. package/apps/jsmdcui/runtime/syntax/README.md +63 -0
  166. package/apps/jsmdcui/runtime/syntax/ada.yaml +43 -0
  167. package/apps/jsmdcui/runtime/syntax/apacheconf.yaml +59 -0
  168. package/apps/jsmdcui/runtime/syntax/arduino.yaml +101 -0
  169. package/apps/jsmdcui/runtime/syntax/asciidoc.yaml +51 -0
  170. package/apps/jsmdcui/runtime/syntax/asm.yaml +123 -0
  171. package/apps/jsmdcui/runtime/syntax/ats.yaml +99 -0
  172. package/apps/jsmdcui/runtime/syntax/awk.yaml +44 -0
  173. package/apps/jsmdcui/runtime/syntax/b.yaml +87 -0
  174. package/apps/jsmdcui/runtime/syntax/bat.yaml +57 -0
  175. package/apps/jsmdcui/runtime/syntax/c.yaml +60 -0
  176. package/apps/jsmdcui/runtime/syntax/caddyfile.yaml +23 -0
  177. package/apps/jsmdcui/runtime/syntax/cake.yaml +7 -0
  178. package/apps/jsmdcui/runtime/syntax/clojure.yaml +38 -0
  179. package/apps/jsmdcui/runtime/syntax/cmake.yaml +42 -0
  180. package/apps/jsmdcui/runtime/syntax/coffeescript.yaml +56 -0
  181. package/apps/jsmdcui/runtime/syntax/colortest.yaml +19 -0
  182. package/apps/jsmdcui/runtime/syntax/conky.yaml +17 -0
  183. package/apps/jsmdcui/runtime/syntax/cpp.yaml +91 -0
  184. package/apps/jsmdcui/runtime/syntax/crontab.yaml +36 -0
  185. package/apps/jsmdcui/runtime/syntax/crystal.yaml +72 -0
  186. package/apps/jsmdcui/runtime/syntax/csharp.yaml +52 -0
  187. package/apps/jsmdcui/runtime/syntax/css.yaml +44 -0
  188. package/apps/jsmdcui/runtime/syntax/csx.yaml +8 -0
  189. package/apps/jsmdcui/runtime/syntax/cuda.yaml +68 -0
  190. package/apps/jsmdcui/runtime/syntax/cython.yaml +52 -0
  191. package/apps/jsmdcui/runtime/syntax/d.yaml +121 -0
  192. package/apps/jsmdcui/runtime/syntax/dart.yaml +46 -0
  193. package/apps/jsmdcui/runtime/syntax/default.yaml +10 -0
  194. package/apps/jsmdcui/runtime/syntax/dockerfile.yaml +36 -0
  195. package/apps/jsmdcui/runtime/syntax/dot.yaml +29 -0
  196. package/apps/jsmdcui/runtime/syntax/elixir.yaml +30 -0
  197. package/apps/jsmdcui/runtime/syntax/elm.yaml +38 -0
  198. package/apps/jsmdcui/runtime/syntax/erb.yaml +42 -0
  199. package/apps/jsmdcui/runtime/syntax/erlang.yaml +45 -0
  200. package/apps/jsmdcui/runtime/syntax/fish.yaml +48 -0
  201. package/apps/jsmdcui/runtime/syntax/forth.yaml +34 -0
  202. package/apps/jsmdcui/runtime/syntax/fortran.yaml +64 -0
  203. package/apps/jsmdcui/runtime/syntax/freebsd-kernel.yaml +14 -0
  204. package/apps/jsmdcui/runtime/syntax/fsharp.yaml +48 -0
  205. package/apps/jsmdcui/runtime/syntax/gdscript.yaml +61 -0
  206. package/apps/jsmdcui/runtime/syntax/gemini.yaml +19 -0
  207. package/apps/jsmdcui/runtime/syntax/gentoo-ebuild.yaml +48 -0
  208. package/apps/jsmdcui/runtime/syntax/gentoo-etc-portage.yaml +23 -0
  209. package/apps/jsmdcui/runtime/syntax/git-commit.yaml +35 -0
  210. package/apps/jsmdcui/runtime/syntax/git-config.yaml +14 -0
  211. package/apps/jsmdcui/runtime/syntax/git-rebase-todo.yaml +19 -0
  212. package/apps/jsmdcui/runtime/syntax/gleam.yaml +69 -0
  213. package/apps/jsmdcui/runtime/syntax/glsl.yaml +26 -0
  214. package/apps/jsmdcui/runtime/syntax/gnuplot.yaml +15 -0
  215. package/apps/jsmdcui/runtime/syntax/go.yaml +62 -0
  216. package/apps/jsmdcui/runtime/syntax/godoc.yaml +17 -0
  217. package/apps/jsmdcui/runtime/syntax/golo.yaml +73 -0
  218. package/apps/jsmdcui/runtime/syntax/gomod.yaml +31 -0
  219. package/apps/jsmdcui/runtime/syntax/graphql.yaml +47 -0
  220. package/apps/jsmdcui/runtime/syntax/groff.yaml +30 -0
  221. package/apps/jsmdcui/runtime/syntax/groovy.yaml +111 -0
  222. package/apps/jsmdcui/runtime/syntax/haml.yaml +16 -0
  223. package/apps/jsmdcui/runtime/syntax/hare.yaml +52 -0
  224. package/apps/jsmdcui/runtime/syntax/haskell.yaml +52 -0
  225. package/apps/jsmdcui/runtime/syntax/hc.yaml +52 -0
  226. package/apps/jsmdcui/runtime/syntax/html.yaml +70 -0
  227. package/apps/jsmdcui/runtime/syntax/html4.yaml +25 -0
  228. package/apps/jsmdcui/runtime/syntax/html5.yaml +25 -0
  229. package/apps/jsmdcui/runtime/syntax/ini.yaml +23 -0
  230. package/apps/jsmdcui/runtime/syntax/inputrc.yaml +14 -0
  231. package/apps/jsmdcui/runtime/syntax/java.yaml +37 -0
  232. package/apps/jsmdcui/runtime/syntax/javascript.yaml +124 -0
  233. package/apps/jsmdcui/runtime/syntax/jinja2.yaml +19 -0
  234. package/apps/jsmdcui/runtime/syntax/json.yaml +39 -0
  235. package/apps/jsmdcui/runtime/syntax/jsonnet.yaml +92 -0
  236. package/apps/jsmdcui/runtime/syntax/julia.yaml +57 -0
  237. package/apps/jsmdcui/runtime/syntax/justfile.yaml +40 -0
  238. package/apps/jsmdcui/runtime/syntax/keymap.yaml +27 -0
  239. package/apps/jsmdcui/runtime/syntax/kickstart.yaml +16 -0
  240. package/apps/jsmdcui/runtime/syntax/kotlin.yaml +66 -0
  241. package/apps/jsmdcui/runtime/syntax/kvlang.yaml +67 -0
  242. package/apps/jsmdcui/runtime/syntax/ledger.yaml +14 -0
  243. package/apps/jsmdcui/runtime/syntax/lfe.yaml +17 -0
  244. package/apps/jsmdcui/runtime/syntax/lilypond.yaml +26 -0
  245. package/apps/jsmdcui/runtime/syntax/lisp.yaml +17 -0
  246. package/apps/jsmdcui/runtime/syntax/log.yaml +92 -0
  247. package/apps/jsmdcui/runtime/syntax/lua.yaml +111 -0
  248. package/apps/jsmdcui/runtime/syntax/mail.yaml +25 -0
  249. package/apps/jsmdcui/runtime/syntax/makefile.yaml +38 -0
  250. package/apps/jsmdcui/runtime/syntax/man.yaml +12 -0
  251. package/apps/jsmdcui/runtime/syntax/markdown.yaml +64 -0
  252. package/apps/jsmdcui/runtime/syntax/mc.yaml +23 -0
  253. package/apps/jsmdcui/runtime/syntax/meson.yaml +51 -0
  254. package/apps/jsmdcui/runtime/syntax/micro.yaml +34 -0
  255. package/apps/jsmdcui/runtime/syntax/mpdconf.yaml +13 -0
  256. package/apps/jsmdcui/runtime/syntax/msbuild.yaml +6 -0
  257. package/apps/jsmdcui/runtime/syntax/nanorc.yaml +16 -0
  258. package/apps/jsmdcui/runtime/syntax/nftables.yaml +30 -0
  259. package/apps/jsmdcui/runtime/syntax/nginx.yaml +22 -0
  260. package/apps/jsmdcui/runtime/syntax/nim.yaml +27 -0
  261. package/apps/jsmdcui/runtime/syntax/nix.yaml +32 -0
  262. package/apps/jsmdcui/runtime/syntax/nu.yaml +114 -0
  263. package/apps/jsmdcui/runtime/syntax/objc.yaml +60 -0
  264. package/apps/jsmdcui/runtime/syntax/ocaml.yaml +43 -0
  265. package/apps/jsmdcui/runtime/syntax/octave.yaml +83 -0
  266. package/apps/jsmdcui/runtime/syntax/odin.yaml +64 -0
  267. package/apps/jsmdcui/runtime/syntax/pascal.yaml +45 -0
  268. package/apps/jsmdcui/runtime/syntax/patch.yaml +14 -0
  269. package/apps/jsmdcui/runtime/syntax/peg.yaml +16 -0
  270. package/apps/jsmdcui/runtime/syntax/perl.yaml +58 -0
  271. package/apps/jsmdcui/runtime/syntax/php.yaml +60 -0
  272. package/apps/jsmdcui/runtime/syntax/pkg-config.yaml +12 -0
  273. package/apps/jsmdcui/runtime/syntax/po.yaml +12 -0
  274. package/apps/jsmdcui/runtime/syntax/pony.yaml +37 -0
  275. package/apps/jsmdcui/runtime/syntax/pov.yaml +21 -0
  276. package/apps/jsmdcui/runtime/syntax/privoxy-action.yaml +14 -0
  277. package/apps/jsmdcui/runtime/syntax/privoxy-config.yaml +10 -0
  278. package/apps/jsmdcui/runtime/syntax/privoxy-filter.yaml +12 -0
  279. package/apps/jsmdcui/runtime/syntax/proto.yaml +40 -0
  280. package/apps/jsmdcui/runtime/syntax/prql.yaml +84 -0
  281. package/apps/jsmdcui/runtime/syntax/puppet.yaml +22 -0
  282. package/apps/jsmdcui/runtime/syntax/python2.yaml +60 -0
  283. package/apps/jsmdcui/runtime/syntax/python3.yaml +80 -0
  284. package/apps/jsmdcui/runtime/syntax/r.yaml +32 -0
  285. package/apps/jsmdcui/runtime/syntax/raku.yaml +42 -0
  286. package/apps/jsmdcui/runtime/syntax/reST.yaml +18 -0
  287. package/apps/jsmdcui/runtime/syntax/renpy.yaml +15 -0
  288. package/apps/jsmdcui/runtime/syntax/rpmspec.yaml +43 -0
  289. package/apps/jsmdcui/runtime/syntax/ruby.yaml +73 -0
  290. package/apps/jsmdcui/runtime/syntax/rust.yaml +78 -0
  291. package/apps/jsmdcui/runtime/syntax/sage.yaml +60 -0
  292. package/apps/jsmdcui/runtime/syntax/scad.yaml +53 -0
  293. package/apps/jsmdcui/runtime/syntax/scala.yaml +33 -0
  294. package/apps/jsmdcui/runtime/syntax/sed.yaml +13 -0
  295. package/apps/jsmdcui/runtime/syntax/sh.yaml +69 -0
  296. package/apps/jsmdcui/runtime/syntax/sls.yaml +15 -0
  297. package/apps/jsmdcui/runtime/syntax/smalltalk.yaml +55 -0
  298. package/apps/jsmdcui/runtime/syntax/solidity.yaml +41 -0
  299. package/apps/jsmdcui/runtime/syntax/sql.yaml +35 -0
  300. package/apps/jsmdcui/runtime/syntax/stata.yaml +67 -0
  301. package/apps/jsmdcui/runtime/syntax/svelte.yaml +27 -0
  302. package/apps/jsmdcui/runtime/syntax/swift.yaml +103 -0
  303. package/apps/jsmdcui/runtime/syntax/systemd.yaml +16 -0
  304. package/apps/jsmdcui/runtime/syntax/tcl.yaml +18 -0
  305. package/apps/jsmdcui/runtime/syntax/terraform.yaml +87 -0
  306. package/apps/jsmdcui/runtime/syntax/tex.yaml +32 -0
  307. package/apps/jsmdcui/runtime/syntax/toml.yaml +56 -0
  308. package/apps/jsmdcui/runtime/syntax/twig.yaml +55 -0
  309. package/apps/jsmdcui/runtime/syntax/typescript.yaml +49 -0
  310. package/apps/jsmdcui/runtime/syntax/v.yaml +80 -0
  311. package/apps/jsmdcui/runtime/syntax/vala.yaml +26 -0
  312. package/apps/jsmdcui/runtime/syntax/verilog.yaml +60 -0
  313. package/apps/jsmdcui/runtime/syntax/vhdl.yaml +37 -0
  314. package/apps/jsmdcui/runtime/syntax/vi.yaml +31 -0
  315. package/apps/jsmdcui/runtime/syntax/vue.yaml +64 -0
  316. package/apps/jsmdcui/runtime/syntax/xml.yaml +37 -0
  317. package/apps/jsmdcui/runtime/syntax/xresources.yaml +14 -0
  318. package/apps/jsmdcui/runtime/syntax/yaml.yaml +34 -0
  319. package/apps/jsmdcui/runtime/syntax/yum.yaml +12 -0
  320. package/apps/jsmdcui/runtime/syntax/zig.yaml +52 -0
  321. package/apps/jsmdcui/runtime/syntax/zscript.yaml +72 -0
  322. package/apps/jsmdcui/runtime/syntax/zsh.yaml +52 -0
  323. package/apps/jsmdcui/single-exe/README.md +473 -0
  324. package/apps/jsmdcui/single-exe/assetsHelper.js +191 -0
  325. package/apps/jsmdcui/single-exe/assetsLoader.mjs +85 -0
  326. package/apps/jsmdcui/single-exe/compiled.js +212 -0
  327. package/apps/jsmdcui/single-exe/entry.mjs +10 -0
  328. package/apps/jsmdcui/single-exe/packAssets.sh +7 -0
  329. package/apps/jsmdcui/src/MDCUI_DEFAULT_EDIT +0 -0
  330. package/apps/jsmdcui/src/buffer/backup.js +165 -0
  331. package/apps/jsmdcui/src/buffer/buffer.js +126 -0
  332. package/apps/jsmdcui/src/buffer/fixed3-codec.js +140 -0
  333. package/apps/jsmdcui/src/buffer/loc.js +38 -0
  334. package/apps/jsmdcui/src/buffer/message.js +29 -0
  335. package/apps/jsmdcui/src/build-args.js +40 -0
  336. package/apps/jsmdcui/src/config/clean.js +172 -0
  337. package/apps/jsmdcui/src/config/colorscheme.js +99 -0
  338. package/apps/jsmdcui/src/config/config.js +125 -0
  339. package/apps/jsmdcui/src/config/defaults.js +109 -0
  340. package/apps/jsmdcui/src/cui/fence-events.mjs +144 -0
  341. package/apps/jsmdcui/src/cui/heading-ids.mjs +1568 -0
  342. package/apps/jsmdcui/src/cui/id-collision.mjs +111 -0
  343. package/apps/jsmdcui/src/cui/identity.mjs +26 -0
  344. package/apps/jsmdcui/src/cui/kitty-debug.mjs +25 -0
  345. package/apps/jsmdcui/src/cui/kitty-images.mjs +280 -0
  346. package/apps/jsmdcui/src/cui/kitty-mode.mjs +6 -0
  347. package/apps/jsmdcui/src/cui/rerender-queue.mjs +66 -0
  348. package/apps/jsmdcui/src/cui/rpc.mjs +1525 -0
  349. package/apps/jsmdcui/src/cui/server.mjs +128 -0
  350. package/apps/jsmdcui/src/cui/table-render.mjs +286 -0
  351. package/apps/jsmdcui/src/cui/table-row-edit.mjs +226 -0
  352. package/apps/jsmdcui/src/cui/task-checkbox.mjs +60 -0
  353. package/apps/jsmdcui/src/cui/template-components.mjs +253 -0
  354. package/apps/jsmdcui/src/cui/text-block-resize.mjs +177 -0
  355. package/apps/jsmdcui/src/cui/tui-links.mjs +560 -0
  356. package/apps/jsmdcui/src/display/ansi-style.js +60 -0
  357. package/apps/jsmdcui/src/highlight/highlighter.js +243 -0
  358. package/apps/jsmdcui/src/highlight/parser.js +225 -0
  359. package/apps/jsmdcui/src/index.js +9573 -0
  360. package/apps/jsmdcui/src/lua/engine.js +68 -0
  361. package/apps/jsmdcui/src/platform/archive.js +50 -0
  362. package/apps/jsmdcui/src/platform/clipboard.js +278 -0
  363. package/apps/jsmdcui/src/platform/commands.js +221 -0
  364. package/apps/jsmdcui/src/platform/terminal.js +5 -0
  365. package/apps/jsmdcui/src/plugins/js-bridge.js +3377 -0
  366. package/apps/jsmdcui/src/plugins/manager.js +674 -0
  367. package/apps/jsmdcui/src/runtime/encodings.js +10 -0
  368. package/apps/jsmdcui/src/runtime/registry.js +134 -0
  369. package/apps/jsmdcui/src/screen/cell-buffer.js +81 -0
  370. package/apps/jsmdcui/src/screen/events.js +263 -0
  371. package/apps/jsmdcui/src/screen/screen.js +249 -0
  372. package/apps/jsmdcui/src/screen/vt100.js +571 -0
  373. package/apps/jsmdcui/src/shell/shell.js +70 -0
  374. package/apps/jsmdcui/testapp.md +78 -0
  375. package/apps/jsmdcui/tests/assets-helper.test.js +150 -0
  376. package/apps/jsmdcui/tests/backup.test.js +158 -0
  377. package/apps/jsmdcui/tests/cat-markdown.test.js +139 -0
  378. package/apps/jsmdcui/tests/cmphex3b64.js +95 -0
  379. package/apps/jsmdcui/tests/compiled-runtime.test.js +139 -0
  380. package/apps/jsmdcui/tests/config-settings.test.js +52 -0
  381. package/apps/jsmdcui/tests/demo.test.js +447 -0
  382. package/apps/jsmdcui/tests/docs-sync.test.js +14 -0
  383. package/apps/jsmdcui/tests/fence-events.test.js +1293 -0
  384. package/apps/jsmdcui/tests/heading-ids.test.js +559 -0
  385. package/apps/jsmdcui/tests/heading-list-selector.test.js +2393 -0
  386. package/apps/jsmdcui/tests/id-collision.test.js +514 -0
  387. package/apps/jsmdcui/tests/js-plugin-prompts.test.js +110 -0
  388. package/apps/jsmdcui/tests/key-event.md +10 -0
  389. package/apps/jsmdcui/tests/kitty-demo.md +184 -0
  390. package/apps/jsmdcui/tests/kitty-images.test.js +288 -0
  391. package/apps/jsmdcui/tests/kitty-mode.test.js +14 -0
  392. package/apps/jsmdcui/tests/platform-commands.test.js +18 -0
  393. package/apps/jsmdcui/tests/platform-terminal.test.js +8 -0
  394. package/apps/jsmdcui/tests/pty-demo.js +492 -0
  395. package/apps/jsmdcui/tests/rerender-queue.test.js +130 -0
  396. package/apps/jsmdcui/tests/table-render.test.js +150 -0
  397. package/apps/jsmdcui/tests/table-row-edit.test.js +138 -0
  398. package/apps/jsmdcui/tests/task-checkbox.test.js +33 -0
  399. package/apps/jsmdcui/tests/template-components.test.js +422 -0
  400. package/apps/jsmdcui/tests/text-block-resize.test.js +222 -0
  401. package/apps/jsmdcui/tests/textarea.md +8 -0
  402. package/apps/jsmdcui/tests/tui-links.test.js +298 -0
  403. package/apps/jsmdcui/tests/wui-responsive-images.test.js +60 -0
  404. package/apps/jsmdcui/tests/wui.test.js +108 -0
  405. package/apps/jsmdcui/tests/wv-client.js +96 -0
  406. package/apps/jsmdcui/tui +7 -0
  407. package/apps/jsmdcui/wui +9 -0
  408. package/apps/musl-la/LICENSES/Apache-2.0_LLVM_Exceptions_license.txt +311 -0
  409. package/apps/musl-la/LICENSES/Apache-2.0_license.txt +177 -0
  410. package/apps/musl-la/LICENSES/BSD-3-Clause_license.txt +43 -0
  411. package/apps/musl-la/LICENSES/GPL-3.0.txt +674 -0
  412. package/apps/musl-la/LICENSES/LGPL-3.0.txt +165 -0
  413. package/apps/musl-la/LICENSES/MIT.txt +21 -0
  414. package/apps/musl-la/LICENSES/curl_license.txt +22 -0
  415. package/apps/musl-la/LICENSES/gcc_runtime_exception.txt +73 -0
  416. package/apps/musl-la/LICENSES/zlib_license.txt +22 -0
  417. package/apps/musl-la/LICENSE_musl.txt +193 -0
  418. package/apps/musl-la/NOTICE +56 -0
  419. package/apps/musl-la/ldmusl +0 -0
  420. package/apps/musl-la/libgcc_s.so.1 +0 -0
  421. package/apps/musl-la/libstdc++.so.6 +0 -0
  422. package/apps/musl-la/musl-la.sh +5 -0
  423. package/bin/bun.sh +57 -0
  424. package/bin/glow.sh +5 -0
  425. package/bin/init.js +395 -0
  426. package/bin/jmi.sh +5 -0
  427. package/bin/jsgotty.sh +5 -0
  428. package/bin/libsh-loader.c +135 -0
  429. package/bin/libsh-loader.so +0 -0
  430. package/bin/multicall.sh +90 -0
  431. package/bin/shc.js +5 -0
  432. package/bin/switch_to_android.sh +9 -0
  433. package/bin/switch_to_linux.sh +7 -0
  434. package/icon.png +0 -0
  435. package/package.json +31 -0
@@ -0,0 +1,1048 @@
1
+ # Changelog
2
+
3
+ All notable user-visible changes to jsmdcui are documented here.
4
+
5
+ ## [0.17.3] - 2026-08-12
6
+
7
+ ### Fixed
8
+
9
+ - Request a redraw from every `$()` selector method that changes what is on
10
+ screen, not only `.data()` and `.val()`. `.show()`, `.hide()`, `.toggle()`,
11
+ `.push()`, `.pop()`, `.shift()`, `.unshift()`, `.splice()`, and
12
+ `.cell(row, col).text(value)` / `.cell(row, col).val(checked)` previously
13
+ updated the buffer without asking the TUI to repaint, so a call made
14
+ outside a keypress-driven handler (a `setInterval` tick, an awaited RPC
15
+ callback, a resolved promise) would sit invisible on screen until an
16
+ unrelated keypress or click happened to trigger the next redraw.
17
+
18
+ ## [0.17.2] - 2026-08-12
19
+
20
+ ### Fixed
21
+
22
+ - Keep `_mdcuiAnsiText` in sync while typing directly into an mdcui `text` or
23
+ `textarea` control. Plain character insertion, backspace, and forward
24
+ delete previously updated only the buffer's plain lines, so any later
25
+ action that rebuilds the document from the cached ANSI snapshot (for
26
+ example, refreshing Kitty images after a reactive `.data()` update) could
27
+ silently revert unsaved keystrokes back to their pre-edit value. These
28
+ edits now update the corresponding ANSI line the same way table-cell edits
29
+ already did, so the cached snapshot never falls behind what is on screen.
30
+
31
+ ## [0.17.0] - 2026-08-11
32
+
33
+ This release makes images first-class reactive Markdown data in both terminal
34
+ and browser applications. It adds a portable heading image selector, refreshes
35
+ Kitty graphics when template images change, accepts image data URLs, and
36
+ provides embedded-first asset readers with an external-file fallback. A new
37
+ bilingual image-switching demo and expanded documentation show both bundled
38
+ image sources and RPC-loaded data URLs.
39
+
40
+ ### Added
41
+
42
+ - Add cross-interface `$(heading).img(index = 0).src`. In the WUI it returns
43
+ the indexed real `<img>` element's resolved `src`; in the TUI it returns the
44
+ indexed image address from rendered OSC 8 metadata below the heading and
45
+ before the next heading. Missing or invalid indexes return an empty string.
46
+ - Add `readAssetText(path)` and `readAssetBytes(path)` to the single-executable
47
+ asset helpers. Both prefer `internalAssets` and automatically fall back to
48
+ the same path under `REPO_ROOT`; the bytes API consistently resolves to a
49
+ `Uint8Array`.
50
+ - Accept `data:image/...` URLs in Kitty rendering. Preserve them across Bun's
51
+ Markdown-to-ANSI conversion, decode their payload to image bytes, and feed
52
+ them through the existing size detection, compatibility conversion, stable
53
+ image ID, and Kitty transmission flow.
54
+ - Add `demos/img-change.md` and its two compact JPEG assets. The bilingual demo
55
+ loads the images through its back-end RPC as data URLs, initializes a
56
+ reactive image during `onMdcuiLoad()`, and alternates the sources with
57
+ heading-scoped `.data()` updates.
58
+ - Document reactive images, resolved bundled image sources, hidden source
59
+ headings, RPC-created data URLs, and the new selector API in the main README
60
+ and bundled help. Expand the single-executable guide with the shared text and
61
+ byte fallback readers.
62
+
63
+ ### Changed
64
+
65
+ - Queue reactive Kitty image preparation only when a changed template contains
66
+ an image. Coalesce repeated requests, rebuild image metadata safely from the
67
+ current ANSI document, and redraw the app after preparation completes.
68
+ - Reuse the new `readAssetText()` helper when generating WUI RPC and server
69
+ modules instead of maintaining a separate embedded-first fallback function.
70
+
71
+ ### Fixed
72
+
73
+ - Delete stale Kitty placements and prepare the replacement image when a
74
+ reactive template changes its Markdown image, including switching from a
75
+ normal path to a data URL or returning to a compiled embedded asset.
76
+ - Prevent an older asynchronous image preparation result from overwriting a
77
+ newer reactive update by tracking image revisions through the rerender
78
+ queue.
79
+
80
+ ## [0.16.0] - 2026-08-02
81
+
82
+ This release expands jsmdcui's reactive Markdown model with synchronous
83
+ JavaScript templates, heading-scoped state updates, and a post-load lifecycle
84
+ hook. It also introduces a shared TTS API for TUI and WUI and demonstrates the
85
+ new capabilities in a practical file-and-URL reader with paging, navigation,
86
+ speech controls, and configurable text replacement.
87
+
88
+ ### Added
89
+
90
+ - Add the optional async `onMdcuiLoad()` front export. It runs with the normal
91
+ front-code scope after initial TUI layout/rendering, or after WUI
92
+ `window.load` and installation of selectors and template component state.
93
+ - Let the built-in `tts` command accept the sentence to speak as an argument,
94
+ including calls such as `micro.cmd.tts('Hello world')`. Calling `tts` without
95
+ an argument retains selection-or-cursor reading behavior.
96
+ - Add the cross-interface async `$.tts(text, pitch, speed)` helper. The TUI uses
97
+ its native speech command and updates the current process's `TTS_PITCH` and
98
+ `TTS_SPEED`, while the WUI uses the browser Web Speech API and resolves after
99
+ the utterance ends. WUI speech failures resolve to an error-reason string
100
+ instead of rejecting the promise. Add `$.tts.stop()` as the shared stop API;
101
+ its TUI implementation uses the same dedicated stop path as Escape does while
102
+ speech is active.
103
+ - Add synchronous four-backtick `js template` components alongside
104
+ `md template`. Their source is used directly as the render function body, so
105
+ it can explicitly return Markdown while retaining the same heading-owned
106
+ `data` argument, component `this`, front matter, and reactive replacement
107
+ flow.
108
+ - Add the bilingual `demos/reader.md` reader demo. It provides reactive
109
+ ten-item file-list pages, editable page jumps, local directory completion,
110
+ direct file or URL selection, fixed-size document pages, keyboard paging,
111
+ and heading-scoped help.
112
+ - Let the reader fetch a web page and build its source list from `a[href]`
113
+ elements in document order. Link labels use anchor text while selected
114
+ values resolve relative links to complete HTTP(S) URLs.
115
+ - Add reader navigation and speech controls for numbered previous/next
116
+ chapters, speech speed and pitch, sequential sentence playback, automatic
117
+ page advancement, and cancellation that also stops the background reading
118
+ loop.
119
+ - Support optional JSON5 `replace.json` rules during reader loads. Each
120
+ two-item rule compiles its target as a global regular expression and inserts
121
+ its replacement literally. Local files use their own directory; URL loads
122
+ use `process.cwd()`.
123
+
124
+ ## [0.15.0] - 2026-08-01
125
+
126
+ ### Added
127
+
128
+ - Add reactive Markdown components with exactly four-backtick `md template`
129
+ fences. Each component belongs to its closest preceding heading, shares that
130
+ heading's data object, and exposes `source`, `initialData`, `last`, `data`,
131
+ `id`, `index`, and a `render(data = {})` function.
132
+ - Treat template source as a JavaScript template literal, allowing expressions
133
+ such as `${data.name}`. Component render results remain Markdown and pass
134
+ through an in-memory TUI or WUI Markdown conversion step before jsmdcui
135
+ replaces the component region.
136
+ - Parse optional leading template front matter with `Bun.YAML`, merge it into
137
+ the heading data before the first component render, and retain the parsed
138
+ object as `component.initialData`.
139
+ - Rerender every component under a heading when `.data(key, value)` or
140
+ `.data(object)` updates that heading. TUI components use invisible boundary
141
+ markers; WUI components use scoped `.mdcui-template` wrappers.
142
+ - Add post-edit `@input` handlers for named `text` and `textarea` controls in
143
+ both interfaces. WUI support is layered on top of the existing `onkeydown`
144
+ and mobile `onbeforeinput` paths rather than replacing them.
145
+ - Add `demos/reactive.md`, a bilingual reactive-template example using YAML
146
+ initial data and a 200 ms debounced text input.
147
+
148
+ ### Fixed
149
+
150
+ - Make TUI `@input` handlers observe the value after character insertion and
151
+ other successful edits instead of the preceding keydown value.
152
+ - Request a TUI redraw when an asynchronous `.data()` update replaces reactive
153
+ component output, preventing the display from remaining one update behind
154
+ until the next keypress.
155
+
156
+ ## [0.14.0] - 2026-07-29
157
+
158
+ ### Added
159
+
160
+ - Convert a leading `[ ]`, `[x]`, or `[X]` in every Markdown table cell into
161
+ a fixed-width `☐`/green `☒` TUI control or a native WUI checkbox, while
162
+ leaving matching text elsewhere in the cell unchanged. TUI conversion now
163
+ happens from the Markdown source before Bun lays out narrow cells, so the
164
+ checkbox cannot be split across rendered lines.
165
+ - Add cross-interface `$('#heading-id').cell(row, col).text()` and
166
+ `.text(value)` for reading or replacing zero-based cells in the
167
+ heading-associated table. TUI wrapped cell lines are joined on read; writes
168
+ remain inside the existing rendered rectangle, preserve ANSI styles and
169
+ OSC 8 links, and survive width rerenders. WUI writes retain the cell's
170
+ existing elements. Cell selections expose
171
+ `.row` and `.col`, plus bounded `.left()`, `.right()`, `.up()`, and `.down()`
172
+ navigation that returns `null` outside the table, with `.lt()`, `.rt()`, and
173
+ `.dn()` convenience aliases. A link event's `$(this).parent()` returns its
174
+ containing cell in both interfaces.
175
+ - Add cross-interface `.cell(row, col).val()`. It returns the first checkbox's
176
+ checked state as `true` or `false`, or falls back to the cell text when the
177
+ cell has no checkbox. Passing a boolean updates the first checkbox in either
178
+ interface.
179
+ - Make generated WUI tables directly editable while retaining embedded
180
+ checkbox and link elements.
181
+
182
+ ### Fixed
183
+
184
+ - Preserve edited TUI table cells, including their ANSI styles and OSC 8 data,
185
+ across terminal resize, `vsplit`, and closing a split. Refit edited contents
186
+ into the newly sized cells while leaving unchanged cells to the fresh
187
+ Markdown layout.
188
+ - Let TUI table overwrite mode accept double-width IME input such as Chinese
189
+ by consuming adjacent editable columns without crossing cell padding.
190
+ - Render a full-width divider between logical TUI table rows associated with
191
+ headings (without splitting wrapped cell text), and use
192
+ the active colorscheme's cursor-line or color-column color for the header
193
+ and alternating body-row backgrounds.
194
+ - Edit rendered TUI table rows in fixed-width overwrite mode so Backspace,
195
+ Delete, spaces, and printable input cannot remove cell separators or change
196
+ the row's visual width.
197
+ - Add default table borders, cell padding, striped rows, and hover highlighting
198
+ directly to the generated WUI HTML boilerplate.
199
+
200
+ ### Changed
201
+
202
+ - Replace the special-case `--demo-imgtool` and `--demo-imgtool-zh` aliases
203
+ with normal `demos/imgtool.md` discovery. Both commands now load compact
204
+ table-based image processor demos and create same-named local Markdown files.
205
+
206
+ ## [0.13.1] - 2026-07-29
207
+
208
+ ### Fixed
209
+
210
+ - Rerender MDCUI buffers at their new pane width immediately after `vsplit`
211
+ and after a split pane closes.
212
+ - Show a TUI message when checkbox state restoration is skipped because a
213
+ width rerender changed the number of checkboxes.
214
+ - Restore every rendered `☐` and `☒`, including its exact ANSI style, by
215
+ full-text order across ordinary text, tables, and fenced blocks when their
216
+ total count remains unchanged.
217
+
218
+ ## [0.13.0] - 2026-07-28
219
+
220
+ ### Added
221
+
222
+ - Add cross-interface heading selection APIs for stable `.id` values,
223
+ `.text()`, `.show()`, `.hide()`, `.toggle()`, `.data()`, and
224
+ `.removeData()`.
225
+ - Reserve the first visible grapheme of an identified heading as its section
226
+ toggle. It can be activated with a mouse click, `Enter`, or `Space`, while
227
+ the heading itself remains visible.
228
+ - Give local `javascript:` links and fenced keyboard handlers matching `this`,
229
+ `event.target`, and `event.currentTarget` values in both interfaces,
230
+ including keyboard modifiers and cancellation state.
231
+ - Add the `--demo-event` example for link and keyboard events, nested
232
+ selections, heading data, and heading visibility.
233
+ - Preserve heading-list mutations, checkbox states, fenced-control contents,
234
+ and collapsed headings when a terminal-width change rerenders a TUI
235
+ document.
236
+ - Accept Unicode letters, numbers, and combining marks in MDCUI IDs across
237
+ fenced declarations and selectors. Markdown headings whose usual generated
238
+ ID is empty receive a normalized Unicode ID or a stable `mdcui-h-...`
239
+ fallback.
240
+ - Give TUI link targets source-rendered inline label HTML through `innerHTML`,
241
+ with a visible-text fallback when source metadata is unavailable.
242
+ - Add `--outline FILE.md` to print every selectable heading ID as an indented
243
+ `-` item and every named fenced-block ID as a top-level `+` item.
244
+ - Let TUI `#heading-id` links move the cursor to the matching Markdown heading
245
+ and center it vertically, matching same-document WUI navigation.
246
+
247
+ ### Changed
248
+
249
+ - Canonicalize a `$()` object argument with a legal MDCUI ID immediately to
250
+ the corresponding `#id` selection. Other object fields are discarded,
251
+ wrapping may be nested to any depth, and objects without a legal ID retain
252
+ generic object-target behavior.
253
+ - Wrap WUI heading ranges in nested `<section>` elements so their visibility
254
+ boundaries match the TUI.
255
+ - Keep per-ID user data stable while headings are hidden, restored, or
256
+ replaced in the WUI DOM. `.removeData()` removes only user-owned data.
257
+ - Return semantic heading HTML without exposing the internal first-grapheme
258
+ toggle wrapper.
259
+ - Bound heading visibility and direct task-list lookup to the heading's
260
+ Markdown container, such as its enclosing blockquote or list item.
261
+
262
+ ### Fixed
263
+
264
+ - Prevent a heading concealed by an ancestor from resolving to an unrelated
265
+ visible heading or mutating that heading's task list.
266
+ - Make `.show()`, `.hide()`, and `.toggle()` update nested headings correctly
267
+ while one or more ancestors remain collapsed.
268
+ - Replay task-list mutations made through nested ID selections after a TUI
269
+ rerender.
270
+ - Prevent content, collapsed sections, or runtime list mutations from the
271
+ previous source from reappearing after a document is reopened, while
272
+ retaining user data.
273
+ - Let an earlier WUI click handler cancel a `javascript:` link and expose the
274
+ correct initial `event.defaultPrevented` state to the evaluated handler.
275
+ - Resolve legal pure IDs reliably in the WUI when their characters have CSS
276
+ selector meaning.
277
+ - Preserve quoted `>` characters in heading inline-HTML attributes when
278
+ adding the toggle target.
279
+ - Keep standalone `<code>` elements opaque to WUI heading-section generation,
280
+ so heading-like content inside them cannot create broken sections.
281
+ - Treat the first visible heading character as one complete grapheme cluster,
282
+ avoiding splits in combining-character and ZWJ emoji sequences.
283
+ - Discover selectable and event-enabled fenced blocks correctly inside
284
+ blockquotes and list items, and make `--check` report ATX, Setext, and fenced
285
+ declarations at their actual source lines.
286
+ - Keep wrapped TUI links active on every displayed row and retain the correct
287
+ complete label across repeated URLs, images, hidden sections, and rerenders.
288
+ - Preserve an emptied task list's insertion position and keep later heading
289
+ rows, `.line()`, and first-character toggles aligned when text controls
290
+ change height or the TUI rerenders.
291
+ - Resize prefixed text frames at their visible corners without pairing them
292
+ with an adjacent or differently nested frame.
293
+ - Coalesce overlapping TUI width rerenders and preserve terminal-input order,
294
+ including split `Alt` key sequences.
295
+ - Prevent the key used to dismiss an alert, prompt, or shell pause from being
296
+ replayed into the editor afterward.
297
+ - Apply one shared timeout budget to remote Kitty images in a TUI render,
298
+ abort stalled downloads, and retain the linked `📷` fallback.
299
+ - Preserve valid raw `%` expressions in WUI `javascript:` links and report
300
+ synchronous or asynchronous handler failures to the browser console.
301
+
302
+ ## [0.12.0] - 2026-07-27
303
+
304
+ This release makes Markdown images embedded by Bun's HTML bundler available to
305
+ the compiled terminal UI, adds environment-controlled Kitty rendering, and
306
+ consolidates the reusable single-executable asset helpers.
307
+
308
+ ### Added
309
+
310
+ - Add `JSMDCUI_KITTY_MODE=off|compat|extended` as an environment-controlled
311
+ alternative to the Kitty command-line flags. Explicit `--kitty` and
312
+ `--kitty-compat` arguments continue to take precedence.
313
+ - Preserve each generated WUI image source in `data-mdcui-src`. Bun can rewrite
314
+ the normal `src` to its content-hashed public asset path while the original
315
+ Markdown reference remains available for TUI lookup.
316
+ - Add reusable HTML bundle helpers to `single-exe/assetsHelper.js`. They match
317
+ compiled public image paths to `homepage.files`, canonicalize HTML entities
318
+ and percent-encoded image references, and build a Markdown-reference-to-bunfs
319
+ image map from `homepage.index`.
320
+ - Export the bundled `homepage` from generated Markdown server modules so a
321
+ compiled TUI can inspect the same HTML asset manifest without starting the
322
+ WUI server.
323
+
324
+ ### Changed
325
+
326
+ - Reuse images already embedded by Bun's HTML bundler instead of copying a
327
+ second image archive into the executable. The compiled TUI builds the image
328
+ path map once on first Kitty use, caches it, and reads image bytes lazily from
329
+ Bun's compiled virtual filesystem (`/$bunfs/root/...` on POSIX systems or
330
+ `B:/~BUN/...` on Windows).
331
+ - Load the bundled homepage only when running a compiled executable with
332
+ `global.MDCUI_MAIN` configured. Source-tree launches retain the existing
333
+ filesystem and authorized HTTP image fallbacks without importing a generated
334
+ server module.
335
+ - Consolidate runtime asset access on `single-exe/assetsHelper.js` and remove
336
+ the duplicate `src/runtime/assets.js` implementation.
337
+
338
+ ### Fixed
339
+
340
+ - Match compiled Markdown images independently of Bun's build-entry-relative
341
+ `homepage.files[].input` paths. This fixes images whose Markdown-relative
342
+ path and bundle-entry-relative path have different spellings.
343
+ - Normalize bare `process.env.JSMDCUI_KITTY_MODE=compat` build definitions into
344
+ JavaScript string literals before forwarding them to `bun build`.
345
+ - Use the global `process` binding for Kitty-mode build constants, allowing Bun
346
+ to replace `process.env.JSMDCUI_KITTY_MODE` at build time instead of missing
347
+ an imported and renamed `node:process` binding.
348
+
349
+ ## [0.11.2] - 2026-07-26
350
+
351
+ ### Added
352
+
353
+ - Add `--build-md-exe <file.md>` as a convenience alias for building a
354
+ current-platform executable with `global.MDCUI_MAIN` set to the specified
355
+ Markdown app.
356
+ - Add `--build-md-for <platform> <file.md>` for the equivalent
357
+ cross-compilation workflow. Both aliases expand into the existing build
358
+ arguments before generated application files are written.
359
+
360
+ ### Fixed
361
+
362
+ - Fix the final executable existence check for Windows builds by checking the
363
+ `.exe` output path for Windows targets, or for native Windows builds when no
364
+ target is specified.
365
+
366
+ ## [0.11.1] - 2026-07-26
367
+
368
+ ### Changed
369
+
370
+ - Accept a bare `global.MDCUI_MAIN` path in forwarded build arguments by
371
+ automatically encoding non-primitive define values as JavaScript strings.
372
+
373
+ ## [0.11.0] - 2026-07-26
374
+
375
+ This release adds custom Markdown-app embedding for Bun single-file
376
+ executables, with explicit per-buffer selection between embedded and
377
+ filesystem modules in both TUI and WUI.
378
+
379
+ ### Added
380
+
381
+ - Add the build-time `global.MDCUI_MAIN` string define for embedding a custom
382
+ Markdown app together with its generated front, RPC, back, HTML, and server
383
+ modules. Build preparation resolves and validates the source, copies it into
384
+ the bundled demos, derives `global.MDCUI_MAIN_BASE`, and selects the app on a
385
+ no-argument launch.
386
+ - Add a bundling mode to `extractJs()` and `createWui()`. It emits a
387
+ browser-only `.tmpfs.js` front module and a `.tmpfi.js` installer that exposes
388
+ the front exports on `window`, then makes the bundled HTML load that entry.
389
+ - Add embedded WUI server startup and report whether WUI is starting an
390
+ embedded or external server before launch.
391
+ - Add `micro.CurPane().Buf.MdcuiModuleSource`, returning `embedded` or
392
+ `external`, and show the value in the bundled `showpath` example.
393
+ - Allow Unicode letters and numbers, including Chinese, in custom demo names
394
+ while continuing to reject whitespace and path separators.
395
+ - Show `global.MDCUI_MAIN` and the generated `global.MDCUI_MAIN_BASE` in
396
+ `--version` distribution settings.
397
+
398
+ ### Changed
399
+
400
+ - Track embedded-module selection per buffer. The configured demo uses
401
+ embedded TUI front/RPC and WUI server modules when its local byte length
402
+ matches the bundled Markdown. Missing or overwritten copies are written
403
+ first and then use embedded modules; other files and changed-size demos use
404
+ filesystem companions.
405
+ - Document presence-based `MDCUI_*` defines with `=1`, supported build-flag
406
+ combinations, and commands for switching a TUI-default build to WUI or a
407
+ WUI-default build to TUI.
408
+
409
+ ### Fixed
410
+
411
+ - Bundle and load the configured app's front, RPC, back, server, and dependency
412
+ graph so custom apps with companion imports can run from a single
413
+ executable.
414
+ - Keep unrelated Markdown buffers on external modules instead of reusing the
415
+ embedded main app's front and RPC modules.
416
+ - Use the bundled file's byte length after `MDCUI_OVERWRITE_DEMO` replaces a
417
+ stale local demo, ensuring that the overwritten app selects embedded
418
+ modules.
419
+ - Install WUI front exports on `window` without relying on the generated front
420
+ module's process-dependent or self-import path.
421
+
422
+ ## [0.10.1] - 2026-07-25
423
+
424
+ ### Fixed
425
+
426
+ - Resolve and prepare `--demo` and `--demo-*` selections before entering WUI
427
+ mode, so combinations such as `--wui --demo-todo` serve the selected demo
428
+ instead of falling back to `testapp.md`.
429
+
430
+ ## [0.10.0] - 2026-07-24
431
+
432
+ This update adds distribution-oriented defaults for shipping jsmdcui as a text
433
+ editor, terminal application, or browser application; makes WUI startup and
434
+ demo replacement explicit; and improves command-line control over rendering,
435
+ syntax highlighting, and single-executable builds.
436
+
437
+ ### Added
438
+
439
+ - Add `--mdcui` and `--tui` as aliases for `-encoding mdcui`, allowing an
440
+ explicit terminal Markdown UI request to override an editor-oriented
441
+ distribution default.
442
+ - Add `--overwrite-demo` as a modifier for `--demo` and the automatically
443
+ discovered `--demo-*` commands. It replaces an existing local demo with the
444
+ bundled copy before opening it.
445
+ - Add `--print-ui` for WUI launches. The generated TUI preview, raw ANSI, and
446
+ HTML are printed only when this flag is present.
447
+ - Add the `src/MDCUI_DEFAULT_EDIT` distribution marker. When present, Markdown
448
+ files open as editable UTF-8 text by default while `--mdcui` remains
449
+ available explicitly.
450
+ - Add presence-based single-executable build constants:
451
+ `MDCUI_DEFAULT_EDIT`, `MDCUI_DEFAULT_DEMO`, and
452
+ `MDCUI_DEFAULT_DEMO_WUI` select an editor, no-argument TUI demo, or
453
+ no-argument WUI demo default. `MDCUI_OVERWRITE_DEMO` optionally makes a
454
+ bundled demo replace its local copy.
455
+ - Add distribution documentation for shipping a customized root
456
+ `testapp.md` as a standalone terminal or browser application.
457
+ - Add regression coverage for the `--mdcui` alias, forced CLI filetypes,
458
+ non-overwriting and overwriting demos, and WUI demo replacement.
459
+
460
+ ### Changed
461
+
462
+ - Parse `--wui` through the normal command-line argument flow, so it can appear
463
+ before or after the Markdown filename.
464
+ - Make WUI startup quieter by default. It continues to report file generation
465
+ and the server URL, while full generated UI output is opt-in through
466
+ `--print-ui`.
467
+ - Make direct `runmd.mjs` launches recognize `--overwrite-demo` and
468
+ `--print-ui`. Demo replacement is limited to the implicit `testapp.md`;
469
+ explicitly named Markdown files are protected from replacement.
470
+ - Forward every extra argument after `--build-exe`, or after the target passed
471
+ to `--build-for`, to the underlying `bun build` command.
472
+ - Align the `start`, `tui`, and `wui` package scripts with the repository
473
+ launchers, and add a `clean` package script.
474
+ - Recommend choosing only one of the three `MDCUI_DEFAULT_*` distribution
475
+ modes per build, with `MDCUI_OVERWRITE_DEMO` treated as an optional modifier.
476
+ - Show effective `MDCUI_*` distribution settings in `--version` output,
477
+ including `MDCUI_DEFAULT_EDIT` enabled through either its build constant or
478
+ the `src/MDCUI_DEFAULT_EDIT` marker.
479
+
480
+ ### Fixed
481
+
482
+ - Make `-filetype <name>` actually override automatic syntax detection in
483
+ editor buffers and `--cat`, including input read from stdin.
484
+
485
+ ## [0.9.0] - 2026-07-21
486
+
487
+ This update expands Chrome DevTools Protocol automation for the terminal UI,
488
+ adds a complete maze-solving example, and makes the optional Bun single-file
489
+ executable bootstrap easier to reuse and more reliable across platforms.
490
+
491
+ ### Added
492
+
493
+ - Add CDP automation support for reading the rendered ANSI document, activating
494
+ a 1-based terminal-buffer cell, and sending keyboard input through the TUI's
495
+ normal input parser and event pipeline. Key presses support Alt, Ctrl, Meta,
496
+ Shift, navigation keys, editing keys, text, and auto-repeat without emitting
497
+ duplicate input for paired CDP `keyDown` and `char` events.
498
+ - Add `micro.getAllAnsiText()` and `micro.clickBufferCell(x, y)` to the JS
499
+ plugin bridge. MDCUI cell clicks now activate the same callbacks as mouse
500
+ input, while clicks in ordinary buffers retain the previous `goto` behavior.
501
+ - Add `cdp-maze.js` and `llm-maze.txt`, a documented Bun.WebView example that
502
+ reads the maze from the running TUI, solves it with breadth-first search, and
503
+ completes it by clicking controls and sending arrow-key events through CDP.
504
+ - Add `--cdp-maze` to open the bundled maze, start a local CDP server on port
505
+ 9222, and automatically import and run the maze solver after a three-second
506
+ delay. The completed result is returned to the main program and displayed in
507
+ the TUI status message.
508
+ - Add `--export-cdp-maze` to write or overwrite `./cdp-maze.js` from the
509
+ bundled asset first, with a source-tree fallback, then exit. Include the
510
+ solver in the single-executable asset archive.
511
+ - Add a dedicated CDP automation section to the README and bundled help,
512
+ covering command-line and command-prompt startup, bind-address safety,
513
+ connection methods, and the maze solver workflow.
514
+ - Add a reusable single-file executable guide covering asset packing, embedded
515
+ and external resource fallbacks, build commands, cross-compilation, Node.js
516
+ compatibility, and adapting the bootstrap to another project.
517
+
518
+ ### Changed
519
+
520
+ - Move responsibility for awaiting bundled assets into the Bun-only
521
+ `single-exe/entry.mjs` bootstrap, then dynamically import the regular main
522
+ module. This keeps the main module free of Bun-specific asset-loader state
523
+ and preserves its uncompiled Node.js execution path.
524
+ - Detect Bun's compiled virtual paths on both POSIX (`/$bunfs/`) and Windows
525
+ (`B:/~BUN`) when resolving single-executable resources, and consolidate
526
+ compiled-runtime handling in `single-exe/compiled.js`.
527
+ - When initially launched with Node.js, restart under Bun with inherited stdio
528
+ and propagate its exit status instead of replacing the current process with
529
+ `process.execve()`.
530
+ - Display the maze completion message inside the game instead of opening a
531
+ blocking alert, and include reset instructions in the result.
532
+ - Export the maze solver as a reusable `runCdpMaze()` function while retaining
533
+ direct `bun cdp-maze.js` execution. Suppress its console result while stdin
534
+ is in terminal raw mode so TUI rendering is not corrupted.
535
+ - Replace the manual two-process maze automation instructions with the single
536
+ `--cdp-maze` workflow in the README and bundled help.
537
+ - Update the homepage and Kitty test images to use the smaller current demo and
538
+ maze screenshots; exclude the maze screenshot from the npm package.
539
+ - Document theme preview from the TUI command prompt and state Bun 1.3.12 as
540
+ the minimum required version.
541
+
542
+ ### Fixed
543
+
544
+ - Make CDP `view.click()` activate MDCUI links and controls at the requested
545
+ buffer coordinate instead of only moving the cursor there.
546
+ - Allow CDP input dispatch without an explicit session ID by selecting the
547
+ implicit target, matching other single-target CDP operations.
548
+ - Wait until the embedded asset archive is ready before starting the compiled
549
+ application, preventing startup from racing bundled resource loading.
550
+
551
+ ## [0.8.0] - 2026-07-20
552
+
553
+ This update adds portable inline keydown handling to Markdown text controls,
554
+ including mobile software-keyboard fallback behavior, and makes interactive
555
+ prompts safe across every TUI frontend action path.
556
+
557
+ ### Added
558
+
559
+ - Add quoted `@keydown="..."` attributes to named `text` and `textarea`
560
+ fences. The TUI preserves source event metadata and evaluates it before key
561
+ handling; the WUI emits a native inline event attribute. Add `.prevent` to
562
+ apply `event.preventDefault()` before the handler runs. Keyup is intentionally
563
+ not exposed because traditional terminals do not report key releases
564
+ reliably.
565
+ - In the WUI, automatically map `beforeinput.data` back through `onkeydown`
566
+ when a mobile software keyboard reports `event.key` as `Unidentified`.
567
+ Unidentified events are hidden from application handlers, while identified
568
+ desktop keydowns are marked briefly to prevent duplicate calls.
569
+ - Add native multiline editing to TUI `textarea` controls. Enter splits a body
570
+ row and expands the frame; Backspace at the start of a later row and Delete
571
+ at the end of a row join adjacent body rows without exposing frame borders.
572
+ - Add the `bun ./edit` launcher as a short equivalent of
573
+ `bun src/index.js --edit`, opening Markdown as ordinary editable UTF-8 source.
574
+ - Add the automatically discovered `--demo-maze` example, demonstrating
575
+ portable `@keydown.prevent` controls with keyboard and arrow-key navigation;
576
+ add `Ctrl-R` as a keyboard shortcut for resetting the maze.
577
+
578
+ ### Changed
579
+
580
+ - Install protected `alert`, `confirm`, and `prompt` globals once for the TUI
581
+ lifetime and share them across OSC 8 actions, fenced keyboard handlers, and
582
+ JS plugins. Restore Bun's original globals when the TUI stops.
583
+ - Make `micro.alert()`, `micro.confirm()`, and `micro.prompt()` synchronous like
584
+ their native counterparts, and update the bundled JS plugin examples so they
585
+ do not `await` these calls.
586
+ - Add TUI `.val(value)` replacements to Undo/Redo history, including multiline
587
+ layout, ANSI rendering metadata, image positions, and task-list anchors.
588
+
589
+ ### Fixed
590
+
591
+ - Prevent `alert()` called from a keydown handler from competing with the TUI
592
+ for stdin by suspending raw mode and screen rendering around native prompts.
593
+ - Restore the terminal's previous raw-mode and input-listener state after a
594
+ protected prompt, including setup, prompt, and cleanup error paths.
595
+ - Index fenced keyboard-event regions once and use binary lookup for each key,
596
+ instead of rescanning the rendered Markdown document on every keypress.
597
+ - Open Windows controlling-terminal input through read-only `CONIN$` when stdin
598
+ is redirected, so piped Markdown retains keyboard and protected-prompt input.
599
+ - Preserve `ctrlKey`, `shiftKey`, `altKey`, and `metaKey` when the WUI maps an
600
+ unidentified mobile keydown through its `beforeinput` fallback.
601
+ - Recover modified A-Z keys in the WUI from key codes 65-90 or physical
602
+ `KeyA`-`KeyZ` codes, including Android browsers that transform Alt-S into
603
+ `ß`; exclude AltGraph so international text composition remains intact.
604
+ - Add matching non-enumerable `event.toJSON()` methods to TUI and WUI keydown
605
+ events, allowing `JSON.stringify(event)` to produce portable event details.
606
+ - Keep fenced-block IDs visible to collision checking when the info string also
607
+ contains inline event attributes such as `@keydown="..."`.
608
+ - When the WUI's default port 3000 is already in use, retry with port 0 so the
609
+ operating system selects an available port, and print that actual port in the
610
+ generated URL. Other server startup errors continue to fail normally.
611
+
612
+ ## [0.7.0] - 2026-07-20
613
+
614
+ This update adds native Kitty image rendering, turns heading task lists into
615
+ Array-style collections in both interfaces, and keeps TUI layout, interaction,
616
+ and checkbox styling consistent at every terminal width.
617
+
618
+ ### Added
619
+
620
+ - Display local Markdown images at their rendered TUI positions with the
621
+ Kitty graphics protocol. Image rows are reserved according to intrinsic
622
+ dimensions, and placements follow scrolling, resizing, and split panes.
623
+ - With `--allow-url` and Kitty mode enabled, download HTTP(S) Markdown images
624
+ through the existing `curl`, `wget`, then Bun `fetch` fallback chain. Relative
625
+ image URLs in downloaded Markdown resolve against the original document URL.
626
+ - Keep Bun's normal linked `📷` fallback for missing, unsupported, and
627
+ unauthorized remote images, and scope Kitty cleanup to image IDs owned by
628
+ jsmdcui.
629
+ - Set Kitty's `C=1` placement flag so displaying an image cannot advance the
630
+ terminal cursor and trigger an unwanted scroll at the bottom of the screen.
631
+ - Add `.push()`, `.pop()`, `.shift()`, `.unshift()`, and `.splice()` to heading
632
+ selectors in both the TUI and WUI. The methods follow their
633
+ `Array.prototype` argument and return-value conventions, operate on direct
634
+ items in the first task list belonging to the heading, and remove nested
635
+ content together with its parent item.
636
+ - Allow inserted task items to be passed as strings for unchecked items or as
637
+ `{ value, checked }` objects, and preserve an emptied TUI list's insertion
638
+ point so later mutations still target the same list.
639
+ - Add read-only heading `.slice(start, end)`, returning fresh
640
+ `{ value, checked }` snapshots that include both checked and unchecked direct
641
+ task items.
642
+ - Add `demos/todo.md` and `demos/todo-zh.md`, runnable Todo examples that use
643
+ text controls and the new list methods to add and remove items and display
644
+ completed or pending tasks.
645
+ - Move secondary examples under `demos/` and add automatic
646
+ `--demo-<filename>` discovery, so newly bundled `demos/<filename>.md` files
647
+ need no parser changes. Keep `--demo` mapped to the root `testapp.md` and
648
+ retain the existing image-processor aliases.
649
+ - Add `--demo-list` to list the root demo and every automatically discovered
650
+ Markdown example from bundled assets or the source tree's `demos/` directory.
651
+ - Add `clean.sh` as a convenience helper for removing generated Markdown
652
+ companion files from the project directory.
653
+
654
+ ### Changed
655
+
656
+ - Document the Array-style heading task-list API, its return values, nested-item
657
+ behavior, existing-list requirement, and non-persistent rendered-state
658
+ semantics in the README and bundled help.
659
+ - Use the complete pane content width consistently for Markdown rendering,
660
+ soft wrapping, cursor and mouse mapping, and Kitty image sizing instead of
661
+ reserving the terminal's final column.
662
+
663
+ ### Fixed
664
+
665
+ - Fix soft wrapping at affected terminal widths shifting the visual cursor by
666
+ one row, which could activate the preceding Markdown action and leave the
667
+ final action unresponsive.
668
+ - Update the Bun Markdown ANSI glyph and style together when toggling a task
669
+ checkbox, so checked items become green and unchecked items no longer retain
670
+ the checked color.
671
+
672
+ ## [0.6.3] - 2026-07-18
673
+
674
+ This update enforces unique heading IDs at the Markdown source level and
675
+ clarifies the portable fenced-block identity contract shared by the TUI and
676
+ WUI.
677
+
678
+ ### Changed
679
+
680
+ - Treat duplicate Markdown headings that generate the same base ID as a
681
+ source-level collision. Later headings no longer pass `--check` merely
682
+ because Bun would silently assign generated suffixes such as `-1` or `-2`
683
+ that the Markdown author cannot see.
684
+ - Document that a selectable fenced-block declaration requires a tag and uses
685
+ the `tag#id.class` identity form. The officially supported portable control
686
+ tags are currently limited to `text` and `textarea` so the same Markdown
687
+ behaves consistently in both the TUI and WUI.
688
+ - Clarify that selector queries may omit the tag or classes after a valid
689
+ declaration.
690
+ - Expand checker and TUI selector regression coverage across tag/no-tag and
691
+ class/no-class combinations, heading-to-heading, heading-to-block, and
692
+ block-to-block ID collisions.
693
+
694
+ ### Fixed
695
+
696
+ - Fix duplicate source headings incorrectly passing the checker after Bun
697
+ automatically changed the generated ID of later headings.
698
+
699
+ ## [0.6.2] - 2026-07-18
700
+
701
+ This update makes Markdown ID-collision checks match the full TUI `$()` block
702
+ selector and gives check results clearer final status banners.
703
+
704
+ ### Changed
705
+
706
+ - Extend `--check FILE.md` from `text` and `textarea` controls to every
707
+ explicitly named fenced block accepted by the TUI `$()` selector, including
708
+ identities such as `hello#myid` and `json#config`.
709
+ - Report separate heading and fenced-block declaration counts, and describe
710
+ arbitrary block tags and their source lines in collision details.
711
+ - Replace the previous success label with a large green `PASSED` banner and
712
+ add a matching large red `FAILED` banner at the bottom of failed reports.
713
+ Both true-color foregrounds are generated with
714
+ `Bun.color(..., "ansi-16m")`, with standard ANSI fallbacks.
715
+ - Update the README and bundled help to clarify that generated heading IDs
716
+ share the selector namespace with all explicitly named fenced blocks, not
717
+ only editable text controls.
718
+
719
+ ### Fixed
720
+
721
+ - Fix `--check` overlooking collisions between a heading and a non-text
722
+ fenced block even though TUI `$().val()` could select both declarations.
723
+ - Add regression coverage for arbitrary fenced-block IDs and the colored
724
+ `PASSED` and `FAILED` terminal statuses.
725
+
726
+ ## [0.6.1] - 2026-07-18
727
+
728
+ This update adds Markdown UI ID-collision diagnostics and bundles a practical
729
+ Bun.Image processor demo in English and Traditional Chinese.
730
+
731
+ ### Added
732
+
733
+ - Add `--check FILE.md` to inspect Markdown heading and text-control IDs
734
+ without opening a UI or writing generated companion files. The report uses
735
+ `Bun.markdown.ansi()` headings and nested lists, identifies every collision
736
+ by ID, source type, line number, and original declaration, and exits with
737
+ status `0` for unique IDs, `1` for collisions, or `2` for usage and read
738
+ errors.
739
+ - Add `image-processor.md` and `image-processor.zh-TW.md`, runnable Bun.Image
740
+ tools for the TUI and WUI. They support image metadata inspection, resizing,
741
+ fit and resampling filters, enlargement prevention, EXIF auto-orientation,
742
+ rotation, vertical and horizontal mirroring, brightness and saturation
743
+ adjustment, and JPEG or PNG output options.
744
+ - Add detailed image-processing status fields. Successful writes show the
745
+ output path, dimensions, byte count, and all selected option values; failed
746
+ metadata reads and writes show the available error details and stack.
747
+ - Add `--demo-imgtool` and `--demo-imgtool-zh`. Each command preserves an
748
+ existing local processor Markdown file or writes its bundled language
749
+ version when missing, then opens it in the TUI.
750
+ - Bundle both image processor Markdown files in the single-executable asset
751
+ archive and add regression coverage for ID checks and both demo languages.
752
+
753
+ ### Changed
754
+
755
+ - Consolidate bundled demo Markdown loading behind one
756
+ `bundledMarkdownSource(filename)` implementation shared by `testapp.md`,
757
+ `select.md`, and both image processor variants.
758
+ - Document that heading selector values include the complete visible label.
759
+ Selection parsers should use deliberate substring, prefix, or token checks
760
+ when labels contain explanatory text instead of assuming exact identifiers.
761
+ - Document that generated heading IDs and explicitly named controls share the
762
+ same selector namespace and that every selectable ID should be unique.
763
+
764
+ ### Fixed
765
+
766
+ - Prevent explanatory text in image processor task-list labels from breaking
767
+ yes/no, fit, filter, and output-format selection parsing.
768
+ - Fix the English image processor status update silently targeting a heading
769
+ after `## Write Status` generated the same `#write-status` ID as its text
770
+ control.
771
+ - Catch image metadata and processing failures at both frontend and backend
772
+ boundaries so errors are displayed in the appropriate status field.
773
+
774
+ ## [0.6.0] - 2026-07-18
775
+
776
+ This update turns Markdown headings and task lists into cross-environment form
777
+ controls, improves the safety and consistency of the bundled demo workflow,
778
+ and adds a way to export the bundled README as a runnable Markdown app.
779
+
780
+ ### Added
781
+
782
+ - Add `--export-readme` to write or overwrite `./README.md` with the bundled
783
+ README source and exit.
784
+ - Add terminal task-checkbox activation. Activating a protected mdcui row at
785
+ or after its `☐` or `☒` toggles that checkbox and still allows the remaining
786
+ default cell callback to run. JavaScript links continue to take priority.
787
+ - Add hierarchical `<section>` wrappers to generated WUI HTML. Every h1-h6
788
+ opens a section; an equal or higher-level heading closes the applicable open
789
+ sections, while lower-level headings create nested sections. Content before
790
+ the first heading remains outside the generated sections.
791
+ - Add heading lookup to the TUI `$` API using the IDs generated by
792
+ `Bun.markdown.html(..., { headings: { ids: true } })`.
793
+ - Add `$('#heading-id').html()` in TUI to return a heading's inner HTML, and
794
+ `$('#heading-id').line()` to return its current 1-based terminal row or `0`
795
+ when it cannot be found. Line lookup follows text-block row additions,
796
+ removals, and multiline `.val(value)` replacements.
797
+ - Add `.html()` getters to WUI `$` selections. Any successfully selected DOM
798
+ element returns its `innerHTML`; missing or invalid selections return an
799
+ empty string.
800
+ - Add heading-based task-list values in both interfaces. `.val()` reads the
801
+ first task-list group directly following the selected heading, stops at the
802
+ next heading, and ignores nested task items. IDs beginning with `select`
803
+ return the first checked value or `null`; other IDs return all checked values
804
+ as an array or `[]`.
805
+ - Add `select.md`, a runnable multilevel heading and task-list example with
806
+ links that display single-select and multiple-select values through
807
+ `alert()`.
808
+ - Bundle `select.md` in packaged assets and add `--demo-select`. The command
809
+ preserves an existing `./select.md`, writes the bundled copy when missing,
810
+ opens it in the TUI, and generates its five companion files.
811
+
812
+ ### Changed
813
+
814
+ - Make `--demo` preserve an existing `./testapp.md`. The bundled source is now
815
+ written only when the file is missing, then opened in the terminal UI.
816
+ - Make `--wui` without a file follow the same source-file rule: use an existing
817
+ `./testapp.md`, or write the bundled demo there when missing, before creating
818
+ the generated companion files.
819
+ - Wrap generated WUI task-checkbox text in `<label>` so clicking the associated
820
+ text toggles the checkbox. Direct text and immediately following paragraph
821
+ elements are included; unrelated tags and nested lists remain outside.
822
+ - Extend the 0.5 `$().val()` contract: text and textarea controls retain their
823
+ string getter/setter behavior, while heading selections now return scalar,
824
+ array, or `null` task-list values according to the heading ID.
825
+ - Add a demo screenshot and expand the README and built-in help with clearer
826
+ TUI/WUI startup, demo preservation, and README export instructions.
827
+
828
+ ### Fixed
829
+
830
+ - Ensure WUI fallback to the bundled `testapp.md` materializes the Markdown
831
+ source in the current working directory instead of generating only its
832
+ companion files.
833
+ - Protect comments and `script`, `style`, `pre`, `code`, `textarea`, and
834
+ `template` regions while wrapping WUI headings, preventing heading-like HTML
835
+ strings inside those regions from changing the section hierarchy.
836
+ - Keep TUI heading lookup independent of ANSI heading text and duplicate
837
+ labels by mapping Bun-generated heading order and level to Bun's current
838
+ h1-h6 ANSI signatures.
839
+
840
+ ## [0.5.0] - 2026-07-16
841
+
842
+ This update adds cross-environment form-like text blocks and a small
843
+ jQuery-style selector API, while keeping the same Markdown source usable in
844
+ both the terminal and browser interfaces.
845
+
846
+ ### Added
847
+
848
+ - Add a minimal global `$` API to terminal frontend evaluation, JavaScript
849
+ plugins, generated browser frontend modules, and `javascript:` links.
850
+ - Support tag, ID, class, and combined selectors such as `$('text')`,
851
+ `$('#answer')`, `$('.field')`, and `$('text#answer.field')`.
852
+ - Add `.val()` and `.val(value)` for reading and replacing block contents.
853
+ Getters always return a string and use an empty string for missing elements,
854
+ invalid selectors, or lookup errors. Setters support chaining and resize
855
+ terminal blocks to fit multiline values.
856
+ - Recognize both raw Markdown fenced blocks and rendered Bun ANSI blocks,
857
+ including ASCII and Unicode frame characters.
858
+ - Add editable terminal `text` blocks. Content after the protected `│ ` or
859
+ `| ` prefix can be edited, while frame characters, line joins, inserted
860
+ newlines, and multiline pastes remain protected.
861
+ - Add interactive terminal text-block resizing. Activating the lower-left
862
+ frame corner adds an empty content row; activating the upper-left corner
863
+ removes only a trailing empty row and never deletes non-empty content.
864
+ - Add the optional frontend lifecycle callback
865
+ `onMdcuiExit({ reason, path, $ })`. The terminal awaits it before closing an
866
+ mdcui buffer and invokes it at most once per buffer.
867
+ - Add Markdown syntax completions for fenced block language identifiers.
868
+
869
+ ### Changed
870
+
871
+ - Convert `text` and `textarea` fenced blocks into native browser
872
+ `<textarea>` elements while preserving their ID, classes, original language
873
+ metadata, and selector compatibility.
874
+ - Prefer native `document.querySelector()` in the browser `$` implementation,
875
+ then fall back to mdcui metadata and the original `pre > code` structure.
876
+ - Automatically wrap and resize generated browser textareas on page load,
877
+ input, `.val(value)`, and window resize. Initial `rows` and `cols` are
878
+ derived from the Markdown content.
879
+ - Generate complete HTML5 documents for WUI output, including `<!doctype
880
+ html>`, UTF-8 metadata, a responsive viewport, a document title, and
881
+ `lang="zh-TW"`.
882
+ - Enable `softwrap` by default.
883
+ - Close modified mdcui buffers without displaying a save prompt. Applications
884
+ can use `onMdcuiExit` to collect edited field values or call backend RPC
885
+ functions before closing.
886
+ - Update the bundled example with editable text fields, selector API examples,
887
+ answer validation, and manual text-box resizing instructions.
888
+
889
+ ### Fixed
890
+
891
+ - Keep terminal text-block frame prefixes intact during editing and prevent
892
+ Delete at the end of a content row from merging it with the next row.
893
+ - Preserve browser textarea IDs and classes during Markdown-to-HTML
894
+ conversion, including compatibility metadata for original `text` selectors.
895
+ - Keep README and built-in help lifecycle documentation synchronized.
896
+
897
+ ## [0.4.0] - 2026-07-16
898
+
899
+ This release separates executable Markdown UI views from ordinary editable
900
+ buffers, makes encoding behavior predictable across opens, tabs, splits, and
901
+ reopens, and adds explicit demo and trusted-remote execution modes.
902
+
903
+ ### Added
904
+
905
+ - Add `--demo`. It outputs and overwrites `./testapp.md`, opens it as a terminal
906
+ Markdown UI, and writes the five generated companion files beside it.
907
+ - Add `--allow-url` for trusted remote Markdown apps. It downloads an HTTP(S)
908
+ resource into the current directory, opens the downloaded copy through the
909
+ normal local Markdown UI pipeline, writes the five generated companion files,
910
+ and permits its embedded frontend and backend code to run.
911
+ - Add regression coverage for global encoding handling, mdcui backup isolation,
912
+ the bundled demo workflow, implicit Markdown rendering, and explicit UTF-8
913
+ editing.
914
+
915
+ ### Changed
916
+
917
+ - Treat `mdcui` buffers as independent, derived, read-only views. Every mdcui
918
+ open creates a new buffer instead of entering the same-path editable-buffer
919
+ cache.
920
+ - Continue sharing ordinary buffers opened from the same absolute path.
921
+ UTF-8 and other non-mdcui views share content, modification state, saves, and
922
+ reopens.
923
+ - Re-evaluate buffer sharing after `reopen`:
924
+ - reopening an mdcui view as a normal encoding joins an existing same-path
925
+ editable buffer, or registers itself when no such buffer exists;
926
+ - reopening a shared editable view as mdcui detaches only the current pane
927
+ into a new mdcui buffer and leaves the other shared panes unchanged.
928
+ - Make interactive `open`, `tab`, `vsplit`, and `hsplit` operations perform
929
+ fresh `.md` automatic detection for files that are not already represented
930
+ by a normal cached buffer.
931
+ - Ignore a top-level global `encoding` value read from `settings.json`.
932
+ Encoding is selected per invocation or buffer; command-line encoding options
933
+ remain effective for the current run and are not persisted.
934
+ - Organize `--testapp.md` and `--demo` under a dedicated `Demo` section in
935
+ `--help`, and document commands that overwrite source or generated files.
936
+
937
+ ### Fixed
938
+
939
+ - Fix `.md` files opened from inside the editor failing to enter mdcui mode.
940
+ - Fix encoding changes leaking between independent mdcui tabs.
941
+ - Fix `reopen mdcui` mutating every pane that shared the original editable
942
+ buffer.
943
+ - Fix mdcui-to-UTF-8 reopens remaining outside the normal same-path buffer
944
+ cache.
945
+ - Delay applying an explicit reopen encoding until the reopen is confirmed, so
946
+ canceling the save prompt does not alter the shared buffer.
947
+
948
+ ### Security
949
+
950
+ - Exclude mdcui buffers completely from crash-recovery backups: they do not
951
+ create, apply, prompt for, or remove backups. This prevents a derived
952
+ read-only view from consuming or deleting a backup belonging to an editable
953
+ view of the same Markdown source.
954
+ - Remote HTTP(S) Markdown remains non-executable and does not write companion
955
+ files by default.
956
+ - `--allow-url` is an explicit trust boundary. It writes downloaded content and
957
+ generated JavaScript/HTML files into the current directory, may overwrite
958
+ files with the same names, and runs code from the remote document with the
959
+ permissions of the jsmdcui process. Use it only with trusted URLs and in a
960
+ directory where those writes are safe.
961
+
962
+ ## [0.3.1] - 2026-07-16
963
+
964
+ ### Added
965
+
966
+ - Add `--edit` to open Markdown files as editable UTF-8 source instead of
967
+ automatically entering mdcui mode.
968
+ - Add `--cat` regression coverage for implicit mdcui rendering and explicit
969
+ UTF-8 overrides.
970
+
971
+ ### Fixed
972
+
973
+ - Prevent an explicit encoding choice from being replaced by automatic mdcui
974
+ detection.
975
+ - Correct terminal raw-mode handling around log and prompt output.
976
+
977
+ ## [0.3.0] - 2026-07-16
978
+
979
+ Initial usable release, based on the bunmicro terminal editor.
980
+
981
+ ### Added
982
+
983
+ - Open local Markdown files as interactive, read-only terminal interfaces while
984
+ retaining navigation, selection, search, copy, mouse support, and automatic
985
+ reflow when the terminal is resized.
986
+ - Open HTTP(S) Markdown files in the terminal without generating local
987
+ companion files or executing their `javascript:` links.
988
+ - Start a browser interface with `--wui [FILE.md]`. Browser pages support normal
989
+ links, clickable `javascript:` actions, heading anchors, and task checkboxes
990
+ that can be toggled for the current page session.
991
+ - Build interactive Markdown apps with `js front`, `js back`, and
992
+ `javascript:` links. Frontend actions can use `alert`, `confirm`, `prompt`,
993
+ and call published backend functions through `rpc`.
994
+ - Activate local terminal actions with `Enter`, `Space`, or a left click, with
995
+ visible reporting for synchronous and asynchronous frontend errors.
996
+ - Generate five companion files beside each local Markdown source:
997
+ `.front.js`, `.back.js`, `.html`, `-rpc.js`, and `-server.js`.
998
+ - Print terminal output with `--cat`, print the bundled example source with
999
+ `--testapp.md`, and choose a WUI port with the `PORT` environment variable.
1000
+ - Provide the `jsmdcui`, `tui`, and `wui` launchers, Bun scripts for common
1001
+ development tasks, bundled runtime assets, and experimental single-executable
1002
+ build commands.
1003
+ - Retain the normal bunmicro-based editor for non-Markdown buffers, including
1004
+ file editing, syntax highlighting, search and replace, undo and redo, tabs,
1005
+ split panes, clipboard support, themes, and shell commands.
1006
+ - Show this README as the built-in `Ctrl-G` help page.
1007
+
1008
+ ### Changed
1009
+
1010
+ - Local `.md` files now enter read-only Markdown UI mode automatically. Starting
1011
+ jsmdcui without a file still opens the normal terminal editor.
1012
+ - Opening or rendering a local Markdown file regenerates its five companion
1013
+ files in terminal, `--cat`, and `--wui` modes.
1014
+ - Running `--wui` without a file uses `testapp.md` in the current directory when
1015
+ present, otherwise the bundled demo, and writes generated files in the current
1016
+ directory.
1017
+ - Every WUI start prints a fresh UUID-based page URL. Requests without the
1018
+ trailing slash redirect to the canonical page URL.
1019
+ - `js front` and `js back` blocks are removed from the displayed Markdown and
1020
+ written to their generated modules.
1021
+
1022
+ ### Fixed
1023
+
1024
+ - Preserved Markdown ANSI colors in the terminal UI and prevented the rendered
1025
+ document background from obscuring the editor theme.
1026
+ - Correctly detected links at the active terminal cell and loaded the matching
1027
+ generated frontend module.
1028
+ - Restored terminal display state after `alert`, `confirm`, and `prompt`.
1029
+ - Reported frontend errors instead of letting them crash or silently fail.
1030
+ - Corrected generated module paths and imports, supported bundled runtime
1031
+ templates, and removed redundant file generation.
1032
+ - Made JavaScript plugin commands available through command lookup and
1033
+ completion, and added `js`, `py`, and `sh` choices for `eval` completion.
1034
+
1035
+ ### Security
1036
+
1037
+ - Browser RPC discovery and calls expose only exported backend functions whose
1038
+ exported names do not begin with `_`. This restriction applies to WUI RPC;
1039
+ the local TUI imports the backend module directly.
1040
+ - WUI pages use a fresh UUID path on each start. This reduces accidental
1041
+ discovery but is not authentication or authorization.
1042
+ - The WUI has no login or HTTPS, may be reachable through the machine's network
1043
+ interfaces, and permits cross-origin RPC responses. Anyone who can reach it
1044
+ and obtains the complete URL can call every backend function published by the
1045
+ Markdown app.
1046
+ - Frontend code runs in the browser, while terminal frontend code and backend
1047
+ code can run with the permissions of the jsmdcui process. Only open or serve
1048
+ Markdown apps from trusted sources.