@zythum02/fello-server 0.1.52 → 0.1.53

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 (377) hide show
  1. package/out/renderer/assets/{_baseUniq-C0L-SxO8.js → _baseUniq-CJr3HkLS.js} +1 -1
  2. package/out/renderer/assets/_baseUniq-CJr3HkLS.js.br +0 -0
  3. package/out/renderer/assets/_baseUniq-CJr3HkLS.js.gz +0 -0
  4. package/out/renderer/assets/{arc-bnlMIyYF.js → arc-POsBroTF.js} +1 -1
  5. package/out/renderer/assets/arc-POsBroTF.js.br +0 -0
  6. package/out/renderer/assets/arc-POsBroTF.js.gz +0 -0
  7. package/out/renderer/assets/{architectureDiagram-Q4EWVU46-Cr0249Lu.js → architectureDiagram-Q4EWVU46-CmToUhDb.js} +6 -6
  8. package/out/renderer/assets/architectureDiagram-Q4EWVU46-CmToUhDb.js.br +0 -0
  9. package/out/renderer/assets/architectureDiagram-Q4EWVU46-CmToUhDb.js.gz +0 -0
  10. package/out/renderer/assets/{arrow-left-D589pHHA.js → arrow-left-CxS1t3f7.js} +1 -1
  11. package/out/renderer/assets/{automation-CvjrkE9z.js → automation-Cyz3eLWp.js} +7 -8
  12. package/out/renderer/assets/automation-Cyz3eLWp.js.br +0 -0
  13. package/out/renderer/assets/automation-Cyz3eLWp.js.gz +0 -0
  14. package/out/renderer/assets/{blockDiagram-DXYQGD6D-Cw6vh5dx.js → blockDiagram-DXYQGD6D-M2nnTg9f.js} +7 -7
  15. package/out/renderer/assets/blockDiagram-DXYQGD6D-M2nnTg9f.js.br +0 -0
  16. package/out/renderer/assets/blockDiagram-DXYQGD6D-M2nnTg9f.js.gz +0 -0
  17. package/out/renderer/assets/{c4Diagram-AHTNJAMY-BUrvcyv2.js → c4Diagram-AHTNJAMY-CwLtsy_0.js} +3 -3
  18. package/out/renderer/assets/c4Diagram-AHTNJAMY-CwLtsy_0.js.br +0 -0
  19. package/out/renderer/assets/c4Diagram-AHTNJAMY-CwLtsy_0.js.gz +0 -0
  20. package/out/renderer/assets/{channel-DQr36qW5.js → channel-BUNDMqpH.js} +1 -1
  21. package/out/renderer/assets/{chunk-4BX2VUAB-DOsXCDD7.js → chunk-4BX2VUAB-B2qXmkDT.js} +1 -1
  22. package/out/renderer/assets/{chunk-4TB4RGXK-D_fBnf0p.js → chunk-4TB4RGXK-DXLZpPY5.js} +5 -5
  23. package/out/renderer/assets/chunk-4TB4RGXK-DXLZpPY5.js.br +0 -0
  24. package/out/renderer/assets/chunk-4TB4RGXK-DXLZpPY5.js.gz +0 -0
  25. package/out/renderer/assets/{chunk-55IACEB6-3ETNuedT.js → chunk-55IACEB6-CJeyefxI.js} +1 -1
  26. package/out/renderer/assets/{chunk-EDXVE4YY-BJLqHaER.js → chunk-EDXVE4YY-CNjJEQfY.js} +1 -1
  27. package/out/renderer/assets/chunk-EDXVE4YY-CNjJEQfY.js.br +0 -0
  28. package/out/renderer/assets/chunk-EDXVE4YY-CNjJEQfY.js.gz +0 -0
  29. package/out/renderer/assets/{chunk-FMBD7UC4-DP-WGTNG.js → chunk-FMBD7UC4-DOAOsjRu.js} +1 -1
  30. package/out/renderer/assets/{chunk-OYMX7WX6-CrS7loi7.js → chunk-OYMX7WX6-BG4B1VQ7.js} +3 -3
  31. package/out/renderer/assets/chunk-OYMX7WX6-BG4B1VQ7.js.br +0 -0
  32. package/out/renderer/assets/chunk-OYMX7WX6-BG4B1VQ7.js.gz +0 -0
  33. package/out/renderer/assets/{chunk-QZHKN3VN-C53USs5W.js → chunk-QZHKN3VN-B9zfXYIQ.js} +1 -1
  34. package/out/renderer/assets/{chunk-YZCP3GAM-CMgdytZR.js → chunk-YZCP3GAM-jeoI2tsD.js} +1 -1
  35. package/out/renderer/assets/chunk-YZCP3GAM-jeoI2tsD.js.br +0 -0
  36. package/out/renderer/assets/chunk-YZCP3GAM-jeoI2tsD.js.gz +0 -0
  37. package/out/renderer/assets/{circle-x-OvXymUrf.js → circle-x-B1kBsMlS.js} +1 -1
  38. package/out/renderer/assets/{classDiagram-v2-HSJHXN6E-DIYtEiO5.js → classDiagram-6PBFFD2Q-DWPFF3Yt.js} +7 -7
  39. package/out/renderer/assets/{classDiagram-6PBFFD2Q-DIYtEiO5.js → classDiagram-v2-HSJHXN6E-DWPFF3Yt.js} +7 -7
  40. package/out/renderer/assets/{clone-D45P7Iqc.js → clone-Dcvr9oKv.js} +1 -1
  41. package/out/renderer/assets/{code-editor-SuOcN-5B.js → code-editor-CEXlC4aV.js} +2 -2
  42. package/out/renderer/assets/code-editor-CEXlC4aV.js.br +0 -0
  43. package/out/renderer/assets/code-editor-CEXlC4aV.js.gz +0 -0
  44. package/out/renderer/assets/{collapsible-Bd85ZCyx.js → collapsible-CMuCJUWG.js} +1 -1
  45. package/out/renderer/assets/collapsible-CMuCJUWG.js.br +0 -0
  46. package/out/renderer/assets/collapsible-CMuCJUWG.js.gz +0 -0
  47. package/out/renderer/assets/{cose-bilkent-S5V4N54A-Dq8VllNT.js → cose-bilkent-S5V4N54A-B3bgImVS.js} +2 -2
  48. package/out/renderer/assets/cose-bilkent-S5V4N54A-B3bgImVS.js.br +0 -0
  49. package/out/renderer/assets/cose-bilkent-S5V4N54A-B3bgImVS.js.gz +0 -0
  50. package/out/renderer/assets/{dagre-KV5264BT-Dec8q4UT.js → dagre-KV5264BT-DTbumBA_.js} +7 -7
  51. package/out/renderer/assets/dagre-KV5264BT-DTbumBA_.js.br +0 -0
  52. package/out/renderer/assets/dagre-KV5264BT-DTbumBA_.js.gz +0 -0
  53. package/out/renderer/assets/{diagram-5BDNPKRD-CzA2u_EN.js → diagram-5BDNPKRD-B34Y6e8q.js} +7 -7
  54. package/out/renderer/assets/diagram-5BDNPKRD-B34Y6e8q.js.br +0 -0
  55. package/out/renderer/assets/diagram-5BDNPKRD-B34Y6e8q.js.gz +0 -0
  56. package/out/renderer/assets/{diagram-G4DWMVQ6-C8h3R7jD.js → diagram-G4DWMVQ6-BBiBmFR4.js} +7 -7
  57. package/out/renderer/assets/diagram-G4DWMVQ6-BBiBmFR4.js.br +0 -0
  58. package/out/renderer/assets/diagram-G4DWMVQ6-BBiBmFR4.js.gz +0 -0
  59. package/out/renderer/assets/{diagram-MMDJMWI5-9tiXSF90.js → diagram-MMDJMWI5-P-YslDjG.js} +6 -6
  60. package/out/renderer/assets/diagram-MMDJMWI5-P-YslDjG.js.br +0 -0
  61. package/out/renderer/assets/diagram-MMDJMWI5-P-YslDjG.js.gz +0 -0
  62. package/out/renderer/assets/{diagram-TYMM5635-BrarGJNf.js → diagram-TYMM5635-D_cLard_.js} +6 -6
  63. package/out/renderer/assets/diagram-TYMM5635-D_cLard_.js.br +0 -0
  64. package/out/renderer/assets/diagram-TYMM5635-D_cLard_.js.gz +0 -0
  65. package/out/renderer/assets/{ellipsis-BafkhboM.js → ellipsis-D1agTYu1.js} +1 -1
  66. package/out/renderer/assets/{erDiagram-SMLLAGMA-1Q9StK7L.js → erDiagram-SMLLAGMA-C1MHqKvC.js} +5 -5
  67. package/out/renderer/assets/erDiagram-SMLLAGMA-C1MHqKvC.js.br +0 -0
  68. package/out/renderer/assets/erDiagram-SMLLAGMA-C1MHqKvC.js.gz +0 -0
  69. package/out/renderer/assets/{field-ohYLdnJa.js → field-DR3J0r9e.js} +1 -1
  70. package/out/renderer/assets/field-DR3J0r9e.js.br +0 -0
  71. package/out/renderer/assets/field-DR3J0r9e.js.gz +0 -0
  72. package/out/renderer/assets/{file-text-CshHuHgW.js → file-text-nGCW6zu1.js} +1 -1
  73. package/out/renderer/assets/{flowDiagram-DWJPFMVM-CpcXVOmj.js → flowDiagram-DWJPFMVM-DprlEc3Z.js} +7 -7
  74. package/out/renderer/assets/flowDiagram-DWJPFMVM-DprlEc3Z.js.br +0 -0
  75. package/out/renderer/assets/flowDiagram-DWJPFMVM-DprlEc3Z.js.gz +0 -0
  76. package/out/renderer/assets/{ganttDiagram-T4ZO3ILL-C7Da4JBG.js → ganttDiagram-T4ZO3ILL-CbTdumBm.js} +3 -3
  77. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CbTdumBm.js.br +0 -0
  78. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-CbTdumBm.js.gz +0 -0
  79. package/out/renderer/assets/{gitGraphDiagram-UUTBAWPF-COBL52q_.js → gitGraphDiagram-UUTBAWPF-06bme-w8.js} +7 -7
  80. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-06bme-w8.js.br +0 -0
  81. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-06bme-w8.js.gz +0 -0
  82. package/out/renderer/assets/{graph-vKaAs6sc.js → graph-BZhxluo9.js} +2 -2
  83. package/out/renderer/assets/graph-BZhxluo9.js.br +0 -0
  84. package/out/renderer/assets/graph-BZhxluo9.js.gz +0 -0
  85. package/out/renderer/assets/{highlighted-body-OFNGDK62-BGNnB1Ll.js → highlighted-body-OFNGDK62-CvDMJtXf.js} +2 -2
  86. package/out/renderer/assets/{index-BJPggXxf.js → index-LmYTNvdF.js} +906 -457
  87. package/out/renderer/assets/index-LmYTNvdF.js.br +0 -0
  88. package/out/renderer/assets/index-LmYTNvdF.js.gz +0 -0
  89. package/out/renderer/assets/index-aGJ_yZib.css +382 -0
  90. package/out/renderer/assets/index-aGJ_yZib.css.br +0 -0
  91. package/out/renderer/assets/index-aGJ_yZib.css.gz +0 -0
  92. package/out/renderer/assets/{infoDiagram-42DDH7IO-z37e1cYq.js → infoDiagram-42DDH7IO-DqivEzWL.js} +5 -5
  93. package/out/renderer/assets/infoDiagram-42DDH7IO-DqivEzWL.js.br +0 -0
  94. package/out/renderer/assets/infoDiagram-42DDH7IO-DqivEzWL.js.gz +0 -0
  95. package/out/renderer/assets/{ishikawaDiagram-UXIWVN3A-D0QTo3NZ.js → ishikawaDiagram-UXIWVN3A-BKcg_z4w.js} +2 -2
  96. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-BKcg_z4w.js.br +0 -0
  97. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-BKcg_z4w.js.gz +0 -0
  98. package/out/renderer/assets/{item-Cv-tnX8b.js → item-BHEUMM9H.js} +1 -1
  99. package/out/renderer/assets/item-BHEUMM9H.js.br +0 -0
  100. package/out/renderer/assets/item-BHEUMM9H.js.gz +0 -0
  101. package/out/renderer/assets/{journeyDiagram-VCZTEJTY-CQV0gdjM.js → journeyDiagram-VCZTEJTY-Bvv8xuxQ.js} +5 -5
  102. package/out/renderer/assets/journeyDiagram-VCZTEJTY-Bvv8xuxQ.js.br +0 -0
  103. package/out/renderer/assets/journeyDiagram-VCZTEJTY-Bvv8xuxQ.js.gz +0 -0
  104. package/out/renderer/assets/{kanban-definition-6JOO6SKY-DouRT6vc.js → kanban-definition-6JOO6SKY-C-gRMpeM.js} +3 -3
  105. package/out/renderer/assets/kanban-definition-6JOO6SKY-C-gRMpeM.js.br +0 -0
  106. package/out/renderer/assets/kanban-definition-6JOO6SKY-C-gRMpeM.js.gz +0 -0
  107. package/out/renderer/assets/{layout-BhbUjpvY.js → layout-B4dSyItA.js} +4 -4
  108. package/out/renderer/assets/layout-B4dSyItA.js.br +0 -0
  109. package/out/renderer/assets/layout-B4dSyItA.js.gz +0 -0
  110. package/out/renderer/assets/{linear-D1WO10JK.js → linear-CoVhuer7.js} +1 -1
  111. package/out/renderer/assets/linear-CoVhuer7.js.br +0 -0
  112. package/out/renderer/assets/linear-CoVhuer7.js.gz +0 -0
  113. package/out/renderer/assets/{link-2-C5KPDK2L.js → link-2-DHUPzNSt.js} +1 -1
  114. package/out/renderer/assets/{mermaid-GHXKKRXX-KwA2c0l5.js → mermaid-GHXKKRXX-CZqkhGx7.js} +54 -54
  115. package/out/renderer/assets/mermaid-GHXKKRXX-CZqkhGx7.js.br +0 -0
  116. package/out/renderer/assets/mermaid-GHXKKRXX-CZqkhGx7.js.gz +0 -0
  117. package/out/renderer/assets/mic-BgSvicCB.js +22 -0
  118. package/out/renderer/assets/{min-BP2C7bzG.js → min-emzuJjmk.js} +2 -2
  119. package/out/renderer/assets/min-emzuJjmk.js.br +0 -0
  120. package/out/renderer/assets/min-emzuJjmk.js.gz +0 -0
  121. package/out/renderer/assets/{mindmap-definition-QFDTVHPH-CxLYrjVp.js → mindmap-definition-QFDTVHPH-DQ4JNECm.js} +4 -4
  122. package/out/renderer/assets/mindmap-definition-QFDTVHPH-DQ4JNECm.js.br +0 -0
  123. package/out/renderer/assets/mindmap-definition-QFDTVHPH-DQ4JNECm.js.gz +0 -0
  124. package/out/renderer/assets/{open-guide-UhaRhiI6.js → open-guide-CfLO-Sdk.js} +1 -1
  125. package/out/renderer/assets/{package-search-DpyeQ5Lx.js → package-search-CrF2Iegl.js} +1 -1
  126. package/out/renderer/assets/{pieDiagram-DEJITSTG-D1LBRn_k.js → pieDiagram-DEJITSTG-0H6CGQQt.js} +7 -7
  127. package/out/renderer/assets/pieDiagram-DEJITSTG-0H6CGQQt.js.br +0 -0
  128. package/out/renderer/assets/pieDiagram-DEJITSTG-0H6CGQQt.js.gz +0 -0
  129. package/out/renderer/assets/{plus-CsV_3veW.js → plus-YNCXW-GD.js} +1 -1
  130. package/out/renderer/assets/{quadrantDiagram-34T5L4WZ-89cdKeKP.js → quadrantDiagram-34T5L4WZ-D0aPKp5z.js} +3 -3
  131. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-D0aPKp5z.js.br +0 -0
  132. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-D0aPKp5z.js.gz +0 -0
  133. package/out/renderer/assets/{refresh-cw-CYW3HR-E.js → refresh-cw-Bvm578nW.js} +1 -1
  134. package/out/renderer/assets/{requirementDiagram-MS252O5E-BPmX5cbr.js → requirementDiagram-MS252O5E-BkzwapW_.js} +4 -4
  135. package/out/renderer/assets/requirementDiagram-MS252O5E-BkzwapW_.js.br +0 -0
  136. package/out/renderer/assets/requirementDiagram-MS252O5E-BkzwapW_.js.gz +0 -0
  137. package/out/renderer/assets/{resizable-C_plViAK.js → resizable-cStzNJ8V.js} +1 -1
  138. package/out/renderer/assets/resizable-cStzNJ8V.js.br +0 -0
  139. package/out/renderer/assets/resizable-cStzNJ8V.js.gz +0 -0
  140. package/out/renderer/assets/{sankeyDiagram-XADWPNL6-Cy6CP9QU.js → sankeyDiagram-XADWPNL6-Dbde7usj.js} +2 -2
  141. package/out/renderer/assets/sankeyDiagram-XADWPNL6-Dbde7usj.js.br +0 -0
  142. package/out/renderer/assets/sankeyDiagram-XADWPNL6-Dbde7usj.js.gz +0 -0
  143. package/out/renderer/assets/{schedule-BRGzJU8Q.js → schedule-DNMCsk-G.js} +9 -10
  144. package/out/renderer/assets/schedule-DNMCsk-G.js.br +0 -0
  145. package/out/renderer/assets/schedule-DNMCsk-G.js.gz +0 -0
  146. package/out/renderer/assets/{search-BHyqy--Q.js → search-BEY9yGF_.js} +1 -1
  147. package/out/renderer/assets/{sequenceDiagram-FGHM5R23-B3c7Za1w.js → sequenceDiagram-FGHM5R23-DI8l1pSL.js} +4 -4
  148. package/out/renderer/assets/sequenceDiagram-FGHM5R23-DI8l1pSL.js.br +0 -0
  149. package/out/renderer/assets/sequenceDiagram-FGHM5R23-DI8l1pSL.js.gz +0 -0
  150. package/out/renderer/assets/{session-DAyi31xW.js → session-Bn5k9ScR.js} +616 -55
  151. package/out/renderer/assets/session-Bn5k9ScR.js.br +0 -0
  152. package/out/renderer/assets/session-Bn5k9ScR.js.gz +0 -0
  153. package/out/renderer/assets/{setting-dialog-B9QpnCSy.js → setting-dialog-sqfPfGsy.js} +3 -3
  154. package/out/renderer/assets/setting-dialog-sqfPfGsy.js.br +0 -0
  155. package/out/renderer/assets/setting-dialog-sqfPfGsy.js.gz +0 -0
  156. package/out/renderer/assets/{settings-2-DTnwbGMG.js → settings-2-DRhoXOO8.js} +1 -1
  157. package/out/renderer/assets/{settings-agents-BrAPSjkm.js → settings-agents-Bntc31Nn.js} +10 -11
  158. package/out/renderer/assets/settings-agents-Bntc31Nn.js.br +0 -0
  159. package/out/renderer/assets/settings-agents-Bntc31Nn.js.gz +0 -0
  160. package/out/renderer/assets/{settings-general-Ck2OiZjy.js → settings-general-DhbLb9cP.js} +2 -2
  161. package/out/renderer/assets/settings-general-DhbLb9cP.js.br +0 -0
  162. package/out/renderer/assets/settings-general-DhbLb9cP.js.gz +0 -0
  163. package/out/renderer/assets/{settings-ilink-D0Br74W_.js → settings-ilink-C7nGGjwT.js} +3 -3
  164. package/out/renderer/assets/settings-ilink-C7nGGjwT.js.br +0 -0
  165. package/out/renderer/assets/settings-ilink-C7nGGjwT.js.gz +0 -0
  166. package/out/renderer/assets/{settings-image-generation-BdyKoUUZ.js → settings-image-generation-H2dgqG7Y.js} +6 -7
  167. package/out/renderer/assets/settings-image-generation-H2dgqG7Y.js.br +0 -0
  168. package/out/renderer/assets/settings-image-generation-H2dgqG7Y.js.gz +0 -0
  169. package/out/renderer/assets/{settings-layout-B7d1oQnz.js → settings-layout-ATto1xpJ.js} +9 -3
  170. package/out/renderer/assets/settings-layout-ATto1xpJ.js.br +0 -0
  171. package/out/renderer/assets/settings-layout-ATto1xpJ.js.gz +0 -0
  172. package/out/renderer/assets/{settings-mcp-DtnVGpCh.js → settings-mcp-DUdMuoJ-.js} +7 -8
  173. package/out/renderer/assets/settings-mcp-DUdMuoJ-.js.br +0 -0
  174. package/out/renderer/assets/settings-mcp-DUdMuoJ-.js.gz +0 -0
  175. package/out/renderer/assets/{settings-memory-Bff_D3Id.js → settings-memory-CJLG4aHW.js} +3 -3
  176. package/out/renderer/assets/settings-memory-CJLG4aHW.js.br +0 -0
  177. package/out/renderer/assets/settings-memory-CJLG4aHW.js.gz +0 -0
  178. package/out/renderer/assets/{settings-snippets-CuwNZ684.js → settings-snippets-B4VcnD5Z.js} +6 -7
  179. package/out/renderer/assets/settings-snippets-B4VcnD5Z.js.br +0 -0
  180. package/out/renderer/assets/settings-snippets-B4VcnD5Z.js.gz +0 -0
  181. package/out/renderer/assets/settings-speech-to-text-DQ7lfkTu.js +1054 -0
  182. package/out/renderer/assets/settings-speech-to-text-DQ7lfkTu.js.br +0 -0
  183. package/out/renderer/assets/settings-speech-to-text-DQ7lfkTu.js.gz +0 -0
  184. package/out/renderer/assets/{settings-webui-CcjZQw6G.js → settings-webui-DZf9O-6j.js} +2 -2
  185. package/out/renderer/assets/settings-webui-DZf9O-6j.js.br +0 -0
  186. package/out/renderer/assets/settings-webui-DZf9O-6j.js.gz +0 -0
  187. package/out/renderer/assets/{skills-installed-BR3EmTKD.js → skills-installed-Dp0r_4I-.js} +4 -4
  188. package/out/renderer/assets/skills-installed-Dp0r_4I-.js.br +0 -0
  189. package/out/renderer/assets/skills-installed-Dp0r_4I-.js.gz +0 -0
  190. package/out/renderer/assets/{skills-layout-Cgy95TdD.js → skills-layout-D-5rlY38.js} +2 -2
  191. package/out/renderer/assets/skills-layout-D-5rlY38.js.br +0 -0
  192. package/out/renderer/assets/skills-layout-D-5rlY38.js.gz +0 -0
  193. package/out/renderer/assets/{skills-skills-sh-7eO0Llg2.js → skills-skills-sh-CcLoIrSw.js} +4 -4
  194. package/out/renderer/assets/skills-skills-sh-CcLoIrSw.js.br +0 -0
  195. package/out/renderer/assets/skills-skills-sh-CcLoIrSw.js.gz +0 -0
  196. package/out/renderer/assets/{sortable.esm-BTWJnVbf.js → sortable.esm-knFxDx0Y.js} +1 -1
  197. package/out/renderer/assets/sortable.esm-knFxDx0Y.js.br +0 -0
  198. package/out/renderer/assets/sortable.esm-knFxDx0Y.js.gz +0 -0
  199. package/out/renderer/assets/{standard-schema-Dk273X__.js → standard-schema-dKXoCekr.js} +1 -1
  200. package/out/renderer/assets/standard-schema-dKXoCekr.js.br +0 -0
  201. package/out/renderer/assets/standard-schema-dKXoCekr.js.gz +0 -0
  202. package/out/renderer/assets/{stateDiagram-FHFEXIEX-C-7WuE0a.js → stateDiagram-FHFEXIEX-DWWz4PMv.js} +9 -9
  203. package/out/renderer/assets/stateDiagram-FHFEXIEX-DWWz4PMv.js.br +0 -0
  204. package/out/renderer/assets/stateDiagram-FHFEXIEX-DWWz4PMv.js.gz +0 -0
  205. package/out/renderer/assets/{stateDiagram-v2-QKLJ7IA2-IZRTgRo8.js → stateDiagram-v2-QKLJ7IA2-Dm2qD5bg.js} +5 -5
  206. package/out/renderer/assets/{task-Bd1x6VfK.js → task-C5dyYbfn.js} +11 -12
  207. package/out/renderer/assets/task-C5dyYbfn.js.br +0 -0
  208. package/out/renderer/assets/task-C5dyYbfn.js.gz +0 -0
  209. package/out/renderer/assets/{textarea-CcqU8Ki7.js → textarea-DTqKlQbL.js} +1 -1
  210. package/out/renderer/assets/{timeline-definition-GMOUNBTQ-DVUMAatS.js → timeline-definition-GMOUNBTQ-A1tEoL9d.js} +3 -3
  211. package/out/renderer/assets/timeline-definition-GMOUNBTQ-A1tEoL9d.js.br +0 -0
  212. package/out/renderer/assets/timeline-definition-GMOUNBTQ-A1tEoL9d.js.gz +0 -0
  213. package/out/renderer/assets/{vennDiagram-DHZGUBPP-BtKdpgmE.js → vennDiagram-DHZGUBPP-tNdYrJi_.js} +2 -2
  214. package/out/renderer/assets/vennDiagram-DHZGUBPP-tNdYrJi_.js.br +0 -0
  215. package/out/renderer/assets/vennDiagram-DHZGUBPP-tNdYrJi_.js.gz +0 -0
  216. package/out/renderer/assets/{wardley-RL74JXVD-DRlpukah.js → wardley-RL74JXVD-BxN5_Sp6.js} +4 -4
  217. package/out/renderer/assets/wardley-RL74JXVD-BxN5_Sp6.js.br +0 -0
  218. package/out/renderer/assets/wardley-RL74JXVD-BxN5_Sp6.js.gz +0 -0
  219. package/out/renderer/assets/{wardleyDiagram-NUSXRM2D-c_iDOO-3.js → wardleyDiagram-NUSXRM2D-B_3jA8zU.js} +6 -6
  220. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-B_3jA8zU.js.br +0 -0
  221. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-B_3jA8zU.js.gz +0 -0
  222. package/out/renderer/assets/{wrench-C-pOIUrz.js → wrench-7r-g9MUq.js} +1 -1
  223. package/out/renderer/assets/wrench-7r-g9MUq.js.br +0 -0
  224. package/out/renderer/assets/wrench-7r-g9MUq.js.gz +0 -0
  225. package/out/renderer/assets/{xlsx-view-Ca3bToM7.js → xlsx-view-Bv0YhA5m.js} +9 -9
  226. package/out/renderer/assets/xlsx-view-Bv0YhA5m.js.br +0 -0
  227. package/out/renderer/assets/xlsx-view-Bv0YhA5m.js.gz +0 -0
  228. package/out/renderer/assets/{xychartDiagram-5P7HB3ND-D65drBbj.js → xychartDiagram-5P7HB3ND-NNVuzC4j.js} +3 -3
  229. package/out/renderer/assets/xychartDiagram-5P7HB3ND-NNVuzC4j.js.br +0 -0
  230. package/out/renderer/assets/xychartDiagram-5P7HB3ND-NNVuzC4j.js.gz +0 -0
  231. package/out/renderer/index.html +2 -2
  232. package/out/renderer/index.html.br +0 -0
  233. package/out/renderer/index.html.gz +0 -0
  234. package/out/server/main.js +247 -11
  235. package/package.json +2 -1
  236. package/resources/tree-sitter-wasm/tree-sitter-dart.wasm +0 -0
  237. package/out/renderer/assets/_baseUniq-C0L-SxO8.js.br +0 -0
  238. package/out/renderer/assets/_baseUniq-C0L-SxO8.js.gz +0 -0
  239. package/out/renderer/assets/arc-bnlMIyYF.js.br +0 -0
  240. package/out/renderer/assets/arc-bnlMIyYF.js.gz +0 -0
  241. package/out/renderer/assets/architectureDiagram-Q4EWVU46-Cr0249Lu.js.br +0 -0
  242. package/out/renderer/assets/architectureDiagram-Q4EWVU46-Cr0249Lu.js.gz +0 -0
  243. package/out/renderer/assets/automation-CvjrkE9z.js.br +0 -0
  244. package/out/renderer/assets/automation-CvjrkE9z.js.gz +0 -0
  245. package/out/renderer/assets/blockDiagram-DXYQGD6D-Cw6vh5dx.js.br +0 -0
  246. package/out/renderer/assets/blockDiagram-DXYQGD6D-Cw6vh5dx.js.gz +0 -0
  247. package/out/renderer/assets/c4Diagram-AHTNJAMY-BUrvcyv2.js.br +0 -0
  248. package/out/renderer/assets/c4Diagram-AHTNJAMY-BUrvcyv2.js.gz +0 -0
  249. package/out/renderer/assets/chunk-4TB4RGXK-D_fBnf0p.js.br +0 -0
  250. package/out/renderer/assets/chunk-4TB4RGXK-D_fBnf0p.js.gz +0 -0
  251. package/out/renderer/assets/chunk-EDXVE4YY-BJLqHaER.js.br +0 -0
  252. package/out/renderer/assets/chunk-EDXVE4YY-BJLqHaER.js.gz +0 -0
  253. package/out/renderer/assets/chunk-OYMX7WX6-CrS7loi7.js.br +0 -0
  254. package/out/renderer/assets/chunk-OYMX7WX6-CrS7loi7.js.gz +0 -0
  255. package/out/renderer/assets/chunk-YZCP3GAM-CMgdytZR.js.br +0 -0
  256. package/out/renderer/assets/chunk-YZCP3GAM-CMgdytZR.js.gz +0 -0
  257. package/out/renderer/assets/clipboard-xI9lExaB.js +0 -15
  258. package/out/renderer/assets/code-editor-SuOcN-5B.js.br +0 -0
  259. package/out/renderer/assets/code-editor-SuOcN-5B.js.gz +0 -0
  260. package/out/renderer/assets/collapsible-Bd85ZCyx.js.br +0 -0
  261. package/out/renderer/assets/collapsible-Bd85ZCyx.js.gz +0 -0
  262. package/out/renderer/assets/context-menu-BO9-4FYd.js +0 -282
  263. package/out/renderer/assets/context-menu-BO9-4FYd.js.br +0 -0
  264. package/out/renderer/assets/context-menu-BO9-4FYd.js.gz +0 -0
  265. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dq8VllNT.js.br +0 -0
  266. package/out/renderer/assets/cose-bilkent-S5V4N54A-Dq8VllNT.js.gz +0 -0
  267. package/out/renderer/assets/dagre-KV5264BT-Dec8q4UT.js.br +0 -0
  268. package/out/renderer/assets/dagre-KV5264BT-Dec8q4UT.js.gz +0 -0
  269. package/out/renderer/assets/diagram-5BDNPKRD-CzA2u_EN.js.br +0 -0
  270. package/out/renderer/assets/diagram-5BDNPKRD-CzA2u_EN.js.gz +0 -0
  271. package/out/renderer/assets/diagram-G4DWMVQ6-C8h3R7jD.js.br +0 -0
  272. package/out/renderer/assets/diagram-G4DWMVQ6-C8h3R7jD.js.gz +0 -0
  273. package/out/renderer/assets/diagram-MMDJMWI5-9tiXSF90.js.br +0 -0
  274. package/out/renderer/assets/diagram-MMDJMWI5-9tiXSF90.js.gz +0 -0
  275. package/out/renderer/assets/diagram-TYMM5635-BrarGJNf.js.br +0 -0
  276. package/out/renderer/assets/diagram-TYMM5635-BrarGJNf.js.gz +0 -0
  277. package/out/renderer/assets/erDiagram-SMLLAGMA-1Q9StK7L.js.br +0 -0
  278. package/out/renderer/assets/erDiagram-SMLLAGMA-1Q9StK7L.js.gz +0 -0
  279. package/out/renderer/assets/field-ohYLdnJa.js.br +0 -0
  280. package/out/renderer/assets/field-ohYLdnJa.js.gz +0 -0
  281. package/out/renderer/assets/flowDiagram-DWJPFMVM-CpcXVOmj.js.br +0 -0
  282. package/out/renderer/assets/flowDiagram-DWJPFMVM-CpcXVOmj.js.gz +0 -0
  283. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-C7Da4JBG.js.br +0 -0
  284. package/out/renderer/assets/ganttDiagram-T4ZO3ILL-C7Da4JBG.js.gz +0 -0
  285. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-COBL52q_.js.br +0 -0
  286. package/out/renderer/assets/gitGraphDiagram-UUTBAWPF-COBL52q_.js.gz +0 -0
  287. package/out/renderer/assets/graph-vKaAs6sc.js.br +0 -0
  288. package/out/renderer/assets/graph-vKaAs6sc.js.gz +0 -0
  289. package/out/renderer/assets/index-BJPggXxf.js.br +0 -0
  290. package/out/renderer/assets/index-BJPggXxf.js.gz +0 -0
  291. package/out/renderer/assets/index-DGML4zYf.css +0 -382
  292. package/out/renderer/assets/index-DGML4zYf.css.br +0 -0
  293. package/out/renderer/assets/index-DGML4zYf.css.gz +0 -0
  294. package/out/renderer/assets/infoDiagram-42DDH7IO-z37e1cYq.js.br +0 -0
  295. package/out/renderer/assets/infoDiagram-42DDH7IO-z37e1cYq.js.gz +0 -0
  296. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D0QTo3NZ.js.br +0 -0
  297. package/out/renderer/assets/ishikawaDiagram-UXIWVN3A-D0QTo3NZ.js.gz +0 -0
  298. package/out/renderer/assets/item-Cv-tnX8b.js.br +0 -0
  299. package/out/renderer/assets/item-Cv-tnX8b.js.gz +0 -0
  300. package/out/renderer/assets/journeyDiagram-VCZTEJTY-CQV0gdjM.js.br +0 -0
  301. package/out/renderer/assets/journeyDiagram-VCZTEJTY-CQV0gdjM.js.gz +0 -0
  302. package/out/renderer/assets/kanban-definition-6JOO6SKY-DouRT6vc.js.br +0 -0
  303. package/out/renderer/assets/kanban-definition-6JOO6SKY-DouRT6vc.js.gz +0 -0
  304. package/out/renderer/assets/layout-BhbUjpvY.js.br +0 -0
  305. package/out/renderer/assets/layout-BhbUjpvY.js.gz +0 -0
  306. package/out/renderer/assets/linear-D1WO10JK.js.br +0 -0
  307. package/out/renderer/assets/linear-D1WO10JK.js.gz +0 -0
  308. package/out/renderer/assets/mermaid-GHXKKRXX-KwA2c0l5.js.br +0 -0
  309. package/out/renderer/assets/mermaid-GHXKKRXX-KwA2c0l5.js.gz +0 -0
  310. package/out/renderer/assets/min-BP2C7bzG.js.br +0 -0
  311. package/out/renderer/assets/min-BP2C7bzG.js.gz +0 -0
  312. package/out/renderer/assets/mindmap-definition-QFDTVHPH-CxLYrjVp.js.br +0 -0
  313. package/out/renderer/assets/mindmap-definition-QFDTVHPH-CxLYrjVp.js.gz +0 -0
  314. package/out/renderer/assets/pieDiagram-DEJITSTG-D1LBRn_k.js.br +0 -0
  315. package/out/renderer/assets/pieDiagram-DEJITSTG-D1LBRn_k.js.gz +0 -0
  316. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-89cdKeKP.js.br +0 -0
  317. package/out/renderer/assets/quadrantDiagram-34T5L4WZ-89cdKeKP.js.gz +0 -0
  318. package/out/renderer/assets/requirementDiagram-MS252O5E-BPmX5cbr.js.br +0 -0
  319. package/out/renderer/assets/requirementDiagram-MS252O5E-BPmX5cbr.js.gz +0 -0
  320. package/out/renderer/assets/resizable-C_plViAK.js.br +0 -0
  321. package/out/renderer/assets/resizable-C_plViAK.js.gz +0 -0
  322. package/out/renderer/assets/sankeyDiagram-XADWPNL6-Cy6CP9QU.js.br +0 -0
  323. package/out/renderer/assets/sankeyDiagram-XADWPNL6-Cy6CP9QU.js.gz +0 -0
  324. package/out/renderer/assets/schedule-BRGzJU8Q.js.br +0 -0
  325. package/out/renderer/assets/schedule-BRGzJU8Q.js.gz +0 -0
  326. package/out/renderer/assets/sequenceDiagram-FGHM5R23-B3c7Za1w.js.br +0 -0
  327. package/out/renderer/assets/sequenceDiagram-FGHM5R23-B3c7Za1w.js.gz +0 -0
  328. package/out/renderer/assets/session-DAyi31xW.js.br +0 -0
  329. package/out/renderer/assets/session-DAyi31xW.js.gz +0 -0
  330. package/out/renderer/assets/setting-dialog-B9QpnCSy.js.br +0 -0
  331. package/out/renderer/assets/setting-dialog-B9QpnCSy.js.gz +0 -0
  332. package/out/renderer/assets/settings-agents-BrAPSjkm.js.br +0 -0
  333. package/out/renderer/assets/settings-agents-BrAPSjkm.js.gz +0 -0
  334. package/out/renderer/assets/settings-general-Ck2OiZjy.js.br +0 -0
  335. package/out/renderer/assets/settings-general-Ck2OiZjy.js.gz +0 -0
  336. package/out/renderer/assets/settings-ilink-D0Br74W_.js.br +0 -0
  337. package/out/renderer/assets/settings-ilink-D0Br74W_.js.gz +0 -0
  338. package/out/renderer/assets/settings-image-generation-BdyKoUUZ.js.br +0 -0
  339. package/out/renderer/assets/settings-image-generation-BdyKoUUZ.js.gz +0 -0
  340. package/out/renderer/assets/settings-layout-B7d1oQnz.js.br +0 -0
  341. package/out/renderer/assets/settings-layout-B7d1oQnz.js.gz +0 -0
  342. package/out/renderer/assets/settings-mcp-DtnVGpCh.js.br +0 -0
  343. package/out/renderer/assets/settings-mcp-DtnVGpCh.js.gz +0 -0
  344. package/out/renderer/assets/settings-memory-Bff_D3Id.js.br +0 -0
  345. package/out/renderer/assets/settings-memory-Bff_D3Id.js.gz +0 -0
  346. package/out/renderer/assets/settings-snippets-CuwNZ684.js.br +0 -0
  347. package/out/renderer/assets/settings-snippets-CuwNZ684.js.gz +0 -0
  348. package/out/renderer/assets/settings-webui-CcjZQw6G.js.br +0 -0
  349. package/out/renderer/assets/settings-webui-CcjZQw6G.js.gz +0 -0
  350. package/out/renderer/assets/skills-installed-BR3EmTKD.js.br +0 -0
  351. package/out/renderer/assets/skills-installed-BR3EmTKD.js.gz +0 -0
  352. package/out/renderer/assets/skills-layout-Cgy95TdD.js.br +0 -0
  353. package/out/renderer/assets/skills-layout-Cgy95TdD.js.gz +0 -0
  354. package/out/renderer/assets/skills-skills-sh-7eO0Llg2.js.br +0 -0
  355. package/out/renderer/assets/skills-skills-sh-7eO0Llg2.js.gz +0 -0
  356. package/out/renderer/assets/sortable.esm-BTWJnVbf.js.br +0 -0
  357. package/out/renderer/assets/sortable.esm-BTWJnVbf.js.gz +0 -0
  358. package/out/renderer/assets/standard-schema-Dk273X__.js.br +0 -0
  359. package/out/renderer/assets/standard-schema-Dk273X__.js.gz +0 -0
  360. package/out/renderer/assets/stateDiagram-FHFEXIEX-C-7WuE0a.js.br +0 -0
  361. package/out/renderer/assets/stateDiagram-FHFEXIEX-C-7WuE0a.js.gz +0 -0
  362. package/out/renderer/assets/task-Bd1x6VfK.js.br +0 -0
  363. package/out/renderer/assets/task-Bd1x6VfK.js.gz +0 -0
  364. package/out/renderer/assets/timeline-definition-GMOUNBTQ-DVUMAatS.js.br +0 -0
  365. package/out/renderer/assets/timeline-definition-GMOUNBTQ-DVUMAatS.js.gz +0 -0
  366. package/out/renderer/assets/vennDiagram-DHZGUBPP-BtKdpgmE.js.br +0 -0
  367. package/out/renderer/assets/vennDiagram-DHZGUBPP-BtKdpgmE.js.gz +0 -0
  368. package/out/renderer/assets/wardley-RL74JXVD-DRlpukah.js.br +0 -0
  369. package/out/renderer/assets/wardley-RL74JXVD-DRlpukah.js.gz +0 -0
  370. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-c_iDOO-3.js.br +0 -0
  371. package/out/renderer/assets/wardleyDiagram-NUSXRM2D-c_iDOO-3.js.gz +0 -0
  372. package/out/renderer/assets/wrench-C-pOIUrz.js.br +0 -0
  373. package/out/renderer/assets/wrench-C-pOIUrz.js.gz +0 -0
  374. package/out/renderer/assets/xlsx-view-Ca3bToM7.js.br +0 -0
  375. package/out/renderer/assets/xlsx-view-Ca3bToM7.js.gz +0 -0
  376. package/out/renderer/assets/xychartDiagram-5P7HB3ND-D65drBbj.js.br +0 -0
  377. package/out/renderer/assets/xychartDiagram-5P7HB3ND-D65drBbj.js.gz +0 -0
