@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
package/dist/server.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { basename, extname, isAbsolute } from "node:path";
1
2
  import { pathToFileURL } from "node:url";
2
3
  import Koa from "koa";
3
4
  import Router from "@koa/router";
@@ -10,10 +11,13 @@ import { attachBrowserSurfaceWs } from "./browser-surface-ws.js";
10
11
  import { attachEmulatorSurfaceWs } from "./emulator-surface-ws.js";
11
12
  import { attachDesktopBrowserHostServer, } from "./desktop-browser-host.js";
12
13
  import { resolveControlWebDist, sendSpaFile } from "./control-web-dist.js";
14
+ import { startSessionPortal, } from "./session-portal.js";
15
+ export { createSessionPortalApp, startSessionPortal } from "./session-portal.js";
13
16
  import { SessionRuntimeIndex } from "./session-runtime-index.js";
14
17
  import { createRunnerSessionTerminalHost, } from "./session-terminal-host.js";
15
18
  import { runtimeWebAccessPolicyForBindHost, } from "./runtime-web-auth.js";
16
19
  export { MachineSessionService, MachineSessionServiceFailure, MachineSessionServiceInputError, synthesizeSessionTitle, } from "./machine-session-service.js";
20
+ export { SessionPendingInputIndex } from "./session-pending-inputs.js";
17
21
  export { SessionBrowserHostError, SessionBrowserService, SessionBrowserServiceError, SessionBrowserSurfaceUnsupportedError, } from "./session-browser-service.js";
18
22
  export { SessionEmulatorBindingConflictError, SessionEmulatorService, SessionEmulatorServiceError, } from "./session-emulator-service.js";
19
23
  export { SessionBrowserSurfaceCoordinator } from "./session-browser-surface-coordinator.js";
@@ -64,19 +68,41 @@ export function createSessionRuntimeServices(input) {
64
68
  });
65
69
  const sessionBus = new InMemorySessionBus();
66
70
  const sessionRuntimeIndex = new SessionRuntimeIndex();
67
- const sessionMirrorQueue = new SessionMirrorQueue((sessionId, event) => persistSessionEvent(sessionId, event, { sessionLog: input.sessionLog, sessionBus }));
71
+ const sessionMirrorQueue = new SessionMirrorQueue(async (sessionId, event) => {
72
+ const generatedImageFinalized = await finalizeGeneratedImageEvent(sessionId, event, input);
73
+ const pendingFinalized = resolvePendingInputEvent(sessionId, generatedImageFinalized, input.pendingInputs);
74
+ const finalized = pendingFinalized.event;
75
+ sessionRuntimeIndex.observe(sessionId, finalized);
76
+ await persistSessionEvent(sessionId, finalized, {
77
+ sessionLog: input.sessionLog,
78
+ sessionBus,
79
+ ...(input.onPendingInputPersisted
80
+ ? {
81
+ onInputPersisted: async (persistedEvent) => {
82
+ if (!persistedEvent.clearedPendingId || !pendingFinalized.clientMessageId)
83
+ return;
84
+ await input.onPendingInputPersisted({
85
+ sessionId,
86
+ pendingId: persistedEvent.clearedPendingId,
87
+ clientMessageId: pendingFinalized.clientMessageId,
88
+ responseId: persistedEvent.item.responseId,
89
+ messageItemId: persistedEvent.item.id,
90
+ });
91
+ },
92
+ }
93
+ : {}),
94
+ });
95
+ });
68
96
  const mirrorSessionEvent = (sessionId, event) => {
69
- sessionRuntimeIndex.observe(sessionId, event);
70
97
  return sessionMirrorQueue.enqueue(sessionId, event);
71
98
  };
72
99
  const conversationRuntime = new ConversationRuntime({
73
100
  config: input.config,
74
101
  executor: runnerManager,
75
102
  sessionBus,
76
- sessionEventSink: mirrorSessionEvent,
77
103
  });
