@cmmd-center/forge 0.9.3 → 0.9.5

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 (461) hide show
  1. package/dist/{BunHttpServer-Dc5XijQF.mjs → BunHttpServer-BgNCpQzV.mjs} +2 -2
  2. package/dist/{BunHttpServer-Cuya1Zon.cjs → BunHttpServer-DOAuw4Iq.cjs} +2 -2
  3. package/dist/{BunPTY-z9OKvyBo.cjs → BunPTY-2icf7sRj.cjs} +2 -2
  4. package/dist/{BunPTY-CfS5zDoQ.mjs → BunPTY-D-Klry5N.mjs} +2 -2
  5. package/dist/{BunServices-eq_c-3x1.mjs → BunServices-ChM4mYH9.mjs} +1 -1
  6. package/dist/{BunServices-khEuvPaA.cjs → BunServices-CiNXNzHD.cjs} +1 -1
  7. package/dist/Mime-BITO-E1U.mjs +1395 -0
  8. package/dist/Mime-CyHbecis.cjs +1400 -0
  9. package/dist/{Mime-B75_d9aw.mjs → NodeHttpServer-C_wePPV0.mjs} +614 -1456
  10. package/dist/{Mime-aSilaQX9.cjs → NodeHttpServer-D_ismXpd.cjs} +617 -1466
  11. package/dist/{NodePTY-ChjVFpUH.mjs → NodePTY-BMUFdM93.mjs} +2 -2
  12. package/dist/{NodePTY-BOaJi0JA.cjs → NodePTY-cb7HIasY.cjs} +2 -2
  13. package/dist/{NodeSqliteClient-GlgGqc8V.mjs → NodeSqliteClient-OdI1TawL.mjs} +1 -1
  14. package/dist/{NodeSqliteClient-Vunn3aFN.cjs → NodeSqliteClient-SsUCk9mA.cjs} +1 -1
  15. package/dist/{PTY-rn2kGjhB.mjs → PTY-CBkE5akF.mjs} +1 -1
  16. package/dist/{PTY-D5OpMK9s.cjs → PTY-U3JQnLXS.cjs} +1 -1
  17. package/dist/{SqliteClient-Bpkno4Ob.cjs → SqliteClient-CdAhI4lb.cjs} +1 -1
  18. package/dist/{SqliteClient-DYQAvreq.mjs → SqliteClient-aoOb51gB.mjs} +1 -1
  19. package/dist/bin.cjs +14484 -10871
  20. package/dist/bin.mjs +14667 -11052
  21. package/dist/client/apple-touch-icon.png +0 -0
  22. package/dist/client/apple-touch-icon.png.publish-bak +0 -0
  23. package/dist/client/assets/CanvasPanel-BIN3OTEQ.js +441 -0
  24. package/dist/client/assets/CompositeItem-UKxcvvWv.js +2 -0
  25. package/dist/client/assets/DiffPanel-CeuRaSj1.js +64 -0
  26. package/dist/client/assets/DiffPanel.logic-D5i9QswQ.js +21 -0
  27. package/dist/client/assets/DiffPanelShell-W5nEVL52.js +2531 -0
  28. package/dist/client/assets/DiffWorkerPoolProvider-D87CO5TY.js +73 -0
  29. package/dist/client/assets/PullRequestCodePanel-DAmHwtY9.js +5 -0
  30. package/dist/client/assets/Stream-CToP6xzI.js +15 -0
  31. package/dist/client/assets/Virtualizer-CnwVHiy3.js +2 -0
  32. package/dist/client/assets/__vite-browser-external-DkEyUtaV.js +2 -0
  33. package/dist/client/assets/abap-kWSt4ETq.js +2 -0
  34. package/dist/client/assets/actionscript-3-DUMfZd56.js +2 -0
  35. package/dist/client/assets/ada-B5ZVVI6u.js +2 -0
  36. package/dist/client/assets/andromeeda-DXFdNco6.js +2 -0
  37. package/dist/client/assets/andromeeda-DwmQuk--.js +2 -0
  38. package/dist/client/assets/angular-html-BHUTdQ2k.js +2 -0
  39. package/dist/client/assets/angular-ts-BSGCbJ0j.js +2 -0
  40. package/dist/client/assets/apache-Cu40O3Ol.js +2 -0
  41. package/dist/client/assets/apex-DMPEjfSG.js +2 -0
  42. package/dist/client/assets/apl-BoCi4WkG.js +2 -0
  43. package/dist/client/assets/applescript-mUd3mpyF.js +2 -0
  44. package/dist/client/assets/ara-LhQXZmm_.js +2 -0
  45. package/dist/client/assets/asciidoc-BhTPoeH5.js +2 -0
  46. package/dist/client/assets/asm-BGGwX2ZL.js +2 -0
  47. package/dist/client/assets/astro-BMi5lGMm.js +2 -0
  48. package/dist/client/assets/atomRegistry-Bq5Y4LP1.js +3 -0
  49. package/dist/client/assets/aurora-x-CLgz8jpO.js +2 -0
  50. package/dist/client/assets/aurora-x-DY4EgSB_.js +2 -0
  51. package/dist/client/assets/awk-emAjNmqG.js +2 -0
  52. package/dist/client/assets/ayu-dark-BOsBaLmt.js +2 -0
  53. package/dist/client/assets/ayu-dark-Dm87GVDE.js +2 -0
  54. package/dist/client/assets/ayu-light-CVzS2PQZ.js +2 -0
  55. package/dist/client/assets/ayu-light-nGNJ-WDB.js +2 -0
  56. package/dist/client/assets/ayu-mirage-CionIqJ2.js +2 -0
  57. package/dist/client/assets/ayu-mirage-wUDx3klU.js +2 -0
  58. package/dist/client/assets/ballerina-Zz4P1PCo.js +2 -0
  59. package/dist/client/assets/bat-CojohPr3.js +2 -0
  60. package/dist/client/assets/beancount-DIrDFIbZ.js +2 -0
  61. package/dist/client/assets/berry-BktKISqk.js +2 -0
  62. package/dist/client/assets/bibtex-QuZiL8vO.js +2 -0
  63. package/dist/client/assets/bicep-BBqBjbA3.js +2 -0
  64. package/dist/client/assets/bird2-FrGIamnO.js +2 -0
  65. package/dist/client/assets/blade-CUGHtpnt.js +2 -0
  66. package/dist/client/assets/bsl-Dwz0otKA.js +2 -0
  67. package/dist/client/assets/c-3r97XxSq.js +2 -0
  68. package/dist/client/assets/c3-D-fgrOzJ.js +2 -0
  69. package/dist/client/assets/cadence-53eYIqKQ.js +2 -0
  70. package/dist/client/assets/cairo-Cai_OBhL.js +2 -0
  71. package/dist/client/assets/canvasStateStore-D3R1Ldk1.js +2 -0
  72. package/dist/client/assets/catppuccin-frappe-B9ztfCCY.js +2 -0
  73. package/dist/client/assets/catppuccin-frappe-Dtq86Zt-.js +2 -0
  74. package/dist/client/assets/catppuccin-latte-D1lF_ULk.js +2 -0
  75. package/dist/client/assets/catppuccin-latte-jgmNlGoB.js +2 -0
  76. package/dist/client/assets/catppuccin-macchiato-CcX-f1yB.js +2 -0
  77. package/dist/client/assets/catppuccin-macchiato-DfuKQKcK.js +2 -0
  78. package/dist/client/assets/catppuccin-mocha-B3_lpdvM.js +2 -0
  79. package/dist/client/assets/catppuccin-mocha-DfNnOvvn.js +2 -0
  80. package/dist/client/assets/clarity-DCS2DMlE.js +2 -0
  81. package/dist/client/assets/clojure-XwHeeE37.js +2 -0
  82. package/dist/client/assets/cmake-VIYk9tbe.js +2 -0
  83. package/dist/client/assets/cmmdAuthRedirect-DLvl7JNi.js +2 -0
  84. package/dist/client/assets/cobol-IPhylbE9.js +2 -0
  85. package/dist/client/assets/codeowners-DiTXAskR.js +2 -0
  86. package/dist/client/assets/codeql-0208dEuz.js +2 -0
  87. package/dist/client/assets/coffee-BwGUpF4f.js +2 -0
  88. package/dist/client/assets/common-lisp-Bbk7xLRF.js +2 -0
  89. package/dist/client/assets/coq-CDDZdGGh.js +2 -0
  90. package/dist/client/assets/cpp-jFyTvZsm.js +2 -0
  91. package/dist/client/assets/crystal-DYkQl9zO.js +2 -0
  92. package/dist/client/assets/csharp-Dausz59m.js +2 -0
  93. package/dist/client/assets/css-jXIxCbs3.js +2 -0
  94. package/dist/client/assets/csv-e2HVQau9.js +2 -0
  95. package/dist/client/assets/cue-BMgE_xju.js +2 -0
  96. package/dist/client/assets/cypher-CA95tXqi.js +2 -0
  97. package/dist/client/assets/d-DeO2qMKQ.js +2 -0
  98. package/dist/client/assets/dark-plus-DaoBxEuI.js +2 -0
  99. package/dist/client/assets/dark-plus-hlEOAUn6.js +2 -0
  100. package/dist/client/assets/dart-_9gbW0uG.js +2 -0
  101. package/dist/client/assets/dax-BMSB_urL.js +2 -0
  102. package/dist/client/assets/desktop-CFWOIXtS.js +2 -0
  103. package/dist/client/assets/diff-K3NAzB5h.js +2 -0
  104. package/dist/client/assets/docker-BHQx5Ff2.js +2 -0
  105. package/dist/client/assets/dotenv-CkiqXLC8.js +2 -0
  106. package/dist/client/assets/dracula-C9rp4fWn.js +2 -0
  107. package/dist/client/assets/dracula-CIJxKfwh.js +2 -0
  108. package/dist/client/assets/dracula-soft-BN-taJLQ.js +2 -0
  109. package/dist/client/assets/dracula-soft-De1wWQ_v.js +2 -0
  110. package/dist/client/assets/dream-maker-BM-H3AID.js +2 -0
  111. package/dist/client/assets/edge-CVf1J8H7.js +2 -0
  112. package/dist/client/assets/elixir-DtWV_YYF.js +2 -0
  113. package/dist/client/assets/elm-BJC2NMzB.js +2 -0
  114. package/dist/client/assets/emacs-lisp-BBM_ORbk.js +2 -0
  115. package/dist/client/assets/erb-cwYn0k3w.js +2 -0
  116. package/dist/client/assets/erlang-QNS0KA0S.js +2 -0
  117. package/dist/client/assets/everforest-dark-BSYmfNnp.js +2 -0
  118. package/dist/client/assets/everforest-dark-DUW3cHBn.js +2 -0
  119. package/dist/client/assets/everforest-light-CXyS_8Pc.js +2 -0
  120. package/dist/client/assets/everforest-light-DR-OhbXr.js +2 -0
  121. package/dist/client/assets/fennel-CAUJGoSU.js +2 -0
  122. package/dist/client/assets/fish-Cgln2BIC.js +2 -0
  123. package/dist/client/assets/fluent-BFL910sE.js +2 -0
  124. package/dist/client/assets/fortran-fixed-form-GNS6k7js.js +2 -0
  125. package/dist/client/assets/fortran-free-form-DB-siuqX.js +2 -0
  126. package/dist/client/assets/fsharp-BEjSdIee.js +2 -0
  127. package/dist/client/assets/gdresource-D24f9BeL.js +2 -0
  128. package/dist/client/assets/gdscript-Bq5ZYHDh.js +2 -0
  129. package/dist/client/assets/gdshader-BWxXiThj.js +2 -0
  130. package/dist/client/assets/genie-BOcsPMcn.js +2 -0
  131. package/dist/client/assets/gherkin-pSvoetjt.js +2 -0
  132. package/dist/client/assets/git-commit-Ddcy2Rzd.js +2 -0
  133. package/dist/client/assets/git-rebase-95AHstHI.js +2 -0
  134. package/dist/client/assets/github-dark-BbHkogeI.js +2 -0
  135. package/dist/client/assets/github-dark-D1nTcH4E.js +2 -0
  136. package/dist/client/assets/github-dark-default-Cgu-j31c.js +2 -0
  137. package/dist/client/assets/github-dark-default-CwMUtNVn.js +2 -0
  138. package/dist/client/assets/github-dark-dimmed-BmSK4vhs.js +2 -0
  139. package/dist/client/assets/github-dark-dimmed-CQVfITf-.js +2 -0
  140. package/dist/client/assets/github-dark-high-contrast-8_9Rbsic.js +2 -0
  141. package/dist/client/assets/github-dark-high-contrast-BO-0858k.js +2 -0
  142. package/dist/client/assets/github-light-DWIA8Fx_.js +2 -0
  143. package/dist/client/assets/github-light-default-CR0FtjVb.js +2 -0
  144. package/dist/client/assets/github-light-default-LLPbqR-K.js +2 -0
  145. package/dist/client/assets/github-light-high-contrast-5o8qRjCb.js +2 -0
  146. package/dist/client/assets/github-light-high-contrast-C8BCDz6a.js +2 -0
  147. package/dist/client/assets/github-light-lCcn0xRl.js +2 -0
  148. package/dist/client/assets/gleam-DPm9Zc9U.js +2 -0
  149. package/dist/client/assets/glimmer-js-Cjwf-Ijv.js +2 -0
  150. package/dist/client/assets/glimmer-ts-DXnOWlZf.js +2 -0
  151. package/dist/client/assets/glsl-iXGbnqIU.js +2 -0
  152. package/dist/client/assets/gn-DEuV1her.js +2 -0
  153. package/dist/client/assets/gnuplot-CqGlKjK6.js +2 -0
  154. package/dist/client/assets/go-mptU-yl2.js +2 -0
  155. package/dist/client/assets/graphql-DJMVZQv3.js +2 -0
  156. package/dist/client/assets/groovy-CKg5KWq9.js +2 -0
  157. package/dist/client/assets/gruvbox-dark-hard-Df4rfbxN.js +2 -0
  158. package/dist/client/assets/gruvbox-dark-hard-DsK6pQOr.js +2 -0
  159. package/dist/client/assets/gruvbox-dark-medium-nlSbDtaA.js +2 -0
  160. package/dist/client/assets/gruvbox-dark-medium-zSmEeDKP.js +2 -0
  161. package/dist/client/assets/gruvbox-dark-soft-BSW4a3D0.js +2 -0
  162. package/dist/client/assets/gruvbox-dark-soft-DgI1MxVf.js +2 -0
  163. package/dist/client/assets/gruvbox-light-hard-D144A6HZ.js +2 -0
  164. package/dist/client/assets/gruvbox-light-hard-DMNoHzNU.js +2 -0
  165. package/dist/client/assets/gruvbox-light-medium-C0B0NCuj.js +2 -0
  166. package/dist/client/assets/gruvbox-light-medium-CY2MDbN0.js +2 -0
  167. package/dist/client/assets/gruvbox-light-soft-CWJ8aP9f.js +2 -0
  168. package/dist/client/assets/gruvbox-light-soft-CyPlqRD8.js +2 -0
  169. package/dist/client/assets/hack-CkGKtoya.js +2 -0
  170. package/dist/client/assets/haml-mV-E4efJ.js +2 -0
  171. package/dist/client/assets/handlebars-Da6i86YE.js +2 -0
  172. package/dist/client/assets/haskell-DFWkJmsd.js +2 -0
  173. package/dist/client/assets/haxe-DoXg9N2w.js +2 -0
  174. package/dist/client/assets/hcl-VbcvLW6X.js +2 -0
  175. package/dist/client/assets/hjson-dQ--SYg9.js +2 -0
  176. package/dist/client/assets/hlsl-DNh8NDKB.js +2 -0
  177. package/dist/client/assets/horizon-BeufL1QP.js +2 -0
  178. package/dist/client/assets/horizon-CnOil3H1.js +2 -0
  179. package/dist/client/assets/horizon-bright-BoFfNO4u.js +2 -0
  180. package/dist/client/assets/horizon-bright-CJCE-DcQ.js +2 -0
  181. package/dist/client/assets/houston-C5_OTP91.js +2 -0
  182. package/dist/client/assets/houston-jaZUvSzs.js +2 -0
  183. package/dist/client/assets/html-derivative-BOw7yS3Z.js +2 -0
  184. package/dist/client/assets/html-e1ppUAVa.js +2 -0
  185. package/dist/client/assets/html2canvas-C_LL7spC.js +6 -0
  186. package/dist/client/assets/http-DFrMFVWs.js +2 -0
  187. package/dist/client/assets/hurl-3N2UscjA.js +2 -0
  188. package/dist/client/assets/hxml-Ip0yb8dg.js +2 -0
  189. package/dist/client/assets/hy-Bg-RIaMc.js +2 -0
  190. package/dist/client/assets/imba-BjZ9NRcj.js +2 -0
  191. package/dist/client/assets/index-Dr7HwjTE.css +1 -0
  192. package/dist/client/assets/index-DyEYqQdf.js +151 -0
  193. package/dist/client/assets/index.es-piUKIQw4.js +6 -0
  194. package/dist/client/assets/ini-CXagdQO9.js +2 -0
  195. package/dist/client/assets/java-DY6ZSujp.js +2 -0
  196. package/dist/client/assets/javascript-BfTuFzbs.js +2 -0
  197. package/dist/client/assets/jinja-C4NVx4X-.js +2 -0
  198. package/dist/client/assets/jison-BaE4DrvM.js +2 -0
  199. package/dist/client/assets/json-LL0kLbs_.js +2 -0
  200. package/dist/client/assets/json5-B1LcXsA8.js +2 -0
  201. package/dist/client/assets/jsonc-CYSDka7c.js +2 -0
  202. package/dist/client/assets/jsonl-CwfwQmvE.js +2 -0
  203. package/dist/client/assets/jsonnet-DG_zYewp.js +2 -0
  204. package/dist/client/assets/jspdf.es.min-_OjqfV_L.js +80 -0
  205. package/dist/client/assets/jssm-IkACsEzj.js +2 -0
  206. package/dist/client/assets/jsx-BOBg7x46.js +2 -0
  207. package/dist/client/assets/julia-D5dobu9Y.js +2 -0
  208. package/dist/client/assets/just-D99ddsWv.js +2 -0
  209. package/dist/client/assets/kanagawa-dragon-BBUl63AF.js +2 -0
  210. package/dist/client/assets/kanagawa-dragon-CBGy-6ik.js +2 -0
  211. package/dist/client/assets/kanagawa-lotus-BKY9TlU3.js +2 -0
  212. package/dist/client/assets/kanagawa-lotus-D93oLQjR.js +2 -0
  213. package/dist/client/assets/kanagawa-wave-CWf0rFWt.js +2 -0
  214. package/dist/client/assets/kanagawa-wave-CZBJ3hQh.js +2 -0
  215. package/dist/client/assets/kdl-DuytcvNV.js +2 -0
  216. package/dist/client/assets/kotlin-DmtnKz6Z.js +2 -0
  217. package/dist/client/assets/kusto-DmrVjfae.js +2 -0
  218. package/dist/client/assets/laserwave-DTzUwFmi.js +2 -0
  219. package/dist/client/assets/laserwave-NRABVcaO.js +2 -0
  220. package/dist/client/assets/latex-0e5rhe9m.js +2 -0
  221. package/dist/client/assets/lean-Bhkhoed1.js +2 -0
  222. package/dist/client/assets/less-BgyohKqc.js +2 -0
  223. package/dist/client/assets/light-plus-Cbc9ZUH4.js +2 -0
  224. package/dist/client/assets/light-plus-SK-KfMAV.js +2 -0
  225. package/dist/client/assets/liquid-BR35Xk1k.js +2 -0
  226. package/dist/client/assets/llvm-BtFJuFOJ.js +2 -0
  227. package/dist/client/assets/log-Df3M8ERB.js +2 -0
  228. package/dist/client/assets/logo-VfSEjTs6.js +2 -0
  229. package/dist/client/assets/lua-BMt4EqAw.js +2 -0
  230. package/dist/client/assets/luau-DIHOVG2A.js +2 -0
  231. package/dist/client/assets/make-gTMDFaMm.js +2 -0
  232. package/dist/client/assets/markdown-B_5il8S2.js +2 -0
  233. package/dist/client/assets/marko-DN4rLggA.js +2 -0
  234. package/dist/client/assets/material-theme-Pm6m-Kzc.js +2 -0
  235. package/dist/client/assets/material-theme-darker-BxFgxa9U.js +2 -0
  236. package/dist/client/assets/material-theme-darker-pKUQPx9-.js +2 -0
  237. package/dist/client/assets/material-theme-lighter-BLqni5my.js +2 -0
  238. package/dist/client/assets/material-theme-lighter-D6-26WhM.js +2 -0
  239. package/dist/client/assets/material-theme-ocean-C2N-nFlu.js +2 -0
  240. package/dist/client/assets/material-theme-ocean-DCxzET3l.js +2 -0
  241. package/dist/client/assets/material-theme-palenight-DyQqRTLL.js +2 -0
  242. package/dist/client/assets/material-theme-palenight-Y14J3SJp.js +2 -0
  243. package/dist/client/assets/material-theme-zfTX2d95.js +2 -0
  244. package/dist/client/assets/matlab-B2zVSjQq.js +2 -0
  245. package/dist/client/assets/mdc-kokCuEO8.js +2 -0
  246. package/dist/client/assets/mdx-CL7pLDiG.js +2 -0
  247. package/dist/client/assets/mermaid-Cou83ohU.js +2 -0
  248. package/dist/client/assets/min-dark-Bg1kQHvJ.js +2 -0
  249. package/dist/client/assets/min-dark-BhN4iMRs.js +2 -0
  250. package/dist/client/assets/min-light-BjU80CRL.js +2 -0
  251. package/dist/client/assets/min-light-Bw9u-P_u.js +2 -0
  252. package/dist/client/assets/mipsasm-CNFOlV7Y.js +2 -0
  253. package/dist/client/assets/module-fAFg92om.js +4 -0
  254. package/dist/client/assets/mojo-DmJMpmxj.js +2 -0
  255. package/dist/client/assets/monokai-C4NNjw1j.js +2 -0
  256. package/dist/client/assets/monokai-DIfgn9Q6.js +2 -0
  257. package/dist/client/assets/moonbit-f-DlcHvh.js +2 -0
  258. package/dist/client/assets/move-3UEJ-86q.js +2 -0
  259. package/dist/client/assets/narrat-BSySVkso.js +2 -0
  260. package/dist/client/assets/nextflow-B6YiVxNF.js +2 -0
  261. package/dist/client/assets/nextflow-groovy-CJM1tnxB.js +2 -0
  262. package/dist/client/assets/nginx-yFGqgywB.js +2 -0
  263. package/dist/client/assets/night-owl-CVqrHJ7c.js +2 -0
  264. package/dist/client/assets/night-owl-M-9PEzO3.js +2 -0
  265. package/dist/client/assets/night-owl-light-BFLAfCgh.js +2 -0
  266. package/dist/client/assets/night-owl-light-CbICj08I.js +2 -0
  267. package/dist/client/assets/nim-H0r8m4Bj.js +2 -0
  268. package/dist/client/assets/nix-D01-yy0s.js +2 -0
  269. package/dist/client/assets/nord-DdQ2eXb7.js +2 -0
  270. package/dist/client/assets/nord-b31BpoFd.js +2 -0
  271. package/dist/client/assets/nushell-CHtjMTHK.js +2 -0
  272. package/dist/client/assets/objective-c-CpnACn2A.js +2 -0
  273. package/dist/client/assets/objective-cpp-CC37zF8s.js +2 -0
  274. package/dist/client/assets/ocaml-zEzf7VRa.js +2 -0
  275. package/dist/client/assets/odin-7LfNaizd.js +2 -0
  276. package/dist/client/assets/one-dark-pro-D7GXMkD_.js +2 -0
  277. package/dist/client/assets/one-dark-pro-DZNXQIff.js +2 -0
  278. package/dist/client/assets/one-light-D0m2woYU.js +2 -0
  279. package/dist/client/assets/one-light-vpvEwBNE.js +2 -0
  280. package/dist/client/assets/openscad-alCnkqb3.js +2 -0
  281. package/dist/client/assets/pascal-BzxE7FG0.js +2 -0
  282. package/dist/client/assets/perl-DMfQlGhS.js +2 -0
  283. package/dist/client/assets/php-eC0_nfgu.js +2 -0
  284. package/dist/client/assets/pierre-dark-C8scyjTE.js +2 -0
  285. package/dist/client/assets/pierre-dark-protanopia-deuteranopia-DjjI5tLG.js +2 -0
  286. package/dist/client/assets/pierre-dark-soft-U4k3hSAg.js +2 -0
  287. package/dist/client/assets/pierre-dark-tritanopia-CwldMLve.js +2 -0
  288. package/dist/client/assets/pierre-dark-vibrant-CbqW77RL.js +2 -0
  289. package/dist/client/assets/pierre-light-CRazXHrY.js +2 -0
  290. package/dist/client/assets/pierre-light-protanopia-deuteranopia-C-0-s32M.js +2 -0
  291. package/dist/client/assets/pierre-light-soft-CeMgeGD-.js +2 -0
  292. package/dist/client/assets/pierre-light-tritanopia-CwP7kaEp.js +2 -0
  293. package/dist/client/assets/pierre-light-vibrant-BRw7kdwa.js +2 -0
  294. package/dist/client/assets/pkl-B_4Y3aQj.js +2 -0
  295. package/dist/client/assets/plastic-7ebP7j7m.js +2 -0
  296. package/dist/client/assets/plastic-BxJ4wlPp.js +2 -0
  297. package/dist/client/assets/plsql-Vnj6O-p2.js +2 -0
  298. package/dist/client/assets/po-BDEiW-In.js +2 -0
  299. package/dist/client/assets/poimandres-CjxvpNV1.js +2 -0
  300. package/dist/client/assets/poimandres-DaajSABO.js +2 -0
  301. package/dist/client/assets/polar-DkeS43LD.js +2 -0
  302. package/dist/client/assets/postcss-BdW9ckpW.js +2 -0
  303. package/dist/client/assets/powerquery-Ck_tTsxM.js +2 -0
  304. package/dist/client/assets/powershell-CSE_7mny.js +2 -0
  305. package/dist/client/assets/preload-helper-2nxZ5jlD.js +1 -0
  306. package/dist/client/assets/prisma-Bo0mLS5-.js +2 -0
  307. package/dist/client/assets/prolog-BKKH5B6F.js +2 -0
  308. package/dist/client/assets/proto-CQGfqf21.js +2 -0
  309. package/dist/client/assets/pug-CdkPd3m5.js +2 -0
  310. package/dist/client/assets/puppet-CMQRMMTw.js +2 -0
  311. package/dist/client/assets/purescript-CCcyGQO2.js +2 -0
  312. package/dist/client/assets/purify.es-BOhOJYGt.js +3 -0
  313. package/dist/client/assets/python-DMPOlDIf.js +2 -0
  314. package/dist/client/assets/qml-CjgSvi7A.js +2 -0
  315. package/dist/client/assets/qmldir-WCdsq__X.js +2 -0
  316. package/dist/client/assets/qss-AtgwhOez.js +2 -0
  317. package/dist/client/assets/r-CyfaTtPo.js +2 -0
  318. package/dist/client/assets/racket-BChN0yKc.js +2 -0
  319. package/dist/client/assets/raku-y2whvo3i.js +2 -0
  320. package/dist/client/assets/razor-xg0jlt5d.js +2 -0
  321. package/dist/client/assets/red-4ASUbyQz.js +2 -0
  322. package/dist/client/assets/red-FUTSeuNn.js +2 -0
  323. package/dist/client/assets/reg-Vw5mc10D.js +2 -0
  324. package/dist/client/assets/regexp-DNjghFOM.js +2 -0
  325. package/dist/client/assets/rel-B7yBab0H.js +2 -0
  326. package/dist/client/assets/riscv-CoVA6mXv.js +2 -0
  327. package/dist/client/assets/rolldown-runtime-BeQ30c1w.js +1 -0
  328. package/dist/client/assets/ron-Dncoj8f2.js +2 -0
  329. package/dist/client/assets/rose-pine-BYqQazSr.js +2 -0
  330. package/dist/client/assets/rose-pine-DKVJldI6.js +2 -0
  331. package/dist/client/assets/rose-pine-dawn-BzAj1SA_.js +2 -0
  332. package/dist/client/assets/rose-pine-dawn-DpMWSJny.js +2 -0
  333. package/dist/client/assets/rose-pine-moon-BF7RtPma.js +2 -0
  334. package/dist/client/assets/rose-pine-moon-Buv_ZumG.js +2 -0
  335. package/dist/client/assets/rosmsg-DMM9gQ6F.js +2 -0
  336. package/dist/client/assets/rst-DUzGXO8S.js +2 -0
  337. package/dist/client/assets/ruby-rVw1KmtO.js +2 -0
  338. package/dist/client/assets/rust-Do9fnzCe.js +2 -0
  339. package/dist/client/assets/sas-DqCEPep6.js +2 -0
  340. package/dist/client/assets/sass-C-AYCcFv.js +2 -0
  341. package/dist/client/assets/scala-g1Tl2-Vx.js +2 -0
  342. package/dist/client/assets/scheme-DMNTmmtl.js +2 -0
  343. package/dist/client/assets/scss-DUVpCPFS.js +2 -0
  344. package/dist/client/assets/sdbl-DN-YwBSp.js +2 -0
  345. package/dist/client/assets/shaderlab-CU1ngQGv.js +2 -0
  346. package/dist/client/assets/shellscript-DhExEfAl.js +2 -0
  347. package/dist/client/assets/shellsession-BRLd459R.js +2 -0
  348. package/dist/client/assets/slack-dark-CHVebfsv.js +2 -0
  349. package/dist/client/assets/slack-dark-DsHK2SW9.js +2 -0
  350. package/dist/client/assets/slack-ochin-DLRnnjq1.js +2 -0
  351. package/dist/client/assets/slack-ochin-auUeui07.js +2 -0
  352. package/dist/client/assets/smalltalk-DfTqE6NI.js +2 -0
  353. package/dist/client/assets/snazzy-light-DYCniS15.js +2 -0
  354. package/dist/client/assets/snazzy-light-DcJ4c2TI.js +2 -0
  355. package/dist/client/assets/solarized-dark-C2M3A6iX.js +2 -0
  356. package/dist/client/assets/solarized-dark-f_BlEcC2.js +2 -0
  357. package/dist/client/assets/solarized-light-DGdaihLk.js +2 -0
  358. package/dist/client/assets/solarized-light-p0lk9NUw.js +2 -0
  359. package/dist/client/assets/solidity-UrsYApv4.js +2 -0
  360. package/dist/client/assets/soy-B2el7XDq.js +2 -0
  361. package/dist/client/assets/sparql-Ckg9aAAq.js +2 -0
  362. package/dist/client/assets/splunk-BbdNC7mF.js +2 -0
  363. package/dist/client/assets/sql-DiDaRjp9.js +2 -0
  364. package/dist/client/assets/src-pwcrD9wg.js +3 -0
  365. package/dist/client/assets/ssh-config-NaDpXiNE.js +2 -0
  366. package/dist/client/assets/stata-C71yNzqX.js +2 -0
  367. package/dist/client/assets/stylus-BmDWwNjA.js +2 -0
  368. package/dist/client/assets/surrealql-Cmypmwl2.js +2 -0
  369. package/dist/client/assets/svelte-VS6niI_T.js +2 -0
  370. package/dist/client/assets/swift-C69NyPuQ.js +2 -0
  371. package/dist/client/assets/synthwave-84-2NxBVDLO.js +2 -0
  372. package/dist/client/assets/synthwave-84-CVwMZOby.js +2 -0
  373. package/dist/client/assets/system-verilog-DJk0s1jv.js +2 -0
  374. package/dist/client/assets/systemd-CcQAXEZ9.js +2 -0
  375. package/dist/client/assets/talonscript-CUGr7vYM.js +2 -0
  376. package/dist/client/assets/tasl-BB-YNBB8.js +2 -0
  377. package/dist/client/assets/tcl-DR8-AcmN.js +2 -0
  378. package/dist/client/assets/templ-Cr4Do0uA.js +2 -0
  379. package/dist/client/assets/terraform-DS-GC2Bj.js +2 -0
  380. package/dist/client/assets/tex-CcZtvqzZ.js +2 -0
  381. package/dist/client/assets/toggle-BBEoD8mr.js +2 -0
  382. package/dist/client/assets/tokyo-night-9wJEO1G-.js +2 -0
  383. package/dist/client/assets/tokyo-night-ZUp4Hulo.js +2 -0
  384. package/dist/client/assets/toml-ByrHRc5Z.js +2 -0
  385. package/dist/client/assets/transport-B-82Ada5.js +2 -0
  386. package/dist/client/assets/ts-tags-Dhe4Ce_p.js +2 -0
  387. package/dist/client/assets/tsv-2A2hWH8i.js +2 -0
  388. package/dist/client/assets/tsx-rRP2I03K.js +2 -0
  389. package/dist/client/assets/turtle-BYbwzkhD.js +2 -0
  390. package/dist/client/assets/twig-DtN4j4nR.js +2 -0
  391. package/dist/client/assets/typeof-DOAxNSYQ.js +2 -0
  392. package/dist/client/assets/typescript-tv4fsI1Q.js +2 -0
  393. package/dist/client/assets/typespec-DoZVUoUi.js +2 -0
  394. package/dist/client/assets/typst-BmNF0lss.js +2 -0
  395. package/dist/client/assets/useTriggerFocusGuards-B2i3DSgR.js +2 -0
  396. package/dist/client/assets/v-CtCN4vLO.js +2 -0
  397. package/dist/client/assets/vala-DOsY6Y3z.js +2 -0
  398. package/dist/client/assets/vb-C1Ff9hOT.js +2 -0
  399. package/dist/client/assets/verilog-Dt4OfjHN.js +2 -0
  400. package/dist/client/assets/vesper-5ZmhmIun.js +2 -0
  401. package/dist/client/assets/vesper-J3W-7eep.js +2 -0
  402. package/dist/client/assets/vhdl-DkoQ3qnl.js +2 -0
  403. package/dist/client/assets/viml-C3b4aEDf.js +2 -0
  404. package/dist/client/assets/vitesse-black-CYOC7ssU.js +2 -0
  405. package/dist/client/assets/vitesse-black-DWaDDoI3.js +2 -0
  406. package/dist/client/assets/vitesse-dark-Bxewb9U5.js +2 -0
  407. package/dist/client/assets/vitesse-dark-CZotVzc8.js +2 -0
  408. package/dist/client/assets/vitesse-light-Bf_msd9a.js +2 -0
  409. package/dist/client/assets/vitesse-light-BfrRSjRx.js +2 -0
  410. package/dist/client/assets/vue-C0rWZC13.js +2 -0
  411. package/dist/client/assets/vue-html-bxw887C2.js +2 -0
  412. package/dist/client/assets/vue-vine-DUWGjTI5.js +2 -0
  413. package/dist/client/assets/vyper-BamdcTqV.js +2 -0
  414. package/dist/client/assets/wasm-C2MLrNQ1.js +2 -0
  415. package/dist/client/assets/wasm-CGd31VpO.js +2 -0
  416. package/dist/client/assets/wenyan-BPZ76iog.js +2 -0
  417. package/dist/client/assets/wgsl-sH_fVDG_.js +2 -0
  418. package/dist/client/assets/wikitext-BsPo9Czf.js +2 -0
  419. package/dist/client/assets/wit-BfBhtJwS.js +2 -0
  420. package/dist/client/assets/wolfram-GL7CPBRD.js +2 -0
  421. package/dist/client/assets/worker-Cvq2iJN1.js +162 -0
  422. package/dist/client/assets/workspaceReadinessAtom-DUP5NKsc.js +2 -0
  423. package/dist/client/assets/xml-C0zxRzgj.js +2 -0
  424. package/dist/client/assets/xsl-CC403A_G.js +2 -0
  425. package/dist/client/assets/yaml-BCnsJrvx.js +2 -0
  426. package/dist/client/assets/zenscript-CmwVE7RW.js +2 -0
  427. package/dist/client/assets/zig-GtQXM-vf.js +2 -0
  428. package/dist/client/favicon-16x16.png +0 -0
  429. package/dist/client/favicon-16x16.png.publish-bak +0 -0
  430. package/dist/client/favicon-32x32.png +0 -0
  431. package/dist/client/favicon-32x32.png.publish-bak +0 -0
  432. package/dist/client/favicon.ico +0 -0
  433. package/dist/client/favicon.ico.publish-bak +0 -0
  434. package/dist/client/forge-mark.svg +5 -0
  435. package/dist/client/index.html +131 -0
  436. package/dist/client/mockServiceWorker.js +336 -0
  437. package/dist/client/sidebar/forge-ember-field.webp +0 -0
  438. package/dist/{esm-wLIF-u3N.mjs → esm-Ce1GqbVk.mjs} +1 -1
  439. package/dist/{esm-BZhXwX5p.cjs → esm-Do7HVhLA.cjs} +1 -1
  440. package/dist/{execAsync-DWZyWH-_.mjs → execAsync-BNNdR88o.mjs} +1 -1
  441. package/dist/{execAsync-jnYVB5RZ.cjs → execAsync-BUcaFQ1D.cjs} +1 -1
  442. package/dist/forge-provision-display.sh +316 -0
  443. package/dist/{getMachineId-bsd-BLtyMA4j.cjs → getMachineId-bsd-C_qi9crE.cjs} +3 -3
  444. package/dist/{getMachineId-bsd-CTjiY7jG.mjs → getMachineId-bsd-FI863wjR.mjs} +3 -3
  445. package/dist/{getMachineId-darwin-DaGS2zUd.cjs → getMachineId-darwin-BOoNuqXn.cjs} +3 -3
  446. package/dist/{getMachineId-darwin-BrPuyPOo.mjs → getMachineId-darwin-D9VhTaPM.mjs} +3 -3
  447. package/dist/{getMachineId-linux-BsP3wJaE.cjs → getMachineId-linux-C9L-vW7m.cjs} +2 -2
  448. package/dist/{getMachineId-linux-D9QEWWF-.mjs → getMachineId-linux-DE2x36Kt.mjs} +2 -2
  449. package/dist/{getMachineId-unsupported-Cm-2s4Sg.mjs → getMachineId-unsupported-9S6pcxXb.mjs} +2 -2
  450. package/dist/{getMachineId-unsupported-B_M-gck7.cjs → getMachineId-unsupported-CmbM8LYa.cjs} +2 -2
  451. package/dist/{getMachineId-win-qtEKaUYj.mjs → getMachineId-win-0EVRuBxU.mjs} +3 -3
  452. package/dist/{getMachineId-win-3zJ3HQLG.cjs → getMachineId-win-BPaemVew.cjs} +3 -3
  453. package/dist/{open-CGXZLos4.cjs → open-BAsPVCWX.cjs} +1 -1
  454. package/dist/{open-Cf0bgbyx.mjs → open-FIgTDosf.mjs} +1 -1
  455. package/dist/runtimeBootstrap.cjs +8 -0
  456. package/dist/runtimeBootstrap.mjs +4 -0
  457. package/dist/runtimeControlAuthority-L85w5RTn.mjs +535 -0
  458. package/dist/runtimeControlAuthority-SNBF5Mjy.cjs +601 -0
  459. package/package.json +28 -30
  460. package/dist/NodeHttpServer-C7YMYP5R.cjs +0 -616
  461. package/dist/NodeHttpServer-D5-EtRwc.mjs +0 -605
