@pheem49/mint 1.14.0 → 1.15.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 (585) hide show
  1. package/CLAUDE.md +1 -1
  2. package/Cargo.lock +291 -11
  3. package/Cargo.toml +1 -1
  4. package/README.md +71 -9
  5. package/ROADMAP.md +30 -0
  6. package/Release_Note.md +579 -465
  7. package/crates/mint-cli/Cargo.toml +3 -1
  8. package/crates/mint-cli/src/agent/approval_prompts.rs +16 -3
  9. package/crates/mint-cli/src/agent/live_status.rs +367 -118
  10. package/crates/mint-cli/src/agent/markdown_render.rs +601 -61
  11. package/crates/mint-cli/src/agent.rs +452 -215
  12. package/crates/mint-cli/src/commands/agent.rs +16 -21
  13. package/crates/mint-cli/src/commands/eval.rs +9 -5
  14. package/crates/mint-cli/src/commands/git.rs +204 -0
  15. package/crates/mint-cli/src/commands/integrations.rs +28 -0
  16. package/crates/mint-cli/src/commands/knowledge.rs +1 -0
  17. package/crates/mint-cli/src/commands/mod.rs +37 -2
  18. package/crates/mint-cli/src/commands/tailnet_web.rs +235 -0
  19. package/crates/mint-cli/src/image.rs +26 -3
  20. package/crates/mint-cli/src/interactive/chat_tui.rs +4742 -0
  21. package/crates/mint-cli/src/interactive/command_ui.rs +477 -0
  22. package/crates/mint-cli/src/interactive/format.rs +8 -0
  23. package/crates/mint-cli/src/interactive/input_box.rs +38 -2
  24. package/crates/mint-cli/src/interactive/picker.rs +180 -37
  25. package/crates/mint-cli/src/interactive/resume_picker.rs +686 -0
  26. package/crates/mint-cli/src/interactive/slash_commands.rs +868 -450
  27. package/crates/mint-cli/src/interactive/thought_viewer.rs +286 -0
  28. package/crates/mint-cli/src/interactive.rs +400 -136
  29. package/crates/mint-cli/src/main.rs +84 -23
  30. package/crates/mint-cli/src/markdown.rs +12 -5
  31. package/crates/mint-cli/src/onboard.rs +32 -30
  32. package/crates/mint-cli/src/plugins_cli.rs +8 -5
  33. package/crates/mint-cli/src/setup.rs +10 -8
  34. package/crates/mint-cli/src/terminal_theme.rs +187 -0
  35. package/crates/mint-cli/src/updater.rs +56 -21
  36. package/crates/mint-core/src/agent/agent_loop.rs +1 -0
  37. package/crates/mint-core/src/agent/chat.rs +843 -177
  38. package/crates/mint-core/src/agent/code_tools.rs +83 -2
  39. package/crates/mint-core/src/agent/memory.rs +658 -20
  40. package/crates/mint-core/src/agent/skills.rs +1 -1
  41. package/crates/mint-core/src/api_server/routes/chat.rs +31 -5
  42. package/crates/mint-core/src/api_server/routes/linked_folders.rs +118 -3
  43. package/crates/mint-core/src/api_server/routes/misc.rs +10 -14
  44. package/crates/mint-core/src/api_server/routes/sessions.rs +44 -0
  45. package/crates/mint-core/src/api_server.rs +22 -3
  46. package/crates/mint-core/src/avatar_bridge.rs +2 -0
  47. package/crates/mint-core/src/browser/cdp.rs +74 -83
  48. package/crates/mint-core/src/browser/evidence.rs +260 -0
  49. package/crates/mint-core/src/browser/input.rs +1 -1
  50. package/crates/mint-core/src/browser/interact.rs +98 -124
  51. package/crates/mint-core/src/browser/lifecycle.rs +75 -4
  52. package/crates/mint-core/src/browser/mod.rs +16 -2
  53. package/crates/mint-core/src/browser/navigate.rs +27 -19
  54. package/crates/mint-core/src/browser/observe.js +40 -0
  55. package/crates/mint-core/src/browser/session.rs +1558 -0
  56. package/crates/mint-core/src/git/branches.rs +348 -0
  57. package/crates/mint-core/src/git/checkpoint.rs +40 -0
  58. package/crates/mint-core/src/git/diff.rs +206 -0
  59. package/crates/mint-core/src/git/mod.rs +10 -2
  60. package/crates/mint-core/src/integrations/channels.rs +1 -0
  61. package/crates/mint-core/src/lib.rs +22 -14
  62. package/crates/mint-core/src/live_sync.rs +28 -9
  63. package/crates/mint-core/src/media/auto_shorts.rs +1 -0
  64. package/crates/mint-core/src/media/gemini_live.rs +12 -1
  65. package/crates/mint-core/src/media/mic_transcribe.rs +1 -0
  66. package/crates/mint-core/src/media/subtitle.rs +1 -0
  67. package/crates/mint-core/src/orchestration/context_render.rs +1 -0
  68. package/crates/mint-core/src/orchestration/memory_skill.rs +6 -1
  69. package/crates/mint-core/src/orchestration/mod.rs +1024 -271
  70. package/crates/mint-core/src/orchestration/tools/browser.rs +16 -139
  71. package/crates/mint-core/src/orchestration/tools/misc.rs +2 -1
  72. package/crates/mint-core/src/orchestration/tools/web.rs +1 -1
  73. package/crates/mint-core/src/prompts/agent.rs +58 -29
  74. package/crates/mint-core/src/prompts/chat.rs +1 -1
  75. package/crates/mint-core/src/prompts/persona.rs +1 -1
  76. package/crates/mint-core/src/prompts/tool_catalog.rs +93 -25
  77. package/crates/mint-core/src/search/linked_folders/index.rs +732 -0
  78. package/crates/mint-core/src/search/linked_folders.rs +391 -130
  79. package/crates/mint-core/src/slash/mod.rs +470 -22
  80. package/crates/mint-core/src/slash/model_fetcher.rs +12 -3
  81. package/crates/mint-core/src/slash/models.rs +66 -10
  82. package/crates/mint-core/src/system/config.rs +230 -0
  83. package/crates/mint-core/src/system/workspace.rs +228 -0
  84. package/crates/mint-core/src/system.rs +1 -0
  85. package/crates/mint-core/tests/memory_persistence.rs +39 -0
  86. package/mint-presentation-demo.mp4 +0 -0
  87. package/out/web/assets/CliSessionsView-BxUVWEEL.js +1 -0
  88. package/out/web/assets/CliSessionsView-CBDTXuQv.css +1 -0
  89. package/out/web/assets/CodeReviewPage-DkMgfcos.css +1 -0
  90. package/out/web/assets/CodeReviewPage-jKlmLJwT.js +3 -0
  91. package/out/web/assets/CommandPalette-DnwPA5hy.js +1 -0
  92. package/out/web/assets/ImageStudioPanel-BR1XFwhR.js +1 -0
  93. package/out/web/assets/ImageStudioPanel-D0lnhQV5.css +1 -0
  94. package/out/web/assets/LinkedFoldersView-bi-CWQ-I.js +1 -0
  95. package/out/web/assets/McpRegistryPicker-D5tEFnyq.js +1 -0
  96. package/out/web/assets/McpServersView-BGG1dhFM.js +1 -0
  97. package/out/web/assets/MintDashboard-BIglDEWX.js +20 -0
  98. package/out/web/assets/MintDashboard-DSMywSgs.css +1 -0
  99. package/out/web/assets/ModelPanel-CbJ1PFoZ.js +1 -0
  100. package/out/web/assets/PicturesLibrary-CQP0fLP1.css +1 -0
  101. package/out/web/assets/PicturesLibrary-DoYN7T1p.js +1 -0
  102. package/out/web/assets/PluginsView-CU1HWXGk.js +1 -0
  103. package/out/web/assets/ScheduledTasksView-Bnl36y2N.js +1 -0
  104. package/out/web/assets/SettingsWindow-DhWLAn9T.css +1 -0
  105. package/out/web/assets/SettingsWindow-Dw8L01pw.js +2 -0
  106. package/out/web/assets/SkillsView-cnl8aY5p.js +2 -0
  107. package/out/web/assets/ToolSurfacePage-CgsQw6l5.css +1 -0
  108. package/out/web/assets/ToolSurfacePage-Cz2VJAPZ.js +37 -0
  109. package/out/web/assets/VeoStudioPanel-D4JnERWR.js +4 -0
  110. package/out/web/assets/VeoStudioPanel-DOj7_WR3.css +1 -0
  111. package/out/web/assets/WorkspacePanel-CbJ1PFoZ.js +1 -0
  112. package/out/web/assets/{abnfDiagram-VCTEODGH-DAOBA7ZG.js → abnfDiagram-VCTEODGH-ByMyfanq.js} +1 -1
  113. package/out/web/assets/{architecture-7GRP2DOG-CgSwQOPQ.js → architecture-7GRP2DOG-CLq2kEOB.js} +1 -1
  114. package/out/web/assets/{architectureDiagram-5GKGNRK7-CYp3yupP.js → architectureDiagram-5GKGNRK7-6PoVSmNG.js} +1 -1
  115. package/out/web/assets/{blockDiagram-NRAW4CY4-CyWybDWr.js → blockDiagram-NRAW4CY4-cKw9mAKi.js} +1 -1
  116. package/out/web/assets/{c4Diagram-UCG6FXSJ-BvY3U709.js → c4Diagram-UCG6FXSJ-Cqy8N5Ge.js} +1 -1
  117. package/out/web/assets/{chunk-75Z2AOVW-TLXCoZYv.js → chunk-75Z2AOVW-3qybijF5.js} +1 -1
  118. package/out/web/assets/chunk-CKBBP62Z-cIrXq6jN.js +2 -0
  119. package/out/web/assets/{chunk-CLGD4ZFX-xjsKtNS7.js → chunk-CLGD4ZFX-CndDQkww.js} +1 -1
  120. package/out/web/assets/chunk-DSNCTWBM-Cc4NxvgD.js +2 -0
  121. package/out/web/assets/chunk-DU6HZSFF-drzh6GsU.js +128 -0
  122. package/out/web/assets/{chunk-F27PBJKO-BFpgF55A.js → chunk-F27PBJKO-FiY35l4v.js} +1 -1
  123. package/out/web/assets/{chunk-G27WJ6UU-DfF7qW-C.js → chunk-G27WJ6UU-Bjt9Il4A.js} +1 -1
  124. package/out/web/assets/{chunk-GMAD6QVW-C-558kh_.js → chunk-GMAD6QVW-Bppi3Ctd.js} +1 -1
  125. package/out/web/assets/{chunk-JQ64N6SF-wJmeGKAw.js → chunk-JQ64N6SF-DGg5kcEV.js} +1 -1
  126. package/out/web/assets/{chunk-LCL6LL3I-C1wHD8Ie.js → chunk-LCL6LL3I-CCYcjd7p.js} +1 -1
  127. package/out/web/assets/{chunk-OBVCFTLP-BsRTPBqs.js → chunk-OBVCFTLP-DJeNil5M.js} +1 -1
  128. package/out/web/assets/{chunk-P2QGCYS3-HZIiM7Ni.js → chunk-P2QGCYS3-lRzkRjBB.js} +1 -1
  129. package/out/web/assets/{chunk-POPQ4Y6H-Dk9wvVb0.js → chunk-POPQ4Y6H-DouASMBW.js} +1 -1
  130. package/out/web/assets/{chunk-PWAF6VOD-BmjYLNbq.js → chunk-PWAF6VOD-DMmD1vVf.js} +1 -1
  131. package/out/web/assets/{chunk-R7TYR2AO-CaHIf-lK.js → chunk-R7TYR2AO-CYLA5UC5.js} +1 -1
  132. package/out/web/assets/{chunk-RHFEMEQ7-_T561hOU.js → chunk-RHFEMEQ7-BiXwEcUT.js} +1 -1
  133. package/out/web/assets/{chunk-SVP7TREG-CM-GGYoY.js → chunk-SVP7TREG-BV-zPslF.js} +1 -1
  134. package/out/web/assets/{chunk-TEH6E4GO-K2A8Vg2C.js → chunk-TEH6E4GO-B2RGEohZ.js} +1 -1
  135. package/out/web/assets/classDiagram-DTDB5LWJ-Dq0smRWk.js +1 -0
  136. package/out/web/assets/classDiagram-v2-JRS7N3AN-Dq0smRWk.js +1 -0
  137. package/out/web/assets/config-C-ZFtipU.css +1 -0
  138. package/out/web/assets/config-eEDngJXO.js +1 -0
  139. package/out/web/assets/core-hQ2VA9Ti.js +1 -0
  140. package/out/web/assets/{cynefin-OW5HDTMX-ClzaB6cc.js → cynefin-OW5HDTMX-Cas4csHM.js} +1 -1
  141. package/out/web/assets/{cynefinDiagram-5FMLGOSQ-D_JzZBzf.js → cynefinDiagram-5FMLGOSQ-Bbpj66Y3.js} +1 -1
  142. package/out/web/assets/{dagre-3AP2YEHR-BDuUeMHj.js → dagre-3AP2YEHR-B0-2RDEd.js} +1 -1
  143. package/out/web/assets/{diagram-S7CK7UJ4-DgtcfE8P.js → diagram-S7CK7UJ4-BdzEjUyH.js} +1 -1
  144. package/out/web/assets/{diagram-UQ7AKVKN-DTLoEYti.js → diagram-UQ7AKVKN-CJDwyPxF.js} +1 -1
  145. package/out/web/assets/{diagram-VSXAHHWV-ChGl9pXz.js → diagram-VSXAHHWV-BxaG1r_B.js} +1 -1
  146. package/out/web/assets/{diagram-VX7I27RA-Be8DWz0S.js → diagram-VX7I27RA-BMmUqm8f.js} +1 -1
  147. package/out/web/assets/{diagram-Z3DM3KII-BMXjRTOF.js → diagram-Z3DM3KII-CFtd03eE.js} +1 -1
  148. package/out/web/assets/dist-js-Bf2bhoku.js +1 -0
  149. package/out/web/assets/{ebnfDiagram-PWID7BFC-8Q9pl1CJ.js → ebnfDiagram-PWID7BFC-DwAen1hO.js} +1 -1
  150. package/out/web/assets/{erDiagram-SSCWMZ5O-DjH8Lnkn.js → erDiagram-SSCWMZ5O-BCZSHACj.js} +1 -1
  151. package/out/web/assets/event-ChBVpRy0.js +1 -0
  152. package/out/web/assets/{eventmodeling-NTZA5JFV-BKUH_DOp.js → eventmodeling-NTZA5JFV-XHStE4E_.js} +1 -1
  153. package/out/web/assets/fira-code-latin-600-normal-BmSSHshu.woff +0 -0
  154. package/out/web/assets/fira-code-latin-600-normal-CvYZpPHg.woff2 +0 -0
  155. package/out/web/assets/fira-code-symbols2-600-normal-Dvq6IQE5.woff +0 -0
  156. package/out/web/assets/flowDiagram-A5DVABFB-BLg7nEcd.js +1 -0
  157. package/out/web/assets/{ganttDiagram-EL5Y4UJY-D7fZKJNM.js → ganttDiagram-EL5Y4UJY-BAEu1Cql.js} +1 -1
  158. package/out/web/assets/{gitGraph-4MIJSDKK-BypWaaBU.js → gitGraph-4MIJSDKK-r32Vyper.js} +1 -1
  159. package/out/web/assets/{gitGraphDiagram-WWUBYQGX-DWiw_3bq.js → gitGraphDiagram-WWUBYQGX-z9o9qt6V.js} +1 -1
  160. package/out/web/assets/index-Btsf4L8M.css +1 -0
  161. package/out/web/assets/index-D8D9MeRA.js +11 -0
  162. package/out/web/assets/{info-A6RAGUB7-KkAUxT4j.js → info-A6RAGUB7-BvLaC2cw.js} +1 -1
  163. package/out/web/assets/{infoDiagram-RXCK75RN-BNb6E48y.js → infoDiagram-RXCK75RN-Be6WAXXw.js} +1 -1
  164. package/out/web/assets/{ishikawaDiagram-5VMMS53U-Caa-JoAK.js → ishikawaDiagram-5VMMS53U-DZjoHJHC.js} +1 -1
  165. package/out/web/assets/{journeyDiagram-EYS64GPL-DOrmFGz6.js → journeyDiagram-EYS64GPL-CtVkjkGm.js} +1 -1
  166. package/out/web/assets/{kanban-definition-3QL26DDD-BOWCYcK0.js → kanban-definition-3QL26DDD-CW5FMv1w.js} +1 -1
  167. package/out/web/assets/lucide-react-Ip3L6Jtn.js +1 -0
  168. package/out/web/assets/markdown-BSeeUbJH.js +38 -0
  169. package/out/web/assets/{mermaid-parser.core-BQqjCkS_.js → mermaid-parser.core-aUgCqsZ5.js} +3 -3
  170. package/out/web/assets/mermaid.core-D57sEiSL.js +11 -0
  171. package/out/web/assets/{mindmap-definition-FBJOCRG2-jTceWpr0.js → mindmap-definition-FBJOCRG2-DAmSpM3a.js} +1 -1
  172. package/out/web/assets/modelManager-tMVmJVAW.js +2 -0
  173. package/out/web/assets/oauthManager-9jxicDWJ.js +1 -0
  174. package/out/web/assets/{packet-AYTQ26CC-CJ5RXgol.js → packet-AYTQ26CC-DJ27iIoJ.js} +1 -1
  175. package/out/web/assets/{pegDiagram-XKGWAZYB-y8wMtd0y.js → pegDiagram-XKGWAZYB-Bj3ii-gS.js} +1 -1
  176. package/out/web/assets/{pie-WAS4IAKB-72fTBbl4.js → pie-WAS4IAKB-DG5mCUbc.js} +1 -1
  177. package/out/web/assets/{pieDiagram-E7YTZNPT-e0O02qWq.js → pieDiagram-E7YTZNPT-BrJLPnDA.js} +1 -1
  178. package/out/web/assets/prompt-latin-700-normal-BfbftDSq.woff +0 -0
  179. package/out/web/assets/prompt-latin-700-normal-I2gc831J.woff2 +0 -0
  180. package/out/web/assets/prompt-thai-700-normal-Cb5ilR-c.woff +0 -0
  181. package/out/web/assets/prompt-thai-700-normal-Cg4aQ0Nn.woff2 +0 -0
  182. package/out/web/assets/{quadrantDiagram-AXDQQJYC-C9phYLom.js → quadrantDiagram-AXDQQJYC-3x_TmF3j.js} +1 -1
  183. package/out/web/assets/{radar-RG4KPBEZ-BAU2hzUT.js → radar-RG4KPBEZ-CrXaTTuV.js} +1 -1
  184. package/out/web/assets/{railroad-74A4TZTK-B0bCAVHC.js → railroad-74A4TZTK-BpqMH9BE.js} +1 -1
  185. package/out/web/assets/{railroad-abnf-HS5TGJTU-WhxO7ndE.js → railroad-abnf-HS5TGJTU-DHI0uLlV.js} +1 -1
  186. package/out/web/assets/{railroad-ebnf-LZEXJU2U-BkA0m7-F.js → railroad-ebnf-LZEXJU2U-CQCb316y.js} +1 -1
  187. package/out/web/assets/{railroad-peg-WCYAUIDC-BsVpHIaj.js → railroad-peg-WCYAUIDC-Ph1giKkH.js} +1 -1
  188. package/out/web/assets/{railroadDiagram-O6MQD6OU-CyOLN65Q.js → railroadDiagram-O6MQD6OU-BRq6wIxx.js} +1 -1
  189. package/out/web/assets/{requirementDiagram-EFPCY7ZU-DQXJ7Dud.js → requirementDiagram-EFPCY7ZU-DIJj6G1g.js} +1 -1
  190. package/out/web/assets/{sankeyDiagram-P5KCCOFB-B2XLyIIc.js → sankeyDiagram-P5KCCOFB-DZajSryq.js} +1 -1
  191. package/out/web/assets/{sequenceDiagram-WJ2MYXX4-DGQY4wwm.js → sequenceDiagram-WJ2MYXX4-DxJCWyZS.js} +1 -1
  192. package/out/web/assets/{stateDiagram-HBIQ2CUA-DHZpDwNy.js → stateDiagram-HBIQ2CUA-k6voi8Vf.js} +1 -1
  193. package/out/web/assets/stateDiagram-v2-4QOOHH4V-DeEc0lGZ.js +1 -0
  194. package/out/web/assets/studio-B1mk40wD.js +1 -0
  195. package/out/web/assets/{swimlanes-XN3QIQJK-Bn_jcZz-.js → swimlanes-XN3QIQJK-igYhTjXB.js} +1 -1
  196. package/out/web/assets/swimlanesDiagram-VK2B7HYN-DpVik9v7.js +8 -0
  197. package/out/web/assets/{timeline-definition-24CTP7MA-CdTERuJZ.js → timeline-definition-24CTP7MA-Dke2p93p.js} +1 -1
  198. package/out/web/assets/{treeView-Q6P3EWNA-TKBKQG6R.js → treeView-Q6P3EWNA-hNELnXUs.js} +1 -1
  199. package/out/web/assets/{treemap-WGGIJYW6-BP7gQoiC.js → treemap-WGGIJYW6-D2B6wDsx.js} +1 -1
  200. package/out/web/assets/{vennDiagram-4TSXK5OY-BHUmxDuK.js → vennDiagram-4TSXK5OY-CDkW7rUP.js} +1 -1
  201. package/out/web/assets/{wardley-WFR3VGLG-9bct5AAN.js → wardley-WFR3VGLG-BECdXETi.js} +1 -1
  202. package/out/web/assets/{wardleyDiagram-VM6X3IG4-BfJwDDso.js → wardleyDiagram-VM6X3IG4-B5BycpQ4.js} +1 -1
  203. package/out/web/assets/window-5qYXKoW7.js +1 -0
  204. package/out/web/assets/{xychartDiagram-S5SC5T6Z-Dqd9Mvpo.js → xychartDiagram-S5SC5T6Z-CtJS3b--.js} +1 -1
  205. package/out/web/index-web.html +3 -4
  206. package/out/web/index.html +3 -4
  207. package/package.json +17 -6
  208. package/skills-lock.json +36 -0
  209. package/slash-commands.json +9 -0
  210. package/src/renderer/index-web.html +1 -0
  211. package/src/renderer/index.html +1 -0
  212. package/src/renderer/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  213. package/src/renderer/shared/agentProgress.ts +168 -3
  214. package/src/renderer/shared/components/AgentActivityDrawer.tsx +6 -6
  215. package/src/renderer/shared/components/AgentActivityTable.tsx +192 -132
  216. package/src/renderer/shared/components/ArtifactPreviewPanel.tsx +4 -4
  217. package/src/renderer/shared/components/AuthGate.tsx +4 -9
  218. package/src/renderer/shared/components/CalculationCard.tsx +41 -15
  219. package/src/renderer/shared/components/ChatMessageItem.tsx +20 -21
  220. package/src/renderer/shared/components/ChatPanel.tsx +432 -193
  221. package/src/renderer/shared/components/ChunkErrorBoundary.tsx +198 -49
  222. package/src/renderer/shared/components/CliSessionsView.tsx +495 -0
  223. package/src/renderer/shared/components/CodeReviewPage.tsx +565 -0
  224. package/src/renderer/shared/components/CommandPalette.tsx +8 -8
  225. package/src/renderer/shared/components/DashboardSidebar.tsx +862 -125
  226. package/src/renderer/shared/components/DesktopTitlebar.tsx +345 -0
  227. package/src/renderer/shared/components/DiffReviewModal.tsx +3 -3
  228. package/src/renderer/shared/components/GitBranchSelector.tsx +442 -0
  229. package/src/renderer/shared/components/ImageGenCard.tsx +31 -12
  230. package/src/renderer/shared/components/ImageSearchCard.tsx +59 -38
  231. package/src/renderer/shared/components/ImageStudioPanel.tsx +40 -41
  232. package/src/renderer/shared/components/InlineThoughtNote.tsx +27 -0
  233. package/src/renderer/shared/components/LinkedFoldersView.tsx +365 -46
  234. package/src/renderer/shared/components/McpRegistryPicker.tsx +1 -1
  235. package/src/renderer/shared/components/McpServersView.tsx +24 -22
  236. package/src/renderer/shared/components/MermaidCard.tsx +14 -8
  237. package/src/renderer/shared/components/MintDashboard.tsx +1141 -508
  238. package/src/renderer/shared/components/ModelSelectorPopover.tsx +535 -214
  239. package/src/renderer/shared/components/PlanChecklistWidget.tsx +1 -1
  240. package/src/renderer/shared/components/PluginsView.tsx +1 -1
  241. package/src/renderer/shared/components/RewindModal.tsx +6 -6
  242. package/src/renderer/shared/components/RunSummaryDashboard.tsx +3 -3
  243. package/src/renderer/shared/components/ScheduledTasksView.tsx +4 -4
  244. package/src/renderer/shared/components/ScreenCaptureDialog.css +221 -0
  245. package/src/renderer/shared/components/ScreenCaptureDialog.tsx +199 -0
  246. package/src/renderer/shared/components/Settings/AgentsTab.tsx +34 -39
  247. package/src/renderer/shared/components/Settings/AudioTab.tsx +8 -8
  248. package/src/renderer/shared/components/Settings/AutomationTab.tsx +8 -58
  249. package/src/renderer/shared/components/Settings/AvatarCropModal.tsx +368 -0
  250. package/src/renderer/shared/components/Settings/GeneralTab.tsx +335 -81
  251. package/src/renderer/shared/components/Settings/MemoryTab.tsx +3 -3
  252. package/src/renderer/shared/components/Settings/PluginsTab.tsx +20 -12
  253. package/src/renderer/shared/components/Settings/ProfileTab.tsx +29 -5
  254. package/src/renderer/shared/components/Settings/SearchableModelCombobox.tsx +411 -0
  255. package/src/renderer/shared/components/Settings/ThemeTab.tsx +401 -158
  256. package/src/renderer/shared/components/SkillsView.tsx +41 -16
  257. package/src/renderer/shared/components/SlashSuggestions.tsx +3 -2
  258. package/src/renderer/shared/components/SourcesBlock.tsx +44 -32
  259. package/src/renderer/shared/components/StockCard.tsx +58 -24
  260. package/src/renderer/shared/components/SubagentDagView.tsx +4 -4
  261. package/src/renderer/shared/components/TerminalDock.tsx +241 -0
  262. package/src/renderer/shared/components/ThinkingBlock.tsx +14 -8
  263. package/src/renderer/shared/components/ToolSurfacePage.tsx +520 -0
  264. package/src/renderer/shared/components/UiFeatureCard.tsx +267 -0
  265. package/src/renderer/shared/components/UiGridCard.tsx +188 -0
  266. package/src/renderer/shared/components/UiMockupWidget.tsx +149 -0
  267. package/src/renderer/shared/components/VeoStudioPanel.tsx +13 -29
  268. package/src/renderer/shared/components/WeatherCard.tsx +3 -3
  269. package/src/renderer/shared/components/WorkspaceContextPopover.tsx +133 -0
  270. package/src/renderer/shared/components/WorkspaceSelector.tsx +149 -0
  271. package/src/renderer/shared/constants/config.ts +28 -3
  272. package/src/renderer/shared/constants/models.ts +189 -2
  273. package/src/renderer/shared/conversation/coordinator.test.ts +27 -0
  274. package/src/renderer/shared/conversation/coordinator.ts +82 -0
  275. package/src/renderer/shared/conversation/syncView.test.ts +46 -0
  276. package/src/renderer/shared/conversation/syncView.ts +43 -0
  277. package/src/renderer/shared/conversation/useConversationCoordinator.ts +106 -0
  278. package/src/renderer/shared/css/agent-observability.css +35 -3
  279. package/src/renderer/shared/css/auth-gate.css +2 -2
  280. package/src/renderer/shared/css/chat-ui-cards.css +495 -0
  281. package/src/renderer/shared/css/code-review.css +823 -0
  282. package/src/renderer/shared/css/code-sessions.css +452 -0
  283. package/src/renderer/shared/css/file-changes.css +132 -0
  284. package/src/renderer/shared/css/image-studio.css +16 -16
  285. package/src/renderer/shared/css/management-views.css +277 -27
  286. package/src/renderer/shared/css/model-selector.css +442 -42
  287. package/src/renderer/shared/css/settings/agents.css +1 -1
  288. package/src/renderer/shared/css/settings/automation.css +13 -13
  289. package/src/renderer/shared/css/settings/general.css +526 -5
  290. package/src/renderer/shared/css/settings/plugins.css +5 -5
  291. package/src/renderer/shared/css/settings/profile.css +331 -1
  292. package/src/renderer/shared/css/settings/theme.css +651 -3
  293. package/src/renderer/shared/css/veo-studio.css +16 -15
  294. package/src/renderer/shared/fonts.ts +19 -37
  295. package/src/renderer/shared/platform.test.ts +34 -0
  296. package/src/renderer/shared/platform.ts +173 -6
  297. package/src/renderer/shared/theme/themeManager.ts +144 -0
  298. package/src/renderer/shared/theme/themes.ts +116 -0
  299. package/src/renderer/shared/theme/tokens.css +318 -0
  300. package/src/renderer/shared/types.ts +82 -1
  301. package/src/renderer/shared/utils/agentActivity.ts +126 -5
  302. package/src/renderer/shared/utils/cardJson.test.ts +35 -0
  303. package/src/renderer/shared/utils/cardJson.ts +30 -0
  304. package/src/renderer/shared/utils/fileIcons.ts +1 -1
  305. package/src/renderer/shared/utils/markdown.tsx +329 -80
  306. package/src/renderer/shared/utils/markdown.webImages.test.tsx +40 -0
  307. package/src/renderer/shared/utils/providers.ts +8 -3
  308. package/src/renderer/shared/utils/screenCapture.ts +43 -0
  309. package/src/renderer/shared/utils/slashCommandProcessor.ts +4 -1
  310. package/src/renderer/shared/utils/ui.ts +4 -64
  311. package/src/renderer/src/App.tsx +7 -0
  312. package/src/renderer/src/components/BrowserShell.tsx +108 -0
  313. package/src/renderer/src/components/BrowserSuggestionsPopup.tsx +91 -0
  314. package/src/renderer/src/components/Live2DStage.tsx +32 -9
  315. package/src/renderer/src/components/MintDashboard.tsx +4 -2
  316. package/src/renderer/src/components/ModelPanel.tsx +2 -1
  317. package/src/renderer/src/components/PicturesLibrary.tsx +3 -2
  318. package/src/renderer/src/components/ScreenPicker.css +190 -0
  319. package/src/renderer/src/components/ScreenPicker.tsx +185 -540
  320. package/src/renderer/src/components/SettingsWindow.tsx +40 -2
  321. package/src/renderer/src/components/SpotlightWindow.tsx +1 -0
  322. package/src/renderer/src/components/WidgetWindow.tsx +27 -3
  323. package/src/renderer/src/components/WorkspacePanel.tsx +61 -43
  324. package/src/renderer/src/components/browser-shell.css +185 -0
  325. package/src/renderer/src/components/browser-suggestions-popup.css +55 -0
  326. package/src/renderer/src/components/liveTranslateFrames.test.ts +23 -0
  327. package/src/renderer/src/components/liveTranslateFrames.ts +34 -0
  328. package/src/renderer/src/css/app-shell.css +394 -113
  329. package/src/renderer/src/css/chat.css +1926 -380
  330. package/src/renderer/src/css/dashboard.css +11 -0
  331. package/src/renderer/src/css/desktop-tools.css +730 -0
  332. package/src/renderer/src/css/misc.css +19 -22
  333. package/src/renderer/src/css/model.css +49 -48
  334. package/src/renderer/src/css/pictures.css +144 -136
  335. package/src/renderer/src/css/settings/base.css +357 -123
  336. package/src/renderer/src/css/sidebar-workspace.css +930 -291
  337. package/src/renderer/src/css/spotlight.css +15 -26
  338. package/src/renderer/src/css/tool-surfaces.css +728 -0
  339. package/src/renderer/src/css/widget.css +35 -7
  340. package/src/renderer/src/env.d.ts +3 -0
  341. package/src/renderer/src/hooks/useProviderModels.ts +2 -9
  342. package/src/renderer/src/index.css +53 -46
  343. package/src/renderer/src/main.tsx +11 -0
  344. package/src/renderer/src/tauri.ts +201 -30
  345. package/src/renderer/src-web/App.tsx +40 -0
  346. package/src/renderer/src-web/components/MintDashboard.tsx +4 -2
  347. package/src/renderer/src-web/components/PicturesLibrary.tsx +3 -2
  348. package/src/renderer/src-web/components/PullToRefresh.tsx +107 -0
  349. package/src/renderer/src-web/components/SettingsWindow.tsx +28 -2
  350. package/src/renderer/src-web/css/app-shell.css +174 -96
  351. package/src/renderer/src-web/css/chat.css +1519 -316
  352. package/src/renderer/src-web/css/dashboard.css +11 -0
  353. package/src/renderer/src-web/css/misc.css +17 -17
  354. package/src/renderer/src-web/css/mobile.css +678 -0
  355. package/src/renderer/src-web/css/model.css +46 -46
  356. package/src/renderer/src-web/css/pictures.css +81 -34
  357. package/src/renderer/src-web/css/pull-to-refresh.css +54 -0
  358. package/src/renderer/src-web/css/settings/base.css +316 -100
  359. package/src/renderer/src-web/css/settings/mobile.css +320 -0
  360. package/src/renderer/src-web/css/sidebar-workspace.css +545 -100
  361. package/src/renderer/src-web/css/spotlight.css +9 -26
  362. package/src/renderer/src-web/css/widget.css +0 -5
  363. package/src/renderer/src-web/env.d.ts +3 -0
  364. package/src/renderer/src-web/hooks/useProviderModels.ts +2 -9
  365. package/src/renderer/src-web/index.css +53 -96
  366. package/src/renderer/src-web/main.tsx +11 -0
  367. package/src/renderer/src-web/tauri.ts +200 -30
  368. package/vite.config.web.ts +1 -0
  369. package/out/web/assets/MintDashboard-DWSqucgb.js +0 -57
  370. package/out/web/assets/SettingsWindow-DFM2aj5B.js +0 -2
  371. package/out/web/assets/chunk-CKBBP62Z-nr1uKPj9.js +0 -2
  372. package/out/web/assets/chunk-DSNCTWBM-Dtj8Rqsd.js +0 -2
  373. package/out/web/assets/chunk-DU6HZSFF-2tv5K1wT.js +0 -128
  374. package/out/web/assets/classDiagram-DTDB5LWJ-BdSFArgw.js +0 -1
  375. package/out/web/assets/classDiagram-v2-JRS7N3AN-BdSFArgw.js +0 -1
  376. package/out/web/assets/core-DImejIUG.js +0 -1
  377. package/out/web/assets/dist-js-BxuKEVWM.js +0 -1
  378. package/out/web/assets/event-BNl8Zahw.js +0 -1
  379. package/out/web/assets/fira-code-cyrillic-400-normal-UC0NFL4U.woff2 +0 -0
  380. package/out/web/assets/fira-code-cyrillic-400-normal-dc1q3VD7.woff +0 -0
  381. package/out/web/assets/fira-code-cyrillic-500-normal-Bu7VCL72.woff +0 -0
  382. package/out/web/assets/fira-code-cyrillic-500-normal-CX35h3Mg.woff2 +0 -0
  383. package/out/web/assets/fira-code-cyrillic-ext-400-normal-Buh61xzB.woff +0 -0
  384. package/out/web/assets/fira-code-cyrillic-ext-400-normal-txZ9Fk_1.woff2 +0 -0
  385. package/out/web/assets/fira-code-cyrillic-ext-500-normal-CYRspHgm.woff2 +0 -0
  386. package/out/web/assets/fira-code-cyrillic-ext-500-normal-CwtLmSFD.woff +0 -0
  387. package/out/web/assets/fira-code-greek-400-normal-B2Gh_Y8s.woff2 +0 -0
  388. package/out/web/assets/fira-code-greek-400-normal-DobhaxvF.woff +0 -0
  389. package/out/web/assets/fira-code-greek-500-normal-CVO0IRNt.woff2 +0 -0
  390. package/out/web/assets/fira-code-greek-500-normal-DEXIWiey.woff +0 -0
  391. package/out/web/assets/fira-code-greek-ext-400-normal-DR7mBgIM.woff2 +0 -0
  392. package/out/web/assets/fira-code-greek-ext-400-normal-DSPUheWg.woff +0 -0
  393. package/out/web/assets/fira-code-greek-ext-500-normal-BO3iq16n.woff2 +0 -0
  394. package/out/web/assets/fira-code-greek-ext-500-normal-CMiNLXER.woff +0 -0
  395. package/out/web/assets/fira-code-latin-ext-400-normal-DG73JjOf.woff +0 -0
  396. package/out/web/assets/fira-code-latin-ext-400-normal-KSMg0QLl.woff2 +0 -0
  397. package/out/web/assets/fira-code-latin-ext-500-normal-CaANqXjI.woff +0 -0
  398. package/out/web/assets/fira-code-latin-ext-500-normal-Crd9e_oI.woff2 +0 -0
  399. package/out/web/assets/flowDiagram-A5DVABFB-BpnHUSU7.js +0 -1
  400. package/out/web/assets/index-CVRg270z.css +0 -1
  401. package/out/web/assets/index-DxZQr9yD.js +0 -10
  402. package/out/web/assets/inter-cyrillic-400-normal-HOLc17fK.woff +0 -0
  403. package/out/web/assets/inter-cyrillic-400-normal-obahsSVq.woff2 +0 -0
  404. package/out/web/assets/inter-cyrillic-500-normal-BasfLYem.woff2 +0 -0
  405. package/out/web/assets/inter-cyrillic-500-normal-CxZf_p3X.woff +0 -0
  406. package/out/web/assets/inter-cyrillic-600-normal-4D_pXhcN.woff +0 -0
  407. package/out/web/assets/inter-cyrillic-600-normal-CWCymEST.woff2 +0 -0
  408. package/out/web/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2 +0 -0
  409. package/out/web/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff +0 -0
  410. package/out/web/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2 +0 -0
  411. package/out/web/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff +0 -0
  412. package/out/web/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff +0 -0
  413. package/out/web/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2 +0 -0
  414. package/out/web/assets/inter-greek-400-normal-B4URO6DV.woff2 +0 -0
  415. package/out/web/assets/inter-greek-400-normal-q2sYcFCs.woff +0 -0
  416. package/out/web/assets/inter-greek-500-normal-BIZE56-Y.woff2 +0 -0
  417. package/out/web/assets/inter-greek-500-normal-Xzm54t5V.woff +0 -0
  418. package/out/web/assets/inter-greek-600-normal-BZpKdvQh.woff +0 -0
  419. package/out/web/assets/inter-greek-600-normal-plRanbMR.woff2 +0 -0
  420. package/out/web/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2 +0 -0
  421. package/out/web/assets/inter-greek-ext-400-normal-KugGGMne.woff +0 -0
  422. package/out/web/assets/inter-greek-ext-500-normal-2j5mBUwD.woff +0 -0
  423. package/out/web/assets/inter-greek-ext-500-normal-C4iEst2y.woff2 +0 -0
  424. package/out/web/assets/inter-greek-ext-600-normal-B8X0CLgF.woff +0 -0
  425. package/out/web/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2 +0 -0
  426. package/out/web/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  427. package/out/web/assets/inter-latin-400-normal-CyCys3Eg.woff +0 -0
  428. package/out/web/assets/inter-latin-500-normal-BL9OpVg8.woff +0 -0
  429. package/out/web/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  430. package/out/web/assets/inter-latin-600-normal-CiBQ2DWP.woff +0 -0
  431. package/out/web/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  432. package/out/web/assets/inter-latin-ext-400-normal-77YHD8bZ.woff +0 -0
  433. package/out/web/assets/inter-latin-ext-400-normal-C1nco2VV.woff2 +0 -0
  434. package/out/web/assets/inter-latin-ext-500-normal-BxGbmqWO.woff +0 -0
  435. package/out/web/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2 +0 -0
  436. package/out/web/assets/inter-latin-ext-600-normal-CIVaiw4L.woff +0 -0
  437. package/out/web/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2 +0 -0
  438. package/out/web/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff +0 -0
  439. package/out/web/assets/inter-vietnamese-400-normal-DMkecbls.woff2 +0 -0
  440. package/out/web/assets/inter-vietnamese-500-normal-DOriooB6.woff2 +0 -0
  441. package/out/web/assets/inter-vietnamese-500-normal-mJboJaSs.woff +0 -0
  442. package/out/web/assets/inter-vietnamese-600-normal-BuLX-rYi.woff +0 -0
  443. package/out/web/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2 +0 -0
  444. package/out/web/assets/kanit-latin-400-normal-BUlsQXH3.woff2 +0 -0
  445. package/out/web/assets/kanit-latin-400-normal-HVZWrfev.woff +0 -0
  446. package/out/web/assets/kanit-latin-500-normal-CX_4XcKi.woff2 +0 -0
  447. package/out/web/assets/kanit-latin-500-normal-qBha86O4.woff +0 -0
  448. package/out/web/assets/kanit-latin-600-normal-0lS78yAd.woff2 +0 -0
  449. package/out/web/assets/kanit-latin-600-normal-DlacpeTg.woff +0 -0
  450. package/out/web/assets/kanit-latin-ext-400-normal-B2xPf58u.woff2 +0 -0
  451. package/out/web/assets/kanit-latin-ext-400-normal-CHvNKHHD.woff +0 -0
  452. package/out/web/assets/kanit-latin-ext-500-normal-BFdWrG22.woff +0 -0
  453. package/out/web/assets/kanit-latin-ext-500-normal-EHs3suD6.woff2 +0 -0
  454. package/out/web/assets/kanit-latin-ext-600-normal-BBDzoLaj.woff +0 -0
  455. package/out/web/assets/kanit-latin-ext-600-normal-DAX3wtuq.woff2 +0 -0
  456. package/out/web/assets/kanit-thai-400-normal-D2nliXKa.woff +0 -0
  457. package/out/web/assets/kanit-thai-400-normal-D80Pglro.woff2 +0 -0
  458. package/out/web/assets/kanit-thai-500-normal-BB8gri04.woff2 +0 -0
  459. package/out/web/assets/kanit-thai-500-normal-Iy_w0a80.woff +0 -0
  460. package/out/web/assets/kanit-thai-600-normal-Bj6oiaDc.woff2 +0 -0
  461. package/out/web/assets/kanit-thai-600-normal-wbTlPO7I.woff +0 -0
  462. package/out/web/assets/kanit-vietnamese-400-normal-DRI8YWyb.woff2 +0 -0
  463. package/out/web/assets/kanit-vietnamese-400-normal-dow6Bnto.woff +0 -0
  464. package/out/web/assets/kanit-vietnamese-500-normal-BzTrpCM3.woff2 +0 -0
  465. package/out/web/assets/kanit-vietnamese-500-normal-T1ndT7MF.woff +0 -0
  466. package/out/web/assets/kanit-vietnamese-600-normal-Bi7fw3I4.woff2 +0 -0
  467. package/out/web/assets/kanit-vietnamese-600-normal-DXCRAa_8.woff +0 -0
  468. package/out/web/assets/mali-latin-400-normal-ByPcZ8Gx.woff +0 -0
  469. package/out/web/assets/mali-latin-400-normal-Cuc6Ykl8.woff2 +0 -0
  470. package/out/web/assets/mali-latin-500-normal-B01M-LP6.woff2 +0 -0
  471. package/out/web/assets/mali-latin-500-normal-Thgqw_9f.woff +0 -0
  472. package/out/web/assets/mali-latin-600-normal-B9TiUNpT.woff2 +0 -0
  473. package/out/web/assets/mali-latin-600-normal-CycpQCwU.woff +0 -0
  474. package/out/web/assets/mali-latin-ext-400-normal-DUVdJQO4.woff +0 -0
  475. package/out/web/assets/mali-latin-ext-400-normal-iCG1ALuJ.woff2 +0 -0
  476. package/out/web/assets/mali-latin-ext-500-normal-BfJE4UMZ.woff2 +0 -0
  477. package/out/web/assets/mali-latin-ext-500-normal-FoLEyOKS.woff +0 -0
  478. package/out/web/assets/mali-latin-ext-600-normal-BTvIfiCp.woff2 +0 -0
  479. package/out/web/assets/mali-latin-ext-600-normal-DAQcLVmD.woff +0 -0
  480. package/out/web/assets/mali-thai-400-normal-BO7A3bLZ.woff2 +0 -0
  481. package/out/web/assets/mali-thai-400-normal-CX9VrjTn.woff +0 -0
  482. package/out/web/assets/mali-thai-500-normal-Cph2qha9.woff +0 -0
  483. package/out/web/assets/mali-thai-500-normal-D89rMT77.woff2 +0 -0
  484. package/out/web/assets/mali-thai-600-normal-DPgXT6rZ.woff +0 -0
  485. package/out/web/assets/mali-thai-600-normal-DlTx3OsB.woff2 +0 -0
  486. package/out/web/assets/mali-vietnamese-400-normal-DUKxzXaz.woff2 +0 -0
  487. package/out/web/assets/mali-vietnamese-400-normal-gFDLvsOK.woff +0 -0
  488. package/out/web/assets/mali-vietnamese-500-normal--OY07q2c.woff +0 -0
  489. package/out/web/assets/mali-vietnamese-500-normal-KDrNRwfW.woff2 +0 -0
  490. package/out/web/assets/mali-vietnamese-600-normal-CtTMUU7T.woff +0 -0
  491. package/out/web/assets/mali-vietnamese-600-normal-DFlJr66u.woff2 +0 -0
  492. package/out/web/assets/mermaid.core-DYGGlqOf.js +0 -11
  493. package/out/web/assets/mitr-latin-400-normal-Cb18vPmZ.woff +0 -0
  494. package/out/web/assets/mitr-latin-400-normal-CwbkLQ4a.woff2 +0 -0
  495. package/out/web/assets/mitr-latin-500-normal-B4JOhzAi.woff +0 -0
  496. package/out/web/assets/mitr-latin-500-normal-BmClOow2.woff2 +0 -0
  497. package/out/web/assets/mitr-latin-ext-400-normal-B3CPG7Yo.woff2 +0 -0
  498. package/out/web/assets/mitr-latin-ext-400-normal-DTx65hiC.woff +0 -0
  499. package/out/web/assets/mitr-latin-ext-500-normal-B_Diajz1.woff2 +0 -0
  500. package/out/web/assets/mitr-latin-ext-500-normal-DYOsVaVT.woff +0 -0
  501. package/out/web/assets/mitr-thai-400-normal-CS4Do6aM.woff +0 -0
  502. package/out/web/assets/mitr-thai-400-normal-CXWaAdVj.woff2 +0 -0
  503. package/out/web/assets/mitr-thai-500-normal-CVdBrEVH.woff2 +0 -0
  504. package/out/web/assets/mitr-thai-500-normal-CW_B5D-i.woff +0 -0
  505. package/out/web/assets/mitr-vietnamese-400-normal-CPMGWyoC.woff2 +0 -0
  506. package/out/web/assets/mitr-vietnamese-400-normal-Z6XhIpdY.woff +0 -0
  507. package/out/web/assets/mitr-vietnamese-500-normal-CDrv0585.woff2 +0 -0
  508. package/out/web/assets/mitr-vietnamese-500-normal-CMQWyq-Z.woff +0 -0
  509. package/out/web/assets/noto-sans-thai-latin-400-normal-BaWBrqFP.woff2 +0 -0
  510. package/out/web/assets/noto-sans-thai-latin-400-normal-Dh_FJjOB.woff +0 -0
  511. package/out/web/assets/noto-sans-thai-latin-500-normal-BC04jsmm.woff +0 -0
  512. package/out/web/assets/noto-sans-thai-latin-500-normal-fyBKClF1.woff2 +0 -0
  513. package/out/web/assets/noto-sans-thai-latin-600-normal-CemcjnVR.woff2 +0 -0
  514. package/out/web/assets/noto-sans-thai-latin-600-normal-Dbc-dNO6.woff +0 -0
  515. package/out/web/assets/noto-sans-thai-latin-ext-400-normal-B-1H0YkH.woff +0 -0
  516. package/out/web/assets/noto-sans-thai-latin-ext-400-normal-nBP59pVw.woff2 +0 -0
  517. package/out/web/assets/noto-sans-thai-latin-ext-500-normal-B-ZWb8SZ.woff2 +0 -0
  518. package/out/web/assets/noto-sans-thai-latin-ext-500-normal-CrEHO7C8.woff +0 -0
  519. package/out/web/assets/noto-sans-thai-latin-ext-600-normal-PkMZo0xa.woff +0 -0
  520. package/out/web/assets/noto-sans-thai-latin-ext-600-normal-maHHBsez.woff2 +0 -0
  521. package/out/web/assets/noto-sans-thai-thai-400-normal-BEOmKAI1.woff2 +0 -0
  522. package/out/web/assets/noto-sans-thai-thai-400-normal-Dxb_unuU.woff +0 -0
  523. package/out/web/assets/noto-sans-thai-thai-500-normal-BOGXO2tw.woff +0 -0
  524. package/out/web/assets/noto-sans-thai-thai-500-normal-CU_X86GQ.woff2 +0 -0
  525. package/out/web/assets/noto-sans-thai-thai-600-normal-CmgB8_JK.woff +0 -0
  526. package/out/web/assets/noto-sans-thai-thai-600-normal-Cs73sVjl.woff2 +0 -0
  527. package/out/web/assets/oauthManager-DNiwM8Rn.js +0 -2
  528. package/out/web/assets/oauthManager-DuamS1Av.css +0 -1
  529. package/out/web/assets/outfit-latin-300-normal-AWLfuCom.woff +0 -0
  530. package/out/web/assets/outfit-latin-300-normal-CRYTwY6m.woff2 +0 -0
  531. package/out/web/assets/outfit-latin-400-normal-BGsTXAXT.woff2 +0 -0
  532. package/out/web/assets/outfit-latin-400-normal-DMwTpYkH.woff +0 -0
  533. package/out/web/assets/outfit-latin-500-normal-ClnHRwRh.woff +0 -0
  534. package/out/web/assets/outfit-latin-500-normal-DKnIMDSk.woff2 +0 -0
  535. package/out/web/assets/outfit-latin-600-normal-B7SfZ07L.woff2 +0 -0
  536. package/out/web/assets/outfit-latin-600-normal-BEfTtDA7.woff +0 -0
  537. package/out/web/assets/outfit-latin-ext-300-normal-BYS6Dpvq.woff2 +0 -0
  538. package/out/web/assets/outfit-latin-ext-300-normal-CMIMshEd.woff +0 -0
  539. package/out/web/assets/outfit-latin-ext-400-normal-5tcqmc2S.woff2 +0 -0
  540. package/out/web/assets/outfit-latin-ext-400-normal-DHm7mdGe.woff +0 -0
  541. package/out/web/assets/outfit-latin-ext-500-normal-DrCvqoFD.woff +0 -0
  542. package/out/web/assets/outfit-latin-ext-500-normal-zeox_O30.woff2 +0 -0
  543. package/out/web/assets/outfit-latin-ext-600-normal-B85nYjL1.woff2 +0 -0
  544. package/out/web/assets/outfit-latin-ext-600-normal-CWJcPgd7.woff +0 -0
  545. package/out/web/assets/preload-helper-D0uHx7FM.js +0 -1
  546. package/out/web/assets/prompt-latin-ext-400-normal-1pHbN9uy.woff +0 -0
  547. package/out/web/assets/prompt-latin-ext-400-normal-DdSafGZ9.woff2 +0 -0
  548. package/out/web/assets/prompt-latin-ext-500-normal--EZ1um7s.woff2 +0 -0
  549. package/out/web/assets/prompt-latin-ext-500-normal-D-lI1EVT.woff +0 -0
  550. package/out/web/assets/prompt-latin-ext-600-normal-C8b50x67.woff +0 -0
  551. package/out/web/assets/prompt-latin-ext-600-normal-Cg9L7iJU.woff2 +0 -0
  552. package/out/web/assets/prompt-vietnamese-400-normal-BCPzsgPT.woff2 +0 -0
  553. package/out/web/assets/prompt-vietnamese-400-normal-D4pLyeNK.woff +0 -0
  554. package/out/web/assets/prompt-vietnamese-500-normal-DmzxmPwa.woff2 +0 -0
  555. package/out/web/assets/prompt-vietnamese-500-normal-w_sS_j2F.woff +0 -0
  556. package/out/web/assets/prompt-vietnamese-600-normal-1dyohtNh.woff +0 -0
  557. package/out/web/assets/prompt-vietnamese-600-normal-7QWjJBsF.woff2 +0 -0
  558. package/out/web/assets/sarabun-latin-400-normal-DmguIS-7.woff +0 -0
  559. package/out/web/assets/sarabun-latin-400-normal-URPBxl-K.woff2 +0 -0
  560. package/out/web/assets/sarabun-latin-500-normal-BjUTcdxu.woff2 +0 -0
  561. package/out/web/assets/sarabun-latin-500-normal-CJexTAnl.woff +0 -0
  562. package/out/web/assets/sarabun-latin-600-normal-9FonlkKx.woff +0 -0
  563. package/out/web/assets/sarabun-latin-600-normal-DMD3TROr.woff2 +0 -0
  564. package/out/web/assets/sarabun-latin-ext-400-normal-BbP7GpLL.woff2 +0 -0
  565. package/out/web/assets/sarabun-latin-ext-400-normal-BsmTn0SS.woff +0 -0
  566. package/out/web/assets/sarabun-latin-ext-500-normal-Cot16Bd2.woff +0 -0
  567. package/out/web/assets/sarabun-latin-ext-500-normal-DE1LysqI.woff2 +0 -0
  568. package/out/web/assets/sarabun-latin-ext-600-normal-0tXu9x_i.woff +0 -0
  569. package/out/web/assets/sarabun-latin-ext-600-normal-BRxjKUQ6.woff2 +0 -0
  570. package/out/web/assets/sarabun-thai-400-normal-C2DaJlKK.woff2 +0 -0
  571. package/out/web/assets/sarabun-thai-400-normal-CH-UbWgg.woff +0 -0
  572. package/out/web/assets/sarabun-thai-500-normal-BVssjame.woff2 +0 -0
  573. package/out/web/assets/sarabun-thai-500-normal-C3iDLEzi.woff +0 -0
  574. package/out/web/assets/sarabun-thai-600-normal-3dIAQ-_s.woff2 +0 -0
  575. package/out/web/assets/sarabun-thai-600-normal-DWKeTe6a.woff +0 -0
  576. package/out/web/assets/sarabun-vietnamese-400-normal-DPfkSCMy.woff +0 -0
  577. package/out/web/assets/sarabun-vietnamese-400-normal-igdrzAGY.woff2 +0 -0
  578. package/out/web/assets/sarabun-vietnamese-500-normal-CpRVvGRU.woff +0 -0
  579. package/out/web/assets/sarabun-vietnamese-500-normal-Dpe7Br9m.woff2 +0 -0
  580. package/out/web/assets/sarabun-vietnamese-600-normal-BMbOgAW-.woff +0 -0
  581. package/out/web/assets/sarabun-vietnamese-600-normal-DkxrOlLB.woff2 +0 -0
  582. package/out/web/assets/stateDiagram-v2-4QOOHH4V-s6P9g2_b.js +0 -1
  583. package/out/web/assets/swimlanesDiagram-VK2B7HYN-CV9fOLrV.js +0 -8
  584. package/out/web/assets/tauri-CNrHQ2Gb.js +0 -3
  585. package/out/web/assets/window-DkIhgI7B.js +0 -1