78
104
  runnerManager.onMirror((sessionId, event) => {
79
- void mirrorSessionEvent(sessionId, event).catch((error) => {
105
+ return mirrorSessionEvent(sessionId, event).catch((error) => {
80
106
  input.onMirrorError?.(error, sessionId);
81
107
  });
82
108
  });
@@ -89,6 +115,113 @@ export function createSessionRuntimeServices(input) {
89
115
  publishSessionEvent: mirrorSessionEvent,
90
116
  };
91
117
  }
118
+ /** Drain the oldest pending web input when the Provider transcript produces a
119
+ * real user record. The transcript is the only durable writer; the returned id
120
+ * lets clients replace the exact temporary bubble. */
121
+ function resolvePendingInputEvent(sessionId, event, pendingInputs) {
122
+ if (event.type !== "session.input.consumed" ||
123
+ event.item.type !== "message" ||
124
+ event.item.data.role !== "user" ||
125
+ event.item.data.isMeta) {
126
+ return { event };
127
+ }
128
+ const pending = pendingInputs?.resolveOldest(sessionId);
129
+ if (!pending)
130
+ return { event };
131
+ const fileParts = pending.content.filter((part) => part.type === "input_image" || part.type === "input_file");
132
+ const alreadyHasFiles = event.item.data.content.some((part) => part.type === "input_image" || part.type === "input_file");
133
+ const containsInternalResourceMarker = event.item.data.content.some((part) => part.type === "input_text" &&
134
+ /\[\[RYNX_(?:IMAGE|FILE)_RESOURCE\s/.test(part.text));
135
+ const content = containsInternalResourceMarker
136
+ ? pending.content
137
+ : fileParts.length > 0 && !alreadyHasFiles
138
+ ? [...fileParts, ...event.item.data.content]
139
+ : event.item.data.content;
140
+ return {
141
+ clientMessageId: pending.clientMessageId,
142
+ event: {
143
+ ...event,
144
+ clearedPendingId: pending.pendingId,
145
+ ...(content !== event.item.data.content
146
+ ? {
147
+ item: {
148
+ ...event.item,
149
+ data: {
150
+ ...event.item.data,
151
+ content,
152
+ },
153
+ },
154
+ }
155
+ : {}),
156
+ },
157
+ };
158
+ }
159
+ async function finalizeGeneratedImageEvent(sessionId, event, input) {
160
+ if (event.type !== "response.output_item.done" ||
161
+ event.item.type !== "function_call_output") {
162
+ return event;
163
+ }
164
+ const rawData = event.item.data;
165
+ const pending = rawData.__rynxGeneratedImage;
166
+ if (!pending)
167
+ return event;
168
+ const { __rynxGeneratedImage: _omitted, ...data } = rawData;
169
+ try {
170
+ const pathMediaType = pending.savedPath && isAbsolute(pending.savedPath)
171
+ ? imageMediaTypeFromPath(pending.savedPath)
172
+ : undefined;
173
+ const generatedImage = pathMediaType && pending.savedPath
174
+ ? {
175
+ path: pending.savedPath,
176
+ filename: basename(pending.savedPath),
177
+ mediaType: pathMediaType,
178
+ }
179
+ : pending.result && input.materializeGeneratedImage
180
+ ? await input.materializeGeneratedImage({
181
+ sessionId,
182
+ sourceId: event.item.id,
183
+ result: pending.result,
184
+ })
185
+ : undefined;
186
+ return {
187
+ ...event,
188
+ item: {
189
+ ...event.item,
190
+ data: {
191
+ ...data,
192
+ ...(generatedImage ? { generatedImage } : {}),
193
+ ...(!generatedImage && pending.savedPath && !isAbsolute(pending.savedPath)
194
+ ? { output: `${data.output}\nImage path was not absolute; preview omitted.`.trim() }
195
+ : {}),
196
+ },
197
+ },
198
+ };
199
+ }
200
+ catch (error) {
201
+ input.onMirrorError?.(error, sessionId);
202
+ return {
203
+ ...event,
204
+ item: {
205
+ ...event.item,
206
+ data: {
207
+ ...data,
208
+ output: `${data.output}\nImage preview unavailable.`.trim(),
209
+ },
210
+ },
211
+ };
212
+ }
213
+ }
214
+ function imageMediaTypeFromPath(path) {
215
+ switch (extname(path).toLowerCase()) {
216
+ case ".png": return "image/png";
217
+ case ".jpg":
218
+ case ".jpeg": return "image/jpeg";
219
+ case ".webp": return "image/webp";
220
+ case ".gif": return "image/gif";
221
+ case ".svg": return "image/svg+xml";
222
+ default: return undefined;
223
+ }
224
+ }
92
225
  /**
93
226
  * The HTTP surface is just a liveness probe for container orchestration — all
94
227
  * agent capabilities are forwarded through the mounted channel plugins (the
@@ -137,7 +270,7 @@ export function createApp({ config = loadConfig(), control } = {}) {
137
270
  }
138
271
  return app;
139
272
  }
140
- export async function startServer({ config = loadConfig(), control, sessionLog, sessionRegistry, pluginRuntime, daemonManagement, remoteRuntime, remoteRuntimeAdmin, runtimeTargetControl, runtimeConnectionResolver, localSessionResources, localMachineSessions, sessionEmulators, sessionRuntimeServices, sessionLifecycle, sessionTerminals, runtimeLocalBrowser, providerClis, desktopBrowserHost, } = {}) {
273
+ export async function startServer({ config = loadConfig(), control, sessionLog, sessionRegistry, pluginRuntime, daemonManagement, remoteRuntime, remoteRuntimeAdmin, runtimeTargetControl, runtimeConnectionResolver, localSessionResources, localMachineSessions, sessionEmulators, sessionRuntimeServices, sessionLifecycle, sessionTerminals, runtimeLocalBrowser, providerClis, desktopBrowserHost, sessionPortalAuthorization, } = {}) {
141
274
  const runtimeWebAccess = runtimeWebAccessPolicyForBindHost(config.HOST);
142
275
  const desktopBrowserManagementToken = desktopBrowserHost
143
276
  ? requireDaemonManagementToken(daemonManagement)
@@ -160,14 +293,58 @@ export async function startServer({ config = loadConfig(), control, sessionLog,
160
293
  return { cwd: session.workspace.cwd };
161
294
  },
162
295
  });
296
+ const controlShutdown = new AbortController();
297
+ const controlSurface = control
298
+ ? {
299
+ deps: control,
300
+ runtime: conversationRuntime,
301
+ sessionBus,
302
+ sessionLog,
303
+ runnerManager,
304
+ sessionStore,
305
+ pluginRuntimeStatus: pluginRuntime
306
+ ? () => pluginRuntime.statusSnapshot()
307
+ : undefined,
308
+ daemonManagement,
309
+ remoteRuntime,
310
+ remoteRuntimeAdmin,
311
+ runtimeTargetControl,
312
+ runtimeConnectionResolver,
313
+ localSessionResources,
314
+ localMachineSessions,
315
+ sessionEmulators,
316
+ shutdownSignal: controlShutdown.signal,
317
+ sessionRuntimeIndex,
318
+ sessionLifecycle,
319
+ runtimeLocalBrowser,
320
+ providerClis,
321
+ }
322
+ : undefined;
323
+ const sessionPortalConfig = config.RYNX_SESSION_PORTAL_PORT !== undefined
324
+ ? (() => {
325
+ if (runtimeWebAccess.mode !== "loopback") {
326
+ throw new Error("Session Portal requires the ordinary Control listener to bind loopback only");
327
+ }
328
+ const controlWebDist = resolveControlWebDist();
329
+ if (!sessionPortalAuthorization || !controlSurface || !controlWebDist) {
330
+ throw new Error("Session Portal requires authorization, Control services, and the native Control Web build");
331
+ }
332
+ return { authorization: sessionPortalAuthorization, controlWebDist };
333
+ })()
334
+ : undefined;
335
+ let sessionPortalServer;
163
336
  if (pluginRuntime) {
164
337
  if (!sessionRegistry)
165
338
  throw new Error("plugin runtime requires a machine session registry");
339
+ if (!localMachineSessions) {
340
+ throw new Error("plugin runtime requires the machine Session service");
341
+ }
166
342
  pluginRuntime.bindHostServices({
167
- conversationRuntime,
168
343
  capabilities: runnerManager,
169
344
  sessionStore,
170
345
  sessionRegistry,
346
+ sessionRuns: localMachineSessions,
347
+ sessionFiles: localMachineSessions,
171
348
  agentCatalog: {
172
349
  list: async () => (await listAgentSpecs()).map(toPluginAgentSummary),
173
350
  get: async (id) => {
@@ -180,9 +357,57 @@ export async function startServer({ config = loadConfig(), control, sessionLog,
180
357
  session: input.session,
181
358
  }),
182
359
  },
360
+ sessionActivity: (sessionId) => {
361
+ const snapshot = sessionRuntimeIndex.snapshot(sessionId);
362
+ return {
363
+ ...snapshot,
364
+ status: snapshot.pendingInteractions.length > 0
365
+ ? "waiting"
366
+ : snapshot.status,
367
+ };
368
+ },
183
369
  interruptSession: (sessionId) => runnerManager.interruptLiveSession(sessionId),
184
370
  terminateSession: (sessionId) => runnerManager.terminateLiveSession(sessionId),
371
+ ...(sessionLog
372
+ ? {
373
+ sessionTimeline: {
374
+ hasItem: async (sessionId, itemId) => Boolean(await sessionLog.get(sessionId, itemId)),
375
+ projectText: async ({ sessionId, responseId, itemId, text }) => {
376
+ const event = {
377
+ type: "response.output_item.done",
378
+ responseId,
379
+ item: {
380
+ id: itemId,
381
+ sessionId,
382
+ position: -1,
383
+ responseId,
384
+ status: "completed",
385
+ createdAt: Date.now(),
386
+ createdBy: "plugin_projection",
387
+ type: "message",
388
+ data: { role: "assistant", content: [{ type: "output_text", text }] },
389
+ },
390
+ };
391
+ // Projection is an acknowledged durable operation, unlike the
392
+ // provider mirror's deliberately best-effort live fan-out.
393
+ // Append first and only then publish; a failed append leaves the
394
+ // projection ledger pending so the Plugin can retry safely.
395
+ await sessionLog.append(sessionId, [event.item]);
396
+ sessionServices.sessionBus.publish(sessionId, event);
397
+ },
398
+ },
399
+ }
400
+ : {}),
185
401
  resolveSessionInteraction: (sessionId, interactionId, resolution) => runnerManager.resolveInteraction(sessionId, interactionId, resolution),
402
+ ...(sessionPortalConfig
403
+ ? {
404
+ sessionPortal: {
405
+ scheme: "http",
406
+ bindHost: config.RYNX_SESSION_PORTAL_HOST,
407
+ port: config.RYNX_SESSION_PORTAL_PORT,
408
+ },
409
+ }
410
+ : {}),
186
411
  });
187
412
  }
188
413
  // Provider TUI `/clear`·`/fork` uses the same publication boundary as an
@@ -198,38 +423,37 @@ export async function startServer({ config = loadConfig(), control, sessionLog,
198
423
  kind: r.kind,
199
424
  });
200
425
  });
201
- const controlShutdown = new AbortController();
426
+ if (localMachineSessions) {
427
+ runnerManager.onCollaborationMode((sessionId, mode) => {
428
+ localMachineSessions.recordNativeCollaborationMode(sessionId, mode);
429
+ });
430
+ }
202
431
  const app = createApp({
203
432
  config,
204
- control: control
205
- ? {
206
- deps: control,
207
- runtime: conversationRuntime,
208
- sessionBus,
209
- sessionLog,
210
- runnerManager,
211
- sessionStore,
212
- pluginRuntimeStatus: pluginRuntime
213
- ? () => pluginRuntime.statusSnapshot()
214
- : undefined,
215
- daemonManagement,
216
- remoteRuntime,
217
- remoteRuntimeAdmin,
218
- runtimeTargetControl,
219
- runtimeConnectionResolver,
220
- localSessionResources,
221
- localMachineSessions,
222
- sessionEmulators,
223
- shutdownSignal: controlShutdown.signal,
224
- sessionRuntimeIndex,
225
- sessionLifecycle,
226
- runtimeLocalBrowser,
227
- providerClis,
228
- }
229
- : undefined,
433
+ control: controlSurface,
230
434
  });
231
- return new Promise((resolve) => {
435
+ return new Promise((resolve, reject) => {
436
+ let startupWebSocketServers = [];
437
+ const rejectBeforeListening = (error) => reject(error);
232
438
  const server = app.listen(config.PORT, config.HOST, () => {
439
+ server.off("error", rejectBeforeListening);
440
+ void finishStartup(server).catch(async (error) => {
441
+ controlShutdown.abort(asError(error));
442
+ sessionPortalServer?.stopAccepting();
443
+ server.closeAllConnections?.();
444
+ await Promise.allSettled([
445
+ closeWebSocketServers(startupWebSocketServers),
446
+ sessionPortalServer?.shutdown() ?? Promise.resolve(),
447
+ new Promise((done) => server.close(() => done())),
448
+ Promise.resolve(daemonManagement?.pluginManagement?.dispose?.()),
449
+ Promise.resolve(pluginRuntime?.dispose()),
450
+ runnerManager.stop(),
451
+ ]);
452
+ reject(error);
453
+ });
454
+ });
455
+ server.once("error", rejectBeforeListening);
456
+ const finishStartup = async (server) => {
233
457
  console.log(JSON.stringify({
234
458
  level: config.LOG_LEVEL,
235
459
  msg: "Harness agent server listening",
@@ -238,15 +462,6 @@ export async function startServer({ config = loadConfig(), control, sessionLog,
238
462
  runtime: config.DEFAULT_RUNTIME,
239
463
  model: resolveRuntimeModel(config, config.DEFAULT_RUNTIME),
240
464
  }));
241
- const startup = pluginRuntime?.startPluginRuntimes() ?? Promise.resolve();
242
- void startup.catch((error) => {
243
- console.error(JSON.stringify({
244
- level: "error",
245
- type: "plugin-runtime",
246
- event: "startup_failed",
247
- error: error instanceof Error ? error.message : String(error),
248
- }));
249
- });
250
465
  const webSocketServers = [
251
466
  attachTerminalWs(server, {
252
467
  runtimeConnectionResolver,
@@ -265,19 +480,48 @@ export async function startServer({ config = loadConfig(), control, sessionLog,
265
480
  if (control?.emulator) {
266
481
  webSocketServers.push(attachEmulatorTouchWs(server, { emulator: control.emulator }));
267
482
  }
483
+ startupWebSocketServers = webSocketServers;
484
+ // Plugin recovery fences and revokes any product-owned Portal authority.
485
+ // Do not expose the listener until every enabled Plugin got its serialized
486
+ // startup attempt; startPluginRuntimes absorbs individual failures.
487
+ await (pluginRuntime?.startPluginRuntimes() ?? Promise.resolve());
488
+ if (sessionPortalConfig) {
489
+ sessionPortalServer = await startSessionPortal({
490
+ host: config.RYNX_SESSION_PORTAL_HOST,
491
+ port: config.RYNX_SESSION_PORTAL_PORT,
492
+ scheme: "http",
493
+ authorization: sessionPortalConfig.authorization,
494
+ controlOrigin: listeningHttpOrigin(server),
495
+ controlWebDist: sessionPortalConfig.controlWebDist,
496
+ shutdownSignal: controlShutdown.signal,
497
+ });
498
+ }
268
499
  resolve(bindServerLifecycle(server, {
269
- fence: () => controlShutdown.abort(new Error("Rynx server is shutting down")),
270
- closeUpgrades: () => closeWebSocketServers(webSocketServers),
500
+ fence: () => {
501
+ controlShutdown.abort(new Error("Rynx server is shutting down"));
502
+ sessionPortalServer?.stopAccepting();
503
+ },
504
+ closeUpgrades: () => Promise.all([
505
+ closeWebSocketServers(webSocketServers),
506
+ sessionPortalServer?.shutdown() ?? Promise.resolve(),
507
+ ]).then(() => undefined),
271
508
  cleanup: async () => runCleanupSteps([
272
- () => startup.catch(() => undefined),
273
509
  () => Promise.resolve(daemonManagement?.pluginManagement?.dispose?.()),
274
510
  () => pluginRuntime?.dispose() ?? Promise.resolve(),
275
511
  () => runnerManager.stop(),
276
512
  ]),
277
513
  }));
278
- });
514
+ };
279
515
  });
280
516
  }
517
+ function listeningHttpOrigin(server) {
518
+ const address = server.address();
519
+ if (!address || typeof address === "string") {
520
+ throw new Error("Control listener did not expose an HTTP address");
521
+ }
522
+ const host = address.address.includes(":") ? `[${address.address}]` : address.address;
523
+ return `http://${host}:${address.port}`;
524
+ }
281
525
  function requireDaemonManagementToken(host) {
282
526
  const token = host?.managementToken;
283
527
  const bytes = typeof token === "string" ? Buffer.byteLength(token, "utf8") : 0;
@@ -1,10 +1,14 @@
1
1
  import type { AdmissionReservation } from "@rynx-ai/core";
2
- import { type RuntimeBrowserCloseParams, type RuntimeBrowserCloseResult, type RuntimeBrowserExecutionBackend, type RuntimeBrowserOpenParams, type RuntimeBrowserPageCreateParams, type RuntimeBrowserPageMutationParams, type RuntimeBrowserPageNavigateParams, type RuntimeBrowserState, type RuntimeBrowserStateGetParams } from "@rynx-ai/protocol/runtime-browser";
2
+ import { type RuntimeBrowserCloseParams, type RuntimeBrowserCloseResult, type RuntimeBrowserExecutionBackend, type RuntimeBrowserOpenParams, type RuntimeBrowserPageCreateParams, type RuntimeBrowserPageMutationParams, type RuntimeBrowserPageNavigateParams, type RuntimeBrowserRequestHeadersConfig, type RuntimeBrowserRequestHeadersGetParams, type RuntimeBrowserRequestHeadersPolicy, type RuntimeBrowserRequestHeadersSetParams, type RuntimeBrowserState, type RuntimeBrowserStateGetParams } from "@rynx-ai/protocol/runtime-browser";
3
3
  import type { RuntimeBrowserSurfaceFormat, RuntimeBrowserSurfaceInputEvent } from "@rynx-ai/protocol/runtime-browser-surface";
4
4
  import { type RuntimeBrowserEndpointDescriptor } from "@rynx-ai/protocol/runtime-browser-bootstrap";
5
5
  export interface SessionBrowserHostCreateInput {
6
6
  sessionId: string;
7
7
  browserGeneration: number;
8
+ /** Required at this internal boundary so every Host installs the policy
9
+ * before it permits the first navigation. Wire-version compatibility stays
10
+ * inside the concrete Host adapter. */
11
+ requestHeaders: RuntimeBrowserRequestHeadersConfig;
8
12
  url?: string;
9
13
  }
10
14
  /** Generation-scoped physical page state. `hostPageId` never leaves the service. */
@@ -136,6 +140,8 @@ export interface SessionBrowserHostHandle {
136
140
  goBack(hostPageId: string): Promise<void>;
137
141
  goForward(hostPageId: string): Promise<void>;
138
142
  reload(hostPageId: string): Promise<void>;
143
+ /** Replaces the Session-wide desired request Header projection for this generation. */
144
+ setRequestHeaders(config: RuntimeBrowserRequestHeadersConfig): Promise<void>;
139
145
  close(): Promise<void>;
140
146
  }
141
147
  /** Physical Browser factory selected by the Runtime composition root. */
@@ -156,19 +162,26 @@ export interface SessionBrowserServiceOptions {
156
162
  pageIdFactory?: () => string;
157
163
  /** Injectable boot nonce; production randomization fences stale pre-restart mutations. */
158
164
  bootGenerationSeed?: number;
165
+ /** Injectable only for deterministic CAS tests; production uses 128 random bits. */
166
+ requestHeaderRevisionSeed?: string;
159
167
  /**
160
168
  * Synchronous daemon admission fence. A successful reservation is held until
161
169
  * Browser open has either failed or registered the physical Host handle.
162
170
  */
163
171
  admissionReserve?: () => AdmissionReservation | undefined;
164
172
  }
165
- export type SessionBrowserHostErrorCode = "unavailable" | "page_not_found" | "capacity" | "outcome_unknown";
173
+ export type SessionBrowserHostErrorCode = "unavailable" | "unsupported" | "page_not_found" | "capacity" | "outcome_unknown";
166
174
  /** Expected failure reported by a Browser Host implementation. */
167
175
  export declare class SessionBrowserHostError extends Error {
168
176
  readonly code: SessionBrowserHostErrorCode;
169
177
  constructor(code: SessionBrowserHostErrorCode, message: string, options?: ErrorOptions);
170
178
  }
171
- export type SessionBrowserServiceErrorCode = "invalid_request" | "not_found" | "generation_mismatch" | "unavailable" | "capacity" | "host_failure" | "outcome_unknown" | "shutting_down";
179
+ /** Narrow Session-owned policy port used by transports and Plugin hosting. */
180
+ export interface SessionBrowserRequestHeadersPort {
181
+ getRequestHeaders(input: RuntimeBrowserRequestHeadersGetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
182
+ setRequestHeaders(input: RuntimeBrowserRequestHeadersSetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
183
+ }
184
+ export type SessionBrowserServiceErrorCode = "invalid_request" | "not_found" | "generation_mismatch" | "revision_mismatch" | "unsupported" | "unavailable" | "capacity" | "host_failure" | "outcome_unknown" | "shutting_down";
172
185
  /** Stable application error; transports map the code without exposing Host diagnostics. */
173
186
  export declare class SessionBrowserServiceError extends Error {
174
187
  readonly code: SessionBrowserServiceErrorCode;
@@ -178,15 +191,18 @@ export declare class SessionBrowserServiceError extends Error {
178
191
  * Transport-neutral owner of the Runtime -> Session -> Browser -> Page model.
179
192
  * Every operation for one Session shares one queue; different Sessions remain independent.
180
193
  */
181
- export declare class SessionBrowserService {
194
+ export declare class SessionBrowserService implements SessionBrowserRequestHeadersPort {
182
195
  private readonly ports;
183
196
  private readonly records;
184
197
  private readonly generations;
198
+ private readonly requestHeaderPolicies;
185
199
  private readonly queues;
186
200
  private readonly deletingSessions;
187
201
  private readonly observers;
188
202
  private readonly pageIdFactory;
189
203
  private readonly bootGenerationSeed;
204
+ private readonly requestHeaderRevisionSeed;
205
+ private requestHeaderRevision;
190
206
  private readonly admissionReserve?;
191
207
  private shuttingDown;
192
208
  private closeAllPromise?;
@@ -205,6 +221,8 @@ export declare class SessionBrowserService {
205
221
  */
206
222
  getInspectionPageEndpoint(input: RuntimeBrowserPageMutationParams): Promise<SessionBrowserInspectionEndpoint>;
207
223
  getState(input: RuntimeBrowserStateGetParams): Promise<RuntimeBrowserState | null>;
224
+ getRequestHeaders(input: RuntimeBrowserRequestHeadersGetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
225
+ setRequestHeaders(input: RuntimeBrowserRequestHeadersSetParams): Promise<RuntimeBrowserRequestHeadersPolicy>;
208
226
  /**
209
227
  * Runtime-local automation handoff. This method is deliberately absent from
210
228
  * RemoteRuntimeBrowserHost and Direct RPC so a CDP endpoint cannot cross a
@@ -233,6 +251,8 @@ export declare class SessionBrowserService {
233
251
  private closeEveryRecord;
234
252
  private createBrowser;
235
253
  private reserveOpenAdmission;
254
+ private currentRequestHeaders;
255
+ private nextRequestHeadersRevision;
236
256
  private closeUnavailableForRecreate;
237
257
  private pageMutation;
238
258
  private pageMutationParsed;