@@ -0,0 +1,316 @@
1
+ #!/bin/sh
2
+ # Provision the desktop shell that turns Forge's existing X display into a viewable
3
+ # desktop: a window manager, a compositor, panels, fonts and native-input tooling.
4
+ #
5
+ # WHY A SCRIPT AND NOT A SNAPSHOT
6
+ # Sprites checkpoints are per-sprite; there is no cross-sprite golden image
7
+ # (docs/specs/2026-07-30-sprite-lifecycle-and-cloud-architecture-standard.md:78).
8
+ # A checkpoint can only roll one sprite back, so repeatable desktop provisioning has
9
+ # to be re-runnable code. This script is idempotent: run it on every boot.
10
+ #
11
+ # WHAT THIS DOES NOT DO
12
+ # It installs no VNC server and opens no listening port. Production Forge sprites are
13
+ # provisioned url_settings.auth="public", so anything bound to a port on the sprite
14
+ # edge is reachable by anyone who learns the hostname — on a box with passwordless
15
+ # sudo. The desktop is streamed over the ALREADY AUTHENTICATED WebSocket via the
16
+ # existing Xvfb -> ffmpeg x11grab -> WebRTC pipeline instead. See
17
+ # docs/forge-cmmd-auth-lanes.md and .claude/rules/forge-security.md.
18
+ #
19
+ # It also does not start the window manager. Xvfb is owned by
20
+ # WebRtcDisplayCaptureRuntime.ts, so the WM has to be started against that display
21
+ # after it exists; this script only puts the pieces on disk. Pass --print-start to
22
+ # see the exact commands the runtime should spawn.
23
+ set -e
24
+
25
+ FORGE_DISPLAY="${FORGE_BROWSER_WEBRTC_X_DISPLAY:-:99}"
26
+ SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)"
27
+ FORGE_REPO_ROOT="${FORGE_REPO_ROOT:-$(dirname -- "$SCRIPT_DIR")}"
28
+ FORGE_MARK_SOURCE="${FORGE_REPO_ROOT}/assets/prod/forge-web-favicon-32x32.png"
29
+ FORGE_WALLPAPER_SOURCE="${FORGE_REPO_ROOT}/assets/prod/forge-desktop-wallpaper.jpg"
30
+ CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME:-/root}/.config}"
31
+ TINT2_DIR="${CONFIG_HOME}/tint2"
32
+ GTK3_DIR="${CONFIG_HOME}/gtk-3.0"
33
+ PIXMAP_DIR=/usr/share/pixmaps
34
+ WALLPAPER=/usr/share/backgrounds/forge-display.png
35
+
36
+ if command -v sudo >/dev/null 2>&1 && [ "$(id -u)" != "0" ]; then
37
+ SUDO=sudo
38
+ else
39
+ SUDO=
40
+ fi
41
+
42
+ log() { echo "[forge-display] $*"; }
43
+
44
+ if [ "${1:-}" = "--print-start" ]; then
45
+ cat <<EOF
46
+ DISPLAY=${FORGE_DISPLAY} openbox --sm-disable
47
+ DISPLAY=${FORGE_DISPLAY} picom --backend xrender --corner-radius 10
48
+ DISPLAY=${FORGE_DISPLAY} tint2 -c ${TINT2_DIR}/forge-top.tint2rc
49
+ DISPLAY=${FORGE_DISPLAY} tint2 -c ${TINT2_DIR}/forge-dock.tint2rc
50
+ DISPLAY=${FORGE_DISPLAY} feh --bg-fill ${WALLPAPER}
51
+ EOF
52
+ exit 0
53
+ fi
54
+
55
+ # ---------------------------------------------------------------------------
56
+ # 1. Packages
57
+ #
58
+ # elementary-xfce-icon-theme is NOT cosmetic and must not be dropped to save time.
59
+ # bubblewrap cannot create namespaces inside a sprite ("Unexpected capabilities but
60
+ # not setuid"), and GTK3 delegates SVG icon decoding to a bwrap-sandboxed glycin
61
+ # loader. Every GTK app therefore aborts on Adwaita's SVG icons with
62
+ # "Gtk:ERROR ensure_surface_for_gicon". A raster icon theme sidesteps the SVG path
63
+ # entirely. This is also why a full xfce4-session is not used here: xfce4-panel and
64
+ # wnck still abort (exit 134) even with the raster theme, whereas a plain WM does not.
65
+ # ---------------------------------------------------------------------------
66
+ # xvfb leads the list because it is the one package the pipeline cannot run
67
+ # without. The header above says Xvfb is "owned by
68
+ # WebRtcDisplayCaptureRuntime.ts" — true of STARTING it, but the runtime cannot
69
+ # start a binary that was never installed. Measured on a live sprite 2026-08-21:
70
+ # which Xvfb -> not found ; apt-cache policy xvfb -> Installed: (none)
71
+ #
72
+ # NOTE ON WHERE SPRITES ACTUALLY GET IT: not from here. This script has no
73
+ # caller — sprites are provisioned by CMMD's forge-sprite-browser-runtime.ts,
74
+ # and CMMD PR #4231 is what restores xvfb there. Keeping it in this list anyway
75
+ # so the script matches its own stated purpose if it is ever run by hand or
76
+ # wired up; it is not the production path.
77
+ #
78
+ # ffmpeg is deliberately NOT added: it IS present from the base image
79
+ # (/usr/bin/ffmpeg, verified on the same sprite).
80
+ # ---------------------------------------------------------------------------
81
+ # DOCK APPS — the one place to add an app to the desktop.
82
+ #
83
+ # One line each: "<apt package> <desktop id>". This single table drives BOTH the
84
+ # apt install and the dock launchers, so the two can never disagree. It used to
85
+ # be two hand-maintained lists, and production shipped the failure that invites:
86
+ # the dock advertised google-chrome/xfce4-terminal/thunar/mousepad while none of
87
+ # them were installed, so it rendered as an empty rounded rectangle.
88
+ #
89
+ # To add an app: add one line. Nothing else.
90
+ #
91
+ # Chromium is deliberately absent: Ubuntu 26.04 has no real chromium package (it
92
+ # resolves to a snapd-backed transitional one, unusable under tini with no
93
+ # systemd), so its launcher is synthesised against Playwright's full Chromium —
94
+ # the same build headful capture already requires. See below.
95
+ # ---------------------------------------------------------------------------
96
+ FORGE_DOCK_APPS="
97
+ xfce4-terminal xfce4-terminal
98
+ thunar thunar
99
+ mousepad org.xfce.mousepad
100
+ "
101
+
102
+ FORGE_DOCK_PACKAGES="$(echo "$FORGE_DOCK_APPS" | awk 'NF {print $1}' | tr '\n' ' ')"
103
+
104
+ DISPLAY_PACKAGES="xvfb openbox picom tint2 feh x11-utils xdotool imagemagick elementary-xfce-icon-theme fonts-noto-core librsvg2-common"
105
+
106
+ # ---------------------------------------------------------------------------
107
+ # Wait for the dpkg lock before installing.
108
+ #
109
+ # This script runs inside the sprite's own provisioning, alongside CMMD's apt
110
+ # work. Observed live 2026-08-26 on forge-cmmd-cmmd-core-platform:
111
+ # E: Could not get lock /var/lib/dpkg/lock-frontend.
112
+ # It is held by process 24187 (apt-get)
113
+ # so nothing installed, no configs, no wallpaper — and the caller had redirected
114
+ # output to /dev/null, so the failure was completely silent. Re-running it once
115
+ # the lock freed succeeded immediately: contention, not a broken install.
116
+ #
117
+ # Handled HERE rather than in the caller because this script owns the apt call.
118
+ # Every caller benefits and none has to know the lock exists.
119
+ #
120
+ # BOUNDED. A desktop is cosmetic and must never hold a sprite's provisioning
121
+ # open; if the lock is still held after the wait, fall through and let apt fail
122
+ # loudly rather than hang.
123
+ # ---------------------------------------------------------------------------
124
+ wait_for_dpkg_lock() {
125
+ for _ in $(seq 1 60); do
126
+ if command -v fuser >/dev/null 2>&1; then
127
+ fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1 || return 0
128
+ else
129
+ return 0
130
+ fi
131
+ sleep 5
132
+ done
133
+ log "dpkg lock still held after 300s; proceeding and letting apt report it"
134
+ }
135
+
136
+ if command -v apt-get >/dev/null 2>&1; then
137
+ wait_for_dpkg_lock
138
+ log "installing desktop packages"
139
+ DEBIAN_FRONTEND=noninteractive $SUDO apt-get update -y >/dev/null
140
+ # shellcheck disable=SC2086 # word splitting is the intended package list expansion
141
+ DEBIAN_FRONTEND=noninteractive $SUDO apt-get install -y --no-install-recommends $DISPLAY_PACKAGES $FORGE_DOCK_PACKAGES >/dev/null
142
+ else
143
+ log "apt-get unavailable; skipping package install (expects a prebuilt image)"
144
+ fi
145
+
146
+ # ---------------------------------------------------------------------------
147
+ # 2. GTK icon theme
148
+ #
149
+ # Pin the raster theme so GTK never reaches for the sandboxed SVG loader. Written
150
+ # per-user rather than system-wide so it travels with $HOME.
151
+ # ---------------------------------------------------------------------------
152
+ mkdir -p "$GTK3_DIR"
153
+ cat > "${GTK3_DIR}/settings.ini" <<'EOF'
154
+ [Settings]
155
+ gtk-icon-theme-name=elementary-xfce-dark
156
+ gtk-application-prefer-dark-theme=1
157
+ EOF
158
+
159
+ # ---------------------------------------------------------------------------
160
+ # 3. Brand assets
161
+ #
162
+ # The mark is the same production favicon the web app ships, copied from the repo
163
+ # rather than re-encoded, so the desktop and the product cannot drift apart.
164
+ # ---------------------------------------------------------------------------
165
+ $SUDO mkdir -p "$PIXMAP_DIR" "$(dirname "$WALLPAPER")"
166
+
167
+ if [ -f "$FORGE_MARK_SOURCE" ]; then
168
+ $SUDO cp "$FORGE_MARK_SOURCE" "${PIXMAP_DIR}/forge.png"
169
+ if command -v convert >/dev/null 2>&1; then
170
+ $SUDO convert "${PIXMAP_DIR}/forge.png" -resize 22x22 "${PIXMAP_DIR}/forge-bar.png"
171
+ else
172
+ $SUDO cp "${PIXMAP_DIR}/forge.png" "${PIXMAP_DIR}/forge-bar.png"
173
+ fi
174
+ else
175
+ log "forge mark not found at ${FORGE_MARK_SOURCE}; top bar will render without it"
176
+ fi
177
+
178
+ # The shipped wallpaper: blackened hammered steel with a Forge-orange ember
179
+ # bleeding from the lower centre, generated once and committed rather than
180
+ # synthesised per boot. Measured 16.4/255 mean luminance — dark enough that
181
+ # white panel text and app icons stay legible on top, which a brighter image
182
+ # would quietly ruin.
183
+ #
184
+ # The radial gradient stays as a FALLBACK, not as the design: this script must
185
+ # still produce a usable desktop when run against a tree that predates the
186
+ # asset, or one where it was stripped.
187
+ if [ -f "$FORGE_WALLPAPER_SOURCE" ]; then
188
+ $SUDO cp "$FORGE_WALLPAPER_SOURCE" "$WALLPAPER"
189
+ elif command -v convert >/dev/null 2>&1 && [ ! -f "$WALLPAPER" ]; then
190
+ log "shipped wallpaper missing; falling back to a generated gradient"
191
+ $SUDO convert -size 1920x1200 radial-gradient:'#2A3566'-'#07070B' "$WALLPAPER"
192
+ fi
193
+
194
+ $SUDO tee /usr/share/applications/forge-display-brand.desktop >/dev/null <<EOF
195
+ [Desktop Entry]
196
+ Version=1.0
197
+ Name=Forge
198
+ Exec=/bin/true
199
+ Terminal=false
200
+ Icon=${PIXMAP_DIR}/forge-bar.png
201
+ Type=Application
202
+ Categories=Development;
203
+ EOF
204
+
205
+ # ---------------------------------------------------------------------------
206
+ # 4. Panels
207
+ #
208
+ # Two tint2 instances: a full-width top bar carrying the Forge mark and a clock,
209
+ # and a fixed-width bottom dock. The dock width is explicit on purpose — with
210
+ # `panel_size = 0 <h>` tint2 paints the full monitor width, so "center" has no
211
+ # visible effect and the dock reads as a full-width bar.
212
+ # ---------------------------------------------------------------------------
213
+ mkdir -p "$TINT2_DIR"
214
+
215
+ cat > "${TINT2_DIR}/forge-top.tint2rc" <<EOF
216
+ rounded = 0
217
+ border_width = 0
218
+ background_color = #0B0D14 78
219
+ border_color = #000000 0
220
+
221
+ panel_items = LFC
222
+ panel_position = top center horizontal
223
+ panel_size = 100% 30
224
+ panel_margin = 0 0
225
+ panel_padding = 0 0 0
226
+ panel_background_id = 1
227
+ panel_layer = top
228
+ panel_monitor = all
229
+ wm_menu = 0
230
+ autohide = 0
231
+ strut_policy = none
232
+
233
+ launcher_padding = 12 0 8
234
+ launcher_background_id = 0
235
+ launcher_icon_size = 20
236
+ launcher_tooltip = 1
237
+ launcher_item_app = /usr/share/applications/forge-display-brand.desktop
238
+
239
+ time1_format = %a %b %-d %-I:%M %p
240
+ time1_font = Noto Sans 11
241
+ clock_font_color = #FFFFFF 92
242
+ clock_padding = 16 0
243
+ clock_background_id = 0
244
+ EOF
245
+
246
+ cat > "${TINT2_DIR}/forge-dock.tint2rc" <<'EOF'
247
+ rounded = 18
248
+ border_width = 1
249
+ background_color = #141826 82
250
+ border_color = #FFFFFF 14
251
+
252
+ panel_items = L
253
+ panel_position = bottom center horizontal
254
+ panel_size = 252 66
255
+ panel_margin = 0 14
256
+ panel_padding = 12 6 14
257
+ panel_background_id = 1
258
+ panel_layer = top
259
+ panel_monitor = all
260
+ wm_menu = 0
261
+ autohide = 0
262
+ strut_policy = none
263
+
264
+ launcher_padding = 6 0 12
265
+ launcher_background_id = 0
266
+ launcher_icon_size = 42
267
+ launcher_icon_theme = elementary-xfce-dark
268
+ launcher_tooltip = 1
269
+ EOF
270
+
271
+ # ---------------------------------------------------------------------------
272
+ # 5. Dock launchers
273
+ #
274
+ # A browser first, because it is the app a desktop is opened for. Ubuntu 26.04
275
+ # has no usable chromium package, so the entry is synthesised against
276
+ # Playwright's FULL Chromium — already on the sprite because headful capture
277
+ # requires it. Resolved at provision time; if the build is absent the entry is
278
+ # skipped and the dock simply has one fewer tile.
279
+ # ---------------------------------------------------------------------------
280
+ CHROMIUM_BIN="$(ls -d "${HOME:-/root}"/.cache/ms-playwright/chromium-*/chrome-linux64/chrome 2>/dev/null | head -1)"
281
+ if [ -n "$CHROMIUM_BIN" ]; then
282
+ # Its OWN artwork, shipped beside the binary. A bare "chromium" icon NAME
283
+ # resolves to nothing here — chromium is not an installed package, so the theme
284
+ # has no entry for it and the dock fell back to a generic gear. Prefer the real
285
+ # logo; fall back to the freedesktop name the icon theme does carry.
286
+ CHROMIUM_LOGO="$(dirname "$CHROMIUM_BIN")/product_logo_48.png"
287
+ if [ -f "$CHROMIUM_LOGO" ]; then
288
+ CHROMIUM_ICON="$CHROMIUM_LOGO"
289
+ else
290
+ CHROMIUM_ICON=web-browser
291
+ fi
292
+ $SUDO tee /usr/share/applications/forge-chromium.desktop >/dev/null <<EOF
293
+ [Desktop Entry]
294
+ Version=1.0
295
+ Name=Chromium
296
+ Exec=${CHROMIUM_BIN} %U
297
+ Terminal=false
298
+ Icon=${CHROMIUM_ICON}
299
+ Type=Application
300
+ Categories=Network;WebBrowser;
301
+ EOF
302
+ echo "launcher_item_app = /usr/share/applications/forge-chromium.desktop" \
303
+ >> "${TINT2_DIR}/forge-dock.tint2rc"
304
+ else
305
+ log "playwright chromium not found; dock will render without a browser"
306
+ fi
307
+
308
+ # Then the table. Only advertise launchers whose .desktop file actually exists,
309
+ # so a package that failed to install leaves no broken tile behind.
310
+ echo "$FORGE_DOCK_APPS" | awk 'NF {print $2}' | while read -r app; do
311
+ entry="/usr/share/applications/${app}.desktop"
312
+ [ -f "$entry" ] && echo "launcher_item_app = ${entry}" >> "${TINT2_DIR}/forge-dock.tint2rc"
313
+ done
314
+
315
+ log "provisioned display shell for ${FORGE_DISPLAY}"
316
+ log "start commands: $0 --print-start"
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const require_chunk = require("./chunk-BhaIgcZK.cjs");
4
- const require_esm = require("./esm-BZhXwX5p.cjs");
5
- const require_execAsync$1 = require("./execAsync-jnYVB5RZ.cjs");
4
+ const require_esm = require("./esm-Do7HVhLA.cjs");
5
+ const require_execAsync$1 = require("./execAsync-BUcaFQ1D.cjs");
6
6
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-bsd.js
7
7
  var require_getMachineId_bsd = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -32,4 +32,4 @@ Object.defineProperty(exports, "default", {
32
32
  }
33
33
  });
