@rynx-ai/server 0.1.11-beta.3 → 0.1.11-beta.31

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 (455) hide show
  1. package/dist/control-api.d.ts +16 -4
  2. package/dist/control-api.js +713 -83
  3. package/dist/control-web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  4. package/dist/control-web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  5. package/dist/control-web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  6. package/dist/control-web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  7. package/dist/control-web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  8. package/dist/control-web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  9. package/dist/control-web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  10. package/dist/control-web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  11. package/dist/control-web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  12. package/dist/control-web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  13. package/dist/control-web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  14. package/dist/control-web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  15. package/dist/control-web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  16. package/dist/control-web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  17. package/dist/control-web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  18. package/dist/control-web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  19. package/dist/control-web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  20. package/dist/control-web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  21. package/dist/control-web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  22. package/dist/control-web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  23. package/dist/control-web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  24. package/dist/control-web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  25. package/dist/control-web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  26. package/dist/control-web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  27. package/dist/control-web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  28. package/dist/control-web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  29. package/dist/control-web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  30. package/dist/control-web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  31. package/dist/control-web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  32. package/dist/control-web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  33. package/dist/control-web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  34. package/dist/control-web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  35. package/dist/control-web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  36. package/dist/control-web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  37. package/dist/control-web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  38. package/dist/control-web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  39. package/dist/control-web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  40. package/dist/control-web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  41. package/dist/control-web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  42. package/dist/control-web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  43. package/dist/control-web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  44. package/dist/control-web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  45. package/dist/control-web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  46. package/dist/control-web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  47. package/dist/control-web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  48. package/dist/control-web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  49. package/dist/control-web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  50. package/dist/control-web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  51. package/dist/control-web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  52. package/dist/control-web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  53. package/dist/control-web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  54. package/dist/control-web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  55. package/dist/control-web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  56. package/dist/control-web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  57. package/dist/control-web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  58. package/dist/control-web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  59. package/dist/control-web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  60. package/dist/control-web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  61. package/dist/control-web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  62. package/dist/control-web/assets/abap-BdImnpbu.js +1 -0
  63. package/dist/control-web/assets/abnfDiagram-VRR7QNED-8c99_3I5.js +1 -0
  64. package/dist/control-web/assets/actionscript-3-CoDkCxhg.js +1 -0
  65. package/dist/control-web/assets/ada-bCR0ucgS.js +1 -0
  66. package/dist/control-web/assets/andromeeda-C4gqWexZ.js +1 -0
  67. package/dist/control-web/assets/angular-html-CU67Zn6k.js +1 -0
  68. package/dist/control-web/assets/angular-ts-BwZT4LLn.js +1 -0
  69. package/dist/control-web/assets/apache-Pmp26Uib.js +1 -0
  70. package/dist/control-web/assets/apex-D8_7TLub.js +1 -0
  71. package/dist/control-web/assets/apl-dKokRX4l.js +1 -0
  72. package/dist/control-web/assets/applescript-Co6uUVPk.js +1 -0
  73. package/dist/control-web/assets/ara-BRHolxvo.js +1 -0
  74. package/dist/control-web/assets/arc-FWW96Tzo.js +1 -0
  75. package/dist/control-web/assets/architectureDiagram-ZJ3FMSHR-B5FrqoRB.js +36 -0
  76. package/dist/control-web/assets/asciidoc-Ve4PFQV2.js +1 -0
  77. package/dist/control-web/assets/asm-D_Q5rh1f.js +1 -0
  78. package/dist/control-web/assets/astro-CbQHKStN.js +1 -0
  79. package/dist/control-web/assets/aurora-x-D-2ljcwZ.js +1 -0
  80. package/dist/control-web/assets/awk-DMzUqQB5.js +1 -0
  81. package/dist/control-web/assets/ayu-dark-DYE7WIF3.js +1 -0
  82. package/dist/control-web/assets/ayu-light-BA47KaF1.js +1 -0
  83. package/dist/control-web/assets/ayu-mirage-32ctXXKs.js +1 -0
  84. package/dist/control-web/assets/ballerina-BFfxhgS-.js +1 -0
  85. package/dist/control-web/assets/bat-BkioyH1T.js +1 -0
  86. package/dist/control-web/assets/beancount-k_qm7-4y.js +1 -0
  87. package/dist/control-web/assets/berry-uYugtg8r.js +1 -0
  88. package/dist/control-web/assets/bibtex-CHM0blh-.js +1 -0
  89. package/dist/control-web/assets/bicep-Bmn6On1c.js +1 -0
  90. package/dist/control-web/assets/bird2-DPOp833l.js +1 -0
  91. package/dist/control-web/assets/blade-D4QpJJKB.js +1 -0
  92. package/dist/control-web/assets/blockDiagram-677ZJIJ3-DJRwOGMa.js +132 -0
  93. package/dist/control-web/assets/bsl-BO_Y6i37.js +1 -0
  94. package/dist/control-web/assets/c-BIGW1oBm.js +1 -0
  95. package/dist/control-web/assets/c3-eo99z4R2.js +1 -0
  96. package/dist/control-web/assets/c4Diagram-LMCZKHZV-B8FCUurl.js +10 -0
  97. package/dist/control-web/assets/cadence-Bv_4Rxtq.js +1 -0
  98. package/dist/control-web/assets/cairo-KRGpt6FW.js +1 -0
  99. package/dist/control-web/assets/catppuccin-frappe-DFWUc33u.js +1 -0
  100. package/dist/control-web/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
  101. package/dist/control-web/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
  102. package/dist/control-web/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
  103. package/dist/control-web/assets/channel-Bnyhn1Qs.js +1 -0
  104. package/dist/control-web/assets/chunk-2Q5K7J3B-DC5xexY2.js +1 -0
  105. package/dist/control-web/assets/chunk-32BRIVSS-DAzT69zb.js +1 -0
  106. package/dist/control-web/assets/chunk-5VM5RSS4-CXKpL77L.js +15 -0
  107. package/dist/control-web/assets/chunk-EX3LRPZG-DQKQvoPv.js +231 -0
  108. package/dist/control-web/assets/chunk-JWPE2WC7-CWMqpJoT.js +1 -0
  109. package/dist/control-web/assets/chunk-MOJQB5TN-Bd8jn7RZ.js +88 -0
  110. package/dist/control-web/assets/chunk-RYQCIY6F-DKXEMFO6.js +1 -0
  111. package/dist/control-web/assets/chunk-V7JOEXUC-BUDLq5nU.js +206 -0
  112. package/dist/control-web/assets/chunk-VR4S4FIN-C65l7VIz.js +1 -0
  113. package/dist/control-web/assets/chunk-XXDRQBXY-Y2498HkC.js +1 -0
  114. package/dist/control-web/assets/clarity-D53aC0YG.js +1 -0
  115. package/dist/control-web/assets/classDiagram-OUVF2IWQ-CBtXSdwW.js +1 -0
  116. package/dist/control-web/assets/classDiagram-v2-EOCWNBFH-CBtXSdwW.js +1 -0
  117. package/dist/control-web/assets/clojure-P80f7IUj.js +1 -0
  118. package/dist/control-web/assets/cmake-D1j8_8rp.js +1 -0
  119. package/dist/control-web/assets/cobol-nwyudZeR.js +1 -0
  120. package/dist/control-web/assets/codeowners-Bp6g37R7.js +1 -0
  121. package/dist/control-web/assets/codeql-DsOJ9woJ.js +1 -0
  122. package/dist/control-web/assets/coffee-Ch7k5sss.js +1 -0
  123. package/dist/control-web/assets/common-lisp-Cg-RD9OK.js +1 -0
  124. package/dist/control-web/assets/coq-DkFqJrB1.js +1 -0
  125. package/dist/control-web/assets/cose-bilkent-JH36ORCC-C9aVXb8E.js +1 -0
  126. package/dist/control-web/assets/cpp-CofmeUqb.js +1 -0
  127. package/dist/control-web/assets/crystal-tKQVLTB8.js +1 -0
  128. package/dist/control-web/assets/csharp-COcwbKMJ.js +1 -0
  129. package/dist/control-web/assets/css-DPfMkruS.js +1 -0
  130. package/dist/control-web/assets/csv-fuZLfV_i.js +1 -0
  131. package/dist/control-web/assets/cue-D82EKSYY.js +1 -0
  132. package/dist/control-web/assets/cynefin-VYW2F7L2-BsyMhvG0.js +178 -0
  133. package/dist/control-web/assets/cynefinDiagram-TSTJHNR4-DwY43f3-.js +62 -0
  134. package/dist/control-web/assets/cypher-COkxafJQ.js +1 -0
  135. package/dist/control-web/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
  136. package/dist/control-web/assets/d-85-TOEBH.js +1 -0
  137. package/dist/control-web/assets/dagre-VKFMJZFB-CP1xk7Ox.js +4 -0
  138. package/dist/control-web/assets/dark-plus-C3mMm8J8.js +1 -0
  139. package/dist/control-web/assets/dart-CF10PKvl.js +1 -0
  140. package/dist/control-web/assets/dax-CEL-wOlO.js +1 -0
  141. package/dist/control-web/assets/defaultLocale-DX6XiGOO.js +1 -0
  142. package/dist/control-web/assets/desktop-BmXAJ9_W.js +1 -0
  143. package/dist/control-web/assets/diagram-FQU43EPY-D_yRnH1b.js +3 -0
  144. package/dist/control-web/assets/diagram-G47NLZAW-DpTmLmbm.js +24 -0
  145. package/dist/control-web/assets/diagram-NH7WQ7WH-Wh_P26Dr.js +24 -0
  146. package/dist/control-web/assets/diagram-OA4YK3LP-BMMaO78f.js +30 -0
  147. package/dist/control-web/assets/diagram-WEI45ONY-D8smty9F.js +41 -0
  148. package/dist/control-web/assets/diff-D97Zzqfu.js +1 -0
  149. package/dist/control-web/assets/docker-BcOcwvcX.js +1 -0
  150. package/dist/control-web/assets/dotenv-Da5cRb03.js +1 -0
  151. package/dist/control-web/assets/dracula-BzJJZx-M.js +1 -0
  152. package/dist/control-web/assets/dracula-soft-BXkSAIEj.js +1 -0
  153. package/dist/control-web/assets/dream-maker-BtqSS_iP.js +1 -0
  154. package/dist/control-web/assets/ebnfDiagram-CCIWWBDH-BqVsmEYh.js +1 -0
  155. package/dist/control-web/assets/edge-BkV0erSs.js +1 -0
  156. package/dist/control-web/assets/elixir-CDX3lj18.js +1 -0
  157. package/dist/control-web/assets/elm-DbKCFpqz.js +1 -0
  158. package/dist/control-web/assets/emacs-lisp-C9XAeP06.js +1 -0
  159. package/dist/control-web/assets/erDiagram-Q63AITRT-CxaumIzW.js +85 -0
  160. package/dist/control-web/assets/erb-B12qg9BL.js +1 -0
  161. package/dist/control-web/assets/erlang-DsQrWhSR.js +1 -0
  162. package/dist/control-web/assets/everforest-dark-BgDCqdQA.js +1 -0
  163. package/dist/control-web/assets/everforest-light-C8M2exoo.js +1 -0
  164. package/dist/control-web/assets/fennel-BYunw83y.js +1 -0
  165. package/dist/control-web/assets/fish-BvzEVeQv.js +1 -0
  166. package/dist/control-web/assets/flowDiagram-23GEKE2U-DZhUBne-.js +156 -0
  167. package/dist/control-web/assets/fluent-C4IJs8-o.js +1 -0
  168. package/dist/control-web/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
  169. package/dist/control-web/assets/fortran-free-form-BxgE0vQu.js +1 -0
  170. package/dist/control-web/assets/fsharp-CXgrBDvD.js +1 -0
  171. package/dist/control-web/assets/ganttDiagram-NO4QXBWP-B20dY8SF.js +292 -0
  172. package/dist/control-web/assets/gdresource-BOOCDP_w.js +1 -0
  173. package/dist/control-web/assets/gdscript-C5YyOfLZ.js +1 -0
  174. package/dist/control-web/assets/gdshader-DkwncUOv.js +1 -0
  175. package/dist/control-web/assets/genie-D0YGMca9.js +1 -0
  176. package/dist/control-web/assets/gherkin-DyxjwDmM.js +1 -0
  177. package/dist/control-web/assets/git-commit-F4YmCXRG.js +1 -0
  178. package/dist/control-web/assets/git-rebase-r7XF79zn.js +1 -0
  179. package/dist/control-web/assets/gitGraphDiagram-IHSO6WYX-CAlnqFfW.js +106 -0
  180. package/dist/control-web/assets/github-dark-DHJKELXO.js +1 -0
  181. package/dist/control-web/assets/github-dark-default-Cuk6v7N8.js +1 -0
  182. package/dist/control-web/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  183. package/dist/control-web/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  184. package/dist/control-web/assets/github-light-DAi9KRSo.js +1 -0
  185. package/dist/control-web/assets/github-light-default-D7oLnXFd.js +1 -0
  186. package/dist/control-web/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  187. package/dist/control-web/assets/gleam-BspZqrRM.js +1 -0
  188. package/dist/control-web/assets/glimmer-js-Rg0-pVw9.js +1 -0
  189. package/dist/control-web/assets/glimmer-ts-U6CK756n.js +1 -0
  190. package/dist/control-web/assets/glsl-DplSGwfg.js +1 -0
  191. package/dist/control-web/assets/gn-n2N0HUVH.js +1 -0
  192. package/dist/control-web/assets/gnuplot-DdkO51Og.js +1 -0
  193. package/dist/control-web/assets/go-CxLEBnE3.js +1 -0
  194. package/dist/control-web/assets/graph-C9eacEi8.js +1 -0
  195. package/dist/control-web/assets/graphql-ChdNCCLP.js +1 -0
  196. package/dist/control-web/assets/groovy-gcz8RCvz.js +1 -0
  197. package/dist/control-web/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
  198. package/dist/control-web/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
  199. package/dist/control-web/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
  200. package/dist/control-web/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
  201. package/dist/control-web/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
  202. package/dist/control-web/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
  203. package/dist/control-web/assets/hack-CaT9iCJl.js +1 -0
  204. package/dist/control-web/assets/haml-B8DHNrY2.js +1 -0
  205. package/dist/control-web/assets/handlebars-BL8al0AC.js +1 -0
  206. package/dist/control-web/assets/haskell-Df6bDoY_.js +1 -0
  207. package/dist/control-web/assets/haxe-CzTSHFRz.js +1 -0
  208. package/dist/control-web/assets/hcl-BWvSN4gD.js +1 -0
  209. package/dist/control-web/assets/{highlighted-body-OFNGDK62-DWWsUtHF.js → highlighted-body-OFNGDK62-vBlGjC8F.js} +1 -1
  210. package/dist/control-web/assets/hjson-D5-asLiD.js +1 -0
  211. package/dist/control-web/assets/hlsl-D3lLCCz7.js +1 -0
  212. package/dist/control-web/assets/horizon-BUw7H-hv.js +1 -0
  213. package/dist/control-web/assets/horizon-bright-Cn-bp-IR.js +1 -0
  214. package/dist/control-web/assets/houston-DnULxvSX.js +1 -0
  215. package/dist/control-web/assets/html-GMplVEZG.js +1 -0
  216. package/dist/control-web/assets/html-derivative-BFtXZ54Q.js +1 -0
  217. package/dist/control-web/assets/http-jrhK8wxY.js +1 -0
  218. package/dist/control-web/assets/hurl-irOxFIW8.js +1 -0
  219. package/dist/control-web/assets/hxml-Bvhsp5Yf.js +1 -0
  220. package/dist/control-web/assets/hy-DFXneXwc.js +1 -0
  221. package/dist/control-web/assets/imba-DGztddWO.js +1 -0
  222. package/dist/control-web/assets/index-B3g4Kfko.js +153 -0
  223. package/dist/control-web/assets/index-BKqZNg1a.js +718 -0
  224. package/dist/control-web/assets/index-CZrE_F_i.css +32 -0
  225. package/dist/control-web/assets/infoDiagram-FWYZ7A6U-PaEyeSke.js +2 -0
  226. package/dist/control-web/assets/ini-BEwlwnbL.js +1 -0
  227. package/dist/control-web/assets/init-Gi6I4Gst.js +1 -0
  228. package/dist/control-web/assets/ishikawaDiagram-FXEZZL3T-BwsgPXGC.js +70 -0
  229. package/dist/control-web/assets/java-CylS5w8V.js +1 -0
  230. package/dist/control-web/assets/javascript-wDzz0qaB.js +1 -0
  231. package/dist/control-web/assets/jinja-4LBKfQ-Z.js +1 -0
  232. package/dist/control-web/assets/jison-wvAkD_A8.js +1 -0
  233. package/dist/control-web/assets/journeyDiagram-5HDEW3XC-BUEf1NEq.js +139 -0
  234. package/dist/control-web/assets/json-Cp-IABpG.js +1 -0
  235. package/dist/control-web/assets/json5-C9tS-k6U.js +1 -0
  236. package/dist/control-web/assets/jsonc-Des-eS-w.js +1 -0
  237. package/dist/control-web/assets/jsonl-DcaNXYhu.js +1 -0
  238. package/dist/control-web/assets/jsonnet-DFQXde-d.js +1 -0
  239. package/dist/control-web/assets/jssm-C2t-YnRu.js +1 -0
  240. package/dist/control-web/assets/jsx-g9-lgVsj.js +1 -0
  241. package/dist/control-web/assets/julia-CxzCAyBv.js +1 -0
  242. package/dist/control-web/assets/just-Cw27pwNe.js +1 -0
  243. package/dist/control-web/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  244. package/dist/control-web/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  245. package/dist/control-web/assets/kanagawa-wave-DWedfzmr.js +1 -0
  246. package/dist/control-web/assets/kanban-definition-HUTT4EX6-CiTCwnJ7.js +89 -0
  247. package/dist/control-web/assets/kdl-DV7GczEv.js +1 -0
  248. package/dist/control-web/assets/kotlin-BdnUsdx6.js +1 -0
  249. package/dist/control-web/assets/kusto-DZf3V79B.js +1 -0
  250. package/dist/control-web/assets/laserwave-DUszq2jm.js +1 -0
  251. package/dist/control-web/assets/latex-CWtU0Tv5.js +1 -0
  252. package/dist/control-web/assets/layout-DEXfKzaS.js +1 -0
  253. package/dist/control-web/assets/lean-BZvkOJ9d.js +1 -0
  254. package/dist/control-web/assets/less-B1dDrJ26.js +1 -0
  255. package/dist/control-web/assets/light-plus-B7mTdjB0.js +1 -0
  256. package/dist/control-web/assets/linear-Cs4GSPvX.js +1 -0
  257. package/dist/control-web/assets/liquid-DYVedYrR.js +1 -0
  258. package/dist/control-web/assets/llvm-DjAJT7YJ.js +1 -0
  259. package/dist/control-web/assets/log-2UxHyX5q.js +1 -0
  260. package/dist/control-web/assets/logo-BtOb2qkB.js +1 -0
  261. package/dist/control-web/assets/lua-BaeVxFsk.js +1 -0
  262. package/dist/control-web/assets/luau-C-HG3fhB.js +1 -0
  263. package/dist/control-web/assets/make-CHLpvVh8.js +1 -0
  264. package/dist/control-web/assets/map-Czzmt4hB.js +1 -0
  265. package/dist/control-web/assets/markdown-Cvjx9yec.js +1 -0
  266. package/dist/control-web/assets/marko-CnJfTvn9.js +1 -0
  267. package/dist/control-web/assets/material-theme-D5KoaKCx.js +1 -0
  268. package/dist/control-web/assets/material-theme-darker-BfHTSMKl.js +1 -0
  269. package/dist/control-web/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  270. package/dist/control-web/assets/material-theme-ocean-CyktbL80.js +1 -0
  271. package/dist/control-web/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  272. package/dist/control-web/assets/matlab-D7o27uSR.js +1 -0
  273. package/dist/control-web/assets/mdc-BMNejdWA.js +1 -0
  274. package/dist/control-web/assets/mdx-Cmh6b_Ma.js +1 -0
  275. package/dist/control-web/assets/mermaid-GHXKKRXX-BYZTj3zW.css +1 -0
  276. package/dist/control-web/assets/mermaid-GHXKKRXX-C_lUqoOB.js +710 -0
  277. package/dist/control-web/assets/mermaid-mWjccvbQ.js +1 -0
  278. package/dist/control-web/assets/min-dark-CafNBF8u.js +1 -0
  279. package/dist/control-web/assets/min-light-CTRr51gU.js +1 -0
  280. package/dist/control-web/assets/mindmap-definition-LN4V7U3C-B8TkylOR.js +96 -0
  281. package/dist/control-web/assets/mipsasm-CKIfxQSi.js +1 -0
  282. package/dist/control-web/assets/mojo-rZm6bMo-.js +1 -0
  283. package/dist/control-web/assets/monokai-D4h5O-jR.js +1 -0
  284. package/dist/control-web/assets/moonbit-_H4v1dQx.js +1 -0
  285. package/dist/control-web/assets/move-IF9eRakj.js +1 -0
  286. package/dist/control-web/assets/narrat-DRg8JJMk.js +1 -0
  287. package/dist/control-web/assets/nextflow-Zz6hmt5N.js +1 -0
  288. package/dist/control-web/assets/nextflow-groovy-BeH2EWoN.js +1 -0
  289. package/dist/control-web/assets/nginx-BpAMiNFr.js +1 -0
  290. package/dist/control-web/assets/night-owl-C39BiMTA.js +1 -0
  291. package/dist/control-web/assets/night-owl-light-CMTm3GFP.js +1 -0
  292. package/dist/control-web/assets/nim-CVrawwO9.js +1 -0
  293. package/dist/control-web/assets/nix-CwoSXNpI.js +1 -0
  294. package/dist/control-web/assets/nord-Ddv68eIx.js +1 -0
  295. package/dist/control-web/assets/nushell-Cz2AlsmD.js +1 -0
  296. package/dist/control-web/assets/objective-c-DXmwc3jG.js +1 -0
  297. package/dist/control-web/assets/objective-cpp-CLxacb5B.js +1 -0
  298. package/dist/control-web/assets/ocaml-C0hk2d4L.js +1 -0
  299. package/dist/control-web/assets/odin-BBf5iR-q.js +1 -0
  300. package/dist/control-web/assets/one-dark-pro-DVMEJ2y_.js +1 -0
  301. package/dist/control-web/assets/one-light-C3Wv6jpd.js +1 -0
  302. package/dist/control-web/assets/openscad-C4EeE6gA.js +1 -0
  303. package/dist/control-web/assets/ordinal-Cboi1Yqb.js +1 -0
  304. package/dist/control-web/assets/pascal-D93ZcfNL.js +1 -0
  305. package/dist/control-web/assets/pegDiagram-2B236MQR-Bnge_jzz.js +1 -0
  306. package/dist/control-web/assets/perl-C0TMdlhV.js +1 -0
  307. package/dist/control-web/assets/php-Dhbhpdrm.js +1 -0
  308. package/dist/control-web/assets/pieDiagram-ENE6RG2P-DOP7FAKG.js +39 -0
  309. package/dist/control-web/assets/pkl-u5AG7uiY.js +1 -0
  310. package/dist/control-web/assets/plastic-3e1v2bzS.js +1 -0
  311. package/dist/control-web/assets/plsql-ChMvpjG-.js +1 -0
  312. package/dist/control-web/assets/po-BTJTHyun.js +1 -0
  313. package/dist/control-web/assets/poimandres-CS3Unz2-.js +1 -0
  314. package/dist/control-web/assets/polar-C0HS_06l.js +1 -0
  315. package/dist/control-web/assets/postcss-CXtECtnM.js +1 -0
  316. package/dist/control-web/assets/powerquery-CEu0bR-o.js +1 -0
  317. package/dist/control-web/assets/powershell-Dpen1YoG.js +1 -0
  318. package/dist/control-web/assets/prisma-Dd19v3D-.js +1 -0
  319. package/dist/control-web/assets/prolog-CbFg5uaA.js +1 -0
  320. package/dist/control-web/assets/proto-C7zT0LnQ.js +1 -0
  321. package/dist/control-web/assets/pug-CGlum2m_.js +1 -0
  322. package/dist/control-web/assets/puppet-BMWR74SV.js +1 -0
  323. package/dist/control-web/assets/purescript-CklMAg4u.js +1 -0
  324. package/dist/control-web/assets/python-B6aJPvgy.js +1 -0
  325. package/dist/control-web/assets/qml-3beO22l8.js +1 -0
  326. package/dist/control-web/assets/qmldir-C8lEn-DE.js +1 -0
  327. package/dist/control-web/assets/qss-IeuSbFQv.js +1 -0
  328. package/dist/control-web/assets/quadrantDiagram-ABIIQ3AL-Cqqu5uu-.js +7 -0
  329. package/dist/control-web/assets/r-Dspwwk_N.js +1 -0
  330. package/dist/control-web/assets/racket-BqYA7rlc.js +1 -0
  331. package/dist/control-web/assets/railroadDiagram-RFXS5EU6-1bk56BMW.js +1 -0
  332. package/dist/control-web/assets/raku-DXvB9xmW.js +1 -0
  333. package/dist/control-web/assets/razor-Uh8Bk_45.js +1 -0
  334. package/dist/control-web/assets/red-bN70gL4F.js +1 -0
  335. package/dist/control-web/assets/reg-C-SQnVFl.js +1 -0
  336. package/dist/control-web/assets/regexp-CDVJQ6XC.js +1 -0
  337. package/dist/control-web/assets/rel-C3B-1QV4.js +1 -0
  338. package/dist/control-web/assets/requirementDiagram-TGXJPOKE-BHVwG79A.js +84 -0
  339. package/dist/control-web/assets/riscv-BM1_JUlF.js +1 -0
  340. package/dist/control-web/assets/ron-D8l8udqQ.js +1 -0
  341. package/dist/control-web/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
  342. package/dist/control-web/assets/rose-pine-moon-D4_iv3hh.js +1 -0
  343. package/dist/control-web/assets/rose-pine-qdsjHGoJ.js +1 -0
  344. package/dist/control-web/assets/rosmsg-BJDFO7_C.js +1 -0
  345. package/dist/control-web/assets/rst-BrH8l1NY.js +1 -0
  346. package/dist/control-web/assets/ruby-Dw2BHqvy.js +1 -0
  347. package/dist/control-web/assets/rust-B1yitclQ.js +1 -0
  348. package/dist/control-web/assets/sankeyDiagram-HTMAVEWB-ghjBFqfs.js +40 -0
  349. package/dist/control-web/assets/sas-cz2c8ADy.js +1 -0
  350. package/dist/control-web/assets/sass-Cj5Yp3dK.js +1 -0
  351. package/dist/control-web/assets/scala-C151Ov-r.js +1 -0
  352. package/dist/control-web/assets/scheme-C98Dy4si.js +1 -0
  353. package/dist/control-web/assets/scss-OYdSNvt2.js +1 -0
  354. package/dist/control-web/assets/sdbl-DVxCFoDh.js +1 -0
  355. package/dist/control-web/assets/sequenceDiagram-DBY2YBRQ-DChtyqq5.js +162 -0
  356. package/dist/control-web/assets/shaderlab-Dg9Lc6iA.js +1 -0
  357. package/dist/control-web/assets/shellscript-Yzrsuije.js +1 -0
  358. package/dist/control-web/assets/shellsession-BADoaaVG.js +1 -0
  359. package/dist/control-web/assets/sizeCapture-X5ZJPWSS-BNp94nCS.js +1 -0
  360. package/dist/control-web/assets/slack-dark-BthQWCQV.js +1 -0
  361. package/dist/control-web/assets/slack-ochin-DqwNpetd.js +1 -0
  362. package/dist/control-web/assets/smalltalk-BERRCDM3.js +1 -0
  363. package/dist/control-web/assets/snazzy-light-Bw305WKR.js +1 -0
  364. package/dist/control-web/assets/solarized-dark-DXbdFlpD.js +1 -0
  365. package/dist/control-web/assets/solarized-light-L9t79GZl.js +1 -0
  366. package/dist/control-web/assets/solidity-rGO070M0.js +1 -0
  367. package/dist/control-web/assets/soy-Brmx7dQM.js +1 -0
  368. package/dist/control-web/assets/sparql-rVzFXLq3.js +1 -0
  369. package/dist/control-web/assets/splunk-BtCnVYZw.js +1 -0
  370. package/dist/control-web/assets/sql-BLtJtn59.js +1 -0
  371. package/dist/control-web/assets/ssh-config-_ykCGR6B.js +1 -0
  372. package/dist/control-web/assets/stata-BH5u7GGu.js +1 -0
  373. package/dist/control-web/assets/stateDiagram-2N3HPSRC-CaFYkZZ2.js +1 -0
  374. package/dist/control-web/assets/stateDiagram-v2-6OUMAXLB-CCvEZFYI.js +1 -0
  375. package/dist/control-web/assets/stylus-BEDo0Tqx.js +1 -0
  376. package/dist/control-web/assets/surrealql-Bq5Q-fJD.js +1 -0
  377. package/dist/control-web/assets/svelte-C_ipcX3V.js +1 -0
  378. package/dist/control-web/assets/swift-D82vCrfD.js +1 -0
  379. package/dist/control-web/assets/swimlanes-5IMT3BWC-CV2YWeYv.js +2 -0
  380. package/dist/control-web/assets/swimlanesDiagram-G3AALYLV-BFAdJHEB.js +8 -0
  381. package/dist/control-web/assets/synthwave-84-CbfX1IO0.js +1 -0
  382. package/dist/control-web/assets/system-verilog-CnnmHF94.js +1 -0
  383. package/dist/control-web/assets/systemd-4A_iFExJ.js +1 -0
  384. package/dist/control-web/assets/talonscript-CkByrt1z.js +1 -0
  385. package/dist/control-web/assets/tasl-QIJgUcNo.js +1 -0
  386. package/dist/control-web/assets/tcl-dwOrl1Do.js +1 -0
  387. package/dist/control-web/assets/templ-P3uqSqPl.js +1 -0
  388. package/dist/control-web/assets/terraform-BETggiCN.js +1 -0
  389. package/dist/control-web/assets/tex-idrVyKtj.js +1 -0
  390. package/dist/control-web/assets/timeline-definition-FHXFAJF6-Cq32UWLH.js +120 -0
  391. package/dist/control-web/assets/tokyo-night-hegEt444.js +1 -0
  392. package/dist/control-web/assets/toml-vGWfd6FD.js +1 -0
  393. package/dist/control-web/assets/ts-tags-zn1MmPIZ.js +1 -0
  394. package/dist/control-web/assets/tsv-B_m7g4N7.js +1 -0
  395. package/dist/control-web/assets/tsx-COt5Ahok.js +1 -0
  396. package/dist/control-web/assets/turtle-BsS91CYL.js +1 -0
  397. package/dist/control-web/assets/twig-DNn4PbVi.js +1 -0
  398. package/dist/control-web/assets/typescript-BPQ3VLAy.js +1 -0
  399. package/dist/control-web/assets/typespec-BGHnOYBU.js +1 -0
  400. package/dist/control-web/assets/typst-DHCkPAjA.js +1 -0
  401. package/dist/control-web/assets/v-BcVCzyr7.js +1 -0
  402. package/dist/control-web/assets/vala-CsfeWuGM.js +1 -0
  403. package/dist/control-web/assets/vb-D17OF-Vu.js +1 -0
  404. package/dist/control-web/assets/vennDiagram-L72KCM5P-BgBoqPth.js +34 -0
  405. package/dist/control-web/assets/verilog-BQ8w6xss.js +1 -0
  406. package/dist/control-web/assets/vesper-DU1UobuO.js +1 -0
  407. package/dist/control-web/assets/vhdl-CeAyd5Ju.js +1 -0
  408. package/dist/control-web/assets/viml-CJc9bBzg.js +1 -0
  409. package/dist/control-web/assets/vitesse-black-Bkuqu6BP.js +1 -0
  410. package/dist/control-web/assets/vitesse-dark-D0r3Knsf.js +1 -0
  411. package/dist/control-web/assets/vitesse-light-CVO1_9PV.js +1 -0
  412. package/dist/control-web/assets/vue-DN_0RTcg.js +1 -0
  413. package/dist/control-web/assets/vue-html-AaS7Mt5G.js +1 -0
  414. package/dist/control-web/assets/vue-vine-CQOfvN7w.js +1 -0
  415. package/dist/control-web/assets/vyper-CDx5xZoG.js +1 -0
  416. package/dist/control-web/assets/wardleyDiagram-EHGQE667-VsC2Gfpu.js +78 -0
  417. package/dist/control-web/assets/wasm-CG6Dc4jp.js +1 -0
  418. package/dist/control-web/assets/wasm-MzD3tlZU.js +1 -0
  419. package/dist/control-web/assets/wenyan-BV7otONQ.js +1 -0
  420. package/dist/control-web/assets/wgsl-Dx-B1_4e.js +1 -0
  421. package/dist/control-web/assets/wikitext-BhOHFoWU.js +1 -0
  422. package/dist/control-web/assets/wit-5i3qLPDT.js +1 -0
  423. package/dist/control-web/assets/wolfram-lXgVvXCa.js +1 -0
  424. package/dist/control-web/assets/xml-sdJ4AIDG.js +1 -0
  425. package/dist/control-web/assets/xsl-CtQFsRM5.js +1 -0
  426. package/dist/control-web/assets/xychartDiagram-FW5EYKEG-CyFiAunt.js +7 -0
  427. package/dist/control-web/assets/yaml-Buea-lGh.js +1 -0
  428. package/dist/control-web/assets/zenscript-DVFEvuxE.js +1 -0
  429. package/dist/control-web/assets/zig-VOosw3JB.js +1 -0
  430. package/dist/control-web/index.html +2 -2
  431. package/dist/control-web-dist.d.ts +1 -1
  432. package/dist/control-web-dist.js +4 -2
  433. package/dist/desktop-browser-host.d.ts +3 -1
  434. package/dist/desktop-browser-host.js +39 -4
  435. package/dist/machine-session-service.d.ts +94 -15
  436. package/dist/machine-session-service.js +700 -86
  437. package/dist/remote-runtime-dispatcher.d.ts +2 -2
  438. package/dist/remote-runtime-dispatcher.js +42 -2
  439. package/dist/remote-runtime-session-projection.d.ts +1 -0
  440. package/dist/remote-runtime-session-projection.js +6 -0
  441. package/dist/server.d.ts +47 -8
  442. package/dist/server.js +291 -47
  443. package/dist/session-browser-service.d.ts +24 -4
  444. package/dist/session-browser-service.js +127 -1
  445. package/dist/session-pending-inputs.d.ts +40 -0
  446. package/dist/session-pending-inputs.js +84 -0
  447. package/dist/session-portal.d.ts +54 -0
  448. package/dist/session-portal.js +983 -0
  449. package/dist/session-runtime-index.d.ts +2 -6
  450. package/dist/session-runtime-index.js +70 -38
  451. package/dist/terminal-ws.js +8 -6
  452. package/package.json +7 -7
  453. package/dist/control-web/assets/index-BnX7NWJX.js +0 -689
  454. package/dist/control-web/assets/index-CUoWRX2i.css +0 -32
  455. package/dist/control-web/assets/mermaid-GHXKKRXX-C1fxAgiw.js +0 -131
