@wildo-ai/application-creation-workbench 1.1.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 (562) hide show
  1. package/LICENSE +34 -0
  2. package/bin/companion-proxy.d.mts +10 -0
  3. package/bin/companion-proxy.mjs +92 -0
  4. package/bin/wildo-workbench-serve.mjs +76 -0
  5. package/bin/workbench-server.d.mts +9 -0
  6. package/bin/workbench-server.mjs +225 -0
  7. package/dist/.vite/manifest.json +4671 -0
  8. package/dist/assets/ApplicationLevel_Toolbar-BddtfgIS.js +1 -0
  9. package/dist/assets/ChartEmptyState-lsMuirLh.js +1 -0
  10. package/dist/assets/ChartView-BTIzMUoU.js +56 -0
  11. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  12. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  13. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  14. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  15. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  16. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  17. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  18. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  19. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  20. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  21. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  22. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  23. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  24. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  25. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  26. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  27. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  28. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  29. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  30. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  31. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  32. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  33. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  34. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  35. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  36. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  37. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  38. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  39. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  40. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  41. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  42. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  43. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  44. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  45. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  46. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  47. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  48. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  49. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  50. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  51. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  52. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  53. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  54. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  55. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  56. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  57. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  58. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  59. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  60. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  61. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  62. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  63. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  64. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  65. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  66. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  67. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  68. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  69. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  70. package/dist/assets/_basePickBy-Br6YuOAk.js +1 -0
  71. package/dist/assets/_baseUniq-K10bxMjs.js +1 -0
  72. package/dist/assets/abap-BdImnpbu.js +1 -0
  73. package/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
  74. package/dist/assets/ada-bCR0ucgS.js +1 -0
  75. package/dist/assets/andromeeda-C4gqWexZ.js +1 -0
  76. package/dist/assets/angular-html-BibvgTKn.js +1 -0
  77. package/dist/assets/angular-ts-DSBE9URv.js +1 -0
  78. package/dist/assets/apache-lxgVPsR9.js +1 -0
  79. package/dist/assets/apex-D8_7TLub.js +1 -0
  80. package/dist/assets/apl-B4CMkyY2.js +1 -0
  81. package/dist/assets/apl-C1AdydMG.js +1 -0
  82. package/dist/assets/applescript-Co6uUVPk.js +1 -0
  83. package/dist/assets/ara-BRHolxvo.js +1 -0
  84. package/dist/assets/arc-hTvUi_Jd.js +1 -0
  85. package/dist/assets/architectureDiagram-VXUJARFQ-DTNeQb21.js +36 -0
  86. package/dist/assets/asciiarmor-Df11BRmG.js +1 -0
  87. package/dist/assets/asciidoc-Dv7Oe6Be.js +1 -0
  88. package/dist/assets/asm-D_Q5rh1f.js +1 -0
  89. package/dist/assets/asn1-EdZsLKOL.js +1 -0
  90. package/dist/assets/asterisk-B-8jnY81.js +1 -0
  91. package/dist/assets/astro-BfIczeRD.js +1 -0
  92. package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
  93. package/dist/assets/awk-DMzUqQB5.js +1 -0
  94. package/dist/assets/ayu-dark-CMjwMIkn.js +1 -0
  95. package/dist/assets/ayu-light-C47S-Tmv.js +1 -0
  96. package/dist/assets/ayu-mirage-CjoLj4QM.js +1 -0
  97. package/dist/assets/ballerina-BFfxhgS-.js +1 -0
  98. package/dist/assets/bat-BkioyH1T.js +1 -0
  99. package/dist/assets/beancount-k_qm7-4y.js +1 -0
  100. package/dist/assets/berry-uYugtg8r.js +1 -0
  101. package/dist/assets/bibtex-CHM0blh-.js +1 -0
  102. package/dist/assets/bicep-Bmn6On1c.js +1 -0
  103. package/dist/assets/blade-rVcPaKug.js +1 -0
  104. package/dist/assets/blockDiagram-VD42YOAC-CMGydNsH.js +122 -0
  105. package/dist/assets/brainfuck-C4LP7Hcl.js +1 -0
  106. package/dist/assets/bsl-BO_Y6i37.js +1 -0
  107. package/dist/assets/c-C1AIvcHK.js +1 -0
  108. package/dist/assets/c3-VCDPK7BO.js +1 -0
  109. package/dist/assets/c4Diagram-YG6GDRKO-CTiIMIz5.js +10 -0
  110. package/dist/assets/cadence-Bv_4Rxtq.js +1 -0
  111. package/dist/assets/cairo-Cm-xO6tP.js +1 -0
  112. package/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  113. package/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  114. package/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  115. package/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  116. package/dist/assets/channel-DlvOdQcG.js +1 -0
  117. package/dist/assets/chunk-4BX2VUAB-CBDMQNPS.js +1 -0
  118. package/dist/assets/chunk-55IACEB6-CEmaVN-l.js +1 -0
  119. package/dist/assets/chunk-B4BG7PRW-BuRJMfnQ.js +165 -0
  120. package/dist/assets/chunk-DI55MBZ5-DTEvZEyn.js +220 -0
  121. package/dist/assets/chunk-FMBD7UC4-CQL6IezS.js +15 -0
  122. package/dist/assets/chunk-QN33PNHL-DIt1i8tt.js +1 -0
  123. package/dist/assets/chunk-QZHKN3VN-C8CdhpgW.js +1 -0
  124. package/dist/assets/chunk-TZMSLE5B-2nOqyQPZ.js +1 -0
  125. package/dist/assets/clarity-D53aC0YG.js +1 -0
  126. package/dist/assets/classDiagram-2ON5EDUG-CJonpGbc.js +1 -0
  127. package/dist/assets/classDiagram-v2-WZHVMYZB-CJonpGbc.js +1 -0
  128. package/dist/assets/clike-B9uivgTg.js +1 -0
  129. package/dist/assets/clojure-BMjYHr_A.js +1 -0
  130. package/dist/assets/clojure-P80f7IUj.js +1 -0
  131. package/dist/assets/clone-B5BftoQk.js +1 -0
  132. package/dist/assets/cm6-editor-C1am2PUt.js +13 -0
  133. package/dist/assets/cmake-BQqOBYOt.js +1 -0
  134. package/dist/assets/cmake-D1j8_8rp.js +1 -0
  135. package/dist/assets/cobol-C7Z7w_7P.js +1 -0
  136. package/dist/assets/cobol-CWcv1MsR.js +1 -0
  137. package/dist/assets/code-block-IT6T5CEO-rvNI7Npg.js +3 -0
  138. package/dist/assets/codeowners-Bp6g37R7.js +1 -0
  139. package/dist/assets/codeql-DsOJ9woJ.js +1 -0
  140. package/dist/assets/coffee-EZ7qTA2h.js +1 -0
  141. package/dist/assets/coffeescript-S37ZYGWr.js +1 -0
  142. package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
  143. package/dist/assets/commonlisp-DBKNyK5s.js +1 -0
  144. package/dist/assets/context-CjDY9wk7.js +1 -0
  145. package/dist/assets/coq-DkFqJrB1.js +1 -0
  146. package/dist/assets/cose-bilkent-S5V4N54A-Bs72jpo-.js +1 -0
  147. package/dist/assets/cpp-Cw-Qy0wQ.js +1 -0
  148. package/dist/assets/crystal-B7GPGo2j.js +1 -0
  149. package/dist/assets/crystal-SjHAIU92.js +1 -0
  150. package/dist/assets/csharp-B4XBOl5S.js +1 -0
  151. package/dist/assets/css-2F-grhOV.js +1 -0
  152. package/dist/assets/css-BnMrqG3P.js +1 -0
  153. package/dist/assets/csv-fuZLfV_i.js +1 -0
  154. package/dist/assets/cue-D82EKSYY.js +1 -0
  155. package/dist/assets/cypher-COkxafJQ.js +1 -0
  156. package/dist/assets/cypher-C_CwsFkJ.js +1 -0
  157. package/dist/assets/cytoscape.esm-YEldwGKK.js +331 -0
  158. package/dist/assets/d-85-TOEBH.js +1 -0
  159. package/dist/assets/d-pRatUO7H.js +1 -0
  160. package/dist/assets/dagre-6UL2VRFP-e0N82ZeJ.js +4 -0
  161. package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
  162. package/dist/assets/dart-CF10PKvl.js +1 -0
  163. package/dist/assets/dax-CEL-wOlO.js +1 -0
  164. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  165. package/dist/assets/desktop-BmXAJ9_W.js +1 -0
  166. package/dist/assets/diagram-PSM6KHXK-Wp6Xds16.js +24 -0
  167. package/dist/assets/diagram-QEK2KX5R-DrkkEGhC.js +43 -0
  168. package/dist/assets/diagram-S2PKOQOG-C3M-VMYn.js +24 -0
  169. package/dist/assets/diff-D97Zzqfu.js +1 -0
  170. package/dist/assets/diff-DbItnlRl.js +1 -0
  171. package/dist/assets/docker-BCahEMMT.js +1 -0
  172. package/dist/assets/dockerfile-BKs6k2Af.js +1 -0
  173. package/dist/assets/dotenv-Da5cRb03.js +1 -0
  174. package/dist/assets/dracula-BzJJZx-M.js +1 -0
  175. package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
  176. package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
  177. package/dist/assets/dropbox-picker-BcRq4q-0.js +1 -0
  178. package/dist/assets/dtd-DF_7sFjM.js +1 -0
  179. package/dist/assets/dylan-DwRh75JA.js +1 -0
  180. package/dist/assets/ebnf-CDyGwa7X.js +1 -0
  181. package/dist/assets/ecl-Cabwm37j.js +1 -0
  182. package/dist/assets/edge-D9RNxeM6.js +1 -0
  183. package/dist/assets/eiffel-CnydiIhH.js +1 -0
  184. package/dist/assets/elixir-DY-rJNf_.js +1 -0
  185. package/dist/assets/elm-BpNGpWvw.js +1 -0
  186. package/dist/assets/elm-vLlmbW-K.js +1 -0
  187. package/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
  188. package/dist/assets/engine-compile-BvZd6IhL.js +152 -0
  189. package/dist/assets/erDiagram-Q2GNP2WA-Dg-rHIsN.js +60 -0
  190. package/dist/assets/erb-CCmIx0ZV.js +1 -0
  191. package/dist/assets/erlang-BNw1qcRV.js +1 -0
  192. package/dist/assets/erlang-DtoCRGpr.js +1 -0
  193. package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
  194. package/dist/assets/everforest-light-C8M2exoo.js +1 -0
  195. package/dist/assets/factor-kuTfRLto.js +1 -0
  196. package/dist/assets/fcl-Kvtd6kyn.js +1 -0
  197. package/dist/assets/fennel-BYunw83y.js +1 -0
  198. package/dist/assets/fish-BvzEVeQv.js +1 -0
  199. package/dist/assets/flowDiagram-NV44I4VS-BP-XXSqP.js +162 -0
  200. package/dist/assets/flows-actors-graph-runtime-C8pD81-m.js +1 -0
  201. package/dist/assets/fluent-C4IJs8-o.js +1 -0
  202. package/dist/assets/forth-Ffai-XNe.js +1 -0
  203. package/dist/assets/fortran-DYz_wnZ1.js +1 -0
  204. package/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  205. package/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
  206. package/dist/assets/fsharp-pDgLt1ed.js +1 -0
  207. package/dist/assets/ganttDiagram-JELNMOA3-CroPqWYF.js +267 -0
  208. package/dist/assets/gas-Bneqetm1.js +1 -0
  209. package/dist/assets/gdresource-BOOCDP_w.js +1 -0
  210. package/dist/assets/gdscript-C5YyOfLZ.js +1 -0
  211. package/dist/assets/gdshader-DkwncUOv.js +1 -0
  212. package/dist/assets/genie-D0YGMca9.js +1 -0
  213. package/dist/assets/gherkin-DyxjwDmM.js +1 -0
  214. package/dist/assets/gherkin-heZmZLOM.js +1 -0
  215. package/dist/assets/git-commit-F4YmCXRG.js +1 -0
  216. package/dist/assets/git-rebase-CXlyqdRO.js +1 -0
  217. package/dist/assets/gitGraphDiagram-V2S2FVAM-DC9FCbno.js +65 -0
  218. package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
  219. package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  220. package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  221. package/dist/assets/github-dark-nz1Ug7wa.js +1 -0
  222. package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
  223. package/dist/assets/github-light-hIqfNsk6.js +1 -0
  224. package/dist/assets/github-light-high-contrast-6z6OUpro.js +1 -0
  225. package/dist/assets/gleam-BspZqrRM.js +1 -0
  226. package/dist/assets/glimmer-js-4PGhN-7r.js +1 -0
  227. package/dist/assets/glimmer-ts-kVLhaHhe.js +1 -0
  228. package/dist/assets/glsl-CX9owe7H.js +1 -0
  229. package/dist/assets/gn-n2N0HUVH.js +1 -0
  230. package/dist/assets/gnuplot-DdkO51Og.js +1 -0
  231. package/dist/assets/go-By8Zikic.js +1 -0
  232. package/dist/assets/google-drive-picker-B7-UtQYR.js +1 -0
  233. package/dist/assets/graph-C0dMcX0W.js +1 -0
  234. package/dist/assets/graph-runtime-BZV40eAE.css +1 -0
  235. package/dist/assets/graph-runtime-CWiE-wtz.js +1 -0
  236. package/dist/assets/graphql-Ezmk7T_o.js +1 -0
  237. package/dist/assets/groovy-D9Dt4D0W.js +1 -0
  238. package/dist/assets/groovy-gcz8RCvz.js +1 -0
  239. package/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  240. package/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  241. package/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  242. package/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  243. package/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  244. package/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  245. package/dist/assets/hack-maT9pS_L.js +1 -0
  246. package/dist/assets/haml-BrME_4GE.js +1 -0
  247. package/dist/assets/handlebars-iR92xn-S.js +1 -0
  248. package/dist/assets/haskell-Cw1EW3IL.js +1 -0
  249. package/dist/assets/haskell-Df6bDoY_.js +1 -0
  250. package/dist/assets/haxe-CzTSHFRz.js +1 -0
  251. package/dist/assets/haxe-H-WmDvRZ.js +1 -0
  252. package/dist/assets/hcl-BWvSN4gD.js +1 -0
  253. package/dist/assets/hjson-D5-asLiD.js +1 -0
  254. package/dist/assets/hlsl-D3lLCCz7.js +1 -0
  255. package/dist/assets/horizon-BUw7H-hv.js +1 -0
  256. package/dist/assets/houston-DnULxvSX.js +1 -0
  257. package/dist/assets/html-CGdhS0W0.js +1 -0
  258. package/dist/assets/html-derivative-BEJpVzmk.js +1 -0
  259. package/dist/assets/http-Bb_wsZIK.js +1 -0
  260. package/dist/assets/http-DBlCnlav.js +1 -0
  261. package/dist/assets/hurl-Crl3N93z.js +1 -0
  262. package/dist/assets/hxml-Bvhsp5Yf.js +1 -0
  263. package/dist/assets/hy-DFXneXwc.js +1 -0
  264. package/dist/assets/idl-BEugSyMb.js +1 -0
  265. package/dist/assets/imba-DGztddWO.js +1 -0
  266. package/dist/assets/index-9s27iSag.js +13 -0
  267. package/dist/assets/index-B4dr2goB.js +1 -0
  268. package/dist/assets/index-BOiBO34F.js +1 -0
  269. package/dist/assets/index-BOxxilol.js +1 -0
  270. package/dist/assets/index-Be7Kt732.js +1 -0
  271. package/dist/assets/index-Bgs_pC_Y.js +1 -0
  272. package/dist/assets/index-BkvM_lMh.js +1 -0
  273. package/dist/assets/index-COFqdHy-.js +7 -0
  274. package/dist/assets/index-Cey0RnOC.js +2 -0
  275. package/dist/assets/index-Cl_eCn7w.js +1 -0
  276. package/dist/assets/index-Cn1WDMib.js +1 -0
  277. package/dist/assets/index-D2Lcurso.js +994 -0
  278. package/dist/assets/index-D5kqp6s0.js +1 -0
  279. package/dist/assets/index-D7UJLb5I.js +1 -0
  280. package/dist/assets/index-D9v8TSci.js +1 -0
  281. package/dist/assets/index-DKCAweKx.js +1 -0
  282. package/dist/assets/index-DPnXh7rr.js +6 -0
  283. package/dist/assets/index-DPuqBa_G.js +499 -0
  284. package/dist/assets/index-DZopo5F6.js +1 -0
  285. package/dist/assets/index-Df0eJHBm.js +6 -0
  286. package/dist/assets/index-DlJDBjRm.js +1 -0
  287. package/dist/assets/index-Dq0jp-Om.js +1 -0
  288. package/dist/assets/index-Dq_EnMVo.js +1 -0
  289. package/dist/assets/index-DrKP8dhg.js +1 -0
  290. package/dist/assets/index-DvFC4HED.js +1 -0
  291. package/dist/assets/index-ZpEoSVCX.js +1 -0
  292. package/dist/assets/index-e-4cSkrt.js +1 -0
  293. package/dist/assets/index-nHF1ekZC.css +1 -0
  294. package/dist/assets/index-t42UNDS6.js +3 -0
  295. package/dist/assets/index-wtSklh0n.js +367 -0
  296. package/dist/assets/index.es-OTtV-Qaj.js +11 -0
  297. package/dist/assets/infoDiagram-HS3SLOUP-BumgayY_.js +2 -0
  298. package/dist/assets/ini-BEwlwnbL.js +1 -0
  299. package/dist/assets/init-Gi6I4Gst.js +1 -0
  300. package/dist/assets/java-B1ZIgn8J.js +1 -0
  301. package/dist/assets/javascript-DB3RxkHZ.js +1 -0
  302. package/dist/assets/javascript-iXu5QeM3.js +1 -0
  303. package/dist/assets/jinja-CExX7mQY.js +1 -0
  304. package/dist/assets/jison-ByLJaaPa.js +1 -0
  305. package/dist/assets/journeyDiagram-XKPGCS4Q-C5l-W_D3.js +139 -0
  306. package/dist/assets/json-BHNwtY8x.js +1 -0
  307. package/dist/assets/json5-C9tS-k6U.js +1 -0
  308. package/dist/assets/jsonc-Des-eS-w.js +1 -0
  309. package/dist/assets/jsonl-DcaNXYhu.js +1 -0
  310. package/dist/assets/jsonnet-DFQXde-d.js +1 -0
  311. package/dist/assets/jssm-C2t-YnRu.js +1 -0
  312. package/dist/assets/jsx-g9-lgVsj.js +1 -0
  313. package/dist/assets/julia-Cp2WDBBU.js +1 -0
  314. package/dist/assets/julia-DuME0IfC.js +1 -0
  315. package/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  316. package/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  317. package/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
  318. package/dist/assets/kanban-definition-3W4ZIXB7-B__BbWoq.js +89 -0
  319. package/dist/assets/katex-mBojCVha.css +1 -0
  320. package/dist/assets/kdl-DV7GczEv.js +1 -0
  321. package/dist/assets/kotlin-sgMXoC0-.js +1 -0
  322. package/dist/assets/kusto-DZf3V79B.js +1 -0
  323. package/dist/assets/laserwave-DUszq2jm.js +1 -0
  324. package/dist/assets/latex-DGMBWnxU.js +1 -0
  325. package/dist/assets/layout-Ct3mCMS9.js +1 -0
  326. package/dist/assets/lean-BZvkOJ9d.js +1 -0
  327. package/dist/assets/less-DdoiPXMy.js +1 -0
  328. package/dist/assets/light-plus-B7mTdjB0.js +1 -0
  329. package/dist/assets/linear-Dz3rN3XM.js +1 -0
  330. package/dist/assets/liquid-Bgq501XT.js +1 -0
  331. package/dist/assets/livescript-BwQOo05w.js +1 -0
  332. package/dist/assets/llvm-BtvRca6l.js +1 -0
  333. package/dist/assets/log-2UxHyX5q.js +1 -0
  334. package/dist/assets/logo-BtOb2qkB.js +1 -0
  335. package/dist/assets/lua-Bs6SvAw9.js +1 -0
  336. package/dist/assets/lua-VAEuO923.js +1 -0
  337. package/dist/assets/luau-C-HG3fhB.js +1 -0
  338. package/dist/assets/make-CHLpvVh8.js +1 -0
  339. package/dist/assets/markdown-Dt3v3XWf.js +1 -0
  340. package/dist/assets/marko-CKEO3SBW.js +1 -0
  341. package/dist/assets/material-theme-D5KoaKCx.js +1 -0
  342. package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
  343. package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  344. package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
  345. package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  346. package/dist/assets/mathematica-DTrFuWx2.js +1 -0
  347. package/dist/assets/matlab-D7o27uSR.js +1 -0
  348. package/dist/assets/mbox-CNhZ1qSd.js +1 -0
  349. package/dist/assets/mdc-BCNxBr-G.js +1 -0
  350. package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
  351. package/dist/assets/mermaid-VLURNSYL-C4UDY296.js +386 -0
  352. package/dist/assets/mermaid-mWjccvbQ.js +1 -0
  353. package/dist/assets/mermaid.core-CRNTw-K2.js +197 -0
  354. package/dist/assets/min-dark-CafNBF8u.js +1 -0
  355. package/dist/assets/min-light-CTRr51gU.js +1 -0
  356. package/dist/assets/mindmap-definition-VGOIOE7T-Dns6Jp-h.js +68 -0
  357. package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
  358. package/dist/assets/mirc-CjQqDB4T.js +1 -0
  359. package/dist/assets/mllike-CXdrOF99.js +1 -0
  360. package/dist/assets/modelica-Dc1JOy9r.js +1 -0
  361. package/dist/assets/mojo-B93PlW-d.js +1 -0
  362. package/dist/assets/monokai-D4h5O-jR.js +1 -0
  363. package/dist/assets/moonbit-Ba13S78F.js +1 -0
  364. package/dist/assets/move-IF9eRakj.js +1 -0
  365. package/dist/assets/mscgen-BA5vi2Kp.js +1 -0
  366. package/dist/assets/mumps-BT43cFF4.js +1 -0
  367. package/dist/assets/narrat-DRg8JJMk.js +1 -0
  368. package/dist/assets/nextflow-BrzmwbiE.js +1 -0
  369. package/dist/assets/nginx-DMb6Hdes.js +1 -0
  370. package/dist/assets/nginx-DdIZxoE0.js +1 -0
  371. package/dist/assets/night-owl-C39BiMTA.js +1 -0
  372. package/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
  373. package/dist/assets/nim-DIRWUau3.js +1 -0
  374. package/dist/assets/nix-CwoSXNpI.js +1 -0
  375. package/dist/assets/nord-Ddv68eIx.js +1 -0
  376. package/dist/assets/nsis-LdVXkNf5.js +1 -0
  377. package/dist/assets/ntriples-BfvgReVJ.js +1 -0
  378. package/dist/assets/nushell-C-sUppwS.js +1 -0
  379. package/dist/assets/objective-c-DXmwc3jG.js +1 -0
  380. package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
  381. package/dist/assets/ocaml-C0hk2d4L.js +1 -0
  382. package/dist/assets/octave-Ck1zUtKM.js +1 -0
  383. package/dist/assets/odin-BBf5iR-q.js +1 -0
  384. package/dist/assets/one-dark-pro-D285M-o5.js +1 -0
  385. package/dist/assets/one-light-C3Wv6jpd.js +1 -0
  386. package/dist/assets/onedrive-picker-ClfxORZE.js +1 -0
  387. package/dist/assets/openscad-C4EeE6gA.js +1 -0
  388. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  389. package/dist/assets/oz-BzwKVEFT.js +1 -0
  390. package/dist/assets/pascal--L3eBynH.js +1 -0
  391. package/dist/assets/pascal-D93ZcfNL.js +1 -0
  392. package/dist/assets/pdf-viewer-BSApg-uG.js +55 -0
  393. package/dist/assets/pdf-viewer-worker-jo3vTKcN.js +2 -0
  394. package/dist/assets/pdf-viewer-worker.vite-B-r9dkPE.js +1 -0
  395. package/dist/assets/pdf.worker.min-C2fI36uq.js +53 -0
  396. package/dist/assets/perl-CdXCOZ3F.js +1 -0
  397. package/dist/assets/perl-D3Vg76T_.js +1 -0
  398. package/dist/assets/php-DT7n7RcQ.js +1 -0
  399. package/dist/assets/pieDiagram-ADFJNKIX-B8Jsapz3.js +30 -0
  400. package/dist/assets/pig-CevX1Tat.js +1 -0
  401. package/dist/assets/pkl-u5AG7uiY.js +1 -0
  402. package/dist/assets/plastic-3e1v2bzS.js +1 -0
  403. package/dist/assets/plsql-ChMvpjG-.js +1 -0
  404. package/dist/assets/po-BTJTHyun.js +1 -0
  405. package/dist/assets/poimandres-CS3Unz2-.js +1 -0
  406. package/dist/assets/polar-C0HS_06l.js +1 -0
  407. package/dist/assets/postcss-CXtECtnM.js +1 -0
  408. package/dist/assets/powerquery-CEu0bR-o.js +1 -0
  409. package/dist/assets/powershell-CFHJl5sT.js +1 -0
  410. package/dist/assets/powershell-DBcoQAf-.js +1 -0
  411. package/dist/assets/prisma-Dd19v3D-.js +1 -0
  412. package/dist/assets/prolog-CbFg5uaA.js +1 -0
  413. package/dist/assets/properties-C78fOPTZ.js +1 -0
  414. package/dist/assets/proto-C7zT0LnQ.js +1 -0
  415. package/dist/assets/protobuf-ChK-085T.js +1 -0
  416. package/dist/assets/pug-DJeKe7bg.js +1 -0
  417. package/dist/assets/pug-DeIclll2.js +1 -0
  418. package/dist/assets/puppet-BMWR74SV.js +1 -0
  419. package/dist/assets/puppet-DMA9R1ak.js +1 -0
  420. package/dist/assets/purescript-CklMAg4u.js +1 -0
  421. package/dist/assets/python-BuPzkPfP.js +1 -0
  422. package/dist/assets/python-DWrqmXJp.js +1 -0
  423. package/dist/assets/q-pXgVlZs6.js +1 -0
  424. package/dist/assets/qml-BRuqEUvJ.js +1 -0
  425. package/dist/assets/qmldir-C8lEn-DE.js +1 -0
  426. package/dist/assets/qss-IeuSbFQv.js +1 -0
  427. package/dist/assets/quadrantDiagram-AYHSOK5B-C-kQhqve.js +7 -0
  428. package/dist/assets/r-B6wPVr8A.js +1 -0
  429. package/dist/assets/r-Dspwwk_N.js +1 -0
  430. package/dist/assets/racket-BqYA7rlc.js +1 -0
  431. package/dist/assets/raku-DXvB9xmW.js +1 -0
  432. package/dist/assets/razor-CzA984p4.js +1 -0
  433. package/dist/assets/red-bN70gL4F.js +1 -0
  434. package/dist/assets/reg-C-SQnVFl.js +1 -0
  435. package/dist/assets/regexp-CDVJQ6XC.js +1 -0
  436. package/dist/assets/rel-C3B-1QV4.js +1 -0
  437. package/dist/assets/requirementDiagram-UZGBJVZJ-CCFa12OF.js +64 -0
  438. package/dist/assets/riscv-BM1_JUlF.js +1 -0
  439. package/dist/assets/ron-BhRPY-oY.js +1 -0
  440. package/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  441. package/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  442. package/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
  443. package/dist/assets/rosmsg-BJDFO7_C.js +1 -0
  444. package/dist/assets/rpm-CTu-6PCP.js +1 -0
  445. package/dist/assets/rst-2zNva11Y.js +1 -0
  446. package/dist/assets/ruby-B2Rjki9n.js +1 -0
  447. package/dist/assets/ruby-DmXPWWCu.js +1 -0
  448. package/dist/assets/rust-BBYK4zRa.js +1 -0
  449. package/dist/assets/sankeyDiagram-TZEHDZUN-COr9DFuT.js +10 -0
  450. package/dist/assets/sas-B4kiWyti.js +1 -0
  451. package/dist/assets/sas-DmZASBe0.js +1 -0
  452. package/dist/assets/sass-Cj5Yp3dK.js +1 -0
  453. package/dist/assets/scala-SE1iKWUP.js +1 -0
  454. package/dist/assets/scheme-C41bIUwD.js +1 -0
  455. package/dist/assets/scheme-C98Dy4si.js +1 -0
  456. package/dist/assets/scss-DsF9DJKc.js +1 -0
  457. package/dist/assets/sdbl-DVxCFoDh.js +1 -0
  458. package/dist/assets/sequenceDiagram-WL72ISMW-B6sTQliE.js +145 -0
  459. package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
  460. package/dist/assets/shell-CjFT_Tl9.js +1 -0
  461. package/dist/assets/shellscript-SHvotRv0.js +1 -0
  462. package/dist/assets/shellsession-Dtw7k0Yt.js +1 -0
  463. package/dist/assets/shiki-highlighter-runtime-D7okHLco.js +2 -0
  464. package/dist/assets/sieve-C3Gn_uJK.js +1 -0
  465. package/dist/assets/simple-mode-GW_nhZxv.js +1 -0
  466. package/dist/assets/slack-dark-BthQWCQV.js +1 -0
  467. package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
  468. package/dist/assets/smalltalk-BERRCDM3.js +1 -0
  469. package/dist/assets/smalltalk-CnHTOXQT.js +1 -0
  470. package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
  471. package/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
  472. package/dist/assets/solarized-light-L9t79GZl.js +1 -0
  473. package/dist/assets/solidity-rGO070M0.js +1 -0
  474. package/dist/assets/solr-DehyRSwq.js +1 -0
  475. package/dist/assets/soy-uR-UO2eq.js +1 -0
  476. package/dist/assets/sparql-DkYu6x3z.js +1 -0
  477. package/dist/assets/sparql-rVzFXLq3.js +1 -0
  478. package/dist/assets/splunk-BtCnVYZw.js +1 -0
  479. package/dist/assets/spreadsheet-BCZA_wO0.js +1 -0
  480. package/dist/assets/sql-CkNxgkeS.js +1 -0
  481. package/dist/assets/sql-D0XecflT.js +1 -0
  482. package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
  483. package/dist/assets/stata-DVBxQR2G.js +1 -0
  484. package/dist/assets/stateDiagram-FKZM4ZOC-Dpg3xi0D.js +1 -0
  485. package/dist/assets/stateDiagram-v2-4FDKWEC3-CK1yFthu.js +1 -0
  486. package/dist/assets/stex-C3f8Ysf7.js +1 -0
  487. package/dist/assets/stylus-B533Al4x.js +1 -0
  488. package/dist/assets/stylus-BEDo0Tqx.js +1 -0
  489. package/dist/assets/surrealql-CId8jo-x.js +1 -0
  490. package/dist/assets/svelte-B5J3Hg63.js +1 -0
  491. package/dist/assets/swift-B0ofQ8RM.js +1 -0
  492. package/dist/assets/swift-BzpIVaGY.js +1 -0
  493. package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
  494. package/dist/assets/system-verilog-CnnmHF94.js +1 -0
  495. package/dist/assets/systemd-4A_iFExJ.js +1 -0
  496. package/dist/assets/talonscript-CkByrt1z.js +1 -0
  497. package/dist/assets/tasl-QIJgUcNo.js +1 -0
  498. package/dist/assets/tcl-DVfN8rqt.js +1 -0
  499. package/dist/assets/tcl-dwOrl1Do.js +1 -0
  500. package/dist/assets/templ--uRs7fp8.js +1 -0
  501. package/dist/assets/terraform-BETggiCN.js +1 -0
  502. package/dist/assets/tex-CvyZ59Mk.js +1 -0
  503. package/dist/assets/textile-CnDTJFAw.js +1 -0
  504. package/dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
  505. package/dist/assets/tiki-DGYXhP31.js +1 -0
  506. package/dist/assets/timeline-definition-IT6M3QCI-DZBb9YJX.js +61 -0
  507. package/dist/assets/tokyo-night-hegEt444.js +1 -0
  508. package/dist/assets/toml-Bm5Em-hy.js +1 -0
  509. package/dist/assets/toml-vGWfd6FD.js +1 -0
  510. package/dist/assets/treemap-GDKQZRPO-Oo1I1edJ.js +160 -0
  511. package/dist/assets/troff-wAsdV37c.js +1 -0
  512. package/dist/assets/ts-tags-D4tKSV7t.js +1 -0
  513. package/dist/assets/tsv-B_m7g4N7.js +1 -0
  514. package/dist/assets/tsx-COt5Ahok.js +1 -0
  515. package/dist/assets/ttcn-CfJYG6tj.js +1 -0
  516. package/dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
  517. package/dist/assets/turtle-B1tBg_DP.js +1 -0
  518. package/dist/assets/turtle-BsS91CYL.js +1 -0
  519. package/dist/assets/twig-BbcE4EvC.js +1 -0
  520. package/dist/assets/typescript-CCfADO3_.js +1 -0
  521. package/dist/assets/typespec-BGHnOYBU.js +1 -0
  522. package/dist/assets/typst-DHCkPAjA.js +1 -0
  523. package/dist/assets/v-BcVCzyr7.js +1 -0
  524. package/dist/assets/vala-CsfeWuGM.js +1 -0
  525. package/dist/assets/vb-CmGdzxic.js +1 -0
  526. package/dist/assets/vb-D17OF-Vu.js +1 -0
  527. package/dist/assets/vbscript-BuJXcnF6.js +1 -0
  528. package/dist/assets/velocity-D8B20fx6.js +1 -0
  529. package/dist/assets/verilog-BQ8w6xss.js +1 -0
  530. package/dist/assets/verilog-C6RDOZhf.js +1 -0
  531. package/dist/assets/vesper-DU1UobuO.js +1 -0
  532. package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
  533. package/dist/assets/vhdl-lSbBsy5d.js +1 -0
  534. package/dist/assets/viml-CJc9bBzg.js +1 -0
  535. package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
  536. package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
  537. package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
  538. package/dist/assets/vue-_y7Uqjzm.js +1 -0
  539. package/dist/assets/vue-html-DwslK3cu.js +1 -0
  540. package/dist/assets/vue-vine-BZmWytvS.js +1 -0
  541. package/dist/assets/vyper-CDx5xZoG.js +1 -0
  542. package/dist/assets/wasm-CG6Dc4jp.js +1 -0
  543. package/dist/assets/wasm-MzD3tlZU.js +1 -0
  544. package/dist/assets/webidl-ZXfAyPTL.js +1 -0
  545. package/dist/assets/wenyan-BV7otONQ.js +1 -0
  546. package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
  547. package/dist/assets/wikitext-BhOHFoWU.js +1 -0
  548. package/dist/assets/wit-5i3qLPDT.js +1 -0
  549. package/dist/assets/wolfram-lXgVvXCa.js +1 -0
  550. package/dist/assets/x-CHMqFUz-.js +21 -0
  551. package/dist/assets/xml-DF_Bs8cR.js +1 -0
  552. package/dist/assets/xquery-DzFWVndE.js +1 -0
  553. package/dist/assets/xsl-i061jk2d.js +1 -0
  554. package/dist/assets/xychartDiagram-PRI3JC2R-BhTbi7nd.js +7 -0
  555. package/dist/assets/yacas-BJ4BC0dw.js +1 -0
  556. package/dist/assets/yaml-DbVfSbck.js +1 -0
  557. package/dist/assets/z80-Hz9HOZM7.js +1 -0
  558. package/dist/assets/zenscript-DVFEvuxE.js +1 -0
  559. package/dist/assets/zig-VOosw3JB.js +1 -0
  560. package/dist/brand/wildo-symbol.png +0 -0
  561. package/dist/index.html +84 -0
  562. package/package.json +57 -0
