openmausbot 0.1.55
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/LICENSE +202 -0
- package/README.md +14 -0
- package/cli.js +2 -0
- package/dist/app-icon.svg +29 -0
- package/dist/assets/abap-BdImnpbu.js +1 -0
- package/dist/assets/actionscript-3-B3316cI-.js +1 -0
- package/dist/assets/ada-bCR0ucgS.js +1 -0
- package/dist/assets/ahk-CsyLZFj1.js +1 -0
- package/dist/assets/ahk2-8Zs4aa1G.js +1 -0
- package/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/assets/angular-html-DA-rfuFy.js +1 -0
- package/dist/assets/angular-ts-BrjP3tb8.js +1 -0
- package/dist/assets/apache-Pmp26Uib.js +1 -0
- package/dist/assets/apex-DhZFqWV2.js +1 -0
- package/dist/assets/apl-CORt7UWP.js +1 -0
- package/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/assets/ara-BRHolxvo.js +1 -0
- package/dist/assets/asciidoc-CSVQ5wI8.js +1 -0
- package/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/assets/astro-HNnZUWAn.js +1 -0
- package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/assets/awk-DMzUqQB5.js +1 -0
- package/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/assets/bat-CickPsom.js +1 -0
- package/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/assets/berry-uYugtg8r.js +1 -0
- package/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/assets/bird2-Bx8U0n9b.js +1 -0
- package/dist/assets/blade-2xfisSek.js +1 -0
- package/dist/assets/bsl-DlhNcFeZ.js +1 -0
- package/dist/assets/c-BIGW1oBm.js +1 -0
- package/dist/assets/c3-Dp5svz6Z.js +1 -0
- package/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
- package/dist/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
- package/dist/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
- package/dist/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
- package/dist/assets/chapel-DTp_pixX.js +1 -0
- package/dist/assets/clarity-Dn5IMItf.js +1 -0
- package/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/assets/cobol-nBiQ_Alo.js +1 -0
- package/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/assets/coq-C7JzOVbR.js +1 -0
- package/dist/assets/cpp-BMRokrvK.js +1 -0
- package/dist/assets/crystal-DGywbUpC.js +1 -0
- package/dist/assets/csharp-DSvCPggb.js +1 -0
- package/dist/assets/css-CLj8gQPS.js +1 -0
- package/dist/assets/csv-fuZLfV_i.js +1 -0
- package/dist/assets/cue-D82EKSYY.js +1 -0
- package/dist/assets/cypher-COkxafJQ.js +1 -0
- package/dist/assets/d-85-TOEBH.js +1 -0
- package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/assets/dart-bE4Kk8sk.js +1 -0
- package/dist/assets/dax-CEL-wOlO.js +1 -0
- package/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/assets/diff-D97Zzqfu.js +1 -0
- package/dist/assets/docker-BcOcwvcX.js +1 -0
- package/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/assets/edge-FbVlp4U3.js +1 -0
- package/dist/assets/elixir-CkH2-t6x.js +1 -0
- package/dist/assets/elm-DbKCFpqz.js +1 -0
- package/dist/assets/emacs-lisp-C_m_b--Z.js +1 -0
- package/dist/assets/erb-DXfck5VN.js +1 -0
- package/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/assets/fennel-BYunw83y.js +1 -0
- package/dist/assets/fish-BvzEVeQv.js +1 -0
- package/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/assets/gdresource-TyuKm33G.js +1 -0
- package/dist/assets/gdscript-DqcFQ5yU.js +1 -0
- package/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/assets/genie-D0YGMca9.js +1 -0
- package/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/assets/gleam-BspZqrRM.js +1 -0
- package/dist/assets/glimmer-js-ByusRIyA.js +1 -0
- package/dist/assets/glimmer-ts-BfAWNZQY.js +1 -0
- package/dist/assets/glsl-DplSGwfg.js +1 -0
- package/dist/assets/gn-n2N0HUVH.js +1 -0
- package/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/assets/go-C27-OAKa.js +1 -0
- package/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/assets/hack-BWmVpMyf.js +1 -0
- package/dist/assets/haml-D5jkg6IW.js +1 -0
- package/dist/assets/handlebars-BpdQsYii.js +1 -0
- package/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/assets/haxe-CfZj7gIn.js +1 -0
- package/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/assets/hjson-D5-asLiD.js +1 -0
- package/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/assets/horizon-bright-CUuTKBJd.js +1 -0
- package/dist/assets/houston-DnULxvSX.js +1 -0
- package/dist/assets/html-derivative-DlHx6ybY.js +1 -0
- package/dist/assets/html-pp8916En.js +1 -0
- package/dist/assets/http-jrhK8wxY.js +1 -0
- package/dist/assets/hurl-irOxFIW8.js +1 -0
- package/dist/assets/hxml-2-FPmUDs.js +1 -0
- package/dist/assets/hy-DFXneXwc.js +1 -0
- package/dist/assets/imba-DGztddWO.js +1 -0
- package/dist/assets/index-B9rLIY81.js +263 -0
- package/dist/assets/index-CJBrtDbC.css +1 -0
- package/dist/assets/index-D-u0LYsV.js +153 -0
- package/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/assets/java-CylS5w8V.js +1 -0
- package/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/assets/jinja-f2NsQr07.js +1 -0
- package/dist/assets/jison-wvAkD_A8.js +1 -0
- package/dist/assets/json-Cp-IABpG.js +1 -0
- package/dist/assets/json5-C9tS-k6U.js +1 -0
- package/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/assets/julia-5Bft2YPA.js +1 -0
- package/dist/assets/just-Cwhn7H3k.js +1 -0
- package/dist/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
- package/dist/assets/kanagawa-lotus-C3DzagqV.js +1 -0
- package/dist/assets/kanagawa-wave-DFGoQZhC.js +1 -0
- package/dist/assets/kdl-DV7GczEv.js +1 -0
- package/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/assets/kusto-wEQ09or8.js +1 -0
- package/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/assets/latex-D5pSuvFb.js +1 -0
- package/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/assets/less-B1dDrJ26.js +1 -0
- package/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/assets/liquid-C0sCDyMI.js +1 -0
- package/dist/assets/llvm-BZoOZj88.js +1 -0
- package/dist/assets/log-2UxHyX5q.js +1 -0
- package/dist/assets/logo-BtOb2qkB.js +1 -0
- package/dist/assets/lua-BaeVxFsk.js +1 -0
- package/dist/assets/luau-BnpPk5vE.js +1 -0
- package/dist/assets/make-CHLpvVh8.js +1 -0
- package/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/assets/marko-DjSrsDqO.js +1 -0
- package/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/assets/matlab-D7o27uSR.js +1 -0
- package/dist/assets/mdc-D1_yUvq7.js +1 -0
- package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/assets/mermaid-CQcHuHx7.js +1 -0
- package/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/assets/min-light-CTRr51gU.js +1 -0
- package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/assets/mojo-DJz3ZmWd.js +1 -0
- package/dist/assets/monokai-BRVnQi9A.js +1 -0
- package/dist/assets/moonbit-CHtswR0a.js +1 -0
- package/dist/assets/move-el3G9tDJ.js +1 -0
- package/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/assets/nextflow-C-mBbutL.js +1 -0
- package/dist/assets/nextflow-groovy-vE_lwT2v.js +1 -0
- package/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/assets/nim-BIad80T-.js +1 -0
- package/dist/assets/nix-CwoSXNpI.js +1 -0
- package/dist/assets/nord-Ddv68eIx.js +1 -0
- package/dist/assets/nsis-BlV79W_Q.js +1 -0
- package/dist/assets/nushell-D3jzshHO.js +1 -0
- package/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/assets/odin-BBf5iR-q.js +1 -0
- package/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/assets/org-DM6o9KBp.js +1 -0
- package/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/assets/perl-B9cMNwum.js +1 -0
- package/dist/assets/php-Csjmro_R.js +1 -0
- package/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/assets/po-BTJTHyun.js +1 -0
- package/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/assets/polar-C0HS_06l.js +1 -0
- package/dist/assets/postcss-CXtECtnM.js +1 -0
- package/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/assets/powershell-BmBUJMz7.js +1 -0
- package/dist/assets/prisma-Vru482bI.js +1 -0
- package/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/assets/pug-DKIMFp6K.js +1 -0
- package/dist/assets/puppet-BMWR74SV.js +1 -0
- package/dist/assets/purescript-CklMAg4u.js +1 -0
- package/dist/assets/python-B6aJPvgy.js +1 -0
- package/dist/assets/qml-3beO22l8.js +1 -0
- package/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/assets/qss-IeuSbFQv.js +1 -0
- package/dist/assets/r-Cf5RLm7j.js +1 -0
- package/dist/assets/racket-BqYA7rlc.js +1 -0
- package/dist/assets/raku-DXvB9xmW.js +1 -0
- package/dist/assets/razor-BjBPvh-w.js +1 -0
- package/dist/assets/rbs-CpoqiR4B.js +1 -0
- package/dist/assets/red-hvxz__6c.js +1 -0
- package/dist/assets/reg-C-SQnVFl.js +1 -0
- package/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/assets/rel-C3B-1QV4.js +1 -0
- package/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/assets/ron-D8l8udqQ.js +1 -0
- package/dist/assets/rose-pine-5qJOZa0Y.js +1 -0
- package/dist/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
- package/dist/assets/rose-pine-moon-C9pEdX9L.js +1 -0
- package/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/assets/rst-bs7f0vWN.js +1 -0
- package/dist/assets/ruby-C0TQ7zu5.js +1 -0
- package/dist/assets/rust-B1yitclQ.js +1 -0
- package/dist/assets/sas-DEy46yEz.js +1 -0
- package/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/assets/scala-CqE71os6.js +1 -0
- package/dist/assets/scheme-C98Dy4si.js +1 -0
- package/dist/assets/scss-D5BDwBP9.js +1 -0
- package/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/assets/smalltalk-BOQMe2GC.js +1 -0
- package/dist/assets/smithy-cds9vsN8.js +1 -0
- package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/assets/solarized-dark-CpvCGNkr.js +1 -0
- package/dist/assets/solarized-light-Dlz6yCKv.js +1 -0
- package/dist/assets/solidity-DijEV5ha.js +1 -0
- package/dist/assets/soy-8wufbnw4.js +1 -0
- package/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/assets/sql-CRqJ_cUM.js +1 -0
- package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/assets/stata-DI20mbqo.js +1 -0
- package/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/assets/surrealql-Cjom0U5J.js +1 -0
- package/dist/assets/svelte-Cy7k_4gC.js +1 -0
- package/dist/assets/swift-C2oV4EkX.js +1 -0
- package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/assets/system-verilog-0hqHdDBg.js +1 -0
- package/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/assets/templ-DhtptRzy.js +1 -0
- package/dist/assets/terraform-BETggiCN.js +1 -0
- package/dist/assets/tex-D96PA37w.js +1 -0
- package/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/assets/toml-vGWfd6FD.js +1 -0
- package/dist/assets/ts-tags-D351s5mN.js +1 -0
- package/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/assets/tsx-COt5Ahok.js +1 -0
- package/dist/assets/turtle-BsS91CYL.js +1 -0
- package/dist/assets/twig-27uCiNez.js +1 -0
- package/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/assets/typespec-CAFt9gP4.js +1 -0
- package/dist/assets/typst-BUadGCkm.js +1 -0
- package/dist/assets/v-BGw2Nkan.js +1 -0
- package/dist/assets/vala-CsfeWuGM.js +1 -0
- package/dist/assets/vb-Cu-pLBUe.js +1 -0
- package/dist/assets/verilog-nZwndyjY.js +1 -0
- package/dist/assets/vesper-DRje8inN.js +1 -0
- package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/assets/viml-CJc9bBzg.js +1 -0
- package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/assets/vue-BqiEGhQt.js +1 -0
- package/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/assets/vue-vine-BoDAl6tE.js +1 -0
- package/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/assets/wit-5i3qLPDT.js +1 -0
- package/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/assets/yaml-Buea-lGh.js +1 -0
- package/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/assets/zig-VOosw3JB.js +1 -0
- package/dist/index.html +14 -0
- package/dist-server/companion/src/listener.js +187 -0
- package/dist-server/computer-proxy.js +1185 -0
- package/dist-server/connector-proxy.js +186 -0
- package/dist-server/container-mcp.js +15186 -0
- package/dist-server/drivers/agents-proxy.js +887 -0
- package/dist-server/drivers/browser-proxy.js +15037 -0
- package/dist-server/drivers/dweb-proxy.js +175 -0
- package/dist-server/drivers/phone-proxy.js +339 -0
- package/dist-server/drivers/pi-mcp-extension.ts +638 -0
- package/dist-server/index.js +64869 -0
- package/dist-server/local-computer.js +198 -0
- package/dist-server/mcp-server.js +1233 -0
- package/dist-server/openmausbot.js +3671 -0
- package/dist-server/pair-cli.js +3671 -0
- package/dist-server/permission-proxy.js +126 -0
- package/dist-server/prepare-cloudflared.js +253 -0
- package/dist-server/proxy-paths.js +29 -0
- package/dist-server/server/atomic.js +40 -0
- package/dist-server/server/attachments.js +471 -0
- package/dist-server/server/auto-approve.js +162 -0
- package/dist-server/server/auto-review.js +79 -0
- package/dist-server/server/avatar-image.js +144 -0
- package/dist-server/server/bot-cwd.js +29 -0
- package/dist-server/server/bot-directory.js +127 -0
- package/dist-server/server/bot-package.js +268 -0
- package/dist-server/server/bot-profile.js +76 -0
- package/dist-server/server/box-create-idempotency.js +463 -0
- package/dist-server/server/box.js +944 -0
- package/dist-server/server/brand.js +65 -0
- package/dist-server/server/browser-connection.js +187 -0
- package/dist-server/server/browser-lifecycle-cleanup.js +359 -0
- package/dist-server/server/calendar-calls.js +314 -0
- package/dist-server/server/channel-queue.js +70 -0
- package/dist-server/server/checkpoints.js +405 -0
- package/dist-server/server/chief-of-staff.js +49 -0
- package/dist-server/server/claude-update.js +70 -0
- package/dist-server/server/cli.js +524 -0
- package/dist-server/server/cloud-backend.js +30 -0
- package/dist-server/server/comms-visibility.js +109 -0
- package/dist-server/server/composio.js +945 -0
- package/dist-server/server/computer-control.js +149 -0
- package/dist-server/server/computer-observation.js +133 -0
- package/dist-server/server/computer-proxy.js +1061 -0
- package/dist-server/server/config.js +760 -0
- package/dist-server/server/connector-proxy.js +228 -0
- package/dist-server/server/container-computer.js +840 -0
- package/dist-server/server/container-mcp.js +27 -0
- package/dist-server/server/contracts.js +24 -0
- package/dist-server/server/control-client.js +100 -0
- package/dist-server/server/data-dir-lease.js +3 -0
- package/dist-server/server/decision-log.js +106 -0
- package/dist-server/server/delegations.js +628 -0
- package/dist-server/server/drivers/acp/core.js +904 -0
- package/dist-server/server/drivers/acp/cursor.js +365 -0
- package/dist-server/server/drivers/acp/custom.js +51 -0
- package/dist-server/server/drivers/acp/droid.js +225 -0
- package/dist-server/server/drivers/acp/gemini.js +95 -0
- package/dist-server/server/drivers/acp/grok.js +249 -0
- package/dist-server/server/drivers/acp/hermes.js +429 -0
- package/dist-server/server/drivers/acp/kimi.js +559 -0
- package/dist-server/server/drivers/acp/opencode-go.js +370 -0
- package/dist-server/server/drivers/acp/qwen.js +98 -0
- package/dist-server/server/drivers/agents-proxy.js +941 -0
- package/dist-server/server/drivers/antigravity-acp.js +507 -0
- package/dist-server/server/drivers/antigravity-release.js +65 -0
- package/dist-server/server/drivers/antigravity-runtime.js +395 -0
- package/dist-server/server/drivers/antigravity.js +144 -0
- package/dist-server/server/drivers/boxagent.js +245 -0
- package/dist-server/server/drivers/browser-proxy.js +520 -0
- package/dist-server/server/drivers/builtIn.js +36 -0
- package/dist-server/server/drivers/claude.js +1337 -0
- package/dist-server/server/drivers/codex-catalog.js +409 -0
- package/dist-server/server/drivers/codex.js +1116 -0
- package/dist-server/server/drivers/dweb-proxy.js +193 -0
- package/dist-server/server/drivers/grok.js +48 -0
- package/dist-server/server/drivers/grokagent.js +4 -0
- package/dist-server/server/drivers/local-inject.js +388 -0
- package/dist-server/server/drivers/minimax.js +108 -0
- package/dist-server/server/drivers/native.js +21 -0
- package/dist-server/server/drivers/openai-chat.js +240 -0
- package/dist-server/server/drivers/openai-compat.js +143 -0
- package/dist-server/server/drivers/phone-proxy.js +372 -0
- package/dist-server/server/drivers/pi.js +855 -0
- package/dist-server/server/drivers/retry.js +96 -0
- package/dist-server/server/enterprise.js +93 -0
- package/dist-server/server/env-path.js +329 -0
- package/dist-server/server/environment.js +105 -0
- package/dist-server/server/generated-image.js +39 -0
- package/dist-server/server/graceful-shutdown.js +24 -0
- package/dist-server/server/group-goal-run.js +124 -0
- package/dist-server/server/harness/bus.js +86 -0
- package/dist-server/server/harness/registry.js +217 -0
- package/dist-server/server/index.js +11634 -0
- package/dist-server/server/installed-playbooks.js +34 -0
- package/dist-server/server/local-computer.js +278 -0
- package/dist-server/server/local-routing.js +9 -0
- package/dist-server/server/local-vm-idle.js +44 -0
- package/dist-server/server/local-vm-inventory.js +34 -0
- package/dist-server/server/local-vm-lease.js +58 -0
- package/dist-server/server/mcp-bridge.js +251 -0
- package/dist-server/server/mcp-probe.js +153 -0
- package/dist-server/server/mcp-registry.js +130 -0
- package/dist-server/server/member-turn.js +6 -0
- package/dist-server/server/message-db.js +358 -0
- package/dist-server/server/message-file.js +439 -0
- package/dist-server/server/names.js +26 -0
- package/dist-server/server/notify.js +69 -0
- package/dist-server/server/openmaus-status-capsule.js +329 -0
- package/dist-server/server/openmausbot.js +6 -0
- package/dist-server/server/package-export.js +157 -0
- package/dist-server/server/pair-cli.js +7 -0
- package/dist-server/server/peer-approval-key.js +5 -0
- package/dist-server/server/peer-approval.js +182 -0
- package/dist-server/server/peer-provenance.js +44 -0
- package/dist-server/server/peer-roster.js +139 -0
- package/dist-server/server/permission-proxy.js +157 -0
- package/dist-server/server/phone-secret.js +358 -0
- package/dist-server/server/private-screen-capture.js +17 -0
- package/dist-server/server/procs.js +123 -0
- package/dist-server/server/project-scout.js +304 -0
- package/dist-server/server/proxy-paths.js +47 -0
- package/dist-server/server/redact.js +102 -0
- package/dist-server/server/remote-computer.js +170 -0
- package/dist-server/server/repeat-detector.js +48 -0
- package/dist-server/server/replies.js +38 -0
- package/dist-server/server/request-auth.js +327 -0
- package/dist-server/server/room-cwd.js +15 -0
- package/dist-server/server/room-post-budget.js +112 -0
- package/dist-server/server/room-turn-timeout.js +115 -0
- package/dist-server/server/routine-requests.js +871 -0
- package/dist-server/server/routines.js +1111 -0
- package/dist-server/server/schema.js +11 -0
- package/dist-server/server/screen-frame-gate.js +80 -0
- package/dist-server/server/section-context.js +85 -0
- package/dist-server/server/send-idempotency.js +53 -0
- package/dist-server/server/sessions.js +319 -0
- package/dist-server/server/skill-fetch.js +148 -0
- package/dist-server/server/skill-learn.js +61 -0
- package/dist-server/server/skill-library.js +116 -0
- package/dist-server/server/skills.js +1223 -0
- package/dist-server/server/steer-queue.js +114 -0
- package/dist-server/server/store.js +1217 -0
- package/dist-server/server/surface.js +107 -0
- package/dist-server/server/tailscale.js +103 -0
- package/dist-server/server/team-backup.js +183 -0
- package/dist-server/server/team-library.js +205 -0
- package/dist-server/server/team-manifest.js +224 -0
- package/dist-server/server/thread-events.js +226 -0
- package/dist-server/server/tts/elevenlabs.js +92 -0
- package/dist-server/server/tts/index.js +79 -0
- package/dist-server/server/tts/speech-text.js +195 -0
- package/dist-server/server/tts/system-voices.js +74 -0
- package/dist-server/server/tunnel.js +202 -0
- package/dist-server/server/turn-context.js +40 -0
- package/dist-server/server/turn-dispatch-guard.js +152 -0
- package/dist-server/server/turn-images.js +138 -0
- package/dist-server/server/turn-watchdog.js +65 -0
- package/dist-server/server/vps-computer.js +1099 -0
- package/dist-server/server/vps-container-mcp.js +31 -0
- package/dist-server/server/webhook-ingress.js +173 -0
- package/dist-server/server/webhooks.js +491 -0
- package/dist-server/server/workspace.js +178 -0
- package/dist-server/shared/approval-mode.js +39 -0
- package/dist-server/shared/bot-avatar.js +33 -0
- package/dist-server/shared/bot-profile.js +7 -0
- package/dist-server/shared/connector-availability.js +12 -0
- package/dist-server/shared/credential-request.js +82 -0
- package/dist-server/shared/group-goal-run.js +1 -0
- package/dist-server/shared/import-name.js +11 -0
- package/dist-server/shared/mascot-bodies.js +107 -0
- package/dist-server/shared/routine-request.js +10 -0
- package/dist-server/shared/routine-run.js +1 -0
- package/dist-server/shared/skill-request.js +16 -0
- package/dist-server/shared/team-backup.js +148 -0
- package/dist-server/src/lib/composer-attachments.js +676 -0
- package/dist-server/tunnel-guardian.js +390 -0
- package/dist-server/vps-container-mcp.js +15209 -0
- package/package.json +32 -0
- package/skills/create-verification-skill/SKILL.md +65 -0
- package/skills/create-verification-skill/manifest.json +13 -0
- package/skills/phone-harness/SKILL.md +26 -0
- package/skills/phone-harness/agents/openai.yaml +13 -0
- package/skills/phone-harness/manifest.json +17 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// Who is driving a bot's computer — the person or the bot. One record per
|
|
2
|
+
// bot, held in the harness because every consumer (the panel, the SSE
|
|
3
|
+
// stream, and the per-turn computer proxies) already talks to the harness.
|
|
4
|
+
//
|
|
5
|
+
// The rules this module exists to enforce:
|
|
6
|
+
// - A bot can only ASK for hands (`requestHelp`); it can never take
|
|
7
|
+
// control, and it cannot clear a hold. Only the person takes and
|
|
8
|
+
// releases, from the computer panel.
|
|
9
|
+
// - While the person holds control, the bot's computer actions are
|
|
10
|
+
// REFUSED by the proxies, not queued. A queued click would land after
|
|
11
|
+
// the person has moved on, on whatever happens to be under it.
|
|
12
|
+
// - Releasing control also settles any open help request, so a bot
|
|
13
|
+
// waiting on `requestHelp` wakes up from the same state change the
|
|
14
|
+
// person made — there is no separate "done helping" step to forget.
|
|
15
|
+
//
|
|
16
|
+
// State is per-boot and in-memory on purpose: a hold is a live fact about
|
|
17
|
+
// who is at the screen right now, and surviving a harness restart would
|
|
18
|
+
// mean a stale hold silently bricking a bot's computer.
|
|
19
|
+
const NO_CONTROL = { held: false, helpReason: null, heldSinceMs: null };
|
|
20
|
+
/** Keep a shouted help reason card-sized; the transcript has the rest. */
|
|
21
|
+
const MAX_REASON_CHARS = 280;
|
|
22
|
+
export class ComputerControl {
|
|
23
|
+
entries = new Map();
|
|
24
|
+
onChange;
|
|
25
|
+
now;
|
|
26
|
+
requestSequence = 0;
|
|
27
|
+
constructor(onChange = () => { }, now = Date.now) {
|
|
28
|
+
this.onChange = onChange;
|
|
29
|
+
this.now = now;
|
|
30
|
+
}
|
|
31
|
+
snapshot(botId) {
|
|
32
|
+
const entry = this.entries.get(botId);
|
|
33
|
+
if (!entry)
|
|
34
|
+
return NO_CONTROL;
|
|
35
|
+
return {
|
|
36
|
+
held: entry.heldSinceMs !== null,
|
|
37
|
+
helpReason: entry.helpReason,
|
|
38
|
+
heldSinceMs: entry.heldSinceMs,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** The person takes the wheel. Idempotent — a second click must not
|
|
42
|
+
* reset `heldSinceMs` and make the hold look newer than it is. */
|
|
43
|
+
take(botId) {
|
|
44
|
+
const entry = this.entries.get(botId);
|
|
45
|
+
if (entry?.heldSinceMs != null)
|
|
46
|
+
return this.snapshot(botId);
|
|
47
|
+
this.entries.set(botId, {
|
|
48
|
+
heldSinceMs: this.now(),
|
|
49
|
+
helpReason: entry?.helpReason ?? null,
|
|
50
|
+
helpRequestId: entry?.helpRequestId ?? null,
|
|
51
|
+
controlLeaseId: null,
|
|
52
|
+
});
|
|
53
|
+
return this.changed(botId);
|
|
54
|
+
}
|
|
55
|
+
/** Atomically take or re-check a workspace-owned hold. The opaque lease is
|
|
56
|
+
* never returned in a snapshot, broadcast, or API response. */
|
|
57
|
+
acquireLease(botId, controlLeaseId) {
|
|
58
|
+
const entry = this.entries.get(botId);
|
|
59
|
+
if (entry?.heldSinceMs != null) {
|
|
60
|
+
return {
|
|
61
|
+
snapshot: this.snapshot(botId),
|
|
62
|
+
owned: entry.controlLeaseId === controlLeaseId,
|
|
63
|
+
acquired: false,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
this.entries.set(botId, {
|
|
67
|
+
heldSinceMs: this.now(),
|
|
68
|
+
helpReason: entry?.helpReason ?? null,
|
|
69
|
+
helpRequestId: entry?.helpRequestId ?? null,
|
|
70
|
+
controlLeaseId,
|
|
71
|
+
});
|
|
72
|
+
return { snapshot: this.changed(botId), owned: true, acquired: true };
|
|
73
|
+
}
|
|
74
|
+
/** The person hands the wheel back. Also settles any open help request —
|
|
75
|
+
* the waiting bot resumes from this one state change. */
|
|
76
|
+
release(botId) {
|
|
77
|
+
if (!this.entries.has(botId))
|
|
78
|
+
return NO_CONTROL;
|
|
79
|
+
this.entries.delete(botId);
|
|
80
|
+
return this.changed(botId);
|
|
81
|
+
}
|
|
82
|
+
/** Release only the hold created by this workspace lease. A newer or legacy
|
|
83
|
+
* holder is observed but never disturbed. */
|
|
84
|
+
releaseLease(botId, controlLeaseId) {
|
|
85
|
+
const entry = this.entries.get(botId);
|
|
86
|
+
if (!entry || entry.heldSinceMs === null || entry.controlLeaseId !== controlLeaseId) {
|
|
87
|
+
return { snapshot: this.snapshot(botId), released: false };
|
|
88
|
+
}
|
|
89
|
+
this.entries.delete(botId);
|
|
90
|
+
return { snapshot: this.changed(botId), released: true };
|
|
91
|
+
}
|
|
92
|
+
/** The bot asks the person to take over. Never grants anything by
|
|
93
|
+
* itself — it only surfaces the plea. A reason shouted while the person
|
|
94
|
+
* is already driving is kept, but must not clobber an earlier one they
|
|
95
|
+
* may still be reading. */
|
|
96
|
+
requestHelp(botId, reason) {
|
|
97
|
+
return this.requestHelpLease(botId, reason).snapshot;
|
|
98
|
+
}
|
|
99
|
+
/** Open a help request and return the lease that owns it. A proxy uses
|
|
100
|
+
* this id to expire only its own unanswered plea when its wait ends. */
|
|
101
|
+
requestHelpLease(botId, reason) {
|
|
102
|
+
const text = typeof reason === "string" ? reason.trim().slice(0, MAX_REASON_CHARS) : "";
|
|
103
|
+
const entry = this.entries.get(botId) ?? {
|
|
104
|
+
heldSinceMs: null,
|
|
105
|
+
helpReason: null,
|
|
106
|
+
helpRequestId: null,
|
|
107
|
+
controlLeaseId: null,
|
|
108
|
+
};
|
|
109
|
+
if (entry.helpReason === null) {
|
|
110
|
+
entry.helpReason = text || "the bot asked you to take over";
|
|
111
|
+
entry.helpRequestId = `${botId}-${++this.requestSequence}`;
|
|
112
|
+
}
|
|
113
|
+
this.entries.set(botId, entry);
|
|
114
|
+
return { snapshot: this.changed(botId), requestId: entry.helpRequestId };
|
|
115
|
+
}
|
|
116
|
+
/** The person declines without taking over; the waiting bot is told. */
|
|
117
|
+
dismissHelp(botId) {
|
|
118
|
+
const entry = this.entries.get(botId);
|
|
119
|
+
if (!entry || entry.helpReason === null)
|
|
120
|
+
return this.snapshot(botId);
|
|
121
|
+
entry.helpReason = null;
|
|
122
|
+
entry.helpRequestId = null;
|
|
123
|
+
if (entry.heldSinceMs === null)
|
|
124
|
+
this.entries.delete(botId);
|
|
125
|
+
return this.changed(botId);
|
|
126
|
+
}
|
|
127
|
+
/** Expire an unanswered plea. The id comparison prevents an old proxy's
|
|
128
|
+
* timeout from dismissing a newer request for the same bot. */
|
|
129
|
+
expireHelp(botId, requestId) {
|
|
130
|
+
const entry = this.entries.get(botId);
|
|
131
|
+
if (!entry || entry.helpRequestId !== requestId)
|
|
132
|
+
return this.snapshot(botId);
|
|
133
|
+
entry.helpReason = null;
|
|
134
|
+
entry.helpRequestId = null;
|
|
135
|
+
if (entry.heldSinceMs === null)
|
|
136
|
+
this.entries.delete(botId);
|
|
137
|
+
return this.changed(botId);
|
|
138
|
+
}
|
|
139
|
+
/** The bot is gone; a hold on a deleted bot's computer means nothing. */
|
|
140
|
+
forget(botId) {
|
|
141
|
+
if (this.entries.delete(botId))
|
|
142
|
+
this.onChange(botId, NO_CONTROL);
|
|
143
|
+
}
|
|
144
|
+
changed(botId) {
|
|
145
|
+
const snapshot = this.snapshot(botId);
|
|
146
|
+
this.onChange(botId, snapshot);
|
|
147
|
+
return snapshot;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
export const emptyObservationMetrics = () => ({
|
|
3
|
+
screenshotsCaptured: 0,
|
|
4
|
+
screenshotsSentToModel: 0,
|
|
5
|
+
fullScreenObservations: 0,
|
|
6
|
+
croppedObservations: 0,
|
|
7
|
+
structuredBrowserObservations: 0,
|
|
8
|
+
computerActions: 0,
|
|
9
|
+
retries: 0,
|
|
10
|
+
verificationSuccesses: 0,
|
|
11
|
+
verificationFailures: 0,
|
|
12
|
+
});
|
|
13
|
+
export function normalizeCrop(raw, maxWidth, maxHeight) {
|
|
14
|
+
if (!raw || typeof raw !== "object")
|
|
15
|
+
return null;
|
|
16
|
+
const value = raw;
|
|
17
|
+
const x = Math.round(Number(value.x));
|
|
18
|
+
const y = Math.round(Number(value.y));
|
|
19
|
+
const width = Math.round(Number(value.width));
|
|
20
|
+
const height = Math.round(Number(value.height));
|
|
21
|
+
if (![x, y, width, height, maxWidth, maxHeight].every(Number.isFinite) ||
|
|
22
|
+
maxWidth <= 0 ||
|
|
23
|
+
maxHeight <= 0 ||
|
|
24
|
+
x < 0 ||
|
|
25
|
+
y < 0 ||
|
|
26
|
+
width < 32 ||
|
|
27
|
+
height < 32) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
if (x + width > maxWidth || y + height > maxHeight)
|
|
31
|
+
return null;
|
|
32
|
+
return { x, y, width, height };
|
|
33
|
+
}
|
|
34
|
+
/** Canonical value for internal navigation checks. Credentials are never
|
|
35
|
+
* needed for equality and are removed here; query and fragment remain so
|
|
36
|
+
* two distinct application states cannot verify as the same destination. */
|
|
37
|
+
export function normalizeBrowserUrl(value) {
|
|
38
|
+
if (typeof value !== "string" || !value || value.length > 8_192)
|
|
39
|
+
return null;
|
|
40
|
+
try {
|
|
41
|
+
const url = new URL(value);
|
|
42
|
+
if (!/^https?:$/.test(url.protocol))
|
|
43
|
+
return null;
|
|
44
|
+
url.username = "";
|
|
45
|
+
url.password = "";
|
|
46
|
+
return url.toString();
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Removes credentials, query, and fragment before browser state reaches a model or log. */
|
|
53
|
+
export function safeBrowserUrl(value) {
|
|
54
|
+
const normalized = normalizeBrowserUrl(value);
|
|
55
|
+
if (!normalized)
|
|
56
|
+
return null;
|
|
57
|
+
const url = new URL(normalized);
|
|
58
|
+
url.search = "";
|
|
59
|
+
url.hash = "";
|
|
60
|
+
const safe = url.toString();
|
|
61
|
+
return safe.length <= 2_048 ? safe : null;
|
|
62
|
+
}
|
|
63
|
+
/** Parses Chrome's /json/list response into a small, safe structured observation. */
|
|
64
|
+
export function parseBrowserTargets(raw) {
|
|
65
|
+
if (raw.length > 1_000_000)
|
|
66
|
+
return [];
|
|
67
|
+
try {
|
|
68
|
+
const parsed = JSON.parse(raw);
|
|
69
|
+
if (!Array.isArray(parsed))
|
|
70
|
+
return [];
|
|
71
|
+
return parsed.slice(0, 20).flatMap((item) => {
|
|
72
|
+
if (!item || typeof item !== "object")
|
|
73
|
+
return [];
|
|
74
|
+
const value = item;
|
|
75
|
+
const comparisonUrl = normalizeBrowserUrl(value.url);
|
|
76
|
+
const url = safeBrowserUrl(value.url);
|
|
77
|
+
if (value.type !== "page" || !url || !comparisonUrl || typeof value.id !== "string")
|
|
78
|
+
return [];
|
|
79
|
+
const title = typeof value.title === "string" ? value.title.replace(/\s+/g, " ").trim().slice(0, 200) : "";
|
|
80
|
+
return [{ id: value.id.slice(0, 100), title, url, comparisonUrl }];
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Keeps observations cheap without claiming the screen is immutable. Every
|
|
89
|
+
* requested observation still captures fresh pixels (pages can change without
|
|
90
|
+
* an input action), while byte-identical frames are not sent to the model twice.
|
|
91
|
+
*/
|
|
92
|
+
export class ObservationCoordinator {
|
|
93
|
+
metrics = emptyObservationMetrics();
|
|
94
|
+
lastObservation = null;
|
|
95
|
+
noteAction(count = 1) {
|
|
96
|
+
this.metrics.computerActions += Math.max(0, Math.trunc(count));
|
|
97
|
+
}
|
|
98
|
+
noteRetry() {
|
|
99
|
+
this.metrics.retries += 1;
|
|
100
|
+
}
|
|
101
|
+
/** canonicalFrame must describe the full screenshot, even when the image
|
|
102
|
+
* returned to the model is cropped. A box-provided full-frame hash works. */
|
|
103
|
+
observeFrame(canonicalFrame, crop) {
|
|
104
|
+
this.metrics.screenshotsCaptured += 1;
|
|
105
|
+
const hash = canonicalFrame
|
|
106
|
+
? createHash("sha256").update(canonicalFrame).digest("hex")
|
|
107
|
+
: null;
|
|
108
|
+
const view = crop ? `${crop.x},${crop.y},${crop.width},${crop.height}` : "full";
|
|
109
|
+
const signature = hash ? `${hash}:${view}` : null;
|
|
110
|
+
// If the box cannot provide a full-frame hash, fail open and send the
|
|
111
|
+
// valid image. Suppressing a possibly-new crop would be worse.
|
|
112
|
+
const changed = signature === null || signature !== this.lastObservation;
|
|
113
|
+
if (signature)
|
|
114
|
+
this.lastObservation = signature;
|
|
115
|
+
if (changed) {
|
|
116
|
+
this.metrics.screenshotsSentToModel += 1;
|
|
117
|
+
if (crop)
|
|
118
|
+
this.metrics.croppedObservations += 1;
|
|
119
|
+
else
|
|
120
|
+
this.metrics.fullScreenObservations += 1;
|
|
121
|
+
}
|
|
122
|
+
return { changed, hash };
|
|
123
|
+
}
|
|
124
|
+
noteStructuredObservation() {
|
|
125
|
+
this.metrics.structuredBrowserObservations += 1;
|
|
126
|
+
}
|
|
127
|
+
noteVerification(ok) {
|
|
128
|
+
if (ok)
|
|
129
|
+
this.metrics.verificationSuccesses += 1;
|
|
130
|
+
else
|
|
131
|
+
this.metrics.verificationFailures += 1;
|
|
132
|
+
}
|
|
133
|
+
}
|