@@ -1,8 +1,3 @@
1
- :root {
2
- --accent: #10b981;
3
- --accent-glow: rgba(16, 185, 129, 0.6);
4
- }
5
-
6
1
  * { margin: 0; padding: 0; box-sizing: border-box; }
7
2
 
8
3
  body {
@@ -17,7 +12,6 @@ body {
17
12
  }
18
13
 
19
14
  .drag-region {
20
- -webkit-app-region: drag;
21
15
  }
22
16
 
23
17
  #widget-container {
@@ -63,7 +57,41 @@ body {
63
57
  align-items: center;
64
58
  position: relative;
65
59
  transition: all 0.3s ease;
66
- -webkit-app-region: drag;
60
+ padding: 0;
61
+ cursor: pointer;
62
+ }
63
+
64
+ .character-body:focus-visible,
65
+ .widget-hide-btn:focus-visible {
66
+ outline: 2px solid var(--accent);
67
+ outline-offset: 3px;
68
+ }
69
+
70
+ .widget-hide-btn {
71
+ position: absolute;
72
+ top: 10px;
73
+ right: 10px;
74
+ width: 22px;
75
+ height: 22px;
76
+ border: 1px solid rgba(255, 255, 255, 0.18);
77
+ border-radius: 50%;
78
+ background: rgba(15, 23, 42, 0.92);
79
+ color: #fff;
80
+ font: inherit;
81
+ line-height: 1;
82
+ cursor: pointer;
83
+ opacity: 0;
84
+ transition: opacity 0.2s ease, transform 0.2s ease;
85
+ }
86
+
87
+ #widget-container:hover .widget-hide-btn,
88
+ #widget-container:focus-within .widget-hide-btn {
89
+ opacity: 1;
90
+ }
91
+
92
+ .widget-hide-btn:hover {
93
+ transform: scale(1.08);
94
+ background: #ef4444;
67
95
  }