package/LICENSE ADDED
@@ -0,0 +1,34 @@
1
+ Copyright (c) 2026 P2C Consulting, s.à r.l.-S
2
+ RCS Luxembourg B307591
3
+ 6C, Porte de France, L-4360 Esch-sur-Alzette, Luxembourg
4
+
5
+ All rights reserved.
6
+
7
+ This software and its accompanying materials (the "Software") are the
8
+ confidential and proprietary property of P2C Consulting, s.à r.l.-S (the
9
+ "Licensor"). The Software is made available for viewing only. No licence,
10
+ right, or permission of any kind is granted by its publication or by its
11
+ availability on any package registry or source repository.
12
+
13
+ Without the Licensor's prior written permission, you may not use, copy,
14
+ reproduce, modify, adapt, translate, merge, publish, distribute, sublicense,
15
+ sell, host, or create derivative works of the Software, in whole or in part,
16
+ nor use it to provide a service to any third party.
17
+
18
+ Publication of the Software in any public registry is for distribution to
19
+ authorised recipients and for technical evaluation of its packaging only. It
20
+ does not place the Software in the public domain, does not constitute an open
21
+ source release, and does not waive any right of the Licensor.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ LICENSOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
+
30
+ Third-party components distributed with the Software remain governed by their
31
+ own licences.
32
+
33
+ Contact: P2C Consulting, s.à r.l.-S, 6C, Porte de France, L-4360
34
+ Esch-sur-Alzette, Luxembourg.
@@ -0,0 +1,10 @@
1
+ /** Types for `companion-proxy.mjs` — see that file for what each export is for. */
2
+ export declare const COMPANION_UNAVAILABLE_ENVELOPE: Readonly<{ type: 'NETWORK'; severity: 'high'; message: 'network'; customMessage: 'network' }>;
3
+ export declare const COMPANION_UNAVAILABLE_HEADERS: Readonly<Record<string, string>>;
4
+ export declare function isCompanionAwayError(error: unknown): boolean;
5
+ export declare function companionUnavailableBody(input: { companionUrl: string; path: string | null; reason: string }): string;
6
+ export declare function createCompanionOutageReporter(input: {
7
+ companionUrl: string;
8
+ report: (line: string) => void;
9
+ now?: () => number;
10
+ }): { away: (path: string | undefined) => void; answered: () => void };
@@ -0,0 +1,92 @@
1
+ /**
2
+ * How the workbench talks to the companion when the companion is AWAY — shared by the two servers that
3
+ * put the workbench in front of it:
4
+ *
5
+ * - `vite.config.ts`, the dev server (framework developers, workbench source);
6
+ * - `wildo-workbench-serve.mjs`, the built bundle's server (application creators, published package).
7
+ *
8
+ * Both answer on the workbench's own origin and forward `/api` and `/health` to the companion, so both
9
+ * meet the same two facts: a companion that is not listening must read as the server being away (503,
10
+ * the engine's NETWORK envelope), never as an internal failure (a 500 the client classifies HIGH); and
11
+ * a respawn is ONE outage with a start and an end, not one log line per refused request.
12
+ *
13
+ * Plain Node ESM with no dependencies on purpose: the production server runs this file straight out of
14
+ * `node_modules`, with nothing built and nothing else installed.
15
+ */
16
+
17
+ /**
18
+ * The engine error envelope `AbstractController.jsonError` writes, spelled here rather than imported:
19
+ * these values are `ErrorType.NETWORK`, `ErrorSeverity.HIGH` and `ErrorCustomMessageReference.NETWORK`
20
+ * from `@wildo-ai/saas-models`, and this module must stay a dependency-free leaf. A change there is a
21
+ * change here.
22
+ */
23
+ // semantic-literal-boundary: the engine error envelope, written by a Node-side leaf that must not import the models package
24
+ export const COMPANION_UNAVAILABLE_ENVELOPE = Object.freeze({ type: 'NETWORK', severity: 'high', message: 'network', customMessage: 'network' });
25
+
26
+ /**
27
+ * The two connection failures that mean "the companion is away", as opposed to "the companion failed".
28
+ *
29
+ * `ECONNREFUSED` — nothing is listening (restarting, stopped, or another application's port).
30
+ * `ECONNRESET` — the companion went away mid-request, which is what a supervised respawn does to every
31
+ * request in flight at the moment it stops. Both end the moment the new process binds.
32
+ */
33
+ const COMPANION_AWAY_ERROR_CODES = new Set(['ECONNREFUSED', 'ECONNRESET']);
34
+
35
+ /** @param {unknown} error */
36
+ export function isCompanionAwayError(error) {
37
+ const code = /** @type {{ code?: unknown } | null} */ (error)?.code;
38
+ return typeof code === 'string' && COMPANION_AWAY_ERROR_CODES.has(code);
39
+ }
40
+
41
+ /**
42
+ * The 503 body for a request the companion could not answer.
43
+ *
44
+ * @param {{ companionUrl: string; path: string | null; reason: string }} input
45
+ */
46
+ export function companionUnavailableBody({ companionUrl, path, reason }) {
47
+ return JSON.stringify({
48
+ error: {
49
+ ...COMPANION_UNAVAILABLE_ENVELOPE,
50
+ timestamp: new Date().toISOString(),
51
+ details: { companionUrl, path, reason },
52
+ },
53
+ });
54
+ }
55
+
56
+ /** Headers of that 503: JSON, and a hint to retry shortly — a respawn takes seconds. */
57
+ export const COMPANION_UNAVAILABLE_HEADERS = Object.freeze({ 'Content-Type': 'application/json', 'Retry-After': '2' });
58
+
59
+ /**
60
+ * Reports a companion outage as TWO lines — when it starts and when it ends — instead of one per request.
61
+ *
62
+ * Every framework recompile respawns the companion, and the same edit reloads the workbench page, so the
63
+ * reload's whole label fan-out (one request per 30 keys) lands on a companion that is not listening yet.
64
+ * The outage is keyed on the moment the companion stops answering and cleared by the first response that
65
+ * comes back, so the recovery line says how long it was away and how many requests were answered 503.
66
+ *
67
+ * @param {{ companionUrl: string; report: (line: string) => void; now?: () => number }} input
68
+ * @returns {{ away: (path: string | undefined) => void; answered: () => void }}
69
+ */
70
+ export function createCompanionOutageReporter({ companionUrl, report, now = Date.now }) {
71
+ /** @type {number | null} */
72
+ let outageStartedAt = null;
73
+ let unansweredRequests = 0;
74
+ return {
75
+ away(path) {
76
+ unansweredRequests += 1;
77
+ if (outageStartedAt !== null) return;
78
+ outageStartedAt = now();
79
+ report(
80
+ `[workbench proxy] the companion at ${companionUrl} is not answering (first: ${path ?? '(no url)'}) — it is restarting,`
81
+ + ' not running, or belongs to a different application. Answering 503 until it is back; further refusals are counted, not printed.',
82
+ );
83
+ },
84
+ answered() {
85
+ if (outageStartedAt === null) return;
86
+ const seconds = ((now() - outageStartedAt) / 1000).toFixed(1);
87
+ report(`[workbench proxy] the companion at ${companionUrl} is answering again after ${seconds}s; ${unansweredRequests} request(s) were answered 503 meanwhile.`);
88
+ outageStartedAt = null;
89
+ unansweredRequests = 0;
90
+ },
91
+ };
92
+ }
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * `wildo-workbench-serve --companion <url> [--port <n>]` — serve the built application-creation
4
+ * workbench in front of one application's companion. Started by the application's workbench drop
5
+ * (`.wildo-saas/application-creation-workbench`, written by `wildo init` / `wildo update` for an
6
+ * application creator), which `wildo local dev` runs with the rest of the stack.
7
+ *
8
+ * Flags rather than environment variables so the drop's `dev` script is one portable command line on
9
+ * every shell, Windows `cmd.exe` included. `WILDO_COMPANION_URL` / `WILDO_WORKBENCH_PORT` are still
10
+ * honoured, for starting it by hand the way the dev server is.
11
+ */
12
+ import { existsSync } from 'node:fs';
13
+ import { dirname, join } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+ import { createWorkbenchServer, WORKBENCH_PORT_OFFSET_FROM_COMPANION } from './workbench-server.mjs';
16
+
17
+ function flag(name) {
18
+ const index = process.argv.indexOf(`--${name}`);
19
+ if (index !== -1) return process.argv[index + 1];
20
+ const inline = process.argv.find((argument) => argument.startsWith(`--${name}=`));
21
+ return inline === undefined ? undefined : inline.slice(name.length + 3);
22
+ }
23
+
24
+ const companionUrl = flag('companion') ?? process.env.WILDO_COMPANION_URL;
25
+ if (!companionUrl) {
26
+ console.error('[workbench] No companion to front: pass --companion http://localhost:<companion port> (or set WILDO_COMPANION_URL).');
27
+ process.exit(1);
28
+ }
29
+ let parsedCompanion;
30
+ try {
31
+ parsedCompanion = new URL(companionUrl);
32
+ } catch {
33
+ console.error(`[workbench] --companion ${companionUrl} is not a URL.`);
34
+ process.exit(1);
35
+ }
36
+ const portArgument = flag('port') ?? process.env.WILDO_WORKBENCH_PORT;
37
+ if (!portArgument && parsedCompanion.port === '') {
38
+ // `new URL('http://localhost').port` is '' — deriving from it would bind port 1.
39
+ console.error(`[workbench] --companion ${companionUrl} names no port, so the workbench port cannot be derived; include the port or pass --port.`);
40
+ process.exit(1);
41
+ }
42
+ // The companion admits the workbench at exactly one origin, companion port + 1; see workbench-server.mjs.
43
+ const port = portArgument ? Number(portArgument) : Number(parsedCompanion.port) + WORKBENCH_PORT_OFFSET_FROM_COMPANION;
44
+ if (!Number.isInteger(port) || port <= 0) {
45
+ console.error(`[workbench] Cannot derive a port from ${companionUrl}; pass --port.`);
46
+ process.exit(1);
47
+ }
48
+
49
+ const distDir = join(dirname(fileURLToPath(import.meta.url)), '..', 'dist');
50
+ if (!existsSync(join(distDir, 'index.html'))) {
51
+ console.error(`[workbench] No built workbench at ${distDir}. This package ships its bundle; reinstall it (\`wildo update\`).`);
52
+ process.exit(1);
53
+ }
54
+
55
+ const server = createWorkbenchServer({ distDir, companionUrl });
56
+ server.on('error', (error) => {
57
+ if (error.code === 'EADDRINUSE') {
58
+ console.error(`[workbench] Port ${port} is already in use — another workbench, or another application's stack, holds it.`);
59
+ console.error('[workbench] THE WORKBENCH WILL NOT BE AVAILABLE for this stack. Everything else starts normally.');
60
+ } else {
61
+ console.error(`[workbench] ${error.message}`);
62
+ }
63
+ process.exit(1);
64
+ });
65
+ // `localhost`, as the dev server binds: the origin the companion admits is http://localhost:<port>.
66
+ server.listen(port, 'localhost', () => {
67
+ console.info(`[workbench] http://localhost:${port} — proxying /api and /health -> ${companionUrl}`);
68
+ });
69
+
70
+ for (const signal of ['SIGINT', 'SIGTERM', 'SIGHUP']) {
71
+ process.on(signal, () => {
72
+ server.close();
73
+ server.closeAllConnections();
74
+ process.exit(0);
75
+ });
76
+ }
@@ -0,0 +1,9 @@
1
+ /** Types for `workbench-server.mjs` — see that file for the design. */
2
+ import type { IncomingHttpHeaders, Server } from 'node:http';
3
+
4
+ export declare const COMPANION_PROXIED_PREFIXES: readonly string[];
5
+ export declare const WORKBENCH_PORT_OFFSET_FROM_COMPANION: number;
6
+ export declare function isCompanionPath(pathname: string): boolean;
7
+ export declare function forwardableHeaders(headers: IncomingHttpHeaders): Record<string, string | string[]>;
8
+ export declare function resolveStaticFile(distDir: string, pathname: string): string | null;
9
+ export declare function createWorkbenchServer(input: { distDir: string; companionUrl: string; log?: (line: string) => void }): Server;
@@ -0,0 +1,225 @@
1
+ /**
2
+ * The server that puts a BUILT workbench in front of an application's companion — what an application
3
+ * creator runs, where a framework developer runs the Vite dev server over the workbench source.
4
+ *
5
+ * It does exactly what `vite.config.ts`'s dev proxy does, because both halves of that design are load-
6
+ * bearing and neither is a dev convenience:
7
+ *
8
+ * - **One origin.** The page and its API calls share the workbench's own origin, and `/api` + `/health`
9
+ * are forwarded to the companion. The companion's CORS list is derived from the APPLICATION's frontend
10
+ * URLs; teaching it about a framework tool's origin was rejected (see `vite.config.ts`).
11
+ * - **`Origin` forwarded untouched.** The companion admits the workbench at exactly one origin —
12
+ * `companion port + 1`, registered as the workbench endpoint — so this server must listen THERE and
13
+ * must not rewrite the header. Only `Host` is rewritten, as Vite's `changeOrigin` does.
14
+ *
15
+ * And what a dev server does not have to: responses are STREAMED (the coding-session frames are
16
+ * Server-Sent Events, which a buffering proxy would hold until the stream ended), an upstream request
17
+ * is aborted when its client goes away, and hashed assets are cached while `index.html` never is, so a
18
+ * `wildo update` is picked up on the next reload.
19
+ *
20
+ * Plain Node ESM with no dependencies, run straight from `node_modules`.
21
+ */
22
+ import { createReadStream, existsSync, statSync } from 'node:fs';
23
+ import { createServer, request as httpRequest } from 'node:http';
24
+ import { pipeline } from 'node:stream';
25
+ import { request as httpsRequest } from 'node:https';
26
+ import { extname, join, normalize, resolve, sep } from 'node:path';
27
+ import {
28
+ companionUnavailableBody,
29
+ COMPANION_UNAVAILABLE_HEADERS,
30
+ createCompanionOutageReporter,
31
+ isCompanionAwayError,
32
+ } from './companion-proxy.mjs';
33
+
34
+ /** Path prefixes the companion answers. Everything else is the workbench bundle. */
35
+ export const COMPANION_PROXIED_PREFIXES = Object.freeze(['/api', '/health']);
36
+
37
+ /** The workbench's port sits one above its companion's (`WORKBENCH_PORT_OFFSET_FROM_COMPANION`). */
38
+ export const WORKBENCH_PORT_OFFSET_FROM_COMPANION = 1;
39
+
40
+ const CONTENT_TYPES = Object.freeze({
41
+ '.html': 'text/html; charset=utf-8',
42
+ '.js': 'text/javascript; charset=utf-8',
43
+ '.mjs': 'text/javascript; charset=utf-8',
44
+ '.css': 'text/css; charset=utf-8',
45
+ '.json': 'application/json; charset=utf-8',
46
+ '.map': 'application/json; charset=utf-8',
47
+ '.svg': 'image/svg+xml',
48
+ '.png': 'image/png',
49
+ '.jpg': 'image/jpeg',
50
+ '.jpeg': 'image/jpeg',
51
+ '.gif': 'image/gif',
52
+ '.webp': 'image/webp',
53
+ '.ico': 'image/x-icon',
54
+ '.woff': 'font/woff',
55
+ '.woff2': 'font/woff2',
56
+ '.ttf': 'font/ttf',
57
+ '.txt': 'text/plain; charset=utf-8',
58
+ '.wasm': 'application/wasm',
59
+ '.lottie': 'application/zip',
60
+ });
61
+
62
+ /**
63
+ * Connection-specific fields this proxy never forwards: `Connection` itself, plus the fields RFC 9110
64
+ * says an intermediary SHOULD remove whether or not `Connection` names them. The fields a `Connection`
65
+ * header DOES name are removed as well, per message (`forwardableHeaders`) — that half is a MUST.
66
+ * spec-cite: RFC 9110 §7.6.1 (Connection) — the SHOULD list is Proxy-Connection, Keep-Alive, TE, Transfer-Encoding, Upgrade.
67
+ */
68
+ const CONNECTION_SPECIFIC_HEADERS = new Set(['connection', 'proxy-connection', 'keep-alive', 'te', 'transfer-encoding', 'upgrade']);
69
+
70
+ /**
71
+ * The headers of one message minus its connection-specific fields: the fixed set above and every
72
+ * field its own `Connection` header names.
73
+ *
74
+ * @param {import('node:http').IncomingHttpHeaders} headers
75
+ * @returns {Record<string, string | string[]>}
76
+ */
77
+ export function forwardableHeaders(headers) {
78
+ const named = new Set(
79
+ String(headers.connection ?? '')
80
+ .split(',')
81
+ .map((option) => option.trim().toLowerCase())
82
+ .filter(Boolean),
83
+ );
84
+ /** @type {Record<string, string | string[]>} */
85
+ const kept = {};
86
+ for (const [name, value] of Object.entries(headers)) {
87
+ if (value !== undefined && !CONNECTION_SPECIFIC_HEADERS.has(name) && !named.has(name)) kept[name] = value;
88
+ }
89
+ return kept;
90
+ }
91
+
92
+ /**
93
+ * @param {string} pathname
94
+ */
95
+ export function isCompanionPath(pathname) {
96
+ return COMPANION_PROXIED_PREFIXES.some((prefix) => pathname === prefix || pathname.startsWith(`${prefix}/`));
97
+ }
98
+
99
+ /**
100
+ * The file a GET for `pathname` serves: the file itself when it exists inside `distDir`, `index.html`
101
+ * for an extension-less path (a client-side route), and `null` otherwise — including any path that
102
+ * would resolve outside `distDir`.
103
+ *
104
+ * @param {string} distDir
105
+ * @param {string} pathname
106
+ * @returns {string | null}
107
+ */
108
+ export function resolveStaticFile(distDir, pathname) {
109
+ let decoded;
110
+ try {
111
+ decoded = decodeURIComponent(pathname);
112
+ } catch {
113
+ return null;
114
+ }
115
+ const root = resolve(distDir);
116
+ const candidate = resolve(root, `.${normalize(`/${decoded}`)}`);
117
+ if (candidate !== root && !candidate.startsWith(`${root}${sep}`)) return null;
118
+ if (existsSync(candidate) && statSync(candidate).isFile()) return candidate;
119
+ if (extname(decoded) === '') return join(root, 'index.html');
120
+ return null;
121
+ }
122
+
123
+ /**
124
+ * @param {{ distDir: string; companionUrl: string; log?: (line: string) => void }} input
125
+ * @returns {import('node:http').Server}
126
+ */
127
+ export function createWorkbenchServer({ distDir, companionUrl, log = (line) => console.warn(line) }) {
128
+ const companion = new URL(companionUrl);
129
+ const forward = companion.protocol === 'https:' ? httpsRequest : httpRequest;
130
+ const outage = createCompanionOutageReporter({ companionUrl, report: log });
131
+
132
+ return createServer((request, response) => {
133
+ const url = new URL(request.url ?? '/', 'http://workbench.invalid');
134
+
135
+ if (isCompanionPath(url.pathname)) {
136
+ const headers = forwardableHeaders(request.headers);
137
+ headers.host = companion.host;
138
+ /*
139
+ * Set when the CLIENT goes away (a closed tab, an EventSource reconnect). Destroying the upstream
140
+ * then raises ECONNRESET on it — which, unflagged, reads exactly like the companion going away and
141
+ * logged a false outage against a healthy companion (measured, 2026-09-24 review).
142
+ */
143
+ let clientGone = false;
144
+ /*
145
+ * Set when the COMPANION's response dies mid-stream. `pipeline` then destroys the client response
146
+ * itself, and that close must not be mistaken for the client leaving — which would silence the
147
+ * outage report for the very interruption it describes.
148
+ */
149
+ let upstreamInterrupted = false;
150
+ const upstream = forward(
151
+ {
152
+ protocol: companion.protocol,
153
+ hostname: companion.hostname,
154
+ port: companion.port,
155
+ method: request.method,
156
+ path: `${url.pathname}${url.search}`,
157
+ headers,
158
+ },
159
+ (upstreamResponse) => {
160
+ outage.answered();
161
+ response.writeHead(upstreamResponse.statusCode ?? 502, forwardableHeaders(upstreamResponse.headers));
162
+ // Flush the headers now, so a Server-Sent Events stream opens before its first frame.
163
+ response.flushHeaders();
164
+ upstreamResponse.on('aborted', () => { upstreamInterrupted = true; });
165
+ upstreamResponse.on('error', () => { upstreamInterrupted = true; });
166
+ /*
167
+ * `pipeline`, not `pipe`: when the companion drops its socket MID-STREAM — a respawn during a
168
+ * Server-Sent Events stream — `pipe` never ends the browser's side, so its EventSource waited on a
169
+ * connection that would never deliver again and never reconnected (probe, 2026-09-24 review).
170
+ * `pipeline` destroys the client response too, the browser sees the close, and EventSource
171
+ * reconnects — to a 503 until the companion is back, then to the stream.
172
+ */
173
+ pipeline(upstreamResponse, response, (error) => {
174
+ if (!error || clientGone) return;
175
+ if (isCompanionAwayError(error)) outage.away(request.url);
176
+ else log(`[workbench proxy] ${request.url ?? '(no url)'} <- ${companionUrl} interrupted: ${error.message}`);
177
+ });
178
+ },
179
+ );
180
+ upstream.on('error', (error) => {
181
+ if (clientGone) return;
182
+ if (isCompanionAwayError(error)) outage.away(request.url);
183
+ else log(`[workbench proxy] ${request.url ?? '(no url)'} -> ${companionUrl} FAILED: ${error.message}`);
184
+ if (response.headersSent || response.writableEnded) {
185
+ response.destroy();
186
+ return;
187
+ }
188
+ response.writeHead(503, { ...COMPANION_UNAVAILABLE_HEADERS });
189
+ response.end(companionUnavailableBody({ companionUrl, path: request.url ?? null, reason: /** @type {NodeJS.ErrnoException} */ (error).code ?? error.message }));
190
+ });
191
+ // A client that goes away (a closed tab, an EventSource reconnect) must not leave the upstream open.
192
+ response.on('close', () => {
193
+ if (response.writableFinished || upstreamInterrupted) return;
194
+ clientGone = true;
195
+ upstream.destroy();
196
+ });
197
+ request.pipe(upstream);
198
+ return;
199
+ }
200
+
201
+ if (request.method !== 'GET' && request.method !== 'HEAD') {
202
+ response.writeHead(405, { Allow: 'GET, HEAD' });
203
+ response.end();
204
+ return;
205
+ }
206
+ const file = resolveStaticFile(distDir, url.pathname);
207
+ if (file === null || !existsSync(file)) {
208
+ response.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
209
+ response.end('Not found');
210
+ return;
211
+ }
212
+ const isIndex = file.endsWith(`${sep}index.html`);
213
+ response.writeHead(200, {
214
+ 'Content-Type': CONTENT_TYPES[/** @type {keyof typeof CONTENT_TYPES} */ (extname(file).toLowerCase())] ?? 'application/octet-stream',
215
+ // Vite fingerprints everything under assets/; the entry document must always be re-read, so a
216
+ // `wildo update` reaches the browser on the next reload.
217
+ 'Cache-Control': isIndex ? 'no-cache' : url.pathname.startsWith('/assets/') ? 'public, max-age=31536000, immutable' : 'no-cache',
218
+ });
219
+ if (request.method === 'HEAD') {
220
+ response.end();
221
+ return;
222
+ }
223
+ createReadStream(file).pipe(response);
224
+ });
225
+ }