@@ -1,5 +1,5 @@
1
1
  import { randomBytes, randomUUID } from "node:crypto";
2
- import { RUNTIME_BROWSER_MAX_PAGES, parseRuntimeBrowserCloseParams, parseRuntimeBrowserOpenParams, parseRuntimeBrowserPageCreateParams, parseRuntimeBrowserPageMutationParams, parseRuntimeBrowserPageNavigateParams, parseRuntimeBrowserState, parseRuntimeBrowserStateGetParams, } from "@rynx-ai/protocol/runtime-browser";
2
+ import { RUNTIME_BROWSER_MAX_PAGES, parseRuntimeBrowserRequestHeadersGetParams, parseRuntimeBrowserRequestHeadersSetParams, parseRuntimeBrowserCloseParams, parseRuntimeBrowserOpenParams, parseRuntimeBrowserPageCreateParams, parseRuntimeBrowserPageMutationParams, parseRuntimeBrowserPageNavigateParams, parseRuntimeBrowserState, parseRuntimeBrowserStateGetParams, } from "@rynx-ai/protocol/runtime-browser";
3
3
  import { parseRuntimeBrowserEndpointDescriptor, } from "@rynx-ai/protocol/runtime-browser-bootstrap";
4
4
  const MAX_HOST_PAGE_ID_CHARS = 2_048;