@@ -1,22 +1,21 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./code-editor-SuOcN-5B.js","./index-BJPggXxf.js","./index-DGML4zYf.css","./mermaid-GHXKKRXX-KwA2c0l5.js","./code-editor-BwxubRqT.css"])))=>i.map(i=>d[i]);
2
- import { c as createLucideIcon, r as reactExports, aC as formatErrorMessage, bB as ReactStore, bC as popupStoreSelectors, bD as triggerHover, ap as triggerPress, bE as escapeKey, bF as attachPreventUnmountOnClose, bG as closePress, bH as PATIENT_CLICK_THRESHOLD, aw as reactDomExports, bI as focusOut, bJ as setPopupOpenState, bK as createInitialPopupStoreState, bL as createPopupFloatingRootContext, bM as Timeout, bN as PopupTriggerMap, j as jsxRuntimeExports, bO as FloatingTree, bP as usePopupRootSync, bQ as useImplicitActiveTrigger, bR as useOpenStateTransitions, an as createChangeEventDetails, bS as imperativeAction, bT as PopupHandleAttachment, bU as usePopupRootStore, bV as useDismiss, bW as usePopupInteractionProps, bX as usePopupHandleStore, aA as useBaseUiId, bY as useTriggerDataForwarding, bZ as useHoverReferenceInteraction, b_ as safePolygon, b$ as useClick, c0 as useOpenMethodTriggerProps, aF as useButton, c1 as useTriggerFocusGuards, ah as useRenderElement, c2 as CLICK_TRIGGER_IDENTIFIER, c3 as FocusGuard, ak as pressableTriggerOpenStateMapping, c4 as triggerOpenStateMapping, c5 as FloatingPortal, c6 as POPUP_COLLISION_AVOIDANCE, c7 as useFloatingNodeId, aI as useAnimationsFinished, c8 as useAnchorPositioning, aJ as useIsoLayoutEffect, c9 as useAnchoredPopupScrollLock, ca as usePositioner, cb as InternalBackdrop, cc as inertValue, cd as FloatingNode, aB as useStableCallback, ce as useToolbarRootContext, aK as useOpenChangeComplete, cf as useHoverFloatingInteraction, cg as createDefaultInitialFocus, ch as FOCUSABLE_POPUP_PROPS, bl as COMPOSITE_KEYS, ci as getDisabledMountTransitionStyles, cj as FloatingFocusManager, ck as isHTMLElement, cl as popupTransitionStateMapping, u as useTranslation, b as useMessage, Q as useNavigate, a as useAppStore, V as Badge, cm as formatUpdatedTime, f as request, K as electron, a6 as ALL_FEATURES, a7 as FEATURE_I18N_KEYS, F as cn$1, d as Switch, B as Button, H as LoaderCircle, cn as buttonVariants, i as isWebUI, J as FolderOpen, C as Check, e as Copy, g as extractErrorMessage, aU as reduceFlushStreaming, aT as reduceSessionNotification, h as copyText, av as React, co as Tooltip, cp as TooltipTrigger, cq as TooltipContent, S as ScrollArea, a0 as Bot, cr as formatDuration, ax as getDefaultExportFromCjs, cs as ReactDOM, ct as v$2, A as generateUUID, cu as HoverCard, cv as HoverCardTrigger, cw as HoverCardContent, cx as X$1, aW as Folder, L as Library, v as DropdownMenu, w as DropdownMenuTrigger, cy as ChevronDown, x as DropdownMenuContent, y as DropdownMenuItem, cz as DropdownMenuSub, cA as DropdownMenuSubTrigger, cB as DropdownMenuSubContent, cC as CircleQuestionMark, cD as ChevronUp, aV as Clock, aP as Tabs, aQ as TabsList, aR as TabsTrigger, cE as z$1, X as CircleCheck, cF as __vitePreload, I as Input, cG as Code, bv as EDITOR_LABELS, aS as webUIBaseUrl, R as subscribe, a5 as ChevronRight, cH as MessageSquare, cI as FolderPlus, P as Pencil, T as Trash2, cJ as useProjectState, cK as clientId, cL as TabsContent } from "./index-BJPggXxf.js";
3
- import { S as Settings2 } from "./settings-2-DTnwbGMG.js";
4
- import { i as isValidMessageToDisplay, M as MessageBubble, A as ArrowUpToLine, S as Square, j as jsonToPrettyYamlExports, p as parseFileReference, c as CodeCompareView, r as resolveFileUrl, I as ImageView, P as PdfView, D as DocxView, a as PptxView, X as XlsxView, R as RotateCcw, F as Folders } from "./xlsx-view-Ca3bToM7.js";
5
- import { I as Image, W as Wrench } from "./wrench-C-pOIUrz.js";
6
- import { F as FileText } from "./file-text-CshHuHgW.js";
7
- import { C as Clipboard } from "./clipboard-xI9lExaB.js";
8
- import { A as ArrowLeft } from "./arrow-left-D589pHHA.js";
9
- import { aQ as CodeView, S as StreamMarkdown, aR as FileIcon } from "./mermaid-GHXKKRXX-KwA2c0l5.js";
10
- import { b as ContextMenuContent, c as ContextMenuItem, d as ContextMenuSeparator, C as ContextMenu, a as ContextMenuTrigger } from "./context-menu-BO9-4FYd.js";
11
- import { S as Search } from "./search-BHyqy--Q.js";
12
- import { E as ExternalLink } from "./link-2-C5KPDK2L.js";
13
- import { R as RefreshCw } from "./refresh-cw-CYW3HR-E.js";
14
- import { P as Plus } from "./plus-CsV_3veW.js";
15
- import { R as ResizablePanelGroup, a as ResizablePanel, b as ResizableHandle } from "./resizable-C_plViAK.js";
16
- import "./collapsible-Bd85ZCyx.js";
17
- import "./item-Cv-tnX8b.js";
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./code-editor-CEXlC4aV.js","./index-LmYTNvdF.js","./index-aGJ_yZib.css","./mermaid-GHXKKRXX-CZqkhGx7.js","./code-editor-BwxubRqT.css"])))=>i.map(i=>d[i]);
2
+ import { h as createLucideIcon, r as reactExports, am as formatErrorMessage, bq as ReactStore, br as popupStoreSelectors, bs as triggerHover, al as triggerPress, bt as escapeKey, bu as attachPreventUnmountOnClose, bv as closePress, bw as PATIENT_CLICK_THRESHOLD, ae as reactDomExports, bx as focusOut, by as setPopupOpenState, bz as createInitialPopupStoreState, bA as createPopupFloatingRootContext, bB as Timeout, bC as PopupTriggerMap, j as jsxRuntimeExports, bD as FloatingTree, bE as usePopupRootSync, bF as useImplicitActiveTrigger, bG as useOpenStateTransitions, ak as createChangeEventDetails, bH as imperativeAction, bI as PopupHandleAttachment, bJ as usePopupRootStore, bK as useDismiss, bL as usePopupInteractionProps, bM as usePopupHandleStore, ai as useBaseUiId, bN as useTriggerDataForwarding, bO as useHoverReferenceInteraction, bP as safePolygon, bQ as useClick, bR as useOpenMethodTriggerProps, aq as useButton, bS as useTriggerFocusGuards, ap as useRenderElement, bT as CLICK_TRIGGER_IDENTIFIER, bU as FocusGuard, bV as pressableTriggerOpenStateMapping, bW as triggerOpenStateMapping, bX as FloatingPortal, bY as POPUP_COLLISION_AVOIDANCE, bZ as useFloatingNodeId, at as useAnimationsFinished, b_ as useAnchorPositioning, au as useIsoLayoutEffect, b$ as useAnchoredPopupScrollLock, c0 as usePositioner, c1 as InternalBackdrop, c2 as inertValue, c3 as FloatingNode, aj as useStableCallback, c4 as useToolbarRootContext, av as useOpenChangeComplete, c5 as useHoverFloatingInteraction, c6 as createDefaultInitialFocus, c7 as FOCUSABLE_POPUP_PROPS, ba as COMPOSITE_KEYS, c8 as getDisabledMountTransitionStyles, c9 as FloatingFocusManager, ca as isHTMLElement, cb as popupTransitionStateMapping, u as useTranslation, b as useMessage, X as useNavigate, a as useAppStore, _ as Badge, cc as formatUpdatedTime, e as request, V as electron, ab as ALL_FEATURES, ac as FEATURE_I18N_KEYS, M as cn$1, c as Switch, B as Button, R as LoaderCircle, cd as buttonVariants, i as isWebUI, U as FolderOpen, C as Check, d as Copy, f as extractErrorMessage, aG as reduceFlushStreaming, aF as reduceSessionNotification, g as copyText, ad as React, ce as Tooltip, cf as TooltipTrigger, cg as TooltipContent, S as ScrollArea, a5 as Bot, ch as formatDuration, af as getDefaultExportFromCjs, ci as ReactDOM, Y as subscribe, cj as clientId, A as DropdownMenu, E as DropdownMenuTrigger, ck as ChevronDown, F as DropdownMenuContent, G as DropdownMenuItem, cl as v$2, J as generateUUID, cm as HoverCard, cn as HoverCardTrigger, co as HoverCardContent, cp as X$1, aI as Folder, L as Library, cq as DropdownMenuSub, cr as DropdownMenuSubTrigger, cs as DropdownMenuSubContent, ct as CircleQuestionMark, cu as ChevronUp, aH as Clock, aB as Tabs, aC as TabsList, aD as TabsTrigger, cv as z$1, a0 as CircleCheck, cw as __vitePreload, I as Input, m as ContextMenuContent, n as ContextMenuItem, o as ContextMenuSeparator, cx as Code, bk as EDITOR_LABELS, k as ContextMenu, l as ContextMenuTrigger, aE as webUIBaseUrl, aa as ChevronRight, cy as MessageSquare, cz as FolderPlus, P as Pencil, T as Trash2, cA as useProjectState, cB as TabsContent } from "./index-LmYTNvdF.js";
3
+ import { S as Settings2 } from "./settings-2-DRhoXOO8.js";
4
+ import { i as isValidMessageToDisplay, M as MessageBubble, A as ArrowUpToLine, S as Square, j as jsonToPrettyYamlExports, p as parseFileReference, c as CodeCompareView, r as resolveFileUrl, I as ImageView, P as PdfView, D as DocxView, a as PptxView, X as XlsxView, R as RotateCcw, F as Folders } from "./xlsx-view-Bv0YhA5m.js";
5
+ import { M as Mic, C as Clipboard } from "./mic-BgSvicCB.js";
6
+ import { I as Image, W as Wrench } from "./wrench-7r-g9MUq.js";
7
+ import { F as FileText } from "./file-text-nGCW6zu1.js";
8
+ import { A as ArrowLeft } from "./arrow-left-CxS1t3f7.js";
9
+ import { aQ as CodeView, S as StreamMarkdown, aR as FileIcon } from "./mermaid-GHXKKRXX-CZqkhGx7.js";
10
+ import { S as Search } from "./search-BEY9yGF_.js";
11
+ import { E as ExternalLink } from "./link-2-DHUPzNSt.js";
12
+ import { R as RefreshCw } from "./refresh-cw-Bvm578nW.js";
13
+ import { P as Plus } from "./plus-YNCXW-GD.js";
14
+ import { R as ResizablePanelGroup, a as ResizablePanel, b as ResizableHandle } from "./resizable-cStzNJ8V.js";
15
+ import "./collapsible-CMuCJUWG.js";
16
+ import "./item-BHEUMM9H.js";
18
17
  import "./schemas-c0X-G5_P.js";
