agent-afk 5.208.4 → 5.209.0
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/agent/session-ledger-project.d.ts +3 -0
- package/dist/agent/types/session-types.d.ts +3 -0
- package/dist/cli.mjs +4 -4
- package/dist/index.mjs +3 -3
- package/dist/telegram.mjs +3 -3
- package/dist/web-server/shared/ledger-adapter.d.ts +3 -0
- package/dist/web-ui-assets/assets/abap-BdImnpbu.js +1 -0
- package/dist/web-ui-assets/assets/actionscript-3-B3316cI-.js +1 -0
- package/dist/web-ui-assets/assets/ada-bCR0ucgS.js +1 -0
- package/dist/web-ui-assets/assets/ahk-CsyLZFj1.js +1 -0
- package/dist/web-ui-assets/assets/ahk2-8Zs4aa1G.js +1 -0
- package/dist/web-ui-assets/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/web-ui-assets/assets/angular-html-DA-rfuFy.js +1 -0
- package/dist/web-ui-assets/assets/angular-ts-BrjP3tb8.js +1 -0
- package/dist/web-ui-assets/assets/apache-Pmp26Uib.js +1 -0
- package/dist/web-ui-assets/assets/apex-DhZFqWV2.js +1 -0
- package/dist/web-ui-assets/assets/apl-CORt7UWP.js +1 -0
- package/dist/web-ui-assets/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/web-ui-assets/assets/ara-BRHolxvo.js +1 -0
- package/dist/web-ui-assets/assets/asciidoc-CSVQ5wI8.js +1 -0
- package/dist/web-ui-assets/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/web-ui-assets/assets/astro-HNnZUWAn.js +1 -0
- package/dist/web-ui-assets/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/web-ui-assets/assets/awk-DMzUqQB5.js +1 -0
- package/dist/web-ui-assets/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/web-ui-assets/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/web-ui-assets/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/web-ui-assets/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/web-ui-assets/assets/bat-CickPsom.js +1 -0
- package/dist/web-ui-assets/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/web-ui-assets/assets/berry-uYugtg8r.js +1 -0
- package/dist/web-ui-assets/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/web-ui-assets/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/web-ui-assets/assets/bird2-Bx8U0n9b.js +1 -0
- package/dist/web-ui-assets/assets/blade-2xfisSek.js +1 -0
- package/dist/web-ui-assets/assets/bsl-DlhNcFeZ.js +1 -0
- package/dist/web-ui-assets/assets/c-BIGW1oBm.js +1 -0
- package/dist/web-ui-assets/assets/c3-Dp5svz6Z.js +1 -0
- package/dist/web-ui-assets/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/web-ui-assets/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/web-ui-assets/assets/catppuccin-frappe-CZL1YF0i.js +1 -0
- package/dist/web-ui-assets/assets/catppuccin-latte-DH-8KZSZ.js +1 -0
- package/dist/web-ui-assets/assets/catppuccin-macchiato-B7yYVSCf.js +1 -0
- package/dist/web-ui-assets/assets/catppuccin-mocha-Ct7hS0mc.js +1 -0
- package/dist/web-ui-assets/assets/chapel-DTp_pixX.js +1 -0
- package/dist/web-ui-assets/assets/clarity-Dn5IMItf.js +1 -0
- package/dist/web-ui-assets/assets/clojure-P80f7IUj.js +1 -0
- package/dist/web-ui-assets/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/web-ui-assets/assets/cobol-nBiQ_Alo.js +1 -0
- package/dist/web-ui-assets/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/web-ui-assets/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/web-ui-assets/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/web-ui-assets/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/web-ui-assets/assets/coq-C7JzOVbR.js +1 -0
- package/dist/web-ui-assets/assets/cpp-BMRokrvK.js +1 -0
- package/dist/web-ui-assets/assets/crystal-DGywbUpC.js +1 -0
- package/dist/web-ui-assets/assets/csharp-DSvCPggb.js +1 -0
- package/dist/web-ui-assets/assets/css-CLj8gQPS.js +1 -0
- package/dist/web-ui-assets/assets/csv-fuZLfV_i.js +1 -0
- package/dist/web-ui-assets/assets/cue-D82EKSYY.js +1 -0
- package/dist/web-ui-assets/assets/cypher-COkxafJQ.js +1 -0
- package/dist/web-ui-assets/assets/d-85-TOEBH.js +1 -0
- package/dist/web-ui-assets/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/web-ui-assets/assets/dart-bE4Kk8sk.js +1 -0
- package/dist/web-ui-assets/assets/dax-CEL-wOlO.js +1 -0
- package/dist/web-ui-assets/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/web-ui-assets/assets/diff-D97Zzqfu.js +1 -0
- package/dist/web-ui-assets/assets/docker-BcOcwvcX.js +1 -0
- package/dist/web-ui-assets/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/web-ui-assets/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/web-ui-assets/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/web-ui-assets/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/web-ui-assets/assets/edge-FbVlp4U3.js +1 -0
- package/dist/web-ui-assets/assets/elixir-CkH2-t6x.js +1 -0
- package/dist/web-ui-assets/assets/elm-DbKCFpqz.js +1 -0
- package/dist/web-ui-assets/assets/emacs-lisp-C_m_b--Z.js +1 -0
- package/dist/web-ui-assets/assets/erb-DXfck5VN.js +1 -0
- package/dist/web-ui-assets/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/web-ui-assets/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/web-ui-assets/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/web-ui-assets/assets/fennel-BYunw83y.js +1 -0
- package/dist/web-ui-assets/assets/fish-BvzEVeQv.js +1 -0
- package/dist/web-ui-assets/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/web-ui-assets/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/web-ui-assets/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/web-ui-assets/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/web-ui-assets/assets/gdresource-TyuKm33G.js +1 -0
- package/dist/web-ui-assets/assets/gdscript-DqcFQ5yU.js +1 -0
- package/dist/web-ui-assets/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/web-ui-assets/assets/genie-D0YGMca9.js +1 -0
- package/dist/web-ui-assets/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/web-ui-assets/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/web-ui-assets/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/web-ui-assets/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/web-ui-assets/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/web-ui-assets/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/web-ui-assets/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/web-ui-assets/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/web-ui-assets/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/web-ui-assets/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/web-ui-assets/assets/gleam-BspZqrRM.js +1 -0
- package/dist/web-ui-assets/assets/glimmer-js-ByusRIyA.js +1 -0
- package/dist/web-ui-assets/assets/glimmer-ts-BfAWNZQY.js +1 -0
- package/dist/web-ui-assets/assets/glsl-DplSGwfg.js +1 -0
- package/dist/web-ui-assets/assets/gn-n2N0HUVH.js +1 -0
- package/dist/web-ui-assets/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/web-ui-assets/assets/go-C27-OAKa.js +1 -0
- package/dist/web-ui-assets/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/web-ui-assets/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/web-ui-assets/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/web-ui-assets/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/web-ui-assets/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/web-ui-assets/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/web-ui-assets/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/web-ui-assets/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/web-ui-assets/assets/hack-BWmVpMyf.js +1 -0
- package/dist/web-ui-assets/assets/haml-D5jkg6IW.js +1 -0
- package/dist/web-ui-assets/assets/handlebars-BpdQsYii.js +1 -0
- package/dist/web-ui-assets/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/web-ui-assets/assets/haxe-CfZj7gIn.js +1 -0
- package/dist/web-ui-assets/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/web-ui-assets/assets/hjson-D5-asLiD.js +1 -0
- package/dist/web-ui-assets/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/web-ui-assets/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/web-ui-assets/assets/horizon-bright-CUuTKBJd.js +1 -0
- package/dist/web-ui-assets/assets/houston-DnULxvSX.js +1 -0
- package/dist/web-ui-assets/assets/html-derivative-DlHx6ybY.js +1 -0
- package/dist/web-ui-assets/assets/html-pp8916En.js +1 -0
- package/dist/web-ui-assets/assets/http-jrhK8wxY.js +1 -0
- package/dist/web-ui-assets/assets/hurl-irOxFIW8.js +1 -0
- package/dist/web-ui-assets/assets/hxml-2-FPmUDs.js +1 -0
- package/dist/web-ui-assets/assets/hy-DFXneXwc.js +1 -0
- package/dist/web-ui-assets/assets/imba-DGztddWO.js +1 -0
- package/dist/web-ui-assets/assets/index-B2zr9aOB.js +13 -0
- package/dist/web-ui-assets/assets/index-DThJH7ut.js +380 -0
- package/dist/web-ui-assets/assets/index-DoWw28qv.css +1 -0
- package/dist/web-ui-assets/assets/ini-BEwlwnbL.js +1 -0
- package/dist/web-ui-assets/assets/java-CylS5w8V.js +1 -0
- package/dist/web-ui-assets/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/web-ui-assets/assets/jinja-f2NsQr07.js +1 -0
- package/dist/web-ui-assets/assets/jison-wvAkD_A8.js +1 -0
- package/dist/web-ui-assets/assets/json-Cp-IABpG.js +1 -0
- package/dist/web-ui-assets/assets/json5-C9tS-k6U.js +1 -0
- package/dist/web-ui-assets/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/web-ui-assets/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/web-ui-assets/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/web-ui-assets/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/web-ui-assets/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/web-ui-assets/assets/julia-5Bft2YPA.js +1 -0
- package/dist/web-ui-assets/assets/just-Cwhn7H3k.js +1 -0
- package/dist/web-ui-assets/assets/kanagawa-dragon-BuwD2xS4.js +1 -0
- package/dist/web-ui-assets/assets/kanagawa-lotus-C3DzagqV.js +1 -0
- package/dist/web-ui-assets/assets/kanagawa-wave-DFGoQZhC.js +1 -0
- package/dist/web-ui-assets/assets/kdl-DV7GczEv.js +1 -0
- package/dist/web-ui-assets/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/web-ui-assets/assets/kusto-wEQ09or8.js +1 -0
- package/dist/web-ui-assets/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/web-ui-assets/assets/latex-D5pSuvFb.js +1 -0
- package/dist/web-ui-assets/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/web-ui-assets/assets/less-B1dDrJ26.js +1 -0
- package/dist/web-ui-assets/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/web-ui-assets/assets/liquid-C0sCDyMI.js +1 -0
- package/dist/web-ui-assets/assets/llvm-BZoOZj88.js +1 -0
- package/dist/web-ui-assets/assets/log-2UxHyX5q.js +1 -0
- package/dist/web-ui-assets/assets/logo-BtOb2qkB.js +1 -0
- package/dist/web-ui-assets/assets/lua-BaeVxFsk.js +1 -0
- package/dist/web-ui-assets/assets/luau-BnpPk5vE.js +1 -0
- package/dist/web-ui-assets/assets/make-CHLpvVh8.js +1 -0
- package/dist/web-ui-assets/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/web-ui-assets/assets/marko-DjSrsDqO.js +1 -0
- package/dist/web-ui-assets/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/web-ui-assets/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/web-ui-assets/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/web-ui-assets/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/web-ui-assets/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/web-ui-assets/assets/matlab-D7o27uSR.js +1 -0
- package/dist/web-ui-assets/assets/mdc-D1_yUvq7.js +1 -0
- package/dist/web-ui-assets/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/web-ui-assets/assets/mermaid-CQcHuHx7.js +1 -0
- package/dist/web-ui-assets/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/web-ui-assets/assets/min-light-CTRr51gU.js +1 -0
- package/dist/web-ui-assets/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/web-ui-assets/assets/mojo-DJz3ZmWd.js +1 -0
- package/dist/web-ui-assets/assets/monokai-BRVnQi9A.js +1 -0
- package/dist/web-ui-assets/assets/moonbit-CHtswR0a.js +1 -0
- package/dist/web-ui-assets/assets/move-el3G9tDJ.js +1 -0
- package/dist/web-ui-assets/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/web-ui-assets/assets/nextflow-C-mBbutL.js +1 -0
- package/dist/web-ui-assets/assets/nextflow-groovy-vE_lwT2v.js +1 -0
- package/dist/web-ui-assets/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/web-ui-assets/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/web-ui-assets/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/web-ui-assets/assets/nim-BIad80T-.js +1 -0
- package/dist/web-ui-assets/assets/nix-CwoSXNpI.js +1 -0
- package/dist/web-ui-assets/assets/nord-Ddv68eIx.js +1 -0
- package/dist/web-ui-assets/assets/nsis-BlV79W_Q.js +1 -0
- package/dist/web-ui-assets/assets/nushell-D3jzshHO.js +1 -0
- package/dist/web-ui-assets/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/web-ui-assets/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/web-ui-assets/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/web-ui-assets/assets/odin-BBf5iR-q.js +1 -0
- package/dist/web-ui-assets/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/web-ui-assets/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/web-ui-assets/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/web-ui-assets/assets/org-DM6o9KBp.js +1 -0
- package/dist/web-ui-assets/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/web-ui-assets/assets/perl-B9cMNwum.js +1 -0
- package/dist/web-ui-assets/assets/php-Csjmro_R.js +1 -0
- package/dist/web-ui-assets/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/web-ui-assets/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/web-ui-assets/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/web-ui-assets/assets/po-BTJTHyun.js +1 -0
- package/dist/web-ui-assets/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/web-ui-assets/assets/polar-C0HS_06l.js +1 -0
- package/dist/web-ui-assets/assets/postcss-CXtECtnM.js +1 -0
- package/dist/web-ui-assets/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/web-ui-assets/assets/powershell-BmBUJMz7.js +1 -0
- package/dist/web-ui-assets/assets/prisma-Vru482bI.js +1 -0
- package/dist/web-ui-assets/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/web-ui-assets/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/web-ui-assets/assets/pug-DKIMFp6K.js +1 -0
- package/dist/web-ui-assets/assets/puppet-BMWR74SV.js +1 -0
- package/dist/web-ui-assets/assets/purescript-CklMAg4u.js +1 -0
- package/dist/web-ui-assets/assets/python-B6aJPvgy.js +1 -0
- package/dist/web-ui-assets/assets/qml-3beO22l8.js +1 -0
- package/dist/web-ui-assets/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/web-ui-assets/assets/qss-IeuSbFQv.js +1 -0
- package/dist/web-ui-assets/assets/r-Cf5RLm7j.js +1 -0
- package/dist/web-ui-assets/assets/racket-BqYA7rlc.js +1 -0
- package/dist/web-ui-assets/assets/raku-DXvB9xmW.js +1 -0
- package/dist/web-ui-assets/assets/razor-BjBPvh-w.js +1 -0
- package/dist/web-ui-assets/assets/rbs-CpoqiR4B.js +1 -0
- package/dist/web-ui-assets/assets/red-hvxz__6c.js +1 -0
- package/dist/web-ui-assets/assets/reg-C-SQnVFl.js +1 -0
- package/dist/web-ui-assets/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/web-ui-assets/assets/rel-C3B-1QV4.js +1 -0
- package/dist/web-ui-assets/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/web-ui-assets/assets/ron-D8l8udqQ.js +1 -0
- package/dist/web-ui-assets/assets/rose-pine-5qJOZa0Y.js +1 -0
- package/dist/web-ui-assets/assets/rose-pine-dawn-zx0QlTCp.js +1 -0
- package/dist/web-ui-assets/assets/rose-pine-moon-C9pEdX9L.js +1 -0
- package/dist/web-ui-assets/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/web-ui-assets/assets/rst-bs7f0vWN.js +1 -0
- package/dist/web-ui-assets/assets/ruby-C0TQ7zu5.js +1 -0
- package/dist/web-ui-assets/assets/rust-B1yitclQ.js +1 -0
- package/dist/web-ui-assets/assets/sas-DEy46yEz.js +1 -0
- package/dist/web-ui-assets/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/web-ui-assets/assets/scala-CqE71os6.js +1 -0
- package/dist/web-ui-assets/assets/scheme-C98Dy4si.js +1 -0
- package/dist/web-ui-assets/assets/scss-D5BDwBP9.js +1 -0
- package/dist/web-ui-assets/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/web-ui-assets/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/web-ui-assets/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/web-ui-assets/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/web-ui-assets/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/web-ui-assets/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/web-ui-assets/assets/smalltalk-BOQMe2GC.js +1 -0
- package/dist/web-ui-assets/assets/smithy-cds9vsN8.js +1 -0
- package/dist/web-ui-assets/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/web-ui-assets/assets/solarized-dark-CpvCGNkr.js +1 -0
- package/dist/web-ui-assets/assets/solarized-light-Dlz6yCKv.js +1 -0
- package/dist/web-ui-assets/assets/solidity-DijEV5ha.js +1 -0
- package/dist/web-ui-assets/assets/soy-8wufbnw4.js +1 -0
- package/dist/web-ui-assets/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/web-ui-assets/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/web-ui-assets/assets/sql-CRqJ_cUM.js +1 -0
- package/dist/web-ui-assets/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/web-ui-assets/assets/stata-DI20mbqo.js +1 -0
- package/dist/web-ui-assets/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/web-ui-assets/assets/surrealql-Cjom0U5J.js +1 -0
- package/dist/web-ui-assets/assets/svelte-Cy7k_4gC.js +1 -0
- package/dist/web-ui-assets/assets/swift-C2oV4EkX.js +1 -0
- package/dist/web-ui-assets/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/web-ui-assets/assets/system-verilog-0hqHdDBg.js +1 -0
- package/dist/web-ui-assets/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/web-ui-assets/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/web-ui-assets/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/web-ui-assets/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/web-ui-assets/assets/templ-DhtptRzy.js +1 -0
- package/dist/web-ui-assets/assets/terraform-BETggiCN.js +1 -0
- package/dist/web-ui-assets/assets/tex-D96PA37w.js +1 -0
- package/dist/web-ui-assets/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/web-ui-assets/assets/toml-vGWfd6FD.js +1 -0
- package/dist/web-ui-assets/assets/ts-tags-D351s5mN.js +1 -0
- package/dist/web-ui-assets/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/web-ui-assets/assets/tsx-COt5Ahok.js +1 -0
- package/dist/web-ui-assets/assets/turtle-BsS91CYL.js +1 -0
- package/dist/web-ui-assets/assets/twig-27uCiNez.js +1 -0
- package/dist/web-ui-assets/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/web-ui-assets/assets/typespec-CAFt9gP4.js +1 -0
- package/dist/web-ui-assets/assets/typst-BUadGCkm.js +1 -0
- package/dist/web-ui-assets/assets/v-BGw2Nkan.js +1 -0
- package/dist/web-ui-assets/assets/vala-CsfeWuGM.js +1 -0
- package/dist/web-ui-assets/assets/vb-Cu-pLBUe.js +1 -0
- package/dist/web-ui-assets/assets/verilog-nZwndyjY.js +1 -0
- package/dist/web-ui-assets/assets/vesper-DRje8inN.js +1 -0
- package/dist/web-ui-assets/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/web-ui-assets/assets/viml-CJc9bBzg.js +1 -0
- package/dist/web-ui-assets/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/web-ui-assets/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/web-ui-assets/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/web-ui-assets/assets/vue-BqiEGhQt.js +1 -0
- package/dist/web-ui-assets/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/web-ui-assets/assets/vue-vine-BoDAl6tE.js +1 -0
- package/dist/web-ui-assets/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/web-ui-assets/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/web-ui-assets/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/web-ui-assets/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/web-ui-assets/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/web-ui-assets/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/web-ui-assets/assets/wit-5i3qLPDT.js +1 -0
- package/dist/web-ui-assets/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/web-ui-assets/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/web-ui-assets/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/web-ui-assets/assets/yaml-Buea-lGh.js +1 -0
- package/dist/web-ui-assets/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/web-ui-assets/assets/zig-VOosw3JB.js +1 -0
- package/dist/web-ui-assets/index.html +2 -2
- package/package.json +1 -1
- package/dist/web-ui-assets/assets/index-3YQ3Lxgf.css +0 -1
- package/dist/web-ui-assets/assets/index-BRR0nDvU.js +0 -303
package/dist/telegram.mjs
CHANGED
|
@@ -325,7 +325,7 @@ ${o}`,paths:[e,n]}:o!==null?s={content:o,paths:[n]}:r!==null?s={content:r,paths:
|
|
|
325
325
|
|
|
326
326
|
${e}`}var _J,Xh=h(()=>{"use strict";_J=new Set(["script","style","noscript","template","svg"])});function RJ(t,e){return new Promise((n,r)=>{if(e?.aborted){r(e.reason??new Error("aborted"));return}let o=()=>{clearTimeout(s),r(e?.reason??new Error("aborted"))},s=setTimeout(()=>{e?.removeEventListener("abort",o),n()},t);e?.addEventListener("abort",o,{once:!0})})}function Ux(t,e,n){let r=Math.min(e*2**t,n);return Math.round(Math.random()*r)}function IJ(t,e){let n=t.headers.get("retry-after");if(n===null)return null;let r=Number(n.trim());return!Number.isFinite(r)||r<0?null:Math.min(r*1e3,e)}async function Bx(t,e,n={},r={}){let o=r.retries??3,s=r.baseDelayMs??500,i=r.maxDelayMs??1e4,a=r.sleep??RJ,c=n.signal??void 0,l;for(let d=0;d<=o;d++){if(c?.aborted)throw c.reason??new Error("aborted");try{let u=await t(e,n);if(!xJ.has(u.status)||d===o)return u;let p=IJ(u,i)??Ux(d,s,i);O("[web/retryFetch] retrying",{url:e,attempt:d,status:u.status,waitMs:p}),await u.body?.cancel().catch(()=>{}),await a(p,c)}catch(u){if(c?.aborted||(l=u,d===o))throw u;let p=Ux(d,s,i);O("[web/retryFetch] retrying after error",{url:e,attempt:d,waitMs:p}),await a(p,c)}}throw l??new Error("retryFetch: exhausted without a result")}var xJ,jx=h(()=>{"use strict";se();xJ=new Set([429,502,503,504])});import{BlockList as CJ,isIP as Jh}from"node:net";import{lookup as PJ}from"node:dns/promises";import{Agent as MJ}from"undici";function Wx(){let t=k.AFK_WEB_ALLOW_PRIVATE_HOSTS?.trim().toLowerCase();return t==="1"||t==="true"}function LJ(t){return t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t}function zh(t){let e=Jh(t);return e===0?!1:FJ.check(t,e===4?"ipv4":"ipv6")}async function Kx(t){return PJ(t,{all:!0,verbatim:!0})}async function Fr(t,e={}){if(e.allowPrivateHosts??Wx())return{allowed:!0};let n;try{n=new URL(t)}catch{return{allowed:!1,reason:`"${t}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{allowed:!1,reason:`protocol "${n.protocol}" not supported (http/https only)`};let r=LJ(n.hostname),o=(a,c)=>`refusing to fetch ${c} \u2014 internal/private address ${a} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`;if(Jh(r)!==0)return zh(r)?{allowed:!1,reason:o(r,r)}:{allowed:!0};let s=e.lookupFn??Kx,i;try{i=await s(r)}catch{return{allowed:!0}}for(let a of i)if(zh(a.address))return{allowed:!1,reason:o(a.address,`${r} (resolved)`)};return{allowed:!0}}async function ea(t,e={}){let n=await Fr(t,e);if(!n.allowed)throw new Ce(n.reason)}async function Fn(t,e,n={},r={}){let o={...r.lookupFn!==void 0?{lookupFn:r.lookupFn}:{},...r.allowPrivateHosts!==void 0?{allowPrivateHosts:r.allowPrivateHosts}:{}},s=e;for(let i=0;i<=Hx;i++){await ea(s,o);let a={...n,redirect:"manual",...t===globalThis.fetch&&!(r.allowPrivateHosts??Wx())?{dispatcher:NJ}:{}},c=await Bx(t,s,a,r.retry??{});if(!$J.has(c.status))return c;let l=c.headers.get("location");if(l===null||l.trim()==="")return c;let d;try{d=new URL(l,c.url||s).toString()}catch{return c}await c.body?.cancel().catch(()=>{}),s=d}throw new Ce(`too many redirects (>${Hx}) starting from ${e}`)}var OJ,DJ,FJ,Ce,NJ,Hx,$J,Lr=h(()=>{"use strict";F();jx();OJ=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.168.0.0",16]],DJ=[["::",96],["64:ff9b::",96],["fc00::",7],["fe80::",10]],FJ=(()=>{let t=new CJ;for(let[e,n]of OJ)t.addSubnet(e,n,"ipv4");for(let[e,n]of DJ)t.addSubnet(e,n,"ipv6");return t})(),Ce=class extends Error{constructor(e){super(e),this.name="EgressBlockedError"}};NJ=new MJ({connect:{lookup(t,e,n){Kx(t).then(r=>{let o=r.find(i=>zh(i.address));if(o!==void 0){n(new Ce(`refusing to connect to ${t} (resolved) \u2014 internal/private address ${o.address} (loopback, link-local, cloud metadata, or RFC1918 space). Set AFK_WEB_ALLOW_PRIVATE_HOSTS=1 to allow private-host access.`),"",0);return}let s=r[0];if(s===void 0){n(new Error(`DNS lookup returned no addresses for ${t}`),"",0);return}n(null,s.address,Jh(s.address))},r=>n(r,"",0))}}});Hx=20,$J=new Set([301,302,303,307,308])});var Yh={};mo(Yh,{enforceDomainPolicy:()=>It,loadBrowserConfig:()=>Vh});import{readFileSync as UJ}from"node:fs";import{join as BJ}from"path";function jJ(t){let n=t.replace(/[.+?()[\]{}/\\^$|]/g,"\\$&").replace(/\*/g,"[^.]*");return new RegExp(`^${n}$`,"i")}function qx(t,e){return jJ(e).test(t)}function KJ(t,e){if(t!==void 0){let n=t.trim().toLowerCase();if(n==="1"||n==="true"||n==="yes")return!0;if(n==="0"||n==="false"||n==="no")return!1}if(e!==void 0){if(HJ.has(e))return!0;if(WJ.has(e))return!1}return!1}function Gx(t){return t===void 0||t.trim()===""?[]:t.split(",").map(e=>e.trim().toLowerCase()).filter(e=>e.length>0)}function qJ(t){if(t===void 0||t==="")return"auto";if(t==="playwright"||t==="agent-browser"||t==="auto")return t;throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${t}`)}function Xx(t){let e=t===void 0||t.trim()===""?"default":t.trim();return Nm(e),e}function GJ(t){if(t===void 0)return!1;let e=t.trim().toLowerCase();return e==="1"||e==="true"||e==="yes"}function XJ(t){try{return UJ(t,"utf8")}catch(e){if(e.code==="ENOENT")return;throw e}}function zJ(t,e){let n={...t};if(typeof e.headless=="boolean"&&(n.headless=e.headless),Array.isArray(e.allowedDomains)&&(n.allowedDomains=e.allowedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),Array.isArray(e.blockedDomains)&&(n.blockedDomains=e.blockedDomains.filter(r=>typeof r=="string").map(r=>r.trim().toLowerCase()).filter(r=>r.length>0)),typeof e.domSnapshots=="boolean"&&(n.domSnapshots=e.domSnapshots),e.backend==="playwright"||e.backend==="agent-browser"||e.backend==="auto")n.backend=e.backend;else if(e.backend!==void 0)throw new Error(`AFK_BROWSER_BACKEND: must be "playwright", "agent-browser", or "auto", got: ${String(e.backend)}`);return typeof e.defaultProfile=="string"&&(n.defaultProfile=Xx(e.defaultProfile)),n}function Vh(t){let e=t?.env??k,n=t?.readFileSync??XJ,r=t?.surface??e.AGENT_SURFACE,o=KJ(e.AFK_BROWSER_HEADLESS,r),s=Gx(e.AFK_BROWSER_ALLOWED_DOMAINS),i=Gx(e.AFK_BROWSER_BLOCKED_DOMAINS),a=GJ(e.AFK_BROWSER_DOM_SNAPSHOTS),c=qJ(e.AFK_BROWSER_BACKEND),l=Xx(e.AFK_BROWSER_DEFAULT_PROFILE),d={headless:o,allowedDomains:s,blockedDomains:i,domSnapshots:a,backend:c,configPath:null,defaultProfile:l},u=e.AFK_BROWSER_CONFIG,p=u!==void 0&&u.trim()!==""?u.trim():BJ(rn(),"browser.json"),f=n(p);if(f===void 0)return d;let m;try{m=JSON.parse(f)}catch(y){throw new Error(`Failed to parse browser config at ${p}: ${String(y)}`)}if(typeof m!="object"||m===null||Array.isArray(m))throw new Error(`Browser config at ${p} must be a JSON object`);let g=zJ(d,m);return g.configPath=p,g}function It(t,e){let n;try{n=new URL(t).hostname.toLowerCase()}catch{return{allowed:!1,reason:`invalid URL: ${t}`}}for(let r of e.blockedDomains)if(qx(n,r))return{allowed:!1,reason:`blocked by AFK_BROWSER_BLOCKED_DOMAINS: ${r}`};return e.allowedDomains.length>0&&!e.allowedDomains.some(o=>qx(n,o))?{allowed:!1,reason:"not in AFK_BROWSER_ALLOWED_DOMAINS"}:{allowed:!0}}var HJ,WJ,Ln=h(()=>{"use strict";F();B();HJ=new Set(["daemon","subagent","telegram","afk"]),WJ=new Set(["repl","interactive","cli"])});import{readFileSync as JJ}from"node:fs";import{join as VJ}from"node:path";import{homedir as YJ}from"node:os";function ZJ(t){let e=t??QJ,n;try{n=JJ(e,"utf8")}catch{return null}let r;try{r=JSON.parse(n)}catch{return null}if(typeof r!="object"||r===null||Array.isArray(r))return null;let o=r;if(typeof o.url!="string"||typeof o.token!="string"||typeof o.pid!="number")return null;let s;try{s=new URL(o.url)}catch{return null}let{hostname:i,protocol:a}=s;if(!(i==="127.0.0.1"||i==="localhost"||i==="::1")||a!=="http:")throw new Error(`Agent Browser connection file contains an untrusted URL: ${o.url}. Only http://127.0.0.1 or http://localhost is permitted.`);return{url:o.url,token:o.token,pid:o.pid,version:typeof o.version=="string"?o.version:"unknown"}}function eV(t){try{return process.kill(t,0),!0}catch{return!1}}async function tV(t,e,n=2e3){try{let r=new AbortController,o=setTimeout(()=>r.abort(),n),s=await fetch(`${t}/health`,{method:"GET",headers:{Authorization:`Bearer ${e}`,Host:"127.0.0.1:8833"},signal:r.signal});return clearTimeout(o),s.ok}catch{return!1}}async function Qh(t){let e=ZJ(t);return e===null?{available:!1,connection:null,reason:"connection file missing or invalid"}:eV(e.pid)?await tV(e.url,e.token)?{available:!0,connection:e,reason:null}:{available:!1,connection:e,reason:`health probe failed at ${e.url}`}:{available:!1,connection:e,reason:`stale connection file: PID ${e.pid} not alive`}}var QJ,zx=h(()=>{"use strict";QJ=VJ(YJ(),".config","agent-browser","connection.json")});async function Jx(t){let{config:e,surface:n}=t;if(e.backend==="playwright")return{backend:"playwright",reason:"explicit config: backend=playwright",probeMs:0,availability:null};if(e.backend==="agent-browser"){let i=Date.now(),a=await Qh(),c=Date.now()-i;if(!a.available)throw new Error(`AFK_BROWSER_BACKEND=agent-browser but Agent Browser is not available: ${a.reason}`);return{backend:"agent-browser",reason:"explicit config: backend=agent-browser",probeMs:c,availability:a}}if(n&&nV.has(n))return{backend:"playwright",reason:`auto: surface "${n}" excluded from Agent Browser`,probeMs:0,availability:null};if(e.headless)return{backend:"playwright",reason:"auto: headless mode requires Playwright",probeMs:0,availability:null};let r=Date.now(),o=await Qh(),s=Date.now()-r;return o.available?{backend:"agent-browser",reason:"auto: Agent Browser available and preferred",probeMs:s,availability:o}:{backend:"playwright",reason:`auto: Agent Browser unavailable (${o.reason})`,probeMs:s,availability:o}}var nV,Vx=h(()=>{"use strict";zx();nV=new Set(["daemon","subagent"])});import{createHash as rV}from"crypto";function Yx(t){return!!(t.role==="textbox"&&t.kind==="password"||t.label&&oV.test(t.label))}function Qx(t){return rV("sha256").update(t,"utf8").digest("hex").slice(0,8)}function Zx(t){let e=t.replace(/\s+/g," ").trim();return e.length<=80?e:e.slice(0,77)+"..."}var oV,Od=h(()=>{"use strict";oV=/password|secret|token|api[_-]?key|otp|2fa/i});import{randomBytes as sV}from"crypto";import{mkdir as iV,stat as aV,writeFile as cV}from"fs/promises";import{join as Zh}from"path";import{gzip as lV}from"zlib";import{promisify as dV}from"util";function uV(t){return Zh(it(t),"browser")}function pV(t){return Zh(uV(t),"screenshots")}function fV(){return new Date().toISOString().replace(/[:.]/g,"-")}function mV(){return sV(3).toString("hex")}async function Jo(t,e,n){if(e.length>eR)throw new Error(`writeScreenshotSidecar: buffer exceeds ${eR} byte cap (received ${e.length} bytes). Refusing to write oversized screenshot.`);let r=pV(t);await iV(r,{recursive:!0});let o=`${fV()}-${mV()}-${n}.png`,s=Zh(r,o);await cV(s,e);let{size:i}=await aV(s);return{path:s,bytes:i}}var jye,eR,ey=h(()=>{"use strict";B();Od();jye=dV(lV);eR=5*1024*1024});var Dd,tR=h(()=>{"use strict";se();Dd=class{baseUrl;token;constructor(e){this.baseUrl=e.url,this.token=e.token}async call(e,n,r=3e4){let o={version:1,method:e,params:n},s=new AbortController,i=setTimeout(()=>s.abort(),r);try{let a=await fetch(`${this.baseUrl}/agent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.token}`,Host:new URL(this.baseUrl).host},body:JSON.stringify(o),signal:s.signal});if(!a.ok){let l=await a.text().catch(()=>"");throw new Error(`Agent Browser ${e} failed (HTTP ${a.status}): ${l}`)}let c=await a.json();if(c.ok===!1){let l=c.error,d=l?.code??"UNKNOWN",u=l?.message??JSON.stringify(c);throw new Error(`Agent Browser ${e} failed: [${String(d)}] ${String(u)}`)}return c.result}finally{clearTimeout(i)}}async listTabs(){return this.call("tabs.list",null)}async openTab(e){return{tabId:(await this.call("tabs.open",{url:e},6e4)).id}}async closeTab(e){await this.call("page.eval",{id:e,script:"window.close()"}).catch(n=>{O("[browser/agent-browser] closeTab window.close() failed (tab leak expected)",{tabId:e,err:n})})}async read(e,n){return this.call("page.read",{id:e,mode:n?.mode??"main",...n?.query?{query:n.query}:{},...n?.budget?{budget:n.budget}:{}})}async inspect(e,n){return this.call("page.inspect",{id:e,mode:n?.mode??"interactive",...n?.query?{query:n.query}:{},...n?.limit?{limit:n.limit}:{}})}async click(e,n){await this.call("page.click",{id:e,elementId:n})}async fill(e,n,r){await this.call("page.fill",{id:e,elementId:n,value:r})}async press(e,n,r){await this.call("page.press",{id:e,key:n,...r?{elementId:r}:{}})}async select(e,n,r){await this.call("page.select",{id:e,elementId:n,value:r})}async waitFor(e,n,r){await this.call("page.wait",{id:e,condition:n,...r?.value?{value:r.value}:{},...r?.timeout?{timeout:r.timeout}:{}},(r?.timeout??3e4)+5e3)}async evalScript(e,n){return this.call("page.eval",{id:e,script:n})}async screenshot(e){return this.call("page.screenshot",{id:e})}}});function ty(t){return{id:t.id,role:t.role,label:t.label,kind:t.kind,value:t.value,state:{disabled:t.disabled,...t.checked!==void 0?{checked:t.checked}:{},...t.selected!==void 0?{selected:t.selected}:{},...t.expanded!==void 0?{expanded:t.expanded}:{}},bbox:t.bbox,...t.selector?{selector:t.selector}:{}}}function nR(t,e){switch(e.kind){case"element_id":if(t.has(e.elementId))return e.elementId;throw new Error(`Element ${e.elementId} not found in current observation. Call browser_observe to refresh.`);case"selector":return null;case"semantic":return null}}async function ny(t,e,n,r,o,s){switch(n){case"click":await t.click(e,r);break;case"fill":if(o===void 0)throw new Error("fill requires a value");await t.fill(e,r,o);break;case"press":if(o===void 0)throw new Error("press requires a value (key combo)");await t.press(e,o,r);break;case"select":if(o===void 0)throw new Error("select requires a value");await t.select(e,r,o);break;case"hover":throw new Error("hover is not supported by Agent Browser; use element_id from a prior observation to target clicks instead");case"scroll_to":{let i=r.replace(/\\/g,"\\\\").replace(/"/g,'\\"');await t.evalScript(e,`document.querySelector('[data-element-id="${i}"]')?.scrollIntoView({behavior:'smooth',block:'center'})`);break}case"wait_for":await t.waitFor(e,"element",{value:r,timeout:s??1e4});break;default:throw new Error(`Unknown action: ${n}`)}}async function rR(t,e){if(e.target.kind!=="semantic")throw new Error("resolveSemanticAndAct called with non-semantic target");let{elements:n}=await t.client.inspect(t.tabId,{mode:"interactive",query:e.target.text,limit:10}),r=n;if(e.target.role){let c=e.target.role.toLowerCase();r=n.filter(l=>l.role.toLowerCase()===c)}if(r.length===0)throw new Error(`No element found matching semantic target: text="${e.target.text}"`+(e.target.role?`, role="${e.target.role}"`:""));if(r.length>1)return{outcome:"ambiguous_target",query:{text:e.target.text,...e.target.role?{role:e.target.role}:{}},candidates:r.slice(0,5).map(ty)};let s=r[0].id;await ny(t.client,t.tabId,e.action,s,e.value,e.timeoutMs);let i=await t.client.read(t.tabId,{mode:"main"}),a=It(i.url,t.config);return a.allowed?{elementId:s}:{outcome:"blocked_by_policy",url:i.url,reason:`action navigated to blocked domain: ${a.reason}`}}var oR=h(()=>{"use strict";Ln()});var sR={};mo(sR,{AgentBrowserProvider:()=>ry});var ry,iR=h(()=>{"use strict";Ln();ey();tR();oR();ry=class{name="agent-browser";config;client;sessions=new Map;constructor(e,n){this.config=e,this.client=new Dd(n)}async open(e){let n=It(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let r=this.sessions.get(e.sessionId);if(r)await this.client.evalScript(r.tabId,`window.location.href = ${JSON.stringify(e.url)}`),await this.client.waitFor(r.tabId,"load",{timeout:e.timeoutMs??3e4});else{let{tabId:i}=await this.client.openTab(e.url);await this.client.waitFor(i,"load",{timeout:e.timeoutMs??3e4}),r={tabId:i,observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null},this.sessions.set(e.sessionId,r)}let o=await this.client.read(r.tabId,{mode:"main"}),s=It(o.url,this.config);return s.allowed?this.buildObservation(r,e.sessionId,e.screenshot,void 0,"browser_open"):(await this.client.evalScript(r.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`redirected to blocked domain: ${s.reason}`})}async observe(e){let n=this.sessions.get(e.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${e.sessionId}. Call browser_open first.`);return this.buildObservation(n,e.sessionId,e.screenshot,e.maxElements,"browser_observe")}async act(e){let n=this.sessions.get(e.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${e.sessionId}. Call browser_open first.`);let r=nR(n.knownElements,e.target);if(r===null){if(e.target.kind==="semantic"){let i=await rR({client:this.client,config:this.config,tabId:n.tabId},e);return"outcome"in i?i:(n.lastAction=`browser_act:${e.action}`,n.lastActionAt=new Date().toISOString(),this.buildObservation(n,e.sessionId,e.screenshot,void 0,"browser_act"))}throw e.target.kind==="selector"?new Error("selector targets are not supported by Agent Browser; use element_id or semantic targets"):new Error(`Cannot resolve target: ${JSON.stringify(e.target)}`)}await ny(this.client,n.tabId,e.action,r,e.value,e.timeoutMs),n.lastAction=`browser_act:${e.action}`,n.lastActionAt=new Date().toISOString();let o=await this.client.read(n.tabId,{mode:"main"}),s=It(o.url,this.config);return s.allowed?this.buildObservation(n,e.sessionId,e.screenshot,void 0,"browser_act"):(await this.client.evalScript(n.tabId,"window.location.href = 'about:blank'").catch(()=>{}),{outcome:"blocked_by_policy",url:o.url,reason:`action navigated to blocked domain: ${s.reason}`})}async render(e){throw new Error("AgentBrowserProvider does not support render(). Use PlaywrightProvider for one-shot content fetches.")}async screenshot(e){let n=this.sessions.get(e.sessionId);if(!n)throw new Error(`No Agent Browser tab open for session ${e.sessionId}. Call browser_open first.`);if(e.target!==void 0||e.fullPage)throw new Error("Agent Browser does not support element or full-page screenshots; omit target and fullPage.");let r=await this.client.screenshot(n.tabId),o=Buffer.from(r.data,"base64"),s=o.length>=24?o.readUInt32BE(16):0,i=o.length>=24?o.readUInt32BE(20):0;return{path:(await Jo(e.sessionId,o,"browser_screenshot")).path,bytes:o.length,width:s,height:i,dataBase64:r.data,mediaType:"image/png"}}async extract(e){throw new Error("AgentBrowserProvider does not support extract() yet.")}async close(e){let n=this.sessions.get(e.sessionId);if(n){try{await this.client.closeTab(n.tabId)}catch{}this.sessions.delete(e.sessionId)}}describe(e){let n=this.sessions.get(e);return n?{active:!0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:1}:null}async shutdown(){let e=Array.from(this.sessions.entries()).map(async([,n])=>{try{await this.client.closeTab(n.tabId)}catch{}});await Promise.all(e),this.sessions.clear()}async buildObservation(e,n,r,o,s="browser_open"){let[i,a]=await Promise.all([this.client.read(e.tabId,{mode:"main",budget:4e3}),this.client.inspect(e.tabId,{mode:"interactive",limit:o??80})]),c=a.elements.map(ty),l=o??80,d=c.slice(0,l);e.observationCounter+=1,e.knownElements=new Map(d.map(g=>[g.id,g])),e.currentUrl=i.url,e.currentTitle=i.title;let u=[];c.length>l&&u.push(`page has ${c.length} interactive elements; showing first ${l}`);let p=null;if(r)try{let g=await this.client.screenshot(e.tabId),y=Buffer.from(g.data,"base64");p=(await Jo(n,y,s)).path}catch{u.push("screenshot capture failed")}let f=`obs_${e.observationCounter.toString(36)}`,m={httpStatus:null,loadingState:"idle",hasDialog:!1,consoleErrors:0};return{observationId:f,url:i.url,title:i.title,textSummary:i.content.slice(0,4e3),interactive:d,status:m,warnings:u,screenshotPath:p,capturedAt:new Date().toISOString()}}}});import{existsSync as gV,readFileSync as hV}from"node:fs";import{createRequire as yV}from"node:module";import{dirname as bV,join as wV}from"node:path";function lR(t){if(typeof t=="string")return t;let e=[],n=t;for(let r=0;r<kV&&n instanceof Error;r++)e.push(n.message),n=n.cause;return e.length>0?e.join(" | "):String(t)}function ze(t){let e=lR(t);return cR.some(n=>e.includes(n))}function vV(){try{let e=yV(import.meta.url).resolve("playwright/package.json"),n=JSON.parse(hV(e,"utf8"));if(typeof n!="object"||n===null)return;let r=n.bin,o=typeof r=="string"?r:typeof r=="object"&&r!==null?r.playwright:void 0;if(typeof o!="string"||o.length===0)return;let s=wV(bV(e),o);return gV(s)?`node ${/\s/.test(s)?`"${s}"`:s} install chromium`:void 0}catch{return}}function ta(){return aR??=vV()??SV,aR}function oy(t){return t.includes("install chromium")}function gt(t,e){let n=lR(t),r=e?.latched===!0?` ${TV}`:"";if(n.includes("Executable doesn't exist")){let o="";return e?.headless===!0?o=" This launch was headless, which needs the `chromium_headless_shell-*` build.":e?.headless===!1&&(o=" This launch was headed, which needs the full `chromium-*` build \u2014 the headless shell alone does not satisfy it."),`browser tools require the Playwright chromium binary. Install via: ${ta()}.${o}${r}`}return`browser tools require the optional \`playwright\` peer dependency. Install via: pnpm add playwright (then ${ta()}). Or pick a different tool.${r}`}function Fd(t,e,n=!1){if(!ze(t))return t;let r=t instanceof Error?t.message:String(t);return new Error(`${r}
|
|
327
327
|
|
|
328
|
-
${gt(t,{headless:e,latched:n})}`,{cause:t})}var cR,SV,kV,aR,TV,sy=h(()=>{"use strict";cR=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],SV="pnpm exec playwright install chromium",kV=4;TV="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Nr from"node:fs";import Ld from"node:path";import{randomBytes as EV}from"node:crypto";function _V(){try{return"5.208.4"}catch{}try{let t=Ld.resolve(import.meta.dirname,"../../../package.json"),e=Nr.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var AV,Nd,dR=h(()=>{"use strict";sy();B();se();AV=_V(),Nd=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(e){this.config=e}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(e){this.launchFailure={error:e}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=(async()=>{let e;try{({chromium:e}=await import("playwright"))}catch(n){let r=Fd(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await e.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Fd(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(e){let n=this.sessions.get(e);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(e){return this.sessions.get(e)?.page}async renderHtml(e,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(c){s=c,await a.abort("blockedbyclient")}});let i=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let a=await o.newPage(),c;try{c=await a.goto(e,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw s??p}if(s!==void 0)throw s;let l=await a.content();if(s!==void 0)throw s;let d=a.url(),u=c!==null?c.status():null;return{html:l,finalUrl:d,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(e){this.clearLaunchFailure();let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let e=[...this.sessions.keys()];if(await Promise.all(e.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${AV}`}}loadStorageState(e){let n=$m(e);try{if(!Nr.existsSync(n))return;let r=JSON.parse(Nr.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=$m(e);if(!Nr.existsSync(r))return;let o=await n.storageState(),s=Ld.join(Ld.dirname(r),`.${Ld.basename(r)}.${process.pid}.${EV(4).toString("hex")}.tmp`);Nr.writeFileSync(s,JSON.stringify(o),{mode:384}),Nr.chmodSync(s,384),Nr.renameSync(s,r),O("[browser/vault] saved session",{profile:e,file:r})}catch(r){O("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as xV}from"node:crypto";function RV(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function IV(t,e,n){return`el_${xV("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function CV(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function uR(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function fR(t,e){let n=t.role??"",r=t.name??"";pR.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])fR(s,e)}async function PV(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),c=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a==="input"?o.type||null:o.getAttribute("type");r.push({name:c,tagName:a,type:l,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},mR).catch(()=>[])}async function MV(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",c=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a||(n[i]??"");if(i==="input"){let g=s.type;g==="checkbox"?l="checkbox":g==="radio"?l="radio":g==="button"||g==="submit"||g==="reset"?l="button":g==="search"?l="searchbox":l="textbox"}if(!l)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,m={role:l,name:c,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},mR).catch(()=>[])}function OV(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function $d(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=OV(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=PV(t),c=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,c,l,d]),y,b=!1;u!==null?(y=[],fR(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await MV(t)).filter(P=>pR.has(P.role??"")));let w=new Map;for(let E of p){let P=uR(E.name),H=w.get(P);(!H||H.bbox.w===0&&E.bbox.w>0)&&w.set(P,E)}let v=y.map(E=>({ax:E,dom:w.get(uR(E.name??""))})),_=r?v:v.filter(E=>E.dom?E.dom.bbox.w>0||E.dom.bbox.h>0:!0);_.sort((E,P)=>{let H=E.dom?.bbox.y??0,M=P.dom?.bbox.y??0;if(H!==M)return H-M;let N=E.dom?.bbox.x??0,$=P.dom?.bbox.x??0;return N-$}),_.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=_.slice(0,n).map((E,P)=>{let H=E.ax.role??"generic",M=E.ax.name??"",N=IV(H,M,P),$=E.dom?.bbox??{x:0,y:0,w:0,h:0},U=E.dom?.type??null,j=null;E.ax.value!==void 0&&E.ax.value!==null&&(j=String(E.ax.value)),E.ax.checked!==void 0&&(j=String(E.ax.checked)),Yx({role:H,kind:U})&&(j="[redacted]");let K={disabled:E.ax.disabled??!1};E.ax.checked!==void 0&&(K.checked=E.ax.checked===!0||E.ax.checked==="mixed"),E.ax.selected!==void 0&&(K.selected=E.ax.selected),E.ax.expanded!==void 0&&(K.expanded=E.ax.expanded);let Y;E.dom?.testId?Y=`[data-testid="${E.dom.testId}"]`:E.dom?.id&&(Y=`#${E.dom.id}`);let Ft={id:N,role:H,label:RV(M),kind:U,value:j,state:K,bbox:$};return Y!==void 0&&(Ft.selector=Y),Ft}),I="idle";try{let E=await t.evaluate(()=>document.readyState);E==="loading"?I="loading":E==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let C=CV(f),T=`obs_${e.observationCounter.toString(36)}`,R=new Date().toISOString();return{observationId:T,url:m,title:g,textSummary:C,interactive:A,status:{httpStatus:e.httpStatus??null,loadingState:I,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:R}}var pR,mR,gR=h(()=>{"use strict";Od();pR=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);mR="a[href], button, input, select, textarea, [role], [tabindex], label"});async function hR(t,e){try{let n=await t.nth(e).evaluate(i=>{let a=i,c=a.getAttribute("role")??a.tagName.toLowerCase(),l=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:c,label:l,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${e}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function iy(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>hR(t,s)))).filter(o=>o!==null)}async function DV(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let c=a,l=c.getBoundingClientRect();return`${c.tagName}@${Math.round(l.x)},${Math.round(l.y)}`})}catch{continue}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function ay(t,e,n){switch(e.kind){case"element_id":return FV(t,e,n);case"selector":return LV(t,e);case"semantic":return NV(t,e)}}async function FV(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let c=t.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await iy(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function LV(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await iy(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function NV(t,e){return e.role!==void 0?$V(t,e.text,e.role):UV(t,e.text,e)}async function $V(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await iy(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function UV(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{exact:!1}),[i,a,c]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+c===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),c>0&&d.push({loc:s,count:c});let u=await DV(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let y=p[g];if(y===void 0)continue;let b=await hR(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${g}`,v=0;for(let _=0;_<w.length;_++)v=v*31+w.charCodeAt(_)>>>0;f.push({...b,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var yR=h(()=>{"use strict"});async function cy(t,e,n,r){let o=t.url();if(o===n)return null;let s=It(o,e);if(s.allowed)return null;try{await t.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var bR=h(()=>{"use strict";Ln()});var dy={};mo(dy,{PlaywrightProvider:()=>ly});function wR(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var ly,uy=h(()=>{"use strict";dR();gR();yR();Ln();bR();ey();ly=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new Nd(e)}async open(e){let n=It(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(u){a=u}let c=o.url();if(!(a!==null&&(c===""||c==="about:blank"))){let u=await cy(o,this.config,e.url,()=>this.close({sessionId:r}));if(u!==null)return u}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await $d(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await $d(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=e.timeoutMs??3e4,a=await ay(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${wR(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(e.action){case"click":await c.click({timeout:i});break;case"fill":await c.fill(e.value??"");break;case"press":await c.press(e.value??"");break;case"select":await c.selectOption(e.value??"");break;case"hover":await c.hover({timeout:i});break;case"scroll_to":await c.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await c.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(y){l=y}else l=g}let u=await cy(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(e.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await $d(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),l!==null)throw l;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal,requestGuard:e.requestGuard})}async screenshot(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(e.target!==void 0){let d=await ay(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${wR(e.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:e.fullPage??!1});let{path:i,bytes:a}=await Jo(n,s,"browser_screenshot"),c=0,l=0;if(e.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));c=d.w,l=d.h}catch{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}else{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}return{path:i,bytes:a,width:c,height:l,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(e){let n=this.sessions.get(e);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await Jo(n,o,r);return s}catch{return null}}}});var Ur={};mo(Ur,{__resetBrowserRegistryForTests:()=>qV,browserProviderActive:()=>HV,closeBrowserProvider:()=>fy,getBrowserProvider:()=>jV,getLastRoutingDecision:()=>KV,peekBrowserProvider:()=>WV});function SR(){Promise.resolve(fy()).then(()=>{process.exit(130)})}function kR(){Promise.resolve(fy()).then(()=>{process.exit(143)})}function vR(){Xt=null}function BV(){Ud||(process.on("SIGINT",SR),process.on("SIGTERM",kR),process.on("exit",vR),Ud=!0)}function TR(){Ud&&(process.removeListener("SIGINT",SR),process.removeListener("SIGTERM",kR),process.removeListener("exit",vR),Ud=!1)}async function jV(t){return Xt!==null?Xt:($r!==null||($r=(async()=>{let e=Vh(t),n=t?.surface??(t?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await Jx({config:e,surface:n});py=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:s}=await Promise.resolve().then(()=>(iR(),sR)),i=r.availability.connection;o=new s(e,i)}else{let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(uy(),dy));o=new s(e)}return BV(),Xt=o,$r=null,o})()),$r)}async function fy(){if(Xt===null)return;let t=Xt;Xt=null,$r=null,TR(),await t.shutdown()}function HV(){return Xt!==null}function WV(){return Xt}function KV(){return py}function qV(){Xt=null,$r=null,py=null,TR()}var Xt,$r,Ud,py,Br=h(()=>{"use strict";Ln();Vx();F();Xt=null,$r=null,Ud=!1,py=null});async function ER(t,e){try{return await Lx(t,e)}catch(n){return O("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function YV(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Br(),Ur)),r=await n();try{return await r.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(uy(),dy)),{loadBrowserConfig:i}=await Promise.resolve().then(()=>(Ln(),Yh)),a=i(),c=new s(a);try{return await c.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}finally{await c.shutdown()}}throw o}}async function _R(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??YV,o=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},s=null,i="",a=t,c=null,l=null;try{let u=await Fn(n,t,{headers:VV,signal:e.signal},o);c=u.status,a=u.url||t;let p=u.headers.get("content-type")??"";if(u.ok){if(JV.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await u.text();if(zV.test(p)&&!XV.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(i=f,s=await ER(f,a),e.signal.aborted)throw e.signal.reason??new Error("aborted")}}catch(u){if(e.signal.aborted||u instanceof Ce||u instanceof Error&&u.message.startsWith("web_scrape markdown mode received binary"))throw u;l=u}if(!(s===null||s.textLength<200)&&s!==null){let u=Gh({html:i,extractedTextLength:s.textLength});return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1,...u!==void 0?{advisory:u}:{}}}try{await ea(t,o);let u=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:f=>ea(f,o)});u.finalUrl!==t&&/^https?:\/\//i.test(u.finalUrl)&&await ea(u.finalUrl,o);let p=await ER(u.html,u.finalUrl);if(e.signal.aborted)throw e.signal.reason??new Error("aborted");if(s===null||p.textLength>=s.textLength){let f=Gh({html:u.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:u.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(u){if(e.signal.aborted||u instanceof Ce)throw u;if(s===null){let p=u instanceof Error?u.message:String(u),f=l instanceof Error?l.message:`HTTP ${c??"error"}`,m=new Error(`web_scrape could not retrieve ${t}: fetch failed (${f}) and render failed (${p}).`);throw m.cause=u,m}}if(s!==null)return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${t} (HTTP ${c??"error"}).`)}var XV,zV,JV,VV,AR=h(()=>{"use strict";Nx();Xh();Lr();se();XV=/(text\/html|application\/xhtml\+xml)/i,zV=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,JV=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,VV={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function e4(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(QV,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),ZV),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=Q(d);u&&(c=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let l=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${l}${c}`)}let i;try{i=await s.json()}catch(c){throw new Error(`Exa Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(i.results??[]).slice(0,r).map(c=>({title:(c.title??"").trim()||"(untitled)",url:c.url??"",description:(c.highlights?.[0]??"").trim()})).filter(c=>c.url.length>0)}}}function xR(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?e4({apiKey:t.exaApiKey,fetchFn:t.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function RR(t,e){if(e.length===0)return`# Search results for "${t}"
|
|
328
|
+
${gt(t,{headless:e,latched:n})}`,{cause:t})}var cR,SV,kV,aR,TV,sy=h(()=>{"use strict";cR=["Cannot find package","ERR_MODULE_NOT_FOUND","Executable doesn't exist"],SV="pnpm exec playwright install chromium",kV=4;TV="This session already latched the failure, so browser tools keep fast-failing with this same error \u2014 after installing, call browser_close once to retry."});import Nr from"node:fs";import Ld from"node:path";import{randomBytes as EV}from"node:crypto";function _V(){try{return"5.209.0"}catch{}try{let t=Ld.resolve(import.meta.dirname,"../../../package.json"),e=Nr.readFileSync(t,"utf8"),n=JSON.parse(e);return typeof n.version=="string"?n.version:"unknown"}catch{return"unknown"}}var AV,Nd,dR=h(()=>{"use strict";sy();B();se();AV=_V(),Nd=class{config;browser;sessions=new Map;launchPromise;launchFailure;shutdownComplete=!1;constructor(e){this.config=e}clearLaunchFailure(){this.launchFailure=void 0}latchLaunchFailure(e){this.launchFailure={error:e}}async ensureBrowser(){if(this.browser!==void 0&&this.browser.isConnected())return this.browser;if(this.launchFailure!==void 0)throw this.launchFailure.error;return this.browser!==void 0&&!this.browser.isConnected()&&(this.browser=void 0,this.launchPromise=void 0),this.launchPromise!==void 0?this.launchPromise:(this.launchPromise=(async()=>{let e;try{({chromium:e}=await import("playwright"))}catch(n){let r=Fd(n,this.config.headless,!0);throw this.latchLaunchFailure(r),this.launchPromise=void 0,r}try{let n=await e.launch({headless:this.config.headless});return this.browser=n,this.clearLaunchFailure(),n}catch(n){let r=Fd(n,this.config.headless,!0);throw this.latchLaunchFailure(r),r}finally{this.launchPromise=void 0}})(),this.launchPromise)}isBrowserActive(){return this.browser!==void 0&&this.browser.isConnected()}async ensureContext(e){let n=this.sessions.get(e);if(n!==void 0)return n.context;let r=await this.ensureBrowser(),o=this.loadStorageState(this.config.defaultProfile),s=await r.newContext({...this.contextOptions(),...o!==void 0?{storageState:o}:{}}),i={context:s,page:void 0,consoleErrors:0,lastHttpStatus:null,openDialog:void 0};return this.sessions.set(e,i),s}async ensurePage(e){let n=this.sessions.get(e);if(n!==void 0&&n.page!==void 0)return n.page;await this.ensureContext(e);let r=this.sessions.get(e);if(r===void 0)throw new Error(`[BrowserLauncher] session entry disappeared for sessionId=${e}`);if(r.page!==void 0)return r.page;let o=await r.context.newPage();return r.page=o,o.on("console",s=>{s.type()==="error"&&(r.consoleErrors+=1)}),o.on("request",s=>{s.isNavigationRequest()&&s.frame()===o.mainFrame()&&(r.lastHttpStatus=null)}),o.on("response",s=>{s.frame()===o.mainFrame()&&s.request().isNavigationRequest()&&(r.lastHttpStatus=s.status())}),o.on("dialog",s=>{r.openDialog=s}),o}getPage(e){return this.sessions.get(e)?.page}async renderHtml(e,n){let o=await(await this.ensureBrowser()).newContext(this.contextOptions()),s;n.requestGuard!==void 0&&await o.route("**/*",async a=>{try{await n.requestGuard(a.request().url()),await a.continue()}catch(c){s=c,await a.abort("blockedbyclient")}});let i=()=>{o.close().catch(()=>{})};if(n.signal?.aborted===!0)throw await o.close().catch(()=>{}),new Error("render aborted");n.signal!==void 0&&n.signal.addEventListener("abort",i,{once:!0});try{let a=await o.newPage(),c;try{c=await a.goto(e,{timeout:n.timeoutMs,waitUntil:n.waitUntil})}catch(p){throw s??p}if(s!==void 0)throw s;let l=await a.content();if(s!==void 0)throw s;let d=a.url(),u=c!==null?c.status():null;return{html:l,finalUrl:d,httpStatus:u}}finally{n.signal!==void 0&&n.signal.removeEventListener("abort",i),await o.close().catch(()=>{})}}getConsoleErrorCount(e){return this.sessions.get(e)?.consoleErrors??0}getLastHttpStatus(e){return this.sessions.get(e)?.lastHttpStatus??null}hasOpenDialog(e){return this.sessions.get(e)?.openDialog!==void 0}async dismissDialog(e,n=!0){let r=this.sessions.get(e);if(r===void 0||r.openDialog===void 0)return;let o=r.openDialog;r.openDialog=void 0,n?await o.accept():await o.dismiss()}async closeSession(e){this.clearLaunchFailure();let n=this.sessions.get(e);n!==void 0&&(this.sessions.delete(e),await this.saveStorageState(this.config.defaultProfile,n.context),n.page!==void 0&&await n.page.close().catch(()=>{}),await n.context.close().catch(()=>{}))}async shutdown(){if(this.clearLaunchFailure(),this.shutdownComplete)return;this.shutdownComplete=!0;let e=[...this.sessions.keys()];if(await Promise.all(e.map(n=>this.closeSession(n))),this.browser!==void 0){let n=this.browser;this.browser=void 0,await n.close().catch(()=>{})}}activeSessions(){return this.sessions.size}contextOptions(){return{viewport:{width:1280,height:800},userAgent:`Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/${AV}`}}loadStorageState(e){let n=$m(e);try{if(!Nr.existsSync(n))return;let r=JSON.parse(Nr.readFileSync(n,"utf8"));return O("[browser/vault] restored session",{profile:e,file:n}),r}catch(r){O("[browser/vault] ignoring unreadable vault",{profile:e,file:n,err:r});return}}async saveStorageState(e,n){try{let r=$m(e);if(!Nr.existsSync(r))return;let o=await n.storageState(),s=Ld.join(Ld.dirname(r),`.${Ld.basename(r)}.${process.pid}.${EV(4).toString("hex")}.tmp`);Nr.writeFileSync(s,JSON.stringify(o),{mode:384}),Nr.chmodSync(s,384),Nr.renameSync(s,r),O("[browser/vault] saved session",{profile:e,file:r})}catch(r){O("[browser/vault] save failed",{profile:e,err:r})}}}});import{createHash as xV}from"node:crypto";function RV(t){return t?t.replace(/\s+/g," ").trim().slice(0,200):""}function IV(t,e,n){return`el_${xV("sha256").update(`${t}:${e}:${n}`).digest("hex").slice(0,6)}`}function CV(t){let e=t.replace(/\s+/g," ").trim(),n=4e3;return e.length<=n?e:e.slice(0,n)+"\u2026[truncated]"}function uR(t){return t.replace(/\s+/g," ").trim().toLowerCase().slice(0,100)}function fR(t,e){let n=t.role??"",r=t.name??"";pR.has(n)&&(n!=="searchbox"&&n!=="spinbutton"||r!=="")&&e.push(t);for(let s of t.children??[])fR(s,e)}async function PV(t){return t.evaluate(e=>{let n=Array.from(document.querySelectorAll(e)),r=[];for(let o of n){let s=o.getBoundingClientRect(),i=o;if(s.width===0&&s.height===0){let d=window.getComputedStyle(i);if(d.display==="none"||d.visibility==="hidden")continue}let a=o.tagName.toLowerCase(),c=o.getAttribute("aria-label")??o.getAttribute("placeholder")??(o.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a==="input"?o.type||null:o.getAttribute("type");r.push({name:c,tagName:a,type:l,id:o.id||null,testId:o.getAttribute("data-testid"),bbox:{x:Math.round(s.left),y:Math.round(s.top),w:Math.round(s.width),h:Math.round(s.height)}})}return r},mR).catch(()=>[])}async function MV(t){return t.evaluate(e=>{let n={button:"button",a:"link",input:"textbox",textarea:"textbox",select:"combobox"},r=Array.from(document.querySelectorAll(e)),o=[];for(let s of r){let i=s.tagName.toLowerCase(),a=s.getAttribute("role")??"",c=s.getAttribute("aria-label")??s.getAttribute("placeholder")??(s.textContent??"").replace(/\s+/g," ").trim().slice(0,100),l=a||(n[i]??"");if(i==="input"){let g=s.type;g==="checkbox"?l="checkbox":g==="radio"?l="radio":g==="button"||g==="submit"||g==="reset"?l="button":g==="search"?l="searchbox":l="textbox"}if(!l)continue;let d="value"in s?s.value:void 0,u=d!==void 0?String(d):void 0,p=s.disabled??!1,f=i==="input"?s.checked:void 0,m={role:l,name:c,disabled:p};u!==void 0&&(m.value=u),f!==void 0&&(m.checked=f),o.push(m)}return o},mR).catch(()=>[])}function OV(t){let n=t.accessibility;return n!==null&&typeof n=="object"?n:null}async function $d(t,e){let n=e.maxElements??80,r=e.includeHidden??!1,o=[],s=OV(t),i=s?s.snapshot({interestingOnly:!1}).catch(()=>null):Promise.resolve(null),a=PV(t),c=t.evaluate(()=>document.body?.innerText??"").catch(()=>""),l=Promise.resolve(t.url()),d=t.title().catch(()=>""),[u,p,f,m,g]=await Promise.all([i,a,c,l,d]),y,b=!1;u!==null?(y=[],fR(u,y)):(o.push("observation skipped accessibility tree (returned null)"),b=!0,y=(await MV(t)).filter(P=>pR.has(P.role??"")));let w=new Map;for(let E of p){let P=uR(E.name),H=w.get(P);(!H||H.bbox.w===0&&E.bbox.w>0)&&w.set(P,E)}let v=y.map(E=>({ax:E,dom:w.get(uR(E.name??""))})),_=r?v:v.filter(E=>E.dom?E.dom.bbox.w>0||E.dom.bbox.h>0:!0);_.sort((E,P)=>{let H=E.dom?.bbox.y??0,M=P.dom?.bbox.y??0;if(H!==M)return H-M;let N=E.dom?.bbox.x??0,$=P.dom?.bbox.x??0;return N-$}),_.length>200&&o.push("page has 200+ interactive elements; consider scoping");let A=_.slice(0,n).map((E,P)=>{let H=E.ax.role??"generic",M=E.ax.name??"",N=IV(H,M,P),$=E.dom?.bbox??{x:0,y:0,w:0,h:0},U=E.dom?.type??null,j=null;E.ax.value!==void 0&&E.ax.value!==null&&(j=String(E.ax.value)),E.ax.checked!==void 0&&(j=String(E.ax.checked)),Yx({role:H,kind:U})&&(j="[redacted]");let K={disabled:E.ax.disabled??!1};E.ax.checked!==void 0&&(K.checked=E.ax.checked===!0||E.ax.checked==="mixed"),E.ax.selected!==void 0&&(K.selected=E.ax.selected),E.ax.expanded!==void 0&&(K.expanded=E.ax.expanded);let Y;E.dom?.testId?Y=`[data-testid="${E.dom.testId}"]`:E.dom?.id&&(Y=`#${E.dom.id}`);let Ft={id:N,role:H,label:RV(M),kind:U,value:j,state:K,bbox:$};return Y!==void 0&&(Ft.selector=Y),Ft}),I="idle";try{let E=await t.evaluate(()=>document.readyState);E==="loading"?I="loading":E==="interactive"?I="navigating":I="idle"}catch{I="navigating"}I!=="idle"&&o.push("page is still loading \u2014 observation may be incomplete"),b&&!o.includes("observation skipped accessibility tree (returned null)")&&o.push("observation skipped accessibility tree (returned null)");let C=CV(f),T=`obs_${e.observationCounter.toString(36)}`,R=new Date().toISOString();return{observationId:T,url:m,title:g,textSummary:C,interactive:A,status:{httpStatus:e.httpStatus??null,loadingState:I,hasDialog:e.hasDialog??!1,consoleErrors:e.consoleErrors??0},warnings:o,screenshotPath:e.screenshotPath??null,capturedAt:R}}var pR,mR,gR=h(()=>{"use strict";Od();pR=new Set(["button","link","textbox","combobox","checkbox","radio","tab","menuitem","menuitemcheckbox","menuitemradio","switch","option","searchbox","spinbutton"]);mR="a[href], button, input, select, textarea, [role], [tabindex], label"});async function hR(t,e){try{let n=await t.nth(e).evaluate(i=>{let a=i,c=a.getAttribute("role")??a.tagName.toLowerCase(),l=a.getAttribute("aria-label")??a.getAttribute("placeholder")??(a.innerText!=null?a.innerText.trim().slice(0,200):"")??a.getAttribute("title")??"",d=a.getBoundingClientRect();return{role:c,label:l,x:Math.round(d.x),y:Math.round(d.y),w:Math.round(d.width),h:Math.round(d.height)}}),r=`${n.role}:${n.label}:${e}`,o=0;for(let i=0;i<r.length;i++)o=o*31+r.charCodeAt(i)>>>0;return{id:`el_${o.toString(16).padStart(6,"0").slice(0,6)}`,role:n.role,label:n.label,kind:null,value:null,state:{disabled:!1},bbox:{x:n.x,y:n.y,w:n.w,h:n.h}}}catch{return null}}async function iy(t,e){let n=Math.min(e,5);return(await Promise.all(Array.from({length:n},(o,s)=>hR(t,s)))).filter(o=>o!==null)}async function DV(t){let e=new Set,n=[];for(let{loc:r,count:o}of t)for(let s=0;s<o;s++){let i;try{i=await r.nth(s).evaluate(a=>{let c=a,l=c.getBoundingClientRect();return`${c.tagName}@${Math.round(l.x)},${Math.round(l.y)}`})}catch{continue}e.has(i)||(e.add(i),n.push({key:i,locator:r,index:s}))}return n}async function ay(t,e,n){switch(e.kind){case"element_id":return FV(t,e,n);case"selector":return LV(t,e);case"semantic":return NV(t,e)}}async function FV(t,e,n){let r=n.get(e.elementId);if(r===void 0)return{outcome:"not_found",query:e};if(r.selector!==void 0){let c=t.locator(r.selector);if(await c.count()===1)return{outcome:"resolved",locator:c}}let o=t.getByRole(r.role,{name:r.label,exact:!0}),s=await o.count();if(s===0)return{outcome:"not_found",query:e};if(s===1)return{outcome:"resolved",locator:o};let i=await iy(o,s);return{outcome:"ambiguous_target",query:{text:r.label,role:r.role},candidates:i}}async function LV(t,e){let n=t.locator(e.selector),r=await n.count();if(r===0)return{outcome:"not_found",query:e};if(r===1)return{outcome:"resolved",locator:n};let o=await iy(n,r);return{outcome:"ambiguous_target",query:{text:`[selector: ${e.selector}]`},candidates:o}}async function NV(t,e){return e.role!==void 0?$V(t,e.text,e.role):UV(t,e.text,e)}async function $V(t,e,n){let r=t.getByRole(n,{name:e}),o=await r.count();if(o===0)return{outcome:"not_found",query:{kind:"semantic",text:e,role:n}};if(o===1)return{outcome:"resolved",locator:r};let s=await iy(r,o);return{outcome:"ambiguous_target",query:{text:e,role:n},candidates:s}}async function UV(t,e,n){let r=t.getByRole("button",{name:e}),o=t.getByRole("link",{name:e}),s=t.getByLabel(e,{exact:!1}),[i,a,c]=await Promise.all([r.count(),o.count(),s.count()]);if(i+a+c===0)return{outcome:"not_found",query:n};let d=[];i>0&&d.push({loc:r,count:i}),a>0&&d.push({loc:o,count:a}),c>0&&d.push({loc:s,count:c});let u=await DV(d);if(u.length===0)return{outcome:"not_found",query:n};if(u.length===1){let g=u[0];return g===void 0?{outcome:"not_found",query:n}:{outcome:"resolved",locator:g.locator.nth(g.index)}}let p=u.slice(0,5),f=[];for(let g=0;g<p.length;g++){let y=p[g];if(y===void 0)continue;let b=await hR(y.locator,y.index);if(b!==null){let w=`${b.role}:${b.label}:${g}`,v=0;for(let _=0;_<w.length;_++)v=v*31+w.charCodeAt(_)>>>0;f.push({...b,id:`el_${v.toString(16).padStart(6,"0").slice(0,6)}`})}}return{outcome:"ambiguous_target",query:{text:e},candidates:f}}var yR=h(()=>{"use strict"});async function cy(t,e,n,r){let o=t.url();if(o===n)return null;let s=It(o,e);if(s.allowed)return null;try{await t.goBack()}catch{await r()}return{outcome:"blocked_by_policy",url:o,reason:s.reason}}var bR=h(()=>{"use strict";Ln()});var dy={};mo(dy,{PlaywrightProvider:()=>ly});function wR(t){switch(t.kind){case"semantic":return t.role!==void 0?`semantic('${t.text}', role='${t.role}')`:`semantic('${t.text}')`;case"element_id":return`element_id(${t.elementId})`;case"selector":return`selector(${t.selector})`}}var ly,uy=h(()=>{"use strict";dR();gR();yR();Ln();bR();ey();ly=class{name="playwright";config;launcher;sessions=new Map;constructor(e){this.config=e,this.launcher=new Nd(e)}async open(e){let n=It(e.url,this.config);if(!n.allowed)return{outcome:"blocked_by_policy",url:e.url,reason:n.reason};let{sessionId:r}=e,o=await this.launcher.ensurePage(r),s=this.ensureSessionState(r),i=null,a=null;try{await o.goto(e.url,{timeout:e.timeoutMs??3e4,waitUntil:e.waitFor??"load"})}catch(u){a=u}let c=o.url();if(!(a!==null&&(c===""||c==="about:blank"))){let u=await cy(o,this.config,e.url,()=>this.close({sessionId:r}));if(u!==null)return u}(e.screenshot===!0||a!==null)&&(i=await this.captureScreenshot(o,r,"browser_open")),s.observationCounter+=1;let d=await $d(o,{observationCounter:s.observationCounter,screenshotPath:i,consoleErrors:this.launcher.getConsoleErrorCount(r),httpStatus:this.launcher.getLastHttpStatus(r),hasDialog:this.launcher.hasOpenDialog(r)});if(this.updateSessionFromObservation(s,d.interactive,d.url,d.title,"browser_open"),a!==null)throw a;return d}async observe(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_observe: no page open for session ${n}`);let o=this.ensureSessionState(n),s=null;e.screenshot===!0&&(s=await this.captureScreenshot(r,n,"browser_observe")),o.observationCounter+=1;let i=await $d(r,{observationCounter:o.observationCounter,screenshotPath:s,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n),includeHidden:e.includeHidden,maxElements:e.maxElements});return this.updateSessionFromObservation(o,i.interactive,i.url,i.title,"browser_observe"),i}async act(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_act: no page open for session ${n}`);let o=this.ensureSessionState(n),s=r.url(),i=e.timeoutMs??3e4,a=await ay(r,e.target,o.knownElements);if(a.outcome==="not_found")throw new Error(`browser_act: target not found: ${wR(e.target)}`);if(a.outcome==="ambiguous_target")return a;let{locator:c}=a,l=null,d=async()=>{switch(e.action){case"click":await c.click({timeout:i});break;case"fill":await c.fill(e.value??"");break;case"press":await c.press(e.value??"");break;case"select":await c.selectOption(e.value??"");break;case"hover":await c.hover({timeout:i});break;case"scroll_to":await c.scrollIntoViewIfNeeded({timeout:i});break;case"wait_for":await c.waitFor({timeout:i,state:"visible"});break}};try{await d()}catch(g){if(g instanceof Error&&/navigation|net::ERR/i.test(g.message))try{await d()}catch(y){l=y}else l=g}let u=await cy(r,this.config,s,()=>this.close({sessionId:n}));if(u!==null)return u;let p=null;(e.screenshot===!0||l!==null)&&(p=await this.captureScreenshot(r,n,"browser_act")),o.observationCounter+=1;let f=await $d(r,{observationCounter:o.observationCounter,screenshotPath:p,consoleErrors:this.launcher.getConsoleErrorCount(n),httpStatus:this.launcher.getLastHttpStatus(n),hasDialog:this.launcher.hasOpenDialog(n)}),m=`browser_act:${e.action}`;if(this.updateSessionFromObservation(o,f.interactive,f.url,f.title,m),l!==null)throw l;return f}async render(e){return this.launcher.renderHtml(e.url,{timeoutMs:e.timeoutMs??3e4,waitUntil:e.waitFor??"load",signal:e.signal,requestGuard:e.requestGuard})}async screenshot(e){let{sessionId:n}=e,r=this.launcher.getPage(n);if(r===void 0)throw new Error(`browser_screenshot: no page open for session ${n}`);let o=this.ensureSessionState(n),s;if(e.target!==void 0){let d=await ay(r,e.target,o.knownElements);if(d.outcome==="not_found")throw new Error(`browser_screenshot: target not found: ${wR(e.target)}`);if(d.outcome==="ambiguous_target")throw new Error("screenshot target ambiguous; specify element_id or selector");s=await d.locator.screenshot()}else s=await r.screenshot({fullPage:e.fullPage??!1});let{path:i,bytes:a}=await Jo(n,s,"browser_screenshot"),c=0,l=0;if(e.fullPage===!0)try{let d=await r.evaluate(()=>({w:document.documentElement.scrollWidth,h:document.documentElement.scrollHeight}));c=d.w,l=d.h}catch{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}else{let d=r.viewportSize();c=d?.width??0,l=d?.height??0}return{path:i,bytes:a,width:c,height:l,dataBase64:s.toString("base64"),mediaType:"image/png"}}async extract(e){throw new Error("browser_extract not implemented in Phase 1")}async close(e){await this.launcher.closeSession(e.sessionId),this.sessions.delete(e.sessionId)}describe(e){let n=this.sessions.get(e);if(n===void 0)return null;let r=this.launcher.getPage(e);return{active:r!==void 0,url:n.currentUrl,title:n.currentTitle,lastAction:n.lastAction,lastActionAt:n.lastActionAt,openTabs:r!==void 0?1:0}}async shutdown(){this.sessions.clear(),await this.launcher.shutdown()}ensureSessionState(e){let n=this.sessions.get(e);if(n!==void 0)return n;let r={observationCounter:0,knownElements:new Map,lastAction:null,lastActionAt:null,currentUrl:null,currentTitle:null};return this.sessions.set(e,r),r}updateSessionFromObservation(e,n,r,o,s){e.knownElements=new Map(n.map(i=>[i.id,i])),e.currentUrl=r,e.currentTitle=o,e.lastAction=s,e.lastActionAt=new Date().toISOString()}async captureScreenshot(e,n,r){try{let o=await e.screenshot({fullPage:!1}),{path:s}=await Jo(n,o,r);return s}catch{return null}}}});var Ur={};mo(Ur,{__resetBrowserRegistryForTests:()=>qV,browserProviderActive:()=>HV,closeBrowserProvider:()=>fy,getBrowserProvider:()=>jV,getLastRoutingDecision:()=>KV,peekBrowserProvider:()=>WV});function SR(){Promise.resolve(fy()).then(()=>{process.exit(130)})}function kR(){Promise.resolve(fy()).then(()=>{process.exit(143)})}function vR(){Xt=null}function BV(){Ud||(process.on("SIGINT",SR),process.on("SIGTERM",kR),process.on("exit",vR),Ud=!0)}function TR(){Ud&&(process.removeListener("SIGINT",SR),process.removeListener("SIGTERM",kR),process.removeListener("exit",vR),Ud=!1)}async function jV(t){return Xt!==null?Xt:($r!==null||($r=(async()=>{let e=Vh(t),n=t?.surface??(t?.env??{}).AGENT_SURFACE??k.AGENT_SURFACE,r=await Jx({config:e,surface:n});py=r;let o;if(r.backend==="agent-browser"){let{AgentBrowserProvider:s}=await Promise.resolve().then(()=>(iR(),sR)),i=r.availability.connection;o=new s(e,i)}else{let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(uy(),dy));o=new s(e)}return BV(),Xt=o,$r=null,o})()),$r)}async function fy(){if(Xt===null)return;let t=Xt;Xt=null,$r=null,TR(),await t.shutdown()}function HV(){return Xt!==null}function WV(){return Xt}function KV(){return py}function qV(){Xt=null,$r=null,py=null,TR()}var Xt,$r,Ud,py,Br=h(()=>{"use strict";Ln();Vx();F();Xt=null,$r=null,Ud=!1,py=null});async function ER(t,e){try{return await Lx(t,e)}catch(n){return O("[web/scrape] extraction failed",{url:e,err:n}),{title:"",markdown:"",textLength:0,usedFallback:!0}}}async function YV(t,e){let{getBrowserProvider:n}=await Promise.resolve().then(()=>(Br(),Ur)),r=await n();try{return await r.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}catch(o){if(r.name==="agent-browser"){let{PlaywrightProvider:s}=await Promise.resolve().then(()=>(uy(),dy)),{loadBrowserConfig:i}=await Promise.resolve().then(()=>(Ln(),Yh)),a=i(),c=new s(a);try{return await c.render({url:t,timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:e.requestGuard})}finally{await c.shutdown()}}throw o}}async function _R(t,e){let n=e.fetchFn??globalThis.fetch,r=e.renderFn??YV,o=e.lookupFn!==void 0?{lookupFn:e.lookupFn}:{},s=null,i="",a=t,c=null,l=null;try{let u=await Fn(n,t,{headers:VV,signal:e.signal},o);c=u.status,a=u.url||t;let p=u.headers.get("content-type")??"";if(u.ok){if(JV.test(p))throw new Error(`web_scrape markdown mode received binary content (${p.split(";")[0]}). Use mode: "raw" to fetch the bytes, or a different tool.`);let f=await u.text();if(zV.test(p)&&!XV.test(p))return{title:"",markdown:f.trim(),finalUrl:a,usedRender:!1};if(i=f,s=await ER(f,a),e.signal.aborted)throw e.signal.reason??new Error("aborted")}}catch(u){if(e.signal.aborted||u instanceof Ce||u instanceof Error&&u.message.startsWith("web_scrape markdown mode received binary"))throw u;l=u}if(!(s===null||s.textLength<200)&&s!==null){let u=Gh({html:i,extractedTextLength:s.textLength});return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1,...u!==void 0?{advisory:u}:{}}}try{await ea(t,o);let u=await r(t,{timeoutMs:e.timeoutMs,signal:e.signal,requestGuard:f=>ea(f,o)});u.finalUrl!==t&&/^https?:\/\//i.test(u.finalUrl)&&await ea(u.finalUrl,o);let p=await ER(u.html,u.finalUrl);if(e.signal.aborted)throw e.signal.reason??new Error("aborted");if(s===null||p.textLength>=s.textLength){let f=Gh({html:u.html,extractedTextLength:p.textLength});return{title:p.title,markdown:p.markdown,finalUrl:u.finalUrl,usedRender:!0,...f!==void 0?{advisory:f}:{}}}}catch(u){if(e.signal.aborted||u instanceof Ce)throw u;if(s===null){let p=u instanceof Error?u.message:String(u),f=l instanceof Error?l.message:`HTTP ${c??"error"}`,m=new Error(`web_scrape could not retrieve ${t}: fetch failed (${f}) and render failed (${p}).`);throw m.cause=u,m}}if(s!==null)return{title:s.title,markdown:s.markdown,finalUrl:a,usedRender:!1};throw new Error(`web_scrape could not retrieve any content from ${t} (HTTP ${c??"error"}).`)}var XV,zV,JV,VV,AR=h(()=>{"use strict";Nx();Xh();Lr();se();XV=/(text\/html|application\/xhtml\+xml)/i,zV=/(application\/json|\/xml|\+xml|text\/|application\/(java|ecma)script|csv)/i,JV=/(image\/|audio\/|video\/|application\/pdf|application\/zip|application\/octet-stream|font\/)/i,VV={"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 agent-afk/web_scrape",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}});function e4(t){let e=t.fetchFn??globalThis.fetch;return{name:"exa",async search(n,{limit:r,signal:o}){let s=await e(QV,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json","x-api-key":t.apiKey,"User-Agent":"agent-afk/web_scrape"},body:JSON.stringify({query:n,type:"auto",numResults:Math.min(Math.max(r,1),ZV),contents:{highlights:{numSentences:3,highlightsPerUrl:1}}}),signal:o});if(!s.ok){let c="";try{let d=await s.text(),u=Q(d);u&&(c=`: ${u.length>200?u.slice(0,200)+"\u2026":u}`)}catch{}let l=s.statusText?` ${s.statusText}`:"";throw new Error(`Exa Search HTTP ${s.status}${l}${c}`)}let i;try{i=await s.json()}catch(c){throw new Error(`Exa Search response was not JSON: ${c instanceof Error?c.message:String(c)}`)}return(i.results??[]).slice(0,r).map(c=>({title:(c.title??"").trim()||"(untitled)",url:c.url??"",description:(c.highlights?.[0]??"").trim()})).filter(c=>c.url.length>0)}}}function xR(t){return t.exaApiKey!==void 0&&t.exaApiKey.trim()!==""?e4({apiKey:t.exaApiKey,fetchFn:t.fetchFn}):{error:'web_scrape search mode requires a search backend. Set EXA_API_KEY (free tier at https://exa.ai) to enable it. Use mode: "markdown" to read a known URL, or mode: "raw" for a direct fetch.'}}function RR(t,e){if(e.length===0)return`# Search results for "${t}"
|
|
329
329
|
|
|
330
330
|
(no results)`;let n=[`# Search results for "${t}"`,""];return e.forEach((r,o)=>{n.push(`## ${o+1}. ${r.title}`),r.url&&n.push(r.url),r.description&&n.push(r.description),n.push("")}),n.join(`
|
|
331
331
|
`).trimEnd()}var QV,ZV,IR=h(()=>{"use strict";et();QV="https://api.exa.ai/search",ZV=10});function Bd(t){if(t instanceof Error&&t.name==="TimeoutError")return"timeout";let e=t instanceof Error?t.message:String(t);return/Timeout\s+\d+\s*ms exceeded/i.test(e)?"timeout":void 0}var jr=h(()=>{"use strict";sy()});function i4(t){if(!t||typeof t!="object")return{error:"Invalid input: expected an object"};let e=t,n=e.mode??"markdown";if(n!=="markdown"&&n!=="raw"&&n!=="search")return{error:`Invalid input: mode must be one of "markdown", "raw", "search" (got ${JSON.stringify(n)})`};let r=n,o,s;if(r==="search"){if(typeof e.query!="string"||e.query.length===0)return{error:'Invalid input: search mode requires a non-empty "query" string'};s=e.query}else{if(typeof e.url!="string"||e.url.length===0)return{error:`Invalid input: ${r} mode requires a non-empty "url" string`};let c;try{c=new URL(e.url)}catch{return{error:`Invalid input: "${e.url}" is not a valid absolute URL`}}if(c.protocol!=="http:"&&c.protocol!=="https:")return{error:`Invalid input: protocol "${c.protocol}" not supported (http/https only)`};o=c.toString()}let i=t4;if(e.timeout_ms!==void 0){if(typeof e.timeout_ms!="number"||!Number.isFinite(e.timeout_ms)||e.timeout_ms<=0)return{error:"Invalid input: timeout_ms must be a positive finite number"};i=Math.min(e.timeout_ms,n4)}let a=r4;if(e.max_bytes!==void 0){if(typeof e.max_bytes!="number"||!Number.isFinite(e.max_bytes)||e.max_bytes<=0)return{error:"Invalid input: max_bytes must be a positive finite number"};a=Math.min(e.max_bytes,o4)}return{mode:r,url:o,query:s,timeoutMs:i,maxBytes:a}}function my(t,e){return Buffer.byteLength(t,"utf8")<=e?{content:t,truncated:!1}:{content:_t(t,e),truncated:!0}}function a4(t={}){let e=t.fetchFn??globalThis.fetch,n=t.env??process.env,r=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{};return async(o,s)=>{if(typeof e!="function")return{content:"web_scrape unavailable: global fetch() is not present in this runtime (agent-afk requires Node 20+).",isError:!0};let i=i4(o);if("error"in i)return{content:i.error,isError:!0};if(s.aborted){let u=s.reason;return{content:`web_scrape aborted: ${u instanceof Error?u.message:String(u??"aborted")}`,isError:!0}}let a=new AbortController,c=()=>{a.abort(s.reason)},l,d=()=>{let u=a.signal.reason;return u instanceof Error?u.message:String(u??"aborted")};try{if(s.addEventListener("abort",c,{once:!0}),l=setTimeout(()=>{a.abort(new Error(`web_scrape timeout after ${i.timeoutMs}ms`))},i.timeoutMs),i.url!==void 0){let p=await Fr(i.url,r);if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(!p.allowed)return{content:`web_scrape blocked: ${p.reason}`,isError:!0}}if(i.mode==="raw"){let p;try{let g={method:"GET",headers:{"User-Agent":"agent-afk/web_scrape",Accept:"*/*"},signal:a.signal};p=await Fn(e,i.url,g,r)}catch(g){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:g instanceof Ce?{content:`web_scrape blocked: ${g.message}`,isError:!0}:{content:`web_scrape network error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}if(!p.ok)return{content:`web_scrape HTTP ${p.status} ${p.statusText||""}`.trimEnd()+` for ${i.url}`,isError:!0};let f;try{f=await p.text()}catch(g){return{content:`web_scrape read error: ${g instanceof Error?g.message:String(g)}`,isError:!0}}let m=my(f,i.maxBytes);return{content:m.content,...m.truncated?{truncated:!0}:{}}}if(i.mode==="markdown")try{let p=await _R(i.url,{fetchFn:e,renderFn:t.renderFn,timeoutMs:i.timeoutMs,signal:a.signal,...t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{}});if(p.markdown.trim().length===0)return{content:`web_scrape extracted no readable content from ${i.url}.`,isError:!0};let f=my($x(p.markdown,p.advisory),i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){if(a.signal.aborted)return{content:`web_scrape aborted: ${d()}`,isError:!0};if(p instanceof Ce)return{content:`web_scrape blocked: ${p.message}`,isError:!0};let f=p instanceof Error?p.message:String(p),m=ze(p)&&!oy(f)?` (the render fallback needs the optional Playwright browser \u2014 run \`${ta()}\`)`:"";return{content:`web_scrape markdown error: ${f}${m}`,isError:!0}}let u=xR({exaApiKey:n.EXA_API_KEY,fetchFn:e});if("error"in u)return{content:u.error,isError:!0};try{let p=await u.search(i.query,{limit:s4,timeoutMs:i.timeoutMs,signal:a.signal}),f=my(RR(i.query,p),i.maxBytes);return{content:f.content,...f.truncated?{truncated:!0}:{}}}catch(p){return a.signal.aborted?{content:`web_scrape aborted: ${d()}`,isError:!0}:{content:`web_scrape search error (${u.name}): ${p instanceof Error?p.message:String(p)}`,isError:!0}}}finally{l!==void 0&&clearTimeout(l),s.removeEventListener("abort",c)}}}var t4,n4,r4,o4,s4,CR,PR=h(()=>{"use strict";AR();IR();Lr();Ht();Xh();jr();t4=3e4,n4=12e4,r4=1e5,o4=1e6,s4=10;CR=a4()});function d4(t){return c4.has(t)?"low":t==="DELETE"?"high":"medium"}function u4(t){return l4.has(t)}function m4(t){let e={};return t.forEach((n,r)=>{let o=r.toLowerCase();f4.has(o)||p4.some(s=>o.startsWith(s))||(e[r]=n)}),e}function g4(t,e){if(t==null)return{serialized:void 0,inferredContentType:void 0};let n=Object.keys(e).some(o=>o.toLowerCase()==="content-type");return typeof t=="string"?{serialized:t,inferredContentType:n?void 0:"text/plain"}:{serialized:JSON.stringify(t),inferredContentType:n?void 0:"application/json"}}function h4(t,e,n){let r=Buffer.byteLength(t,"utf8"),o=t,s=!1;if(r>n&&(o=_t(t,n),s=!0),!s&&/application\/json/i.test(e))try{return{body:JSON.parse(o),truncated:!1}}catch{}return{body:o,truncated:s}}async function DR(t){let{url:e,method:n,signal:r,domainCheck:o,recordEffect:s}=t,i=Math.min(t.maxResponseBytes??gy,hy),a={...t.headers},c=t.fetchFn??globalThis.fetch,l=t.lookupFn!==void 0?{lookupFn:t.lookupFn}:{},d=d4(n);if(o!==void 0){let T=o(e);if(!T.allowed)throw Object.assign(new Error(`web_request blocked by domain policy: ${T.reason}`),{name:"DomainPolicyError"})}let u=await Fr(e,l);if(!u.allowed)throw new Ce(u.reason);let{serialized:p,inferredContentType:f}=g4(t.body,a);f!==void 0&&(a["content-type"]=f);let m={method:n,headers:Object.keys(a).length>0?a:void 0,body:p,signal:r},y=u4(n)?{retries:2,baseDelayMs:300,maxDelayMs:5e3}:{retries:0},b=Date.now(),w;try{w=await Fn(c,e,m,{...l,retry:y})}catch(T){throw T instanceof Ce,T}let v=Date.now()-b,_=w.headers.get("content-type")??"",x;try{let T=w.body?.getReader();if(!T)x="";else{let R=[],E=0,P=i*2;for(;;){let{done:H,value:M}=await T.read();if(H||!M)break;if(R.push(M),E+=M.byteLength,E>=P){await T.cancel();break}}x=new TextDecoder().decode(Buffer.concat(R,E))}}catch{x=""}let{body:A,truncated:I}=h4(x,_,i),C=m4(w.headers);return s!==void 0&&Promise.resolve(s({url:e,method:n,status:w.status,risk:d,timing_ms:v})).catch(()=>{}),{status:w.status,headers:C,body:A,truncated:I,timing_ms:v,risk:d}}function FR(t){if(typeof t!="string"||t.trim().length===0)return{error:"method must be a non-empty string (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)"};let e=t.trim().toUpperCase(),n=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"];return n.includes(e)?e:{error:`method "${t}" is not supported \u2014 must be one of: ${n.join(", ")}`}}var MR,OR,gy,hy,c4,l4,p4,f4,LR=h(()=>{"use strict";Lr();Ht();MR=3e4,OR=12e4,gy=1e5,hy=1e6,c4=new Set(["GET","HEAD","OPTIONS"]),l4=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]);p4=["set-cookie","x-"],f4=new Set(["server","via","age","vary","authorization","www-authenticate"])});function y4(t){if(!t||typeof t!="object")return{error:"Invalid input: expected an object"};let e=t;if(typeof e.url!="string"||e.url.length===0)return{error:'Invalid input: "url" must be a non-empty string'};let n;try{n=new URL(e.url)}catch{return{error:`Invalid input: "${e.url}" is not a valid absolute URL`}}if(n.protocol!=="http:"&&n.protocol!=="https:")return{error:`Invalid input: protocol "${n.protocol}" not supported (http/https only)`};n.username="",n.password="";let r=n.toString(),o=FR(e.method);if(typeof o=="object"&&"error"in o)return{error:`Invalid input: ${o.error}`};let s=o,i;if(e.body!==void 0&&e.body!==null){if(typeof e.body!="string"&&typeof e.body!="object")return{error:'Invalid input: "body" must be a string, object, or array'};i=e.body}let a={};if(e.headers!==void 0){if(typeof e.headers!="object"||e.headers===null||Array.isArray(e.headers))return{error:'Invalid input: "headers" must be a string-keyed object'};let u=e.headers;for(let[p,f]of Object.entries(u)){if(typeof f!="string")return{error:`Invalid input: header value for "${p}" must be a string`};a[p]=f}}let c=MR;if(e.timeout_ms!==void 0){if(typeof e.timeout_ms!="number"||!Number.isFinite(e.timeout_ms)||e.timeout_ms<=0)return{error:'Invalid input: "timeout_ms" must be a positive finite number'};c=Math.min(e.timeout_ms,OR)}let l=gy;if(e.max_response_bytes!==void 0){if(typeof e.max_response_bytes!="number"||!Number.isFinite(e.max_response_bytes)||e.max_response_bytes<=0)return{error:'Invalid input: "max_response_bytes" must be a positive finite number'};l=Math.min(e.max_response_bytes,hy)}let d;if(e.credential!==void 0){if(typeof e.credential!="string"||e.credential.length===0)return{error:'Invalid input: "credential" must be a non-empty string (an env var name)'};d=e.credential}return{url:r,method:s,body:i,headers:a,timeoutMs:c,maxResponseBytes:l,credential:d}}function b4(t={}){let e=t.fetchFn??globalThis.fetch,n=t.env??process.env;async function r(){if(t.domainCheck!==void 0)return t.domainCheck;try{let{loadBrowserConfig:o,enforceDomainPolicy:s}=await Promise.resolve().then(()=>(Ln(),Yh)),i=o();return a=>s(a,i)}catch{return}}return async(o,s)=>{if(typeof e!="function")return{content:"web_request unavailable: global fetch() is not present (agent-afk requires Node 20+).",isError:!0};let i=y4(o);if("error"in i)return{content:i.error,isError:!0};if(s.aborted){let p=s.reason;return{content:`web_request aborted: ${p instanceof Error?p.message:String(p??"aborted")}`,isError:!0}}let a={...i.headers};if(i.credential!==void 0){let p=n[i.credential];if(p===void 0||p.trim().length===0)return{content:`web_request credential error: environment variable "${i.credential}" is not set. Set it in afk.env or export it in the shell before starting AFK.`,isError:!0};if(Object.keys(a).some(m=>m.toLowerCase()==="authorization"))return{content:'web_request credential error: both "credential" and an explicit Authorization header were provided. Use one or the other.',isError:!0};a.Authorization=`Bearer ${p}`}let c=new AbortController,l=()=>c.abort(s.reason),d,u=()=>{let p=c.signal.reason;return p instanceof Error?p.message:String(p??"aborted")};try{s.addEventListener("abort",l,{once:!0}),d=setTimeout(()=>{c.abort(new Error(`web_request timeout after ${i.timeoutMs}ms`))},i.timeoutMs);let p=await r(),f={url:i.url,method:i.method,body:i.body,headers:a,maxResponseBytes:i.maxResponseBytes,signal:c.signal,fetchFn:e,lookupFn:t.lookupFn,domainCheck:p,recordEffect:t.recordEffect},m;try{m=await DR(f)}catch(w){if(c.signal.aborted)return{content:`web_request aborted: ${u()}`,isError:!0};if(w instanceof Ce)return{content:`web_request blocked: ${w.message}`,isError:!0};let v=w instanceof Error&&w.name==="DomainPolicyError"?"blocked":"network error",_=w instanceof Error?w.message:String(w);return{content:`web_request ${v}: ${_}`,isError:!0}}if(c.signal.aborted)return{content:`web_request aborted: ${u()}`,isError:!0};let g=m.body;if(typeof g=="string")g=qe(g);else if(typeof g=="object"&&g!==null){let w=qe(JSON.stringify(g));try{g=JSON.parse(w)}catch{g=w}}let y={status:m.status,headers:m.headers,body:g,timing_ms:m.timing_ms,...m.truncated?{truncated:!0}:{}};return{content:JSON.stringify(y,null,2),...m.truncated?{truncated:!0}:{}}}finally{d!==void 0&&clearTimeout(d),s.removeEventListener("abort",l)}}}var NR,$R=h(()=>{"use strict";LR();Lr();vn();NR=b4()});import{existsSync as BR,mkdirSync as w4,readFileSync as S4,renameSync as k4,unlinkSync as v4,writeFileSync as T4}from"node:fs";import{dirname as UR,join as E4}from"node:path";import{randomBytes as _4}from"node:crypto";function Hr(t){let e=t??Om();if(!BR(e))return[];try{let n=S4(e,"utf-8");return JSON.parse(n)}catch(n){let r=n instanceof Error?n.message:String(n);return console.error(`[schedule-store] failed to parse ${e}: ${r}`),[]}}function na(t,e){let n=e??Om();w4(UR(n),{recursive:!0});let r=E4(UR(n),`.schedules.json.${process.pid}.${_4(4).toString("hex")}.tmp`),o=JSON.stringify(t,null,2);try{T4(r,o,"utf-8"),k4(r,n)}catch(s){try{BR(r)&&v4(r)}catch{}throw s}}function jR(t,e){let n=Hr(e),r=n.map(c=>c.id),o=A4(t.name),s=x4(o,r),i=new Date().toISOString(),a={...t,notifyOn:t.notifyOn??"failure",id:s,createdAt:i,updatedAt:i};return n.push(a),na(n,e),a}function HR(t,e){let n=Hr(e),r=n.length,o=n.filter(s=>s.id!==t);return o.length===r?!1:(na(o,e),!0)}function WR(t,e){return Hr(e).find(n=>n.id===t)}function A4(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/-{2,}/g,"-").replace(/^-+|-+$/g,"")}function x4(t,e){if(!e.includes(t))return t;let n=2;for(;e.includes(`${t}-${n}`);)n+=1;return`${t}-${n}`}function KR(t){return{taskId:t.id,command:t.command,trigger:t.trigger??"cron",...t.cron!==void 0?{cronExpression:t.cron}:{},...t.notifyOn!==void 0?{notifyOn:t.notifyOn}:{},...t.notifyChat!==void 0?{notifyChat:t.notifyChat}:{}}}var qR=h(()=>{"use strict";B()});import{existsSync as R4,readFileSync as I4}from"node:fs";import{join as C4}from"node:path";async function Vo(t,e,n){let r,o;try{let s=C4(Iv("default"),"port");if(!R4(s))return{synced:!1,detail:"daemon-not-detected (no port file)"};let i=I4(s,"utf-8").trim(),a=P4(i);if(!a)return{synced:!1,detail:"daemon-not-detected (invalid port file)"};({host:r,port:o}=a)}catch{return{synced:!1,detail:"daemon-not-detected (unreadable port file)"}}try{let s=r.includes(":")?`[${r}]`:r,i=await fetch(`http://${s}:${o}${e}`,{method:t,headers:{"Content-Type":"application/json"},body:n!==void 0?JSON.stringify(n):void 0,signal:AbortSignal.timeout(2e3)});return i.ok?{synced:!0,detail:"synced"}:t==="POST"&&i.status===409?{synced:!0,detail:"already-registered"}:t==="DELETE"&&i.status===404?{synced:!0,detail:"not-registered"}:{synced:!1,detail:`daemon-rejected (HTTP ${i.status})`}}catch{return{synced:!1,detail:"daemon-unreachable (stale port file or network error)"}}}function P4(t){let e=parseInt(t,10);if(String(e)===t&&!Number.isNaN(e))return e<1||e>65535?null:{host:"localhost",port:e};let n=t.lastIndexOf(":");if(n<1)return null;let r=t.slice(0,n),o=t.slice(n+1);if(!/^\d+$/.test(o))return null;let s=parseInt(o,10);return Number.isNaN(s)||s<1||s>65535||/^:+$/.test(r)?null:{host:r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r,port:s}}var yy,GR=h(()=>{"use strict";B();yy="Change saved to schedules.json, but a running daemon (if any) did not pick it up \u2014 it will apply on the next daemon (re)start."});import{existsSync as M4}from"node:fs";import{readFile as O4}from"node:fs/promises";var XR,zR,JR,VR,YR=h(()=>{"use strict";qR();B();GR();XR=async(t,e)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected object",isError:!0};let n=t;if(typeof n.name!="string"||!n.name)return{content:"Invalid input: name required",isError:!0};if(typeof n.command!="string"||!n.command)return{content:"Invalid input: command required",isError:!0};if(typeof n.cron!="string"||!n.cron)return{content:"Invalid input: cron required",isError:!0};let r=n.cron.trim().split(/\s+/);if(r.length!==5&&r.length!==6)return{content:"Invalid input: cron must be a 5 or 6-field expression",isError:!0};let o=n.notifyChat;if(o!==void 0&&typeof o!="number"&&typeof o!="string")return{content:"Invalid input: notifyChat must be a number (chat id) or string (chat id or alias name)",isError:!0};let s=jR({name:n.name,command:n.command,cron:n.cron,trigger:n.trigger??"cron",notifyOn:n.notifyOn,...o!==void 0?{notifyChat:o}:{},enabled:typeof n.enabled=="boolean"?n.enabled:!0}),i=s.enabled?await Vo("POST","/tasks",{taskId:s.id,command:s.command,cron:s.cron,trigger:s.trigger,notifyOn:s.notifyOn,...s.notifyChat!==void 0?{notifyChat:s.notifyChat}:{}}):await Vo("DELETE",`/tasks/${s.id}`);return{content:JSON.stringify({id:s.id,name:s.name,cron:s.cron,enabled:s.enabled,daemonSynced:i.synced,syncDetail:i.detail,...i.synced?{}:{syncNote:yy}})}},zR=async(t,e)=>{let n=Hr();return{content:JSON.stringify(n.map(r=>({id:r.id,name:r.name,cron:r.cron,trigger:r.trigger,enabled:r.enabled,notifyOn:r.notifyOn})))}},JR=async(t,e)=>{if(!t||typeof t!="object")return{content:"Invalid input: expected object",isError:!0};let n=t;if(typeof n.taskId!="string"||!n.taskId)return{content:"Invalid input: taskId required",isError:!0};let r=n.taskId,o=typeof n.limit=="number"?Math.min(Math.max(1,n.limit),50):10,s=Bc();if(!M4(s))return{content:JSON.stringify([])};let i;try{let l=await O4(s);i=(l.length>1048576?l.subarray(l.length-1048576):l).toString("utf-8")}catch{return{content:JSON.stringify([])}}let a=i.split(`
|
|
@@ -343,7 +343,7 @@ ${gt(t,{headless:e,latched:n})}`,{cause:t})}var cR,SV,kV,aR,TV,sy=h(()=>{"use st
|
|
|
343
343
|
?`,"m");if(!r.test(n))return!1;let o=n.replace(r,"");return Vd(t,o,384),!0}function EI(t,e){if(!sa(t))return;let r=Jd(t,"utf-8").match(new RegExp(`^${Pe(e)}=(.*)$`,"m"));return r?r[1]:void 0}function _I(t){let e={};if(!sa(t))return e;let n=Jd(t,"utf-8");for(let r of n.split(`
|
|
344
344
|
`)){let o=r.trim();if(!o||o.startsWith("#"))continue;let s=o.indexOf("=");if(s<=0)continue;let i=o.slice(0,s).trim(),a=o.slice(s+1);e[i]=a}return e}var My=h(()=>{"use strict";Kr()});function Yd(t){let e=ti(t);return e?M5.has(t)?"non-config":e.secret?"secret":O5.has(t)||t.endsWith("_BASE_URL")?"protected":"settable":"unknown"}function AI(t,e=D5,n=F5){let r=t.trim().toLowerCase();if(e.includes(r))return!0;if(n.includes(r))return!1}function xI(t){let e=typeof t=="number"?t:Number(t);return Number.isFinite(e)?e:void 0}function RI(t,e){if(e.includes(`
|
|
345
345
|
`))return{ok:!1,error:`value for ${t.name} must not contain newlines`};switch(t.type){case"number":return xI(e)===void 0?{ok:!1,error:`${t.name} expects a number, got ${JSON.stringify(e)}`}:{ok:!0,value:e.trim()};case"boolean":{let n=e.trim().toLowerCase();return AI(n)===void 0?{ok:!1,error:`${t.name} expects a boolean (true/false/1/0/yes/no/on/off), got ${JSON.stringify(e)}`}:{ok:!0,value:n}}case"json":{try{JSON.parse(e)}catch{return{ok:!1,error:`${t.name} expects valid JSON`}}return{ok:!0,value:e}}default:return{ok:!0,value:e}}}function CI(t){return II.get(t)}function Oy(t){let e=II.get(t);return e?e.tier:"unknown"}function PI(t,e){switch(t.type){case"boolean":{if(typeof e=="boolean")return{ok:!0,value:e};if(typeof e=="string"){let n=AI(e);if(n!==void 0)return{ok:!0,value:n}}return{ok:!1,error:`${t.path} expects a boolean`}}case"number":{let n=typeof e=="number"||typeof e=="string"?xI(e):void 0;return n===void 0?{ok:!1,error:`${t.path} expects a number`}:t.clamp?t.clamp.integer&&!Number.isInteger(n)?{ok:!1,error:`${t.path} expects an integer`}:{ok:!0,value:Math.min(t.clamp.max,Math.max(t.clamp.min,n))}:{ok:!0,value:n}}case"enum":return typeof e=="string"&&t.enumValues?.includes(e)?{ok:!0,value:e}:{ok:!1,error:`${t.path} expects one of: ${t.enumValues?.join(", ")}`};case"number-array":{let n;if(Array.isArray(e))n=e;else if(typeof e=="string")n=e.split(",").map(o=>o.trim()).filter(o=>o.length>0).map(o=>Number(o));else return{ok:!1,error:`${t.path} expects an array of numbers`};let r=[];for(let o of n){let s=typeof o=="number"?o:Number(o);if(!Number.isFinite(s))return{ok:!1,error:`${t.path} contains a non-number`};r.push(s)}return{ok:!0,value:r}}case"model-slot":{if(typeof e=="string")return e.trim().length===0?{ok:!1,error:`${t.path} must not be empty`}:{ok:!0,value:e.trim()};let n=aE(e);return n.ok?{ok:!0,value:n.value}:{ok:!1,error:`${t.path}: ${n.error}`}}default:return typeof e!="string"?{ok:!1,error:`${t.path} expects a string`}:e.trim().length===0?{ok:!1,error:`${t.path} must not be empty`}:{ok:!0,value:e}}}function MI(t,e){let n=t;for(let r of e.split(".")){if(n===null||typeof n!="object")return;n=n[r]}return n}function OI(t,e,n){let r=e.split("."),o=t;for(let s=0;s<r.length-1;s++){let i=r[s],a=o[i];(a===null||typeof a!="object"||Array.isArray(a))&&(o[i]={}),o=o[i]}o[r[r.length-1]]=n}function DI(t,e){let n=e.split("."),r=[t],o=t;for(let i=0;i<n.length-1;i++){let a=n[i],c=o[a];if(c===null||typeof c!="object"||Array.isArray(c))return!1;o=c,r.push(o)}let s=n[n.length-1];if(!(s in o))return!1;delete o[s];for(let i=r.length-1;i>=1;i--){let a=r[i];if(Object.keys(a).length===0){let c=n[i-1];delete r[i-1][c]}else break}return!0}var M5,O5,D5,F5,L5,II,FI=h(()=>{"use strict";F();Fe();M5=new Set(["HOME","PATH","SHELL","PAGER","NODE_ENV","CI","VITEST","DEBUG","FORCE_COLOR","NO_COLOR","AGENT_SURFACE","AFK_SESSION_ID","NO_UPDATE_NOTIFIER","SCRIPT","ASCIINEMA_REC"]),O5=new Set(["AFK_MODEL_SMALL_BASE_URL","AFK_MODEL_MEDIUM_BASE_URL","AFK_MODEL_LARGE_BASE_URL","AFK_LOCAL_BASE_URL","AFK_OPENAI_BASE_URL","AFK_SYSTEM_PROMPT","AFK_DAEMON_TASK","AFK_DAEMON_TASK_ID","AFK_DAEMON_CWD","AFK_DAEMON_HOST","AFK_BROWSER_ALLOWED_DOMAINS","AFK_BROWSER_BLOCKED_DOMAINS","AFK_BROWSER_CONFIG","AFK_ALLOW_PROJECT_MCP","AFK_INTERNAL","AFK_WORKTREE_BASE","AFK_WORKTREE_BRANCH_PREFIX","AFK_WORKTREE_ON_EXIT","AFK_TELEGRAM_ALLOWED_CHAT_IDS","AFK_TELEGRAM_TAG_ONLY_CHAT_IDS","AFK_TELEGRAM_NOTIFY_MODE","AFK_TELEGRAM_PRIMARY_CHAT_ID","AFK_HOME","AFK_STATE_DIR","AFK_FRAMEWORK_DIR","TELEGRAM_DATA_DIR","AFK_TELEGRAM_CWD"]);D5=["true","1","yes","on"],F5=["false","0","no","off"];L5=[{path:"model",tier:"agent",type:"string",description:"Default model id / alias."},{path:"models.local",tier:"agent",type:"model-slot",description:"Local-tier model id (OpenAI-compatible shim: Ollama, LM Studio, vLLM, MLX). Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth \u2014 chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here)."},{path:"models.small",tier:"agent",type:"model-slot",description:"Small-tier model id. Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth \u2014 chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here)."},{path:"models.medium",tier:"agent",type:"model-slot",description:"Medium-tier model id. Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth \u2014 chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here)."},{path:"models.large",tier:"agent",type:"model-slot",description:"Large-tier model id. Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth \u2014 chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here)."},{path:"maxTokens",tier:"agent",type:"number",clamp:{min:1,max:1e6,integer:!0},description:"Deprecated and inert: not read by the generation path. Use AFK_MAX_OUTPUT_TOKENS or --max-output-tokens to cap per-response output."},{path:"temperature",tier:"agent",type:"number",clamp:{min:0,max:2},description:"Sampling temperature."},{path:"autoRouting.interactive",tier:"agent",type:"boolean",description:"Auto-route model in the REPL."},{path:"autoRouting.chat",tier:"agent",type:"boolean",description:"Auto-route model for chat."},{path:"autoRouting.telegram",tier:"agent",type:"boolean",description:"Auto-route model for Telegram."},{path:"autoRouting.daemon",tier:"agent",type:"boolean",description:"Auto-route model for the daemon."},{path:"telegram.notify.mode",tier:"human",type:"enum",enumValues:["primary","broadcast","custom"],description:"Telegram notify routing mode (human-tier: notification-redirect vector)."},{path:"telegram.notify.primaryChatId",tier:"human",type:"number",clamp:{min:-1e15,max:1e15,integer:!0},description:"Primary Telegram chat id (human-tier: notification-redirect vector)."},{path:"telegram.notify.targets",tier:"human",type:"number-array",description:"Custom Telegram target chat ids (human-tier: notification-redirect vector)."},{path:"telegram.tagOnlyChats",tier:"human",type:"number-array",description:"Chat ids where the bot answers only when addressed (reply to the bot, @mention, or text_mention resolving to the bot). Human-tier: it governs which chats the bot will respond in \u2014 a message-routing / who-can-drive-the-bot control, same class as the allowlist and telegram.notify.*. Requires Telegram privacy mode OFF for the bot to matter in groups."},{path:"telegram.verifyDone",tier:"human",type:"boolean",description:`Opt-in AFK "Done" verification gate (human-tier: a self-honesty check on the agent's own completion reporting \u2014 the agent must not be able to disable it on its own config, same rationale as enableShellHooks/permissionMode).`},{path:"enforceDoneEvidence",tier:"human",type:"boolean",description:'Opt-in AFK terminal-state enforcement gate: in autonomous mode a turn that self-certifies "Done" with no corroborating evidence (a successful file write/edit or executed command) gets a framework correction injected into the next turn, which must substantiate or downgrade the claim (issue #237). Human-tier: a self-honesty check the agent must not be able to disable on its own config, same rationale as telegram.verifyDone. Sibling of telegram.verifyDone (which only relabels the Telegram push; this one bounces the turn).'},{path:"interactive.worktreeAutoname",tier:"agent",type:"boolean",description:"Auto-name worktrees."},{path:"interactive.suggestGhost",tier:"agent",type:"boolean",description:"Ghost-text suggestions in the REPL."},{path:"interactive.thinkingUi",tier:"agent",type:"enum",enumValues:["summary","live","digest","off"],description:"Default REPL thinking-display mode."},{path:"theme",tier:"agent",type:"enum",enumValues:["dark","light","umber","auto"],description:"TUI color palette (dark | light | umber | auto). Display-only; auto detects a light/dark background from the terminal and falls back to dark. umber matches the Umber terminal and is dark-only, so auto never selects it."},{path:"updatePolicy",tier:"human",type:"enum",enumValues:["notify","auto","off"],description:"Self-update policy (human-tier: auto self-update is scope-widening)."},{path:"autoResumeOnUsageLimit",tier:"agent",type:"boolean",description:"Auto-resume after a usage-limit pause."},{path:"bgSummaries",tier:"agent",type:"boolean",description:"Background summarisation."},{path:"maxSummaryCallsPerSession",tier:"agent",type:"number",clamp:{min:1,max:500,integer:!0},description:"Cap on summary calls per session."},{path:"systemPrompt",tier:"human",type:"string",description:"Operator system-prompt overlay."},{path:"permissionMode",tier:"human",type:"enum",enumValues:["default","plan","autonomous","bypassPermissions"],description:"Session permission mode for afk chat/interactive (human-tier: privilege-escalation vector). Unset \u2192 bypassPermissions (new-install default); set `default` to re-enable path containment + the approval prompt."},{path:"enableShellHooks",tier:"human",type:"boolean",description:"Enable shell hooks (trust gate)."},{path:"enablePluginHooks",tier:"human",type:"boolean",description:"Enable Claude Code plugin-contributed hooks (trust gate for third-party plugin hooks.json; independent of enableShellHooks)."},{path:"interactive.worktreeBranchPrefix",tier:"human",type:"string",description:"Worktree branch prefix (git-flag sensitive)."},{path:"interactive.worktreeBase",tier:"human",type:"string",description:"Worktree base ref (git-flag sensitive)."},{path:"interactive.worktreeOnExit",tier:"human",type:"enum",enumValues:["ask","keep","remove"],description:"Clean-worktree quit policy (ask | keep | remove)."},{path:"daemon.task",tier:"human",type:"string",description:"Daemon task prompt."},{path:"daemon.taskId",tier:"human",type:"string",description:"Daemon task id."},{path:"daemon.verifyDone",tier:"human",type:"boolean",description:`Opt-in daemon-surface "Done" verification gate: a cron-tick completion push whose response self-certifies "Done" with no corroborating evidence (a successful file write/edit or executed command) is relabelled "\u26A0\uFE0F Done (unverified)" with a caveat line. The daemon analog of telegram.verifyDone (which is REPL-only); the daemon is single-turn-per-tick, so the only honest enforcement is relabelling the outgoing push rather than bouncing a next turn. Human-tier: a self-honesty check on the agent's own completion reporting \u2014 the agent must not be able to disable it on its own config, same rationale as telegram.verifyDone.`}],II=new Map(L5.map(t=>[t.path,t]))});import{existsSync as LI,readFileSync as N5,copyFileSync as $5,chmodSync as U5}from"fs";function $y(t){return t===void 0||t.length===0?"<unset>":t.length<=4?"set (****)":`set (****${t.slice(-4)})`}function eu(t){return t?.filePath??ar()}function NI(t,e,n){let r=Yd(t);if(r==="unknown")throw new ia(t);if(r==="non-config")throw new Dy(t);if(r==="secret"&&!e)throw new Fy(t);if(r==="protected"&&!n)throw new Ly(t);return r}function $I(t,e,n){let r=NI(t,n?.allowSecret,n?.allowProtected),o=ti(t),s=RI(o,e);if(!s.ok)throw new Qd(s.error);let i=eu(n);return Py(i,t,s.value),{key:t,class:r,persistedTo:i,display:r==="secret"?$y(s.value):s.value}}function UI(t,e){let n=NI(t,e?.allowSecret,e?.allowProtected),r=eu(e),o=TI(r,t);return{key:t,class:n,removed:o,persistedTo:r}}function BI(t,e){let n=Yd(t);if(n==="unknown")throw new ia(t);let r=eu(e),o=EI(r,t),s=$c(t),i=n==="secret"?o!==void 0?$y(o):void 0:o;return{key:t,class:n,persisted:i,activeInProcess:s}}function jI(t){let e=eu(t),n=_I(e),r=[];for(let o of ni){let s=o.name,i=Yd(s),a=n[s],c=$c(s);if(!t?.all&&a===void 0&&!c)continue;let l=i==="secret"?a!==void 0?$y(a):void 0:a;r.push({key:s,class:i,persisted:l,activeInProcess:c})}return r}function tu(t){return t?.filePath??on()}function nu(t){if(!LI(t))return{};let e;try{e=JSON.parse(N5(t,"utf-8"))}catch{throw new Zd(t)}if(e===null||typeof e!="object"||Array.isArray(e))throw new Zd(t);return e}function HI(t,e){if(LI(t))try{$5(t,`${t}.bak`),U5(`${t}.bak`,384)}catch{}Vd(t,JSON.stringify(e,null,2)+`
|
|
346
|
-
`,384)}function WI(t,e){let n=Oy(t);if(n==="unknown")throw new ia(t);if(n==="human"&&!e)throw new Ny(t);return n}function KI(t,e,n){let r=WI(t,n?.allowHumanOnly),o=CI(t),s=PI(o,e);if(!s.ok)throw new Qd(s.error);let i=tu(n),a=nu(i);return OI(a,t,s.value),HI(i,a),{path:t,class:r,value:s.value,persistedTo:i}}function qI(t,e){let n=WI(t,e?.allowHumanOnly),r=tu(e),o=nu(r),s=DI(o,t);return s&&HI(r,o),{path:t,class:n,removed:s,persistedTo:r}}function GI(t,e){let n=Oy(t),r=tu(e),o=nu(r);return{path:t,class:n,value:MI(o,t)}}function XI(t){return nu(tu(t))}var aa,ia,Dy,Fy,Ly,Ny,Qd,Zd,zI=h(()=>{"use strict";B();F();My();FI();aa="effective on the next session/daemon restart; the current session is unchanged",ia=class extends Error{constructor(e){super(`unknown config key: ${e}`),this.name="UnknownKeyError"}},Dy=class extends Error{constructor(e){super(`${e} is a process/inherited env var and is not afk-configurable`),this.name="NonConfigKeyError"}},Fy=class extends Error{constructor(e){super(`${e} holds a credential; the agent cannot set it. A human must run \`afk config env set ${e}\` (the value is entered masked and never enters the model context).`),this.name="SecretWriteRefused"}},Ly=class extends Error{constructor(e){super(`${e} controls identity, safety, capability, autonomous runs, request routing, or where AFK's own state lives; the agent cannot set it. A human must run \`afk config env set ${e}\`.`),this.name="ProtectedEnvKeyRefused"}},Ny=class extends Error{constructor(e){super(`${e} is human-gated (prompt/hooks/identity); the agent cannot set it. A human must run \`afk config set ${e}\`.`),this.name="HumanOnlyKeyRefused"}},Qd=class extends Error{constructor(e){super(e),this.name="ConfigValidationError"}},Zd=class extends Error{constructor(e){super(`refusing to write: existing ${e} is not valid JSON (fix or remove it by hand first)`),this.name="MalformedConfigError"}}});function JI(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function VI(t){return t==="env"||t==="config"?t:void 0}function dn(t){return{content:t,isError:!0}}var YI,QI,ZI=h(()=>{"use strict";zI();YI=async t=>{let e=JI(t);if(!e)return dn("config_get: expected an object input");let n=VI(e.target);if(!n)return dn("config_get: `target` must be 'env' or 'config'");let r=typeof e.key=="string"?e.key:void 0,o=e.all===!0;try{if(n==="env"){if(r){let s=BI(r);return{content:JSON.stringify(s,null,2)}}return{content:JSON.stringify(jI({all:o}),null,2)}}if(r){let s=GI(r);return{content:JSON.stringify(s,null,2)}}return{content:JSON.stringify(XI(),null,2)}}catch(s){return dn(`config_get: ${s.message}`)}},QI=async t=>{let e=JI(t);if(!e)return dn("config_set: expected an object input");let n=VI(e.target);if(!n)return dn("config_set: `target` must be 'env' or 'config'");let r=typeof e.key=="string"?e.key:void 0;if(!r)return dn("config_set: `key` is required");let o=e.action==="unset"?"unset":"set",s=e.value;try{if(o==="unset"){if(n==="env"){let c=UI(r);return{content:c.removed?`Removed ${c.key} from afk.env (${c.persistedTo}). ${aa}.`:`${c.key} was not set in afk.env; nothing to remove.`}}let a=qI(r);return{content:a.removed?`Removed ${a.path} from afk.config.json (${a.persistedTo}). ${aa}.`:`${a.path} was not set in afk.config.json; nothing to remove.`}}if(s==null)return dn(`config_set: \`value\` is required to set ${r}`);if(n==="env"){if(typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")return dn("config_set: env values must be a string, number, or boolean");let a=$I(r,String(s));return{content:`Set ${a.key} = ${a.display} in afk.env (${a.persistedTo}). ${aa}.`}}let i=KI(r,s);return{content:`Set ${i.path} = ${JSON.stringify(i.value)} in afk.config.json (${i.persistedTo}). ${aa}.`}}catch(i){return dn(`config_set: ${i.message}`)}}});function qr(t,e){return t.length>e?`${t.slice(0,e)}\u2026 [truncated]`:t}function Uy(t){switch(t.type){case"message":return t.message.role!=="assistant"||!t.message.content?null:{kind:"assistant",text:qr(t.message.content,8e3)};case"chunk":{let e=t.chunk;return e.type==="tool_use_detail"?e.pending?null:{kind:"tool",toolName:e.toolName,toolUseId:e.toolUseId,input:qr(e.toolInput,400)}:e.type==="tool_result"?e.isError===!0?{kind:"tool_error",content:qr(e.content,400),...e.metadata?.toolName!==void 0?{toolName:String(e.metadata.toolName)}:{}}:{kind:"tool_result",toolUseId:e.toolUseId,content:qr(e.content,400),...typeof e.durationMs=="number"?{durationMs:e.durationMs}:{},...e.metadata?.toolName!==void 0?{toolName:String(e.metadata.toolName)}:{}}:e.type==="thinking"?{kind:"thinking",text:qr(e.content,8e3)}:null}case"done":{let e=t.metadata,n=e?.totalCostUsd,r=e?.durationMs,o=e?.usage,s=typeof o?.input_tokens=="number"?o.input_tokens:void 0,i=typeof o?.output_tokens=="number"?o.output_tokens:void 0,a=typeof o?.cache_read_input_tokens=="number"?o.cache_read_input_tokens:void 0,c=typeof e?.stopReason=="string"?e.stopReason:void 0;return{kind:"done",...typeof n=="number"?{costUsd:n}:{},...typeof r=="number"?{durationMs:r}:{},...s!==void 0?{inputTokens:s}:{},...i!==void 0?{outputTokens:i}:{},...a!==void 0?{cacheReadTokens:a}:{},...c!==void 0?{stopReason:c}:{}}}case"error":return{kind:"error",message:t.error.message};case"paused":return{kind:"paused",...t.resetsAt?{resetsAt:t.resetsAt.toISOString()}:{}};case"resumed":return{kind:"resumed"};case"notice":return null;case"tool-activity":return{kind:"tool_activity",activeCount:t.activeCount,activeToolUseIds:t.activeToolUseIds};case"rate_limit":return{kind:"rate_limit",...typeof t.retryAfterMs=="number"?{retryAfterMs:t.retryAfterMs}:{}};case"progress":return{kind:"progress",message:t.progress.summary??t.progress.description};case"subagent_lifecycle":return{kind:"subagent_lifecycle",subagentId:t.subagentId,status:t.status,...t.model!==void 0?{model:t.model}:{},...t.agentType!==void 0?{agentType:t.agentType}:{},...t.durationMs!==void 0?{durationMs:t.durationMs}:{},...t.totalCostUsd!==void 0?{totalCostUsd:t.totalCostUsd}:{},...t.outputBytes!==void 0?{outputBytes:t.outputBytes}:{},...t.errorClass!==void 0?{errorClass:t.errorClass}:{},...t.errorMessage!==void 0?{errorMessage:t.errorMessage}:{},...t.promptHead!==void 0?{promptHead:t.promptHead}:{}};case"background_job":return{kind:"background_job",jobId:t.jobId,status:t.status,...t.label!==void 0?{label:t.label}:{}};case"plan_mode":return{kind:"plan_mode",mode:t.mode};default:return null}}var By=h(()=>{"use strict"});import*as eC from"node:fs";import*as Gr from"node:fs/promises";import*as tC from"node:readline";function nC(t){let e=t.trim();if(!e)return null;try{let n=JSON.parse(e);return n.v!==1||typeof n.ts!="number"||typeof n.kind!="string"?null:n}catch{return null}}async function ca(t){if(!lr(t))return!1;try{return await Gr.access(So(t)),!0}catch{return!1}}async function*jy(t){if(!lr(t))return;let e;try{e=await Gr.open(So(t),"r")}catch(n){if(n.code==="ENOENT")return;throw n}try{let n=tC.createInterface({input:e.createReadStream({encoding:"utf8"}),crlfDelay:1/0});for await(let r of n){let o=nC(r);o&&(yield o)}}finally{await e.close()}}async function*Hy(t,e){if(!lr(t))return;let n=So(t),r=wo(t),{fromStart:o=!1,signal:s}=e??{},i=0,a="",c=!1;async function*l(){let f=null;try{f=await Gr.open(n,"r");let m=await f.stat();if(m.size<=i)return;let g=m.size-i,y=Buffer.allocUnsafe(g),{bytesRead:b}=await f.read(y,0,g,i);if(b===0)return;i+=b,a+=y.toString("utf8",0,b);let w=a.split(`
|
|
346
|
+
`,384)}function WI(t,e){let n=Oy(t);if(n==="unknown")throw new ia(t);if(n==="human"&&!e)throw new Ny(t);return n}function KI(t,e,n){let r=WI(t,n?.allowHumanOnly),o=CI(t),s=PI(o,e);if(!s.ok)throw new Qd(s.error);let i=tu(n),a=nu(i);return OI(a,t,s.value),HI(i,a),{path:t,class:r,value:s.value,persistedTo:i}}function qI(t,e){let n=WI(t,e?.allowHumanOnly),r=tu(e),o=nu(r),s=DI(o,t);return s&&HI(r,o),{path:t,class:n,removed:s,persistedTo:r}}function GI(t,e){let n=Oy(t),r=tu(e),o=nu(r);return{path:t,class:n,value:MI(o,t)}}function XI(t){return nu(tu(t))}var aa,ia,Dy,Fy,Ly,Ny,Qd,Zd,zI=h(()=>{"use strict";B();F();My();FI();aa="effective on the next session/daemon restart; the current session is unchanged",ia=class extends Error{constructor(e){super(`unknown config key: ${e}`),this.name="UnknownKeyError"}},Dy=class extends Error{constructor(e){super(`${e} is a process/inherited env var and is not afk-configurable`),this.name="NonConfigKeyError"}},Fy=class extends Error{constructor(e){super(`${e} holds a credential; the agent cannot set it. A human must run \`afk config env set ${e}\` (the value is entered masked and never enters the model context).`),this.name="SecretWriteRefused"}},Ly=class extends Error{constructor(e){super(`${e} controls identity, safety, capability, autonomous runs, request routing, or where AFK's own state lives; the agent cannot set it. A human must run \`afk config env set ${e}\`.`),this.name="ProtectedEnvKeyRefused"}},Ny=class extends Error{constructor(e){super(`${e} is human-gated (prompt/hooks/identity); the agent cannot set it. A human must run \`afk config set ${e}\`.`),this.name="HumanOnlyKeyRefused"}},Qd=class extends Error{constructor(e){super(e),this.name="ConfigValidationError"}},Zd=class extends Error{constructor(e){super(`refusing to write: existing ${e} is not valid JSON (fix or remove it by hand first)`),this.name="MalformedConfigError"}}});function JI(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function VI(t){return t==="env"||t==="config"?t:void 0}function dn(t){return{content:t,isError:!0}}var YI,QI,ZI=h(()=>{"use strict";zI();YI=async t=>{let e=JI(t);if(!e)return dn("config_get: expected an object input");let n=VI(e.target);if(!n)return dn("config_get: `target` must be 'env' or 'config'");let r=typeof e.key=="string"?e.key:void 0,o=e.all===!0;try{if(n==="env"){if(r){let s=BI(r);return{content:JSON.stringify(s,null,2)}}return{content:JSON.stringify(jI({all:o}),null,2)}}if(r){let s=GI(r);return{content:JSON.stringify(s,null,2)}}return{content:JSON.stringify(XI(),null,2)}}catch(s){return dn(`config_get: ${s.message}`)}},QI=async t=>{let e=JI(t);if(!e)return dn("config_set: expected an object input");let n=VI(e.target);if(!n)return dn("config_set: `target` must be 'env' or 'config'");let r=typeof e.key=="string"?e.key:void 0;if(!r)return dn("config_set: `key` is required");let o=e.action==="unset"?"unset":"set",s=e.value;try{if(o==="unset"){if(n==="env"){let c=UI(r);return{content:c.removed?`Removed ${c.key} from afk.env (${c.persistedTo}). ${aa}.`:`${c.key} was not set in afk.env; nothing to remove.`}}let a=qI(r);return{content:a.removed?`Removed ${a.path} from afk.config.json (${a.persistedTo}). ${aa}.`:`${a.path} was not set in afk.config.json; nothing to remove.`}}if(s==null)return dn(`config_set: \`value\` is required to set ${r}`);if(n==="env"){if(typeof s!="string"&&typeof s!="number"&&typeof s!="boolean")return dn("config_set: env values must be a string, number, or boolean");let a=$I(r,String(s));return{content:`Set ${a.key} = ${a.display} in afk.env (${a.persistedTo}). ${aa}.`}}let i=KI(r,s);return{content:`Set ${i.path} = ${JSON.stringify(i.value)} in afk.config.json (${i.persistedTo}). ${aa}.`}}catch(i){return dn(`config_set: ${i.message}`)}}});function qr(t,e){return t.length>e?`${t.slice(0,e)}\u2026 [truncated]`:t}function Uy(t){switch(t.type){case"message":return t.message.role!=="assistant"||!t.message.content?null:{kind:"assistant",text:qr(t.message.content,8e3)};case"chunk":{let e=t.chunk;return e.type==="tool_use_detail"?e.pending?null:{kind:"tool",toolName:e.toolName,toolUseId:e.toolUseId,input:qr(e.toolInput,400)}:e.type==="tool_result"?e.isError===!0?{kind:"tool_error",content:qr(e.content,400),...e.metadata?.toolName!==void 0?{toolName:String(e.metadata.toolName)}:{}}:{kind:"tool_result",toolUseId:e.toolUseId,content:qr(e.content,400),...typeof e.durationMs=="number"?{durationMs:e.durationMs}:{},...e.metadata?.toolName!==void 0?{toolName:String(e.metadata.toolName)}:{}}:e.type==="thinking"?{kind:"thinking",text:qr(e.content,8e3)}:null}case"done":{let e=t.metadata,n=e?.totalCostUsd,r=e?.durationMs,o=e?.usage,s=typeof o?.input_tokens=="number"?o.input_tokens:void 0,i=typeof o?.output_tokens=="number"?o.output_tokens:void 0,a=typeof o?.cache_read_input_tokens=="number"?o.cache_read_input_tokens:void 0,c=typeof e?.stopReason=="string"?e.stopReason:void 0;return{kind:"done",...typeof n=="number"?{costUsd:n}:{},...typeof r=="number"?{durationMs:r}:{},...s!==void 0?{inputTokens:s}:{},...i!==void 0?{outputTokens:i}:{},...a!==void 0?{cacheReadTokens:a}:{},...c!==void 0?{stopReason:c}:{}}}case"error":return{kind:"error",message:t.error.message};case"paused":return{kind:"paused",...t.resetsAt?{resetsAt:t.resetsAt.toISOString()}:{}};case"resumed":return{kind:"resumed"};case"notice":return null;case"tool-activity":return{kind:"tool_activity",activeCount:t.activeCount,activeToolUseIds:t.activeToolUseIds};case"rate_limit":return{kind:"rate_limit",...typeof t.retryAfterMs=="number"?{retryAfterMs:t.retryAfterMs}:{}};case"progress":return{kind:"progress",message:t.progress.summary??t.progress.description};case"subagent_lifecycle":return{kind:"subagent_lifecycle",subagentId:t.subagentId,status:t.status,...t.model!==void 0?{model:t.model}:{},...t.agentType!==void 0?{agentType:t.agentType}:{},...t.durationMs!==void 0?{durationMs:t.durationMs}:{},...t.totalCostUsd!==void 0?{totalCostUsd:t.totalCostUsd}:{},...t.outputBytes!==void 0?{outputBytes:t.outputBytes}:{},...t.errorClass!==void 0?{errorClass:t.errorClass}:{},...t.errorMessage!==void 0?{errorMessage:t.errorMessage}:{},...t.promptHead!==void 0?{promptHead:t.promptHead}:{},...t.turnCount!=null?{turnCount:t.turnCount}:{},...t.stopReason?{stopReason:t.stopReason}:{},...t.parentToolUseId?{parentToolUseId:t.parentToolUseId}:{}};case"background_job":return{kind:"background_job",jobId:t.jobId,status:t.status,...t.label!==void 0?{label:t.label}:{}};case"plan_mode":return{kind:"plan_mode",mode:t.mode};default:return null}}var By=h(()=>{"use strict"});import*as eC from"node:fs";import*as Gr from"node:fs/promises";import*as tC from"node:readline";function nC(t){let e=t.trim();if(!e)return null;try{let n=JSON.parse(e);return n.v!==1||typeof n.ts!="number"||typeof n.kind!="string"?null:n}catch{return null}}async function ca(t){if(!lr(t))return!1;try{return await Gr.access(So(t)),!0}catch{return!1}}async function*jy(t){if(!lr(t))return;let e;try{e=await Gr.open(So(t),"r")}catch(n){if(n.code==="ENOENT")return;throw n}try{let n=tC.createInterface({input:e.createReadStream({encoding:"utf8"}),crlfDelay:1/0});for await(let r of n){let o=nC(r);o&&(yield o)}}finally{await e.close()}}async function*Hy(t,e){if(!lr(t))return;let n=So(t),r=wo(t),{fromStart:o=!1,signal:s}=e??{},i=0,a="",c=!1;async function*l(){let f=null;try{f=await Gr.open(n,"r");let m=await f.stat();if(m.size<=i)return;let g=m.size-i,y=Buffer.allocUnsafe(g),{bytesRead:b}=await f.read(y,0,g,i);if(b===0)return;i+=b,a+=y.toString("utf8",0,b);let w=a.split(`
|
|
347
347
|
`);a=w.pop()??"";for(let v of w){let _=nC(v);if(_&&(_.kind==="closed"&&(c=!0),yield _,c))return}}catch(m){m.code!=="ENOENT"&&process.stderr.write(`[afk] session-ledger: tail read error for ${t}: ${String(m)}
|
|
348
348
|
`)}finally{f&&await f.close().catch(()=>{})}}if(o){if(yield*l(),c)return}else try{i=(await Gr.stat(n)).size}catch{}let d=null,u=null,p=()=>new Promise(f=>{let m=setTimeout(()=>{u=null,f()},B5);u=()=>{clearTimeout(m),u=null,f()},s?.addEventListener("abort",()=>{clearTimeout(m),u=null,f()},{once:!0})});try{d=eC.watch(r,{persistent:!1},()=>{u?.()})}catch{}try{for(;!s?.aborted&&!c&&(await p(),!s?.aborted);)yield*l()}finally{d?.close()}}var B5,rC=h(()=>{"use strict";B();B5=250});import*as ru from"node:fs";var Nn,la=h(()=>{"use strict";B();By();By();rC();Nn=class{sessionId;ledgerPath;stream=null;errored=!1;closed=!1;streamReady=!1;pendingLines=[];readyPromise=null;readyResolve=null;constructor(e){if(this.sessionId=e,!lr(e)){this.errored=!0,this.ledgerPath="";return}this.ledgerPath=So(e);try{ru.mkdirSync(wo(e),{recursive:!0})}catch(n){process.stderr.write(`[afk] session-ledger: mkdir failed for ${e}: ${String(n)}
|
|
349
349
|
`),this.errored=!0}}get active(){return!this.errored&&!this.closed}record(e){if(this.errored||this.closed)return;let n={v:1,ts:Date.now(),...e},r=JSON.stringify(n)+`
|
|
@@ -1299,7 +1299,7 @@ ${n}`:n}}}return{...t,systemPrompt:n}}var nL=h(()=>{"use strict"});function za()
|
|
|
1299
1299
|
|
|
1300
1300
|
`+n:e??n}}}});function kL(t){return ep(Ut(t))}function vL(t,e){return t===void 0||!kL(t)||z(t)!=="openai-compatible"?{model:t}:e===void 0||kL(e)||z(e)!=="openai-compatible"?{model:t}:{model:e,coercedFrom:t}}var TL=h(()=>{"use strict";fe();tp();Fe()});function EL(t){let{options:e,counter:n,managerHookRegistry:r,parentTraceWriter:o,parentModel:s}=t,a=`${(e.idPrefix??"subagent").replace(/[^A-Za-z0-9_-]/g,"-")}-${Date.now()}-${n}`,c=e.parent.sessionId,l=e.config.hookRegistry??r??e.parent.hookRegistry,d=e.config.traceWriter??o,u=vL(e.config.model,s),p=u.model??e.config.model,f=e.config.timeoutMs??za();return{id:a,resume:c,registry:l,effectiveTraceWriter:d,effectiveChildModel:p,coercedFrom:u.coercedFrom,effectiveTimeoutMs:f}}var _L=h(()=>{"use strict";TL();Rs()});var of,AL=h(()=>{"use strict";of=class{entries=new Map;capacity;constructor(e=30){this.capacity=Math.max(1,e)}add(e,n,r){this.entries.delete(e),this.entries.set(e,{handle:n,result:r,completedAt:Date.now()}),this.evictIfNeeded()}recordHandle(e,n,r,o,s){let i=r==="succeeded"?{id:e,status:r,trace:o,...s!==void 0&&{stopReason:s}}:{id:e,status:r,error:new Error(`subagent terminated with status: ${r}`),trace:o,...s!==void 0&&{stopReason:s}};this.add(e,n,i)}get(e){return this.entries.get(e)}list(){return[...this.entries.values()].reverse()}get size(){return this.entries.size}delete(e){return this.entries.delete(e)}clear(){this.entries.clear()}evictIfNeeded(){for(;this.entries.size>this.capacity;){let e=this.entries.keys().next().value;if(e!==void 0)this.entries.delete(e);else break}}}});import*as Is from"node:fs";var xL,RL,Va,IL=h(()=>{"use strict";F();B();xL=1048576,RL=new Set,Va=class{constructor(e,n){this.sessionLabel=e;this.subagentId=n;this.logPath=$v(e,n);let r=Lm(e);if(!RL.has(r))try{Is.mkdirSync(r,{recursive:!0}),RL.add(r)}catch{this.errored=!0}}sessionLabel;subagentId;logPath;stream=null;errored=!1;closed=!1;streamReady=!1;pendingLines=[];readyPromise=null;readyResolve=null;bytesWritten=0;static isEnabled(){return k.AFK_SUBAGENT_LOG==="1"}write(e){if(this.errored||this.closed||this.bytesWritten>=xL)return;let n=JSON.stringify(e)+`
|
|
1301
1301
|
`;if(!this.stream){this.pendingLines.push(n),this.openStream();return}if(!this.streamReady){this.pendingLines.push(n);return}this.writeLine(n)}async close(){if(!this.closed)return this.closed=!0,this.readyPromise&&await this.readyPromise,new Promise(e=>{if(!this.stream||this.errored){e();return}this.stream.end(()=>e())})}openStream(){if(!this.stream){this.readyPromise=new Promise(e=>{this.readyResolve=e});try{let e=Is.createWriteStream(this.logPath,{flags:"a",encoding:"utf8",mode:384});this.stream=e,e.once("open",()=>{this.streamReady=!0;for(let n of this.pendingLines)this.writeLine(n);this.pendingLines=[],this.readyResolve?.(),this.readyResolve=null}),e.once("error",()=>{this.errored=!0,this.pendingLines=[],this.readyResolve?.(),this.readyResolve=null})}catch{this.errored=!0,this.readyResolve?.(),this.readyResolve=null}}}writeLine(e){this.errored||!this.stream||this.bytesWritten>=xL||(this.bytesWritten+=Buffer.byteLength(e,"utf8"),this.stream.write(e))}}});import{z as OZ}from"zod";function CL(t,e,n,r){let s={...OZ.toJSONSchema(n,{target:"openapi-3.0"}),type:"object"};return{schema:{name:t,description:e,input_schema:s},handler:async(c,l,d)=>{let u=n.safeParse(c);if(!u.success){let p=u.error.issues.map(f=>`${f.path.join(".")||"<root>"}: ${f.message}`).join("; ");return{isError:!0,content:`Tool input validation failed for "${t}": ${p}`}}return r(u.data,l,d)}}}var PL=h(()=>{"use strict"});function DZ(t,e){let n=new Date().toISOString(),r=t.phase!==void 0?` phase="${OL(t.phase)}"`:"";return`<child-progress subagentId="${OL(e)}"${r} timestamp="${n}">`+FZ(t.message)+"</child-progress>"}function OL(t){return t.replace(/&/g,"&").replace(/"/g,""")}function FZ(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function FL(t,e,n){return async r=>{if(n?.aborted)return{content:JSON.stringify({delivered:!1,reason:"parent_aborted"})};if(typeof r!="object"||r===null)return{content:"emit_progress: input must be an object.",isError:!0};let o=r,s=o.message;if(typeof s!="string"||s.trim().length===0)return{content:'emit_progress: "message" must be a non-empty string.',isError:!0};let i=s;Buffer.byteLength(i,"utf8")>sf&&(i=DL(i,sf));let a=typeof o.phase=="string"&&o.phase.trim().length>0?o.phase.trim():void 0;a!==void 0&&Buffer.byteLength(a,"utf8")>256&&(a=DL(a,256));let c=typeof o.metadata=="object"&&o.metadata!==null&&!Array.isArray(o.metadata)?o.metadata:void 0,l={message:i,...a!==void 0?{phase:a}:{},...c!==void 0?{metadata:c}:{}};t.emitProgress(l);try{let d=DZ(l,t.id);e(d)}catch{return{content:JSON.stringify({delivered:!1,reason:"queue_error"})}}return{content:JSON.stringify({delivered:!0})}}}function DL(t,e){let n=Buffer.from(t,"utf8");if(n.byteLength<=e)return t;let r=Math.min(e,n.byteLength);for(;r>0&&n[r]!==void 0&&(n[r]&192)===128;)r--;return n.subarray(0,r).toString("utf8")}var sf,LL=h(()=>{"use strict";wS();sf=2048});import{z as Cs}from"zod";function NL(t,e,n,r){return e?LZ(t,n,r):()=>{}}function LZ(t,e,n){let r={current:void 0},o,s=CL("emit_progress",`Emit a structured progress event to the parent agent. The event is delivered to the parent at its next user-turn boundary, wrapped in a <child-progress> envelope. Use to report phase transitions, intermediate findings, or status updates so the parent stays informed without waiting for the full result. The "message" field is required (max ${sf} bytes). "phase" and "metadata" are optional. Note: this tool call counts as a tool-use round.`,Cs.object({message:Cs.string().describe("Progress message to deliver to the parent (required)."),phase:Cs.string().optional().describe('Optional phase label (e.g. "research", "planning", "done").'),metadata:Cs.record(Cs.string(),Cs.unknown()).optional().describe("Optional structured metadata for machine consumers.")}),async(i,a)=>r.current===void 0?{content:"emit_progress: handle not yet initialized.",isError:!0}:(o===void 0&&(o=FL(r.current,c=>{e?.queueFrameworkContext?e.queueFrameworkContext(c):e&&e.pushUserMessage(c)},n)),o(i,a)));return t.customTools=[...t.customTools??[],s],i=>{r.current=i,o=void 0}}var $L=h(()=>{"use strict";PL();LL()});function UL(t,e,n,r){if(t===void 0)return{subscribeHandler:async()=>({content:"workspace_subscribe: no store available.",isError:!0}),bindHandle:()=>{}};let o={current:void 0},s=async i=>{if(o.current===void 0)return{content:"workspace_subscribe: handle not yet initialized.",isError:!0};let a=i!=null&&typeof i=="object"?i:{},c=typeof a.subject=="string"&&a.subject.length>0?a.subject:void 0,l=a.type,u=typeof l=="string"&&new Set(["finding","evidence","hypothesis","decision","artifact","status"]).has(l)?l:void 0,p=Tg();return t.subscribe({id:p,agentId:e,subject:c,type:u,lastDeliveredSeq:0,deliveryFn:f=>{let m=o.current;if(m===void 0)return;let g=0;m._pendingWorkspaceEntries.length>=10&&(m._pendingWorkspaceEntries.shift(),g=1,m._workspaceDroppedSinceDrain++),m._pendingWorkspaceEntries.push(f),q(n,{phase:"workspace_delivery",metadata:{subscriptionId:p,agentId:e,entryId:String(f.id),droppedCount:g}})}}),q(n,{phase:"workspace_subscribed",metadata:{subscriptionId:p,agentId:e,...c!==void 0&&{query:c},...u!==void 0&&{type:u}}}),{content:JSON.stringify({subscriptionId:p,active:!0})}};return r?.setSubscribeHandler!==void 0&&r.setSubscribeHandler(s),{subscribeHandler:s,bindHandle:i=>{o.current=i,i._workspaceStore=t}}}var BL=h(()=>{"use strict";Nl();Ti();J()});var V,we=h(()=>{"use strict";xM();Bb();Kl();Qr();Kb();K0();X0();fe();J0();iL();lL();SL();_L();AL();IL();$L();BL();Rs();Rs();V=class{active=new Map;completed=new of;parentCanUseTool;hookRegistry;progressSink;parentApiKey;parentBaseUrl;parentProvider;parentModel;parentCwd;parentReadRoots;worktreeMainRootCache=new Map;parentTraceWriter;parentSurface;parentAbortSignal;workspaceStore;sessionLabel;abortGraph;rootId;rootController;counter=0;onSubagentSucceededCb;outputEventSink;constructor(e={}){if(this.parentCanUseTool=e.canUseTool,this.hookRegistry=e.hookRegistry,this.progressSink=e.progressSink,this.parentApiKey=e.apiKey,this.parentBaseUrl=e.baseUrl,this.parentProvider=e.parentModel!==void 0?z(e.parentModel):void 0,this.parentModel=e.parentModel,this.parentCwd=e.cwd,this.parentReadRoots=e.parentReadRoots,this.parentTraceWriter=e.traceWriter,this.parentSurface=e.surface,this.parentAbortSignal=e.parentAbortSignal,this.onSubagentSucceededCb=e.onSubagentSucceeded,this.outputEventSink=e.outputEventSink,this.workspaceStore=e.workspaceStore,this.sessionLabel=e.sessionLabel,this.abortGraph=new xu(e.traceWriter),this.rootId=`manager-root-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,this.rootController=new AbortController,this.abortGraph.register(this.rootId,this.rootController),e.parentAbortSignal){let n=e.parentAbortSignal;n.aborted?this.rootController.abort(n.reason):n.addEventListener("abort",()=>{this.rootController.signal.aborted||this.rootController.abort(n.reason)},{once:!0})}}list(){return[...this.active.values()].map(e=>({id:e.id,status:e.status}))}get(e){return this.active.get(e)??this.completed.get(e)?.handle}onChildAborted(e){return this.abortGraph.onChildAborted(this.rootId,e)}setOnSubagentSucceeded(e){this.onSubagentSucceededCb=e}setOutputEventSink(e){this.outputEventSink=e}setCwd(e){this.parentCwd=e,this.worktreeMainRootCache.delete(e)}setTraceWriter(e){this.parentTraceWriter=e,this.abortGraph.setTraceWriter(e)}getReadScopeInputs(){return{parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd}}async resolveMainRootForCwd(e){if(this.worktreeMainRootCache.has(e))return this.worktreeMainRootCache.get(e);let n=await W0(e);return this.worktreeMainRootCache.set(e,n),n}abortAll(e,n="user_signal"){this.abortGraph.abort(this.rootId,e,n)}async forkSubagent(e){z0(e);let{id:n,resume:r,registry:o,effectiveTraceWriter:s,effectiveChildModel:i,coercedFrom:a,effectiveTimeoutMs:c}=EL({options:e,counter:++this.counter,managerHookRegistry:this.hookRegistry,parentTraceWriter:this.parentTraceWriter,parentModel:this.parentModel});o&&await $E(o,{event:"SubagentStart",subagentId:n,parentSessionId:e.parent.sessionId},{signal:this.rootController.signal,...s?{traceWriter:s}:{}}),a!==void 0&&process.stderr.write(`[afk] subagent: child model "${a}" cannot run on this session's OpenAI/ChatGPT backend \u2014 running it as "${i??""}" instead (set AFK_DEFAULT_SUBAGENT_MODEL to choose a different one).
|
|
1302
|
-
`);let l=new AbortController;this.abortGraph.register(n,l),this.abortGraph.linkChild(this.rootId,n);let d=e.config.cwd??this.parentCwd,u=await q0({parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd,effectiveChildCwd:d,callerReadRoots:e.config.readRoots,callerExtraReadRoots:e.config.extraReadRoots,resolveMainRoot:A=>this.resolveMainRootForCwd(A)}),p=G0(e.config.writeRoots,d),f=sL({options:e,id:n,resume:r,registry:o,effectiveChildModel:i,effectiveTimeoutMs:c,inheritedReadRoots:u,composedWriteRoots:p,childController:l,parentCwd:this.parentCwd,parentApiKey:this.parentApiKey,parentBaseUrl:this.parentBaseUrl,parentProvider:this.parentProvider,parentTraceWriter:this.parentTraceWriter,parentSurface:this.parentSurface,parentCanUseTool:this.parentCanUseTool,workspaceStore:this.workspaceStore}),m=()=>{};f.cwd!==void 0&&(Wb(f.cwd),m=H0(f.cwd));let g=NL(f,e.progressEvents,e.parent.getInputStreamRef?.(),e.parent.abortSignal),y=UL(this.workspaceStore,n,s,f.provider),b,w,v,_;try{b=new Yr(f);let A=e.parent.getInputStreamRef?.(),I=e.parent.abortSignal,C=this.progressSink??Pt();v=e.agentType?.trim()||void 0,_=e.resolvedAgentType?.trim()||void 0;let T=e.parentId?.trim()||void 0,R=this.sessionLabel??e.parent.sessionId,E=Va.isEnabled()&&R?new Va(R,n):void 0;w=new rf(n,b,l,this.abortGraph,e.outputSchema,c,o,()=>{m();let P=w._currentStatus,H=P==="succeeded"||P==="failed"||P==="cancelled"?P:"succeeded";this.outputEventSink?.({type:"subagent_lifecycle",subagentId:n,status:H,...w._lastDurationMs!==void 0?{durationMs:w._lastDurationMs}:{}}),this.completed.add(n,w,{id:n,status:H}),this.active.delete(n),this.abortGraph.dispose(n),E?.close(),this.completed.recordHandle(n,w,w._currentStatus,w._currentTrace,w._lastStopReason)},A,I,v??e.idPrefix,C,T??e.parent.sessionId,s,this.onSubagentSucceededCb,e.config.idleTimeoutMs??rL()),E&&(w._logWriter=E),g(w),y.bindHandle(w),this.active.set(n,w)}catch(A){throw m(),this.abortGraph.dispose(n),A}let x=aL({effectiveTraceWriter:s,id:n,parentSessionId:e.parent.sessionId,rootId:this.rootId,effectiveChildModel:i,childConfig:f,promptHead:e.promptHead,effectiveAgentType:v,effectiveResolvedAgentType:_});return await cL({modelString:x,id:n,idPrefix:e.idPrefix,parentSessionId:e.parent.sessionId,effectiveResolvedAgentType:_}),this.outputEventSink?.({type:"subagent_lifecycle",subagentId:n,status:"started",...i!==void 0?{model:String(i)}:{},...v!==void 0?{agentType:v}:{},...e.promptHead!==void 0?{promptHead:e.promptHead}:{}}),w}async kill(e){let n=this.active.get(e);return n?(await n.cancel(),!0):!1}async killAll(){await Promise.allSettled([...this.active.values()].map(e=>e.cancel()))}async abortAllAndDrain(e,n="user_signal",r=oL,o=!1){let s=[...this.active.values()];if(s.length===0)return o&&this.rootController.signal.aborted&&this.rearmRoot(),{drained:0,timedOut:!1};this.abortGraph.abort(this.rootId,e,n);let i=!1,a=new Promise(c=>setTimeout(()=>{i=!0,c()},r).unref());return await Promise.race([Promise.allSettled(s.map(c=>c.cancel())),a]),i&&console.warn(`[SubagentManager] abortAllAndDrain: ${s.length} child(ren) did not settle within ${r}ms \u2014 sealing anyway; their terminal rows may be missing`),o&&this.rearmRoot(),{drained:s.length,timedOut:i}}rearmRoot(){this.rootController=new AbortController,this.abortGraph.rearm(this.rootId,this.rootController),this.parentAbortSignal?.aborted&&this.rootController.abort(this.parentAbortSignal.reason)}async teardownAll(){await Promise.allSettled([...this.active.values()].map(e=>e.teardown()))}}});async function jL(t,e={}){let{failFast:n=!0,teardown:r=!0,maxConcurrency:o=Ri()}=e;if(t.length===0)return[];let s=new Array(t.length),i=new Set(t.map((c,l)=>l)),a=!1;return await Lo(t.map((c,l)=>l),o,async c=>{let l=t[c];n&&a&&await l.handle.cancel().catch(()=>{});let d=await l.handle.runToResult(l.prompt);if(s[c]=d,i.delete(c),n&&d.status!=="succeeded"){a=!0;for(let u of i){let p=t[u];p&&p.handle.status==="running"&&p.handle.cancel().catch(()=>{})}}}),r&&await Promise.allSettled(t.map(c=>c.handle.teardown())),s}var HL=h(()=>{"use strict";ld()});function WL(t){let e=new Set;for(let n of t){let r=ja(n,NZ);r!==void 0&&e.add(r)}return e}var NZ,KL=h(()=>{"use strict";ws();ut();rd();NZ=new Set([...At,...$e,"memory_search","agent","skill"])});import{existsSync as tr,readdirSync as $Z,readFileSync as UZ}from"fs";import{join as yn}from"path";function GL(t=oe()){let e=[],n=yn(t,"skills");if(tr(n))for(let r of af(n)){let o=yn(n,r,"SKILL.md");tr(o)&&e.push({path:o,type:"skill",source:"user"})}for(let r of qL){let o=yn(t,`${r}s`);if(tr(o))for(let s of af(o))s.endsWith(".md")&&e.push({path:yn(o,s),type:r,source:"user"})}return e}function XL(t=Lt()){if(!tr(t))return[];let e=[],n=mn(t);for(let r of n){let s=Ow(t,r.path)?.key,i=yn(r.path,"skills");if(tr(i))for(let a of af(i)){let c=yn(i,a,"SKILL.md");if(!tr(c))continue;let l={path:c,type:"skill",source:"plugin"};s&&(l.plugin_key=s),e.push(l)}for(let a of qL){let c=yn(r.path,`${a}s`);if(tr(c))for(let l of af(c)){if(!l.endsWith(".md"))continue;let d={path:yn(c,l),type:a,source:"plugin"};s&&(d.plugin_key=s),e.push(d)}}}return e}function zL(t=yn(oe(),"settings.json")){if(!tr(t))return[];try{let e=UZ(t,"utf8"),r=JSON.parse(e).hooks;if(!r||typeof r!="object")return[];let o=[];for(let[s,i]of Object.entries(r))if(Array.isArray(i))for(let a=0;a<i.length;a++)o.push({event:s,index:a,raw:i[a]});return o}catch{return[]}}function af(t){try{return $Z(t).filter(e=>!e.startsWith("."))}catch{return[]}}var qL,JL=h(()=>{"use strict";B();bs();qL=["command","agent"]});import{z as le}from"zod";import{mkdir as VL,appendFile as YL}from"fs/promises";import{join as vS}from"path";function HZ(t){return{runUserDiscovery:t!=="plugin",runPluginDiscovery:t!=="user",runHookInspector:t!=="plugin"}}function WZ(t){let e=()=>{let s={};for(let i of eN)s[i]={correct:0,misfit:0,outlier:0};return s},n={user:e(),plugin:e()};for(let s of t)n[s.source][s.type][s.verdict]+=1;let r={high:0,med:1,low:2},o=t.filter(s=>s.verdict==="misfit").slice().sort((s,i)=>r[s.confidence]-r[i.confidence]);return{inventory:n,misfits:o}}function KZ(t){return t.verdict==="misfit"&&t.confidence==="high"&&t.source==="user"}function qZ(t){let e=t.filter(o=>o.source==="user"),n=t.filter(o=>o.source==="plugin"),r=["","## Discovered artifacts (audit only these)",""];if(r.push('### User-scope artifacts (set `"source": "user"`, omit `plugin_key`)'),e.length===0)r.push("(none discovered)");else for(let o of e)r.push(`- ${o.path}`);if(r.push(""),r.push('### Plugin-scope artifacts (set `"source": "plugin"`, copy `plugin_key` from each entry)'),n.length===0)r.push("(none discovered)");else for(let o of n){let s=o.plugin_key??"<unknown>";r.push(`- ${o.path} (plugin_key: ${s})`)}return r.join(`
|
|
1302
|
+
`);let l=new AbortController;this.abortGraph.register(n,l),this.abortGraph.linkChild(this.rootId,n);let d=e.config.cwd??this.parentCwd,u=await q0({parentReadRoots:this.parentReadRoots,parentCwd:this.parentCwd,effectiveChildCwd:d,callerReadRoots:e.config.readRoots,callerExtraReadRoots:e.config.extraReadRoots,resolveMainRoot:A=>this.resolveMainRootForCwd(A)}),p=G0(e.config.writeRoots,d),f=sL({options:e,id:n,resume:r,registry:o,effectiveChildModel:i,effectiveTimeoutMs:c,inheritedReadRoots:u,composedWriteRoots:p,childController:l,parentCwd:this.parentCwd,parentApiKey:this.parentApiKey,parentBaseUrl:this.parentBaseUrl,parentProvider:this.parentProvider,parentTraceWriter:this.parentTraceWriter,parentSurface:this.parentSurface,parentCanUseTool:this.parentCanUseTool,workspaceStore:this.workspaceStore}),m=()=>{};f.cwd!==void 0&&(Wb(f.cwd),m=H0(f.cwd));let g=NL(f,e.progressEvents,e.parent.getInputStreamRef?.(),e.parent.abortSignal),y=UL(this.workspaceStore,n,s,f.provider),b,w,v,_;try{b=new Yr(f);let A=e.parent.getInputStreamRef?.(),I=e.parent.abortSignal,C=this.progressSink??Pt();v=e.agentType?.trim()||void 0,_=e.resolvedAgentType?.trim()||void 0;let T=e.parentId?.trim()||void 0,R=this.sessionLabel??e.parent.sessionId,E=Va.isEnabled()&&R?new Va(R,n):void 0;w=new rf(n,b,l,this.abortGraph,e.outputSchema,c,o,()=>{m();let P=w._currentStatus,H=P==="succeeded"||P==="failed"||P==="cancelled"?P:"succeeded";this.outputEventSink?.({type:"subagent_lifecycle",subagentId:n,status:H,...w._lastDurationMs!==void 0?{durationMs:w._lastDurationMs}:{},...w._currentTrace.turnCount>0?{turnCount:w._currentTrace.turnCount}:{},...w._lastStopReason!==void 0?{stopReason:w._lastStopReason}:{}}),this.completed.add(n,w,{id:n,status:H}),this.active.delete(n),this.abortGraph.dispose(n),E?.close(),this.completed.recordHandle(n,w,w._currentStatus,w._currentTrace,w._lastStopReason)},A,I,v??e.idPrefix,C,T??e.parent.sessionId,s,this.onSubagentSucceededCb,e.config.idleTimeoutMs??rL()),E&&(w._logWriter=E),g(w),y.bindHandle(w),this.active.set(n,w)}catch(A){throw m(),this.abortGraph.dispose(n),A}let x=aL({effectiveTraceWriter:s,id:n,parentSessionId:e.parent.sessionId,rootId:this.rootId,effectiveChildModel:i,childConfig:f,promptHead:e.promptHead,effectiveAgentType:v,effectiveResolvedAgentType:_});return await cL({modelString:x,id:n,idPrefix:e.idPrefix,parentSessionId:e.parent.sessionId,effectiveResolvedAgentType:_}),this.outputEventSink?.({type:"subagent_lifecycle",subagentId:n,status:"started",...i!==void 0?{model:String(i)}:{},...v!==void 0?{agentType:v}:{},...e.promptHead!==void 0?{promptHead:e.promptHead}:{},...e.parentId?{parentToolUseId:e.parentId}:{}}),w}async kill(e){let n=this.active.get(e);return n?(await n.cancel(),!0):!1}async killAll(){await Promise.allSettled([...this.active.values()].map(e=>e.cancel()))}async abortAllAndDrain(e,n="user_signal",r=oL,o=!1){let s=[...this.active.values()];if(s.length===0)return o&&this.rootController.signal.aborted&&this.rearmRoot(),{drained:0,timedOut:!1};this.abortGraph.abort(this.rootId,e,n);let i=!1,a=new Promise(c=>setTimeout(()=>{i=!0,c()},r).unref());return await Promise.race([Promise.allSettled(s.map(c=>c.cancel())),a]),i&&console.warn(`[SubagentManager] abortAllAndDrain: ${s.length} child(ren) did not settle within ${r}ms \u2014 sealing anyway; their terminal rows may be missing`),o&&this.rearmRoot(),{drained:s.length,timedOut:i}}rearmRoot(){this.rootController=new AbortController,this.abortGraph.rearm(this.rootId,this.rootController),this.parentAbortSignal?.aborted&&this.rootController.abort(this.parentAbortSignal.reason)}async teardownAll(){await Promise.allSettled([...this.active.values()].map(e=>e.teardown()))}}});async function jL(t,e={}){let{failFast:n=!0,teardown:r=!0,maxConcurrency:o=Ri()}=e;if(t.length===0)return[];let s=new Array(t.length),i=new Set(t.map((c,l)=>l)),a=!1;return await Lo(t.map((c,l)=>l),o,async c=>{let l=t[c];n&&a&&await l.handle.cancel().catch(()=>{});let d=await l.handle.runToResult(l.prompt);if(s[c]=d,i.delete(c),n&&d.status!=="succeeded"){a=!0;for(let u of i){let p=t[u];p&&p.handle.status==="running"&&p.handle.cancel().catch(()=>{})}}}),r&&await Promise.allSettled(t.map(c=>c.handle.teardown())),s}var HL=h(()=>{"use strict";ld()});function WL(t){let e=new Set;for(let n of t){let r=ja(n,NZ);r!==void 0&&e.add(r)}return e}var NZ,KL=h(()=>{"use strict";ws();ut();rd();NZ=new Set([...At,...$e,"memory_search","agent","skill"])});import{existsSync as tr,readdirSync as $Z,readFileSync as UZ}from"fs";import{join as yn}from"path";function GL(t=oe()){let e=[],n=yn(t,"skills");if(tr(n))for(let r of af(n)){let o=yn(n,r,"SKILL.md");tr(o)&&e.push({path:o,type:"skill",source:"user"})}for(let r of qL){let o=yn(t,`${r}s`);if(tr(o))for(let s of af(o))s.endsWith(".md")&&e.push({path:yn(o,s),type:r,source:"user"})}return e}function XL(t=Lt()){if(!tr(t))return[];let e=[],n=mn(t);for(let r of n){let s=Ow(t,r.path)?.key,i=yn(r.path,"skills");if(tr(i))for(let a of af(i)){let c=yn(i,a,"SKILL.md");if(!tr(c))continue;let l={path:c,type:"skill",source:"plugin"};s&&(l.plugin_key=s),e.push(l)}for(let a of qL){let c=yn(r.path,`${a}s`);if(tr(c))for(let l of af(c)){if(!l.endsWith(".md"))continue;let d={path:yn(c,l),type:a,source:"plugin"};s&&(d.plugin_key=s),e.push(d)}}}return e}function zL(t=yn(oe(),"settings.json")){if(!tr(t))return[];try{let e=UZ(t,"utf8"),r=JSON.parse(e).hooks;if(!r||typeof r!="object")return[];let o=[];for(let[s,i]of Object.entries(r))if(Array.isArray(i))for(let a=0;a<i.length;a++)o.push({event:s,index:a,raw:i[a]});return o}catch{return[]}}function af(t){try{return $Z(t).filter(e=>!e.startsWith("."))}catch{return[]}}var qL,JL=h(()=>{"use strict";B();bs();qL=["command","agent"]});import{z as le}from"zod";import{mkdir as VL,appendFile as YL}from"fs/promises";import{join as vS}from"path";function HZ(t){return{runUserDiscovery:t!=="plugin",runPluginDiscovery:t!=="user",runHookInspector:t!=="plugin"}}function WZ(t){let e=()=>{let s={};for(let i of eN)s[i]={correct:0,misfit:0,outlier:0};return s},n={user:e(),plugin:e()};for(let s of t)n[s.source][s.type][s.verdict]+=1;let r={high:0,med:1,low:2},o=t.filter(s=>s.verdict==="misfit").slice().sort((s,i)=>r[s.confidence]-r[i.confidence]);return{inventory:n,misfits:o}}function KZ(t){return t.verdict==="misfit"&&t.confidence==="high"&&t.source==="user"}function qZ(t){let e=t.filter(o=>o.source==="user"),n=t.filter(o=>o.source==="plugin"),r=["","## Discovered artifacts (audit only these)",""];if(r.push('### User-scope artifacts (set `"source": "user"`, omit `plugin_key`)'),e.length===0)r.push("(none discovered)");else for(let o of e)r.push(`- ${o.path}`);if(r.push(""),r.push('### Plugin-scope artifacts (set `"source": "plugin"`, copy `plugin_key` from each entry)'),n.length===0)r.push("(none discovered)");else for(let o of n){let s=o.plugin_key??"<unknown>";r.push(`- ${o.path} (plugin_key: ${s})`)}return r.join(`
|
|
1303
1303
|
`)}function GZ(t,e){let n=["","## Discovered hooks (audit only these)",""];if(n.push(`Settings file (use this absolute path verbatim in each verdict's \`path\` field): \`${t}\``),n.push(""),e.length===0)return n.push("(no hooks discovered)"),n.join(`
|
|
1304
1304
|
`);for(let r of e){let o=`${r.event}-${r.index}`;n.push(`### Hook \`${o}\``),n.push(""),n.push("```json"),n.push(JSON.stringify(r.raw,null,2)),n.push("```"),n.push("")}return n.join(`
|
|
1305
1305
|
`)}function XZ(t,e){if(!e)return{kind:"failure",message:`${t}: no result`};if(e.schemaError)return{kind:"failure",message:`${t}: schema mismatch \u2014 ${e.schemaError.message}`};if(e.status!=="succeeded"){let n=e.error?` \u2014 ${e.error.message}`:"";return{kind:"failure",message:`${t}: ${e.status}${n}`}}return e.output?{kind:"success",output:e.output}:{kind:"failure",message:`${t}: no output`}}async function zZ(t,e,n){let r=n?.apiKey,o=Ve({defaultSubagentModel:n?.defaultSubagentModel,defaultModel:n?.defaultModel}),s=n?.callId,i=typeof t=="object"&&t!==null?t:{},a=BZ.parse(i),c=a.writeBriefs??!0,l=a.scope??"all",d=HZ(l);if(!e?.sessionId)throw new Error("audit-fit requires a parent session with sessionId");let u=e.sessionId,p=ue("audit-fit"),f={skill:p["01-skill-inspector.md"],command:p["02-command-inspector.md"],agent:p["03-agent-inspector.md"],hook:p["04-hook-inspector.md"]};for(let M of eN)if(!f[M])throw new Error(`audit-fit skill missing inspector prompt for ${M}`);let m=d.runUserDiscovery?GL():[],g=d.runPluginDiscovery?XL():[],y={skill:[],command:[],agent:[]};for(let M of[...m,...g])y[M.type].push(M);let b=new V({apiKey:r,...n?.defaultModel!==void 0?{parentModel:n.defaultModel}:{},...n?.traceWriter!==void 0?{traceWriter:n.traceWriter}:{},...n?.workspaceStore!==void 0?{workspaceStore:n.workspaceStore}:{}}),w=WL(Yt.allowedTools),v=()=>async M=>w.has(M)?{behavior:"allow"}:{behavior:"deny",message:`Tool ${M} not allowed for audit-fit inspectors. Allowed tools: ${[...w].join(", ")}`},_=[];for(let M of jZ){let N=y[M];if(N.length===0)continue;let $=f[M];$&&_.push({type:M,prompt:`${$}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=Object.freeze(JSON.parse('{"displayName":"ABAP","fileTypes":["abap","ABAP"],"foldingStartMarker":"/\\\\*\\\\*|\\\\{\\\\s*$","foldingStopMarker":"\\\\*\\\\*/|^\\\\s*}","name":"abap","patterns":[{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"^\\\\*.*\\\\n?","name":"comment.line.full.abap"},{"captures":{"1":{"name":"punctuation.definition.comment.abap"}},"match":"\\".*\\\\n?","name":"comment.line.partial.abap"},{"match":"(?<!\\\\S)##.*?(?=([,.:\\\\s]))","name":"comment.line.pragma.abap"},{"match":"(?i)(?<=[-~\\\\s])(?<=[-=]>)([/_a-z][/-9_a-z]*)(?=\\\\s+(?:|[-*+/]|&&?)=\\\\s+)","name":"variable.other.abap"},{"match":"\\\\b[0-9]+(\\\\b|[,.])","name":"constant.numeric.abap"},{"match":"(?i)(^|\\\\s+)((P(?:UBLIC|RIVATE|ROTECTED))\\\\sSECTION)(?=\\\\s+|[.:])","name":"storage.modifier.class.abap"},{"begin":"(?<!\\\\\\\\)(\\\\|)(.*?)","beginCaptures":{"1":{"name":"constant.character.escape.abap"}},"end":"(?<!\\\\\\\\)(\\\\||(\\\\\\\\\\\\\\\\\\\\|))","endCaptures":{"1":{"name":"constant.character.escape.abap"}},"name":"string.interpolated.abap","patterns":[{"match":"(\\\\{ )|( })","name":"constant.character.escape"},{"match":"\\\\\\\\\\\\|","name":"constant.character.escape.abap"},{"match":"(?i)(?<=\\\\s)(align|alpha|case|country|currency|date|decimals|exponent|number|pad|sign|style|time|timestamp|timezone|width|xsd|zero)(?=\\\\s=)","name":"entity.name.property.stringtemplate.abap"},{"match":"(?i)(?<==\\\\s)(center|engineering|environment|in|iso|left|leftplus|leftspace|lower|no|out|raw|right|rightplus|rightspace|scale_preserving|scale_preserving_scientific|scientific|scientific_with_leading_zero|sign_as_postfix|simple|space|upper|user|yes)(?=\\\\s)","name":"entity.value.property.stringtemplate.abap"}]},{"begin":"\'","end":"\'","name":"string.quoted.single.abap","patterns":[{"match":"\'\'","name":"constant.character.escape.abap"}]},{"begin":"`","end":"`","name":"string.quoted.single.abap","patterns":[{"match":"``","name":"constant.character.escape.abap"}]},{"begin":"(?i)^\\\\s*(class)\\\\s([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.block.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","name":"meta.block.begin.implementation.abap","patterns":[{"match":"(?i)(^|\\\\s+)(definition|implementation|public|inheriting\\\\s+from|final|deferred|abstract|shared\\\\s+memory\\\\s+enabled|(global|local)*\\\\s*friends|(create\\\\s+(p(?:ublic|rotected|rivate)))|for\\\\s+behavior\\\\s+of|for\\\\s+testing|risk\\\\s+level\\\\s+(critical|dangerous|harmless))|duration\\\\s(short|medium|long)(?=\\\\s+|\\\\.)","name":"storage.modifier.class.abap"},{"begin":"(?=[A-Z_a-z][0-9A-Z_a-z]*)","contentName":"entity.name.type.block.abap","end":"(?![0-9A-Z_a-z])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?i)^\\\\s*(method)\\\\s(?:([/_a-z][/-9_a-z]*)~)?([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"},"3":{"name":"entity.name.function.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(BY(?:\\\\s+DATABASE(\\\\s+PROCEDURE|\\\\s+FUNCTION|\\\\s+GRAPH\\\\s+WORKSPACE)|\\\\s+KERNEL\\\\s+MODULE))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=^|\\\\s)(FOR\\\\s+(HDB|LLANG))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=\\\\s)(OPTIONS\\\\s+(READ-ONLY|DETERMINISTIC|SUPPRESS\\\\s+SYNTAX\\\\s+ERRORS))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"match":"(?i)(?<=^|\\\\s)(LANGUAGE\\\\s+(SQLSCRIPT|SQL|GRAPH))(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"},{"captures":{"1":{"name":"storage.modifier.method.abap"}},"match":"(?i)(?<=\\\\s)(USING)\\\\s+([/_a-z][/-9=>_a-z]*)+(?=\\\\s+|\\\\.)"},{"begin":"(?=[A-Z_a-z][0-9A-Z_a-z]*)","end":"(?![0-9A-Z_a-z])","patterns":[{"include":"#generic_names"}]}]},{"begin":"(?i)^\\\\s*(INTERFACE)\\\\s([/_a-z][/-9_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(DEFERRED|PUBLIC)(?=\\\\s+|\\\\.)","name":"storage.modifier.method.abap"}]},{"begin":"(?i)^\\\\s*(FORM)\\\\s([/_a-z][-/-9?_a-z]*)","beginCaptures":{"1":{"name":"storage.type.block.abap"},"2":{"name":"entity.name.type.abap"}},"end":"\\\\s*\\\\.\\\\s*\\\\n?","patterns":[{"match":"(?i)(?<=^|\\\\s)(USING|TABLES|CHANGING|RAISING|IMPLEMENTATION|DEFINITION)(?=\\\\s+|\\\\.)","name":"storage.modifier.form.abap"},{"include":"#abaptypes"},{"include":"#keywords_followed_by_braces"}]},{"match":"(?i)(end(?:class|method|form|interface))","name":"storage.type.block.end.abap"},{"match":"(?i)(<[A-Z_a-z][0-9A-Z_a-z]*>)","name":"variable.other.field.symbol.abap"},{"include":"#keywords"},{"include":"#abap_constants"},{"include":"#reserved_names"},{"include":"#operators"},{"include":"#builtin_functions"},{"include":"#abaptypes"},{"include":"#system_fields"},{"include":"#sql_functions"},{"include":"#sql_types"}],"repository":{"abap_constants":{"match":"(?i)(?<=\\\\s)(initial|null|@?space|@?abap_true|@?abap_false|@?abap_undefined|table_line|%_final|%_hints|%_predefined|col_background|col_group|col_heading|col_key|col_negative|col_normal|col_positive|col_total|adabas|as400|db2|db6|hdb|oracle|sybase|mssqlnt|pos_low|pos_high)(?=[,.\\\\s])","name":"constant.language.abap"},"abaptypes":{"patterns":[{"match":"(?i)\\\\s(abap_bool|string|xstring|any|clike|csequence|numeric|xsequence|decfloat|decfloat16|decfloat34|utclong|simple|int8|[cdfinptx])(?=[,.\\\\s])","name":"support.type.abap"},{"match":"(?i)\\\\s(TYPE|REF|TO|LIKE|LINE|OF|STRUCTURE|STANDARD|SORTED|HASHED|INDEX|TABLE|WITH|UNIQUE|NON-UNIQUE|SECONDARY|DEFAULT|KEY)(?=[,.\\\\s])","name":"keyword.control.simple.abap"}]},"arithmetic_operator":{"match":"(?i)(?<=\\\\s)([-*+]|\\\\*\\\\*|[%/]|DIV|MOD|BIT-AND|BIT-OR|BIT-XOR|BIT-NOT)(?=\\\\s)","name":"keyword.control.simple.abap"},"builtin_functions":{"match":"(?i)(?<=\\\\s)(abs|sign|ceil|floor|trunc|frac|acos|asin|atan|cos|sin|tan|cosh|sinh|tanh|exp|log|log10|sqrt|strlen|xstrlen|charlen|lines|numofchar|dbmaxlen|round|rescale|nmax|nmin|cmax|cmin|boolc|boolx|xsdbool|contains|contains_any_of|contains_any_not_of|matches|line_exists|ipow|char_off|count|count_any_of|count_any_not_of|distance|condense|concat_lines_of|escape|find|find_end|find_any_of|find_any_not_of|insert|match|repeat|replace|reverse|segment|shift_left|shift_right|substring|substring_after|substring_from|substring_before|substring_to|to_upper|to_lower|to_mixed|from_mixed|translate|bit-set|line_index)(?=\\\\()","name":"entity.name.function.builtin.abap"},"comparison_operator":{"match":"(?i)(?<=\\\\s)([<>]|<=|>=|=|<>|eq|ne|lt|le|gt|ge|cs|cp|co|cn|ca|na|ns|np|byte-co|byte-cn|byte-ca|byte-na|byte-cs|byte-ns|[moz])(?=\\\\s)","name":"keyword.control.simple.abap"},"control_keywords":{"match":"(?i)(^|\\\\s)(at|case|catch|continue|do|elseif|else|endat|endcase|endcatch|enddo|endif|endloop|endon|endtry|endwhile|if|loop|on|raise|try|while)(?=[.:\\\\s])","name":"keyword.control.flow.abap"},"generic_names":{"match":"[A-Z_a-z][0-9A-Z_a-z]*"},"keywords":{"patterns":[{"include":"#main_keywords"},{"include":"#text_symbols"},{"include":"#control_keywords"},{"include":"#keywords_followed_by_braces"}]},"keywords_followed_by_braces":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"variable.other.abap"}},"match":"(?i)\\\\b(data|value|field-symbol|final|reference|resumable)\\\\((<?[/_a-z][/-9_a-z]*>?)\\\\)"},"logical_operator":{"match":"(?i)(?<=\\\\s)(not|or|and)(?=\\\\s)","name":"keyword.control.simple.abap"},"main_keywords":{"match":"(?i)(?<=^|\\\\s)(abap-source|abstract|accept|accepting|access|according|action|activation|actual|add|add-corresponding|adjacent|after|alias|aliases|all|allocate|amdp|analysis|analyzer|append|appending|application|archive|area|arithmetic|as|ascending|assert|assign|assigned|assigning|association|asynchronous|at|attributes|authority|authority-check|authorization|auto|back|background|backward|badi|base|before|begin|behavior|between|binary|bit|blanks??|blocks??|bound|boundaries|bounds|boxed|break|break-point|buffer|by|bypassing|byte|byte-order|call|calling|cast|casting|cds|centered|change|changing|channels|char-to-hex|character|check|checkbox|cid|circular|class|class-data|class-events|class-methods??|class-pool|cleanup|clear|clients??|clock|clone|close|cnt|code|collect|color|column|comments??|commit|common|communication|comparing|components??|compression|compute|concatenate|cond|condense|condition|connection|constants??|contexts??|controls??|conv|conversion|convert|copy|corresponding|count|country|cover|create|currency|current|cursor|customer-function|data|database|datainfo|dataset|date|daylight|ddl|deallocate|decimals|declarations|deep|default|deferred|define|delete|deleting|demand|descending|describe|destination|detail|determine|dialog|did|directory|discarding|display|display-mode|distance|distinct|divide|divide-corresponding|dummy|duplicates??|duration|during|dynpro|edit|editor-call|empty|enabled|enabling|encoding|end|end-enhancement-section|end-of-definition|end-of-page|end-of-selection|end-test-injection|end-test-seam|endenhancement|endexec|endfunction|endian|ending|endmodule|endprovide|endselect|endwith|enhancement|enhancement-point|enhancement-section|enhancements|entities|entity|entries|entry|enum|equiv|errors|escape|escaping|events??|exact|except|exception|exception-table|exceptions|excluding|exec|execute|exists|exit|exit-command|expanding|explicit|exponent|export|exporting|extended|extension|extract|fail|failed|features|fetch|field|field-groups|field-symbols|fields|file|fill|filters??|final|find|first|first-line|fixed-point|flush|following|for|format|forward|found|frames??|free|from|full|function|function-pool|generate|get|giving|graph|groups??|handler??|hashed|having|headers??|heading|help-id|help-request|hide|hint|hold|hotspot|icon|id|identification|identifier|ignore|ignoring|immediately|implemented|implicit|import|importing|in|inactive|incl|includes??|including|increment|index|index-line|indicators|infotypes|inheriting|init|initial|initialization|inner|input|insert|instances??|intensified|interface|interface-pool|interfaces|internal|intervals|into|inverse|inverted-date|is|job|join|keep|keeping|kernel|keys??|keywords|kind|language|last|late|layout|leading|leave|left|left-justified|legacy|length|let|levels??|like|line|line-count|line-selection|line-size|linefeed|lines|link|list|list-processing|listbox|load|load-of-program|locale??|locks??|log-point|logical|lower|mapped|mapping|margin|mark|mask|match|matchcode|maximum|members|memory|mesh|message|message-id|messages|messaging|methods??|mode|modif|modifier|modify|module|move|move-corresponding|multiply|multiply-corresponding|name|nametab|native|nested|nesting|new|new-line|new-page|new-section|next|no-display|no-extension|no-gaps??|no-grouping|no-heading|no-scrolling|no-sign|no-title|no-zero|nodes|non-unicode|non-unique|number|objects??|objmgr|obligatory|occurences??|occurrences??|occurs|of|offset|on|only|open|optional|options??|order|others|out|outer|output|output-length|overflow|overlay|pack|package|padding|page|parameter|parameter-table|parameters|part|partially|pcre|perform|performing|permissions|pf-status|places|pool|position|pragmas|preceding|precompiled|preferred|preserving|primary|print|print-control|private|privileged|procedure|process|program|property|protected|provide|push|pushbutton|put|query|queue-only|queueonly|quickinfo|radiobutton|raising|ranges??|read|read-only|received??|receiving|redefinition|reduce|ref|reference|refresh|regex|reject|renaming|replace|replacement|replacing|report|reported|request|requested|required|reserve|reset|resolution|respecting|response|restore|results??|resumable|resume|retry|return|returning|right|right-justified|rollback|rows|rp-provide-from-last|run|sap|sap-spool|save|saving|scan|screen|scroll|scroll-boundary|scrolling|search|seconds|section|select|select-options|selection|selection-screen|selection-sets??|selection-table|selections|send|separated??|session|set|shared|shift|shortdump|shortdump-id|sign|simple|simulation|single|size|skip|skipping|smart|some|sort|sortable|sorted|source|specified|split|spool|spots|sql|stable|stamp|standard|start-of-selection|starting|state|statements??|statics??|statusinfo|step|step-loop|stop|structures??|style|subkey|submatches|submit|subroutine|subscreen|substring|subtract|subtract-corresponding|suffix|sum|summary|supplied|supply|suppress|switch|symbol|syntax-check|syntax-trace|system-call|system-exceptions|tab|tabbed|tables??|tableview|tabstrip|target|tasks??|test|test-injection|test-seam|testing|text|textpool|then|throw|times??|title|titlebar|to|tokens|top-lines|top-of-page|trace-file|trace-table|trailing|transaction|transfer|transformation|translate|transporting|trmac|truncate|truncation|type|type-pools??|types|uline|unassign|unbounded|under|unicode|union|unique|unit|unix|unpack|until|unwind|up|update|upper|user|user-command|using|utf-8|uuid|valid|validate|value|value-request|values|vary|varying|version|via|visible|wait|when|where|windows??|with|with-heading|with-title|without|word|work|workspace|write|xml|zone)(?=[,.:\\\\s])","name":"keyword.control.simple.abap"},"operators":{"patterns":[{"include":"#other_operator"},{"include":"#arithmetic_operator"},{"include":"#comparison_operator"},{"include":"#logical_operator"}]},"other_operator":{"match":"(?<=\\\\s)(&&?|\\\\?=|\\\\+=|-=|/=|\\\\*=|&&=|&=)(?=\\\\s)","name":"keyword.control.simple.abap"},"reserved_names":{"match":"(?i)(?<=\\\\s)(me|super)(?=[,.\\\\s]|->)","name":"constant.language.abap"},"sql_functions":{"match":"(?i)(?<=\\\\s)(abap_system_timezone|abap_user_timezone|abs|add_days|add_months|allow_precision_loss|as_geo_json|avg|bintohex|cast|ceil|coalesce|concat_with_space|concat|corr_spearman|corr|count|currency_conversion|datn_add_days|datn_add_months|datn_days_between|dats_add_days|dats_add_months|dats_days_between|dats_from_datn|dats_is_valid|dats_tims_to_tstmp|dats_to_datn|dayname|days_between|dense_rank|division|div|extract_day|extract_hour|extract_minute|extract_month|extract_second|extract_year|first_value|floor|grouping|hextobin|initcap|instr|is_valid|lag|last_value|lead|left|length|like_regexpr|locate_regexpr_after|locate_regexpr|locate|lower|lpad|ltrim|max|median|min|mod|monthname|ntile|occurrences_regexpr|over|product|rank|replace_regexpr|replace|rigth|round|row_number|rpad|rtrim|stddev|string_agg|substring_regexpr|substring|sum|tims_from_timn|tims_is_valid|tims_to_timn|to_blob|to_clob|tstmp_add_seconds|tstmp_current_utctimestamp|tstmp_is_valid|tstmp_seconds_between|tstmp_to_dats|tstmp_to_dst|tstmp_to_tims|tstmpl_from_utcl|tstmpl_to_utcl|unit_conversion|upper|utcl_add_seconds|utcl_current|utcl_seconds_between|uuid|var|weekday)(?=\\\\()","name":"entity.name.function.sql.abap"},"sql_types":{"match":"(?i)(?<=\\\\s)(char|clnt|cuky|curr|datn|dats|dec|decfloat16|decfloat34|fltp|int1|int2|int4|int8|lang|numc|quan|raw|sstring|timn|tims|unit|utclong)(?=[()\\\\s])","name":"entity.name.type.sql.abap"},"system_fields":{"captures":{"1":{"name":"variable.language.abap"},"2":{"name":"variable.language.abap"}},"match":"(?i)\\\\b(sy)-(abcde|batch|binpt|calld|callr|colno|cpage|cprog|cucol|curow|datar|datlo|datum|dayst|dbcnt|dbnam|dbsysc|dyngr|dynnr|fdayw|fdpos|host|index|langu|ldbpg|lilli|linct|linno|linsz|lisel|listi|loopc|lsind|macol|mandt|marow|modno|msgid|msgli|msgno|msgty|msgv[1-4]|opsysc|pagno|pfkey|repid|saprl|scols|slset|spono|srows|staco|staro|stepl|subrc|sysid|tabix|tcode|tfill|timlo|title|tleng|tvar[0-9]|tzone|ucomm|uline|uname|uzeit|vline|wtitl|zonlo)(?=[.\\\\s])"},"text_symbols":{"captures":{"1":{"name":"keyword.control.simple.abap"},"2":{"name":"constant.numeric.abap"}},"match":"(?i)(?<=^|\\\\s)(text)-([0-9A-Z]{1,3})(?=[,.:\\\\s])"}},"scopeName":"source.abap"}')),a=[e];export{a as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e=Object.freeze(JSON.parse(`{"displayName":"ActionScript","fileTypes":["as"],"name":"actionscript-3","patterns":[{"include":"#comments"},{"include":"#package"},{"include":"#class"},{"include":"#interface"},{"include":"#namespace_declaration"},{"include":"#import"},{"include":"#mxml"},{"include":"#strings"},{"include":"#regexp"},{"include":"#variable_declaration"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#primitive_functions"},{"include":"#function_call"}],"repository":{"arithmetic_operators":{"match":"([-%+/]|(?<!:)\\\\*)","name":"keyword.operator.actionscript.3"},"array_access_operators":{"match":"([]\\\\[])","name":"keyword.operator.actionscript.3"},"class":{"begin":"(^|\\\\s+|;)(\\\\b(dynamic|final|abstract)\\\\b\\\\s+)?(\\\\b(internal|public)\\\\b\\\\s+)?(\\\\b(dynamic|final|abstract)\\\\b\\\\s+)?(?=\\\\bclass\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"},"5":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"}},"end":"}","name":"meta.class.actionscript.3","patterns":[{"include":"#class_declaration"},{"include":"#declaration_code_block"},{"include":"#metadata"},{"include":"#method"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#other_operators"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#arithmetic_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#variable_declaration"},{"include":"#object_literal"},{"include":"#conditional_compilation"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"class_declaration":{"begin":"\\\\b(class)\\\\b\\\\s+([$.0-9A-Z_a-z]+|\\\\*)","beginCaptures":{"1":{"name":"storage.type.class.actionscript.3"},"2":{"name":"entity.name.class.actionscript.3"}},"end":"\\\\{","name":"meta.class_declaration.actionscript.3","patterns":[{"include":"#extends"},{"include":"#implements"},{"include":"#comments"}]},"comments":{"patterns":[{"begin":"/\\\\*\\\\*(?!/)","end":"\\\\*/","name":"comment.block.documentation.actionscript.3","patterns":[{"match":"@(copy|default|eventType|example|exampleText|includeExample|inheritDoc|internal|param|private|return|see|since|throws)\\\\b","name":"keyword.other.documentation.actionscript.3.asdoc"}]},{"begin":"/\\\\*","end":"\\\\*/","name":"comment.block.actionscript.3"},{"match":"//.*","name":"comment.line.actionscript.3"}]},"conditional_compilation":{"captures":{"2":{"name":"constant.other.actionscript.3"},"3":{"name":"constant.other.actionscript.3"}},"match":"(^|\\\\s+|;)\\\\b(\\\\w+)\\\\b::\\\\b(\\\\w+)\\\\b","name":"meta.conditional.actionscript.3"},"control_keywords":{"match":"\\\\b(if|else|do|while|for|each|continue|return|switch|case|default|break|try|catch|finally|throw|with)\\\\b","name":"keyword.control.actionscript.3"},"declaration_code_block":{"begin":"\\\\{","end":"}","name":"meta.code_block.actionscript.3","patterns":[{"include":"#method"},{"include":"#variable_declaration"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#import"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"dynamic_type":{"captures":{"1":{"name":"support.type.actionscript.3"}},"match":"(?<=:)\\\\s*(\\\\*)"},"escapes":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]|37[0-7]?|[4-7][0-7]?|.)","name":"constant.character.escape.actionscript.3"},"extends":{"captures":{"1":{"name":"keyword.other.actionscript.3"},"2":{"name":"entity.other.inherited-class.actionscript.3"},"3":{"name":"entity.other.inherited-class.actionscript.3"}},"match":"\\\\b(extends)\\\\b\\\\s+([$.0-9A-Z_a-z]+)\\\\s*(?:,\\\\s*([$.0-9A-Z_a-z]+))*\\\\s*","name":"meta.extends.actionscript.3"},"function_arguments":{"begin":"\\\\(","end":"\\\\)","name":"meta.function_arguments.actionscript.3","patterns":[{"include":"#parameters"},{"include":"#comments"}]},"function_call":{"captures":{"1":{"name":"entity.name.function.actionscript.3"}},"match":"\\\\b([$0-9A-Z_a-z]+)(?=\\\\s*\\\\()"},"functions":{"begin":"\\\\b(function)\\\\b(?:\\\\s+\\\\b([gs]et)\\\\b\\\\s+)?\\\\s*([$0-9A-Z_a-z]+\\\\b)?","beginCaptures":{"1":{"name":"storage.type.function.actionscript.3"},"2":{"name":"storage.modifier.actionscript.3"},"3":{"name":"entity.name.function.actionscript.3"}},"end":"($|;|(?=\\\\{))","name":"meta.function.actionscript.3","patterns":[{"include":"#function_arguments"},{"include":"#return_type"},{"include":"#comments"}]},"guess_constant":{"captures":{"1":{"name":"constant.other.actionscript.3"}},"match":"\\\\b([$A-Z][0-9A-Z_]+)\\\\b"},"guess_type":{"captures":{"1":{"name":"support.type.actionscript.3"}},"match":"\\\\b((?:[$0-9A-Z_a-z]+\\\\.)*[A-Z][0-9A-Z]*[a-z]+[$0-9A-Z_a-z]*)\\\\b"},"implements":{"captures":{"1":{"name":"keyword.other.actionscript.3"},"2":{"name":"entity.other.inherited-class.actionscript.3"},"3":{"name":"entity.other.inherited-class.actionscript.3"}},"match":"\\\\b(implements)\\\\b\\\\s+([$.0-9A-Z_a-z]+)\\\\s*(?:,\\\\s*([$.0-9A-Z_a-z]+))*\\\\s*","name":"meta.implements.actionscript.3"},"import":{"captures":{"2":{"name":"keyword.control.import.actionscript.3"},"3":{"name":"support.type.actionscript.3"}},"match":"(^|\\\\s+|;)\\\\b(import)\\\\b\\\\s+([$.0-9A-Z_a-z]+(?:\\\\.\\\\*)?)\\\\s*(?=;|$)","name":"meta.import.actionscript.3"},"interface":{"begin":"(^|\\\\s+|;)(\\\\b(internal|public)\\\\b\\\\s+)?(?=\\\\binterface\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"}},"end":"}","name":"meta.interface.actionscript.3","patterns":[{"include":"#interface_declaration"},{"include":"#metadata"},{"include":"#functions"},{"include":"#comments"}]},"interface_declaration":{"begin":"\\\\b(interface)\\\\b\\\\s+([$.0-9A-Z_a-z]+)","beginCaptures":{"1":{"name":"storage.type.interface.actionscript.3"},"2":{"name":"entity.name.class.actionscript.3"}},"end":"\\\\{","name":"meta.class_declaration.actionscript.3","patterns":[{"include":"#extends"},{"include":"#comments"}]},"language_constants":{"match":"\\\\b(true|false|null|Infinity|-Infinity|NaN|undefined)\\\\b","name":"constant.language.actionscript.3"},"language_variables":{"match":"\\\\b(super|this|arguments)\\\\b","name":"variable.language.actionscript.3"},"local_code_block":{"begin":"\\\\{","end":"}","name":"meta.code_block.actionscript.3","patterns":[{"include":"#local_code_block"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#variable_declaration"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#logical_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#control_keywords"},{"include":"#other_keywords"},{"include":"#use_namespace"},{"include":"#functions"},{"include":"#import"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"logical_operators":{"match":"([!\\\\&<>?^|~])","name":"keyword.operator.actionscript.3"},"metadata":{"begin":"(?<=(?:^|[;{}]|\\\\*/)\\\\s*)\\\\[\\\\s*\\\\b([$A-Z_a-z][$0-9A-Z_a-z]+)\\\\b","beginCaptures":{"1":{"name":"keyword.other.actionscript.3"}},"end":"]","name":"meta.metadata_info.actionscript.3","patterns":[{"include":"#metadata_info"}]},"metadata_info":{"begin":"\\\\(","end":"\\\\)","patterns":[{"include":"#strings"},{"captures":{"1":{"name":"variable.parameter.actionscript.3"},"2":{"name":"keyword.operator.actionscript.3"}},"match":"(\\\\w+)\\\\s*(=)"}]},"method":{"begin":"(^|\\\\s+)((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?((\\\\w+)\\\\s+)?(?=\\\\bfunction\\\\b)","beginCaptures":{"3":{"name":"storage.modifier.actionscript.3"},"5":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"},"8":{"name":"storage.modifier.actionscript.3"}},"end":"(?<=([;}]))","name":"meta.method.actionscript.3","patterns":[{"include":"#functions"},{"include":"#local_code_block"}]},"mxml":{"begin":"<!\\\\[CDATA\\\\[","end":"]]>","name":"meta.cdata.actionscript.3","patterns":[{"include":"#comments"},{"include":"#import"},{"include":"#metadata"},{"include":"#class"},{"include":"#namespace_declaration"},{"include":"#use_namespace"},{"include":"#class_declaration"},{"include":"#method"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#other_keywords"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#other_operators"},{"include":"#arithmetic_operators"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#variable_declaration"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"namespace_declaration":{"captures":{"2":{"name":"storage.modifier.actionscript.3"},"3":{"name":"storage.modifier.actionscript.3"}},"match":"((\\\\w+)\\\\s+)?(namespace)\\\\s+[$0-9A-Z_a-z]+","name":"meta.namespace_declaration.actionscript.3"},"numbers":{"match":"\\\\b((0([Xx])\\\\h*)|(([0-9]+\\\\.?[0-9]*)|(\\\\.[0-9]+))(([Ee])([-+])?[0-9]+)?)([Ll]|UL|ul|[FUfu])?\\\\b","name":"constant.numeric.actionscript.3"},"object_literal":{"begin":"\\\\{","end":"}","name":"meta.object_literal.actionscript.3","patterns":[{"include":"#object_literal"},{"include":"#comments"},{"include":"#strings"},{"include":"#regexp"},{"include":"#numbers"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#language_constants"},{"include":"#language_variables"},{"include":"#guess_type"},{"include":"#guess_constant"},{"include":"#array_access_operators"},{"include":"#vector_creation_operators"},{"include":"#functions"},{"include":"#primitive_functions"},{"include":"#function_call"}]},"other_keywords":{"match":"\\\\b(as|delete|in|instanceof|is|native|new|to|typeof)\\\\b","name":"keyword.other.actionscript.3"},"other_operators":{"match":"([.=])","name":"keyword.operator.actionscript.3"},"package":{"begin":"(^|\\\\s+)(package)\\\\b","beginCaptures":{"2":{"name":"keyword.other.actionscript.3"}},"end":"}","name":"meta.package.actionscript.3","patterns":[{"include":"#package_name"},{"include":"#variable_declaration"},{"include":"#method"},{"include":"#comments"},{"include":"#return_type"},{"include":"#import"},{"include":"#use_namespace"},{"include":"#strings"},{"include":"#numbers"},{"include":"#language_constants"},{"include":"#metadata"},{"include":"#class"},{"include":"#interface"},{"include":"#namespace_declaration"}]},"package_name":{"begin":"(?<=package)\\\\s+([._\\\\w]*)\\\\b","end":"\\\\{","name":"meta.package_name.actionscript.3"},"parameters":{"begin":"(\\\\.\\\\.\\\\.)?\\\\s*([$A-Z_a-z][$0-9A-Z_a-z]*)(?:\\\\s*(:)\\\\s*(?:([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)(?:\\\\.<([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)>)?|(\\\\*)))?(?:\\\\s*(=))?","beginCaptures":{"1":{"name":"keyword.operator.actionscript.3"},"2":{"name":"variable.parameter.actionscript.3"},"3":{"name":"keyword.operator.actionscript.3"},"4":{"name":"support.type.actionscript.3"},"5":{"name":"support.type.actionscript.3"},"6":{"name":"support.type.actionscript.3"},"7":{"name":"keyword.operator.actionscript.3"}},"end":",|(?=\\\\))","patterns":[{"include":"#strings"},{"include":"#numbers"},{"include":"#language_constants"},{"include":"#comments"},{"include":"#primitive_types"},{"include":"#primitive_error_types"},{"include":"#dynamic_type"},{"include":"#guess_type"},{"include":"#guess_constant"}]},"primitive_error_types":{"captures":{"1":{"name":"support.class.error.actionscript.3"}},"match":"\\\\b((Argument|Definition|Eval|Internal|Range|Reference|Security|Syntax|Type|URI|Verify)?Error)\\\\b"},"primitive_functions":{"captures":{"1":{"name":"support.function.actionscript.3"}},"match":"\\\\b(decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|escape|isFinite|isNaN|isXMLName|parseFloat|parseInt|trace|unescape)(?=\\\\s*\\\\()"},"primitive_types":{"captures":{"1":{"name":"support.class.builtin.actionscript.3"}},"match":"\\\\b(Array|Boolean|Class|Date|Function|int|JSON|Math|Namespace|Number|Object|QName|RegExp|String|uint|Vector|XML|XMLList|\\\\*(?<=a))\\\\b"},"regexp":{"begin":"(?<=[(,:=\\\\[]|^|return|&&|\\\\|\\\\||!)\\\\s*(/)(?![*+/?{}])","end":"$|(/)[gim]*","name":"string.regex.actionscript.3","patterns":[{"match":"\\\\\\\\.","name":"constant.character.escape.actionscript.3"},{"match":"\\\\[(\\\\\\\\]|[^]])*]","name":"constant.character.class.actionscript.3"}]},"return_type":{"captures":{"1":{"name":"keyword.operator.actionscript.3"},"2":{"name":"support.type.actionscript.3"},"3":{"name":"support.type.actionscript.3"},"4":{"name":"support.type.actionscript.3"}},"match":"(:)\\\\s*([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)(?:\\\\.<([$A-Za-z][$0-9A-Z_a-z]+(?:\\\\.[$A-Za-z][$0-9A-Z_a-z]+)*)>)?|(\\\\*)"},"strings":{"patterns":[{"begin":"@\\"","end":"\\"","name":"string.quoted.verbatim.actionscript.3"},{"begin":"\\"","end":"\\"","name":"string.quoted.double.actionscript.3","patterns":[{"include":"#escapes"}]},{"begin":"'","end":"'","name":"string.quoted.single.actionscript.3","patterns":[{"include":"#escapes"}]}]},"use_namespace":{"captures":{"2":{"name":"keyword.other.actionscript.3"},"3":{"name":"keyword.other.actionscript.3"},"4":{"name":"storage.modifier.actionscript.3"}},"match":"(^|\\\\s+|;)(use\\\\s+)?(namespace)\\\\s+(\\\\w+)\\\\s*(;|$)"},"variable_declaration":{"captures":{"2":{"name":"storage.modifier.actionscript.3"},"4":{"name":"storage.modifier.actionscript.3"},"6":{"name":"storage.modifier.actionscript.3"},"7":{"name":"storage.modifier.actionscript.3"},"8":{"name":"keyword.operator.actionscript.3"}},"match":"((static)\\\\s+)?((\\\\w+)\\\\s+)?((static)\\\\s+)?(const|var)\\\\s+[$0-9A-Z_a-z]+(?:\\\\s*(:))?","name":"meta.variable_declaration.actionscript.3"},"vector_creation_operators":{"match":"([<>])","name":"keyword.operator.actionscript.3"}},"scopeName":"source.actionscript.3","aliases":["actionscript","as3"]}`)),t=[e];export{t as default};
|