5
5
  const MAX_PAGE_ID_FACTORY_ATTEMPTS = 64;
@@ -37,11 +37,14 @@ export class SessionBrowserService {
37
37
  ports;
38
38
  records = new Map();
39
39
  generations = new Map();
40
+ requestHeaderPolicies = new Map();
40
41
  queues = new Map();
41
42
  deletingSessions = new Set();
42
43
  observers = new Set();
43
44
  pageIdFactory;
44
45
  bootGenerationSeed;
46
+ requestHeaderRevisionSeed;
47
+ requestHeaderRevision = 0;
45
48
  admissionReserve;
46
49
  shuttingDown = false;
47
50
  closeAllPromise;
@@ -49,12 +52,17 @@ export class SessionBrowserService {
49
52
  this.ports = ports;
50
53
  this.pageIdFactory = options.pageIdFactory ?? (() => `page_${randomUUID()}`);
51
54
  this.bootGenerationSeed = options.bootGenerationSeed ?? randomBootGenerationSeed();
55
+ this.requestHeaderRevisionSeed = options.requestHeaderRevisionSeed ??
56
+ randomBytes(16).toString("base64url");
52
57
  this.admissionReserve = options.admissionReserve;
53
58
  if (!Number.isSafeInteger(this.bootGenerationSeed) ||
54
59
  this.bootGenerationSeed < 0 ||
55
60
  this.bootGenerationSeed >= Number.MAX_SAFE_INTEGER) {
56
61
  throw new Error("Browser boot generation seed must be a nonnegative safe integer");
57
62
  }
63
+ if (!/^[A-Za-z0-9_-]{16,128}$/.test(this.requestHeaderRevisionSeed)) {
64
+ throw new Error("Browser request Header revision seed must be an opaque 16-128 character token");
65
+ }
58
66
  }
59
67
  /** Number of Session Browsers that still own a physical Host handle. */
60
68
  activeBrowserCount() {
@@ -144,6 +152,70 @@ export class SessionBrowserService {
144
152
  return this.project(record);
145
153
  });
146
154
  }