19
- import "./ellipsis-BafkhboM.js";
18
+ import "./ellipsis-D1agTYu1.js";
20
19
  const __iconNode$k = [
21
20
  ["path", { d: "M12 5v14", key: "s699le" }],
22
21
  ["path", { d: "m19 12-7 7-7-7", key: "1idqje" }]
@@ -922,20 +921,34 @@ function ChatHeader({ session }) {
922
921
  children: [
923
922
  /* @__PURE__ */ jsxRuntimeExports.jsx(PopoverTrigger, { className: "flex size-7 items-center justify-center rounded-md text-sidebar-foreground/45 hover:bg-sidebar-accent/30 hover:text-sidebar-foreground/70 outline-none transition-colors data-pressed:bg-sidebar-accent/40", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Settings2, { className: "size-4" }) }),
924
923
  /* @__PURE__ */ jsxRuntimeExports.jsx(PopoverPortal, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(PopoverPositioner, { side: "bottom", align: "end", sideOffset: 4, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(PopoverPopup, { className: "z-10 min-w-96 rounded-lg border border-border bg-popover text-popover-foreground shadow-lg outline-none p-1.5 origin-(--transform-origin) data-ending-style:scale-90 data-starting-style:scale-90 data-ending-style:opacity-0 data-starting-style:opacity-0 transition-[transform,opacity] duration-100", children: [
925
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2 py-1.5 space-y-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
926
- CopyableRow,
927
- {
928
- label: t("chatHeader.sessionId", "Session"),
929
- value: session.id,
930
- openFolderTitle: t("chatHeader.openSessionFolder", "Open Session Folder"),
931
- onOpenFolder: async () => {
932
- const dirPath = await request.getSessionDataSystemPath({
933
- sessionId: session.id
934
- });
935
- if (dirPath) electron.revealInFinder(dirPath);
924
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1 py-1", children: [
925
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
926
+ CopyableRow,
927
+ {
928
+ label: t("chatHeader.sessionId", "Session"),
929
+ value: session.id,
930
+ openFolderTitle: t("chatHeader.openSessionFolder", "Open Session Folder"),
931
+ onOpenFolder: async () => {
932
+ const dirPath = await request.getSessionDataSystemPath({
933
+ sessionId: session.id
934
+ });
935
+ if (dirPath) electron.revealInFinder(dirPath);
936
+ }
936
937
  }
937
- }
938
- ) }),
938
+ ) }),
939
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
940
+ CopyableRow,
941
+ {
942
+ label: t("chatHeader.projectId", "Project"),
943
+ value: currentProjectInfo?.cwd ?? session.projectTitle,
944
+ openFolderTitle: t("chatHeader.openProjectFolder", "Open Project Folder"),
945
+ onOpenFolder: async () => {
946
+ const dirPath = currentProjectInfo?.cwd;
947
+ if (dirPath) electron.revealInFinder(dirPath);
948
+ }
949
+ }
950
+ ) })
951
+ ] }),
939
952
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 my-1" }),
940
953
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2 py-1 text-xs font-semibold text-foreground/80", children: t("constant.feature.title", "Features") }),
941
954
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: ALL_FEATURES.length >= 2 ? "grid grid-cols-2 gap-0.5" : "", children: ALL_FEATURES.map((feature) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -4314,6 +4327,539 @@ function nodesToMentionText(nodes) {
4314
4327
  return `@[${prefix}${n.name}](${n.id})`;
4315
4328
  }).join(" ");
