@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.
- package/dist/control-api.d.ts +16 -4
- package/dist/control-api.js +713 -83
- package/dist/control-web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/control-web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/control-web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/control-web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/control-web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/control-web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/control-web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/control-web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/control-web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/control-web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/control-web/assets/abap-BdImnpbu.js +1 -0
- package/dist/control-web/assets/abnfDiagram-VRR7QNED-8c99_3I5.js +1 -0
- package/dist/control-web/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/control-web/assets/ada-bCR0ucgS.js +1 -0
- package/dist/control-web/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/control-web/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/control-web/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/control-web/assets/apache-Pmp26Uib.js +1 -0
- package/dist/control-web/assets/apex-D8_7TLub.js +1 -0
- package/dist/control-web/assets/apl-dKokRX4l.js +1 -0
- package/dist/control-web/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/control-web/assets/ara-BRHolxvo.js +1 -0
- package/dist/control-web/assets/arc-FWW96Tzo.js +1 -0
- package/dist/control-web/assets/architectureDiagram-ZJ3FMSHR-B5FrqoRB.js +36 -0
- package/dist/control-web/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/control-web/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/control-web/assets/astro-CbQHKStN.js +1 -0
- package/dist/control-web/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/control-web/assets/awk-DMzUqQB5.js +1 -0
- package/dist/control-web/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/control-web/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/control-web/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/control-web/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/control-web/assets/bat-BkioyH1T.js +1 -0
- package/dist/control-web/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/control-web/assets/berry-uYugtg8r.js +1 -0
- package/dist/control-web/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/control-web/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/control-web/assets/bird2-DPOp833l.js +1 -0
- package/dist/control-web/assets/blade-D4QpJJKB.js +1 -0
- package/dist/control-web/assets/blockDiagram-677ZJIJ3-DJRwOGMa.js +132 -0
- package/dist/control-web/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/control-web/assets/c-BIGW1oBm.js +1 -0
- package/dist/control-web/assets/c3-eo99z4R2.js +1 -0
- package/dist/control-web/assets/c4Diagram-LMCZKHZV-B8FCUurl.js +10 -0
- package/dist/control-web/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/control-web/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/control-web/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/control-web/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/control-web/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/control-web/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/control-web/assets/channel-Bnyhn1Qs.js +1 -0
- package/dist/control-web/assets/chunk-2Q5K7J3B-DC5xexY2.js +1 -0
- package/dist/control-web/assets/chunk-32BRIVSS-DAzT69zb.js +1 -0
- package/dist/control-web/assets/chunk-5VM5RSS4-CXKpL77L.js +15 -0
- package/dist/control-web/assets/chunk-EX3LRPZG-DQKQvoPv.js +231 -0
- package/dist/control-web/assets/chunk-JWPE2WC7-CWMqpJoT.js +1 -0
- package/dist/control-web/assets/chunk-MOJQB5TN-Bd8jn7RZ.js +88 -0
- package/dist/control-web/assets/chunk-RYQCIY6F-DKXEMFO6.js +1 -0
- package/dist/control-web/assets/chunk-V7JOEXUC-BUDLq5nU.js +206 -0
- package/dist/control-web/assets/chunk-VR4S4FIN-C65l7VIz.js +1 -0
- package/dist/control-web/assets/chunk-XXDRQBXY-Y2498HkC.js +1 -0
- package/dist/control-web/assets/clarity-D53aC0YG.js +1 -0
- package/dist/control-web/assets/classDiagram-OUVF2IWQ-CBtXSdwW.js +1 -0
- package/dist/control-web/assets/classDiagram-v2-EOCWNBFH-CBtXSdwW.js +1 -0
- package/dist/control-web/assets/clojure-P80f7IUj.js +1 -0
- package/dist/control-web/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/control-web/assets/cobol-nwyudZeR.js +1 -0
- package/dist/control-web/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/control-web/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/control-web/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/control-web/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/control-web/assets/coq-DkFqJrB1.js +1 -0
- package/dist/control-web/assets/cose-bilkent-JH36ORCC-C9aVXb8E.js +1 -0
- package/dist/control-web/assets/cpp-CofmeUqb.js +1 -0
- package/dist/control-web/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/control-web/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/control-web/assets/css-DPfMkruS.js +1 -0
- package/dist/control-web/assets/csv-fuZLfV_i.js +1 -0
- package/dist/control-web/assets/cue-D82EKSYY.js +1 -0
- package/dist/control-web/assets/cynefin-VYW2F7L2-BsyMhvG0.js +178 -0
- package/dist/control-web/assets/cynefinDiagram-TSTJHNR4-DwY43f3-.js +62 -0
- package/dist/control-web/assets/cypher-COkxafJQ.js +1 -0
- package/dist/control-web/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
- package/dist/control-web/assets/d-85-TOEBH.js +1 -0
- package/dist/control-web/assets/dagre-VKFMJZFB-CP1xk7Ox.js +4 -0
- package/dist/control-web/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/control-web/assets/dart-CF10PKvl.js +1 -0
- package/dist/control-web/assets/dax-CEL-wOlO.js +1 -0
- package/dist/control-web/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/control-web/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/control-web/assets/diagram-FQU43EPY-D_yRnH1b.js +3 -0
- package/dist/control-web/assets/diagram-G47NLZAW-DpTmLmbm.js +24 -0
- package/dist/control-web/assets/diagram-NH7WQ7WH-Wh_P26Dr.js +24 -0
- package/dist/control-web/assets/diagram-OA4YK3LP-BMMaO78f.js +30 -0
- package/dist/control-web/assets/diagram-WEI45ONY-D8smty9F.js +41 -0
- package/dist/control-web/assets/diff-D97Zzqfu.js +1 -0
- package/dist/control-web/assets/docker-BcOcwvcX.js +1 -0
- package/dist/control-web/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/control-web/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/control-web/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/control-web/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/control-web/assets/ebnfDiagram-CCIWWBDH-BqVsmEYh.js +1 -0
- package/dist/control-web/assets/edge-BkV0erSs.js +1 -0
- package/dist/control-web/assets/elixir-CDX3lj18.js +1 -0
- package/dist/control-web/assets/elm-DbKCFpqz.js +1 -0
- package/dist/control-web/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/control-web/assets/erDiagram-Q63AITRT-CxaumIzW.js +85 -0
- package/dist/control-web/assets/erb-B12qg9BL.js +1 -0
- package/dist/control-web/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/control-web/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/control-web/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/control-web/assets/fennel-BYunw83y.js +1 -0
- package/dist/control-web/assets/fish-BvzEVeQv.js +1 -0
- package/dist/control-web/assets/flowDiagram-23GEKE2U-DZhUBne-.js +156 -0
- package/dist/control-web/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/control-web/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/control-web/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/control-web/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/control-web/assets/ganttDiagram-NO4QXBWP-B20dY8SF.js +292 -0
- package/dist/control-web/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/control-web/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/control-web/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/control-web/assets/genie-D0YGMca9.js +1 -0
- package/dist/control-web/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/control-web/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/control-web/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/control-web/assets/gitGraphDiagram-IHSO6WYX-CAlnqFfW.js +106 -0
- package/dist/control-web/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/control-web/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/control-web/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/control-web/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/control-web/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/control-web/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/control-web/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/control-web/assets/gleam-BspZqrRM.js +1 -0
- package/dist/control-web/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/control-web/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/control-web/assets/glsl-DplSGwfg.js +1 -0
- package/dist/control-web/assets/gn-n2N0HUVH.js +1 -0
- package/dist/control-web/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/control-web/assets/go-CxLEBnE3.js +1 -0
- package/dist/control-web/assets/graph-C9eacEi8.js +1 -0
- package/dist/control-web/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/control-web/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/control-web/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/control-web/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/control-web/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/control-web/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/control-web/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/control-web/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/control-web/assets/hack-CaT9iCJl.js +1 -0
- package/dist/control-web/assets/haml-B8DHNrY2.js +1 -0
- package/dist/control-web/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/control-web/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/control-web/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/control-web/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/control-web/assets/{highlighted-body-OFNGDK62-DWWsUtHF.js → highlighted-body-OFNGDK62-vBlGjC8F.js} +1 -1
- package/dist/control-web/assets/hjson-D5-asLiD.js +1 -0
- package/dist/control-web/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/control-web/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/control-web/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/control-web/assets/houston-DnULxvSX.js +1 -0
- package/dist/control-web/assets/html-GMplVEZG.js +1 -0
- package/dist/control-web/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/control-web/assets/http-jrhK8wxY.js +1 -0
- package/dist/control-web/assets/hurl-irOxFIW8.js +1 -0
- package/dist/control-web/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/control-web/assets/hy-DFXneXwc.js +1 -0
- package/dist/control-web/assets/imba-DGztddWO.js +1 -0
- package/dist/control-web/assets/index-B3g4Kfko.js +153 -0
- package/dist/control-web/assets/index-BKqZNg1a.js +718 -0
- package/dist/control-web/assets/index-CZrE_F_i.css +32 -0
- package/dist/control-web/assets/infoDiagram-FWYZ7A6U-PaEyeSke.js +2 -0
- package/dist/control-web/assets/ini-BEwlwnbL.js +1 -0
- package/dist/control-web/assets/init-Gi6I4Gst.js +1 -0
- package/dist/control-web/assets/ishikawaDiagram-FXEZZL3T-BwsgPXGC.js +70 -0
- package/dist/control-web/assets/java-CylS5w8V.js +1 -0
- package/dist/control-web/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/control-web/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/control-web/assets/jison-wvAkD_A8.js +1 -0
- package/dist/control-web/assets/journeyDiagram-5HDEW3XC-BUEf1NEq.js +139 -0
- package/dist/control-web/assets/json-Cp-IABpG.js +1 -0
- package/dist/control-web/assets/json5-C9tS-k6U.js +1 -0
- package/dist/control-web/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/control-web/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/control-web/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/control-web/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/control-web/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/control-web/assets/julia-CxzCAyBv.js +1 -0
- package/dist/control-web/assets/just-Cw27pwNe.js +1 -0
- package/dist/control-web/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/control-web/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/control-web/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/control-web/assets/kanban-definition-HUTT4EX6-CiTCwnJ7.js +89 -0
- package/dist/control-web/assets/kdl-DV7GczEv.js +1 -0
- package/dist/control-web/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/control-web/assets/kusto-DZf3V79B.js +1 -0
- package/dist/control-web/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/control-web/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/control-web/assets/layout-DEXfKzaS.js +1 -0
- package/dist/control-web/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/control-web/assets/less-B1dDrJ26.js +1 -0
- package/dist/control-web/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/control-web/assets/linear-Cs4GSPvX.js +1 -0
- package/dist/control-web/assets/liquid-DYVedYrR.js +1 -0
- package/dist/control-web/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/control-web/assets/log-2UxHyX5q.js +1 -0
- package/dist/control-web/assets/logo-BtOb2qkB.js +1 -0
- package/dist/control-web/assets/lua-BaeVxFsk.js +1 -0
- package/dist/control-web/assets/luau-C-HG3fhB.js +1 -0
- package/dist/control-web/assets/make-CHLpvVh8.js +1 -0
- package/dist/control-web/assets/map-Czzmt4hB.js +1 -0
- package/dist/control-web/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/control-web/assets/marko-CnJfTvn9.js +1 -0
- package/dist/control-web/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/control-web/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/control-web/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/control-web/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/control-web/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/control-web/assets/matlab-D7o27uSR.js +1 -0
- package/dist/control-web/assets/mdc-BMNejdWA.js +1 -0
- package/dist/control-web/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/control-web/assets/mermaid-GHXKKRXX-BYZTj3zW.css +1 -0
- package/dist/control-web/assets/mermaid-GHXKKRXX-C_lUqoOB.js +710 -0
- package/dist/control-web/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/control-web/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/control-web/assets/min-light-CTRr51gU.js +1 -0
- package/dist/control-web/assets/mindmap-definition-LN4V7U3C-B8TkylOR.js +96 -0
- package/dist/control-web/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/control-web/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/control-web/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/control-web/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/control-web/assets/move-IF9eRakj.js +1 -0
- package/dist/control-web/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/control-web/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/control-web/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/control-web/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/control-web/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/control-web/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/control-web/assets/nim-CVrawwO9.js +1 -0
- package/dist/control-web/assets/nix-CwoSXNpI.js +1 -0
- package/dist/control-web/assets/nord-Ddv68eIx.js +1 -0
- package/dist/control-web/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/control-web/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/control-web/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/control-web/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/control-web/assets/odin-BBf5iR-q.js +1 -0
- package/dist/control-web/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/control-web/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/control-web/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/control-web/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/control-web/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/control-web/assets/pegDiagram-2B236MQR-Bnge_jzz.js +1 -0
- package/dist/control-web/assets/perl-C0TMdlhV.js +1 -0
- package/dist/control-web/assets/php-Dhbhpdrm.js +1 -0
- package/dist/control-web/assets/pieDiagram-ENE6RG2P-DOP7FAKG.js +39 -0
- package/dist/control-web/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/control-web/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/control-web/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/control-web/assets/po-BTJTHyun.js +1 -0
- package/dist/control-web/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/control-web/assets/polar-C0HS_06l.js +1 -0
- package/dist/control-web/assets/postcss-CXtECtnM.js +1 -0
- package/dist/control-web/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/control-web/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/control-web/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/control-web/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/control-web/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/control-web/assets/pug-CGlum2m_.js +1 -0
- package/dist/control-web/assets/puppet-BMWR74SV.js +1 -0
- package/dist/control-web/assets/purescript-CklMAg4u.js +1 -0
- package/dist/control-web/assets/python-B6aJPvgy.js +1 -0
- package/dist/control-web/assets/qml-3beO22l8.js +1 -0
- package/dist/control-web/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/control-web/assets/qss-IeuSbFQv.js +1 -0
- package/dist/control-web/assets/quadrantDiagram-ABIIQ3AL-Cqqu5uu-.js +7 -0
- package/dist/control-web/assets/r-Dspwwk_N.js +1 -0
- package/dist/control-web/assets/racket-BqYA7rlc.js +1 -0
- package/dist/control-web/assets/railroadDiagram-RFXS5EU6-1bk56BMW.js +1 -0
- package/dist/control-web/assets/raku-DXvB9xmW.js +1 -0
- package/dist/control-web/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/control-web/assets/red-bN70gL4F.js +1 -0
- package/dist/control-web/assets/reg-C-SQnVFl.js +1 -0
- package/dist/control-web/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/control-web/assets/rel-C3B-1QV4.js +1 -0
- package/dist/control-web/assets/requirementDiagram-TGXJPOKE-BHVwG79A.js +84 -0
- package/dist/control-web/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/control-web/assets/ron-D8l8udqQ.js +1 -0
- package/dist/control-web/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/control-web/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/control-web/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/control-web/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/control-web/assets/rst-BrH8l1NY.js +1 -0
- package/dist/control-web/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/control-web/assets/rust-B1yitclQ.js +1 -0
- package/dist/control-web/assets/sankeyDiagram-HTMAVEWB-ghjBFqfs.js +40 -0
- package/dist/control-web/assets/sas-cz2c8ADy.js +1 -0
- package/dist/control-web/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/control-web/assets/scala-C151Ov-r.js +1 -0
- package/dist/control-web/assets/scheme-C98Dy4si.js +1 -0
- package/dist/control-web/assets/scss-OYdSNvt2.js +1 -0
- package/dist/control-web/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/control-web/assets/sequenceDiagram-DBY2YBRQ-DChtyqq5.js +162 -0
- package/dist/control-web/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/control-web/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/control-web/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/control-web/assets/sizeCapture-X5ZJPWSS-BNp94nCS.js +1 -0
- package/dist/control-web/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/control-web/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/control-web/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/control-web/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/control-web/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/control-web/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/control-web/assets/solidity-rGO070M0.js +1 -0
- package/dist/control-web/assets/soy-Brmx7dQM.js +1 -0
- package/dist/control-web/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/control-web/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/control-web/assets/sql-BLtJtn59.js +1 -0
- package/dist/control-web/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/control-web/assets/stata-BH5u7GGu.js +1 -0
- package/dist/control-web/assets/stateDiagram-2N3HPSRC-CaFYkZZ2.js +1 -0
- package/dist/control-web/assets/stateDiagram-v2-6OUMAXLB-CCvEZFYI.js +1 -0
- package/dist/control-web/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/control-web/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/control-web/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/control-web/assets/swift-D82vCrfD.js +1 -0
- package/dist/control-web/assets/swimlanes-5IMT3BWC-CV2YWeYv.js +2 -0
- package/dist/control-web/assets/swimlanesDiagram-G3AALYLV-BFAdJHEB.js +8 -0
- package/dist/control-web/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/control-web/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/control-web/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/control-web/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/control-web/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/control-web/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/control-web/assets/templ-P3uqSqPl.js +1 -0
- package/dist/control-web/assets/terraform-BETggiCN.js +1 -0
- package/dist/control-web/assets/tex-idrVyKtj.js +1 -0
- package/dist/control-web/assets/timeline-definition-FHXFAJF6-Cq32UWLH.js +120 -0
- package/dist/control-web/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/control-web/assets/toml-vGWfd6FD.js +1 -0
- package/dist/control-web/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/control-web/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/control-web/assets/tsx-COt5Ahok.js +1 -0
- package/dist/control-web/assets/turtle-BsS91CYL.js +1 -0
- package/dist/control-web/assets/twig-DNn4PbVi.js +1 -0
- package/dist/control-web/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/control-web/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/control-web/assets/typst-DHCkPAjA.js +1 -0
- package/dist/control-web/assets/v-BcVCzyr7.js +1 -0
- package/dist/control-web/assets/vala-CsfeWuGM.js +1 -0
- package/dist/control-web/assets/vb-D17OF-Vu.js +1 -0
- package/dist/control-web/assets/vennDiagram-L72KCM5P-BgBoqPth.js +34 -0
- package/dist/control-web/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/control-web/assets/vesper-DU1UobuO.js +1 -0
- package/dist/control-web/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/control-web/assets/viml-CJc9bBzg.js +1 -0
- package/dist/control-web/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/control-web/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/control-web/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/control-web/assets/vue-DN_0RTcg.js +1 -0
- package/dist/control-web/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/control-web/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/control-web/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/control-web/assets/wardleyDiagram-EHGQE667-VsC2Gfpu.js +78 -0
- package/dist/control-web/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/control-web/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/control-web/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/control-web/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/control-web/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/control-web/assets/wit-5i3qLPDT.js +1 -0
- package/dist/control-web/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/control-web/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/control-web/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/control-web/assets/xychartDiagram-FW5EYKEG-CyFiAunt.js +7 -0
- package/dist/control-web/assets/yaml-Buea-lGh.js +1 -0
- package/dist/control-web/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/control-web/assets/zig-VOosw3JB.js +1 -0
- package/dist/control-web/index.html +2 -2
- package/dist/control-web-dist.d.ts +1 -1
- package/dist/control-web-dist.js +4 -2
- package/dist/desktop-browser-host.d.ts +3 -1
- package/dist/desktop-browser-host.js +39 -4
- package/dist/machine-session-service.d.ts +94 -15
- package/dist/machine-session-service.js +700 -86
- package/dist/remote-runtime-dispatcher.d.ts +2 -2
- package/dist/remote-runtime-dispatcher.js +42 -2
- package/dist/remote-runtime-session-projection.d.ts +1 -0
- package/dist/remote-runtime-session-projection.js +6 -0
- package/dist/server.d.ts +47 -8
- package/dist/server.js +291 -47
- package/dist/session-browser-service.d.ts +24 -4
- package/dist/session-browser-service.js +127 -1
- package/dist/session-pending-inputs.d.ts +40 -0
- package/dist/session-pending-inputs.js +84 -0
- package/dist/session-portal.d.ts +54 -0
- package/dist/session-portal.js +983 -0
- package/dist/session-runtime-index.d.ts +2 -6
- package/dist/session-runtime-index.js +70 -38
- package/dist/terminal-ws.js +8 -6
- package/package.json +7 -7
- package/dist/control-web/assets/index-BnX7NWJX.js +0 -689
- package/dist/control-web/assets/index-CUoWRX2i.css +0 -32
- 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) =>
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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: () =>
|
|
270
|
-
|
|
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
|
-
|
|
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;
|