155
+ async getRequestHeaders(input) {
156
+ const params = parseInput(() => parseRuntimeBrowserRequestHeadersGetParams(input), "Browser request headers read is invalid");
157
+ return this.exclusive(params.sessionId, async () => {
158
+ this.ensureRunning();
159
+ await this.ensureSessionExists(params.sessionId);
160
+ return cloneRequestHeadersPolicy(this.currentRequestHeaders(params.sessionId));
161
+ });
162
+ }
163
+ async setRequestHeaders(input) {
164
+ const params = parseInput(() => parseRuntimeBrowserRequestHeadersSetParams(input), "Browser request headers update is invalid");
165
+ return this.exclusive(params.sessionId, async () => {
166
+ this.ensureRunning();
167
+ await this.ensureSessionExists(params.sessionId);
168
+ const current = this.currentRequestHeaders(params.sessionId);
169
+ if (params.expectedRevision !== current.revision) {
170
+ throw new SessionBrowserServiceError("revision_mismatch", "Browser request headers changed since they were read");
171
+ }
172
+ const nextConfig = {
173
+ enabled: params.enabled,
174
+ headers: params.headers.map((header) => ({ ...header })),
175
+ };
176
+ if (sameRequestHeadersConfig(current, nextConfig)) {
177
+ return cloneRequestHeadersPolicy(current);
178
+ }
179
+ // Reserve the next token before touching a live Host so revision-space
180
+ // exhaustion can never turn a successfully applied policy into an
181
+ // uncommitted outcome. Gaps after Host failure are harmless.
182
+ const nextRevision = this.nextRequestHeadersRevision();
183
+ const record = this.records.get(params.sessionId);
184
+ if (record && record.status !== "ready") {
185
+ await this.closeUnavailableForRecreate(record);
186
+ }
187
+ else if (record && !sameEffectiveRequestHeaders(current, nextConfig)) {
188
+ try {
189
+ await record.handle.setRequestHeaders(nextConfig);
190
+ }
191
+ catch (error) {
192
+ // A definite compatibility rejection did not touch the live Host.
193
+ // Preserve both the current Browser and committed policy so callers
194
+ // can upgrade the Host or close/reopen explicitly without data loss.
195
+ if (error instanceof SessionBrowserHostError && error.code === "unsupported") {
196
+ throw mapHostError(error, "Browser Host does not support request headers");
197
+ }
198
+ record.status = "unavailable";
199
+ try {
200
+ await record.handle.close();
201
+ if (this.records.get(params.sessionId) === record) {
202
+ this.records.delete(params.sessionId);
203
+ }
204
+ }
205
+ catch (closeError) {
206
+ throw new SessionBrowserServiceError("outcome_unknown", "Browser request headers may have been partially applied", { cause: new AggregateError([error, closeError]) });
207
+ }
208
+ throw mapHostError(error, "Browser Host rejected the request headers update");
209
+ }
210
+ }
211
+ const policy = {
212
+ ...nextConfig,
213
+ revision: nextRevision,
214
+ };
215
+ this.requestHeaderPolicies.set(params.sessionId, policy);
216
+ return cloneRequestHeadersPolicy(policy);
217
+ });
218
+ }
147
219
  /**
148
220
  * Runtime-local automation handoff. This method is deliberately absent from
149
221
  * RemoteRuntimeBrowserHost and Direct RPC so a CDP endpoint cannot cross a
@@ -314,6 +386,9 @@ export class SessionBrowserService {
314
386
  this.deletingSessions.add(parsed);
315
387
  await this.exclusive(parsed, async () => {
316
388
  const failures = [];
389
+ // Header values are runtime-only and may be sensitive. Forget them as
390
+ // soon as deletion owns the Session, even if physical cleanup fails.
391
+ this.requestHeaderPolicies.delete(parsed);
317
392
  const record = this.records.get(parsed);
318
393
  if (record) {
319
394
  record.status = "closing";
@@ -367,6 +442,9 @@ export class SessionBrowserService {
367
442
  }, true)));
368
443
  }
369
444
  await Promise.allSettled([...this.observers]);
445
+ // Values may be sensitive. Once the service is fenced they have no valid
446
+ // reader, so do not retain them for the rest of a graceful process exit.
447
+ this.requestHeaderPolicies.clear();
370
448
  if (failures.length > 0) {
371
449
  throw new SessionBrowserServiceError("host_failure", "One or more Browsers did not close during shutdown", { cause: failures[0] });
372
450
  }
@@ -384,6 +462,7 @@ export class SessionBrowserService {
384
462
  handle = await this.ports.host.createBrowser({
385
463
  sessionId: params.sessionId,
386
464
  browserGeneration,
465
+ requestHeaders: cloneRequestHeadersConfig(this.currentRequestHeaders(params.sessionId)),
387
466
  ...(params.url === undefined ? {} : { url: params.url }),
388
467
  });
389
468
  }
@@ -455,6 +534,20 @@ export class SessionBrowserService {
455
534
  }
456
535
  return admission;
457
536
  }
537
+ currentRequestHeaders(sessionId) {
538
+ return this.requestHeaderPolicies.get(sessionId) ?? {
539
+ enabled: false,
540
+ headers: [],
541
+ revision: `${this.requestHeaderRevisionSeed}.0`,
542
+ };
543
+ }
544
+ nextRequestHeadersRevision() {
545
+ if (this.requestHeaderRevision >= Number.MAX_SAFE_INTEGER) {
546
+ throw new SessionBrowserServiceError("capacity", "Browser request headers revision space is exhausted");
547
+ }
548
+ this.requestHeaderRevision += 1;
549
+ return `${this.requestHeaderRevisionSeed}.${this.requestHeaderRevision.toString(36)}`;
550
+ }
458
551
  async closeUnavailableForRecreate(record) {
459
552
  record.status = "closing";
460
553
  try {
@@ -768,12 +861,45 @@ function mapHostError(error, fallbackMessage) {
768
861
  if (error.code === "outcome_unknown") {
769
862
  return new SessionBrowserServiceError("outcome_unknown", "Browser Host operation outcome is unknown", { cause: error });
770
863
  }
864
+ if (error.code === "unsupported") {
865
+ return new SessionBrowserServiceError("unsupported", "Browser Host does not support this operation", { cause: error });
866
+ }
771
867
  return new SessionBrowserServiceError("unavailable", "Browser Host is unavailable", {
772
868
  cause: error,
773
869
  });
774
870
  }
775
871
  return new SessionBrowserServiceError("host_failure", fallbackMessage, { cause: error });
776
872
  }
873
+ function cloneRequestHeadersConfig(config) {
874
+ return {
875
+ enabled: config.enabled,
876
+ headers: config.headers.map((header) => ({ ...header })),
877
+ };
878
+ }
879
+ function cloneRequestHeadersPolicy(policy) {
880
+ return {
881
+ ...cloneRequestHeadersConfig(policy),
882
+ revision: policy.revision,
883
+ };
884
+ }
885
+ function sameRequestHeadersConfig(left, right) {
886
+ return left.enabled === right.enabled && sameRequestHeaderRows(left.headers, right.headers, true);
887
+ }
888
+ function sameEffectiveRequestHeaders(left, right) {
889
+ return sameRequestHeaderRows(left.enabled ? left.headers : [], right.enabled ? right.headers : [], false);
890
+ }
891
+ function sameRequestHeaderRows(left, right, preserveNameCase) {
892
+ if (left.length !== right.length)
893
+ return false;
894
+ return left.every((header, index) => {
895
+ const candidate = right[index];
896
+ return candidate !== undefined &&
897
+ (preserveNameCase
898
+ ? header.name === candidate.name
899
+ : header.name.toLowerCase() === candidate.name.toLowerCase()) &&
900
+ header.value === candidate.value;
901
+ });
902
+ }
777
903
  function validateHostPageId(value) {
778
904
  if (typeof value !== "string" ||
779
905
  value.length === 0 ||
@@ -0,0 +1,40 @@
1
+ import type { UserContentPart } from "@rynx-ai/protocol";
2
+ export interface MachineSessionPendingInput {
3
+ pendingId: string;
4
+ content: UserContentPart[];
5
+ }
6
+ export interface MachineSessionPendingInputRecord {
7
+ clientMessageId: string;
8
+ content: UserContentPart[];
9
+ }
10
+ export interface MachineSessionDrainedInput extends MachineSessionPendingInput {
11
+ clientMessageId: string;
12
+ }
13
+ export interface MachineSessionPendingInputPort {
14
+ record(sessionId: string, input: MachineSessionPendingInputRecord): string;
15
+ resolve(sessionId: string, pendingId: string): void;
16
+ resolveOldest(sessionId: string): MachineSessionDrainedInput | undefined;
17
+ findByClientMessageId(sessionId: string, clientMessageId: string): MachineSessionPendingInput | undefined;
18
+ snapshotFor(sessionId: string): MachineSessionPendingInput[];
19
+ deleteSession(sessionId: string): void;
20
+ }
21
+ /**
22
+ * Process-live FIFO of web-composer inputs awaiting their native transcript
23
+ * echo. The message is deliberately not persisted when the send POST succeeds:
24
+ * the Provider transcript remains the sole durable writer. This index only
25
+ * keeps the temporary bubble recoverable across page rebinds until that echo
26
+ * arrives.
27
+ */
28
+ export declare class SessionPendingInputIndex implements MachineSessionPendingInputPort {
29
+ private readonly ttlMs;
30
+ private readonly now;
31
+ private readonly entries;
32
+ constructor(ttlMs?: number, now?: () => number);
33
+ record(sessionId: string, input: MachineSessionPendingInputRecord): string;
34
+ resolve(sessionId: string, pendingId: string): void;
35
+ resolveOldest(sessionId: string): MachineSessionDrainedInput | undefined;
36
+ findByClientMessageId(sessionId: string, clientMessageId: string): MachineSessionPendingInput | undefined;
37
+ snapshotFor(sessionId: string): MachineSessionPendingInput[];
38
+ deleteSession(sessionId: string): void;
39
+ private evictStale;
40
+ }
@@ -0,0 +1,84 @@
1
+ import { randomUUID } from "node:crypto";
2
+ const DEFAULT_PENDING_INPUT_TTL_MS = 10 * 60_000;
3
+ /**
4
+ * Process-live FIFO of web-composer inputs awaiting their native transcript
5
+ * echo. The message is deliberately not persisted when the send POST succeeds:
6
+ * the Provider transcript remains the sole durable writer. This index only
7
+ * keeps the temporary bubble recoverable across page rebinds until that echo
8
+ * arrives.
9
+ */
10
+ export class SessionPendingInputIndex {
11
+ ttlMs;
12
+ now;
13
+ entries = new Map();
14
+ constructor(ttlMs = DEFAULT_PENDING_INPUT_TTL_MS, now = Date.now) {
15
+ this.ttlMs = ttlMs;
16
+ this.now = now;
17
+ }
18
+ record(sessionId, input) {
19
+ this.evictStale(sessionId);
20
+ const pending = this.entries.get(sessionId) ?? new Map();
21
+ const pendingId = `pending_${randomUUID().replaceAll("-", "")}`;
22
+ pending.set(pendingId, {
23
+ pendingId,
24
+ clientMessageId: input.clientMessageId,
25
+ content: input.content.map((part) => ({ ...part })),
26
+ createdAt: this.now(),
27
+ });
28
+ this.entries.set(sessionId, pending);
29
+ return pendingId;
30
+ }
31
+ resolve(sessionId, pendingId) {
32
+ const pending = this.entries.get(sessionId);
33
+ if (!pending)
34
+ return;
35
+ pending.delete(pendingId);
36
+ if (pending.size === 0)
37
+ this.entries.delete(sessionId);
38
+ }
39
+ resolveOldest(sessionId) {
40
+ this.evictStale(sessionId);
41
+ const pending = this.entries.get(sessionId);
42
+ const pendingId = pending?.keys().next().value;
43
+ if (!pending || !pendingId)
44
+ return undefined;
45
+ const input = pending.get(pendingId);
46
+ pending.delete(pendingId);
47
+ if (pending.size === 0)
48
+ this.entries.delete(sessionId);
49
+ return input ? cloneDrainedInput(input) : undefined;
50
+ }
51
+ findByClientMessageId(sessionId, clientMessageId) {
52
+ this.evictStale(sessionId);
53
+ const input = [...(this.entries.get(sessionId)?.values() ?? [])].find((entry) => entry.clientMessageId === clientMessageId);
54
+ return input ? clonePendingInput(input) : undefined;
55
+ }
56
+ snapshotFor(sessionId) {
57
+ this.evictStale(sessionId);
58
+ return [...(this.entries.get(sessionId)?.values() ?? [])].map(clonePendingInput);
59
+ }
60
+ deleteSession(sessionId) {
61
+ this.entries.delete(sessionId);
62
+ }
63
+ evictStale(sessionId) {
64
+ const pending = this.entries.get(sessionId);
65
+ if (!pending)
66
+ return;
67
+ const cutoff = this.now() - this.ttlMs;
68
+ for (const [pendingId, input] of pending) {
69
+ if (input.createdAt < cutoff)
70
+ pending.delete(pendingId);
71
+ }
72
+ if (pending.size === 0)
73
+ this.entries.delete(sessionId);
74
+ }
75
+ }
76
+ function clonePendingInput(input) {
77
+ return {
78
+ pendingId: input.pendingId,
79
+ content: input.content.map((part) => ({ ...part })),
80
+ };
81
+ }
82
+ function cloneDrainedInput(input) {
83
+ return { ...clonePendingInput(input), clientMessageId: input.clientMessageId };
84
+ }
@@ -0,0 +1,54 @@
1
+ import { type IncomingMessage, type Server as HttpServer } from "node:http";
2
+ import type { Duplex } from "node:stream";
3
+ import Koa from "koa";
4
+ export declare const SESSION_PORTAL_HEADER = "x-rynx-session-portal";
5
+ export declare const SESSION_PORTAL_QUERY = "portal";
6
+ export declare const SESSION_PORTAL_SECRET_HEADER = "x-rynx-session-portal-secret";
7
+ export declare const SESSION_PORTAL_SECRET_QUERY = "portal_secret";
8
+ export declare const SESSION_PORTAL_EMBED_ORIGIN_QUERY = "embed_origin";
9
+ export interface SessionPortalAuthorization {
10
+ portalId: string;
11
+ pluginId: string;
12
+ scope: "plugin_sessions" | "single_session";
13
+ access: "read_only" | "read_write";
14
+ embedOrigin?: string;
15
+ sessionId?: string;
16
+ expiresAt: string;
17
+ }
18
+ export interface SessionPortalAuthorizationPorts {
19
+ redeem(ticket: string, embedOrigin?: string): (SessionPortalAuthorization & {
20
+ secret: string;
21
+ }) | undefined;
22
+ authorize(portalId: string, secret: string): SessionPortalAuthorization | undefined;
23
+ inspect(portalId: string): SessionPortalAuthorization | undefined;
24
+ subscribeRevocations?(listener: (portalIds: readonly string[]) => void | Promise<void>): () => void;
25
+ ownsSession(pluginId: string, sessionId: string): boolean;
26
+ }
27
+ export interface SessionPortalOptions {
28
+ host: string;
29
+ port: number;
30
+ scheme: "http" | "https";
31
+ authorization: SessionPortalAuthorizationPorts;
32
+ controlOrigin: string;
33
+ controlWebDist: string;
34
+ shutdownSignal?: AbortSignal;
35
+ }
36
+ export interface SessionPortalServer {
37
+ server: HttpServer;
38
+ stopAccepting(): void;
39
+ shutdown(): Promise<void>;
40
+ }
41
+ declare class SessionPortalTransportRegistry {
42
+ private readonly transports;
43
+ track(portalId: string, close: () => void): () => void;
44
+ revoke(portalIds: readonly string[]): Promise<void>;
45
+ }
46
+ /** Session Portal is a narrow adapter in front of the one Control service. It
47
+ * serves the native SPA, validates Portal grants, and forwards only authorized
48
+ * Session HTTP calls to Control; it owns no Session or Runtime handlers. */
49
+ export declare function createSessionPortalApp(options: SessionPortalOptions, transports?: SessionPortalTransportRegistry): Koa;
50
+ export declare function startSessionPortal(options: SessionPortalOptions): Promise<SessionPortalServer>;
51
+ export declare function authorizeSessionPortalWebSocket(request: IncomingMessage, ports: SessionPortalAuthorizationPorts, runtimeSelector: string, sessionId: string): SessionPortalAuthorization | undefined;
52
+ export declare function rejectSessionPortalUpgrade(socket: Duplex): void;
53
+ export declare function scheduleSessionPortalExpiry(expiresAt: string, onExpire: () => void): () => void;
54
+ export {};