@axhub/genie 0.1.8 → 0.1.9
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 +2 -2
- package/dist/assets/App-IUhj6pRQ.js +546 -0
- package/dist/assets/App-qxJ8_QYu.css +32 -0
- package/dist/assets/ReviewApp-B8aNlXpI.js +1 -0
- package/dist/assets/_basePickBy-DF_C8v-X.js +1 -0
- package/dist/assets/_baseUniq-Dl8X6bvw.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-TwO_Ni8v.js +1 -0
- package/dist/assets/architectureDiagram-2XIMDMQ5-Dgm9kjQy.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-BhTxXYHE.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-D3xrrPyf.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-D6xYGBae.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-Fb3wkGSX.js +1 -0
- package/dist/assets/chunk-55IACEB6-CQwPJLM_.js +1 -0
- package/dist/assets/chunk-FMBD7UC4-B3SocdK3.js +15 -0
- package/dist/assets/chunk-JSJVCQXG-4LjhKVWX.js +1 -0
- package/dist/assets/chunk-KX2RTZJC-B5NX8jxL.js +1 -0
- package/dist/assets/chunk-NQ4KR5QH-6puKzw3k.js +220 -0
- package/dist/assets/chunk-QZHKN3VN-CxscPgdC.js +1 -0
- package/dist/assets/chunk-WL4C6EOR-uBFUeI3B.js +189 -0
- package/dist/assets/clarity-D53aC0YG.js +1 -0
- package/dist/assets/classDiagram-VBA2DB6C-CAq2xBD7.js +1 -0
- package/dist/assets/classDiagram-v2-RAHNMMFH-CAq2xBD7.js +1 -0
- package/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/assets/clone-Ci5Ji0hp.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-DlbARPn2.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-D5rHdqja.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-1UmM7jTs.js +24 -0
- package/dist/assets/diagram-IFDJBPK2-BiB8xLQb.js +43 -0
- package/dist/assets/diagram-P4PSJMXO-D0DHiPZv.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-CnRJ2Jix.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-CEgo6QRr.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-BIuQLJvD.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-BgM4MazK.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-CAfp4sq_.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-qMmmT5JC.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-DIJsxqXa.css +1 -0
- package/dist/assets/index-DLN_-tVh.js +2 -0
- package/dist/assets/infoDiagram-LFFYTUFH-CWSerJ0x.js +2 -0
- package/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/ishikawaDiagram-PHBUUO56-CzeVsiJ6.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-D_NYt9lf.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-CX7AUuup.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-DSvVDs_y.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-CVh3kWAl.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-CrPRD2Zy.js +964 -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-w_orDc4B.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-Ddit1h2q.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-DVw1s8Ut.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-DQPZpp_9.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-CfbFynOx.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-BO9n1wra.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-CRL3ceNd.js +1 -0
- package/dist/assets/stateDiagram-v2-FVOUBMTO-CZOgjDCg.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-BR7smGEM.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-DkR8x0Kw.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-D5if-Qdt.js} +3 -3
- package/dist/assets/{vendor-react-C3RJLQGO.js → vendor-react-CSz7XC90.js} +11 -11
- package/dist/assets/vennDiagram-LZ73GAT5-DS7XpPV_.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-BgjSBvNS.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 +34 -20
- package/dist/sw.js +18 -46
- package/package.json +10 -7
- 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 +151 -3
- package/server/cli.js +21 -21
- package/server/database/db.js +438 -372
- package/server/gemini-cli.js +106 -19
- package/server/index.js +63 -105
- package/server/load-env.js +16 -13
- package/server/openai-codex.js +144 -9
- package/server/projects.js +340 -331
- package/server/routes/agent.js +424 -29
- 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/runtimeWriter.js +55 -0
- package/server/utils/agentCallback.js +273 -0
- package/server/utils/codexPath.js +47 -0
- package/shared/conversationEvents.js +1031 -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
|
@@ -32,6 +32,8 @@ const pendingToolApprovals = new Map();
|
|
|
32
32
|
// This does not change SDK limits; it only defines how long we wait for the UI,
|
|
33
33
|
// introduced to avoid hanging the run when no decision arrives.
|
|
34
34
|
const TOOL_APPROVAL_TIMEOUT_MS = parseInt(process.env.CLAUDE_TOOL_APPROVAL_TIMEOUT_MS, 10) || 55000;
|
|
35
|
+
const CLAUDE_STREAM_START_TIMEOUT_MS = parseInt(process.env.CLAUDE_STREAM_START_TIMEOUT_MS, 10) || 20000;
|
|
36
|
+
const CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS = parseInt(process.env.CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS, 10) || 45000;
|
|
35
37
|
|
|
36
38
|
// Generate a stable request ID for UI approval flows.
|
|
37
39
|
// This does not encode tool details or get shown to users; it exists so the UI
|
|
@@ -273,6 +275,48 @@ function transformMessage(sdkMessage) {
|
|
|
273
275
|
return sdkMessage;
|
|
274
276
|
}
|
|
275
277
|
|
|
278
|
+
function messageHasMeaningfulClaudeOutput(message) {
|
|
279
|
+
if (!message || typeof message !== 'object') {
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
if (message.type === 'system' && message.subtype === 'init') {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (message.type === 'content_block_delta') {
|
|
288
|
+
return typeof message.delta?.text === 'string' && message.delta.text.trim().length > 0;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (message.type === 'thinking') {
|
|
292
|
+
return typeof message.message?.content === 'string' && message.message.content.trim().length > 0;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (message.type === 'tool_use' || message.type === 'tool_result') {
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const contentParts = Array.isArray(message.content)
|
|
300
|
+
? message.content
|
|
301
|
+
: Array.isArray(message.message?.content)
|
|
302
|
+
? message.message.content
|
|
303
|
+
: null;
|
|
304
|
+
|
|
305
|
+
if (contentParts) {
|
|
306
|
+
return contentParts.some((part) => (
|
|
307
|
+
(part?.type === 'text' && typeof part.text === 'string' && part.text.trim().length > 0) ||
|
|
308
|
+
part?.type === 'tool_use' ||
|
|
309
|
+
part?.type === 'tool_result'
|
|
310
|
+
));
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (typeof message.content === 'string' && message.content.trim().length > 0) {
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
|
|
276
320
|
/**
|
|
277
321
|
* Extracts token usage from SDK result messages
|
|
278
322
|
* @param {Object} resultMessage - SDK result message
|
|
@@ -473,6 +517,75 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
473
517
|
let sessionCreatedSent = false;
|
|
474
518
|
let tempImagePaths = [];
|
|
475
519
|
let tempDir = null;
|
|
520
|
+
let queryInstance = null;
|
|
521
|
+
let startupTimeoutId = null;
|
|
522
|
+
let meaningfulOutputTimeoutId = null;
|
|
523
|
+
let timeoutTriggered = false;
|
|
524
|
+
let timeoutErrorMessage = null;
|
|
525
|
+
|
|
526
|
+
const clearStartupTimeout = () => {
|
|
527
|
+
if (startupTimeoutId) {
|
|
528
|
+
clearTimeout(startupTimeoutId);
|
|
529
|
+
startupTimeoutId = null;
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
const clearMeaningfulOutputTimeout = () => {
|
|
534
|
+
if (meaningfulOutputTimeoutId) {
|
|
535
|
+
clearTimeout(meaningfulOutputTimeoutId);
|
|
536
|
+
meaningfulOutputTimeoutId = null;
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
|
|
540
|
+
const interruptTimedOutQuery = () => {
|
|
541
|
+
if (!queryInstance || typeof queryInstance.interrupt !== 'function') {
|
|
542
|
+
return;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
Promise.resolve(queryInstance.interrupt()).catch((interruptError) => {
|
|
546
|
+
console.warn('Failed to interrupt Claude SDK query after timeout:', interruptError);
|
|
547
|
+
});
|
|
548
|
+
};
|
|
549
|
+
|
|
550
|
+
const triggerStreamTimeout = (message) => {
|
|
551
|
+
if (timeoutTriggered) {
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
timeoutTriggered = true;
|
|
556
|
+
timeoutErrorMessage = message;
|
|
557
|
+
interruptTimedOutQuery();
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
const armStartupTimeout = () => {
|
|
561
|
+
clearStartupTimeout();
|
|
562
|
+
|
|
563
|
+
if (!Number.isFinite(CLAUDE_STREAM_START_TIMEOUT_MS) || CLAUDE_STREAM_START_TIMEOUT_MS <= 0) {
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
startupTimeoutId = setTimeout(() => {
|
|
568
|
+
triggerStreamTimeout(
|
|
569
|
+
`Claude did not produce any stream events within ${Math.round(CLAUDE_STREAM_START_TIMEOUT_MS / 1000)} seconds. ` +
|
|
570
|
+
'This usually means the Claude client or upstream service is unavailable.'
|
|
571
|
+
);
|
|
572
|
+
}, CLAUDE_STREAM_START_TIMEOUT_MS);
|
|
573
|
+
};
|
|
574
|
+
|
|
575
|
+
const armMeaningfulOutputTimeout = () => {
|
|
576
|
+
clearMeaningfulOutputTimeout();
|
|
577
|
+
|
|
578
|
+
if (!Number.isFinite(CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS) || CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS <= 0) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
meaningfulOutputTimeoutId = setTimeout(() => {
|
|
583
|
+
triggerStreamTimeout(
|
|
584
|
+
`Claude did not produce any assistant output within ${Math.round(CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS / 1000)} seconds. ` +
|
|
585
|
+
'The upstream Claude service may be unavailable or stuck before the first response.'
|
|
586
|
+
);
|
|
587
|
+
}, CLAUDE_MEANINGFUL_OUTPUT_TIMEOUT_MS);
|
|
588
|
+
};
|
|
476
589
|
|
|
477
590
|
try {
|
|
478
591
|
// Map CLI options to SDK format
|
|
@@ -554,14 +667,29 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
554
667
|
sdkOptions.disallowedTools = sdkOptions.disallowedTools.filter(entry => entry !== decision.rememberEntry);
|
|
555
668
|
}
|
|
556
669
|
}
|
|
670
|
+
ws.send({
|
|
671
|
+
type: 'claude-permission-resolved',
|
|
672
|
+
requestId,
|
|
673
|
+
status: 'approved',
|
|
674
|
+
toolName,
|
|
675
|
+
sessionId: capturedSessionId || sessionId || null
|
|
676
|
+
});
|
|
557
677
|
return { behavior: 'allow', updatedInput: decision.updatedInput ?? input };
|
|
558
678
|
}
|
|
559
679
|
|
|
680
|
+
ws.send({
|
|
681
|
+
type: 'claude-permission-resolved',
|
|
682
|
+
requestId,
|
|
683
|
+
status: 'denied',
|
|
684
|
+
toolName,
|
|
685
|
+
message: decision.message ?? 'User denied tool use',
|
|
686
|
+
sessionId: capturedSessionId || sessionId || null
|
|
687
|
+
});
|
|
560
688
|
return { behavior: 'deny', message: decision.message ?? 'User denied tool use' };
|
|
561
689
|
};
|
|
562
690
|
|
|
563
691
|
// Create SDK query instance
|
|
564
|
-
|
|
692
|
+
queryInstance = query({
|
|
565
693
|
prompt: finalCommand,
|
|
566
694
|
options: sdkOptions
|
|
567
695
|
});
|
|
@@ -573,7 +701,11 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
573
701
|
|
|
574
702
|
// Process streaming messages
|
|
575
703
|
console.log('Starting async generator loop for session:', capturedSessionId || 'NEW');
|
|
704
|
+
armStartupTimeout();
|
|
705
|
+
armMeaningfulOutputTimeout();
|
|
576
706
|
for await (const message of queryInstance) {
|
|
707
|
+
clearStartupTimeout();
|
|
708
|
+
|
|
577
709
|
// Capture session ID from first message
|
|
578
710
|
if (message.session_id && !capturedSessionId) {
|
|
579
711
|
|
|
@@ -590,7 +722,8 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
590
722
|
sessionCreatedSent = true;
|
|
591
723
|
ws.send({
|
|
592
724
|
type: 'session-created',
|
|
593
|
-
sessionId: capturedSessionId
|
|
725
|
+
sessionId: capturedSessionId,
|
|
726
|
+
provider: 'claude'
|
|
594
727
|
});
|
|
595
728
|
} else {
|
|
596
729
|
console.log('Not sending session-created. sessionId:', sessionId, 'sessionCreatedSent:', sessionCreatedSent);
|
|
@@ -604,9 +737,14 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
604
737
|
ws.send({
|
|
605
738
|
type: 'claude-response',
|
|
606
739
|
data: transformedMessage,
|
|
740
|
+
provider: 'claude',
|
|
607
741
|
sessionId: capturedSessionId || sessionId || null
|
|
608
742
|
});
|
|
609
743
|
|
|
744
|
+
if (messageHasMeaningfulClaudeOutput(message)) {
|
|
745
|
+
clearMeaningfulOutputTimeout();
|
|
746
|
+
}
|
|
747
|
+
|
|
610
748
|
// Extract and send token budget updates from result messages
|
|
611
749
|
if (message.type === 'result') {
|
|
612
750
|
const tokenBudget = extractTokenBudget(message);
|
|
@@ -615,12 +753,17 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
615
753
|
ws.send({
|
|
616
754
|
type: 'token-budget',
|
|
617
755
|
data: tokenBudget,
|
|
756
|
+
provider: 'claude',
|
|
618
757
|
sessionId: capturedSessionId || sessionId || null
|
|
619
758
|
});
|
|
620
759
|
}
|
|
621
760
|
}
|
|
622
761
|
}
|
|
623
762
|
|
|
763
|
+
if (timeoutTriggered) {
|
|
764
|
+
throw new Error(timeoutErrorMessage);
|
|
765
|
+
}
|
|
766
|
+
|
|
624
767
|
// Clean up session on completion
|
|
625
768
|
if (capturedSessionId) {
|
|
626
769
|
removeSession(capturedSessionId);
|
|
@@ -633,6 +776,7 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
633
776
|
console.log('Streaming complete, sending claude-complete event');
|
|
634
777
|
ws.send({
|
|
635
778
|
type: 'claude-complete',
|
|
779
|
+
provider: 'claude',
|
|
636
780
|
sessionId: capturedSessionId,
|
|
637
781
|
exitCode: 0,
|
|
638
782
|
isNewSession: !sessionId && !!command
|
|
@@ -653,11 +797,15 @@ async function queryClaudeSDK(command, options = {}, ws) {
|
|
|
653
797
|
// Send error to WebSocket
|
|
654
798
|
ws.send({
|
|
655
799
|
type: 'claude-error',
|
|
656
|
-
error: error.message,
|
|
800
|
+
error: timeoutErrorMessage || error.message,
|
|
801
|
+
provider: 'claude',
|
|
657
802
|
sessionId: capturedSessionId || sessionId || null
|
|
658
803
|
});
|
|
659
804
|
|
|
660
805
|
throw error;
|
|
806
|
+
} finally {
|
|
807
|
+
clearStartupTimeout();
|
|
808
|
+
clearMeaningfulOutputTimeout();
|
|
661
809
|
}
|
|
662
810
|
}
|
|
663
811
|
|
package/server/cli.js
CHANGED
|
@@ -72,10 +72,10 @@ function loadEnvFile() {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
// Get the
|
|
76
|
-
function
|
|
75
|
+
// Get the data file path (same logic as db.js)
|
|
76
|
+
function getDataFilePath() {
|
|
77
77
|
loadEnvFile();
|
|
78
|
-
return process.env.
|
|
78
|
+
return process.env.DATA_FILE_PATH || path.join(__dirname, 'database', 'state.json');
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
// Get the installation directory
|
|
@@ -253,15 +253,15 @@ function showStatus(options = {}) {
|
|
|
253
253
|
console.log(`\n${c.info('[INFO]')} Installation Directory:`);
|
|
254
254
|
console.log(` ${c.dim(installDir)}`);
|
|
255
255
|
|
|
256
|
-
//
|
|
257
|
-
const
|
|
258
|
-
const
|
|
259
|
-
console.log(`\n${c.info('[INFO]')}
|
|
260
|
-
console.log(` ${c.dim(
|
|
261
|
-
console.log(` Status: ${
|
|
256
|
+
// Data file location
|
|
257
|
+
const dataFilePath = getDataFilePath();
|
|
258
|
+
const dataFileExists = fs.existsSync(dataFilePath);
|
|
259
|
+
console.log(`\n${c.info('[INFO]')} Data File Location:`);
|
|
260
|
+
console.log(` ${c.dim(dataFilePath)}`);
|
|
261
|
+
console.log(` Status: ${dataFileExists ? c.ok('[OK] Exists') : c.warn('[WARN] Not created yet (will be created on first run)')}`);
|
|
262
262
|
|
|
263
|
-
if (
|
|
264
|
-
const stats = fs.statSync(
|
|
263
|
+
if (dataFileExists) {
|
|
264
|
+
const stats = fs.statSync(dataFilePath);
|
|
265
265
|
console.log(` Size: ${c.dim((stats.size / 1024).toFixed(2) + ' KB')}`);
|
|
266
266
|
console.log(` Modified: ${c.dim(stats.mtime.toLocaleString())}`);
|
|
267
267
|
}
|
|
@@ -295,7 +295,7 @@ function showStatus(options = {}) {
|
|
|
295
295
|
// Environment variables
|
|
296
296
|
console.log(`\n${c.info('[INFO]')} Configuration:`);
|
|
297
297
|
console.log(` PORT: ${c.bright(configuredPort)} ${c.dim(process.env.PORT ? '' : '(default)')}`);
|
|
298
|
-
console.log(`
|
|
298
|
+
console.log(` DATA_FILE_PATH: ${c.dim(process.env.DATA_FILE_PATH || '(using default location)')}`);
|
|
299
299
|
console.log(` CLAUDE_CLI_PATH: ${c.dim(process.env.CLAUDE_CLI_PATH || 'claude (default)')}`);
|
|
300
300
|
console.log(` CONTEXT_WINDOW: ${c.dim(process.env.CONTEXT_WINDOW || '160000 (default)')}`);
|
|
301
301
|
|
|
@@ -316,7 +316,7 @@ function showStatus(options = {}) {
|
|
|
316
316
|
console.log('\n' + c.dim('═'.repeat(60)));
|
|
317
317
|
console.log(`\n${c.tip('[TIP]')} Hints:`);
|
|
318
318
|
console.log(` ${c.dim('>')} Use ${c.bright('axhub-genie --port 8080')} to run on a custom port`);
|
|
319
|
-
console.log(` ${c.dim('>')} Use ${c.bright('axhub-genie --
|
|
319
|
+
console.log(` ${c.dim('>')} Use ${c.bright('axhub-genie --data-file-path /path/to/state.json')} for custom data file`);
|
|
320
320
|
console.log(` ${c.dim('>')} Run ${c.bright('axhub-genie help')} for all options`);
|
|
321
321
|
console.log(` ${c.dim('>')} Access the UI at http://localhost:${displayPort}\n`);
|
|
322
322
|
}
|
|
@@ -341,7 +341,7 @@ Commands:
|
|
|
341
341
|
|
|
342
342
|
Options:
|
|
343
343
|
-p, --port <port> Set server port (default: 32123)
|
|
344
|
-
--
|
|
344
|
+
--data-file-path <path> Set custom data file location
|
|
345
345
|
--json Output status as JSON (for scripts)
|
|
346
346
|
-h, --help Show this help information
|
|
347
347
|
-v, --version Show version information
|
|
@@ -357,7 +357,7 @@ Examples:
|
|
|
357
357
|
|
|
358
358
|
Environment Variables:
|
|
359
359
|
PORT Set server port (default: 32123)
|
|
360
|
-
|
|
360
|
+
DATA_FILE_PATH Set custom data file location
|
|
361
361
|
CLAUDE_CLI_PATH Set custom Claude CLI path
|
|
362
362
|
CONTEXT_WINDOW Set context window size (default: 160000)
|
|
363
363
|
AXHUB_GENIE_STATUS_PATH Set runtime status file path
|
|
@@ -453,10 +453,10 @@ function parseArgs(args) {
|
|
|
453
453
|
parsed.options.port = args[++i];
|
|
454
454
|
} else if (arg.startsWith('--port=')) {
|
|
455
455
|
parsed.options.port = arg.split('=')[1];
|
|
456
|
-
} else if (arg === '--
|
|
457
|
-
parsed.options.
|
|
458
|
-
} else if (arg.startsWith('--
|
|
459
|
-
parsed.options.
|
|
456
|
+
} else if (arg === '--data-file-path') {
|
|
457
|
+
parsed.options.dataFilePath = args[++i];
|
|
458
|
+
} else if (arg.startsWith('--data-file-path=')) {
|
|
459
|
+
parsed.options.dataFilePath = arg.split('=')[1];
|
|
460
460
|
} else if (arg === '--json') {
|
|
461
461
|
parsed.options.json = true;
|
|
462
462
|
} else if (arg === '--help' || arg === '-h') {
|
|
@@ -482,8 +482,8 @@ async function main() {
|
|
|
482
482
|
if (options.port) {
|
|
483
483
|
process.env.PORT = options.port;
|
|
484
484
|
}
|
|
485
|
-
if (options.
|
|
486
|
-
process.env.
|
|
485
|
+
if (options.dataFilePath) {
|
|
486
|
+
process.env.DATA_FILE_PATH = options.dataFilePath;
|
|
487
487
|
}
|
|
488
488
|
|
|
489
489
|
switch (command) {
|