@axhub/genie 0.1.8 → 0.2.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/README.md +1 -1
- package/dist/api-docs.html +6 -6
- package/dist/assets/App-BfaNALgf.js +504 -0
- package/dist/assets/App-qxJ8_QYu.css +32 -0
- package/dist/assets/ReviewApp-DIT2yWk-.js +1 -0
- package/dist/assets/_basePickBy-Dz3NcIVK.js +1 -0
- package/dist/assets/_baseUniq-DON_Sg7x.js +1 -0
- package/dist/assets/abap-BdImnpbu.js +1 -0
- package/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/assets/ada-bCR0ucgS.js +1 -0
- package/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/assets/apache-Pmp26Uib.js +1 -0
- package/dist/assets/apex-D8_7TLub.js +1 -0
- package/dist/assets/apl-dKokRX4l.js +1 -0
- package/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/assets/ara-BRHolxvo.js +1 -0
- package/dist/assets/arc-Y4G80q-l.js +1 -0
- package/dist/assets/architectureDiagram-2XIMDMQ5-D_qR4657.js +36 -0
- package/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/assets/astro-CbQHKStN.js +1 -0
- package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/assets/awk-DMzUqQB5.js +1 -0
- package/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/assets/bat-BkioyH1T.js +1 -0
- package/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/assets/berry-uYugtg8r.js +1 -0
- package/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/assets/bird2-DPOp833l.js +1 -0
- package/dist/assets/blade-D4QpJJKB.js +1 -0
- package/dist/assets/blockDiagram-WCTKOSBZ-NsmAlV5_.js +132 -0
- package/dist/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/assets/c-BIGW1oBm.js +1 -0
- package/dist/assets/c3-eo99z4R2.js +1 -0
- package/dist/assets/c4Diagram-IC4MRINW-cbOJM4yr.js +10 -0
- package/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/assets/channel-C6KNnXlA.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-bLBhl74J.js +1 -0
- package/dist/assets/chunk-55IACEB6-D8kNkDUO.js +1 -0
- package/dist/assets/chunk-FMBD7UC4-BjR6UbXB.js +15 -0
- package/dist/assets/chunk-JSJVCQXG-luNqWn64.js +1 -0
- package/dist/assets/chunk-KX2RTZJC-CNnKm6dK.js +1 -0
- package/dist/assets/chunk-NQ4KR5QH-Cp9gb43u.js +220 -0
- package/dist/assets/chunk-QZHKN3VN-HlVYo2Oq.js +1 -0
- package/dist/assets/chunk-WL4C6EOR-CjSZoOGO.js +189 -0
- package/dist/assets/clarity-D53aC0YG.js +1 -0
- package/dist/assets/classDiagram-VBA2DB6C-BQlzzlH7.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-BQlzzlH7.js +1 -0
- package/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/assets/clone-DMxS3qWP.js +1 -0
- package/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/assets/cobol-nwyudZeR.js +1 -0
- package/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/assets/coq-DkFqJrB1.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-DZWRjeEd.js +1 -0
- package/dist/assets/cpp-CofmeUqb.js +1 -0
- package/dist/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/assets/css-DPfMkruS.js +1 -0
- package/dist/assets/csv-fuZLfV_i.js +1 -0
- package/dist/assets/cue-D82EKSYY.js +1 -0
- package/dist/assets/cypher-COkxafJQ.js +1 -0
- package/dist/assets/cytoscape.esm-2ZfV8NB5.js +331 -0
- package/dist/assets/d-85-TOEBH.js +1 -0
- package/dist/assets/dagre-KLK3FWXG-yAzUmqI7.js +4 -0
- package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/assets/dart-CF10PKvl.js +1 -0
- package/dist/assets/dax-CEL-wOlO.js +1 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/assets/diagram-E7M64L7V-CvzlIvDJ.js +24 -0
- package/dist/assets/diagram-IFDJBPK2-DFMIJpuM.js +43 -0
- package/dist/assets/diagram-P4PSJMXO-KL-J3gyb.js +24 -0
- package/dist/assets/diff-D97Zzqfu.js +1 -0
- package/dist/assets/docker-BcOcwvcX.js +1 -0
- package/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/assets/edge-BkV0erSs.js +1 -0
- package/dist/assets/elixir-CDX3lj18.js +1 -0
- package/dist/assets/elm-DbKCFpqz.js +1 -0
- package/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/assets/erDiagram-INFDFZHY-BXszHbTM.js +70 -0
- package/dist/assets/erb-B12qg9BL.js +1 -0
- package/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/assets/fennel-BYunw83y.js +1 -0
- package/dist/assets/fish-BvzEVeQv.js +1 -0
- package/dist/assets/flowDiagram-PKNHOUZH-Ba43NVp6.js +162 -0
- package/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/assets/ganttDiagram-A5KZAMGK-uLHfhCrg.js +292 -0
- package/dist/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/assets/genie-D0YGMca9.js +1 -0
- package/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/assets/gitGraphDiagram-K3NZZRJ6-BTEuFaiL.js +65 -0
- package/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/assets/gleam-BspZqrRM.js +1 -0
- package/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/assets/glsl-DplSGwfg.js +1 -0
- package/dist/assets/gn-n2N0HUVH.js +1 -0
- package/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/assets/go-CxLEBnE3.js +1 -0
- package/dist/assets/graph-h2nuWjx4.js +1 -0
- package/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/assets/hack-CaT9iCJl.js +1 -0
- package/dist/assets/haml-B8DHNrY2.js +1 -0
- package/dist/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/assets/highlighted-body-TPN3WLV5-C6BY7XZJ.js +1 -0
- package/dist/assets/hjson-D5-asLiD.js +1 -0
- package/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/assets/houston-DnULxvSX.js +1 -0
- package/dist/assets/html-GMplVEZG.js +1 -0
- package/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/assets/http-jrhK8wxY.js +1 -0
- package/dist/assets/hurl-irOxFIW8.js +1 -0
- package/dist/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/assets/hy-DFXneXwc.js +1 -0
- package/dist/assets/imba-DGztddWO.js +1 -0
- package/dist/assets/index-2198VgsK.css +1 -0
- package/dist/assets/index-C6Bb2jGF.js +2 -0
- package/dist/assets/infoDiagram-LFFYTUFH-BOLfvCIq.js +2 -0
- package/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/ishikawaDiagram-PHBUUO56-BRzQ1ee5.js +70 -0
- package/dist/assets/java-CylS5w8V.js +1 -0
- package/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/assets/jison-wvAkD_A8.js +1 -0
- package/dist/assets/journeyDiagram-4ABVD52K-DXm_VcMy.js +139 -0
- package/dist/assets/json-Cp-IABpG.js +1 -0
- package/dist/assets/json5-C9tS-k6U.js +1 -0
- package/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/assets/julia-CxzCAyBv.js +1 -0
- package/dist/assets/just-Cw27pwNe.js +1 -0
- package/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/assets/kanban-definition-K7BYSVSG-D_oyzopl.js +89 -0
- package/dist/assets/kdl-DV7GczEv.js +1 -0
- package/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/assets/kusto-DZf3V79B.js +1 -0
- package/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/assets/layout-Q8YoR_E1.js +1 -0
- package/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/assets/less-B1dDrJ26.js +1 -0
- package/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/assets/linear-B3qNg7di.js +1 -0
- package/dist/assets/liquid-DYVedYrR.js +1 -0
- package/dist/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/assets/log-2UxHyX5q.js +1 -0
- package/dist/assets/logo-BtOb2qkB.js +1 -0
- package/dist/assets/lua-BaeVxFsk.js +1 -0
- package/dist/assets/luau-C-HG3fhB.js +1 -0
- package/dist/assets/make-CHLpvVh8.js +1 -0
- package/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/assets/marko-CnJfTvn9.js +1 -0
- package/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/assets/matlab-D7o27uSR.js +1 -0
- package/dist/assets/mdc-BMNejdWA.js +1 -0
- package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/assets/mermaid-O7DHMXV3-BVZ_4MKo.js +988 -0
- package/dist/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/assets/min-light-CTRr51gU.js +1 -0
- package/dist/assets/mindmap-definition-YRQLILUH-CjulgYdi.js +68 -0
- package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/assets/move-IF9eRakj.js +1 -0
- package/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/assets/nim-CVrawwO9.js +1 -0
- package/dist/assets/nix-CwoSXNpI.js +1 -0
- package/dist/assets/nord-Ddv68eIx.js +1 -0
- package/dist/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/assets/odin-BBf5iR-q.js +1 -0
- package/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/assets/perl-C0TMdlhV.js +1 -0
- package/dist/assets/php-Dhbhpdrm.js +1 -0
- package/dist/assets/pieDiagram-SKSYHLDU-8VzrefxA.js +30 -0
- package/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/assets/po-BTJTHyun.js +1 -0
- package/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/assets/polar-C0HS_06l.js +1 -0
- package/dist/assets/postcss-CXtECtnM.js +1 -0
- package/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/assets/pug-CGlum2m_.js +1 -0
- package/dist/assets/puppet-BMWR74SV.js +1 -0
- package/dist/assets/purescript-CklMAg4u.js +1 -0
- package/dist/assets/python-B6aJPvgy.js +1 -0
- package/dist/assets/qml-3beO22l8.js +1 -0
- package/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/assets/qss-IeuSbFQv.js +1 -0
- package/dist/assets/quadrantDiagram-337W2JSQ-CFh-ijm2.js +7 -0
- package/dist/assets/r-Dspwwk_N.js +1 -0
- package/dist/assets/racket-BqYA7rlc.js +1 -0
- package/dist/assets/raku-DXvB9xmW.js +1 -0
- package/dist/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/assets/red-bN70gL4F.js +1 -0
- package/dist/assets/reg-C-SQnVFl.js +1 -0
- package/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/assets/rel-C3B-1QV4.js +1 -0
- package/dist/assets/requirementDiagram-Z7DCOOCP-BNPlTs5Q.js +73 -0
- package/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/assets/ron-D8l8udqQ.js +1 -0
- package/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/assets/rst-BrH8l1NY.js +1 -0
- package/dist/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/assets/rust-B1yitclQ.js +1 -0
- package/dist/assets/sankeyDiagram-WA2Y5GQK-C5l_hYst.js +10 -0
- package/dist/assets/sas-cz2c8ADy.js +1 -0
- package/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/assets/scala-C151Ov-r.js +1 -0
- package/dist/assets/scheme-C98Dy4si.js +1 -0
- package/dist/assets/scss-OYdSNvt2.js +1 -0
- package/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/assets/sequenceDiagram-2WXFIKYE-B4a_rQw8.js +145 -0
- package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/assets/solidity-rGO070M0.js +1 -0
- package/dist/assets/soy-Brmx7dQM.js +1 -0
- package/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/assets/sql-BLtJtn59.js +1 -0
- package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/assets/stata-BH5u7GGu.js +1 -0
- package/dist/assets/stateDiagram-RAJIS63D-Bt4mMmKB.js +1 -0
- package/dist/assets/stateDiagram-v2-FVOUBMTO-6NYMazfq.js +1 -0
- package/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/assets/swift-D82vCrfD.js +1 -0
- package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/assets/templ-P3uqSqPl.js +1 -0
- package/dist/assets/terraform-BETggiCN.js +1 -0
- package/dist/assets/tex-idrVyKtj.js +1 -0
- package/dist/assets/timeline-definition-YZTLITO2-CLYvSw_R.js +61 -0
- package/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/assets/toml-vGWfd6FD.js +1 -0
- package/dist/assets/treemap-KZPCXAKY-ksND0hZK.js +162 -0
- package/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/assets/tsx-COt5Ahok.js +1 -0
- package/dist/assets/turtle-BsS91CYL.js +1 -0
- package/dist/assets/twig-DNn4PbVi.js +1 -0
- package/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/assets/typst-DHCkPAjA.js +1 -0
- package/dist/assets/v-BcVCzyr7.js +1 -0
- package/dist/assets/vala-CsfeWuGM.js +1 -0
- package/dist/assets/vb-D17OF-Vu.js +1 -0
- package/dist/assets/{vendor-codemirror-B88_OPWf.js → vendor-codemirror-Dz7_EqNA.js} +3 -3
- package/dist/assets/{vendor-react-C3RJLQGO.js → vendor-react-Cpt6D04s.js} +11 -11
- package/dist/assets/vennDiagram-LZ73GAT5-CaQg4oZK.js +34 -0
- package/dist/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/assets/vesper-DU1UobuO.js +1 -0
- package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/assets/viml-CJc9bBzg.js +1 -0
- package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/assets/vue-DN_0RTcg.js +1 -0
- package/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/assets/wit-5i3qLPDT.js +1 -0
- package/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/assets/xychartDiagram-JWTSCODW-C8dCbTeM.js +7 -0
- package/dist/assets/yaml-Buea-lGh.js +1 -0
- package/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/assets/zig-VOosw3JB.js +1 -0
- package/dist/index.html +35 -21
- package/dist/manifest.json +1 -1
- package/dist/sw.js +18 -46
- package/package.json +12 -8
- package/server/bin/codex-sdk-wrapper.js +49 -0
- package/server/channels/runtime/AgentRuntimeAdapter.js +2 -5
- package/server/channels/store/ChannelStore.js +73 -107
- package/server/claude-sdk.js +160 -6
- package/server/cli.js +590 -32
- package/server/cli.test.js +76 -0
- package/server/database/db.js +438 -372
- package/server/external-agent/auth.js +88 -0
- package/server/external-agent/service.js +1052 -0
- package/server/external-agent/service.test.js +41 -0
- package/server/external-agent/ws.js +1526 -0
- package/server/external-agent/ws.test.js +289 -0
- package/server/gemini-cli.js +108 -20
- package/server/index.js +115 -121
- package/server/load-env.js +16 -13
- package/server/openai-codex.js +165 -11
- package/server/opencode-cli.js +3 -2
- package/server/projects.js +432 -338
- package/server/routes/agent.js +347 -459
- package/server/routes/auth.js +14 -36
- package/server/routes/cli-auth.js +60 -113
- package/server/routes/commands.js +16 -26
- package/server/routes/git.js +5 -16
- package/server/routes/projects.js +2 -7
- package/server/routes/session-core.js +177 -0
- package/server/session-core/abortSession.js +48 -0
- package/server/session-core/eventStore.js +139 -0
- package/server/session-core/providerAdapters.js +84 -0
- package/server/session-core/providerDiscovery.js +235 -0
- package/server/session-core/runtimeState.js +390 -0
- package/server/session-core/runtimeWriter.js +59 -0
- package/server/utils/agentCallback.js +273 -0
- package/server/utils/agentImages.js +253 -0
- package/server/utils/codexPath.js +47 -0
- package/server/utils/defaultWorkingDirectory.js +34 -0
- package/shared/conversationEvents.js +1071 -0
- package/shared/modelConstants.js +18 -24
- package/dist/assets/index-CVjMty4a.js +0 -902
- package/dist/assets/index-eo5scY_Z.css +0 -32
- package/server/cursor-cli.js +0 -276
- package/server/database/init.sql +0 -98
- package/server/routes/cursor.js +0 -795
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { db } from '../../database/db.js';
|
|
1
|
+
import { channelDb } from '../../database/db.js';
|
|
4
2
|
|
|
5
3
|
const DEFAULT_CONFIGS = {
|
|
6
4
|
lark: {
|
|
@@ -52,21 +50,32 @@ function getDefaultConfig(platform) {
|
|
|
52
50
|
return { ...(DEFAULT_CONFIGS[normalizePlatform(platform)] || DEFAULT_CONFIGS.lark) };
|
|
53
51
|
}
|
|
54
52
|
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
function mapAllowedUser(entry) {
|
|
54
|
+
if (!entry) return null;
|
|
55
|
+
return {
|
|
56
|
+
id: entry.id,
|
|
57
|
+
platformType: entry.platform_type,
|
|
58
|
+
userId: entry.user_id,
|
|
59
|
+
displayName: entry.display_name,
|
|
60
|
+
note: entry.note,
|
|
61
|
+
isActive: entry.is_active,
|
|
62
|
+
createdAt: entry.created_at,
|
|
63
|
+
updatedAt: entry.updated_at,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
60
66
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
function mapChannelSession(entry) {
|
|
68
|
+
if (!entry) return null;
|
|
69
|
+
return {
|
|
70
|
+
id: entry.id,
|
|
71
|
+
platformType: entry.platform_type,
|
|
72
|
+
userId: entry.user_id,
|
|
73
|
+
chatId: entry.chat_id,
|
|
74
|
+
backend: entry.backend,
|
|
75
|
+
providerSessionId: entry.provider_session_id,
|
|
76
|
+
projectPath: entry.project_path,
|
|
77
|
+
updatedAt: entry.updated_at,
|
|
78
|
+
};
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
export class ChannelStore {
|
|
@@ -79,14 +88,14 @@ export class ChannelStore {
|
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
getPluginConfig(pluginId = 'lark_default') {
|
|
82
|
-
const row =
|
|
91
|
+
const row = channelDb.getPlugin(pluginId);
|
|
83
92
|
const platform = resolvePlatformByPluginId(pluginId);
|
|
84
93
|
|
|
85
94
|
if (!row) {
|
|
86
95
|
return {
|
|
87
96
|
id: pluginId,
|
|
88
97
|
type: platform,
|
|
89
|
-
enabled:
|
|
98
|
+
enabled: false,
|
|
90
99
|
status: 'stopped',
|
|
91
100
|
config: getDefaultConfig(platform),
|
|
92
101
|
};
|
|
@@ -95,9 +104,12 @@ export class ChannelStore {
|
|
|
95
104
|
return {
|
|
96
105
|
id: row.id,
|
|
97
106
|
type: row.type || platform,
|
|
98
|
-
enabled: row.enabled,
|
|
107
|
+
enabled: !!row.enabled,
|
|
99
108
|
status: row.status,
|
|
100
|
-
config:
|
|
109
|
+
config: {
|
|
110
|
+
...getDefaultConfig(row.type || platform),
|
|
111
|
+
...(row.config || {}),
|
|
112
|
+
},
|
|
101
113
|
updatedAt: row.updated_at,
|
|
102
114
|
};
|
|
103
115
|
}
|
|
@@ -105,30 +117,18 @@ export class ChannelStore {
|
|
|
105
117
|
upsertPluginConfig(pluginId = 'lark_default', patch = {}) {
|
|
106
118
|
const existing = this.getPluginConfig(pluginId);
|
|
107
119
|
const type = resolvePlatformByPluginId(pluginId);
|
|
108
|
-
const nextConfig = {
|
|
109
|
-
...existing.config,
|
|
110
|
-
...patch,
|
|
111
|
-
};
|
|
112
120
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
db.prepare(`
|
|
116
|
-
INSERT INTO channel_plugins (id, type, enabled, status, config_json, updated_at)
|
|
117
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
118
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
119
|
-
type = excluded.type,
|
|
120
|
-
enabled = excluded.enabled,
|
|
121
|
-
status = excluded.status,
|
|
122
|
-
config_json = excluded.config_json,
|
|
123
|
-
updated_at = excluded.updated_at
|
|
124
|
-
`).run(
|
|
125
|
-
pluginId,
|
|
121
|
+
channelDb.upsertPlugin({
|
|
122
|
+
id: pluginId,
|
|
126
123
|
type,
|
|
127
|
-
existing.enabled
|
|
128
|
-
existing.status || 'stopped',
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
enabled: !!existing.enabled,
|
|
125
|
+
status: existing.status || 'stopped',
|
|
126
|
+
config: {
|
|
127
|
+
...existing.config,
|
|
128
|
+
...patch,
|
|
129
|
+
},
|
|
130
|
+
updated_at: now(),
|
|
131
|
+
});
|
|
132
132
|
|
|
133
133
|
return this.getPluginConfig(pluginId);
|
|
134
134
|
}
|
|
@@ -136,35 +136,21 @@ export class ChannelStore {
|
|
|
136
136
|
updatePluginRuntimeStatus(pluginId = 'lark_default', enabled, status) {
|
|
137
137
|
const existing = this.getPluginConfig(pluginId);
|
|
138
138
|
const type = resolvePlatformByPluginId(pluginId);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
INSERT INTO channel_plugins (id, type, enabled, status, config_json, updated_at)
|
|
143
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
144
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
145
|
-
enabled = excluded.enabled,
|
|
146
|
-
status = excluded.status,
|
|
147
|
-
updated_at = excluded.updated_at
|
|
148
|
-
`).run(
|
|
149
|
-
pluginId,
|
|
139
|
+
|
|
140
|
+
channelDb.upsertPlugin({
|
|
141
|
+
id: pluginId,
|
|
150
142
|
type,
|
|
151
|
-
enabled
|
|
143
|
+
enabled: !!enabled,
|
|
152
144
|
status,
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
);
|
|
145
|
+
config: existing.config,
|
|
146
|
+
updated_at: now(),
|
|
147
|
+
});
|
|
156
148
|
|
|
157
149
|
return this.getPluginConfig(pluginId);
|
|
158
150
|
}
|
|
159
151
|
|
|
160
152
|
listAllowedUsers(platform = 'lark') {
|
|
161
|
-
|
|
162
|
-
return db.prepare(`
|
|
163
|
-
SELECT id, platform_type AS platformType, user_id AS userId, display_name AS displayName, note, is_active AS isActive, created_at AS createdAt, updated_at AS updatedAt
|
|
164
|
-
FROM channel_allowed_users
|
|
165
|
-
WHERE platform_type = ?
|
|
166
|
-
ORDER BY created_at DESC
|
|
167
|
-
`).all(normalizedPlatform);
|
|
153
|
+
return channelDb.listAllowedUsers(normalizePlatform(platform)).map(mapAllowedUser);
|
|
168
154
|
}
|
|
169
155
|
|
|
170
156
|
addAllowedUser(platform = 'lark', { userId, displayName = null, note = null }) {
|
|
@@ -174,63 +160,43 @@ export class ChannelStore {
|
|
|
174
160
|
throw new Error('userId is required');
|
|
175
161
|
}
|
|
176
162
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
`).run(normalizedPlatform, trimmedUserId, displayName ? String(displayName).trim() : null, note ? String(note).trim() : null, current, current);
|
|
183
|
-
|
|
184
|
-
return db.prepare(`
|
|
185
|
-
SELECT id, platform_type AS platformType, user_id AS userId, display_name AS displayName, note, is_active AS isActive, created_at AS createdAt, updated_at AS updatedAt
|
|
186
|
-
FROM channel_allowed_users
|
|
187
|
-
WHERE platform_type = ? AND user_id = ?
|
|
188
|
-
`).get(normalizedPlatform, trimmedUserId);
|
|
163
|
+
return mapAllowedUser(channelDb.addAllowedUser(normalizedPlatform, {
|
|
164
|
+
userId: trimmedUserId,
|
|
165
|
+
displayName: displayName ? String(displayName).trim() : null,
|
|
166
|
+
note: note ? String(note).trim() : null,
|
|
167
|
+
}));
|
|
189
168
|
}
|
|
190
169
|
|
|
191
170
|
removeAllowedUser(platform = 'lark', id) {
|
|
192
|
-
|
|
193
|
-
const result = db.prepare('DELETE FROM channel_allowed_users WHERE platform_type = ? AND id = ?').run(normalizedPlatform, id);
|
|
194
|
-
return result.changes > 0;
|
|
171
|
+
return channelDb.removeAllowedUser(normalizePlatform(platform), id);
|
|
195
172
|
}
|
|
196
173
|
|
|
197
174
|
toggleAllowedUser(platform = 'lark', id, isActive) {
|
|
198
|
-
|
|
199
|
-
const result = db.prepare('UPDATE channel_allowed_users SET is_active = ?, updated_at = ? WHERE platform_type = ? AND id = ?').run(isActive ? 1 : 0, now(), normalizedPlatform, id);
|
|
200
|
-
return result.changes > 0;
|
|
175
|
+
return channelDb.toggleAllowedUser(normalizePlatform(platform), id, isActive);
|
|
201
176
|
}
|
|
202
177
|
|
|
203
178
|
isAllowedUser(platform = 'lark', userId) {
|
|
204
|
-
const normalizedPlatform = normalizePlatform(platform);
|
|
205
179
|
if (!userId) return false;
|
|
206
|
-
|
|
207
|
-
return !!row;
|
|
180
|
+
return channelDb.isAllowedUser(normalizePlatform(platform), String(userId));
|
|
208
181
|
}
|
|
209
182
|
|
|
210
183
|
getChannelSession({ platform = 'lark', userId, chatId, backend }) {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
`).get(normalizedPlatform, userId, chatId, backend) || null;
|
|
184
|
+
return mapChannelSession(channelDb.getChannelSession({
|
|
185
|
+
platform: normalizePlatform(platform),
|
|
186
|
+
userId,
|
|
187
|
+
chatId,
|
|
188
|
+
backend,
|
|
189
|
+
}));
|
|
218
190
|
}
|
|
219
191
|
|
|
220
192
|
upsertChannelSession({ platform = 'lark', userId, chatId, backend, providerSessionId, projectPath }) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
provider_session_id = excluded.provider_session_id,
|
|
230
|
-
project_path = excluded.project_path,
|
|
231
|
-
updated_at = excluded.updated_at
|
|
232
|
-
`).run(id, normalizedPlatform, userId, chatId, backend, providerSessionId || null, projectPath || null, updatedAt);
|
|
233
|
-
|
|
234
|
-
return this.getChannelSession({ platform: normalizedPlatform, userId, chatId, backend });
|
|
193
|
+
return mapChannelSession(channelDb.upsertChannelSession({
|
|
194
|
+
platform: normalizePlatform(platform),
|
|
195
|
+
userId,
|
|
196
|
+
chatId,
|
|
197
|
+
backend,
|
|
198
|
+
providerSessionId,
|
|
199
|
+
projectPath,
|
|
200
|
+
}));
|
|
235
201
|
}
|
|
236
202
|
}
|
package/server/claude-sdk.js
CHANGED
|
@@ -20,6 +20,7 @@ import { promises as fs } from 'fs';
|
|
|
20
20
|
import path from 'path';
|
|
21
21
|
import os from 'os';
|
|
22
22
|
import { CLAUDE_MODELS } from '../shared/modelConstants.js';
|
|
23
|
+
import { resolveWorkingDirectory } from './utils/defaultWorkingDirectory.js';
|
|
23
24
|
|
|
24
25
|
// Session tracking: Map of session IDs to active query instances
|
|
25
26
|
const activeSessions = new Map();
|
|
@@ -32,6 +33,8 @@ const pendingToolApprovals = new Map();
|
|
|
32
33
|
// This does not change SDK limits; it only defines how long we wait for the UI,
|
|
33
34
|
// introduced to avoid hanging the run when no decision arrives.
|
|
34
35
|
const TOOL_APPROVAL_TIMEOUT_MS = parseInt(process.env.CLAUDE_TOOL_APPROVAL_TIMEOUT_MS, 10) || 55000;
|
|
36
|
+
const CLAUDE_STREAM_START_TIMEOUT_MS = parseInt(process.env.CLAUDE_STREAM_START_TIMEOUT_MS, 10) || 20000;
|
|
37
|
+
const CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS = parseInt(process.env.CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS, 10) || 45000;
|
|
35
38
|
|
|
36
39
|
// Generate a stable request ID for UI approval flows.
|
|
37
40
|
// This does not encode tool details or get shown to users; it exists so the UI
|
|
@@ -273,6 +276,48 @@ function transformMessage(sdkMessage) {
|
|
|
273
276
|
return sdkMessage;
|
|
274
277
|
}
|
|
275
278
|
|
|
279
|
+
function messageHasMeaningfulClaudeOutput(message) {
|
|
280
|
+
if (!message || typeof message !== 'object') {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
if (message.type === 'system' && message.subtype === 'init') {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (message.type === 'content_block_delta') {
|
|
289
|
+
return typeof message.delta?.text === 'string' && message.delta.text.trim().length > 0;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (message.type === 'thinking') {
|
|
293
|
+
return typeof message.message?.content === 'string' && message.message.content.trim().length > 0;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (message.type === 'tool_use' || message.type === 'tool_result') {
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
const contentParts = Array.isArray(message.content)
|
|
301
|
+
? message.content
|
|
302
|
+
: Array.isArray(message.message?.content)
|
|
303
|
+
? message.message.content
|
|
304
|
+
: null;
|
|
305
|
+
|
|
306
|
+
if (contentParts) {
|
|
307
|
+
return contentParts.some((part) => (
|
|
308
|
+
(part?.type === 'text' && typeof part.text === 'string' && part.text.trim().length > 0) ||
|
|
309
|
+
part?.type === 'tool_use' ||
|
|
310
|
+
part?.type === 'tool_result'
|
|
311
|
+
));
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (typeof message.content === 'string' && message.content.trim().length > 0) {
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
|
|
276
321
|
/**
|
|
277
322
|
* Extracts token usage from SDK result messages
|
|
278
323
|
* @param {Object} resultMessage - SDK result message
|
|
@@ -468,24 +513,98 @@ async function loadMcpConfig(cwd) {
|
|
|
468
513
|
* @returns {Promise<void>}
|
|
469
514
|
*/
|
|
470
515
|
async function queryClaudeSDK(command, options = {}, ws) {
|
|
516
|
+
const workingDirectory = resolveWorkingDirectory(options);
|
|
517
|
+
const effectiveOptions = {
|
|
518
|
+
...options,
|
|
519
|
+
cwd: workingDirectory
|
|
520
|
+
};
|
|
471
521
|
const { sessionId } = options;
|
|
472
522
|
let capturedSessionId = sessionId;
|
|
473
523
|
let sessionCreatedSent = false;
|
|
474
524
|
let tempImagePaths = [];
|
|
475
525
|
let tempDir = null;
|
|
526
|
+
let queryInstance = null;
|
|
527
|
+
let startupTimeoutId = null;
|
|
528
|
+
let meaningfulOutputTimeoutId = null;
|
|
529
|
+
let timeoutTriggered = false;
|
|
530
|
+
let timeoutErrorMessage = null;
|
|
531
|
+
|
|
532
|
+
const clearStartupTimeout = () => {
|
|
533
|
+
if (startupTimeoutId) {
|
|
534
|
+
clearTimeout(startupTimeoutId);
|
|
535
|
+
startupTimeoutId = null;
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
const clearMeaningfulOutputTimeout = () => {
|
|
540
|
+
if (meaningfulOutputTimeoutId) {
|
|
541
|
+
clearTimeout(meaningfulOutputTimeoutId);
|
|
542
|
+
meaningfulOutputTimeoutId = null;
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
const interruptTimedOutQuery = () => {
|
|
547
|
+
if (!queryInstance || typeof queryInstance.interrupt !== 'function') {
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
Promise.resolve(queryInstance.interrupt()).catch((interruptError) => {
|
|
552
|
+
console.warn('Failed to interrupt Claude SDK query after timeout:', interruptError);
|
|
553
|
+
});
|
|
554
|
+
};
|
|
555
|
+
|
|
556
|
+
const triggerStreamTimeout = (message) => {
|
|
557
|
+
if (timeoutTriggered) {
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
timeoutTriggered = true;
|
|
562
|
+
timeoutErrorMessage = message;
|
|
563
|
+
interruptTimedOutQuery();
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
const armStartupTimeout = () => {
|
|
567
|
+
clearStartupTimeout();
|
|
568
|
+
|
|
569
|
+
if (!Number.isFinite(CLAUDE_STREAM_START_TIMEOUT_MS) || CLAUDE_STREAM_START_TIMEOUT_MS <= 0) {
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
startupTimeoutId = setTimeout(() => {
|
|
574
|
+
triggerStreamTimeout(
|
|
575
|
+
`Claude did not produce any stream events within ${Math.round(CLAUDE_STREAM_START_TIMEOUT_MS / 1000)} seconds. ` +
|
|
576
|
+
'This usually means the Claude client or upstream service is unavailable.'
|
|
577
|
+
);
|
|
578
|
+
}, CLAUDE_STREAM_START_TIMEOUT_MS);
|
|
579
|
+
};
|
|
580
|
+
|
|
581
|
+
const armMeaningfulOutputTimeout = () => {
|
|
582
|
+
clearMeaningfulOutputTimeout();
|
|
583
|
+
|
|
584
|
+
if (!Number.isFinite(CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS) || CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS <= 0) {
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
meaningfulOutputTimeoutId = setTimeout(() => {
|
|
589
|
+
triggerStreamTimeout(
|
|
590
|
+
`Claude did not produce any assistant output within ${Math.round(CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS / 1000)} seconds. ` +
|
|
591
|
+
'The upstream Claude service may be unavailable or stuck before the first response.'
|
|
592
|
+
);
|
|
593
|
+
}, CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS);
|
|
594
|
+
};
|
|
476
595
|
|
|
477
596
|
try {
|
|
478
597
|
// Map CLI options to SDK format
|
|
479
|
-
const sdkOptions = mapCliOptionsToSDK(
|
|
598
|
+
const sdkOptions = mapCliOptionsToSDK(effectiveOptions);
|
|
480
599
|
|
|
481
600
|
// Load MCP configuration
|
|
482
|
-
const mcpServers = await loadMcpConfig(
|
|
601
|
+
const mcpServers = await loadMcpConfig(effectiveOptions.cwd);
|
|
483
602
|
if (mcpServers) {
|
|
484
603
|
sdkOptions.mcpServers = mcpServers;
|
|
485
604
|
}
|
|
486
605
|
|
|
487
606
|
// Handle images - save to temp files and modify prompt
|
|
488
|
-
const imageResult = await handleImages(command,
|
|
607
|
+
const imageResult = await handleImages(command, effectiveOptions.images, effectiveOptions.cwd);
|
|
489
608
|
const finalCommand = imageResult.modifiedCommand;
|
|
490
609
|
tempImagePaths = imageResult.tempImagePaths;
|
|
491
610
|
tempDir = imageResult.tempDir;
|
|
@@ -554,14 +673,29 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
554
673
|
sdkOptions.disallowedTools = sdkOptions.disallowedTools.filter(entry => entry !== decision.rememberEntry);
|
|
555
674
|
}
|
|
556
675
|
}
|
|
676
|
+
ws.send({
|
|
677
|
+
type: 'claude-permission-resolved',
|
|
678
|
+
requestId,
|
|
679
|
+
status: 'approved',
|
|
680
|
+
toolName,
|
|
681
|
+
sessionId: capturedSessionId || sessionId || null
|
|
682
|
+
});
|
|
557
683
|
return { behavior: 'allow', updatedInput: decision.updatedInput ?? input };
|
|
558
684
|
}
|
|
559
685
|
|
|
686
|
+
ws.send({
|
|
687
|
+
type: 'claude-permission-resolved',
|
|
688
|
+
requestId,
|
|
689
|
+
status: 'denied',
|
|
690
|
+
toolName,
|
|
691
|
+
message: decision.message ?? 'User denied tool use',
|
|
692
|
+
sessionId: capturedSessionId || sessionId || null
|
|
693
|
+
});
|
|
560
694
|
return { behavior: 'deny', message: decision.message ?? 'User denied tool use' };
|
|
561
695
|
};
|
|
562
696
|
|
|
563
697
|
// Create SDK query instance
|
|
564
|
-
|
|
698
|
+
queryInstance = query({
|
|
565
699
|
prompt: finalCommand,
|
|
566
700
|
options: sdkOptions
|
|
567
701
|
});
|
|
@@ -573,7 +707,11 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
573
707
|
|
|
574
708
|
// Process streaming messages
|
|
575
709
|
console.log('Starting async generator loop for session:', capturedSessionId || 'NEW');
|
|
710
|
+
armStartupTimeout();
|
|
711
|
+
armMeaningfulOutputTimeout();
|
|
576
712
|
for await (const message of queryInstance) {
|
|
713
|
+
clearStartupTimeout();
|
|
714
|
+
|
|
577
715
|
// Capture session ID from first message
|
|
578
716
|
if (message.session_id && !capturedSessionId) {
|
|
579
717
|
|
|
@@ -590,7 +728,8 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
590
728
|
sessionCreatedSent = true;
|
|
591
729
|
ws.send({
|
|
592
730
|
type: 'session-created',
|
|
593
|
-
sessionId: capturedSessionId
|
|
731
|
+
sessionId: capturedSessionId,
|
|
732
|
+
provider: 'claude'
|
|
594
733
|
});
|
|
595
734
|
} else {
|
|
596
735
|
console.log('Not sending session-created. sessionId:', sessionId, 'sessionCreatedSent:', sessionCreatedSent);
|
|
@@ -604,9 +743,14 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
604
743
|
ws.send({
|
|
605
744
|
type: 'claude-response',
|
|
606
745
|
data: transformedMessage,
|
|
746
|
+
provider: 'claude',
|
|
607
747
|
sessionId: capturedSessionId || sessionId || null
|
|
608
748
|
});
|
|
609
749
|
|
|
750
|
+
if (messageHasMeaningfulClaudeOutput(message)) {
|
|
751
|
+
clearMeaningfulOutputTimeout();
|
|
752
|
+
}
|
|
753
|
+
|
|
610
754
|
// Extract and send token budget updates from result messages
|
|
611
755
|
if (message.type === 'result') {
|
|
612
756
|
const tokenBudget = extractTokenBudget(message);
|
|
@@ -615,12 +759,17 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
615
759
|
ws.send({
|
|
616
760
|
type: 'token-budget',
|
|
617
761
|
data: tokenBudget,
|
|
762
|
+
provider: 'claude',
|
|
618
763
|
sessionId: capturedSessionId || sessionId || null
|
|
619
764
|
});
|
|
620
765
|
}
|
|
621
766
|
}
|
|
622
767
|
}
|
|
623
768
|
|
|
769
|
+
if (timeoutTriggered) {
|
|
770
|
+
throw new Error(timeoutErrorMessage);
|
|
771
|
+
}
|
|
772
|
+
|
|
624
773
|
// Clean up session on completion
|
|
625
774
|
if (capturedSessionId) {
|
|
626
775
|
removeSession(capturedSessionId);
|
|
@@ -633,6 +782,7 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
633
782
|
console.log('Streaming complete, sending claude-complete event');
|
|
634
783
|
ws.send({
|
|
635
784
|
type: 'claude-complete',
|
|
785
|
+
provider: 'claude',
|
|
636
786
|
sessionId: capturedSessionId,
|
|
637
787
|
exitCode: 0,
|
|
638
788
|
isNewSession: !sessionId && !!command
|
|
@@ -653,11 +803,15 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
653
803
|
// Send error to WebSocket
|
|
654
804
|
ws.send({
|
|
655
805
|
type: 'claude-error',
|
|
656
|
-
error: error.message,
|
|
806
|
+
error: timeoutErrorMessage || error.message,
|
|
807
|
+
provider: 'claude',
|
|
657
808
|
sessionId: capturedSessionId || sessionId || null
|
|
658
809
|
});
|
|
659
810
|
|
|
660
811
|
throw error;
|
|
812
|
+
} finally {
|
|
813
|
+
clearStartupTimeout();
|
|
814
|
+
clearMeaningfulOutputTimeout();
|
|
661
815
|
}
|
|
662
816
|
}
|
|
663
817
|
|