@aiderdesk/aiderdesk 0.61.0 → 0.62.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/out/renderer/assets/{_baseUniq-BPF2Herp.js → _baseUniq-B7TxjYgy.js} +1 -1
- package/out/renderer/assets/abap-B7h4dtBh.js +7 -0
- package/out/renderer/assets/actionscript-3-DtnkuHN2.js +7 -0
- package/out/renderer/assets/ada-BZS802Se.js +7 -0
- package/out/renderer/assets/andromeeda-C847lm7Z.js +4 -0
- package/out/renderer/assets/angular-html-BYG42TJr.js +42 -0
- package/out/renderer/assets/angular-ts-BftcHvZ6.js +29 -0
- package/out/renderer/assets/apache-D4roVlsU.js +7 -0
- package/out/renderer/assets/apex-B-mI3Md2.js +7 -0
- package/out/renderer/assets/apl-CGZawg-A.js +18 -0
- package/out/renderer/assets/applescript-C43Knf0G.js +7 -0
- package/out/renderer/assets/ara-DRBH84ND.js +7 -0
- package/out/renderer/assets/{arc-DfPLteHF.js → arc-TuVjX2tH.js} +1 -1
- package/out/renderer/assets/{architectureDiagram-Q4EWVU46-Bw0u-sSH.js → architectureDiagram-Q4EWVU46-CnAcyRvO.js} +5 -5
- package/out/renderer/assets/asciidoc-CT8_dLUs.js +7 -0
- package/out/renderer/assets/asm-3tg4MVib.js +7 -0
- package/out/renderer/assets/astro-BxdWOZvM.js +19 -0
- package/out/renderer/assets/aurora-x-wJ4-eM2h.js +4 -0
- package/out/renderer/assets/awk-ChreaG-G.js +7 -0
- package/out/renderer/assets/ayu-dark-rtpbXCNg.js +4 -0
- package/out/renderer/assets/ayu-light-BCZDSyV8.js +4 -0
- package/out/renderer/assets/ayu-mirage-BVoH71sA.js +4 -0
- package/out/renderer/assets/ballerina-B0yt0TYU.js +7 -0
- package/out/renderer/assets/bat-BzNgQIA7.js +7 -0
- package/out/renderer/assets/beancount-aZWrE5WV.js +7 -0
- package/out/renderer/assets/berry--Qc8OslH.js +7 -0
- package/out/renderer/assets/bibtex-BLeFwAes.js +7 -0
- package/out/renderer/assets/bicep-DbBeGdXQ.js +7 -0
- package/out/renderer/assets/bird2-aXhIUHPg.js +7 -0
- package/out/renderer/assets/blade-BbH7YAUi.js +22 -0
- package/out/renderer/assets/{blockDiagram-DXYQGD6D-CkfB9if8.js → blockDiagram-DXYQGD6D-DBoJhGAM.js} +6 -6
- package/out/renderer/assets/bsl-DwPS0BId.js +9 -0
- package/out/renderer/assets/c-C4VtT7JA.js +7 -0
- package/out/renderer/assets/c3-CWHczQMq.js +7 -0
- package/out/renderer/assets/{c4Diagram-AHTNJAMY-DweK9Liz.js → c4Diagram-AHTNJAMY-BzW0gKwX.js} +2 -2
- package/out/renderer/assets/cadence-S_NtR5Dy.js +7 -0
- package/out/renderer/assets/cairo-BtYx2aM5.js +9 -0
- package/out/renderer/assets/catppuccin-frappe-C21OPQfC.js +4 -0
- package/out/renderer/assets/catppuccin-latte-0ZtXlsrX.js +4 -0
- package/out/renderer/assets/catppuccin-macchiato-BD_FR4sl.js +4 -0
- package/out/renderer/assets/catppuccin-mocha-C653csR5.js +4 -0
- package/out/renderer/assets/{channel-C5wwrRof.js → channel-CqR4FAVX.js} +1 -1
- package/out/renderer/assets/{chunk-4BX2VUAB-0KM14cFd.js → chunk-4BX2VUAB-DQjg_Naa.js} +1 -1
- package/out/renderer/assets/{chunk-4TB4RGXK-CmVtCVL4.js → chunk-4TB4RGXK-DkcI1yaW.js} +5 -5
- package/out/renderer/assets/{chunk-55IACEB6-BzVYZvBM.js → chunk-55IACEB6-pFPEMTmI.js} +1 -1
- package/out/renderer/assets/{chunk-EDXVE4YY-BryQl5Kv.js → chunk-EDXVE4YY-DRk838hn.js} +1 -1
- package/out/renderer/assets/{chunk-FMBD7UC4-CRiLea_e.js → chunk-FMBD7UC4-BagQdd5u.js} +1 -1
- package/out/renderer/assets/{chunk-OYMX7WX6-Cpi4N3NO.js → chunk-OYMX7WX6-DOGJ-XHp.js} +3 -3
- package/out/renderer/assets/{chunk-QZHKN3VN-BT8kABWC.js → chunk-QZHKN3VN-CdzjbbBk.js} +1 -1
- package/out/renderer/assets/{chunk-YZCP3GAM-OLZV_Sef.js → chunk-YZCP3GAM-BKZRTlUj.js} +1 -1
- package/out/renderer/assets/clarity-D2ViJC0i.js +7 -0
- package/out/renderer/assets/{classDiagram-6PBFFD2Q-VdE6G90i.js → classDiagram-6PBFFD2Q-CjVhmlxb.js} +6 -6
- package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-VdE6G90i.js → classDiagram-v2-HSJHXN6E-CjVhmlxb.js} +6 -6
- package/out/renderer/assets/clojure-C_G4_w5x.js +7 -0
- package/out/renderer/assets/{clone-DwQZ86nS.js → clone-B-kqpcr4.js} +1 -1
- package/out/renderer/assets/cmake-CDfQILeU.js +7 -0
- package/out/renderer/assets/cobol-B8r1pfPr.js +13 -0
- package/out/renderer/assets/codeowners-awy7PWCD.js +7 -0
- package/out/renderer/assets/codeql-lfK8ppuq.js +7 -0
- package/out/renderer/assets/coffee-XLjtuEYs.js +9 -0
- package/out/renderer/assets/common-lisp-DAq1kaby.js +7 -0
- package/out/renderer/assets/coq-l_JvzFJl.js +7 -0
- package/out/renderer/assets/{cose-bilkent-S5V4N54A-BEcAKM9H.js → cose-bilkent-S5V4N54A-CZLRecVB.js} +1 -1
- package/out/renderer/assets/cpp-zh2ePAE_.js +22 -0
- package/out/renderer/assets/crystal-BqBRy7Ec.js +19 -0
- package/out/renderer/assets/csharp-DxX_6tHh.js +7 -0
- package/out/renderer/assets/css-BtVcDqlU.js +7 -0
- package/out/renderer/assets/csv-Ba84L8e5.js +7 -0
- package/out/renderer/assets/cue-BFSVLV6N.js +7 -0
- package/out/renderer/assets/cypher-DbUmWIxC.js +7 -0
- package/out/renderer/assets/d-9qSZPw74.js +7 -0
- package/out/renderer/assets/{dagre-KV5264BT-BcFQYL1M.js → dagre-KV5264BT-BUAzC7Um.js} +6 -6
- package/out/renderer/assets/dark-plus-DmZ1Dzd4.js +4 -0
- package/out/renderer/assets/dart-CCSsOg9l.js +7 -0
- package/out/renderer/assets/dax-CvsmLV-B.js +7 -0
- package/out/renderer/assets/desktop-_xiGZ9X1.js +7 -0
- package/out/renderer/assets/{diagram-5BDNPKRD-GrUNdC1u.js → diagram-5BDNPKRD-DNQEDszc.js} +6 -6
- package/out/renderer/assets/{diagram-G4DWMVQ6-CG4S-ov5.js → diagram-G4DWMVQ6-D9YY6W2O.js} +6 -6
- package/out/renderer/assets/{diagram-MMDJMWI5-9ogY3MRC.js → diagram-MMDJMWI5-B5H49OVD.js} +5 -5
- package/out/renderer/assets/{diagram-TYMM5635-Ck7mI1bS.js → diagram-TYMM5635-Bw7r467p.js} +5 -5
- package/out/renderer/assets/diff-BEdzuHlE.js +7 -0
- package/out/renderer/assets/docker-CUaLOm2I.js +7 -0
- package/out/renderer/assets/dotenv-Bb4iNxXK.js +7 -0
- package/out/renderer/assets/dracula-B8-AVrwI.js +4 -0
- package/out/renderer/assets/dracula-soft-BHeefow7.js +4 -0
- package/out/renderer/assets/dream-maker-CNLQpoF-.js +7 -0
- package/out/renderer/assets/edge-CnHxQ_FD.js +15 -0
- package/out/renderer/assets/elixir-B_LIBv5J.js +11 -0
- package/out/renderer/assets/elm-BlO7pcFp.js +10 -0
- package/out/renderer/assets/emacs-lisp-4gdXY_g3.js +7 -0
- package/out/renderer/assets/{erDiagram-SMLLAGMA-Dvf_c-7M.js → erDiagram-SMLLAGMA-Bz4ALNLp.js} +4 -4
- package/out/renderer/assets/erb-Bzn22wO6.js +28 -0
- package/out/renderer/assets/erlang-Ch5kuXHm.js +9 -0
- package/out/renderer/assets/everforest-dark-Cg1xdODP.js +4 -0
- package/out/renderer/assets/everforest-light-BmTD3bxe.js +4 -0
- package/out/renderer/assets/fennel-BTELNkeT.js +7 -0
- package/out/renderer/assets/fish-kGF2-4SL.js +7 -0
- package/out/renderer/assets/{flowDiagram-DWJPFMVM-CPDjOXYp.js → flowDiagram-DWJPFMVM-Uqg1ZeN2.js} +6 -6
- package/out/renderer/assets/fluent-YyC28MRr.js +7 -0
- package/out/renderer/assets/fortran-fixed-form-CpmOyvS5.js +9 -0
- package/out/renderer/assets/fortran-free-form-5X94ETMi.js +7 -0
- package/out/renderer/assets/fsharp-5vtGqRR9.js +9 -0
- package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-B4dJrK-3.js → ganttDiagram-T4ZO3ILL-Dm0tRLCH.js} +1 -1
- package/out/renderer/assets/gdresource-B5TLWiFO.js +11 -0
- package/out/renderer/assets/gdscript-CNW3Aj-d.js +7 -0
- package/out/renderer/assets/gdshader-BEzE4j_3.js +7 -0
- package/out/renderer/assets/genie-BvhtM5Ga.js +7 -0
- package/out/renderer/assets/gherkin-xCNF9gh8.js +7 -0
- package/out/renderer/assets/git-commit-PP9xCApN.js +9 -0
- package/out/renderer/assets/git-rebase-D-XQSvDj.js +9 -0
- package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-De2eCfMN.js → gitGraphDiagram-UUTBAWPF-R8imfIrj.js} +6 -6
- package/out/renderer/assets/github-dark-O22yVQaY.js +4 -0
- package/out/renderer/assets/github-dark-default-DB2Hkvqn.js +4 -0
- package/out/renderer/assets/github-dark-dimmed-CMZ_OfqC.js +4 -0
- package/out/renderer/assets/github-dark-high-contrast-DmxWVmCU.js +4 -0
- package/out/renderer/assets/github-light-BTbR9xVK.js +4 -0
- package/out/renderer/assets/github-light-default-DWEonwFe.js +4 -0
- package/out/renderer/assets/github-light-high-contrast-WJ_cPDts.js +4 -0
- package/out/renderer/assets/gleam-LmNxrMsN.js +7 -0
- package/out/renderer/assets/glimmer-js-h2QNNiD7.js +15 -0
- package/out/renderer/assets/glimmer-ts-Bk3uX6Ae.js +15 -0
- package/out/renderer/assets/glsl-CGsiYPcu.js +9 -0
- package/out/renderer/assets/gn-OUMx7fqt.js +7 -0
- package/out/renderer/assets/gnuplot-tV8vezdE.js +7 -0
- package/out/renderer/assets/go-DRMr3iML.js +7 -0
- package/out/renderer/assets/{graph-BFn23kR_.js → graph-B5YWEnt0.js} +2 -2
- package/out/renderer/assets/graphql-CwmtR1ib.js +15 -0
- package/out/renderer/assets/groovy-Bn4MhXgW.js +7 -0
- package/out/renderer/assets/gruvbox-dark-hard-DVsRsETr.js +4 -0
- package/out/renderer/assets/gruvbox-dark-medium-B5JBrQdg.js +4 -0
- package/out/renderer/assets/gruvbox-dark-soft-Db-YOqRx.js +4 -0
- package/out/renderer/assets/gruvbox-light-hard-CXzJt7DI.js +4 -0
- package/out/renderer/assets/gruvbox-light-medium-B89RAI1Y.js +4 -0
- package/out/renderer/assets/gruvbox-light-soft-Cs0hTZYv.js +4 -0
- package/out/renderer/assets/hack-BTX3ICIE.js +13 -0
- package/out/renderer/assets/haml-DrIklt7F.js +11 -0
- package/out/renderer/assets/handlebars-yWFGGD2R.js +15 -0
- package/out/renderer/assets/haskell-CzPS7wjM.js +7 -0
- package/out/renderer/assets/haxe-BpobLYM9.js +7 -0
- package/out/renderer/assets/hcl-axoq0Ycu.js +7 -0
- package/out/renderer/assets/hjson-I7LcauIB.js +7 -0
- package/out/renderer/assets/hlsl-TRzjajlb.js +7 -0
- package/out/renderer/assets/horizon-DWzh3z5C.js +4 -0
- package/out/renderer/assets/horizon-bright-C1AFkPsv.js +4 -0
- package/out/renderer/assets/houston-CF_ws8Cq.js +4 -0
- package/out/renderer/assets/html-GC16tDh9.js +11 -0
- package/out/renderer/assets/html-derivative-HU9p64q4.js +11 -0
- package/out/renderer/assets/http-DjsOm9E4.js +20 -0
- package/out/renderer/assets/hurl-Am2cDU4f.js +18 -0
- package/out/renderer/assets/hxml-Jle7oGdm.js +9 -0
- package/out/renderer/assets/hy-B1k9U6S8.js +7 -0
- package/out/renderer/assets/imba-C4923lSV.js +7 -0
- package/out/renderer/assets/{index-BkntVzTm.css → index-B6Zj03wk.css} +82 -24
- package/out/renderer/assets/{index-BL-57WPa.js → index-D7Xi0GX5.js} +30034 -9238
- package/out/renderer/assets/{infoDiagram-42DDH7IO-BIt9B6mQ.js → infoDiagram-42DDH7IO-CWPYNP1k.js} +4 -4
- package/out/renderer/assets/ini-B84Ha1bx.js +7 -0
- package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-CXZs0KGV.js → ishikawaDiagram-UXIWVN3A-CFTrc-S6.js} +1 -1
- package/out/renderer/assets/java-BfXh-0uJ.js +7 -0
- package/out/renderer/assets/javascript-BsAkV7mL.js +7 -0
- package/out/renderer/assets/jinja-FkIlHBgj.js +16 -0
- package/out/renderer/assets/jison-BkdOIOd4.js +9 -0
- package/out/renderer/assets/{journeyDiagram-VCZTEJTY-B-EXuj5b.js → journeyDiagram-VCZTEJTY-Dfd-piIf.js} +4 -4
- package/out/renderer/assets/json-TjWBGEk1.js +7 -0
- package/out/renderer/assets/json5-DCGCKrmX.js +7 -0
- package/out/renderer/assets/jsonc-DLVLp8id.js +7 -0
- package/out/renderer/assets/jsonl-B-R_pDGg.js +7 -0
- package/out/renderer/assets/jsonnet-Cs8BnnC6.js +7 -0
- package/out/renderer/assets/jssm-DDuANZ2u.js +7 -0
- package/out/renderer/assets/jsx-BPmvoin2.js +7 -0
- package/out/renderer/assets/julia-CU_UwNb8.js +20 -0
- package/out/renderer/assets/just-tGFryTtU.js +34 -0
- package/out/renderer/assets/kanagawa-dragon-DU8n2NNT.js +4 -0
- package/out/renderer/assets/kanagawa-lotus-Byd0CDet.js +4 -0
- package/out/renderer/assets/kanagawa-wave-DExoagcR.js +4 -0
- package/out/renderer/assets/{kanban-definition-6JOO6SKY-ByvN0qaD.js → kanban-definition-6JOO6SKY-BocrfAtb.js} +2 -2
- package/out/renderer/assets/kdl-DzNQTDs7.js +7 -0
- package/out/renderer/assets/kotlin-BM2ZNTMh.js +7 -0
- package/out/renderer/assets/kusto-dtpuxMFE.js +7 -0
- package/out/renderer/assets/laserwave-DF03wMlf.js +4 -0
- package/out/renderer/assets/latex-B0gTO9uZ.js +10 -0
- package/out/renderer/assets/{layout-BpybWUv6.js → layout-DHzrXVin.js} +4 -4
- package/out/renderer/assets/lean-CTow-IzD.js +7 -0
- package/out/renderer/assets/less-BAzLMJNR.js +7 -0
- package/out/renderer/assets/light-plus-DS08Xg5J.js +4 -0
- package/out/renderer/assets/liquid-QmJ_LYTW.js +15 -0
- package/out/renderer/assets/llvm-CTKcAHbb.js +7 -0
- package/out/renderer/assets/log-BF22rfM9.js +7 -0
- package/out/renderer/assets/logo-D9l7oEJ8.js +7 -0
- package/out/renderer/assets/lua-BVbbqwZC.js +9 -0
- package/out/renderer/assets/luau-CdZ6BoEa.js +7 -0
- package/out/renderer/assets/make-DLtqaK4D.js +7 -0
- package/out/renderer/assets/markdown-F_EULe_G.js +7 -0
- package/out/renderer/assets/marko-BAWrmNIa.js +15 -0
- package/out/renderer/assets/material-theme-B8B2U48Q.js +4 -0
- package/out/renderer/assets/material-theme-darker-BV0iY_T3.js +4 -0
- package/out/renderer/assets/material-theme-lighter-DrzybSTF.js +4 -0
- package/out/renderer/assets/material-theme-ocean-BRPLVReX.js +4 -0
- package/out/renderer/assets/material-theme-palenight-DSJwsR_D.js +4 -0
- package/out/renderer/assets/matlab-7XHduepk.js +7 -0
- package/out/renderer/assets/mdc-Ca0ft0PS.js +16 -0
- package/out/renderer/assets/mdx-D5wExp-O.js +7 -0
- package/out/renderer/assets/mermaid-z_1ejSlp.js +7 -0
- package/out/renderer/assets/{min-DB8ixvoT.js → min-D6g96v7R.js} +2 -2
- package/out/renderer/assets/min-dark-BNaN9fWk.js +4 -0
- package/out/renderer/assets/min-light-CMrjentn.js +4 -0
- package/out/renderer/assets/{mindmap-definition-QFDTVHPH-Do-I-At8.js → mindmap-definition-QFDTVHPH-D9cyK1Gb.js} +3 -3
- package/out/renderer/assets/mipsasm-BQyyUrpa.js +7 -0
- package/out/renderer/assets/mojo-ByCRDvCf.js +7 -0
- package/out/renderer/assets/monokai-DelygWXa.js +4 -0
- package/out/renderer/assets/moonbit-CqjK87KZ.js +7 -0
- package/out/renderer/assets/move-DhTNmxqC.js +7 -0
- package/out/renderer/assets/narrat-CLjGcbCy.js +7 -0
- package/out/renderer/assets/nextflow-B166B-y1.js +9 -0
- package/out/renderer/assets/nextflow-groovy-BOO9s0iq.js +7 -0
- package/out/renderer/assets/nginx-BFAkI5_-.js +10 -0
- package/out/renderer/assets/night-owl-DSS199ra.js +4 -0
- package/out/renderer/assets/night-owl-light-gC6E-Eh2.js +4 -0
- package/out/renderer/assets/nim-B3PAIZ4D.js +22 -0
- package/out/renderer/assets/nix-ByWcmvXF.js +12 -0
- package/out/renderer/assets/nord-CvDbBq5M.js +4 -0
- package/out/renderer/assets/nushell-DB8ZUEbK.js +7 -0
- package/out/renderer/assets/objective-c-BRoNQF42.js +7 -0
- package/out/renderer/assets/objective-cpp-DEoN9Fe5.js +7 -0
- package/out/renderer/assets/ocaml-B1kfGk9Y.js +7 -0
- package/out/renderer/assets/odin-CNQ56Ay2.js +7 -0
- package/out/renderer/assets/one-dark-pro-CsMf0BoJ.js +4 -0
- package/out/renderer/assets/one-light-B0cTzZyr.js +4 -0
- package/out/renderer/assets/openscad-C_m7ehZF.js +7 -0
- package/out/renderer/assets/pascal-CU8Kjkr_.js +7 -0
- package/out/renderer/assets/perl-HITCDkgu.js +18 -0
- package/out/renderer/assets/php-C2HieitX.js +20 -0
- package/out/renderer/assets/{pieDiagram-DEJITSTG-Cnpf6Gt6.js → pieDiagram-DEJITSTG-LUWwVJA5.js} +6 -6
- package/out/renderer/assets/pierre-dark-DADY5eR0.js +4 -0
- package/out/renderer/assets/pierre-light-DUjirxKp.js +4 -0
- package/out/renderer/assets/pkl-BsByaYax.js +7 -0
- package/out/renderer/assets/plastic-BjwMpBc0.js +4 -0
- package/out/renderer/assets/plsql-B3Na24V4.js +7 -0
- package/out/renderer/assets/po-BajfNjc5.js +7 -0
- package/out/renderer/assets/poimandres-ChWyhPrn.js +4 -0
- package/out/renderer/assets/polar-BB-dlxnO.js +7 -0
- package/out/renderer/assets/postcss-kj1IbjVd.js +7 -0
- package/out/renderer/assets/powerquery-B-e1fO-k.js +7 -0
- package/out/renderer/assets/powershell-BcMVbGpk.js +7 -0
- package/out/renderer/assets/prisma-bmxcSDxq.js +7 -0
- package/out/renderer/assets/prolog-BT9GCzqD.js +7 -0
- package/out/renderer/assets/proto-Ds-m32NR.js +7 -0
- package/out/renderer/assets/pug-BwQB43qN.js +13 -0
- package/out/renderer/assets/puppet-N15G4Usj.js +7 -0
- package/out/renderer/assets/purescript-DrwsEYNH.js +7 -0
- package/out/renderer/assets/python-CrdIx4PZ.js +7 -0
- package/out/renderer/assets/qml-jtL8okyu.js +9 -0
- package/out/renderer/assets/qmldir-DuMSk0Oz.js +7 -0
- package/out/renderer/assets/qss-BFrB6p4y.js +7 -0
- package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-VcOb1qLd.js → quadrantDiagram-34T5L4WZ-DdWTi9yW.js} +1 -1
- package/out/renderer/assets/r-Dpdc-Kyk.js +7 -0
- package/out/renderer/assets/racket-DbA06HL7.js +7 -0
- package/out/renderer/assets/raku-6v-Y17bs.js +7 -0
- package/out/renderer/assets/razor-gBXW6YBJ.js +13 -0
- package/out/renderer/assets/red-DByOl5N0.js +4 -0
- package/out/renderer/assets/reg-CULnG2WX.js +7 -0
- package/out/renderer/assets/regexp-BxWeO75u.js +7 -0
- package/out/renderer/assets/rel-CHRwzjd4.js +7 -0
- package/out/renderer/assets/{requirementDiagram-MS252O5E-VJs9Hpaw.js → requirementDiagram-MS252O5E-BoLT3tay.js} +3 -3
- package/out/renderer/assets/riscv-BNQ9cVpw.js +7 -0
- package/out/renderer/assets/ron-CUEPaFZU.js +7 -0
- package/out/renderer/assets/rose-pine-B-kZ4Z9q.js +4 -0
- package/out/renderer/assets/rose-pine-dawn-efeVGdSI.js +4 -0
- package/out/renderer/assets/rose-pine-moon-DmodZNzl.js +4 -0
- package/out/renderer/assets/rosmsg-Bfahr6vb.js +7 -0
- package/out/renderer/assets/rst-by6KAwTb.js +37 -0
- package/out/renderer/assets/ruby-C13Bjepi.js +37 -0
- package/out/renderer/assets/rust-CMNYZh5a.js +7 -0
- package/out/renderer/assets/{sankeyDiagram-XADWPNL6-BoXxgLvi.js → sankeyDiagram-XADWPNL6-B4gY_QI-.js} +1 -1
- package/out/renderer/assets/sas-BLBgC3TA.js +9 -0
- package/out/renderer/assets/sass-BheygBdF.js +7 -0
- package/out/renderer/assets/scala-B-_7vFVn.js +7 -0
- package/out/renderer/assets/scheme-BSHdPinv.js +7 -0
- package/out/renderer/assets/scss-Dq-LbI_c.js +9 -0
- package/out/renderer/assets/sdbl-BBUhycGU.js +7 -0
- package/out/renderer/assets/{sequenceDiagram-FGHM5R23-b69hQjSp.js → sequenceDiagram-FGHM5R23-B-JJvxQW.js} +3 -3
- package/out/renderer/assets/shaderlab-C07uO3dL.js +9 -0
- package/out/renderer/assets/shellscript-CQ8MXh-D.js +7 -0
- package/out/renderer/assets/shellsession-CkeTp4M1.js +9 -0
- package/out/renderer/assets/slack-dark-BEe10hxO.js +4 -0
- package/out/renderer/assets/slack-ochin-BKmu9pBc.js +4 -0
- package/out/renderer/assets/smalltalk-qxcGy4fT.js +7 -0
- package/out/renderer/assets/snazzy-light-Dcvd-ZyI.js +4 -0
- package/out/renderer/assets/solarized-dark-BBl5y5sR.js +4 -0
- package/out/renderer/assets/solarized-light-DW9b_AY8.js +4 -0
- package/out/renderer/assets/solidity-CSTQ0FCC.js +7 -0
- package/out/renderer/assets/soy-BHaHgMUy.js +11 -0
- package/out/renderer/assets/sparql-DswowMAp.js +9 -0
- package/out/renderer/assets/splunk-DcGJXIDa.js +7 -0
- package/out/renderer/assets/sql-DzUuSofg.js +7 -0
- package/out/renderer/assets/ssh-config-Bk_I5wDR.js +7 -0
- package/out/renderer/assets/stata-Dl7wDdBE.js +9 -0
- package/out/renderer/assets/{stateDiagram-FHFEXIEX-BK7E-REm.js → stateDiagram-FHFEXIEX-BntwOBUs.js} +8 -8
- package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-Cd2wfCQu.js → stateDiagram-v2-QKLJ7IA2-C__eWVIe.js} +4 -4
- package/out/renderer/assets/stylus-DXFa_2Jl.js +7 -0
- package/out/renderer/assets/surrealql-Bs3vUeKA.js +9 -0
- package/out/renderer/assets/svelte-fC0HkEkx.js +15 -0
- package/out/renderer/assets/swift-Cohr-WZC.js +7 -0
- package/out/renderer/assets/synthwave-84-CoUef9sh.js +4 -0
- package/out/renderer/assets/system-verilog-BcESSvRn.js +7 -0
- package/out/renderer/assets/systemd-DJPFjU02.js +7 -0
- package/out/renderer/assets/talonscript-CEEMXJTH.js +7 -0
- package/out/renderer/assets/tasl-DfOr2qHi.js +7 -0
- package/out/renderer/assets/tcl-CTsc4-t7.js +7 -0
- package/out/renderer/assets/templ-CSEiQwNm.js +13 -0
- package/out/renderer/assets/terraform-CeztUfUr.js +7 -0
- package/out/renderer/assets/tex-CGVqF8nD.js +9 -0
- package/out/renderer/assets/{timeline-definition-GMOUNBTQ-Bl-MTfK5.js → timeline-definition-GMOUNBTQ-C7ch2INk.js} +2 -2
- package/out/renderer/assets/tokyo-night-DjtLpAEY.js +4 -0
- package/out/renderer/assets/toml-vHPzWDj6.js +7 -0
- package/out/renderer/assets/ts-tags-cG2hZuda.js +54 -0
- package/out/renderer/assets/tsv-ChRVFvMy.js +7 -0
- package/out/renderer/assets/tsx-CmGGo4Hm.js +7 -0
- package/out/renderer/assets/turtle-BnC7StHY.js +7 -0
- package/out/renderer/assets/twig-CwEEYIBf.js +36 -0
- package/out/renderer/assets/typescript-CP6ECzON.js +7 -0
- package/out/renderer/assets/typespec-CkDVVIcK.js +7 -0
- package/out/renderer/assets/typst-XYLFxYau.js +7 -0
- package/out/renderer/assets/v-BSYXvR4g.js +7 -0
- package/out/renderer/assets/vala-qJa5rry9.js +7 -0
- package/out/renderer/assets/vb-Bzg9rspf.js +7 -0
- package/out/renderer/assets/{vennDiagram-DHZGUBPP-DNmr1k2L.js → vennDiagram-DHZGUBPP-CQ__NSue.js} +1 -1
- package/out/renderer/assets/verilog-CCb_iTfF.js +7 -0
- package/out/renderer/assets/vesper-4Q1cEwPL.js +4 -0
- package/out/renderer/assets/vhdl-DMqk4T2s.js +7 -0
- package/out/renderer/assets/viml--FINbfoq.js +7 -0
- package/out/renderer/assets/vitesse-black-BqNLki8b.js +4 -0
- package/out/renderer/assets/vitesse-dark-jJ32WhwH.js +4 -0
- package/out/renderer/assets/vitesse-light-476zM4e6.js +4 -0
- package/out/renderer/assets/vue-K-7Ga-y8.js +40 -0
- package/out/renderer/assets/vue-html-DhreShjd.js +9 -0
- package/out/renderer/assets/vue-vine-rMIwOpFf.js +19 -0
- package/out/renderer/assets/vyper-DP4whl13.js +7 -0
- package/out/renderer/assets/{wardley-RL74JXVD-DTbxPMj9.js → wardley-RL74JXVD-Kh6mNiRV.js} +3 -3
- package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-BWw08wtD.js → wardleyDiagram-NUSXRM2D-CfRYzJMU.js} +5 -5
- package/out/renderer/assets/wasm-BBh6f151.js +7 -0
- package/out/renderer/assets/wasm-DDgzZJey.js +10 -0
- package/out/renderer/assets/wenyan-BdqozpMZ.js +7 -0
- package/out/renderer/assets/wgsl-Vo-hHVWH.js +7 -0
- package/out/renderer/assets/wikitext-BDjE6pmL.js +7 -0
- package/out/renderer/assets/wit-C_nQzOkY.js +7 -0
- package/out/renderer/assets/wolfram-CRmjUoI4.js +7 -0
- package/out/renderer/assets/xml-BMzZeaqs.js +9 -0
- package/out/renderer/assets/xsl-CnwVr_6q.js +10 -0
- package/out/renderer/assets/{xychartDiagram-5P7HB3ND-EEYPnLDT.js → xychartDiagram-5P7HB3ND-BFq2zIne.js} +1 -1
- package/out/renderer/assets/yaml-B_vW5iTY.js +7 -0
- package/out/renderer/assets/zenscript-DFINJL6j.js +7 -0
- package/out/renderer/assets/zig-CS4FMAZp.js +7 -0
- package/out/renderer/index.html +2 -2
- package/out/resources/linux/probe +0 -0
- package/out/resources/linux-x64/probe +0 -0
- package/out/resources/mcp-server/aider-desk-mcp-server.js +16 -1
- package/out/resources/prompts/code-change-requests.hbs +21 -0
- package/out/resources/skills/extension-creator/SKILL.md +345 -0
- package/out/resources/skills/extension-creator/assets/templates/Component.jsx.template +76 -0
- package/out/resources/skills/extension-creator/assets/templates/ConfigComponent.jsx.template +38 -0
- package/out/resources/skills/extension-creator/assets/templates/folder-extension/config.ts.template +29 -0
- package/out/resources/skills/extension-creator/assets/templates/folder-extension/index.ts.template +42 -0
- package/out/resources/skills/extension-creator/assets/templates/folder-extension/package.json +12 -0
- package/out/resources/skills/extension-creator/assets/templates/folder-extension/tsconfig.json +23 -0
- package/out/resources/skills/extension-creator/assets/templates/folder-extension-with-config/index.ts.template +80 -0
- package/out/resources/skills/extension-creator/assets/templates/single-file.ts.template +30 -0
- package/out/resources/skills/extension-creator/assets/templates/ui-component-external.ts.template +91 -0
- package/out/resources/skills/extension-creator/assets/templates/ui-component.ts.template +79 -0
- package/out/resources/skills/extension-creator/references/command-definition.md +170 -0
- package/out/resources/skills/extension-creator/references/config-components.md +427 -0
- package/out/resources/skills/extension-creator/references/event-types.md +156 -0
- package/out/resources/skills/extension-creator/references/examples-gallery.md +583 -0
- package/out/resources/skills/extension-creator/references/extension-interface.md +306 -0
- package/out/resources/skills/extension-creator/references/extension-types.md +186 -0
- package/out/resources/skills/extension-creator/references/in-repo-flow.md +132 -0
- package/out/resources/skills/extension-creator/references/install-targets.md +96 -0
- package/out/resources/skills/extension-creator/references/project-global-flow.md +76 -0
- package/out/resources/skills/extension-creator/references/ui-components.md +663 -0
- package/out/runner.js +509 -164
- package/package.json +11 -9
- package/out/resources/prompts/code-inline-request.hbs +0 -16
- /package/patches/{ai+5.0.167.patch → ai+5.0.172.patch} +0 -0
package/out/runner.js
CHANGED
|
@@ -31,12 +31,8 @@ const node_sqlite = require("node:sqlite");
|
|
|
31
31
|
const path = require("path");
|
|
32
32
|
const os = require("os");
|
|
33
33
|
const http = require("http");
|
|
34
|
-
const undici = require("undici");
|
|
35
|
-
const uuid = require("uuid");
|
|
36
|
-
const ai = require("ai");
|
|
37
34
|
const gpt4o = require("gpt-tokenizer/model/gpt-4o");
|
|
38
35
|
const istextorbinary = require("istextorbinary");
|
|
39
|
-
const fileType = require("file-type");
|
|
40
36
|
const child_process = require("child_process");
|
|
41
37
|
const treeKill = require("tree-kill");
|
|
42
38
|
const glob = require("glob");
|
|
@@ -52,6 +48,7 @@ const slugify = require("slugify");
|
|
|
52
48
|
const Turndown = require("turndown");
|
|
53
49
|
const cheerio = require("cheerio");
|
|
54
50
|
const yamlFrontMatter = require("yaml-front-matter");
|
|
51
|
+
const uuid = require("uuid");
|
|
55
52
|
const index_js = require("@modelcontextprotocol/sdk/client/index.js");
|
|
56
53
|
const stdio_js = require("@modelcontextprotocol/sdk/client/stdio.js");
|
|
57
54
|
const streamableHttp_js = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
@@ -64,6 +61,10 @@ const cloudflared = require("cloudflared");
|
|
|
64
61
|
const socket_io = require("socket.io");
|
|
65
62
|
const debounce = require("lodash/debounce.js");
|
|
66
63
|
const crypto = require("crypto");
|
|
64
|
+
const undici = require("undici");
|
|
65
|
+
const globalAgent = require("global-agent");
|
|
66
|
+
const ai = require("ai");
|
|
67
|
+
const fileType = require("file-type");
|
|
67
68
|
const anthropic = require("@ai-sdk/anthropic");
|
|
68
69
|
const azure = require("@ai-sdk/azure");
|
|
69
70
|
const clientBedrock = require("@aws-sdk/client-bedrock");
|
|
@@ -78,6 +79,7 @@ const genai = require("@google/genai");
|
|
|
78
79
|
const openaiCompatible = require("@ai-sdk/openai-compatible");
|
|
79
80
|
const groq = require("@ai-sdk/groq");
|
|
80
81
|
const alibaba = require("@ai-sdk/alibaba");
|
|
82
|
+
const mistral = require("@ai-sdk/mistral");
|
|
81
83
|
const ollamaAiProviderV2 = require("ollama-ai-provider-v2");
|
|
82
84
|
const openai = require("@ai-sdk/openai");
|
|
83
85
|
const aiSdkProvider = require("@openrouter/ai-sdk-provider");
|
|
@@ -1462,6 +1464,7 @@ const AVAILABLE_PROVIDERS = [
|
|
|
1462
1464
|
"litellm",
|
|
1463
1465
|
"lmstudio",
|
|
1464
1466
|
"minimax",
|
|
1467
|
+
"mistral",
|
|
1465
1468
|
"ollama",
|
|
1466
1469
|
"openai",
|
|
1467
1470
|
"openai-compatible",
|
|
@@ -1506,24 +1509,28 @@ const isRequestyProvider = (provider) => provider.name === "requesty";
|
|
|
1506
1509
|
const isOpenCodeProvider = (provider) => provider.name === "opencode";
|
|
1507
1510
|
const isZaiPlanProvider = (provider) => provider.name === "zai-plan";
|
|
1508
1511
|
const isMinimaxProvider = (provider) => provider.name === "minimax";
|
|
1512
|
+
const isMistralProvider = (provider) => provider.name === "mistral";
|
|
1509
1513
|
const isSyntheticProvider = (provider) => provider.name === "synthetic";
|
|
1510
|
-
const DEFAULT_MODEL_TEMPERATURE = 0;
|
|
1511
1514
|
const DEFAULT_PROVIDER_MODELS = {
|
|
1512
1515
|
"alibaba-plan": "qwen3-coder-plus",
|
|
1513
1516
|
anthropic: "claude-sonnet-4-6",
|
|
1517
|
+
auggie: "gpt-5-4",
|
|
1518
|
+
bedrock: "global.anthropic.claude-sonnet-4-6",
|
|
1514
1519
|
cerebras: "qwen-3-235b-a22b-instruct-2507",
|
|
1515
1520
|
"claude-agent-sdk": "sonnet",
|
|
1516
1521
|
deepseek: "deepseek-chat",
|
|
1517
1522
|
gemini: "gemini-pro-latest",
|
|
1518
|
-
"gemini-cli": "gemini-2.5-
|
|
1523
|
+
"gemini-cli": "gemini-2.5-pro",
|
|
1519
1524
|
groq: "moonshotai/kimi-k2-instruct-0905",
|
|
1525
|
+
"kimi-plan": "k2p5",
|
|
1520
1526
|
openai: "gpt-5.4",
|
|
1521
1527
|
openrouter: "anthropic/claude-sonnet-4.6",
|
|
1522
1528
|
opencode: "claude-sonnet-4-6",
|
|
1523
1529
|
requesty: "anthropic/claude-sonnet-4-6",
|
|
1524
1530
|
synthetic: "hf:zai-org/GLM-4.7",
|
|
1525
|
-
"zai-plan": "glm-5",
|
|
1526
|
-
minimax: "MiniMax-M2"
|
|
1531
|
+
"zai-plan": "glm-5.1",
|
|
1532
|
+
minimax: "MiniMax-M2.7",
|
|
1533
|
+
mistral: "mistral-large-latest"
|
|
1527
1534
|
};
|
|
1528
1535
|
const DEFAULT_AIDER_MAIN_MODEL = `anthropic/${DEFAULT_PROVIDER_MODELS.anthropic}`;
|
|
1529
1536
|
const DEFAULT_AGENT_PROFILE_ID = "default";
|
|
@@ -1920,6 +1927,12 @@ const getDefaultProviderParams = (providerName) => {
|
|
|
1920
1927
|
apiKey: ""
|
|
1921
1928
|
};
|
|
1922
1929
|
break;
|
|
1930
|
+
case "mistral":
|
|
1931
|
+
provider = {
|
|
1932
|
+
name: "mistral",
|
|
1933
|
+
apiKey: ""
|
|
1934
|
+
};
|
|
1935
|
+
break;
|
|
1923
1936
|
case "gemini-cli":
|
|
1924
1937
|
provider = {
|
|
1925
1938
|
name: "gemini-cli",
|
|
@@ -2181,7 +2194,8 @@ const readApiKeyFromConfFile = (filePath, envVarName) => {
|
|
|
2181
2194
|
CEREBRAS_API_KEY: ["cerebras"],
|
|
2182
2195
|
OPENCODE_API_KEY: ["opencode"],
|
|
2183
2196
|
REQUESTY_API_KEY: ["requesty"],
|
|
2184
|
-
SYNTHETIC_API_KEY: ["synthetic"]
|
|
2197
|
+
SYNTHETIC_API_KEY: ["synthetic"],
|
|
2198
|
+
MISTRAL_API_KEY: ["mistral"]
|
|
2185
2199
|
};
|
|
2186
2200
|
const providerNames = envVarToProviderName[envVarName] || [envVarName.replace(/_API_KEY$/, "").toLowerCase()];
|
|
2187
2201
|
const apiKeys = Array.isArray(apiKeyValue) ? apiKeyValue : [apiKeyValue];
|
|
@@ -5905,16 +5919,6 @@ const removeDuplicateToolCalls = (messages) => {
|
|
|
5905
5919
|
}
|
|
5906
5920
|
return newMessages;
|
|
5907
5921
|
};
|
|
5908
|
-
undici.setGlobalDispatcher(
|
|
5909
|
-
new undici.Agent({
|
|
5910
|
-
headersTimeout: 30 * 60 * 1e3,
|
|
5911
|
-
// 30 minutes
|
|
5912
|
-
bodyTimeout: 30 * 60 * 1e3,
|
|
5913
|
-
// 30 minutes
|
|
5914
|
-
connectTimeout: 30 * 1e3
|
|
5915
|
-
// 30 seconds
|
|
5916
|
-
})
|
|
5917
|
-
);
|
|
5918
5922
|
const MAX_RETRIES = 3;
|
|
5919
5923
|
class Agent {
|
|
5920
5924
|
constructor(store, agentProfileManager, mcpManager, modelManager, telemetryManager, memoryManager, promptsManager, extensionManager) {
|
|
@@ -6727,6 +6731,9 @@ ${fileList}`
|
|
|
6727
6731
|
responseMessageIndex = 0;
|
|
6728
6732
|
hasReasoning = false;
|
|
6729
6733
|
streamingMessageIds.clear();
|
|
6734
|
+
if (responseMessages.length > 0) {
|
|
6735
|
+
retryCount = 0;
|
|
6736
|
+
}
|
|
6730
6737
|
};
|
|
6731
6738
|
const extensionStepStartedResult = await this.extensionManager.dispatchEvent(
|
|
6732
6739
|
"onAgentStepStarted",
|
|
@@ -8571,12 +8578,15 @@ const HandoffConversationSchema = zod.z.object({
|
|
|
8571
8578
|
taskId: zod.z.string().min(1, "Task id is required"),
|
|
8572
8579
|
focus: zod.z.string().optional()
|
|
8573
8580
|
});
|
|
8574
|
-
const
|
|
8575
|
-
projectDir: zod.z.string().min(1, "Project directory is required"),
|
|
8576
|
-
taskId: zod.z.string().min(1, "Task id is required"),
|
|
8581
|
+
const ChangeRequestItemSchema = zod.z.object({
|
|
8577
8582
|
filename: zod.z.string().min(1, "Filename is required"),
|
|
8578
8583
|
lineNumber: zod.z.number().int().min(1, "Line number is required"),
|
|
8579
|
-
userComment: zod.z.string().min(1, "User comment is required")
|
|
8584
|
+
userComment: zod.z.string().min(1, "User comment is required")
|
|
8585
|
+
});
|
|
8586
|
+
const RunCodeChangeRequestsSchema = zod.z.object({
|
|
8587
|
+
projectDir: zod.z.string().min(1, "Project directory is required"),
|
|
8588
|
+
taskId: zod.z.string().min(1, "Task id is required"),
|
|
8589
|
+
requests: zod.z.array(ChangeRequestItemSchema).min(1, "At least one request is required"),
|
|
8580
8590
|
createNewTask: zod.z.boolean().optional()
|
|
8581
8591
|
});
|
|
8582
8592
|
const ScrapeWebSchema = zod.z.object({
|
|
@@ -8608,6 +8618,7 @@ const RestoreFileSchema = zod.z.object({
|
|
|
8608
8618
|
});
|
|
8609
8619
|
const ReadFileSchema = zod.z.object({
|
|
8610
8620
|
projectDir: zod.z.string().min(1, "Project directory is required"),
|
|
8621
|
+
taskId: zod.z.string().min(1, "Task id is required"),
|
|
8611
8622
|
filePath: zod.z.string().min(1, "File path is required")
|
|
8612
8623
|
});
|
|
8613
8624
|
const GenerateCommitMessageSchema = zod.z.object({
|
|
@@ -8976,15 +8987,15 @@ class ProjectApi extends BaseApi {
|
|
|
8976
8987
|
})
|
|
8977
8988
|
);
|
|
8978
8989
|
router.post(
|
|
8979
|
-
"/project/run-code-
|
|
8990
|
+
"/project/run-code-change-requests",
|
|
8980
8991
|
this.handleRequest(async (req, res) => {
|
|
8981
|
-
const parsed = this.validateRequest(
|
|
8992
|
+
const parsed = this.validateRequest(RunCodeChangeRequestsSchema, req.body, res);
|
|
8982
8993
|
if (!parsed) {
|
|
8983
8994
|
return;
|
|
8984
8995
|
}
|
|
8985
|
-
const { projectDir, taskId,
|
|
8986
|
-
await this.eventsHandler.
|
|
8987
|
-
res.status(200).json({ message: "Code
|
|
8996
|
+
const { projectDir, taskId, requests, createNewTask } = parsed;
|
|
8997
|
+
await this.eventsHandler.runCodeChangeRequests(projectDir, taskId, requests, createNewTask);
|
|
8998
|
+
res.status(200).json({ message: "Code change requests initiated" });
|
|
8988
8999
|
})
|
|
8989
9000
|
);
|
|
8990
9001
|
router.post(
|
|
@@ -9054,8 +9065,8 @@ class ProjectApi extends BaseApi {
|
|
|
9054
9065
|
if (!parsed) {
|
|
9055
9066
|
return;
|
|
9056
9067
|
}
|
|
9057
|
-
const { projectDir, filePath } = parsed;
|
|
9058
|
-
const content = await this.eventsHandler.readFile(projectDir, filePath);
|
|
9068
|
+
const { projectDir, taskId, filePath } = parsed;
|
|
9069
|
+
const content = await this.eventsHandler.readFile(projectDir, taskId, filePath);
|
|
9059
9070
|
res.status(200).json({ content });
|
|
9060
9071
|
})
|
|
9061
9072
|
);
|
|
@@ -9488,9 +9499,10 @@ const GetSystemLogsSchema = zod.z.object({
|
|
|
9488
9499
|
levels: zod.z.array(zod.z.string()).optional()
|
|
9489
9500
|
});
|
|
9490
9501
|
class SystemApi extends BaseApi {
|
|
9491
|
-
constructor(eventsHandler) {
|
|
9502
|
+
constructor(eventsHandler, pythonInstaller) {
|
|
9492
9503
|
super();
|
|
9493
9504
|
this.eventsHandler = eventsHandler;
|
|
9505
|
+
this.pythonInstaller = pythonInstaller;
|
|
9494
9506
|
}
|
|
9495
9507
|
registerRoutes(router) {
|
|
9496
9508
|
router.get(
|
|
@@ -9524,6 +9536,13 @@ class SystemApi extends BaseApi {
|
|
|
9524
9536
|
res.status(200).json({ success: true });
|
|
9525
9537
|
})
|
|
9526
9538
|
);
|
|
9539
|
+
router.get(
|
|
9540
|
+
"/system/aider-connector-status",
|
|
9541
|
+
this.handleRequest(async (_req, res) => {
|
|
9542
|
+
const status = this.pythonInstaller.getStatus();
|
|
9543
|
+
res.status(200).json(status);
|
|
9544
|
+
})
|
|
9545
|
+
);
|
|
9527
9546
|
}
|
|
9528
9547
|
}
|
|
9529
9548
|
const GetTodosSchema = zod.z.object({
|
|
@@ -10102,11 +10121,12 @@ class ExtensionsApi extends BaseApi {
|
|
|
10102
10121
|
}
|
|
10103
10122
|
const REQUEST_TIMEOUT_MS = 5 * 60 * 1e3;
|
|
10104
10123
|
class ServerController {
|
|
10105
|
-
constructor(server, projectManager, eventsHandler, store) {
|
|
10124
|
+
constructor(server, projectManager, eventsHandler, store, pythonInstaller) {
|
|
10106
10125
|
this.server = server;
|
|
10107
10126
|
this.projectManager = projectManager;
|
|
10108
10127
|
this.eventsHandler = eventsHandler;
|
|
10109
10128
|
this.store = store;
|
|
10129
|
+
this.pythonInstaller = pythonInstaller;
|
|
10110
10130
|
this.init();
|
|
10111
10131
|
}
|
|
10112
10132
|
app = express();
|
|
@@ -10162,7 +10182,7 @@ class ServerController {
|
|
|
10162
10182
|
new ProjectApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
10163
10183
|
new CommandsApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
10164
10184
|
new UsageApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
10165
|
-
new SystemApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
10185
|
+
new SystemApi(this.eventsHandler, this.pythonInstaller).registerRoutes(apiRouter);
|
|
10166
10186
|
new TodoApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
10167
10187
|
new McpApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
10168
10188
|
new ProvidersApi(this.eventsHandler).registerRoutes(apiRouter);
|
|
@@ -12078,6 +12098,82 @@ ${JSON.stringify(part.output.value, null, 2)}
|
|
|
12078
12098
|
return removedIds;
|
|
12079
12099
|
}
|
|
12080
12100
|
}
|
|
12101
|
+
const PROXY_ENV_VAR_NAMES = ["HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "http_proxy", "https_proxy", "all_proxy"];
|
|
12102
|
+
const getProxyEnvVars = (settings) => {
|
|
12103
|
+
if (settings.proxy?.enabled && settings.proxy?.url) {
|
|
12104
|
+
const url = settings.proxy.url;
|
|
12105
|
+
return {
|
|
12106
|
+
HTTP_PROXY: url,
|
|
12107
|
+
HTTPS_PROXY: url,
|
|
12108
|
+
ALL_PROXY: url,
|
|
12109
|
+
http_proxy: url,
|
|
12110
|
+
https_proxy: url,
|
|
12111
|
+
all_proxy: url
|
|
12112
|
+
};
|
|
12113
|
+
}
|
|
12114
|
+
return Object.fromEntries(PROXY_ENV_VAR_NAMES.map((key) => [key, ""]));
|
|
12115
|
+
};
|
|
12116
|
+
class ProxyManager {
|
|
12117
|
+
currentUrl = null;
|
|
12118
|
+
/**
|
|
12119
|
+
* Initialize proxy from settings. Called once during app startup (first in managers init).
|
|
12120
|
+
*/
|
|
12121
|
+
init(settings) {
|
|
12122
|
+
globalAgent.bootstrap();
|
|
12123
|
+
if (settings.proxy?.enabled && settings.proxy?.url) {
|
|
12124
|
+
this.applyProxy(settings.proxy.url);
|
|
12125
|
+
} else {
|
|
12126
|
+
this.clearProxy();
|
|
12127
|
+
}
|
|
12128
|
+
}
|
|
12129
|
+
/**
|
|
12130
|
+
* React to settings changes. Called on every saveSettings().
|
|
12131
|
+
* Re-initializes the proxy if the config changed.
|
|
12132
|
+
*/
|
|
12133
|
+
settingsChanged(oldSettings, newSettings) {
|
|
12134
|
+
const oldProxy = oldSettings.proxy;
|
|
12135
|
+
const newProxy = newSettings.proxy;
|
|
12136
|
+
if (oldProxy?.enabled !== newProxy?.enabled || oldProxy?.url !== newProxy?.url) {
|
|
12137
|
+
if (newProxy?.enabled && newProxy?.url) {
|
|
12138
|
+
logger.info(`[ProxyManager] Applying proxy: ${newProxy.url}`);
|
|
12139
|
+
this.applyProxy(newProxy.url);
|
|
12140
|
+
} else if (this.currentUrl !== null) {
|
|
12141
|
+
logger.info("[ProxyManager] Clearing proxy");
|
|
12142
|
+
this.clearProxy();
|
|
12143
|
+
}
|
|
12144
|
+
}
|
|
12145
|
+
}
|
|
12146
|
+
applyProxy(url) {
|
|
12147
|
+
try {
|
|
12148
|
+
global.GLOBAL_AGENT.HTTP_PROXY = url;
|
|
12149
|
+
const proxyAgent = new undici.ProxyAgent(url);
|
|
12150
|
+
undici.setGlobalDispatcher(proxyAgent);
|
|
12151
|
+
this.currentUrl = url;
|
|
12152
|
+
logger.info(`[ProxyManager] Proxy initialized: ${url}`);
|
|
12153
|
+
} catch (error) {
|
|
12154
|
+
logger.error("[ProxyManager] Failed to initialize proxy", { error: error instanceof Error ? error.message : String(error) });
|
|
12155
|
+
}
|
|
12156
|
+
}
|
|
12157
|
+
clearProxy() {
|
|
12158
|
+
try {
|
|
12159
|
+
global.GLOBAL_AGENT.HTTP_PROXY = void 0;
|
|
12160
|
+
undici.setGlobalDispatcher(
|
|
12161
|
+
new undici.Agent({
|
|
12162
|
+
headersTimeout: 30 * 60 * 1e3,
|
|
12163
|
+
// 30 minutes
|
|
12164
|
+
bodyTimeout: 30 * 60 * 1e3,
|
|
12165
|
+
// 30 minutes
|
|
12166
|
+
connectTimeout: 30 * 1e3
|
|
12167
|
+
// 30 seconds
|
|
12168
|
+
})
|
|
12169
|
+
);
|
|
12170
|
+
this.currentUrl = null;
|
|
12171
|
+
logger.info("[ProxyManager] Proxy cleared");
|
|
12172
|
+
} catch (error) {
|
|
12173
|
+
logger.error("[ProxyManager] Failed to clear proxy", { error: error instanceof Error ? error.message : String(error) });
|
|
12174
|
+
}
|
|
12175
|
+
}
|
|
12176
|
+
}
|
|
12081
12177
|
class AiderManager {
|
|
12082
12178
|
constructor(task, store, modelManager, eventManager, getConnectors, pythonInstaller) {
|
|
12083
12179
|
this.task = task;
|
|
@@ -12186,11 +12282,13 @@ class AiderManager {
|
|
|
12186
12282
|
taskId: this.task.taskId,
|
|
12187
12283
|
args
|
|
12188
12284
|
});
|
|
12285
|
+
const proxyEnvVars = getProxyEnvVars(settings);
|
|
12189
12286
|
const env = {
|
|
12190
12287
|
...process.env,
|
|
12191
12288
|
...environmentVariables,
|
|
12192
12289
|
...envFromMain,
|
|
12193
12290
|
...envFromWeak,
|
|
12291
|
+
...proxyEnvVars,
|
|
12194
12292
|
PYTHONPATH: AIDER_DESK_CONNECTOR_DIR,
|
|
12195
12293
|
PYTHONUTF8: process.env.AIDER_DESK_OMIT_PYTHONUTF8 ? void 0 : "1",
|
|
12196
12294
|
BASE_DIR: this.task.getProjectDir(),
|
|
@@ -12905,7 +13003,7 @@ class WorktreeManager {
|
|
|
12905
13003
|
const addCommand = "git add -A";
|
|
12906
13004
|
executedCommands.push(`${addCommand} (in ${worktreePath})`);
|
|
12907
13005
|
await execWithShellPath(addCommand, { cwd: worktreePath });
|
|
12908
|
-
const commitCommand = `git commit -m "TEMP_UNCOMMITTED_${Date.now()}"`;
|
|
13006
|
+
const commitCommand = `git commit --no-verify -m "TEMP_UNCOMMITTED_${Date.now()}"`;
|
|
12909
13007
|
executedCommands.push(`${commitCommand} (in ${worktreePath})`);
|
|
12910
13008
|
await execWithShellPath(commitCommand, {
|
|
12911
13009
|
cwd: worktreePath
|
|
@@ -13553,13 +13651,17 @@ Git output: ${err.stderr || err.stdout || err.message}`
|
|
|
13553
13651
|
*/
|
|
13554
13652
|
async getUpdatedFiles(worktreePath, workingMode, mainBranch, groupMode = UpdatedFilesGroupMode.Grouped) {
|
|
13555
13653
|
try {
|
|
13654
|
+
let files;
|
|
13556
13655
|
if (workingMode === "worktree" && mainBranch) {
|
|
13557
13656
|
if (groupMode === UpdatedFilesGroupMode.Flat) {
|
|
13558
|
-
|
|
13657
|
+
files = await this.getWorktreeFlatUpdatedFiles(worktreePath, mainBranch);
|
|
13658
|
+
} else {
|
|
13659
|
+
files = await this.getWorktreeUpdatedFiles(worktreePath, mainBranch);
|
|
13559
13660
|
}
|
|
13560
|
-
|
|
13661
|
+
} else {
|
|
13662
|
+
files = await this.getNonWorktreeUpdatedFiles(worktreePath);
|
|
13561
13663
|
}
|
|
13562
|
-
return await this.
|
|
13664
|
+
return await this.markConflictingFiles(worktreePath, files);
|
|
13563
13665
|
} catch (error) {
|
|
13564
13666
|
logger.warn("Failed to get updated files:", error);
|
|
13565
13667
|
return [];
|
|
@@ -13799,6 +13901,20 @@ Git output: ${err.stderr || err.stdout || err.message}`
|
|
|
13799
13901
|
}
|
|
13800
13902
|
return fileDiffs;
|
|
13801
13903
|
}
|
|
13904
|
+
async markConflictingFiles(worktreePath, files) {
|
|
13905
|
+
try {
|
|
13906
|
+
const { stdout } = await execWithShellPath("git diff --name-only --diff-filter=U", { cwd: worktreePath });
|
|
13907
|
+
const unmergedFiles = new Set(
|
|
13908
|
+
stdout.split("\n").map((l) => l.trim()).filter((l) => l.length > 0)
|
|
13909
|
+
);
|
|
13910
|
+
if (unmergedFiles.size === 0) {
|
|
13911
|
+
return files;
|
|
13912
|
+
}
|
|
13913
|
+
return files.map((f) => unmergedFiles.has(f.path) ? { ...f, hasConflicts: true } : f);
|
|
13914
|
+
} catch {
|
|
13915
|
+
return files;
|
|
13916
|
+
}
|
|
13917
|
+
}
|
|
13802
13918
|
async restoreFile(worktreePath, filePath) {
|
|
13803
13919
|
try {
|
|
13804
13920
|
logger.info(`Restoring file: ${filePath}`, { worktreePath });
|
|
@@ -16320,12 +16436,16 @@ ${contentText}</agent-response>`;
|
|
|
16320
16436
|
const aiderWatchFilesChanged = oldSettings.aider.watchFiles !== newSettings?.aider.watchFiles;
|
|
16321
16437
|
const aiderCachingEnabledChanged = oldSettings.aider.cachingEnabled !== newSettings?.aider.cachingEnabled;
|
|
16322
16438
|
const aiderConfirmBeforeEditChanged = oldSettings.aider.confirmBeforeEdit !== newSettings?.aider.confirmBeforeEdit;
|
|
16439
|
+
const proxyChanged = oldSettings.proxy?.enabled !== newSettings.proxy?.enabled || oldSettings.proxy?.url !== newSettings.proxy?.url;
|
|
16323
16440
|
if ((aiderOptionsChanged || aiderAutoCommitsChanged || aiderWatchFilesChanged || aiderCachingEnabledChanged || aiderConfirmBeforeEditChanged) && await this.shouldStartAider()) {
|
|
16324
16441
|
logger.debug("Aider options changed, restarting Aider.");
|
|
16325
16442
|
void this.aiderManager.start(true);
|
|
16326
|
-
} else if (aiderEnvVarsChanged) {
|
|
16443
|
+
} else if (aiderEnvVarsChanged || proxyChanged) {
|
|
16327
16444
|
logger.debug("Aider environment variables changed, updating connectors.");
|
|
16328
|
-
const updatedEnvironmentVariables =
|
|
16445
|
+
const updatedEnvironmentVariables = {
|
|
16446
|
+
...getEnvironmentVariablesForAider(newSettings, this.project.baseDir),
|
|
16447
|
+
...getProxyEnvVars(newSettings)
|
|
16448
|
+
};
|
|
16329
16449
|
this.sendUpdateEnvVars(updatedEnvironmentVariables);
|
|
16330
16450
|
}
|
|
16331
16451
|
}
|
|
@@ -16906,16 +17026,14 @@ ${diff}
|
|
|
16906
17026
|
return;
|
|
16907
17027
|
}
|
|
16908
17028
|
if (error) {
|
|
17029
|
+
this.addLogMessage("loading", void 0, true);
|
|
16909
17030
|
const isConflict = error.gitOutput?.includes("Resolve all conflicts");
|
|
16910
|
-
|
|
16911
|
-
"error",
|
|
16912
|
-
|
|
16913
|
-
true,
|
|
16914
|
-
void 0,
|
|
16915
|
-
isConflict ? ["abort-rebase", "resolve-conflicts-with-agent"] : void 0
|
|
16916
|
-
);
|
|
17031
|
+
if (!isConflict) {
|
|
17032
|
+
this.addLogMessage("error", error.getErrorDetails(), true);
|
|
17033
|
+
}
|
|
16917
17034
|
}
|
|
16918
17035
|
} catch (error) {
|
|
17036
|
+
this.addLogMessage("loading", void 0, true);
|
|
16919
17037
|
logger.error("Failed to rebase worktree:", {
|
|
16920
17038
|
error: error instanceof Error ? error.message : String(error)
|
|
16921
17039
|
});
|
|
@@ -16949,6 +17067,8 @@ ${diff}
|
|
|
16949
17067
|
if (!activeProfile) {
|
|
16950
17068
|
throw new Error("No active agent profile found");
|
|
16951
17069
|
}
|
|
17070
|
+
const previousTaskState = this.task.state;
|
|
17071
|
+
await this.saveTask({ state: DefaultTaskState.InProgress });
|
|
16952
17072
|
try {
|
|
16953
17073
|
this.addLogMessage("loading", `Resolving conflicts in ${directoryName}...`);
|
|
16954
17074
|
const files = await this.worktreeManager.listConflictedFiles(directoryPath);
|
|
@@ -17033,13 +17153,8 @@ ${diff}
|
|
|
17033
17153
|
}
|
|
17034
17154
|
});
|
|
17035
17155
|
await Promise.all(resolutionPromises);
|
|
17036
|
-
if (interruptedCount
|
|
17037
|
-
this.addLogMessage("
|
|
17038
|
-
} else if (interruptedCount < files.length) {
|
|
17039
|
-
this.addLogMessage("warning", "Some conflicts were resolved, but some were interrupted. You can continue the rebase.", true, void 0, [
|
|
17040
|
-
"continue-rebase",
|
|
17041
|
-
"abort-rebase"
|
|
17042
|
-
]);
|
|
17156
|
+
if (interruptedCount > 0 && interruptedCount < files.length) {
|
|
17157
|
+
this.addLogMessage("warning", "Some conflicts were resolved, but some were interrupted. You can continue the rebase.", true, void 0, []);
|
|
17043
17158
|
}
|
|
17044
17159
|
} catch (error) {
|
|
17045
17160
|
logger.error("Failed to resolve conflicts with agent:", error);
|
|
@@ -17048,6 +17163,8 @@ ${diff}
|
|
|
17048
17163
|
error instanceof GitError ? error.getErrorDetails() : `Failed to resolve conflicts with agent: ${error instanceof Error ? error.message : String(error)}`,
|
|
17049
17164
|
true
|
|
17050
17165
|
);
|
|
17166
|
+
} finally {
|
|
17167
|
+
await this.saveTask({ state: previousTaskState });
|
|
17051
17168
|
}
|
|
17052
17169
|
await this.sendWorktreeIntegrationStatusUpdated();
|
|
17053
17170
|
}
|
|
@@ -17084,17 +17201,17 @@ ${diff}
|
|
|
17084
17201
|
this.addLogMessage("loading", "Continuing rebase...");
|
|
17085
17202
|
await this.worktreeManager.continueRebase(this.task.worktree.path);
|
|
17086
17203
|
await this.saveTask({ lastMergeState: void 0 });
|
|
17087
|
-
this.addLogMessage("info", "Rebase
|
|
17204
|
+
this.addLogMessage("info", "Rebase completed", true);
|
|
17088
17205
|
} catch (error) {
|
|
17089
17206
|
logger.error("Failed to continue rebase:", error);
|
|
17090
17207
|
const isConflict = error instanceof GitError && error.gitOutput?.includes("Resolve all conflicts manually");
|
|
17091
|
-
|
|
17092
|
-
|
|
17093
|
-
|
|
17094
|
-
|
|
17095
|
-
|
|
17096
|
-
|
|
17097
|
-
|
|
17208
|
+
if (!isConflict) {
|
|
17209
|
+
this.addLogMessage(
|
|
17210
|
+
"error",
|
|
17211
|
+
error instanceof GitError ? error.getErrorDetails() : `Failed to continue rebase: ${error instanceof Error ? error.message : String(error)}`,
|
|
17212
|
+
true
|
|
17213
|
+
);
|
|
17214
|
+
}
|
|
17098
17215
|
}
|
|
17099
17216
|
await this.sendUpdatedFilesUpdated();
|
|
17100
17217
|
await this.sendWorktreeIntegrationStatusUpdated();
|
|
@@ -17158,50 +17275,53 @@ ${diff}
|
|
|
17158
17275
|
async generateText(modelId, systemPrompt, prompt) {
|
|
17159
17276
|
return this.agent.generateText(modelId, systemPrompt, prompt, this.getProjectDir());
|
|
17160
17277
|
}
|
|
17161
|
-
async
|
|
17162
|
-
const filePath = path.isAbsolute(filename) ? filename : path.join(this.getTaskDir(), filename);
|
|
17163
|
-
const fileExtension = path.extname(filename).slice(1) || "";
|
|
17164
|
-
let contextLines = [];
|
|
17165
|
-
try {
|
|
17166
|
-
const fileContent = await fs.readFile(filePath, "utf-8");
|
|
17167
|
-
const lines = fileContent.split("\n");
|
|
17168
|
-
const startLine = Math.max(0, lineNumber - contextSize - 1);
|
|
17169
|
-
const endLine = Math.min(lines.length, lineNumber + contextSize);
|
|
17170
|
-
contextLines = lines.slice(startLine, endLine).map((content, index) => ({
|
|
17171
|
-
lineNumber: startLine + index + 1,
|
|
17172
|
-
content
|
|
17173
|
-
}));
|
|
17174
|
-
} catch (error) {
|
|
17175
|
-
logger.warn("Failed to read file for context extraction", {
|
|
17176
|
-
filePath,
|
|
17177
|
-
error
|
|
17178
|
-
});
|
|
17179
|
-
}
|
|
17180
|
-
const prompt = await this.promptsManager.getCodeInlineRequestPrompt(this, {
|
|
17181
|
-
filename,
|
|
17182
|
-
lineNumber,
|
|
17183
|
-
fileExtension,
|
|
17184
|
-
contextLines,
|
|
17185
|
-
userComment
|
|
17186
|
-
});
|
|
17278
|
+
async runCodeChangeRequests(requests, contextSize = 5, createNewTask) {
|
|
17187
17279
|
const mode = this.getCurrentMode();
|
|
17280
|
+
const promptRequests = await Promise.all(
|
|
17281
|
+
requests.map(async (request) => {
|
|
17282
|
+
const filePath = path.isAbsolute(request.filename) ? request.filename : path.join(this.getTaskDir(), request.filename);
|
|
17283
|
+
const fileExtension = path.extname(request.filename).slice(1) || "";
|
|
17284
|
+
let contextLines = [];
|
|
17285
|
+
try {
|
|
17286
|
+
const fileContent = await fs.readFile(filePath, "utf-8");
|
|
17287
|
+
const lines = fileContent.split("\n");
|
|
17288
|
+
const startLine = Math.max(0, request.lineNumber - contextSize - 1);
|
|
17289
|
+
const endLine = Math.min(lines.length, request.lineNumber + contextSize);
|
|
17290
|
+
contextLines = lines.slice(startLine, endLine).map((content, index) => ({
|
|
17291
|
+
lineNumber: startLine + index + 1,
|
|
17292
|
+
content
|
|
17293
|
+
}));
|
|
17294
|
+
} catch (error) {
|
|
17295
|
+
logger.warn("Failed to read file for context extraction", {
|
|
17296
|
+
filePath,
|
|
17297
|
+
error
|
|
17298
|
+
});
|
|
17299
|
+
}
|
|
17300
|
+
return {
|
|
17301
|
+
filename: request.filename,
|
|
17302
|
+
lineNumber: request.lineNumber,
|
|
17303
|
+
fileExtension,
|
|
17304
|
+
contextLines,
|
|
17305
|
+
userComment: request.userComment
|
|
17306
|
+
};
|
|
17307
|
+
})
|
|
17308
|
+
);
|
|
17309
|
+
const prompt = await this.promptsManager.getCodeChangeRequestsPrompt(this, {
|
|
17310
|
+
requests: promptRequests
|
|
17311
|
+
});
|
|
17188
17312
|
if (!createNewTask) {
|
|
17313
|
+
const uniqueFiles = [...new Set(requests.map((r) => r.filename))];
|
|
17189
17314
|
if (AIDER_MODES.includes(mode)) {
|
|
17190
|
-
|
|
17191
|
-
path: filename
|
|
17192
|
-
}
|
|
17315
|
+
for (const filename of uniqueFiles) {
|
|
17316
|
+
await this.addFiles({ path: filename });
|
|
17317
|
+
}
|
|
17193
17318
|
}
|
|
17194
17319
|
void this.runPrompt(prompt, mode, false);
|
|
17195
17320
|
return;
|
|
17196
17321
|
}
|
|
17197
|
-
|
|
17198
|
-
baseDir: this.project.baseDir,
|
|
17199
|
-
taskId: INTERNAL_TASK_ID,
|
|
17200
|
-
level: "loading",
|
|
17201
|
-
message: "Creating task for inline code request..."
|
|
17202
|
-
});
|
|
17322
|
+
const taskName = requests.length === 1 ? `${requests[0].filename}:${requests[0].lineNumber}` : `${requests.length} change requests`;
|
|
17203
17323
|
const newTaskData = await this.project.createNewTask({
|
|
17204
|
-
name:
|
|
17324
|
+
name: taskName,
|
|
17205
17325
|
sendEvent: false,
|
|
17206
17326
|
autoApprove: true,
|
|
17207
17327
|
activate: true,
|
|
@@ -17215,9 +17335,10 @@ ${diff}
|
|
|
17215
17335
|
}
|
|
17216
17336
|
await newTask.init();
|
|
17217
17337
|
if (AIDER_MODES.includes(mode)) {
|
|
17218
|
-
|
|
17219
|
-
|
|
17220
|
-
|
|
17338
|
+
const uniqueFiles = [...new Set(requests.map((r) => r.filename))];
|
|
17339
|
+
for (const filename of uniqueFiles) {
|
|
17340
|
+
await newTask.addFiles({ path: filename });
|
|
17341
|
+
}
|
|
17221
17342
|
}
|
|
17222
17343
|
this.eventManager.sendTaskCreated(newTask.task, true);
|
|
17223
17344
|
void newTask.runPrompt(prompt, mode, false);
|
|
@@ -17379,6 +17500,9 @@ class Project {
|
|
|
17379
17500
|
if (!parentTask) {
|
|
17380
17501
|
throw new Error(`Parent task with id ${normalizedParams.parentId} not found`);
|
|
17381
17502
|
}
|
|
17503
|
+
if (!parentTask.task.createdAt) {
|
|
17504
|
+
await parentTask.saveTask();
|
|
17505
|
+
}
|
|
17382
17506
|
}
|
|
17383
17507
|
const sourceTask = parentTask || this.getMostRecentTask();
|
|
17384
17508
|
const defaultWorkingMode = this.store.getSettings().taskSettings.defaultWorkingMode || "local";
|
|
@@ -18361,8 +18485,7 @@ const loadAnthropicCompatibleModels = async (profile, settings) => {
|
|
|
18361
18485
|
const models = data.data?.map((model) => {
|
|
18362
18486
|
return {
|
|
18363
18487
|
id: model.id,
|
|
18364
|
-
providerId: profile.id
|
|
18365
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
18488
|
+
providerId: profile.id
|
|
18366
18489
|
};
|
|
18367
18490
|
}) || [];
|
|
18368
18491
|
logger.info(`Loaded ${models.length} Anthropic-compatible models for profile ${profile.id}`);
|
|
@@ -18475,6 +18598,11 @@ const AUGGIE_MODELS = [
|
|
|
18475
18598
|
maxInputTokens: 2e5,
|
|
18476
18599
|
maxOutputTokensLimit: 32768
|
|
18477
18600
|
},
|
|
18601
|
+
{
|
|
18602
|
+
id: "claude-opus-4-7",
|
|
18603
|
+
maxInputTokens: 2e5,
|
|
18604
|
+
maxOutputTokensLimit: 32768
|
|
18605
|
+
},
|
|
18478
18606
|
{ id: "gpt-5-1", maxInputTokens: 2e5, maxOutputTokensLimit: 16384 },
|
|
18479
18607
|
{ id: "gpt-5-2", maxInputTokens: 2e5, maxOutputTokensLimit: 16384 },
|
|
18480
18608
|
{ id: "gpt-5-4", maxInputTokens: 2e5, maxOutputTokensLimit: 16384 }
|
|
@@ -18786,8 +18914,7 @@ const loadBedrockModels = async (profile, settings) => {
|
|
|
18786
18914
|
if (response.authorizationStatus === "AUTHORIZED" && response.entitlementAvailability === "AVAILABLE" && response.regionAvailability === "AVAILABLE") {
|
|
18787
18915
|
availableModels.push({
|
|
18788
18916
|
id: inferenceProfile.inferenceProfileId,
|
|
18789
|
-
providerId: profile.id
|
|
18790
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
18917
|
+
providerId: profile.id
|
|
18791
18918
|
});
|
|
18792
18919
|
logger.debug(`Profile ${inferenceProfile.inferenceProfileId} with model ${modelId} is available and authorized`);
|
|
18793
18920
|
} else {
|
|
@@ -18941,8 +19068,7 @@ const loadCerebrasModels = async (profile, settings) => {
|
|
|
18941
19068
|
return {
|
|
18942
19069
|
id: model.id,
|
|
18943
19070
|
providerId: profile.id,
|
|
18944
|
-
maxInputTokens: model.max_context_length
|
|
18945
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
19071
|
+
maxInputTokens: model.max_context_length
|
|
18946
19072
|
};
|
|
18947
19073
|
}) || [];
|
|
18948
19074
|
logger.info(`Loaded ${models.length} Cerebras models for profile ${profile.id}`);
|
|
@@ -19212,8 +19338,7 @@ const loadDeepseekModels = async (profile, settings) => {
|
|
|
19212
19338
|
const models = data.data?.map((m) => {
|
|
19213
19339
|
return {
|
|
19214
19340
|
id: m.id,
|
|
19215
|
-
providerId: profile.id
|
|
19216
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
19341
|
+
providerId: profile.id
|
|
19217
19342
|
};
|
|
19218
19343
|
}) || [];
|
|
19219
19344
|
logger.info(`Loaded ${models.length} DeepSeek models for profile ${profile.id}`);
|
|
@@ -19619,8 +19744,7 @@ const loadGpustackModels = async (profile, settings) => {
|
|
|
19619
19744
|
id: model.name,
|
|
19620
19745
|
providerId: profile.id,
|
|
19621
19746
|
// Extract max_model_len from meta if available
|
|
19622
|
-
maxInputTokens: model.meta?.max_model_len
|
|
19623
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
19747
|
+
maxInputTokens: model.meta?.max_model_len
|
|
19624
19748
|
};
|
|
19625
19749
|
}) || [];
|
|
19626
19750
|
logger.info(`Loaded ${models.length} GPUStack models for profile ${profile.id}`);
|
|
@@ -19740,8 +19864,7 @@ const loadGroqModels = async (profile, settings) => {
|
|
|
19740
19864
|
const models = data.data?.map((model) => {
|
|
19741
19865
|
return {
|
|
19742
19866
|
id: model.id,
|
|
19743
|
-
providerId: profile.id
|
|
19744
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
19867
|
+
providerId: profile.id
|
|
19745
19868
|
};
|
|
19746
19869
|
}) || [];
|
|
19747
19870
|
logger.info(`Loaded ${models.length} Groq models for profile ${profile.id}`);
|
|
@@ -20129,8 +20252,7 @@ const loadLmStudioModels = async (profile, settings) => {
|
|
|
20129
20252
|
return {
|
|
20130
20253
|
id: model.id,
|
|
20131
20254
|
providerId: profile.id,
|
|
20132
|
-
maxInputTokens: model.max_context_length
|
|
20133
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
20255
|
+
maxInputTokens: model.max_context_length
|
|
20134
20256
|
};
|
|
20135
20257
|
}) || [];
|
|
20136
20258
|
logger.info(`Loaded ${models.length} LM Studio models from ${effectiveBaseUrl} for profile ${profile.id}`);
|
|
@@ -20210,7 +20332,63 @@ const loadMinimaxModels = async (profile) => {
|
|
|
20210
20332
|
}
|
|
20211
20333
|
const hardcodedModels = [
|
|
20212
20334
|
{
|
|
20213
|
-
id: "MiniMax-M2",
|
|
20335
|
+
id: "MiniMax-M2.7",
|
|
20336
|
+
providerId: profile.id,
|
|
20337
|
+
maxInputTokens: 204800,
|
|
20338
|
+
maxOutputTokensLimit: 131072,
|
|
20339
|
+
inputCostPerToken: 3e-7,
|
|
20340
|
+
// 0.3 per 1M tokens
|
|
20341
|
+
outputCostPerToken: 12e-7,
|
|
20342
|
+
// 1.2 per 1M tokens
|
|
20343
|
+
cacheReadInputTokenCost: 6e-8,
|
|
20344
|
+
// 0.06 per 1M tokens
|
|
20345
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20346
|
+
// 0.375 per 1M tokens
|
|
20347
|
+
},
|
|
20348
|
+
{
|
|
20349
|
+
id: "MiniMax-M2.7-highspeed",
|
|
20350
|
+
providerId: profile.id,
|
|
20351
|
+
maxInputTokens: 204800,
|
|
20352
|
+
maxOutputTokensLimit: 131072,
|
|
20353
|
+
inputCostPerToken: 6e-7,
|
|
20354
|
+
// 0.6 per 1M tokens
|
|
20355
|
+
outputCostPerToken: 24e-7,
|
|
20356
|
+
// 2.4 per 1M tokens
|
|
20357
|
+
cacheReadInputTokenCost: 6e-8,
|
|
20358
|
+
// 0.06 per 1M tokens
|
|
20359
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20360
|
+
// 0.375 per 1M tokens
|
|
20361
|
+
},
|
|
20362
|
+
{
|
|
20363
|
+
id: "MiniMax-M2.5",
|
|
20364
|
+
providerId: profile.id,
|
|
20365
|
+
maxInputTokens: 204800,
|
|
20366
|
+
maxOutputTokensLimit: 131072,
|
|
20367
|
+
inputCostPerToken: 3e-7,
|
|
20368
|
+
// 0.3 per 1M tokens
|
|
20369
|
+
outputCostPerToken: 12e-7,
|
|
20370
|
+
// 1.2 per 1M tokens
|
|
20371
|
+
cacheReadInputTokenCost: 3e-8,
|
|
20372
|
+
// 0.03 per 1M tokens
|
|
20373
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20374
|
+
// 0.375 per 1M tokens
|
|
20375
|
+
},
|
|
20376
|
+
{
|
|
20377
|
+
id: "MiniMax-M2.5-highspeed",
|
|
20378
|
+
providerId: profile.id,
|
|
20379
|
+
maxInputTokens: 204800,
|
|
20380
|
+
maxOutputTokensLimit: 131072,
|
|
20381
|
+
inputCostPerToken: 6e-7,
|
|
20382
|
+
// 0.6 per 1M tokens
|
|
20383
|
+
outputCostPerToken: 24e-7,
|
|
20384
|
+
// 2.4 per 1M tokens
|
|
20385
|
+
cacheReadInputTokenCost: 3e-8,
|
|
20386
|
+
// 0.03 per 1M tokens
|
|
20387
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20388
|
+
// 0.375 per 1M tokens
|
|
20389
|
+
},
|
|
20390
|
+
{
|
|
20391
|
+
id: "MiniMax-M2.1",
|
|
20214
20392
|
providerId: profile.id,
|
|
20215
20393
|
maxInputTokens: 204800,
|
|
20216
20394
|
maxOutputTokensLimit: 131072,
|
|
@@ -20220,12 +20398,25 @@ const loadMinimaxModels = async (profile) => {
|
|
|
20220
20398
|
// 1.2 per 1M tokens
|
|
20221
20399
|
cacheReadInputTokenCost: 3e-8,
|
|
20222
20400
|
// 0.03 per 1M tokens
|
|
20223
|
-
cacheWriteInputTokenCost:
|
|
20224
|
-
// 0.
|
|
20225
|
-
|
|
20401
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20402
|
+
// 0.375 per 1M tokens
|
|
20403
|
+
},
|
|
20404
|
+
{
|
|
20405
|
+
id: "MiniMax-M2.1-highspeed",
|
|
20406
|
+
providerId: profile.id,
|
|
20407
|
+
maxInputTokens: 204800,
|
|
20408
|
+
maxOutputTokensLimit: 131072,
|
|
20409
|
+
inputCostPerToken: 6e-7,
|
|
20410
|
+
// 0.6 per 1M tokens
|
|
20411
|
+
outputCostPerToken: 24e-7,
|
|
20412
|
+
// 2.4 per 1M tokens
|
|
20413
|
+
cacheReadInputTokenCost: 3e-8,
|
|
20414
|
+
// 0.03 per 1M tokens
|
|
20415
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20416
|
+
// 0.375 per 1M tokens
|
|
20226
20417
|
},
|
|
20227
20418
|
{
|
|
20228
|
-
id: "MiniMax-M2
|
|
20419
|
+
id: "MiniMax-M2",
|
|
20229
20420
|
providerId: profile.id,
|
|
20230
20421
|
maxInputTokens: 204800,
|
|
20231
20422
|
maxOutputTokensLimit: 131072,
|
|
@@ -20235,9 +20426,8 @@ const loadMinimaxModels = async (profile) => {
|
|
|
20235
20426
|
// 1.2 per 1M tokens
|
|
20236
20427
|
cacheReadInputTokenCost: 3e-8,
|
|
20237
20428
|
// 0.03 per 1M tokens
|
|
20238
|
-
cacheWriteInputTokenCost:
|
|
20239
|
-
// 0.
|
|
20240
|
-
temperature: 0.5
|
|
20429
|
+
cacheWriteInputTokenCost: 375e-9
|
|
20430
|
+
// 0.375 per 1M tokens
|
|
20241
20431
|
}
|
|
20242
20432
|
];
|
|
20243
20433
|
return { models: hardcodedModels, success: true };
|
|
@@ -20333,6 +20523,90 @@ const minimaxProviderStrategy = {
|
|
|
20333
20523
|
// Configuration helpers
|
|
20334
20524
|
getCacheControl: getMinimaxCacheControl
|
|
20335
20525
|
};
|
|
20526
|
+
const loadMistralModels = async (profile, settings) => {
|
|
20527
|
+
if (!isMistralProvider(profile.provider)) {
|
|
20528
|
+
return { models: [], success: false };
|
|
20529
|
+
}
|
|
20530
|
+
const provider = profile.provider;
|
|
20531
|
+
const apiKey = provider.apiKey || "";
|
|
20532
|
+
const apiKeyEnv = getEffectiveEnvironmentVariable("MISTRAL_API_KEY", settings);
|
|
20533
|
+
const effectiveApiKey = apiKey || apiKeyEnv?.value || "";
|
|
20534
|
+
if (!effectiveApiKey) {
|
|
20535
|
+
const errorMsg = "Mistral API key is required. Please set it in Providers settings or via MISTRAL_API_KEY environment variable.";
|
|
20536
|
+
logger.debug(errorMsg);
|
|
20537
|
+
return { models: [], success: false };
|
|
20538
|
+
}
|
|
20539
|
+
try {
|
|
20540
|
+
const response = await fetch("https://api.mistral.ai/v1/models", {
|
|
20541
|
+
headers: { Authorization: `Bearer ${effectiveApiKey}` }
|
|
20542
|
+
});
|
|
20543
|
+
if (!response.ok) {
|
|
20544
|
+
const errorMsg = `Mistral models API response failed: ${response.status} ${response.statusText} ${await response.text()}`;
|
|
20545
|
+
logger.error(errorMsg, {
|
|
20546
|
+
status: response.status,
|
|
20547
|
+
statusText: response.statusText
|
|
20548
|
+
});
|
|
20549
|
+
return { models: [], success: false, error: errorMsg };
|
|
20550
|
+
}
|
|
20551
|
+
const data = await response.json();
|
|
20552
|
+
const models = data.data?.map((model) => {
|
|
20553
|
+
return {
|
|
20554
|
+
id: model.id,
|
|
20555
|
+
providerId: profile.id,
|
|
20556
|
+
temperature: 0.7
|
|
20557
|
+
};
|
|
20558
|
+
}) || [];
|
|
20559
|
+
logger.info(`Loaded ${models.length} Mistral models for profile ${profile.id}`);
|
|
20560
|
+
return { models, success: true };
|
|
20561
|
+
} catch (error) {
|
|
20562
|
+
const errorMsg = typeof error === "string" ? error : error instanceof Error ? error.message : "Unknown error loading Mistral models";
|
|
20563
|
+
logger.error("Error loading Mistral models:", error);
|
|
20564
|
+
return { models: [], success: false, error: errorMsg };
|
|
20565
|
+
}
|
|
20566
|
+
};
|
|
20567
|
+
const hasMistralEnvVars = (settings) => {
|
|
20568
|
+
return !!getEffectiveEnvironmentVariable("MISTRAL_API_KEY", settings, void 0)?.value;
|
|
20569
|
+
};
|
|
20570
|
+
const getMistralAiderMapping = (provider, modelId) => {
|
|
20571
|
+
const mistralProvider = provider.provider;
|
|
20572
|
+
const envVars = {};
|
|
20573
|
+
if (mistralProvider.apiKey) {
|
|
20574
|
+
envVars.MISTRAL_API_KEY = mistralProvider.apiKey;
|
|
20575
|
+
}
|
|
20576
|
+
return {
|
|
20577
|
+
modelName: `mistral/${modelId}`,
|
|
20578
|
+
environmentVariables: envVars
|
|
20579
|
+
};
|
|
20580
|
+
};
|
|
20581
|
+
const createMistralLlm = (profile, model, settings, projectDir) => {
|
|
20582
|
+
const provider = profile.provider;
|
|
20583
|
+
let apiKey = provider.apiKey;
|
|
20584
|
+
if (!apiKey) {
|
|
20585
|
+
const effectiveVar = getEffectiveEnvironmentVariable("MISTRAL_API_KEY", settings, projectDir);
|
|
20586
|
+
if (effectiveVar) {
|
|
20587
|
+
apiKey = effectiveVar.value;
|
|
20588
|
+
logger.debug(`Loaded MISTRAL_API_KEY from ${effectiveVar.source}`);
|
|
20589
|
+
}
|
|
20590
|
+
}
|
|
20591
|
+
if (!apiKey) {
|
|
20592
|
+
throw new Error("Mistral API key is required in Providers settings or Aider environment variables (MISTRAL_API_KEY)");
|
|
20593
|
+
}
|
|
20594
|
+
const mistralProvider = mistral.createMistral({
|
|
20595
|
+
apiKey,
|
|
20596
|
+
headers: profile.headers
|
|
20597
|
+
});
|
|
20598
|
+
return mistralProvider(model.id);
|
|
20599
|
+
};
|
|
20600
|
+
const mistralProviderStrategy = {
|
|
20601
|
+
// Core LLM functions
|
|
20602
|
+
createLlm: createMistralLlm,
|
|
20603
|
+
getUsageReport: getDefaultUsageReport,
|
|
20604
|
+
// Model discovery functions
|
|
20605
|
+
loadModels: loadMistralModels,
|
|
20606
|
+
hasEnvVars: hasMistralEnvVars,
|
|
20607
|
+
getAiderMapping: getMistralAiderMapping,
|
|
20608
|
+
getModelInfo: getDefaultModelInfo
|
|
20609
|
+
};
|
|
20336
20610
|
const loadOllamaModels = async (profile, settings) => {
|
|
20337
20611
|
if (!isOllamaProvider(profile.provider)) {
|
|
20338
20612
|
return { models: [], success: false };
|
|
@@ -20359,8 +20633,7 @@ const loadOllamaModels = async (profile, settings) => {
|
|
|
20359
20633
|
const models = data?.models?.map((m) => {
|
|
20360
20634
|
return {
|
|
20361
20635
|
id: m.name,
|
|
20362
|
-
providerId: profile.id
|
|
20363
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
20636
|
+
providerId: profile.id
|
|
20364
20637
|
};
|
|
20365
20638
|
}) || [];
|
|
20366
20639
|
logger.info(`Loaded ${models.length} Ollama models from ${effectiveBaseUrl} for profile ${profile.id}`);
|
|
@@ -20698,8 +20971,7 @@ const loadOpenaiCompatibleModels = async (profile, settings) => {
|
|
|
20698
20971
|
const models = data.data?.map((model) => {
|
|
20699
20972
|
return {
|
|
20700
20973
|
id: model.id,
|
|
20701
|
-
providerId: profile.id
|
|
20702
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
20974
|
+
providerId: profile.id
|
|
20703
20975
|
};
|
|
20704
20976
|
}) || [];
|
|
20705
20977
|
logger.info(`Loaded ${models.length} OpenAI-compatible models for profile ${profile.id}`);
|
|
@@ -20818,7 +21090,7 @@ const getDefaultModelTemperature$2 = (modelId) => {
|
|
|
20818
21090
|
if (modelId.includes("glm-")) {
|
|
20819
21091
|
return 0.7;
|
|
20820
21092
|
}
|
|
20821
|
-
return
|
|
21093
|
+
return void 0;
|
|
20822
21094
|
};
|
|
20823
21095
|
const loadOpencodeModels = async (profile, settings) => {
|
|
20824
21096
|
if (!isOpenCodeProvider(profile.provider)) {
|
|
@@ -20949,7 +21221,7 @@ const getDefaultModelTemperature$1 = (modelId) => {
|
|
|
20949
21221
|
if (modelId.includes("qwen")) {
|
|
20950
21222
|
return 0.55;
|
|
20951
21223
|
}
|
|
20952
|
-
return
|
|
21224
|
+
return void 0;
|
|
20953
21225
|
};
|
|
20954
21226
|
const loadOpenrouterModels = async (profile, settings) => {
|
|
20955
21227
|
if (!isOpenRouterProvider(profile.provider)) {
|
|
@@ -21113,7 +21385,7 @@ const getDefaultModelTemperature = (modelId) => {
|
|
|
21113
21385
|
if (modelId.includes("qwen")) {
|
|
21114
21386
|
return 0.55;
|
|
21115
21387
|
}
|
|
21116
|
-
return
|
|
21388
|
+
return void 0;
|
|
21117
21389
|
};
|
|
21118
21390
|
const loadRequestyModels = async (profile, settings) => {
|
|
21119
21391
|
if (!isRequestyProvider(profile.provider)) {
|
|
@@ -21317,8 +21589,7 @@ const loadSyntheticModels = async (profile, settings) => {
|
|
|
21317
21589
|
const models = data.data?.map((model) => {
|
|
21318
21590
|
return {
|
|
21319
21591
|
id: model.id,
|
|
21320
|
-
providerId: profile.id
|
|
21321
|
-
temperature: DEFAULT_MODEL_TEMPERATURE
|
|
21592
|
+
providerId: profile.id
|
|
21322
21593
|
};
|
|
21323
21594
|
}) || [];
|
|
21324
21595
|
logger.info(`Loaded ${models.length} Synthetic models for profile ${profile.id}`);
|
|
@@ -21687,6 +21958,7 @@ class ModelManager {
|
|
|
21687
21958
|
litellm: litellmProviderStrategy,
|
|
21688
21959
|
lmstudio: lmStudioProviderStrategy,
|
|
21689
21960
|
minimax: minimaxProviderStrategy,
|
|
21961
|
+
mistral: mistralProviderStrategy,
|
|
21690
21962
|
ollama: ollamaProviderStrategy,
|
|
21691
21963
|
openai: openaiProviderStrategy,
|
|
21692
21964
|
"openai-compatible": openaiCompatibleProviderStrategy,
|
|
@@ -23171,12 +23443,13 @@ class MemoryManager {
|
|
|
23171
23443
|
*/
|
|
23172
23444
|
async storeMemory(projectId, taskId, type, content) {
|
|
23173
23445
|
if (!await this.waitForInit() || !this.isMemoryEnabled() || !this.db) {
|
|
23174
|
-
return;
|
|
23446
|
+
return "";
|
|
23175
23447
|
}
|
|
23176
23448
|
try {
|
|
23177
23449
|
const embedding = await this.getEmbedding(content);
|
|
23450
|
+
const id = uuid.v4();
|
|
23178
23451
|
const memoryWithVector = {
|
|
23179
|
-
id
|
|
23452
|
+
id,
|
|
23180
23453
|
type,
|
|
23181
23454
|
content,
|
|
23182
23455
|
taskid: taskId,
|
|
@@ -23196,8 +23469,10 @@ class MemoryManager {
|
|
|
23196
23469
|
taskId: memoryWithVector.taskid,
|
|
23197
23470
|
content: memoryWithVector.content.substring(0, 100)
|
|
23198
23471
|
});
|
|
23472
|
+
return id;
|
|
23199
23473
|
} catch (error) {
|
|
23200
23474
|
logger.error("Failed to store memory:", error);
|
|
23475
|
+
return "";
|
|
23201
23476
|
}
|
|
23202
23477
|
}
|
|
23203
23478
|
/**
|
|
@@ -23353,6 +23628,16 @@ class MemoryManager {
|
|
|
23353
23628
|
isMemoryEnabled() {
|
|
23354
23629
|
return this.isInitialized && this.store.getSettings().memory.enabled || false;
|
|
23355
23630
|
}
|
|
23631
|
+
setMemoryEnabled(enabled) {
|
|
23632
|
+
const settings = this.store.getSettings();
|
|
23633
|
+
this.store.saveSettings({
|
|
23634
|
+
...settings,
|
|
23635
|
+
memory: {
|
|
23636
|
+
...settings.memory,
|
|
23637
|
+
enabled
|
|
23638
|
+
}
|
|
23639
|
+
});
|
|
23640
|
+
}
|
|
23356
23641
|
}
|
|
23357
23642
|
const AIDER_DESK_EXTENSIONS_REPO_URL = "https://github.com/hotovo/aider-desk/tree/main/packages/extensions/extensions/";
|
|
23358
23643
|
const baseJitiOptions = {
|
|
@@ -23721,12 +24006,13 @@ class ProjectContextImpl {
|
|
|
23721
24006
|
}
|
|
23722
24007
|
}
|
|
23723
24008
|
class ExtensionContextImpl {
|
|
23724
|
-
constructor(extensionId, extensionName, store, modelManager, eventManager, project, task) {
|
|
24009
|
+
constructor(extensionId, extensionName, store, modelManager, eventManager, memoryManager, project, task) {
|
|
23725
24010
|
this.extensionId = extensionId;
|
|
23726
24011
|
this.extensionName = extensionName;
|
|
23727
24012
|
this.store = store;
|
|
23728
24013
|
this.modelManager = modelManager;
|
|
23729
24014
|
this.eventManager = eventManager;
|
|
24015
|
+
this.memoryManager = memoryManager;
|
|
23730
24016
|
this.project = project;
|
|
23731
24017
|
this.task = task;
|
|
23732
24018
|
}
|
|
@@ -23843,6 +24129,12 @@ class ExtensionContextImpl {
|
|
|
23843
24129
|
return false;
|
|
23844
24130
|
}
|
|
23845
24131
|
}
|
|
24132
|
+
getMemoryContext() {
|
|
24133
|
+
if (!this.memoryManager) {
|
|
24134
|
+
throw new Error("MemoryManager not available");
|
|
24135
|
+
}
|
|
24136
|
+
return this.memoryManager;
|
|
24137
|
+
}
|
|
23846
24138
|
}
|
|
23847
24139
|
const CACHE_TTL_MS = 24 * 60 * 60 * 1e3;
|
|
23848
24140
|
class ExtensionFetcher {
|
|
@@ -24142,11 +24434,12 @@ class ExtensionFetcher {
|
|
|
24142
24434
|
}
|
|
24143
24435
|
}
|
|
24144
24436
|
class ExtensionManager {
|
|
24145
|
-
constructor(store, modelManager, eventManager, telemetryManager, registry = new ExtensionRegistry()) {
|
|
24437
|
+
constructor(store, modelManager, eventManager, telemetryManager, memoryManager, registry = new ExtensionRegistry()) {
|
|
24146
24438
|
this.store = store;
|
|
24147
24439
|
this.modelManager = modelManager;
|
|
24148
24440
|
this.eventManager = eventManager;
|
|
24149
24441
|
this.telemetryManager = telemetryManager;
|
|
24442
|
+
this.memoryManager = memoryManager;
|
|
24150
24443
|
this.registry = registry;
|
|
24151
24444
|
this.loader = new ExtensionLoader();
|
|
24152
24445
|
this.fetcher = new ExtensionFetcher();
|
|
@@ -24253,7 +24546,7 @@ class ExtensionManager {
|
|
|
24253
24546
|
return true;
|
|
24254
24547
|
}
|
|
24255
24548
|
try {
|
|
24256
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager,
|
|
24549
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project);
|
|
24257
24550
|
await instance.onLoad(context);
|
|
24258
24551
|
this.registry.setInitialized(filePath, true);
|
|
24259
24552
|
this.eventManager.sendExtensionUIRefresh({
|
|
@@ -24588,7 +24881,16 @@ class ExtensionManager {
|
|
|
24588
24881
|
continue;
|
|
24589
24882
|
}
|
|
24590
24883
|
try {
|
|
24591
|
-
const context = new ExtensionContextImpl(
|
|
24884
|
+
const context = new ExtensionContextImpl(
|
|
24885
|
+
loaded.id,
|
|
24886
|
+
metadata.name,
|
|
24887
|
+
this.store,
|
|
24888
|
+
this.modelManager,
|
|
24889
|
+
this.eventManager,
|
|
24890
|
+
this.memoryManager,
|
|
24891
|
+
task.project,
|
|
24892
|
+
task
|
|
24893
|
+
);
|
|
24592
24894
|
const tools = instance.getTools(context, mode, profile);
|
|
24593
24895
|
if (!Array.isArray(tools)) {
|
|
24594
24896
|
logger.error(`[Extensions] Extension '${metadata.name}' getTools() did not return an array`);
|
|
@@ -24628,7 +24930,16 @@ class ExtensionManager {
|
|
|
24628
24930
|
const registeredTools = this.getTools(task, mode, profile);
|
|
24629
24931
|
for (const { extensionId, extensionName, tool } of registeredTools) {
|
|
24630
24932
|
const toolId = tool.name;
|
|
24631
|
-
const context = new ExtensionContextImpl(
|
|
24933
|
+
const context = new ExtensionContextImpl(
|
|
24934
|
+
extensionId,
|
|
24935
|
+
extensionName,
|
|
24936
|
+
this.store,
|
|
24937
|
+
this.modelManager,
|
|
24938
|
+
this.eventManager,
|
|
24939
|
+
this.memoryManager,
|
|
24940
|
+
task.project,
|
|
24941
|
+
task
|
|
24942
|
+
);
|
|
24632
24943
|
if (profile.toolApprovals?.[toolId] === ToolApprovalState.Never) {
|
|
24633
24944
|
logger.debug(`[Extensions] Skipping tool '${tool.name}' (marked as Never approved)`);
|
|
24634
24945
|
continue;
|
|
@@ -24709,7 +25020,7 @@ class ExtensionManager {
|
|
|
24709
25020
|
continue;
|
|
24710
25021
|
}
|
|
24711
25022
|
try {
|
|
24712
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager,
|
|
25023
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project);
|
|
24713
25024
|
const commands = instance.getCommands(context);
|
|
24714
25025
|
if (!Array.isArray(commands)) {
|
|
24715
25026
|
logger.error(`[Extensions] Extension '${metadata.name}' getCommands() did not return an array`);
|
|
@@ -24743,7 +25054,7 @@ class ExtensionManager {
|
|
|
24743
25054
|
continue;
|
|
24744
25055
|
}
|
|
24745
25056
|
try {
|
|
24746
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager,
|
|
25057
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project);
|
|
24747
25058
|
const agents = instance.getAgents(context);
|
|
24748
25059
|
if (!Array.isArray(agents)) {
|
|
24749
25060
|
logger.error(`[Extensions] Extension '${metadata.name}' getAgents() did not return an array`);
|
|
@@ -24783,7 +25094,7 @@ class ExtensionManager {
|
|
|
24783
25094
|
continue;
|
|
24784
25095
|
}
|
|
24785
25096
|
try {
|
|
24786
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager,
|
|
25097
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project);
|
|
24787
25098
|
const modes = instance.getModes(context);
|
|
24788
25099
|
if (!Array.isArray(modes)) {
|
|
24789
25100
|
logger.error(`[Extensions] Extension '${metadata.name}' getModes() did not return an array`);
|
|
@@ -24836,7 +25147,7 @@ class ExtensionManager {
|
|
|
24836
25147
|
continue;
|
|
24837
25148
|
}
|
|
24838
25149
|
try {
|
|
24839
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager,
|
|
25150
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project);
|
|
24840
25151
|
const providers = instance.getProviders(context);
|
|
24841
25152
|
if (!Array.isArray(providers)) {
|
|
24842
25153
|
logger.error(`[Extensions] Extension '${metadata.name}' getProviders() did not return an array`);
|
|
@@ -24872,7 +25183,7 @@ class ExtensionManager {
|
|
|
24872
25183
|
continue;
|
|
24873
25184
|
}
|
|
24874
25185
|
try {
|
|
24875
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, project, task);
|
|
25186
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project, task);
|
|
24876
25187
|
const components = instance.getUIComponents(context);
|
|
24877
25188
|
if (!Array.isArray(components)) {
|
|
24878
25189
|
logger.error(`[Extensions] Extension '${metadata.name}' getUIComponents() did not return an array`);
|
|
@@ -24906,7 +25217,7 @@ class ExtensionManager {
|
|
|
24906
25217
|
return false;
|
|
24907
25218
|
}
|
|
24908
25219
|
try {
|
|
24909
|
-
const context = new ExtensionContextImpl(loadedExt.id, loadedExt.metadata.name, this.store, this.modelManager, this.eventManager);
|
|
25220
|
+
const context = new ExtensionContextImpl(loadedExt.id, loadedExt.metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager);
|
|
24910
25221
|
const jsx = instance.getConfigComponent(context);
|
|
24911
25222
|
return typeof jsx === "string" && jsx.length > 0;
|
|
24912
25223
|
} catch {
|
|
@@ -24930,7 +25241,7 @@ class ExtensionManager {
|
|
|
24930
25241
|
}
|
|
24931
25242
|
try {
|
|
24932
25243
|
logger.debug(`[Extensions] Getting UI extension data from '${id}' for component '${componentId}'`);
|
|
24933
|
-
const context = new ExtensionContextImpl(id, metadata.name, this.store, this.modelManager, this.eventManager, project, task);
|
|
25244
|
+
const context = new ExtensionContextImpl(id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project, task);
|
|
24934
25245
|
return await instance.getUIExtensionData(componentId, context);
|
|
24935
25246
|
} catch (error) {
|
|
24936
25247
|
logger.error(`[Extensions] Failed to get UI extension data from '${id}' for component '${componentId}':`, error);
|
|
@@ -24956,7 +25267,7 @@ class ExtensionManager {
|
|
|
24956
25267
|
}
|
|
24957
25268
|
try {
|
|
24958
25269
|
logger.debug(`[Extensions] Executing UI extension action '${action}' from '${id}' for component '${componentId}'`);
|
|
24959
|
-
const context = new ExtensionContextImpl(id, metadata.name, this.store, this.modelManager, this.eventManager, project, task);
|
|
25270
|
+
const context = new ExtensionContextImpl(id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project, task);
|
|
24960
25271
|
return await instance.executeUIExtensionAction(componentId, action, args, context);
|
|
24961
25272
|
} catch (error) {
|
|
24962
25273
|
logger.error(`[Extensions] Failed to execute UI extension action '${action}' from '${id}' for component '${componentId}':`, error);
|
|
@@ -24979,7 +25290,15 @@ class ExtensionManager {
|
|
|
24979
25290
|
return null;
|
|
24980
25291
|
}
|
|
24981
25292
|
try {
|
|
24982
|
-
const context = new ExtensionContextImpl(
|
|
25293
|
+
const context = new ExtensionContextImpl(
|
|
25294
|
+
loaded.id,
|
|
25295
|
+
loaded.metadata.name,
|
|
25296
|
+
this.store,
|
|
25297
|
+
this.modelManager,
|
|
25298
|
+
this.eventManager,
|
|
25299
|
+
this.memoryManager,
|
|
25300
|
+
project
|
|
25301
|
+
);
|
|
24983
25302
|
const jsx = loaded.instance.getConfigComponent(context);
|
|
24984
25303
|
if (typeof jsx !== "string" || jsx.length === 0) {
|
|
24985
25304
|
return null;
|
|
@@ -25007,7 +25326,15 @@ class ExtensionManager {
|
|
|
25007
25326
|
return null;
|
|
25008
25327
|
}
|
|
25009
25328
|
try {
|
|
25010
|
-
const context = new ExtensionContextImpl(
|
|
25329
|
+
const context = new ExtensionContextImpl(
|
|
25330
|
+
loaded.id,
|
|
25331
|
+
loaded.metadata.name,
|
|
25332
|
+
this.store,
|
|
25333
|
+
this.modelManager,
|
|
25334
|
+
this.eventManager,
|
|
25335
|
+
this.memoryManager,
|
|
25336
|
+
project
|
|
25337
|
+
);
|
|
25011
25338
|
return await loaded.instance.getConfigData(context);
|
|
25012
25339
|
} catch (error) {
|
|
25013
25340
|
logger.error(`[Extensions] Failed to get config data from extension '${extensionId}':`, error);
|
|
@@ -25031,7 +25358,15 @@ class ExtensionManager {
|
|
|
25031
25358
|
return null;
|
|
25032
25359
|
}
|
|
25033
25360
|
try {
|
|
25034
|
-
const context = new ExtensionContextImpl(
|
|
25361
|
+
const context = new ExtensionContextImpl(
|
|
25362
|
+
loaded.id,
|
|
25363
|
+
loaded.metadata.name,
|
|
25364
|
+
this.store,
|
|
25365
|
+
this.modelManager,
|
|
25366
|
+
this.eventManager,
|
|
25367
|
+
this.memoryManager,
|
|
25368
|
+
project
|
|
25369
|
+
);
|
|
25035
25370
|
return await loaded.instance.saveConfigData(configData, context);
|
|
25036
25371
|
} catch (error) {
|
|
25037
25372
|
logger.error(`[Extensions] Failed to save config data for extension '${extensionId}':`, error);
|
|
@@ -25064,7 +25399,7 @@ class ExtensionManager {
|
|
|
25064
25399
|
continue;
|
|
25065
25400
|
}
|
|
25066
25401
|
try {
|
|
25067
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager,
|
|
25402
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager);
|
|
25068
25403
|
const agents = instance.getAgents(context);
|
|
25069
25404
|
if (!Array.isArray(agents)) {
|
|
25070
25405
|
continue;
|
|
@@ -25100,7 +25435,7 @@ class ExtensionManager {
|
|
|
25100
25435
|
}
|
|
25101
25436
|
const { extensionId, extensionName, command } = registered;
|
|
25102
25437
|
try {
|
|
25103
|
-
const context = new ExtensionContextImpl(extensionId, extensionName, this.store, this.modelManager, this.eventManager, project, task);
|
|
25438
|
+
const context = new ExtensionContextImpl(extensionId, extensionName, this.store, this.modelManager, this.eventManager, this.memoryManager, project, task);
|
|
25104
25439
|
logger.debug(`[Extensions] Executing command '${commandName}' from extension '${extensionName}'`);
|
|
25105
25440
|
await command.execute(args, context);
|
|
25106
25441
|
logger.debug(`[Extensions] Command '${commandName}' executed successfully`);
|
|
@@ -25338,7 +25673,7 @@ class ExtensionManager {
|
|
|
25338
25673
|
}
|
|
25339
25674
|
logger.debug(`[Extensions] Dispatching event '${String(eventName)}' to extension '${metadata.name}'`);
|
|
25340
25675
|
try {
|
|
25341
|
-
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, project, task);
|
|
25676
|
+
const context = new ExtensionContextImpl(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, this.memoryManager, project, task);
|
|
25342
25677
|
const result = await handler.call(instance, currentEvent, context);
|
|
25343
25678
|
if (result && typeof result === "object") {
|
|
25344
25679
|
const partialEvent = result;
|
|
@@ -25361,13 +25696,13 @@ class ExtensionManager {
|
|
|
25361
25696
|
* @returns Sorted array of extensions
|
|
25362
25697
|
*/
|
|
25363
25698
|
sortExtensionsForDispatch(extensions, projectDir) {
|
|
25364
|
-
const
|
|
25699
|
+
const global2 = extensions.filter((e) => !e.projectDir);
|
|
25365
25700
|
const projectSpecific = extensions.filter((e) => e.projectDir === projectDir);
|
|
25366
|
-
return [...
|
|
25701
|
+
return [...global2, ...projectSpecific];
|
|
25367
25702
|
}
|
|
25368
25703
|
}
|
|
25369
25704
|
class EventsHandler {
|
|
25370
|
-
constructor(projectManager, store, mcpManager, versionsManager, modelManager, telemetryManager, dataManager, terminalManager, cloudflareTunnelManager, eventManager, agentProfileManager, memoryManager, extensionManager, windowManager) {
|
|
25705
|
+
constructor(projectManager, store, mcpManager, versionsManager, modelManager, telemetryManager, dataManager, terminalManager, cloudflareTunnelManager, eventManager, agentProfileManager, memoryManager, extensionManager, proxyManager, windowManager) {
|
|
25371
25706
|
this.projectManager = projectManager;
|
|
25372
25707
|
this.store = store;
|
|
25373
25708
|
this.mcpManager = mcpManager;
|
|
@@ -25381,6 +25716,7 @@ class EventsHandler {
|
|
|
25381
25716
|
this.agentProfileManager = agentProfileManager;
|
|
25382
25717
|
this.memoryManager = memoryManager;
|
|
25383
25718
|
this.extensionManager = extensionManager;
|
|
25719
|
+
this.proxyManager = proxyManager;
|
|
25384
25720
|
this.windowManager = windowManager;
|
|
25385
25721
|
}
|
|
25386
25722
|
loadSettings() {
|
|
@@ -25389,6 +25725,7 @@ class EventsHandler {
|
|
|
25389
25725
|
async saveSettings(newSettings) {
|
|
25390
25726
|
const oldSettings = this.store.getSettings();
|
|
25391
25727
|
this.store.saveSettings(newSettings);
|
|
25728
|
+
this.proxyManager.settingsChanged(oldSettings, newSettings);
|
|
25392
25729
|
void this.projectManager.settingsChanged(oldSettings, newSettings);
|
|
25393
25730
|
this.telemetryManager.settingsChanged(oldSettings, newSettings);
|
|
25394
25731
|
void this.memoryManager.settingsChanged(oldSettings, newSettings);
|
|
@@ -25530,8 +25867,8 @@ class EventsHandler {
|
|
|
25530
25867
|
const mode = this.store.getProjectSettings(baseDir).currentMode || "agent";
|
|
25531
25868
|
await task.handoffConversation(mode, focus);
|
|
25532
25869
|
}
|
|
25533
|
-
async
|
|
25534
|
-
await this.projectManager.getProject(baseDir).getTask(taskId)?.
|
|
25870
|
+
async runCodeChangeRequests(baseDir, taskId, requests, createNewTask) {
|
|
25871
|
+
await this.projectManager.getProject(baseDir).getTask(taskId)?.runCodeChangeRequests(requests, 5, createNewTask);
|
|
25535
25872
|
}
|
|
25536
25873
|
async loadInputHistory(baseDir) {
|
|
25537
25874
|
return await this.projectManager.getProject(baseDir).loadInputHistory();
|
|
@@ -25761,8 +26098,9 @@ class EventsHandler {
|
|
|
25761
26098
|
}
|
|
25762
26099
|
await task.restoreFile(filePath);
|
|
25763
26100
|
}
|
|
25764
|
-
async readFile(baseDir, filePath) {
|
|
25765
|
-
const
|
|
26101
|
+
async readFile(baseDir, taskId, filePath) {
|
|
26102
|
+
const task = this.projectManager.getProject(baseDir).getTask(taskId);
|
|
26103
|
+
const absolutePath = path.isAbsolute(filePath) ? filePath : task ? await task.resolveContextFilePath(filePath) ?? path.join(baseDir, filePath) : path.join(baseDir, filePath);
|
|
25766
26104
|
const fileContentBuffer = await fs.readFile(absolutePath);
|
|
25767
26105
|
if (istextorbinary.isBinary(filePath, fileContentBuffer)) {
|
|
25768
26106
|
throw new Error("Cannot read binary file");
|
|
@@ -26387,7 +26725,7 @@ class PromptsManager {
|
|
|
26387
26725
|
"conflict-resolution-system",
|
|
26388
26726
|
"update-task-state",
|
|
26389
26727
|
"handoff",
|
|
26390
|
-
"code-
|
|
26728
|
+
"code-change-requests"
|
|
26391
26729
|
];
|
|
26392
26730
|
}
|
|
26393
26731
|
async loadGlobalTemplateSource(name) {
|
|
@@ -26664,8 +27002,8 @@ ${content}
|
|
|
26664
27002
|
};
|
|
26665
27003
|
return await this.render("handoff", data, task.getProjectDir(), task);
|
|
26666
27004
|
};
|
|
26667
|
-
|
|
26668
|
-
return await this.render("code-
|
|
27005
|
+
getCodeChangeRequestsPrompt = async (task, data) => {
|
|
27006
|
+
return await this.render("code-change-requests", data, task.getProjectDir(), task);
|
|
26669
27007
|
};
|
|
26670
27008
|
}
|
|
26671
27009
|
const execAsync = util.promisify(child_process.exec);
|
|
@@ -26925,6 +27263,8 @@ class PythonDependenciesInstaller {
|
|
|
26925
27263
|
}
|
|
26926
27264
|
}
|
|
26927
27265
|
const initManagers = async (store, windowManager) => {
|
|
27266
|
+
const proxyManager = new ProxyManager();
|
|
27267
|
+
proxyManager.init(store.getSettings());
|
|
26928
27268
|
const telemetryManager = new TelemetryManager(store);
|
|
26929
27269
|
telemetryManager.init().catch((error) => {
|
|
26930
27270
|
logger.error("[Telemetry] Telemetry initialization failed, continuing without analytics:", error);
|
|
@@ -26943,7 +27283,7 @@ const initManagers = async (store, windowManager) => {
|
|
|
26943
27283
|
memoryManager.init().catch((error) => {
|
|
26944
27284
|
logger.error("[Memory] Memory system initialization failed, continuing without memories:", error);
|
|
26945
27285
|
});
|
|
26946
|
-
const extensionManager = new ExtensionManager(store, modelManager, eventManager, telemetryManager);
|
|
27286
|
+
const extensionManager = new ExtensionManager(store, modelManager, eventManager, telemetryManager, memoryManager);
|
|
26947
27287
|
extensionManager.init().catch((error) => {
|
|
26948
27288
|
logger.error("[Extensions] Extension system initialization failed, continuing without extensions:", error);
|
|
26949
27289
|
});
|
|
@@ -26988,9 +27328,10 @@ const initManagers = async (store, windowManager) => {
|
|
|
26988
27328
|
agentProfileManager,
|
|
26989
27329
|
memoryManager,
|
|
26990
27330
|
extensionManager,
|
|
27331
|
+
proxyManager,
|
|
26991
27332
|
windowManager
|
|
26992
27333
|
);
|
|
26993
|
-
const serverController = new ServerController(httpServer, projectManager, eventsHandler, store);
|
|
27334
|
+
const serverController = new ServerController(httpServer, projectManager, eventsHandler, store, pythonInstaller);
|
|
26994
27335
|
const connectorManager = new ConnectorManager(httpServer, projectManager, eventManager);
|
|
26995
27336
|
httpServer.listen(SERVER_PORT);
|
|
26996
27337
|
logger.info(`AiderDesk headless server listening on http://localhost:${SERVER_PORT}`);
|
|
@@ -27599,6 +27940,10 @@ const DEFAULT_SETTINGS = {
|
|
|
27599
27940
|
extensions: {
|
|
27600
27941
|
repositories: [AIDER_DESK_EXTENSIONS_REPO_URL],
|
|
27601
27942
|
disabled: []
|
|
27943
|
+
},
|
|
27944
|
+
proxy: {
|
|
27945
|
+
enabled: false,
|
|
27946
|
+
url: ""
|
|
27602
27947
|
}
|
|
27603
27948
|
};
|
|
27604
27949
|
const compareBaseDirs = (baseDir1, baseDir2) => {
|