@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.
Files changed (382) hide show
  1. package/out/renderer/assets/{_baseUniq-BPF2Herp.js → _baseUniq-B7TxjYgy.js} +1 -1
  2. package/out/renderer/assets/abap-B7h4dtBh.js +7 -0
  3. package/out/renderer/assets/actionscript-3-DtnkuHN2.js +7 -0
  4. package/out/renderer/assets/ada-BZS802Se.js +7 -0
  5. package/out/renderer/assets/andromeeda-C847lm7Z.js +4 -0
  6. package/out/renderer/assets/angular-html-BYG42TJr.js +42 -0
  7. package/out/renderer/assets/angular-ts-BftcHvZ6.js +29 -0
  8. package/out/renderer/assets/apache-D4roVlsU.js +7 -0
  9. package/out/renderer/assets/apex-B-mI3Md2.js +7 -0
  10. package/out/renderer/assets/apl-CGZawg-A.js +18 -0
  11. package/out/renderer/assets/applescript-C43Knf0G.js +7 -0
  12. package/out/renderer/assets/ara-DRBH84ND.js +7 -0
  13. package/out/renderer/assets/{arc-DfPLteHF.js → arc-TuVjX2tH.js} +1 -1
  14. package/out/renderer/assets/{architectureDiagram-Q4EWVU46-Bw0u-sSH.js → architectureDiagram-Q4EWVU46-CnAcyRvO.js} +5 -5
  15. package/out/renderer/assets/asciidoc-CT8_dLUs.js +7 -0
  16. package/out/renderer/assets/asm-3tg4MVib.js +7 -0
  17. package/out/renderer/assets/astro-BxdWOZvM.js +19 -0
  18. package/out/renderer/assets/aurora-x-wJ4-eM2h.js +4 -0
  19. package/out/renderer/assets/awk-ChreaG-G.js +7 -0
  20. package/out/renderer/assets/ayu-dark-rtpbXCNg.js +4 -0
  21. package/out/renderer/assets/ayu-light-BCZDSyV8.js +4 -0
  22. package/out/renderer/assets/ayu-mirage-BVoH71sA.js +4 -0
  23. package/out/renderer/assets/ballerina-B0yt0TYU.js +7 -0
  24. package/out/renderer/assets/bat-BzNgQIA7.js +7 -0
  25. package/out/renderer/assets/beancount-aZWrE5WV.js +7 -0
  26. package/out/renderer/assets/berry--Qc8OslH.js +7 -0
  27. package/out/renderer/assets/bibtex-BLeFwAes.js +7 -0
  28. package/out/renderer/assets/bicep-DbBeGdXQ.js +7 -0
  29. package/out/renderer/assets/bird2-aXhIUHPg.js +7 -0
  30. package/out/renderer/assets/blade-BbH7YAUi.js +22 -0
  31. package/out/renderer/assets/{blockDiagram-DXYQGD6D-CkfB9if8.js → blockDiagram-DXYQGD6D-DBoJhGAM.js} +6 -6
  32. package/out/renderer/assets/bsl-DwPS0BId.js +9 -0
  33. package/out/renderer/assets/c-C4VtT7JA.js +7 -0
  34. package/out/renderer/assets/c3-CWHczQMq.js +7 -0
  35. package/out/renderer/assets/{c4Diagram-AHTNJAMY-DweK9Liz.js → c4Diagram-AHTNJAMY-BzW0gKwX.js} +2 -2
  36. package/out/renderer/assets/cadence-S_NtR5Dy.js +7 -0
  37. package/out/renderer/assets/cairo-BtYx2aM5.js +9 -0
  38. package/out/renderer/assets/catppuccin-frappe-C21OPQfC.js +4 -0
  39. package/out/renderer/assets/catppuccin-latte-0ZtXlsrX.js +4 -0
  40. package/out/renderer/assets/catppuccin-macchiato-BD_FR4sl.js +4 -0
  41. package/out/renderer/assets/catppuccin-mocha-C653csR5.js +4 -0
  42. package/out/renderer/assets/{channel-C5wwrRof.js → channel-CqR4FAVX.js} +1 -1
  43. package/out/renderer/assets/{chunk-4BX2VUAB-0KM14cFd.js → chunk-4BX2VUAB-DQjg_Naa.js} +1 -1
  44. package/out/renderer/assets/{chunk-4TB4RGXK-CmVtCVL4.js → chunk-4TB4RGXK-DkcI1yaW.js} +5 -5
  45. package/out/renderer/assets/{chunk-55IACEB6-BzVYZvBM.js → chunk-55IACEB6-pFPEMTmI.js} +1 -1
  46. package/out/renderer/assets/{chunk-EDXVE4YY-BryQl5Kv.js → chunk-EDXVE4YY-DRk838hn.js} +1 -1
  47. package/out/renderer/assets/{chunk-FMBD7UC4-CRiLea_e.js → chunk-FMBD7UC4-BagQdd5u.js} +1 -1
  48. package/out/renderer/assets/{chunk-OYMX7WX6-Cpi4N3NO.js → chunk-OYMX7WX6-DOGJ-XHp.js} +3 -3
  49. package/out/renderer/assets/{chunk-QZHKN3VN-BT8kABWC.js → chunk-QZHKN3VN-CdzjbbBk.js} +1 -1
  50. package/out/renderer/assets/{chunk-YZCP3GAM-OLZV_Sef.js → chunk-YZCP3GAM-BKZRTlUj.js} +1 -1
  51. package/out/renderer/assets/clarity-D2ViJC0i.js +7 -0
  52. package/out/renderer/assets/{classDiagram-6PBFFD2Q-VdE6G90i.js → classDiagram-6PBFFD2Q-CjVhmlxb.js} +6 -6
  53. package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-VdE6G90i.js → classDiagram-v2-HSJHXN6E-CjVhmlxb.js} +6 -6
  54. package/out/renderer/assets/clojure-C_G4_w5x.js +7 -0
  55. package/out/renderer/assets/{clone-DwQZ86nS.js → clone-B-kqpcr4.js} +1 -1
  56. package/out/renderer/assets/cmake-CDfQILeU.js +7 -0
  57. package/out/renderer/assets/cobol-B8r1pfPr.js +13 -0
  58. package/out/renderer/assets/codeowners-awy7PWCD.js +7 -0
  59. package/out/renderer/assets/codeql-lfK8ppuq.js +7 -0
  60. package/out/renderer/assets/coffee-XLjtuEYs.js +9 -0
  61. package/out/renderer/assets/common-lisp-DAq1kaby.js +7 -0
  62. package/out/renderer/assets/coq-l_JvzFJl.js +7 -0
  63. package/out/renderer/assets/{cose-bilkent-S5V4N54A-BEcAKM9H.js → cose-bilkent-S5V4N54A-CZLRecVB.js} +1 -1
  64. package/out/renderer/assets/cpp-zh2ePAE_.js +22 -0
  65. package/out/renderer/assets/crystal-BqBRy7Ec.js +19 -0
  66. package/out/renderer/assets/csharp-DxX_6tHh.js +7 -0
  67. package/out/renderer/assets/css-BtVcDqlU.js +7 -0
  68. package/out/renderer/assets/csv-Ba84L8e5.js +7 -0
  69. package/out/renderer/assets/cue-BFSVLV6N.js +7 -0
  70. package/out/renderer/assets/cypher-DbUmWIxC.js +7 -0
  71. package/out/renderer/assets/d-9qSZPw74.js +7 -0
  72. package/out/renderer/assets/{dagre-KV5264BT-BcFQYL1M.js → dagre-KV5264BT-BUAzC7Um.js} +6 -6
  73. package/out/renderer/assets/dark-plus-DmZ1Dzd4.js +4 -0
  74. package/out/renderer/assets/dart-CCSsOg9l.js +7 -0
  75. package/out/renderer/assets/dax-CvsmLV-B.js +7 -0
  76. package/out/renderer/assets/desktop-_xiGZ9X1.js +7 -0
  77. package/out/renderer/assets/{diagram-5BDNPKRD-GrUNdC1u.js → diagram-5BDNPKRD-DNQEDszc.js} +6 -6
  78. package/out/renderer/assets/{diagram-G4DWMVQ6-CG4S-ov5.js → diagram-G4DWMVQ6-D9YY6W2O.js} +6 -6
  79. package/out/renderer/assets/{diagram-MMDJMWI5-9ogY3MRC.js → diagram-MMDJMWI5-B5H49OVD.js} +5 -5
  80. package/out/renderer/assets/{diagram-TYMM5635-Ck7mI1bS.js → diagram-TYMM5635-Bw7r467p.js} +5 -5
  81. package/out/renderer/assets/diff-BEdzuHlE.js +7 -0
  82. package/out/renderer/assets/docker-CUaLOm2I.js +7 -0
  83. package/out/renderer/assets/dotenv-Bb4iNxXK.js +7 -0
  84. package/out/renderer/assets/dracula-B8-AVrwI.js +4 -0
  85. package/out/renderer/assets/dracula-soft-BHeefow7.js +4 -0
  86. package/out/renderer/assets/dream-maker-CNLQpoF-.js +7 -0
  87. package/out/renderer/assets/edge-CnHxQ_FD.js +15 -0
  88. package/out/renderer/assets/elixir-B_LIBv5J.js +11 -0
  89. package/out/renderer/assets/elm-BlO7pcFp.js +10 -0
  90. package/out/renderer/assets/emacs-lisp-4gdXY_g3.js +7 -0
  91. package/out/renderer/assets/{erDiagram-SMLLAGMA-Dvf_c-7M.js → erDiagram-SMLLAGMA-Bz4ALNLp.js} +4 -4
  92. package/out/renderer/assets/erb-Bzn22wO6.js +28 -0
  93. package/out/renderer/assets/erlang-Ch5kuXHm.js +9 -0
  94. package/out/renderer/assets/everforest-dark-Cg1xdODP.js +4 -0
  95. package/out/renderer/assets/everforest-light-BmTD3bxe.js +4 -0
  96. package/out/renderer/assets/fennel-BTELNkeT.js +7 -0
  97. package/out/renderer/assets/fish-kGF2-4SL.js +7 -0
  98. package/out/renderer/assets/{flowDiagram-DWJPFMVM-CPDjOXYp.js → flowDiagram-DWJPFMVM-Uqg1ZeN2.js} +6 -6
  99. package/out/renderer/assets/fluent-YyC28MRr.js +7 -0
  100. package/out/renderer/assets/fortran-fixed-form-CpmOyvS5.js +9 -0
  101. package/out/renderer/assets/fortran-free-form-5X94ETMi.js +7 -0
  102. package/out/renderer/assets/fsharp-5vtGqRR9.js +9 -0
  103. package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-B4dJrK-3.js → ganttDiagram-T4ZO3ILL-Dm0tRLCH.js} +1 -1
  104. package/out/renderer/assets/gdresource-B5TLWiFO.js +11 -0
  105. package/out/renderer/assets/gdscript-CNW3Aj-d.js +7 -0
  106. package/out/renderer/assets/gdshader-BEzE4j_3.js +7 -0
  107. package/out/renderer/assets/genie-BvhtM5Ga.js +7 -0
  108. package/out/renderer/assets/gherkin-xCNF9gh8.js +7 -0
  109. package/out/renderer/assets/git-commit-PP9xCApN.js +9 -0
  110. package/out/renderer/assets/git-rebase-D-XQSvDj.js +9 -0
  111. package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-De2eCfMN.js → gitGraphDiagram-UUTBAWPF-R8imfIrj.js} +6 -6
  112. package/out/renderer/assets/github-dark-O22yVQaY.js +4 -0
  113. package/out/renderer/assets/github-dark-default-DB2Hkvqn.js +4 -0
  114. package/out/renderer/assets/github-dark-dimmed-CMZ_OfqC.js +4 -0
  115. package/out/renderer/assets/github-dark-high-contrast-DmxWVmCU.js +4 -0
  116. package/out/renderer/assets/github-light-BTbR9xVK.js +4 -0
  117. package/out/renderer/assets/github-light-default-DWEonwFe.js +4 -0
  118. package/out/renderer/assets/github-light-high-contrast-WJ_cPDts.js +4 -0
  119. package/out/renderer/assets/gleam-LmNxrMsN.js +7 -0
  120. package/out/renderer/assets/glimmer-js-h2QNNiD7.js +15 -0
  121. package/out/renderer/assets/glimmer-ts-Bk3uX6Ae.js +15 -0
  122. package/out/renderer/assets/glsl-CGsiYPcu.js +9 -0
  123. package/out/renderer/assets/gn-OUMx7fqt.js +7 -0
  124. package/out/renderer/assets/gnuplot-tV8vezdE.js +7 -0
  125. package/out/renderer/assets/go-DRMr3iML.js +7 -0
  126. package/out/renderer/assets/{graph-BFn23kR_.js → graph-B5YWEnt0.js} +2 -2
  127. package/out/renderer/assets/graphql-CwmtR1ib.js +15 -0
  128. package/out/renderer/assets/groovy-Bn4MhXgW.js +7 -0
  129. package/out/renderer/assets/gruvbox-dark-hard-DVsRsETr.js +4 -0
  130. package/out/renderer/assets/gruvbox-dark-medium-B5JBrQdg.js +4 -0
  131. package/out/renderer/assets/gruvbox-dark-soft-Db-YOqRx.js +4 -0
  132. package/out/renderer/assets/gruvbox-light-hard-CXzJt7DI.js +4 -0
  133. package/out/renderer/assets/gruvbox-light-medium-B89RAI1Y.js +4 -0
  134. package/out/renderer/assets/gruvbox-light-soft-Cs0hTZYv.js +4 -0
  135. package/out/renderer/assets/hack-BTX3ICIE.js +13 -0
  136. package/out/renderer/assets/haml-DrIklt7F.js +11 -0
  137. package/out/renderer/assets/handlebars-yWFGGD2R.js +15 -0
  138. package/out/renderer/assets/haskell-CzPS7wjM.js +7 -0
  139. package/out/renderer/assets/haxe-BpobLYM9.js +7 -0
  140. package/out/renderer/assets/hcl-axoq0Ycu.js +7 -0
  141. package/out/renderer/assets/hjson-I7LcauIB.js +7 -0
  142. package/out/renderer/assets/hlsl-TRzjajlb.js +7 -0
  143. package/out/renderer/assets/horizon-DWzh3z5C.js +4 -0
  144. package/out/renderer/assets/horizon-bright-C1AFkPsv.js +4 -0
  145. package/out/renderer/assets/houston-CF_ws8Cq.js +4 -0
  146. package/out/renderer/assets/html-GC16tDh9.js +11 -0
  147. package/out/renderer/assets/html-derivative-HU9p64q4.js +11 -0
  148. package/out/renderer/assets/http-DjsOm9E4.js +20 -0
  149. package/out/renderer/assets/hurl-Am2cDU4f.js +18 -0
  150. package/out/renderer/assets/hxml-Jle7oGdm.js +9 -0
  151. package/out/renderer/assets/hy-B1k9U6S8.js +7 -0
  152. package/out/renderer/assets/imba-C4923lSV.js +7 -0
  153. package/out/renderer/assets/{index-BkntVzTm.css → index-B6Zj03wk.css} +82 -24
  154. package/out/renderer/assets/{index-BL-57WPa.js → index-D7Xi0GX5.js} +30034 -9238
  155. package/out/renderer/assets/{infoDiagram-42DDH7IO-BIt9B6mQ.js → infoDiagram-42DDH7IO-CWPYNP1k.js} +4 -4
  156. package/out/renderer/assets/ini-B84Ha1bx.js +7 -0
  157. package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-CXZs0KGV.js → ishikawaDiagram-UXIWVN3A-CFTrc-S6.js} +1 -1
  158. package/out/renderer/assets/java-BfXh-0uJ.js +7 -0
  159. package/out/renderer/assets/javascript-BsAkV7mL.js +7 -0
  160. package/out/renderer/assets/jinja-FkIlHBgj.js +16 -0
  161. package/out/renderer/assets/jison-BkdOIOd4.js +9 -0
  162. package/out/renderer/assets/{journeyDiagram-VCZTEJTY-B-EXuj5b.js → journeyDiagram-VCZTEJTY-Dfd-piIf.js} +4 -4
  163. package/out/renderer/assets/json-TjWBGEk1.js +7 -0
  164. package/out/renderer/assets/json5-DCGCKrmX.js +7 -0
  165. package/out/renderer/assets/jsonc-DLVLp8id.js +7 -0
  166. package/out/renderer/assets/jsonl-B-R_pDGg.js +7 -0
  167. package/out/renderer/assets/jsonnet-Cs8BnnC6.js +7 -0
  168. package/out/renderer/assets/jssm-DDuANZ2u.js +7 -0
  169. package/out/renderer/assets/jsx-BPmvoin2.js +7 -0
  170. package/out/renderer/assets/julia-CU_UwNb8.js +20 -0
  171. package/out/renderer/assets/just-tGFryTtU.js +34 -0
  172. package/out/renderer/assets/kanagawa-dragon-DU8n2NNT.js +4 -0
  173. package/out/renderer/assets/kanagawa-lotus-Byd0CDet.js +4 -0
  174. package/out/renderer/assets/kanagawa-wave-DExoagcR.js +4 -0
  175. package/out/renderer/assets/{kanban-definition-6JOO6SKY-ByvN0qaD.js → kanban-definition-6JOO6SKY-BocrfAtb.js} +2 -2
  176. package/out/renderer/assets/kdl-DzNQTDs7.js +7 -0
  177. package/out/renderer/assets/kotlin-BM2ZNTMh.js +7 -0
  178. package/out/renderer/assets/kusto-dtpuxMFE.js +7 -0
  179. package/out/renderer/assets/laserwave-DF03wMlf.js +4 -0
  180. package/out/renderer/assets/latex-B0gTO9uZ.js +10 -0
  181. package/out/renderer/assets/{layout-BpybWUv6.js → layout-DHzrXVin.js} +4 -4
  182. package/out/renderer/assets/lean-CTow-IzD.js +7 -0
  183. package/out/renderer/assets/less-BAzLMJNR.js +7 -0
  184. package/out/renderer/assets/light-plus-DS08Xg5J.js +4 -0
  185. package/out/renderer/assets/liquid-QmJ_LYTW.js +15 -0
  186. package/out/renderer/assets/llvm-CTKcAHbb.js +7 -0
  187. package/out/renderer/assets/log-BF22rfM9.js +7 -0
  188. package/out/renderer/assets/logo-D9l7oEJ8.js +7 -0
  189. package/out/renderer/assets/lua-BVbbqwZC.js +9 -0
  190. package/out/renderer/assets/luau-CdZ6BoEa.js +7 -0
  191. package/out/renderer/assets/make-DLtqaK4D.js +7 -0
  192. package/out/renderer/assets/markdown-F_EULe_G.js +7 -0
  193. package/out/renderer/assets/marko-BAWrmNIa.js +15 -0
  194. package/out/renderer/assets/material-theme-B8B2U48Q.js +4 -0
  195. package/out/renderer/assets/material-theme-darker-BV0iY_T3.js +4 -0
  196. package/out/renderer/assets/material-theme-lighter-DrzybSTF.js +4 -0
  197. package/out/renderer/assets/material-theme-ocean-BRPLVReX.js +4 -0
  198. package/out/renderer/assets/material-theme-palenight-DSJwsR_D.js +4 -0
  199. package/out/renderer/assets/matlab-7XHduepk.js +7 -0
  200. package/out/renderer/assets/mdc-Ca0ft0PS.js +16 -0
  201. package/out/renderer/assets/mdx-D5wExp-O.js +7 -0
  202. package/out/renderer/assets/mermaid-z_1ejSlp.js +7 -0
  203. package/out/renderer/assets/{min-DB8ixvoT.js → min-D6g96v7R.js} +2 -2
  204. package/out/renderer/assets/min-dark-BNaN9fWk.js +4 -0
  205. package/out/renderer/assets/min-light-CMrjentn.js +4 -0
  206. package/out/renderer/assets/{mindmap-definition-QFDTVHPH-Do-I-At8.js → mindmap-definition-QFDTVHPH-D9cyK1Gb.js} +3 -3
  207. package/out/renderer/assets/mipsasm-BQyyUrpa.js +7 -0
  208. package/out/renderer/assets/mojo-ByCRDvCf.js +7 -0
  209. package/out/renderer/assets/monokai-DelygWXa.js +4 -0
  210. package/out/renderer/assets/moonbit-CqjK87KZ.js +7 -0
  211. package/out/renderer/assets/move-DhTNmxqC.js +7 -0
  212. package/out/renderer/assets/narrat-CLjGcbCy.js +7 -0
  213. package/out/renderer/assets/nextflow-B166B-y1.js +9 -0
  214. package/out/renderer/assets/nextflow-groovy-BOO9s0iq.js +7 -0
  215. package/out/renderer/assets/nginx-BFAkI5_-.js +10 -0
  216. package/out/renderer/assets/night-owl-DSS199ra.js +4 -0
  217. package/out/renderer/assets/night-owl-light-gC6E-Eh2.js +4 -0
  218. package/out/renderer/assets/nim-B3PAIZ4D.js +22 -0
  219. package/out/renderer/assets/nix-ByWcmvXF.js +12 -0
  220. package/out/renderer/assets/nord-CvDbBq5M.js +4 -0
  221. package/out/renderer/assets/nushell-DB8ZUEbK.js +7 -0
  222. package/out/renderer/assets/objective-c-BRoNQF42.js +7 -0
  223. package/out/renderer/assets/objective-cpp-DEoN9Fe5.js +7 -0
  224. package/out/renderer/assets/ocaml-B1kfGk9Y.js +7 -0
  225. package/out/renderer/assets/odin-CNQ56Ay2.js +7 -0
  226. package/out/renderer/assets/one-dark-pro-CsMf0BoJ.js +4 -0
  227. package/out/renderer/assets/one-light-B0cTzZyr.js +4 -0
  228. package/out/renderer/assets/openscad-C_m7ehZF.js +7 -0
  229. package/out/renderer/assets/pascal-CU8Kjkr_.js +7 -0
  230. package/out/renderer/assets/perl-HITCDkgu.js +18 -0
  231. package/out/renderer/assets/php-C2HieitX.js +20 -0
  232. package/out/renderer/assets/{pieDiagram-DEJITSTG-Cnpf6Gt6.js → pieDiagram-DEJITSTG-LUWwVJA5.js} +6 -6
  233. package/out/renderer/assets/pierre-dark-DADY5eR0.js +4 -0
  234. package/out/renderer/assets/pierre-light-DUjirxKp.js +4 -0
  235. package/out/renderer/assets/pkl-BsByaYax.js +7 -0
  236. package/out/renderer/assets/plastic-BjwMpBc0.js +4 -0
  237. package/out/renderer/assets/plsql-B3Na24V4.js +7 -0
  238. package/out/renderer/assets/po-BajfNjc5.js +7 -0
  239. package/out/renderer/assets/poimandres-ChWyhPrn.js +4 -0
  240. package/out/renderer/assets/polar-BB-dlxnO.js +7 -0
  241. package/out/renderer/assets/postcss-kj1IbjVd.js +7 -0
  242. package/out/renderer/assets/powerquery-B-e1fO-k.js +7 -0
  243. package/out/renderer/assets/powershell-BcMVbGpk.js +7 -0
  244. package/out/renderer/assets/prisma-bmxcSDxq.js +7 -0
  245. package/out/renderer/assets/prolog-BT9GCzqD.js +7 -0
  246. package/out/renderer/assets/proto-Ds-m32NR.js +7 -0
  247. package/out/renderer/assets/pug-BwQB43qN.js +13 -0
  248. package/out/renderer/assets/puppet-N15G4Usj.js +7 -0
  249. package/out/renderer/assets/purescript-DrwsEYNH.js +7 -0
  250. package/out/renderer/assets/python-CrdIx4PZ.js +7 -0
  251. package/out/renderer/assets/qml-jtL8okyu.js +9 -0
  252. package/out/renderer/assets/qmldir-DuMSk0Oz.js +7 -0
  253. package/out/renderer/assets/qss-BFrB6p4y.js +7 -0
  254. package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-VcOb1qLd.js → quadrantDiagram-34T5L4WZ-DdWTi9yW.js} +1 -1
  255. package/out/renderer/assets/r-Dpdc-Kyk.js +7 -0
  256. package/out/renderer/assets/racket-DbA06HL7.js +7 -0
  257. package/out/renderer/assets/raku-6v-Y17bs.js +7 -0
  258. package/out/renderer/assets/razor-gBXW6YBJ.js +13 -0
  259. package/out/renderer/assets/red-DByOl5N0.js +4 -0
  260. package/out/renderer/assets/reg-CULnG2WX.js +7 -0
  261. package/out/renderer/assets/regexp-BxWeO75u.js +7 -0
  262. package/out/renderer/assets/rel-CHRwzjd4.js +7 -0
  263. package/out/renderer/assets/{requirementDiagram-MS252O5E-VJs9Hpaw.js → requirementDiagram-MS252O5E-BoLT3tay.js} +3 -3
  264. package/out/renderer/assets/riscv-BNQ9cVpw.js +7 -0
  265. package/out/renderer/assets/ron-CUEPaFZU.js +7 -0
  266. package/out/renderer/assets/rose-pine-B-kZ4Z9q.js +4 -0
  267. package/out/renderer/assets/rose-pine-dawn-efeVGdSI.js +4 -0
  268. package/out/renderer/assets/rose-pine-moon-DmodZNzl.js +4 -0
  269. package/out/renderer/assets/rosmsg-Bfahr6vb.js +7 -0
  270. package/out/renderer/assets/rst-by6KAwTb.js +37 -0
  271. package/out/renderer/assets/ruby-C13Bjepi.js +37 -0
  272. package/out/renderer/assets/rust-CMNYZh5a.js +7 -0
  273. package/out/renderer/assets/{sankeyDiagram-XADWPNL6-BoXxgLvi.js → sankeyDiagram-XADWPNL6-B4gY_QI-.js} +1 -1
  274. package/out/renderer/assets/sas-BLBgC3TA.js +9 -0
  275. package/out/renderer/assets/sass-BheygBdF.js +7 -0
  276. package/out/renderer/assets/scala-B-_7vFVn.js +7 -0
  277. package/out/renderer/assets/scheme-BSHdPinv.js +7 -0
  278. package/out/renderer/assets/scss-Dq-LbI_c.js +9 -0
  279. package/out/renderer/assets/sdbl-BBUhycGU.js +7 -0
  280. package/out/renderer/assets/{sequenceDiagram-FGHM5R23-b69hQjSp.js → sequenceDiagram-FGHM5R23-B-JJvxQW.js} +3 -3
  281. package/out/renderer/assets/shaderlab-C07uO3dL.js +9 -0
  282. package/out/renderer/assets/shellscript-CQ8MXh-D.js +7 -0
  283. package/out/renderer/assets/shellsession-CkeTp4M1.js +9 -0
  284. package/out/renderer/assets/slack-dark-BEe10hxO.js +4 -0
  285. package/out/renderer/assets/slack-ochin-BKmu9pBc.js +4 -0
  286. package/out/renderer/assets/smalltalk-qxcGy4fT.js +7 -0
  287. package/out/renderer/assets/snazzy-light-Dcvd-ZyI.js +4 -0
  288. package/out/renderer/assets/solarized-dark-BBl5y5sR.js +4 -0
  289. package/out/renderer/assets/solarized-light-DW9b_AY8.js +4 -0
  290. package/out/renderer/assets/solidity-CSTQ0FCC.js +7 -0
  291. package/out/renderer/assets/soy-BHaHgMUy.js +11 -0
  292. package/out/renderer/assets/sparql-DswowMAp.js +9 -0
  293. package/out/renderer/assets/splunk-DcGJXIDa.js +7 -0
  294. package/out/renderer/assets/sql-DzUuSofg.js +7 -0
  295. package/out/renderer/assets/ssh-config-Bk_I5wDR.js +7 -0
  296. package/out/renderer/assets/stata-Dl7wDdBE.js +9 -0
  297. package/out/renderer/assets/{stateDiagram-FHFEXIEX-BK7E-REm.js → stateDiagram-FHFEXIEX-BntwOBUs.js} +8 -8
  298. package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-Cd2wfCQu.js → stateDiagram-v2-QKLJ7IA2-C__eWVIe.js} +4 -4
  299. package/out/renderer/assets/stylus-DXFa_2Jl.js +7 -0
  300. package/out/renderer/assets/surrealql-Bs3vUeKA.js +9 -0
  301. package/out/renderer/assets/svelte-fC0HkEkx.js +15 -0
  302. package/out/renderer/assets/swift-Cohr-WZC.js +7 -0
  303. package/out/renderer/assets/synthwave-84-CoUef9sh.js +4 -0
  304. package/out/renderer/assets/system-verilog-BcESSvRn.js +7 -0
  305. package/out/renderer/assets/systemd-DJPFjU02.js +7 -0
  306. package/out/renderer/assets/talonscript-CEEMXJTH.js +7 -0
  307. package/out/renderer/assets/tasl-DfOr2qHi.js +7 -0
  308. package/out/renderer/assets/tcl-CTsc4-t7.js +7 -0
  309. package/out/renderer/assets/templ-CSEiQwNm.js +13 -0
  310. package/out/renderer/assets/terraform-CeztUfUr.js +7 -0
  311. package/out/renderer/assets/tex-CGVqF8nD.js +9 -0
  312. package/out/renderer/assets/{timeline-definition-GMOUNBTQ-Bl-MTfK5.js → timeline-definition-GMOUNBTQ-C7ch2INk.js} +2 -2
  313. package/out/renderer/assets/tokyo-night-DjtLpAEY.js +4 -0
  314. package/out/renderer/assets/toml-vHPzWDj6.js +7 -0
  315. package/out/renderer/assets/ts-tags-cG2hZuda.js +54 -0
  316. package/out/renderer/assets/tsv-ChRVFvMy.js +7 -0
  317. package/out/renderer/assets/tsx-CmGGo4Hm.js +7 -0
  318. package/out/renderer/assets/turtle-BnC7StHY.js +7 -0
  319. package/out/renderer/assets/twig-CwEEYIBf.js +36 -0
  320. package/out/renderer/assets/typescript-CP6ECzON.js +7 -0
  321. package/out/renderer/assets/typespec-CkDVVIcK.js +7 -0
  322. package/out/renderer/assets/typst-XYLFxYau.js +7 -0
  323. package/out/renderer/assets/v-BSYXvR4g.js +7 -0
  324. package/out/renderer/assets/vala-qJa5rry9.js +7 -0
  325. package/out/renderer/assets/vb-Bzg9rspf.js +7 -0
  326. package/out/renderer/assets/{vennDiagram-DHZGUBPP-DNmr1k2L.js → vennDiagram-DHZGUBPP-CQ__NSue.js} +1 -1
  327. package/out/renderer/assets/verilog-CCb_iTfF.js +7 -0
  328. package/out/renderer/assets/vesper-4Q1cEwPL.js +4 -0
  329. package/out/renderer/assets/vhdl-DMqk4T2s.js +7 -0
  330. package/out/renderer/assets/viml--FINbfoq.js +7 -0
  331. package/out/renderer/assets/vitesse-black-BqNLki8b.js +4 -0
  332. package/out/renderer/assets/vitesse-dark-jJ32WhwH.js +4 -0
  333. package/out/renderer/assets/vitesse-light-476zM4e6.js +4 -0
  334. package/out/renderer/assets/vue-K-7Ga-y8.js +40 -0
  335. package/out/renderer/assets/vue-html-DhreShjd.js +9 -0
  336. package/out/renderer/assets/vue-vine-rMIwOpFf.js +19 -0
  337. package/out/renderer/assets/vyper-DP4whl13.js +7 -0
  338. package/out/renderer/assets/{wardley-RL74JXVD-DTbxPMj9.js → wardley-RL74JXVD-Kh6mNiRV.js} +3 -3
  339. package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-BWw08wtD.js → wardleyDiagram-NUSXRM2D-CfRYzJMU.js} +5 -5
  340. package/out/renderer/assets/wasm-BBh6f151.js +7 -0
  341. package/out/renderer/assets/wasm-DDgzZJey.js +10 -0
  342. package/out/renderer/assets/wenyan-BdqozpMZ.js +7 -0
  343. package/out/renderer/assets/wgsl-Vo-hHVWH.js +7 -0
  344. package/out/renderer/assets/wikitext-BDjE6pmL.js +7 -0
  345. package/out/renderer/assets/wit-C_nQzOkY.js +7 -0
  346. package/out/renderer/assets/wolfram-CRmjUoI4.js +7 -0
  347. package/out/renderer/assets/xml-BMzZeaqs.js +9 -0
  348. package/out/renderer/assets/xsl-CnwVr_6q.js +10 -0
  349. package/out/renderer/assets/{xychartDiagram-5P7HB3ND-EEYPnLDT.js → xychartDiagram-5P7HB3ND-BFq2zIne.js} +1 -1
  350. package/out/renderer/assets/yaml-B_vW5iTY.js +7 -0
  351. package/out/renderer/assets/zenscript-DFINJL6j.js +7 -0
  352. package/out/renderer/assets/zig-CS4FMAZp.js +7 -0
  353. package/out/renderer/index.html +2 -2
  354. package/out/resources/linux/probe +0 -0
  355. package/out/resources/linux-x64/probe +0 -0
  356. package/out/resources/mcp-server/aider-desk-mcp-server.js +16 -1
  357. package/out/resources/prompts/code-change-requests.hbs +21 -0
  358. package/out/resources/skills/extension-creator/SKILL.md +345 -0
  359. package/out/resources/skills/extension-creator/assets/templates/Component.jsx.template +76 -0
  360. package/out/resources/skills/extension-creator/assets/templates/ConfigComponent.jsx.template +38 -0
  361. package/out/resources/skills/extension-creator/assets/templates/folder-extension/config.ts.template +29 -0
  362. package/out/resources/skills/extension-creator/assets/templates/folder-extension/index.ts.template +42 -0
  363. package/out/resources/skills/extension-creator/assets/templates/folder-extension/package.json +12 -0
  364. package/out/resources/skills/extension-creator/assets/templates/folder-extension/tsconfig.json +23 -0
  365. package/out/resources/skills/extension-creator/assets/templates/folder-extension-with-config/index.ts.template +80 -0
  366. package/out/resources/skills/extension-creator/assets/templates/single-file.ts.template +30 -0
  367. package/out/resources/skills/extension-creator/assets/templates/ui-component-external.ts.template +91 -0
  368. package/out/resources/skills/extension-creator/assets/templates/ui-component.ts.template +79 -0
  369. package/out/resources/skills/extension-creator/references/command-definition.md +170 -0
  370. package/out/resources/skills/extension-creator/references/config-components.md +427 -0
  371. package/out/resources/skills/extension-creator/references/event-types.md +156 -0
  372. package/out/resources/skills/extension-creator/references/examples-gallery.md +583 -0
  373. package/out/resources/skills/extension-creator/references/extension-interface.md +306 -0
  374. package/out/resources/skills/extension-creator/references/extension-types.md +186 -0
  375. package/out/resources/skills/extension-creator/references/in-repo-flow.md +132 -0
  376. package/out/resources/skills/extension-creator/references/install-targets.md +96 -0
  377. package/out/resources/skills/extension-creator/references/project-global-flow.md +76 -0
  378. package/out/resources/skills/extension-creator/references/ui-components.md +663 -0
  379. package/out/runner.js +509 -164
  380. package/package.json +11 -9
  381. package/out/resources/prompts/code-inline-request.hbs +0 -16
  382. /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-flash",
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 RunCodeInlineRequestSchema = zod.z.object({
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-inline-request",
8990
+ "/project/run-code-change-requests",
8980
8991
  this.handleRequest(async (req, res) => {
8981
- const parsed = this.validateRequest(RunCodeInlineRequestSchema, req.body, res);
8992
+ const parsed = this.validateRequest(RunCodeChangeRequestsSchema, req.body, res);
8982
8993
  if (!parsed) {
8983
8994
  return;
8984
8995
  }
8985
- const { projectDir, taskId, filename, lineNumber, userComment, createNewTask } = parsed;
8986
- await this.eventsHandler.runCodeInlineRequest(projectDir, taskId, filename, lineNumber, userComment, createNewTask);
8987
- res.status(200).json({ message: "Code inline request initiated" });
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
- return await this.getWorktreeFlatUpdatedFiles(worktreePath, mainBranch);
13657
+ files = await this.getWorktreeFlatUpdatedFiles(worktreePath, mainBranch);
13658
+ } else {
13659
+ files = await this.getWorktreeUpdatedFiles(worktreePath, mainBranch);
13559
13660
  }
13560
- return await this.getWorktreeUpdatedFiles(worktreePath, mainBranch);
13661
+ } else {
13662
+ files = await this.getNonWorktreeUpdatedFiles(worktreePath);
13561
13663
  }
13562
- return await this.getNonWorktreeUpdatedFiles(worktreePath);
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 = getEnvironmentVariablesForAider(newSettings, this.project.baseDir);
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
- this.addLogMessage(
16911
- "error",
16912
- isConflict ? "worktree.rebaseConflicts" : error.getErrorDetails(),
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 === 0) {
17037
- this.addLogMessage("info", "Conflicts resolved and staged. You can now continue the rebase.", true, void 0, ["continue-rebase", "abort-rebase"]);
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 continued", true);
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
- this.addLogMessage(
17092
- "error",
17093
- isConflict ? "worktree.rebaseConflicts" : error instanceof GitError ? error.getErrorDetails() : `Failed to continue rebase: ${error instanceof Error ? error.message : String(error)}`,
17094
- true,
17095
- void 0,
17096
- isConflict ? ["abort-rebase", "resolve-conflicts-with-agent"] : void 0
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 runCodeInlineRequest(filename, lineNumber, userComment, createNewTask, contextSize = 5) {
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
- await this.addFiles({
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
- this.eventManager.sendLog({
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: `${filename}:${lineNumber}`,
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
- await newTask.addFiles({
17219
- path: filename
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: 4e-8,
20224
- // 0.04 per 1M tokens
20225
- temperature: 0.5
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-Stable",
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: 4e-8,
20239
- // 0.04 per 1M tokens
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 DEFAULT_MODEL_TEMPERATURE;
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 DEFAULT_MODEL_TEMPERATURE;
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 DEFAULT_MODEL_TEMPERATURE;
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: uuid.v4(),
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, project, void 0);
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(loaded.id, metadata.name, this.store, this.modelManager, this.eventManager, task.project, task);
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(extensionId, extensionName, this.store, this.modelManager, this.eventManager, task.project, task);
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, project, void 0);
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, project, void 0);
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, project, void 0);
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, project, void 0);
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(loaded.id, loaded.metadata.name, this.store, this.modelManager, this.eventManager, project, void 0);
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(loaded.id, loaded.metadata.name, this.store, this.modelManager, this.eventManager, project, void 0);
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(loaded.id, loaded.metadata.name, this.store, this.modelManager, this.eventManager, project, void 0);
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, void 0, void 0);
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 global = extensions.filter((e) => !e.projectDir);
25699
+ const global2 = extensions.filter((e) => !e.projectDir);
25365
25700
  const projectSpecific = extensions.filter((e) => e.projectDir === projectDir);
25366
- return [...global, ...projectSpecific];
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 runCodeInlineRequest(baseDir, taskId, filename, lineNumber, userComment, createNewTask) {
25534
- await this.projectManager.getProject(baseDir).getTask(taskId)?.runCodeInlineRequest(filename, lineNumber, userComment, createNewTask);
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 absolutePath = path.isAbsolute(filePath) ? filePath : path.join(baseDir, filePath);
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-inline-request"
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
- getCodeInlineRequestPrompt = async (task, data) => {
26668
- return await this.render("code-inline-request", data, task.getProjectDir(), task);
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) => {