34
34
 
35
- //# sourceMappingURL=getMachineId-bsd-BLtyMA4j.cjs.map
35
+ //# sourceMappingURL=getMachineId-bsd-C_qi9crE.cjs.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as __toCommonJS, i as __require, t as __commonJSMin } from "./chunk-C5ckVeoz.mjs";
4
- import { n as init_esm, t as esm_exports } from "./esm-wLIF-u3N.mjs";
5
- import { t as require_execAsync } from "./execAsync-DWZyWH-_.mjs";
4
+ import { n as init_esm, t as esm_exports } from "./esm-Ce1GqbVk.mjs";
5
+ import { t as require_execAsync } from "./execAsync-BNNdR88o.mjs";
6
6
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-bsd.js
7
7
  var require_getMachineId_bsd = /* @__PURE__ */ __commonJSMin(((exports) => {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -28,4 +28,4 @@ var require_getMachineId_bsd = /* @__PURE__ */ __commonJSMin(((exports) => {
28
28
  export default require_getMachineId_bsd();
29
29
  export {};
30
30
 
31
- //# sourceMappingURL=getMachineId-bsd-CTjiY7jG.mjs.map
31
+ //# sourceMappingURL=getMachineId-bsd-FI863wjR.mjs.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const require_chunk = require("./chunk-BhaIgcZK.cjs");
4
- const require_esm = require("./esm-BZhXwX5p.cjs");
5
- const require_execAsync$1 = require("./execAsync-jnYVB5RZ.cjs");
4
+ const require_esm = require("./esm-Do7HVhLA.cjs");
5
+ const require_execAsync$1 = require("./execAsync-BUcaFQ1D.cjs");
6
6
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-darwin.js
7
7
  var require_getMachineId_darwin = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -29,4 +29,4 @@ Object.defineProperty(exports, "default", {
29
29
  }
30
30
  });
31
31
 
32
- //# sourceMappingURL=getMachineId-darwin-DaGS2zUd.cjs.map
32
+ //# sourceMappingURL=getMachineId-darwin-BOoNuqXn.cjs.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as __toCommonJS, t as __commonJSMin } from "./chunk-C5ckVeoz.mjs";
4
- import { n as init_esm, t as esm_exports } from "./esm-wLIF-u3N.mjs";
5
- import { t as require_execAsync } from "./execAsync-DWZyWH-_.mjs";
4
+ import { n as init_esm, t as esm_exports } from "./esm-Ce1GqbVk.mjs";
5
+ import { t as require_execAsync } from "./execAsync-BNNdR88o.mjs";
6
6
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-darwin.js
7
7
  var require_getMachineId_darwin = /* @__PURE__ */ __commonJSMin(((exports) => {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -25,4 +25,4 @@ var require_getMachineId_darwin = /* @__PURE__ */ __commonJSMin(((exports) => {
25
25
  export default require_getMachineId_darwin();
26
26
  export {};
27
27
 
28
- //# sourceMappingURL=getMachineId-darwin-BrPuyPOo.mjs.map
28
+ //# sourceMappingURL=getMachineId-darwin-D9VhTaPM.mjs.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const require_chunk = require("./chunk-BhaIgcZK.cjs");
4
- const require_esm = require("./esm-BZhXwX5p.cjs");
4
+ const require_esm = require("./esm-Do7HVhLA.cjs");
5
5
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-linux.js
6
6
  var require_getMachineId_linux = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -25,4 +25,4 @@ Object.defineProperty(exports, "default", {
25
25
  }
26
26
  });
27
27
 
28
- //# sourceMappingURL=getMachineId-linux-BsP3wJaE.cjs.map
28
+ //# sourceMappingURL=getMachineId-linux-C9L-vW7m.cjs.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as __toCommonJS, i as __require, t as __commonJSMin } from "./chunk-C5ckVeoz.mjs";
4
- import { n as init_esm, t as esm_exports } from "./esm-wLIF-u3N.mjs";
4
+ import { n as init_esm, t as esm_exports } from "./esm-Ce1GqbVk.mjs";
5
5
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-linux.js
6
6
  var require_getMachineId_linux = /* @__PURE__ */ __commonJSMin(((exports) => {
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -21,4 +21,4 @@ var require_getMachineId_linux = /* @__PURE__ */ __commonJSMin(((exports) => {
21
21
  export default require_getMachineId_linux();
22
22
  export {};
23
23
 
24
- //# sourceMappingURL=getMachineId-linux-D9QEWWF-.mjs.map
24
+ //# sourceMappingURL=getMachineId-linux-DE2x36Kt.mjs.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as __toCommonJS, t as __commonJSMin } from "./chunk-C5ckVeoz.mjs";
4
- import { n as init_esm, t as esm_exports } from "./esm-wLIF-u3N.mjs";
4
+ import { n as init_esm, t as esm_exports } from "./esm-Ce1GqbVk.mjs";
5
5
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-unsupported.js
6
6
  var require_getMachineId_unsupported = /* @__PURE__ */ __commonJSMin(((exports) => {
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -16,4 +16,4 @@ var require_getMachineId_unsupported = /* @__PURE__ */ __commonJSMin(((exports)
16
16
  export default require_getMachineId_unsupported();
17
17
  export {};
18
18
 
19
- //# sourceMappingURL=getMachineId-unsupported-Cm-2s4Sg.mjs.map
19
+ //# sourceMappingURL=getMachineId-unsupported-9S6pcxXb.mjs.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const require_chunk = require("./chunk-BhaIgcZK.cjs");
4
- const require_esm = require("./esm-BZhXwX5p.cjs");
4
+ const require_esm = require("./esm-Do7HVhLA.cjs");
5
5
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-unsupported.js
6
6
  var require_getMachineId_unsupported = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -20,4 +20,4 @@ Object.defineProperty(exports, "default", {
20
20
  }
21
21
  });
22
22
 
23
- //# sourceMappingURL=getMachineId-unsupported-B_M-gck7.cjs.map
23
+ //# sourceMappingURL=getMachineId-unsupported-CmbM8LYa.cjs.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { a as __toCommonJS, i as __require, t as __commonJSMin } from "./chunk-C5ckVeoz.mjs";
4
- import { n as init_esm, t as esm_exports } from "./esm-wLIF-u3N.mjs";
5
- import { t as require_execAsync } from "./execAsync-DWZyWH-_.mjs";
4
+ import { n as init_esm, t as esm_exports } from "./esm-Ce1GqbVk.mjs";
5
+ import { t as require_execAsync } from "./execAsync-BNNdR88o.mjs";
6
6
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-win.js
7
7
  var require_getMachineId_win = /* @__PURE__ */ __commonJSMin(((exports) => {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -27,4 +27,4 @@ var require_getMachineId_win = /* @__PURE__ */ __commonJSMin(((exports) => {
27
27
  export default require_getMachineId_win();
28
28
  export {};
29
29
 
30
- //# sourceMappingURL=getMachineId-win-qtEKaUYj.mjs.map
30
+ //# sourceMappingURL=getMachineId-win-0EVRuBxU.mjs.map
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const require_chunk = require("./chunk-BhaIgcZK.cjs");
4
- const require_esm = require("./esm-BZhXwX5p.cjs");
5
- const require_execAsync$1 = require("./execAsync-jnYVB5RZ.cjs");
4
+ const require_esm = require("./esm-Do7HVhLA.cjs");
5
+ const require_execAsync$1 = require("./execAsync-BUcaFQ1D.cjs");
6
6
  //#region ../../node_modules/.bun/@opentelemetry+resources@2.10.0+e40b0dfdd726a224/node_modules/@opentelemetry/resources/build/src/detectors/platform/node/machine-id/getMachineId-win.js
7
7
  var require_getMachineId_win = /* @__PURE__ */ require_chunk.__commonJSMin(((exports) => {
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -31,4 +31,4 @@ Object.defineProperty(exports, "default", {
31
31
  }
32
32
  });
33
33
 
34
- //# sourceMappingURL=getMachineId-win-3zJ3HQLG.cjs.map
34
+ //# sourceMappingURL=getMachineId-win-BPaemVew.cjs.map
@@ -598,4 +598,4 @@ exports.apps = apps;
598
598
  exports.default = open;
599
599
  exports.openApp = openApp;
600
600
 
601
- //# sourceMappingURL=open-CGXZLos4.cjs.map
601
+ //# sourceMappingURL=open-BAsPVCWX.cjs.map
@@ -589,4 +589,4 @@ defineLazyProperty(apps, "safari", () => detectPlatformBinary({ darwin: "Safari"
589
589
  //#endregion
590
590
  export { apps, open as default, openApp };
591
591
 
592
- //# sourceMappingURL=open-Cf0bgbyx.mjs.map
592
+ //# sourceMappingURL=open-FIgTDosf.mjs.map
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
+ require("./chunk-BhaIgcZK.cjs");
5
+ const require_runtimeControlAuthority = require("./runtimeControlAuthority-SNBF5Mjy.cjs");
6
+ exports.bootstrapRuntimeControlAuthorityFromNarrowGrant = require_runtimeControlAuthority.bootstrapRuntimeControlAuthorityFromNarrowGrant;
7
+ exports.setRuntimeGrantToken = require_runtimeControlAuthority.setRuntimeGrantToken;
8
+ exports.verifyCmmdRuntimeTicket = require_runtimeControlAuthority.verifyCmmdRuntimeTicket;
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { n as bootstrapRuntimeControlAuthorityFromNarrowGrant, s as verifyCmmdRuntimeTicket, u as setRuntimeGrantToken } from "./runtimeControlAuthority-L85w5RTn.mjs";
4
+ export { bootstrapRuntimeControlAuthorityFromNarrowGrant, setRuntimeGrantToken, verifyCmmdRuntimeTicket };