4316
4329
  }
4330
+ const TARGET_SAMPLE_RATE = 16e3;
4331
+ const FRAME_SAMPLES = 320;
4332
+ const workletSource = `
4333
+ class FelloPcmProcessor extends AudioWorkletProcessor {
4334
+ constructor() {
4335
+ super();
4336
+ this.buffer = [];
4337
+ this.position = 0;
4338
+ this.output = [];
4339
+ this.ratio = sampleRate / ${TARGET_SAMPLE_RATE};
4340
+ }
4341
+ process(inputs, outputs) {
4342
+ const input = inputs[0] && inputs[0][0];
4343
+ if (input) {
4344
+ for (let i = 0; i < input.length; i++) this.buffer.push(input[i]);
4345
+ while (this.position + 1 < this.buffer.length) {
4346
+ const index = Math.floor(this.position);
4347
+ const fraction = this.position - index;
4348
+ const sample = this.buffer[index] * (1 - fraction) + this.buffer[index + 1] * fraction;
4349
+ const clamped = Math.max(-1, Math.min(1, sample));
4350
+ this.output.push(clamped < 0 ? clamped * 32768 : clamped * 32767);
4351
+ this.position += this.ratio;
4352
+ if (this.output.length >= ${FRAME_SAMPLES}) {
4353
+ const pcm = new Int16Array(${FRAME_SAMPLES});
4354
+ for (let i = 0; i < ${FRAME_SAMPLES}; i++) pcm[i] = this.output[i];
4355
+ this.output = this.output.slice(${FRAME_SAMPLES});
4356
+ this.port.postMessage(pcm.buffer, [pcm.buffer]);
4357
+ }
4358
+ }
4359
+ const remove = Math.max(0, Math.floor(this.position));
4360
+ if (remove > 0) {
4361
+ this.buffer = this.buffer.slice(remove);
4362
+ this.position -= remove;
4363
+ }
4364
+ }
4365
+ const output = outputs[0] && outputs[0][0];
4366
+ if (output) output.fill(0);
4367
+ return true;
4368
+ }
4369
+ }
4370
+ registerProcessor("fello-pcm-processor", FelloPcmProcessor);
4371
+ `;
4372
+ function arrayBufferToBase64(buffer) {
4373
+ const bytes = new Uint8Array(buffer);
4374
+ let binary = "";
4375
+ const chunkSize = 32768;
4376
+ for (let offset = 0; offset < bytes.length; offset += chunkSize) {
4377
+ binary += String.fromCharCode(...bytes.subarray(offset, offset + chunkSize));
4378
+ }
4379
+ return btoa(binary);
4380
+ }
4381
+ function errorMessage(error) {
4382
+ return error instanceof Error ? error.message : String(error);
4383
+ }
4384
+ function useRealtimeAsr(options) {
4385
+ const { onTranscript, onError, onRecordingChange } = options;
4386
+ const configured = useAppStore((state) => state.speechToText.some((provider) => provider.active));
4387
+ const [recording, setRecording] = reactExports.useState(false);
4388
+ const [audioLevel, setAudioLevel] = reactExports.useState(0);
4389
+ const [inputDevices, setInputDevices] = reactExports.useState([]);
4390
+ const asrSessionIdRef = reactExports.useRef(null);
4391
+ const streamRef = reactExports.useRef(null);
4392
+ const audioContextRef = reactExports.useRef(null);
4393
+ const sourceRef = reactExports.useRef(null);
4394
+ const nodeRef = reactExports.useRef(null);
4395
+ const stoppedRef = reactExports.useRef(false);
4396
+ const stoppingRef = reactExports.useRef(false);
4397
+ const recordingRef = reactExports.useRef(false);
4398
+ const audioLevelValueRef = reactExports.useRef(0);
4399
+ const audioLevelFrameRef = reactExports.useRef(null);
4400
+ const stopRef = reactExports.useRef(async () => {
4401
+ });
4402
+ const callbacksRef = reactExports.useRef({ onTranscript, onError, onRecordingChange });
4403
+ callbacksRef.current = { onTranscript, onError, onRecordingChange };
4404
+ const setRecordingState = reactExports.useCallback((value) => {
4405
+ recordingRef.current = value;
4406
+ setRecording(value);
4407
+ callbacksRef.current.onRecordingChange?.(value);
4408
+ }, []);
4409
+ reactExports.useEffect(() => {
4410
+ const handleTranscript = (event) => {
4411
+ if (event.clientId !== clientId || event.asrSessionId !== asrSessionIdRef.current) return;
4412
+ callbacksRef.current.onTranscript?.({
4413
+ text: event.text,
4414
+ isFinal: event.isFinal,
4415
+ id: event.id,
4416
+ index: event.index
4417
+ });
4418
+ };
4419
+ const handleError = (event) => {
4420
+ if (event.clientId !== clientId || event.asrSessionId !== asrSessionIdRef.current) return;
4421
+ callbacksRef.current.onError?.(event.message);
4422
+ };
4423
+ const handleClosed = (event) => {
4424
+ if (event.clientId !== clientId || event.asrSessionId !== asrSessionIdRef.current) return;
4425
+ if (recordingRef.current && !stoppingRef.current) {
4426
+ callbacksRef.current.onError?.("实时语音识别连接已关闭。");
4427
+ void stopRef.current();
4428
+ }
4429
+ };
4430
+ subscribe.on("asr-transcript", handleTranscript);
4431
+ subscribe.on("asr-error", handleError);
4432
+ subscribe.on("asr-closed", handleClosed);
4433
+ return () => {
4434
+ subscribe.off("asr-transcript", handleTranscript);
4435
+ subscribe.off("asr-error", handleError);
4436
+ subscribe.off("asr-closed", handleClosed);
4437
+ };
4438
+ }, [setRecordingState]);
4439
+ const updateAudioLevel = reactExports.useCallback((buffer) => {
4440
+ const samples = new Int16Array(buffer);
4441
+ if (samples.length === 0) return;
4442
+ let sumSquares = 0;
4443
+ for (const sample of samples) {
4444
+ const normalized = sample / 32768;
4445
+ sumSquares += normalized * normalized;
4446
+ }
4447
+ const rms = Math.sqrt(sumSquares / samples.length);
4448
+ audioLevelValueRef.current = Math.min(1, rms * 4);
4449
+ if (audioLevelFrameRef.current !== null) return;
4450
+ audioLevelFrameRef.current = requestAnimationFrame(() => {
4451
+ audioLevelFrameRef.current = null;
4452
+ setAudioLevel(audioLevelValueRef.current);
4453
+ });
4454
+ }, []);
4455
+ const cleanupAudio = reactExports.useCallback(async () => {
4456
+ if (audioLevelFrameRef.current !== null) {
4457
+ cancelAnimationFrame(audioLevelFrameRef.current);
4458
+ audioLevelFrameRef.current = null;
4459
+ }
4460
+ audioLevelValueRef.current = 0;
4461
+ setAudioLevel(0);
4462
+ nodeRef.current?.disconnect();
4463
+ sourceRef.current?.disconnect();
4464
+ streamRef.current?.getTracks().forEach((track) => track.stop());
4465
+ streamRef.current = null;
4466
+ nodeRef.current = null;
4467
+ sourceRef.current = null;
4468
+ const context = audioContextRef.current;
4469
+ audioContextRef.current = null;
4470
+ await context?.close().catch(() => void 0);
4471
+ }, []);
4472
+ const refreshInputDevices = reactExports.useCallback(async () => {
4473
+ if (!navigator.mediaDevices?.enumerateDevices) return [];
4474
+ try {
4475
+ let devices = await navigator.mediaDevices.enumerateDevices();
4476
+ if (devices.length > 0 && devices.every((device) => !device.label)) {
4477
+ try {
4478
+ const permissionStream = await navigator.mediaDevices.getUserMedia({ audio: true });
4479
+ permissionStream.getTracks().forEach((track) => track.stop());
4480
+ devices = await navigator.mediaDevices.enumerateDevices();
4481
+ } catch {
4482
+ }
4483
+ }
4484
+ const audioInputs = devices.filter((device) => device.kind === "audioinput").map((device, index) => ({
4485
+ deviceId: device.deviceId,
4486
+ label: device.label || `Microphone ${index + 1}`
4487
+ }));
4488
+ setInputDevices(audioInputs);
4489
+ return audioInputs;
4490
+ } catch (error) {
4491
+ callbacksRef.current.onError?.(errorMessage(error));
4492
+ return [];
4493
+ }
4494
+ }, []);
4495
+ const start = reactExports.useCallback(
4496
+ async (deviceId = "default") => {
4497
+ if (recordingRef.current || !configured) return;
4498
+ const asrSessionId = `asr_${Date.now()}_${Math.random().toString(36).slice(2)}`;
4499
+ asrSessionIdRef.current = asrSessionId;
4500
+ stoppedRef.current = false;
4501
+ stoppingRef.current = false;
4502
+ try {
4503
+ const stream = await navigator.mediaDevices.getUserMedia({
4504
+ audio: {
4505
+ channelCount: 1,
4506
+ echoCancellation: true,
4507
+ noiseSuppression: true,
4508
+ ...deviceId !== "default" ? { deviceId: { exact: deviceId } } : {}
4509
+ }
4510
+ });
4511
+ streamRef.current = stream;
4512
+ const audioContext = new AudioContext();
4513
+ audioContextRef.current = audioContext;
4514
+ await audioContext.resume();
4515
+ const workletUrl = URL.createObjectURL(
4516
+ new Blob([workletSource], { type: "application/javascript" })
4517
+ );
4518
+ try {
4519
+ await audioContext.audioWorklet.addModule(workletUrl);
4520
+ } finally {
4521
+ URL.revokeObjectURL(workletUrl);
4522
+ }
4523
+ const source = audioContext.createMediaStreamSource(stream);
4524
+ const node = new AudioWorkletNode(audioContext, "fello-pcm-processor");
4525
+ const silentGain = audioContext.createGain();
4526
+ silentGain.gain.value = 0;
4527
+ node.port.onmessage = (message) => {
4528
+ if (stoppedRef.current || asrSessionIdRef.current !== asrSessionId) return;
4529
+ updateAudioLevel(message.data);
4530
+ void request.sendRealtimeAsrFrame({
4531
+ clientId,
4532
+ asrSessionId,
4533
+ audioB64: arrayBufferToBase64(message.data)
4534
+ }).catch((error) => callbacksRef.current.onError?.(errorMessage(error)));
4535
+ };
4536
+ sourceRef.current = source;
4537
+ nodeRef.current = node;
4538
+ await request.startRealtimeAsr({ clientId, asrSessionId });
4539
+ source.connect(node);
4540
+ node.connect(silentGain);
4541
+ silentGain.connect(audioContext.destination);
4542
+ setRecordingState(true);
4543
+ } catch (error) {
4544
+ await cleanupAudio();
4545
+ await request.stopRealtimeAsr({ clientId, asrSessionId }).catch(() => void 0);
4546
+ asrSessionIdRef.current = null;
4547
+ callbacksRef.current.onError?.(errorMessage(error));
4548
+ setRecordingState(false);
4549
+ }
4550
+ },
4551
+ [cleanupAudio, configured, setRecordingState, updateAudioLevel]
4552
+ );
4553
+ const stop = reactExports.useCallback(async () => {
4554
+ const asrSessionId = asrSessionIdRef.current;
4555
+ if (!asrSessionId) return;
4556
+ stoppedRef.current = true;
4557
+ stoppingRef.current = true;
4558
+ await cleanupAudio();
4559
+ await request.stopRealtimeAsr({ clientId, asrSessionId }).catch((error) => {
4560
+ callbacksRef.current.onError?.(errorMessage(error));
4561
+ });
4562
+ asrSessionIdRef.current = null;
4563
+ stoppingRef.current = false;
4564
+ setRecordingState(false);
4565
+ }, [cleanupAudio, setRecordingState]);
4566
+ stopRef.current = stop;
4567
+ reactExports.useEffect(() => {
4568
+ return () => {
4569
+ stoppedRef.current = true;
4570
+ void stopRef.current();
4571
+ };
4572
+ }, []);
4573
+ const toggle = reactExports.useCallback(() => {
4574
+ void (recordingRef.current ? stop() : start());
4575
+ }, [start, stop]);
4576
+ return {
4577
+ recording,
4578
+ audioLevel,
4579
+ configured,
4580
+ inputDevices,
4581
+ refreshInputDevices,
4582
+ start,
4583
+ stop,
4584
+ toggle
4585
+ };
4586
+ }
4587
+ const ASR_WAVEFORM_BARS = [0.35, 0.65, 0.95, 0.55, 0.8, 0.45, 0.9, 0.6, 0.38];
4588
+ const DEFAULT_MAX_DURATION = 5 * 60 * 1e3;
4589
+ const VOICE_INPUT_DEVICE_STORAGE_KEY = "fello.voice-input.device-id";
4590
+ function getInputCursor(input) {
4591
+ return input.selectionStart ?? input.value.length;
4592
+ }
4593
+ function VoiceInputButton({
4594
+ inputRef,
4595
+ disabled = false,
4596
+ className,
4597
+ maxDuration = DEFAULT_MAX_DURATION,
4598
+ ref
4599
+ }) {
4600
+ const { t } = useTranslation();
4601
+ const { toast } = useMessage();
4602
+ const asrApplyingRef = reactExports.useRef(false);
4603
+ const asrSegmentsRef = reactExports.useRef(/* @__PURE__ */ new Map());
4604
+ const asrTailRef = reactExports.useRef(0);
4605
+ const asrCurrentKeyRef = reactExports.useRef(null);
4606
+ const asrSequenceRef = reactExports.useRef(0);
4607
+ const freezeAsrSegments = reactExports.useCallback(() => {
4608
+ asrSegmentsRef.current.clear();
4609
+ asrCurrentKeyRef.current = null;
4610
+ const textarea = inputRef.current;
4611
+ if (textarea) asrTailRef.current = getInputCursor(textarea);
4612
+ }, [inputRef]);
4613
+ const applyAsrTranscript = reactExports.useCallback(
4614
+ (transcript) => {
4615
+ const textarea = inputRef.current;
4616
+ if (!textarea) return;
4617
+ const key = transcript.id ? `id:${transcript.id}` : transcript.index !== void 0 ? `index:${transcript.index}` : asrCurrentKeyRef.current ?? `stream:${asrSequenceRef.current++}`;
4618
+ let segment = asrSegmentsRef.current.get(key);
4619
+ if (!segment) {
4620
+ segment = { start: asrTailRef.current, length: 0 };
4621
+ asrSegmentsRef.current.set(key, segment);
4622
+ asrCurrentKeyRef.current = key;
4623
+ }
4624
+ textarea.focus();
4625
+ textarea.setSelectionRange(segment.start, segment.start + segment.length);
4626
+ asrApplyingRef.current = true;
4627
+ try {
4628
+ document.execCommand("insertText", false, transcript.text);
4629
+ } finally {
4630
+ asrApplyingRef.current = false;
4631
+ }
4632
+ textarea.ownerDocument.dispatchEvent(new Event("selectionchange"));
4633
+ segment.length = transcript.text.length;
4634
+ asrTailRef.current = segment.start + segment.length;
4635
+ if (transcript.isFinal) {
4636
+ asrSegmentsRef.current.delete(key);
4637
+ asrCurrentKeyRef.current = null;
4638
+ }
4639
+ },
4640
+ [inputRef]
4641
+ );
4642
+ const asr = useRealtimeAsr({
4643
+ onTranscript: applyAsrTranscript,
4644
+ onError: (message) => toast.error(message),
4645
+ onRecordingChange: (recording) => {
4646
+ if (!recording) freezeAsrSegments();
4647
+ }
4648
+ });
4649
+ const { start: startAsr, stop: stopAsr, refreshInputDevices } = asr;
4650
+ const handleStop = reactExports.useCallback(async () => {
4651
+ await stopAsr();
4652
+ }, [stopAsr]);
4653
+ reactExports.useImperativeHandle(
4654
+ ref,
4655
+ () => ({
4656
+ stop: handleStop
4657
+ }),
4658
+ [handleStop]
4659
+ );
4660
+ const handleStart = reactExports.useCallback(
4661
+ async (deviceId) => {
4662
+ const textarea = inputRef.current;
4663
+ if (!textarea) return;
4664
+ textarea.focus();
4665
+ const cursorPosition = getInputCursor(textarea);
4666
+ const before = textarea.value.slice(0, cursorPosition);
4667
+ if (before.length > 0 && !/\s$/.test(before)) {
4668
+ asrApplyingRef.current = true;
4669
+ try {
4670
+ document.execCommand("insertText", false, " ");
4671
+ } finally {
4672
+ asrApplyingRef.current = false;
4673
+ }
4674
+ }
4675
+ asrSegmentsRef.current.clear();
4676
+ asrCurrentKeyRef.current = null;
4677
+ asrTailRef.current = getInputCursor(textarea);
4678
+ await startAsr(deviceId);
4679
+ },
4680
+ [startAsr, inputRef]
4681
+ );
4682
+ const [savedDeviceId, setSavedDeviceId] = reactExports.useState(() => {
4683
+ try {
4684
+ return localStorage.getItem(VOICE_INPUT_DEVICE_STORAGE_KEY);
4685
+ } catch {
4686
+ return null;
4687
+ }
4688
+ });
4689
+ const [deviceMenuOpen, setDeviceMenuOpen] = reactExports.useState(false);
4690
+ const rememberDevice = reactExports.useCallback((deviceId) => {
4691
+ setSavedDeviceId(deviceId);
4692
+ try {
4693
+ localStorage.setItem(VOICE_INPUT_DEVICE_STORAGE_KEY, deviceId);
4694
+ } catch {
4695
+ }
4696
+ }, []);
4697
+ const handleSelectDevice = reactExports.useCallback(
4698
+ (deviceId) => {
4699
+ rememberDevice(deviceId);
4700
+ setDeviceMenuOpen(false);
4701
+ },
4702
+ [rememberDevice]
4703
+ );
4704
+ const handleMicClick = reactExports.useCallback(async () => {
4705
+ const devices = await refreshInputDevices();
4706
+ const hasSavedDevice = savedDeviceId != null && devices.some((device) => device.deviceId === savedDeviceId);
4707
+ if (hasSavedDevice) {
4708
+ await handleStart(savedDeviceId);
4709
+ } else {
4710
+ setDeviceMenuOpen(true);
4711
+ }
4712
+ }, [refreshInputDevices, handleStart, savedDeviceId]);
4713
+ const handleDeviceMenuChange = reactExports.useCallback(
4714
+ (open) => {
4715
+ setDeviceMenuOpen(open);
4716
+ if (open) void refreshInputDevices();
4717
+ },
4718
+ [refreshInputDevices]
4719
+ );
4720
+ reactExports.useEffect(() => {
4721
+ const textarea = inputRef.current;
4722
+ if (!textarea) return;
4723
+ const handleInput = () => {
4724
+ if (!asrApplyingRef.current && asr.recording) freezeAsrSegments();
4725
+ };
4726
+ textarea.addEventListener("input", handleInput);
4727
+ return () => textarea.removeEventListener("input", handleInput);
4728
+ }, [asr.recording, freezeAsrSegments, inputRef]);
4729
+ reactExports.useEffect(() => {
4730
+ if (disabled && asr.recording) void handleStop();
4731
+ }, [asr.recording, disabled, handleStop]);
4732
+ reactExports.useEffect(() => {
4733
+ if (!asr.recording || maxDuration <= 0 || !Number.isFinite(maxDuration)) return;
4734
+ const timer = setTimeout(() => void handleStop(), maxDuration);
4735
+ return () => clearTimeout(timer);
4736
+ }, [asr.recording, handleStop, maxDuration]);
4737
+ if (!asr.configured) return null;
4738
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
4739
+ "div",
4740
+ {
4741
+ className: cn$1(
4742
+ "relative inline-flex h-7 transition-[width] duration-300 ease-out",
4743
+ asr.recording ? "w-18" : "w-12.5",
4744
+ className
4745
+ ),
4746
+ children: [
4747
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4748
+ "div",
4749
+ {
4750
+ className: cn$1(
4751
+ "absolute inset-0 transition-[opacity,transform,visibility] duration-300 ease-out",
4752
+ asr.recording ? "visible scale-100 opacity-100" : "pointer-events-none invisible scale-90 opacity-0"
4753
+ ),
4754
+ "aria-hidden": !asr.recording,
4755
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
4756
+ Button,
4757
+ {
4758
+ variant: "default",
4759
+ size: "sm",
4760
+ className: "h-full w-full rounded-lg bg-muted hover:bg-input border border-input text-amber-300/50 hover:text-amber-200",
4761
+ onClick: () => void handleStop(),
4762
+ "aria-label": t("chatInput.stopVoiceInput", "Stop voice input"),
4763
+ "aria-pressed": "true",
4764
+ title: t("chatInput.stopVoiceInput", "Stop voice input"),
4765
+ children: [
4766
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Mic, { className: "size-3.5 shrink-0 animate-pulse" }),
4767
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4768
+ "span",
4769
+ {
4770
+ className: "flex h-4 flex-1 items-center justify-center gap-0.5 overflow-hidden",
4771
+ "aria-hidden": "true",
4772
+ children: ASR_WAVEFORM_BARS.map((scale, index) => /* @__PURE__ */ jsxRuntimeExports.jsx(
4773
+ "span",
4774
+ {
4775
+ className: "border-l rounded-full bg-amber-300 transition-[height] duration-75",
4776
+ style: {
4777
+ height: `${Math.max(2, Math.round(2 + asr.audioLevel * 16 * scale))}px`
4778
+ }
4779
+ },
4780
+ index
4781
+ ))
4782
+ }
4783
+ )
4784
+ ]
4785
+ }
4786
+ )
4787
+ }
4788
+ ),
4789
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4790
+ "div",
4791
+ {
4792
+ className: cn$1(
4793
+ "absolute inset-0 transition-[opacity,transform,visibility] duration-300 ease-out",
4794
+ asr.recording ? "pointer-events-none invisible scale-90 opacity-0" : "visible scale-100 opacity-100"
4795
+ ),
4796
+ "aria-hidden": asr.recording,
4797
+ children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DropdownMenu, { open: deviceMenuOpen, onOpenChange: handleDeviceMenuChange, children: [
4798
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-full items-stretch", children: [
4799
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4800
+ Button,
4801
+ {
4802
+ size: "sm",
4803
+ className: "h-full w-8 rounded-r-none border-r-0 bg-muted hover:bg-input border border-input text-amber-300/50 hover:text-amber-200",
4804
+ onClick: () => void handleMicClick(),
4805
+ disabled: disabled || !asr.configured,
4806
+ "aria-label": t("chatInput.voiceInput", "Voice input"),
4807
+ title: asr.configured ? t("chatInput.voiceInput", "Voice input") : t("chatInput.voiceInputNotConfigured", "Configure voice input in Settings"),
4808
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Mic, { className: "size-3.5" })
4809
+ }
4810
+ ),
4811
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4812
+ DropdownMenuTrigger,
4813
+ {
4814
+ render: /* @__PURE__ */ jsxRuntimeExports.jsx(
4815
+ Button,
4816
+ {
4817
+ size: "icon",
4818
+ className: "h-full w-4.5 rounded-l-none bg-muted hover:bg-input border border-input border-l-0 px-0 text-amber-300/50 hover:text-amber-200",
4819
+ disabled: disabled || !asr.configured,
4820
+ "aria-label": t("chatInput.selectVoiceInputDevice", "Select microphone"),
4821
+ title: t("chatInput.selectVoiceInputDevice", "Select microphone")
4822
+ }
4823
+ ),
4824
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "size-3" })
4825
+ }
4826
+ )
4827
+ ] }),
4828
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4829
+ DropdownMenuContent,
4830
+ {
4831
+ side: "top",
4832
+ align: "center",
4833
+ className: "w-auto! max-w-72 min-w-(--anchor-width)",
4834
+ children: asr.inputDevices.length > 0 ? asr.inputDevices.map((device) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
4835
+ DropdownMenuItem,
4836
+ {
4837
+ onClick: () => handleSelectDevice(device.deviceId),
4838
+ className: "gap-2",
4839
+ children: [
4840
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
4841
+ Check,
4842
+ {
4843
+ className: cn$1(
4844
+ "size-3 shrink-0",
4845
+ device.deviceId === savedDeviceId ? "opacity-100" : "opacity-0"
4846
+ )
4847
+ }
4848
+ ),
4849
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex min-w-0 flex-col gap-0.5 pr-3", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: device.label }) })
4850
+ ]
4851
+ },
4852
+ device.deviceId
4853
+ )) : /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuItem, { disabled: true, children: t("chatInput.noAudioInputDevices", "No audio input devices found") })
4854
+ }
4855
+ )
4856
+ ] })
4857
+ }
4858
+ )
4859
+ ]
4860
+ }
4861
+ );
4862
+ }
4317
4863
  function readFileAsBase64(file) {
4318
4864
  return new Promise((resolve, reject) => {
4319
4865
  const reader = new FileReader();
@@ -4447,10 +4993,9 @@ function ChatInput({ session }) {
4447
4993
  const promptCapabilities = initializeInfo?.agentCapabilities?.promptCapabilities;
4448
4994
  const supportsImage = promptCapabilities?.image ?? false;
4449
4995
  const supportsEmbedded = promptCapabilities?.embeddedContext ?? false;
4450
- const getTextarea = reactExports.useCallback(
4451
- () => containerRef.current?.querySelector("textarea"),
4452
- []
4453
- );
4996
+ const textareaRef = reactExports.useRef(null);
4997
+ const voiceInputRef = reactExports.useRef(null);
4998
+ const getTextarea = reactExports.useCallback(() => textareaRef.current, []);
4454
4999
  const insertTriggerChar = reactExports.useCallback(
4455
5000
  (char) => {
4456
5001
  const textarea = getTextarea();
@@ -4617,6 +5162,7 @@ function ChatInput({ session }) {
4617
5162
  [localInput, availableCommands]
4618
5163
  );
4619
5164
  const handleSubmit = reactExports.useCallback(async () => {
5165
+ await voiceInputRef.current?.stop();
4620
5166
  v$2();
4621
5167
  const state = useAppStore.getState().getSessionState(session.id);
4622
5168
  const currentAttachments = state.draftAttachments;
@@ -4911,7 +5457,10 @@ function ChatInput({ session }) {
4911
5457
  MentionsInput$1,
4912
5458
  {
4913
5459
  value: localInput,
4914
- onChange: (_e3, newValue) => setLocalInput(newValue),
5460
+ inputRef: textareaRef,
5461
+ onChange: (_e3, newValue) => {
5462
+ setLocalInput(newValue);
5463
+ },
4915
5464
  onBlur: handleBlur,
4916
5465
  onKeyDown: handleKeyDown,
4917
5466
  placeholder: disabled ? t("chatInput.placeholderDisabled") : t("chatInput.placeholderActive"),
@@ -5290,6 +5839,14 @@ function ChatInput({ session }) {
5290
5839
  }
5291
5840
  )
5292
5841
  ] }),
5842
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
5843
+ VoiceInputButton,
5844
+ {
5845
+ ref: voiceInputRef,
5846
+ inputRef: textareaRef,
5847
+ disabled
5848
+ }
5849
+ ),
5293
5850
  isStreaming ? /* @__PURE__ */ jsxRuntimeExports.jsx(
5294
5851
  Button,
5295
5852
  {
@@ -5522,13 +6079,12 @@ function AskUserOptions({
5522
6079
  const [highlightedIndex, setHighlightedIndex] = reactExports.useState(null);
5523
6080
  const [isDragOver, setIsDragOver] = reactExports.useState(false);
5524
6081
  const inputContainerRef = reactExports.useRef(null);
6082
+ const textareaRef = reactExports.useRef(null);
6083
+ const voiceInputRef = reactExports.useRef(null);
5525
6084
  const navigate = useNavigate();
5526
6085
  const snippets = useAppStore((s15) => s15.snippets);
5527
6086
  const fileInputRef = reactExports.useRef(null);
5528
- const getTextarea = reactExports.useCallback(
5529
- () => inputContainerRef.current?.querySelector("textarea"),
5530
- []
5531
- );
6087
+ const getTextarea = reactExports.useCallback(() => textareaRef.current, []);
5532
6088
  const insertTriggerChar = reactExports.useCallback(
5533
6089
  (char) => {
5534
6090
  const textarea = getTextarea();
@@ -5593,7 +6149,7 @@ function AskUserOptions({
5593
6149
  }
5594
6150
  if (paths.length === 0) return;
5595
6151
  void (async () => {
5596
- const textarea = inputContainerRef.current?.querySelector("textarea");
6152
+ const textarea = textareaRef.current;
5597
6153
  if (!textarea) return;
5598
6154
  textarea.focus();
5599
6155
  const tags = await Promise.all(
@@ -5679,7 +6235,8 @@ function AskUserOptions({
5679
6235
  window.addEventListener("keydown", handler);
5680
6236
  return () => window.removeEventListener("keydown", handler);
5681
6237
  }, [mode, hasOptions, request$1.options, handleSelectOption]);
5682
- const handleSubmitInput = () => {
6238
+ const handleSubmitInput = async () => {
6239
+ await voiceInputRef.current?.stop();
5683
6240
  const trimmed = resolveMentions(inputValue).trim();
5684
6241
  request.respondAskUser({
5685
6242
  sessionId: request$1.sessionId,
@@ -5693,12 +6250,12 @@ function AskUserOptions({
5693
6250
  if (e.nativeEvent.isComposing) return;
5694
6251
  if (e.key === "Enter" && !e.shiftKey) {
5695
6252
  e.preventDefault();
5696
- handleSubmitInput();
6253
+ void handleSubmitInput();
5697
6254
  }
5698
6255
  };
5699
6256
  reactExports.useEffect(() => {
5700
6257
  if (mode === "input") {
5701
- inputContainerRef.current?.querySelector("textarea")?.focus();
6258
+ textareaRef.current?.focus();
5702
6259
  }
5703
6260
  }, [mode]);
5704
6261
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
@@ -5767,6 +6324,7 @@ function AskUserOptions({
5767
6324
  MentionsInput$1,
5768
6325
  {
5769
6326
  value: inputValue,
6327
+ inputRef: textareaRef,
5770
6328
  onChange: (_e3, newValue) => setInputValue(newValue),
5771
6329
  onKeyDown: handleKeyDown,
5772
6330
  placeholder: t("askUser.inputPlaceholder", "Type your response... (Enter to send)"),
@@ -5907,16 +6465,19 @@ function AskUserOptions({
5907
6465
  )) : /* @__PURE__ */ jsxRuntimeExports.jsx(DropdownMenuItem, { onClick: () => navigate("/settings/snippets"), children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-muted-foreground", children: t("chatInput.snippetsEmpty", "No snippets. Click to add in Settings.") }) }) })
5908
6466
  ] })
5909
6467
  ] }),
5910
- /* @__PURE__ */ jsxRuntimeExports.jsx(
5911
- Button,
5912
- {
5913
- size: "icon",
5914
- className: "size-7 rounded-lg",
5915
- onClick: handleSubmitInput,
5916
- "aria-label": t("askUser.submit", "Submit"),
5917
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowUp, { className: "size-3.5" })
5918
- }
5919
- )
6468
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
6469
+ /* @__PURE__ */ jsxRuntimeExports.jsx(VoiceInputButton, { ref: voiceInputRef, inputRef: textareaRef }),
6470
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
6471
+ Button,
6472
+ {
6473
+ size: "icon",
6474
+ className: "size-7 rounded-lg",
6475
+ onClick: handleSubmitInput,
6476
+ "aria-label": t("askUser.submit", "Submit"),
6477
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowUp, { className: "size-3.5" })
6478
+ }
6479
+ )
6480
+ ] })
5920
6481
  ] })
5921
6482
  ]
5922
6483
  }
@@ -6128,7 +6689,7 @@ function useFile(projectId, file, options = {}) {
6128
6689
  };
6129
6690
  }
6130
6691
  const CodeEditor = reactExports.lazy(
6131
- () => __vitePreload(() => import("./code-editor-SuOcN-5B.js"), true ? __vite__mapDeps([0,1,2,3,4]) : void 0, import.meta.url).then((m) => ({ default: m.CodeEditor }))
6692
+ () => __vitePreload(() => import("./code-editor-CEXlC4aV.js"), true ? __vite__mapDeps([0,1,2,3,4]) : void 0, import.meta.url).then((m) => ({ default: m.CodeEditor }))
6132
6693
  );
6133
6694
  const MAX_EDIT_SIZE = 1024 * 1024;
6134
6695
  const EditPanel = reactExports.forwardRef(function EditPanel2({ projectId, filePath, content, loading = false, onCancel, onSaved }, ref) {