68
96
 
69
97
  .eyes {
@@ -75,6 +75,9 @@ interface Window {
75
75
  };
76
76
  widgetAPI: {
77
77
  onStateChange: (callback: (state: any) => void) => void;
78
+ openChat: () => Promise<void>;
79
+ setVisible: (visible: boolean) => Promise<void>;
80
+ startDragging: () => Promise<void>;
78
81
  };
79
82
  }
80
83
 
@@ -31,16 +31,9 @@ export function useProviderModels(
31
31
  setLoading(true)
32
32
 
33
33
  fetchProviderModels(provider, apiKey, baseUrl)
34
- .then((live) => {
34
+ .then((available) => {
35
35
  if (id !== reqId.current) return
36
- if (live && live.length > 0) {
37
- const presets = getPresets(provider)
38
- const merged = [...live]
39
- for (const p of presets) {
40
- if (!merged.includes(p)) merged.push(p)
41
- }
42
- setModels(merged)
43
- }
36
+ setModels(available)
44
37
  })
45
38
  .catch(() => { /* fallback: presets already set */ })
46
39
  .finally(() => { if (id === reqId.current) setLoading(false) })
@@ -1,23 +1,4 @@
1
- @import './css/app-shell.css';
2
- @import './css/chat.css';
3
- @import './css/sidebar-workspace.css';
4
- @import './css/model.css';
5
- @import './css/pictures.css';
6
- @import './css/misc.css';
7
- @import './css/settings/base.css';
8
- @import '../shared/css/settings/general.css';
9
- @import '../shared/css/settings/profile.css';
10
- @import '../shared/css/settings/automation.css';
11
- @import '../shared/css/settings/theme.css';
12
- @import '../shared/css/settings/plugins.css';
13
- @import '../shared/css/settings/agents.css';
14
- @import '../shared/css/settings/shortcuts.css';
15
- @import './css/spotlight.css';
16
- @import './css/widget.css';
17
- @import '../shared/css/image-studio.css';
18
- @import '../shared/css/veo-studio.css';
19
- @import '../shared/css/agent-observability.css';
20
- @import '../shared/css/model-selector.css';
1
+ @import '../shared/theme/tokens.css';
21
2
 
22
3
  * {
23
4
  box-sizing: border-box;
@@ -33,7 +14,9 @@ body, html, #root {
33
14
  }
34
15
 
35
16
  body, html {
36
- font-family: Inter, ui-sans-serif, system-ui, sans-serif;
17
+ font-family: 'Prompt', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
18
+ -webkit-font-smoothing: antialiased;
19
+ -moz-osx-font-smoothing: grayscale;
37
20
  }
38
21
 
39
22
  button, textarea {
@@ -62,7 +45,7 @@ button {
62
45
  .chat-mention {
63
46
  background: color-mix(in srgb, var(--accent, #10b981) 12%, transparent);
64
47
  border: 1px solid color-mix(in srgb, var(--accent, #10b981) 25%, transparent);
65
- color: var(--accent, #34d399);
48
+ color: var(--interactive-fg);
66
49
  padding: 2px 6px;
67
50
  border-radius: 6px;
68
51
  font-weight: 500;
@@ -71,13 +54,23 @@ button {
71
54
  margin: 0 2px;
72
55
  }
73
56
 
57
+ .chat-ui-grid-item:hover {
58
+ transform: translateY(-2px);
59
+ border-color: rgba(255, 255, 255, 0.16) !important;
60
+ box-shadow: 0 6px 20px -4px rgba(0, 0, 0, 0.3);
61
+ }
62
+
63
+ .chat-ui-feature-item:hover {
64
+ border-color: rgba(255, 255, 255, 0.18) !important;
65
+ }
66
+
74
67
  /* Minimalist AI Workspace (Claude / Cursor style) Code Block */
75
68
  .chat-code-block-container {
76
69
  display: flex;
77
70
  flex-direction: column;
78
71
  background: var(--panel-soft, #121214);
79
72
  border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
80
- border-radius: 9px;
73
+ border-radius: 16px;
81
74
  margin: 12px 0;
82
75
  overflow: hidden;
83
76
  box-shadow: var(--shadow-sm, 0 4px 16px rgba(0, 0, 0, 0.18));
@@ -146,11 +139,11 @@ button {
146
139
  }
147
140
 
148
141
  .chat-code-copy-btn.is-copied {
149
- color: var(--accent, #10b981);
142
+ color: var(--interactive-fg);
150
143
  }
151
144
 
152
145
  .chat-code-copy-btn.is-copied .chat-code-btn-label {
153
- color: var(--accent, #10b981);
146
+ color: var(--interactive-fg);
154
147
  }
155
148
 
156
149
  .chat-code-btn-label {
@@ -167,7 +160,7 @@ button {
167
160
 
168
161
  .chat-code-block-body code {
169
162
  font-family: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
170
- font-size: 0.84rem;
163
+ font-size: 13px;
171
164
  line-height: 1.6;
172
165
  white-space: pre;
173
166
  color: var(--text-chat, var(--text-main, #e2e8f0));
@@ -270,20 +263,34 @@ button {
270
263
  }
271
264
 
272
265
  .chat-bold-highlight {
273
- color: var(--text-chat, var(--text-main)) !important;
274
- }
275
-
276
- /* Tech Pill Inline Code */
266
+ color: var(--text-chat, var(--text-main, inherit));
267
+ font-weight: 600;
268
+ }
269
+ /* Code Syntax Highlighting (Driven by tokens.css) */
270
+ .token-string { color: var(--syntax-string); }
271
+ .token-flag { color: var(--syntax-flag); }
272
+ .token-comment { color: var(--syntax-comment); }
273
+ .token-number { color: var(--syntax-number); }
274
+ .token-variable { color: var(--syntax-variable); }
275
+ .token-property { color: var(--syntax-property); }
276
+ .token-function { color: var(--syntax-function); }
277
+ .token-type { color: var(--syntax-type); }
278
+ .token-boolean { color: var(--syntax-boolean); }
279
+ .token-operator { color: var(--syntax-operator); }
280
+ .token-punctuation { color: var(--syntax-punctuation); }
281
+
282
+ /* Tech Pill Inline Code (ChatGPT style) */
277
283
  .chat-inline-code {
278
- background: rgba(255, 255, 255, 0.06);
279
- border: 1px solid rgba(255, 255, 255, 0.12);
280
- color: var(--text-chat, var(--text-main, #e2e8f0));
281
- padding: 1.5px 6px;
282
- border-radius: 5px;
284
+ background: var(--bg-surface-soft);
285
+ border: 1px solid var(--border-default);
286
+ color: var(--text-primary);
287
+ padding: 2px 7px;
288
+ border-radius: var(--radius-sm, 6px);
283
289
  font-family: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
284
- font-size: 0.85em;
290
+ font-size: 0.86em;
291
+ font-weight: 500;
285
292
  letter-spacing: -0.01em;
286
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
293
+ box-shadow: var(--shadow-sm);
287
294
  display: inline-block;
288
295
  vertical-align: baseline;
289
296
  }
@@ -293,9 +300,9 @@ button {
293
300
  overflow-x: auto;
294
301
  margin: 14px 0;
295
302
  width: 100%;
296
- border-radius: 8px;
297
- border: 1px solid var(--border-light);
298
- background: var(--panel-bg);
303
+ border-radius: var(--radius-md, 8px);
304
+ border: 1px solid var(--border-default);
305
+ background: var(--bg-surface);
299
306
  box-shadow: var(--shadow-sm);
300
307
  }
301
308
 
@@ -310,16 +317,16 @@ button {
310
317
  .chat-table th {
311
318
  padding: 12px 16px;
312
319
  font-weight: 700;
313
- color: var(--accent);
314
- background: color-mix(in srgb, var(--text-main) 5%, transparent);
315
- border-bottom: 2px solid var(--border-light);
320
+ color: var(--interactive-fg);
321
+ background: var(--bg-surface-soft);
322
+ border-bottom: 2px solid var(--border-default);
316
323
  font-family: ui-sans-serif, system-ui, sans-serif;
317
324
  }
318
325
 
319
326
  .chat-table td {
320
327
  padding: 12px 16px;
321
- color: var(--text-main, #e2e8f0);
322
- border-bottom: 1px solid var(--border);
328
+ color: var(--text-primary);
329
+ border-bottom: 1px solid var(--border-subtle);
323
330
  }
324
331
 
325
332
  .chat-table tbody tr {
@@ -327,7 +334,7 @@ button {
327
334
  }
328
335
 
329
336
  .chat-table tbody tr:hover {
330
- background: color-mix(in srgb, var(--text-main) 4%, transparent);
337
+ background: var(--bg-surface-hover);
331
338
  }
332
339
 
333
340
  .chat-table tbody tr:last-child td {
@@ -4,8 +4,19 @@ import App from './App'
4
4
  import '@shared/fonts'
5
5
  import './index.css'
6
6
  import { installTauriAdapters } from './tauri'
7
+ import * as tauriPlatform from './tauri'
8
+ import {
9
+ checkoutRemoteGitBranch, createGitBranch, createWorkspaceFile, createWorkspaceFolder,
10
+ deleteWorkspaceItem, getGitBranchInfo, getGitGraph, getWorkspaceGitDiff, getWorkspaceSnapshot, switchGitBranch,
11
+ } from './tauri'
12
+ import { installRendererPlatform, installWorkspacePlatform } from '@shared/platform'
7
13
 
8
14
  installTauriAdapters()
15
+ installRendererPlatform(tauriPlatform)
16
+ installWorkspacePlatform({
17
+ getWorkspaceSnapshot, getWorkspaceGitDiff, getGitBranchInfo, switchGitBranch, createGitBranch,
18
+ checkoutRemoteGitBranch, getGitGraph, createWorkspaceFile, createWorkspaceFolder, deleteWorkspaceItem,
19
+ })
9
20
 
10
21
  ReactDOM.createRoot(document.getElementById('root')!).render(
11
22
  <React.StrictMode>
@@ -34,12 +34,13 @@ import type {
34
34
  DocumentAttachment,
35
35
  AgentProgress,
36
36
  InteractionMemory,
37
+ ConversationSnapshot,
38
+ ConversationChanges,
37
39
  ChatSession,
38
40
  PictureEntry,
39
41
  ImageGenRequest,
40
42
  ImageGenProviders,
41
43
  ImageGenResponse,
42
- WorkspaceTreeEntry,
43
44
  CodeEdit,
44
45
  CodeEditProposal,
45
46
  LearnedSkill,
@@ -48,11 +49,16 @@ import type {
48
49
  CronJobDraft,
49
50
  LinkedFolder,
50
51
  LinkedFolderDraft,
52
+ LinkedFolderNote,
53
+ LinkedFolderStatus,
51
54
  GitCheckpoint,
55
+ GitBranchInfo,
56
+ GitBranchChangeOutcome,
52
57
  } from '../shared/types'
53
58
 
54
59
 
55
60
  type DesktopStreamEvent =
61
+ | { type: 'started'; interactionId: number }
56
62
  | { type: 'chunk'; chunk: string }
57
63
  | { type: 'progress'; progress: AgentProgress }
58
64
 
@@ -455,6 +461,7 @@ export async function streamChatMessage(
455
461
  // `listen('tool-approval-requested', ...)` event instead, independent of
456
462
  // this function, so it ignores this parameter entirely.
457
463
  onApprovalRequested?: (payload: { token: string; approval: any }) => void,
464
+ onTurnStarted?: (interactionId: number) => void,
458
465
  ): Promise<ChatResponse> {
459
466
  if (!isTauriRuntime()) {
460
467
  const API_BASE = getLocalApiBase();
@@ -487,6 +494,8 @@ export async function streamChatMessage(
487
494
  const event = JSON.parse(line);
488
495
  if (event.type === 'chunk') {
489
496
  onChunk(event.chunk);
497
+ } else if (event.type === 'started') {
498
+ onTurnStarted?.(event.interactionId);
490
499
  } else if (event.type === 'progress') {
491
500
  onProgress?.(event.progress);
492
501
  } else if (event.type === 'done') {
@@ -507,6 +516,7 @@ export async function streamChatMessage(
507
516
  const onEvent = new Channel<DesktopStreamEvent>()
508
517
  onEvent.onmessage = (event) => {
509
518
  if (event.type === 'chunk') onChunk(event.chunk)
519
+ else if (event.type === 'started') onTurnStarted?.(event.interactionId)
510
520
  else onProgress?.(event.progress)
511
521
  }
512
522
  const response = await invoke<ChatResponse>('stream_chat_message', {
@@ -640,6 +650,29 @@ export async function getRecentInteractions(limit = 50, chatId?: string | null,
640
650
  return invoke<InteractionMemory[]>('get_recent_interactions', { limit, chatId, workspacePath })
641
651
  }
642
652
 
653
+ export async function getConversationSnapshot(chatId: string, beforeId?: number | null, limit = 50): Promise<ConversationSnapshot> {
654
+ if (!isTauriRuntime()) {
655
+ const params = new URLSearchParams({ chatId, limit: String(limit) })
656
+ if (beforeId != null) params.set('beforeId', String(beforeId))
657
+ const response = await authFetch(`${getLocalApiBase()}/conversation-snapshot?${params}`)
658
+ if (!response.ok) throw new Error(`Conversation snapshot failed: ${response.status}`)
659
+ return response.json()
660
+ }
661
+ const { invoke } = await import('@tauri-apps/api/core')
662
+ return invoke<ConversationSnapshot>('get_conversation_snapshot', { chatId, beforeId, limit })
663
+ }
664
+
665
+ export async function getConversationChanges(chatId: string, after: number, limit = 100): Promise<ConversationChanges> {
666
+ if (!isTauriRuntime()) {
667
+ const params = new URLSearchParams({ chatId, after: String(after), limit: String(limit) })
668
+ const response = await authFetch(`${getLocalApiBase()}/conversation-changes?${params}`)
669
+ if (!response.ok) throw new Error(`Conversation changes failed: ${response.status}`)
670
+ return response.json()
671
+ }
672
+ const { invoke } = await import('@tauri-apps/api/core')
673
+ return invoke<ConversationChanges>('get_conversation_changes', { chatId, after, limit })
674
+ }
675
+
643
676
  export async function saveSystemInteraction(
644
677
  chatId: string,
645
678
  userText: string,
@@ -705,6 +738,24 @@ export async function listChatSessions(): Promise<ChatSession[]> {
705
738
  return invoke<ChatSession[]>('list_chat_sessions')
706
739
  }
707
740
 
741
+ export async function updateChatSessionWorkspace(chatId: string, workspacePath: string | null): Promise<void> {
742
+ if (!isTauriRuntime()) {
743
+ const API_BASE = getLocalApiBase();
744
+ try {
745
+ await authFetch(`${API_BASE}/chat-sessions/workspace`, {
746
+ method: 'POST',
747
+ headers: { 'Content-Type': 'application/json' },
748
+ body: JSON.stringify({ chatId, workspacePath })
749
+ });
750
+ } catch (e) {
751
+ console.error("Failed to update chat session workspace on local server:", e);
752
+ }
753
+ return;
754
+ }
755
+ const { invoke } = await import('@tauri-apps/api/core')
756
+ await invoke('update_chat_session_workspace', { chatId, workspacePath })
757
+ }
758
+
708
759
  export async function deleteChatSession(chatId: string): Promise<number> {
709
760
  if (!isTauriRuntime()) {
710
761
  const API_BASE = getLocalApiBase();
@@ -972,7 +1023,7 @@ export async function setCronJobEnabled(id: string, enabled: boolean): Promise<C
972
1023
  export async function listLinkedFolders(): Promise<Record<string, LinkedFolder>> {
973
1024
  if (!isTauriRuntime()) {
974
1025
  const res = await authFetch(`${getLocalApiBase()}/linked-folders`)
975
- if (!res.ok) return {}
1026
+ if (!res.ok) throw new Error('Failed to load linked folders')
976
1027
  return res.json()
977
1028
  }
978
1029
  const { invoke } = await import('@tauri-apps/api/core')
@@ -1008,6 +1059,52 @@ export async function removeLinkedFolder(name: string): Promise<void> {
1008
1059
  await invoke('remove_linked_folder', { name })
1009
1060
  }
1010
1061
 
1062
+ export async function linkedFolderStatus(name: string): Promise<LinkedFolderStatus> {
1063
+ if (!isTauriRuntime()) {
1064
+ const res = await authFetch(`${getLocalApiBase()}/linked-folders/${encodeURIComponent(name)}/status`)
1065
+ if (!res.ok) throw new Error('Failed to load folder status')
1066
+ return res.json()
1067
+ }
1068
+ const { invoke } = await import('@tauri-apps/api/core')
1069
+ return invoke('linked_folder_status', { name })
1070
+ }
1071
+
1072
+ export async function refreshLinkedFolder(name: string): Promise<LinkedFolderStatus> {
1073
+ if (!isTauriRuntime()) {
1074
+ const res = await authFetch(`${getLocalApiBase()}/linked-folders/${encodeURIComponent(name)}/refresh`, { method: 'POST' })
1075
+ if (!res.ok) throw new Error('Failed to refresh folder')
1076
+ return res.json()
1077
+ }
1078
+ const { invoke } = await import('@tauri-apps/api/core')
1079
+ return invoke('refresh_linked_folder', { name })
1080
+ }
1081
+
1082
+ export async function listLinkedFolderNotes(name: string): Promise<LinkedFolderNote[]> {
1083
+ if (!isTauriRuntime()) {
1084
+ const res = await authFetch(`${getLocalApiBase()}/linked-folders/${encodeURIComponent(name)}/notes`)
1085
+ if (!res.ok) throw new Error('Failed to load notes')
1086
+ return res.json()
1087
+ }
1088
+ const { invoke } = await import('@tauri-apps/api/core')
1089
+ return invoke('list_linked_folder_notes', { name })
1090
+ }
1091
+
1092
+ export async function readLinkedFolderNote(name: string, id: string): Promise<string> {
1093
+ if (!isTauriRuntime()) {
1094
+ const res = await authFetch(`${getLocalApiBase()}/linked-folders/${encodeURIComponent(name)}/notes/${encodeURIComponent(id)}`)
1095
+ if (!res.ok) throw new Error('Failed to read note')
1096
+ return (await res.json()).content
1097
+ }
1098
+ const { invoke } = await import('@tauri-apps/api/core')
1099
+ return invoke('read_linked_folder_note', { name, id })
1100
+ }
1101
+
1102
+ export async function openLinkedFolderNote(name: string, id: string): Promise<void> {
1103
+ if (!isTauriRuntime()) return
1104
+ const { invoke } = await import('@tauri-apps/api/core')
1105
+ await invoke('open_linked_folder_note', { name, id })
1106
+ }
1107
+
1011
1108
  export async function clearChatHistory(chatId?: string | null): Promise<number> {
1012
1109
  if (!isTauriRuntime()) {
1013
1110
  const API_BASE = getLocalApiBase();
@@ -1167,38 +1264,92 @@ export async function setDefaultImageProvider(provider: string): Promise<boolean
1167
1264
 
1168
1265
 
1169
1266
 
1170
- export async function getWorkspaceTree(path?: string | null): Promise<WorkspaceTreeEntry> {
1267
+ export async function getWorkspaceSnapshot(operation: import('../shared/types').WorkspaceOperation): Promise<import('../shared/types').WorkspaceSnapshot> {
1171
1268
  if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) {
1172
1269
  return {
1173
- name: 'Workspace',
1174
- path: '.',
1175
- kind: 'directory',
1176
- children: [
1177
- { name: 'src', path: 'src', kind: 'directory', children: [] },
1178
- { name: 'package.json', path: 'package.json', kind: 'file', children: [] },
1179
- ],
1270
+ path: operation.root, revision: operation.revision,
1271
+ git: { isRepository: false, currentBranch: null, detachedHead: null, branches: [], remoteBranches: [], isDirty: false },
1272
+ tree: { name: 'Workspace', path: '.', kind: 'directory', children: [] },
1180
1273
  }
1181
1274
  }
1182
1275
  const { invoke } = await import('@tauri-apps/api/core')
1183
- return invoke<WorkspaceTreeEntry>('get_workspace_tree', { path })
1276
+ return invoke('get_workspace_snapshot', { operation })
1277
+ }
1278
+
1279
+ export async function getWorkspaceGitDiff(workspacePath: string): Promise<import('../shared/types').FileChange[]> {
1280
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) {
1281
+ return []
1282
+ }
1283
+ const { invoke } = await import('@tauri-apps/api/core')
1284
+ return invoke<import('../shared/types').FileChange[]>('get_workspace_git_diff', { workspacePath })
1285
+ }
1286
+
1287
+ export async function getGitBranchInfo(workspacePath: string): Promise<GitBranchInfo> {
1288
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) {
1289
+ return { isRepository: false, currentBranch: null, detachedHead: null, branches: [], remoteBranches: [], isDirty: false }
1290
+ }
1291
+ const { invoke } = await import('@tauri-apps/api/core')
1292
+ return invoke<GitBranchInfo>('get_git_branch_info', { workspacePath })
1293
+ }
1294
+
1295
+ export async function switchGitBranch(
1296
+ workspacePath: string,
1297
+ branch: string,
1298
+ confirmedDirtyWorkspace = false,
1299
+ ): Promise<GitBranchChangeOutcome> {
1300
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) {
1301
+ throw new Error('Branch switching is only available in the desktop app.')
1302
+ }
1303
+ const { invoke } = await import('@tauri-apps/api/core')
1304
+ return invoke<GitBranchChangeOutcome>('switch_git_branch', { workspacePath, branch, confirmedDirtyWorkspace })
1305
+ }
1306
+
1307
+ export async function createGitBranch(
1308
+ workspacePath: string,
1309
+ branch: string,
1310
+ confirmedDirtyWorkspace = false,
1311
+ ): Promise<GitBranchChangeOutcome> {
1312
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) {
1313
+ throw new Error('Branch creation is only available in the desktop app.')
1314
+ }
1315
+ const { invoke } = await import('@tauri-apps/api/core')
1316
+ return invoke<GitBranchChangeOutcome>('create_git_branch', { workspacePath, branch, confirmedDirtyWorkspace })
1317
+ }
1318
+
1319
+ export async function checkoutRemoteGitBranch(
1320
+ workspacePath: string,
1321
+ remoteBranch: string,
1322
+ confirmedDirtyWorkspace = false,
1323
+ ): Promise<GitBranchChangeOutcome> {
1324
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) {
1325
+ throw new Error('Remote branch checkout is only available in the desktop app.')
1326
+ }
1327
+ const { invoke } = await import('@tauri-apps/api/core')
1328
+ return invoke<GitBranchChangeOutcome>('checkout_remote_git_branch', { workspacePath, remoteBranch, confirmedDirtyWorkspace })
1329
+ }
1330
+
1331
+ export async function getGitGraph(workspacePath: string): Promise<string[]> {
1332
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) return []
1333
+ const { invoke } = await import('@tauri-apps/api/core')
1334
+ return invoke<string[]>('get_git_graph', { workspacePath })
1184
1335
  }
1185
1336
 
1186
- export async function createWorkspaceFile(path: string): Promise<void> {
1187
- if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) return
1337
+ export async function createWorkspaceFile(operation: import('../shared/types').WorkspaceOperation): Promise<import('../shared/types').WorkspaceSnapshot> {
1338
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) throw new Error('Workspace files are only available in the desktop app.')
1188
1339
  const { invoke } = await import('@tauri-apps/api/core')
1189
- return invoke('create_workspace_file', { path })
1340
+ return invoke('create_workspace_file', { operation })
1190
1341
  }
1191
1342
 
1192
- export async function createWorkspaceFolder(path: string): Promise<void> {
1193
- if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) return
1343
+ export async function createWorkspaceFolder(operation: import('../shared/types').WorkspaceOperation): Promise<import('../shared/types').WorkspaceSnapshot> {
1344
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) throw new Error('Workspace folders are only available in the desktop app.')
1194
1345
  const { invoke } = await import('@tauri-apps/api/core')
1195
- return invoke('create_workspace_folder', { path })
1346
+ return invoke('create_workspace_folder', { operation })
1196
1347
  }
1197
1348
 
1198
- export async function deleteWorkspaceItem(path: string): Promise<void> {
1199
- if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) return
1349
+ export async function deleteWorkspaceItem(operation: import('../shared/types').WorkspaceOperation): Promise<import('../shared/types').WorkspaceSnapshot> {
1350
+ if (typeof window === 'undefined' || !(window as any).__TAURI_INTERNALS__) throw new Error('Workspace files are only available in the desktop app.')
1200
1351
  const { invoke } = await import('@tauri-apps/api/core')
1201
- return invoke('delete_workspace_item', { path })
1352
+ return invoke('delete_workspace_item', { operation })
1202
1353
  }
1203
1354
 
1204
1355
  export async function selectWorkspaceDirectory(): Promise<string | null> {
@@ -1349,6 +1500,9 @@ export function installTauriAdapters() {
1349
1500
 
1350
1501
  (window as any).widgetAPI = {
1351
1502
  onStateChange: () => {},
1503
+ openChat: async () => {},
1504
+ setVisible: async () => {},
1505
+ startDragging: async () => {},
1352
1506
  };
1353
1507
 
1354
1508
  (window as any).screenPickerApi = {
@@ -1610,6 +1764,19 @@ export function installTauriAdapters() {
1610
1764
  const { listen } = await import('@tauri-apps/api/event')
1611
1765
  void listen<string>('widget-state', (event) => callback(event.payload))
1612
1766
  },
1767
+ openChat: async () => {
1768
+ const { invoke } = await import('@tauri-apps/api/core')
1769
+ await invoke('open_window', { kind: 'main' })
1770
+ },
1771
+ setVisible: async (visible) => {
1772
+ const { invoke } = await import('@tauri-apps/api/core')
1773
+ const config = await invoke<Record<string, unknown>>('get_config')
1774
+ await invoke('update_config', { config: { ...config, showDesktopWidget: visible } })
1775
+ },
1776
+ startDragging: async () => {
1777
+ const { getCurrentWindow } = await import('@tauri-apps/api/window')
1778
+ await getCurrentWindow().startDragging()
1779
+ },
1613
1780
  }
1614
1781
 
1615
1782
  window.screenPickerApi = {
@@ -1708,15 +1875,10 @@ export function installTauriAdapters() {
1708
1875
  onSettingsChanged: settingsChanged,
1709
1876
  startVision: async () => {
1710
1877
  const { invoke } = await import('@tauri-apps/api/core')
1711
- try {
1712
- const image = await captureSharedScreen()
1713
- window.localStorage.setItem('mint:pending-screen-capture', image)
1714
- } catch (reason) {
1715
- console.warn('Screen share capture failed before opening picker:', reason)
1716
- const image = await invoke<string>('capture_silent_screen')
1717
- window.localStorage.setItem('mint:pending-screen-capture', image)
1718
- }
1719
- return invoke('start_screen_capture')
1878
+ const image = navigator.userAgent.toLowerCase().includes('linux')
1879
+ ? await invoke<string>('capture_chat_screen')
1880
+ : await captureSharedScreen()
1881
+ return invoke('start_screen_capture', { image })
1720
1882
  },
1721
1883
  onVisionReady: async (callback) => {
1722
1884
  const { listen } = await import('@tauri-apps/api/event')
@@ -2258,9 +2420,12 @@ const _apiCheck: MintPlatformApi = {
2258
2420
  getTtsUrls,
2259
2421
  cancelChatMessage,
2260
2422
  getRecentInteractions,
2423
+ getConversationSnapshot,
2424
+ getConversationChanges,
2261
2425
  saveSystemInteraction,
2262
2426
  saveInteractionAgentActivity,
2263
2427
  listChatSessions,
2428
+ updateChatSessionWorkspace,
2264
2429
  deleteChatSession,
2265
2430
  renameChatSession,
2266
2431
  getProfileValue,
@@ -2277,7 +2442,13 @@ const _apiCheck: MintPlatformApi = {
2277
2442
  generateImages,
2278
2443
  getImageGenProviders,
2279
2444
  setDefaultImageProvider,
2280
- getWorkspaceTree,
2445
+ getWorkspaceSnapshot,
2446
+ getWorkspaceGitDiff,
2447
+ getGitBranchInfo,
2448
+ switchGitBranch,
2449
+ createGitBranch,
2450
+ checkoutRemoteGitBranch,
2451
+ getGitGraph,
2281
2452
  createWorkspaceFile,
2282
2453
  createWorkspaceFolder,
2283
2454
  deleteWorkspaceItem,