@pheem49/mint 1.17.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +6 -6
- package/Cargo.toml +2 -2
- package/README.md +8 -2
- package/Release_Note.md +222 -71
- package/crates/mint-cli/src/agent/diff_render.rs +66 -44
- package/crates/mint-cli/src/agent/live_status.rs +21 -4
- package/crates/mint-cli/src/agent/markdown_render.rs +342 -5
- package/crates/mint-cli/src/agent.rs +25 -10
- package/crates/mint-cli/src/commands/agent.rs +4 -92
- package/crates/mint-cli/src/commands/browser.rs +2 -15
- package/crates/mint-cli/src/commands/integrations.rs +3 -3
- package/crates/mint-cli/src/commands/mod.rs +0 -3
- package/crates/mint-cli/src/commands/tailnet_web.rs +1 -0
- package/crates/mint-cli/src/interactive/chat_tui/dialog.rs +572 -0
- package/crates/mint-cli/src/interactive/chat_tui/mod.rs +1427 -0
- package/crates/mint-cli/src/interactive/chat_tui/render.rs +1524 -0
- package/crates/mint-cli/src/interactive/chat_tui/selection.rs +401 -0
- package/crates/mint-cli/src/interactive/chat_tui/state.rs +1833 -0
- package/crates/mint-cli/src/interactive/chat_tui/tests.rs +3414 -0
- package/crates/mint-cli/src/interactive/chat_tui/thought.rs +202 -0
- package/crates/mint-cli/src/interactive/chat_tui/transcript.rs +728 -0
- package/crates/mint-cli/src/interactive/chat_tui/watermark.rs +148 -0
- package/crates/mint-cli/src/interactive/command_ui.rs +53 -5
- package/crates/mint-cli/src/interactive/composer.rs +186 -0
- package/crates/mint-cli/src/interactive/format.rs +78 -3
- package/crates/mint-cli/src/interactive/input_box.rs +61 -1
- package/crates/mint-cli/src/interactive/resume_picker.rs +367 -25
- package/crates/mint-cli/src/interactive/slash_commands.rs +648 -371
- package/crates/mint-cli/src/interactive/tool_activity.rs +93 -20
- package/crates/mint-cli/src/interactive.rs +37 -0
- package/crates/mint-cli/src/main.rs +6 -3
- package/crates/mint-cli/src/markdown.rs +2 -37
- package/crates/mint-cli/src/onboard.rs +700 -282
- package/crates/mint-cli/src/setup.rs +1342 -624
- package/crates/mint-cli/src/terminal_theme.rs +159 -35
- package/crates/mint-cli/tests/library_intake.rs +1 -0
- package/crates/mint-core/src/agent/chat/anthropic.rs +318 -0
- package/crates/mint-core/src/agent/chat/custom.rs +149 -0
- package/crates/mint-core/src/agent/chat/gemini.rs +518 -0
- package/crates/mint-core/src/agent/chat/mod.rs +857 -0
- package/crates/mint-core/src/agent/chat/ollama.rs +321 -0
- package/crates/mint-core/src/agent/chat/openai.rs +582 -0
- package/crates/mint-core/src/agent/chat/streaming.rs +469 -0
- package/crates/mint-core/src/agent/chat/tests.rs +1479 -0
- package/crates/mint-core/src/agent/memory.rs +56 -2
- package/crates/mint-core/src/agent/tasks.rs +2 -2
- package/crates/mint-core/src/api_server/routes/chat.rs +24 -2
- package/crates/mint-core/src/api_server/routes/gemini_live.rs +14 -1
- package/crates/mint-core/src/api_server/routes/html_preview.rs +1 -8
- package/crates/mint-core/src/api_server/routes/sessions.rs +21 -0
- package/crates/mint-core/src/avatar_bridge.rs +0 -22
- package/crates/mint-core/src/browser/cdp.rs +10 -4
- package/crates/mint-core/src/browser/headless.rs +582 -0
- package/crates/mint-core/src/browser/input.rs +7 -62
- package/crates/mint-core/src/browser/interact.rs +0 -14
- package/crates/mint-core/src/browser/mod.rs +8 -29
- package/crates/mint-core/src/browser/navigate.rs +2 -36
- package/crates/mint-core/src/browser/runtime.rs +2 -4
- package/crates/mint-core/src/browser/session.rs +50 -466
- package/crates/mint-core/src/browser/workflow.rs +142 -32
- package/crates/mint-core/src/cron/store.rs +2 -2
- package/crates/mint-core/src/integrations/mcp.rs +6 -8
- package/crates/mint-core/src/lib.rs +0 -5
- package/crates/mint-core/src/media/gemini_live.rs +636 -86
- package/crates/mint-core/src/media/library/migration.rs +26 -0
- package/crates/mint-core/src/media/library/tests.rs +1 -1
- package/crates/mint-core/src/media/library/thumbnails.rs +8 -2
- package/crates/mint-core/src/media/pictures.rs +1 -1
- package/crates/mint-core/src/media/tool_images.rs +92 -1
- package/crates/mint-core/src/mods/manager.rs +101 -35
- package/crates/mint-core/src/orchestration/context_render.rs +441 -24
- package/crates/mint-core/src/orchestration/decision_parsing.rs +531 -16
- package/crates/mint-core/src/orchestration/full_skill_result_tests.rs +12 -0
- package/crates/mint-core/src/orchestration/loop_guard.rs +145 -0
- package/crates/mint-core/src/orchestration/mcp_outcome_tests.rs +864 -0
- package/crates/mint-core/src/orchestration/memory_skill.rs +88 -28
- package/crates/mint-core/src/orchestration/mod.rs +320 -4249
- package/crates/mint-core/src/orchestration/reliability.rs +67 -27
- package/crates/mint-core/src/orchestration/review_regressions.rs +5 -0
- package/crates/mint-core/src/orchestration/tests.rs +1665 -0
- package/crates/mint-core/src/orchestration/tools/dispatch.rs +967 -0
- package/crates/mint-core/src/orchestration/tools/files.rs +1 -0
- package/crates/mint-core/src/orchestration/tools/mod.rs +5 -1
- package/crates/mint-core/src/orchestration/tools/planning.rs +102 -42
- package/crates/mint-core/src/orchestration/tools/shell.rs +129 -58
- package/crates/mint-core/src/orchestration/truncation.rs +170 -13
- package/crates/mint-core/src/orchestration/types.rs +648 -0
- package/crates/mint-core/src/orchestration/verification.rs +0 -3
- package/crates/mint-core/src/orchestration/workspace_helpers.rs +24 -6
- package/crates/mint-core/src/prompts/agent.rs +52 -76
- package/crates/mint-core/src/prompts/tool_catalog.rs +8 -151
- package/crates/mint-core/src/search/files.rs +20 -0
- package/crates/mint-core/src/slash/mod.rs +228 -265
- package/crates/mint-core/src/slash/models.rs +6 -1
- package/crates/mint-core/src/system/bg_shell.rs +1 -0
- package/crates/mint-core/src/system/config.rs +176 -34
- package/crates/mint-mod-runtime/src/lib.rs +37 -23
- package/out/web/assets/ArtifactPreviewPanel-Cx6BVOOF.js +2 -0
- package/out/web/assets/CalculationCard-D2E74u5q.js +1 -0
- package/out/web/assets/CliSessionsView-ZbdtSjvK.css +1 -0
- package/out/web/assets/{CliSessionsView-MI8kXMAb.js → CliSessionsView-z5i6qGyb.js} +1 -1
- package/out/web/assets/CodeReviewPage-BK2bOScd.css +1 -0
- package/out/web/assets/CodeReviewPage-Dp6zHuHu.js +2 -0
- package/out/web/assets/{CommandPalette-BD8SlTE5.js → CommandPalette-DaKlzbKs.js} +1 -1
- package/out/web/assets/ImageGenCard-BMCJHP9O.js +1 -0
- package/out/web/assets/ImageSearchCard-Cld_SOUg.js +1 -0
- package/out/web/assets/{ImageStudioPanel-BP7N4rLr.js → ImageStudioPanel-B5N7TjeB.js} +1 -1
- package/out/web/assets/LibraryPage-CMB89rJ0.css +1 -0
- package/out/web/assets/LibraryPage-DbZEi4W_.js +2 -0
- package/out/web/assets/LinkedFoldersView-9B9DIPoZ.js +1 -0
- package/out/web/assets/{McpRegistryPicker-CoS83vtc.js → McpRegistryPicker-DnXPlzI7.js} +1 -1
- package/out/web/assets/McpServersView-CiNBNUl4.js +1 -0
- package/out/web/assets/MermaidCard-BBDNEXbY.js +2 -0
- package/out/web/assets/MintDashboard-C_UYPoNV.js +119 -0
- package/out/web/assets/MintDashboard-DTd8C_c8.css +1 -0
- package/out/web/assets/PlanCard-C2x5pajq.js +1 -0
- package/out/web/assets/{PluginsView-jBYmcKh4.js → PluginsView-DoTg9MVa.js} +1 -1
- package/out/web/assets/RewindModal-B5oowrR0.js +1 -0
- package/out/web/assets/{ScheduledTasksView-5uw9-V9H.js → ScheduledTasksView-BD5DVPkZ.js} +1 -1
- package/out/web/assets/{SelectField-DXBQtrUK.js → SelectField-Cy6CghrU.js} +1 -1
- package/out/web/assets/SettingsWindow-BYl_oCFh.js +4 -0
- package/out/web/assets/SettingsWindow-Ckcgnjt8.css +1 -0
- package/out/web/assets/{SkillsView-C-gp9J7m.js → SkillsView-CIeWwq5z.js} +1 -1
- package/out/web/assets/StockCard-DxUciKyp.js +1 -0
- package/out/web/assets/ToolSurfacePage-qBgs_VHq.css +1 -0
- package/out/web/assets/ToolSurfacePage-saVbVrkE.js +38 -0
- package/out/web/assets/{UiFeatureCard-6BwxTOCe.js → UiFeatureCard-CdY0hGWy.js} +1 -1
- package/out/web/assets/{UiGridCard-DvZcLNxb.js → UiGridCard-BBK3I5hC.js} +1 -1
- package/out/web/assets/UiMockupWidget-CpR9EDuc.js +1 -0
- package/out/web/assets/{VeoStudioPanel-DOj7_WR3.css → VeoStudioPanel-9kU9YLEN.css} +1 -1
- package/out/web/assets/{VeoStudioPanel-DfsOJKv0.js → VeoStudioPanel-Co6-wEWM.js} +2 -2
- package/out/web/assets/WeatherCard-Buzi7Vfu.js +1 -0
- package/out/web/assets/WorkspacePdfPreview-Bi8Zzyir.js +2 -0
- package/out/web/assets/{abnfDiagram-VCTEODGH-BOo3Ckng.js → abnfDiagram-VCTEODGH-CMfR95N2.js} +1 -1
- package/out/web/assets/{architecture-7GRP2DOG-ZOwheW3n.js → architecture-7GRP2DOG-DhAM4HyO.js} +1 -1
- package/out/web/assets/{architectureDiagram-5GKGNRK7-DC2FDzVd.js → architectureDiagram-5GKGNRK7-Yk3TUJ_F.js} +1 -1
- package/out/web/assets/{blockDiagram-I7D4REHJ-BrKFWdAH.js → blockDiagram-I7D4REHJ-X9fBgJik.js} +1 -1
- package/out/web/assets/{c4Diagram-7LVT6UL2-BHTHK1Yd.js → c4Diagram-7LVT6UL2-Bk9x7N-8.js} +1 -1
- package/out/web/assets/{chunk-4HAMMTFA-BYFkZwNj.js → chunk-4HAMMTFA-Dx5fk1_0.js} +1 -1
- package/out/web/assets/{chunk-75Z2AOVW-BSKfSKSA.js → chunk-75Z2AOVW-BszTQoM4.js} +1 -1
- package/out/web/assets/{chunk-DU6HZSFF-vIhsiW6n.js → chunk-DU6HZSFF-DK-As3rk.js} +1 -1
- package/out/web/assets/{chunk-F27PBJKO-BlYpW9xq.js → chunk-F27PBJKO-LmncZZIS.js} +1 -1
- package/out/web/assets/{chunk-GMAD6QVW-BIBz_Ug5.js → chunk-GMAD6QVW-DSQ_sDRJ.js} +1 -1
- package/out/web/assets/{chunk-GVQU2GXP-NPSHxeqC.js → chunk-GVQU2GXP-Cno3ulje.js} +1 -1
- package/out/web/assets/{chunk-IMKFNOWR-YlJK8_Fp.js → chunk-IMKFNOWR-bIzfY9Jc.js} +1 -1
- package/out/web/assets/{chunk-L3NEJ4N5-DMYi4-af.js → chunk-L3NEJ4N5-Dl6eOa0D.js} +1 -1
- package/out/web/assets/{chunk-OSK3NFVY-Begd3-jA.js → chunk-OSK3NFVY-BaUGJ-cM.js} +1 -1
- package/out/web/assets/{chunk-P2QGCYS3-D1I4xFHN.js → chunk-P2QGCYS3-_066ndhH.js} +1 -1
- package/out/web/assets/{chunk-POPQ4Y6H-CafZZzNE.js → chunk-POPQ4Y6H-YT1AKhTv.js} +1 -1
- package/out/web/assets/{chunk-PWAF6VOD-Dwh6_Lnt.js → chunk-PWAF6VOD-CrEgDsxh.js} +1 -1
- package/out/web/assets/{chunk-SHT3W25Y-B0XrCSEb.js → chunk-SHT3W25Y-_KwaRLOl.js} +1 -1
- package/out/web/assets/{chunk-SVP7TREG-CxLsddxC.js → chunk-SVP7TREG-BQ1qb32L.js} +1 -1
- package/out/web/assets/{chunk-TICWLB2K-y156QInb.js → chunk-TICWLB2K-BDyehCtg.js} +1 -1
- package/out/web/assets/classDiagram-ZZMXUADV-BoSpzRCJ.js +1 -0
- package/out/web/assets/classDiagram-v2-VYDZK3BY-BoSpzRCJ.js +1 -0
- package/out/web/assets/{config-DqXJXeZM.css → config-2suVFPZg.css} +1 -1
- package/out/web/assets/config-CkRCdkxn.js +2 -0
- package/out/web/assets/{cynefin-OW5HDTMX-SMVvrLf-.js → cynefin-OW5HDTMX-Dl_31aaN.js} +1 -1
- package/out/web/assets/{cynefinDiagram-5FMLGOSQ-rZznN24T.js → cynefinDiagram-5FMLGOSQ-Bpir8jha.js} +1 -1
- package/out/web/assets/{dagre-GXQ25YYZ-BOToydFu.js → dagre-GXQ25YYZ-D9xu3nsq.js} +1 -1
- package/out/web/assets/{diagram-S7CK7UJ4-TMVaGQEJ.js → diagram-S7CK7UJ4-DeveoEeB.js} +1 -1
- package/out/web/assets/{diagram-UQ7AKVKN-C2JK-GP2.js → diagram-UQ7AKVKN-p4xWRESV.js} +1 -1
- package/out/web/assets/{diagram-VSXAHHWV-Cw8VSi2K.js → diagram-VSXAHHWV-C7qz9NDF.js} +1 -1
- package/out/web/assets/{diagram-VX7I27RA-DXp4fKk9.js → diagram-VX7I27RA-DRiCa3Vd.js} +1 -1
- package/out/web/assets/{diagram-Z3DM3KII-CzSicYiW.js → diagram-Z3DM3KII-Bt7zduQX.js} +1 -1
- package/out/web/assets/{ebnfDiagram-PWID7BFC-Dqj-zqPu.js → ebnfDiagram-PWID7BFC-DV9WpwdR.js} +1 -1
- package/out/web/assets/{erDiagram-RLTQ6QDP-DZwFZAuD.js → erDiagram-RLTQ6QDP-BJ_nwG2m.js} +1 -1
- package/out/web/assets/{eventmodeling-NTZA5JFV-C0O-Lvgp.js → eventmodeling-NTZA5JFV-BTBMrfVa.js} +1 -1
- package/out/web/assets/flowDiagram-HODETNUW-Cdlq3cJL.js +1 -0
- package/out/web/assets/{ganttDiagram-EL5Y4UJY-Da4ULXTl.js → ganttDiagram-EL5Y4UJY-DQLdsXrC.js} +1 -1
- package/out/web/assets/{gitGraph-4MIJSDKK-B9wNFZIP.js → gitGraph-4MIJSDKK-CL1OEOQ_.js} +1 -1
- package/out/web/assets/{gitGraphDiagram-WWUBYQGX-RjrhB0MP.js → gitGraphDiagram-WWUBYQGX-8cSi42H7.js} +1 -1
- package/out/web/assets/index-BocxnrDG.js +168 -0
- package/out/web/assets/index-yeh_r55a.css +1 -0
- package/out/web/assets/{info-A6RAGUB7-B3dfCpeY.js → info-A6RAGUB7-C1zsX5sc.js} +1 -1
- package/out/web/assets/{infoDiagram-27XIBGKW-QVWkLVx7.js → infoDiagram-27XIBGKW-DsRYtIyI.js} +1 -1
- package/out/web/assets/{ishikawaDiagram-5VMMS53U-CLFNIRI9.js → ishikawaDiagram-5VMMS53U-B2crwIXj.js} +1 -1
- package/out/web/assets/{journeyDiagram-3NMN7TZE-fgOQadYF.js → journeyDiagram-3NMN7TZE-BTH-GyVR.js} +1 -1
- package/out/web/assets/{kanban-definition-UXKFOSKX-G3Q_9g9O.js → kanban-definition-UXKFOSKX-BeRfCnuA.js} +1 -1
- package/out/web/assets/{mermaid-parser.core-v3Jm7nco.js → mermaid-parser.core-BJwgCBBc.js} +3 -3
- package/out/web/assets/{mermaid.core-DTEjLUA1.js → mermaid.core-CsDDodN8.js} +4 -4
- package/out/web/assets/{mindmap-definition-YA3MSWOX-C_D42_fF.js → mindmap-definition-YA3MSWOX-B42efOQ1.js} +1 -1
- package/out/web/assets/{modelManager-BPLycQrN.js → modelManager-B3ZFMh8v.js} +2 -2
- package/out/web/assets/{oauthManager-BUK7ic7q.js → oauthManager-Ch5Du2fF.js} +1 -1
- package/out/web/assets/{packet-AYTQ26CC-B-R-SHlF.js → packet-AYTQ26CC-B6xUyE6r.js} +1 -1
- package/out/web/assets/{pegDiagram-XKGWAZYB-Da2q_giz.js → pegDiagram-XKGWAZYB-1LabVycL.js} +1 -1
- package/out/web/assets/{pie-WAS4IAKB-BC8F0N7-.js → pie-WAS4IAKB-DJwo-nf_.js} +1 -1
- package/out/web/assets/{pieDiagram-E7YTZNPT-Iy9REJNC.js → pieDiagram-E7YTZNPT-icmAqzy4.js} +1 -1
- package/out/web/assets/{quadrantDiagram-AXDQQJYC-ztsiYw7h.js → quadrantDiagram-AXDQQJYC-CZ-wEx41.js} +1 -1
- package/out/web/assets/{radar-RG4KPBEZ-B_1P8Z_z.js → radar-RG4KPBEZ-D7d-Xriw.js} +1 -1
- package/out/web/assets/{railroad-74A4TZTK-DuTqczSo.js → railroad-74A4TZTK-viuhdYbs.js} +1 -1
- package/out/web/assets/{railroad-abnf-HS5TGJTU-Df29WLmp.js → railroad-abnf-HS5TGJTU-DNXiCNea.js} +1 -1
- package/out/web/assets/{railroad-ebnf-LZEXJU2U-ePFMo-qp.js → railroad-ebnf-LZEXJU2U-nkSu1-0C.js} +1 -1
- package/out/web/assets/{railroad-peg-WCYAUIDC-DYXLW4_E.js → railroad-peg-WCYAUIDC-BhbMeQzz.js} +1 -1
- package/out/web/assets/{railroadDiagram-O6MQD6OU-LStnZf2S.js → railroadDiagram-O6MQD6OU-CLpG1jUX.js} +1 -1
- package/out/web/assets/{requirementDiagram-BXWQKSXE-DmzonMH-.js → requirementDiagram-BXWQKSXE-kRDrvWrc.js} +1 -1
- package/out/web/assets/{sankeyDiagram-P5KCCOFB-B8vjmUU1.js → sankeyDiagram-P5KCCOFB-DxAwmq4x.js} +1 -1
- package/out/web/assets/{sequenceDiagram-WJ2MYXX4-CTnplOAX.js → sequenceDiagram-WJ2MYXX4-aLgY-6Wz.js} +1 -1
- package/out/web/assets/{stateDiagram-D77RDMKH-BFrIaLdI.js → stateDiagram-D77RDMKH-D5QWfOhp.js} +1 -1
- package/out/web/assets/stateDiagram-v2-MP3YSRHH-D6OiZoAP.js +1 -0
- package/out/web/assets/{swimlanes-42K2YHIH-BXGngUNU.js → swimlanes-42K2YHIH-CRs5UyA-.js} +1 -1
- package/out/web/assets/swimlanesDiagram-VR7AAH4N-UgEXIsV0.js +8 -0
- package/out/web/assets/syntaxHighlight-C-wAGT84.js +3 -0
- package/out/web/assets/{timeline-definition-24CTP7MA-CegH7n43.js → timeline-definition-24CTP7MA-Denqd9qb.js} +1 -1
- package/out/web/assets/{treeView-Q6P3EWNA-DTpJv2Tw.js → treeView-Q6P3EWNA-0my3Z3s4.js} +1 -1
- package/out/web/assets/{treemap-WGGIJYW6-i8M9iJU6.js → treemap-WGGIJYW6-B_EjkLYq.js} +1 -1
- package/out/web/assets/{vennDiagram-4TSXK5OY-Dpzo1S8U.js → vennDiagram-4TSXK5OY-DxVg3Ewr.js} +1 -1
- package/out/web/assets/{wardley-WFR3VGLG-BrNsgtfw.js → wardley-WFR3VGLG-CGD-Tj4p.js} +1 -1
- package/out/web/assets/{wardleyDiagram-VM6X3IG4-lQ92LFE1.js → wardleyDiagram-VM6X3IG4-CmfS39Xm.js} +1 -1
- package/out/web/assets/{xychartDiagram-S5SC5T6Z-BaOaEoBd.js → xychartDiagram-S5SC5T6Z-BVM9bKis.js} +1 -1
- package/out/web/index-web.html +2 -2
- package/out/web/index.html +2 -2
- package/package.json +2 -2
- package/shared-modules/CODEOWNERS +3 -3
- package/shared-modules/SDL2/SDL2_mixer.json +27 -0
- package/shared-modules/appstream/README.md +13 -0
- package/shared-modules/appstream/appstream-compose.json +111 -0
- package/shared-modules/dbus-glib/dbus-glib.json +2 -2
- package/shared-modules/libportal/libportal.json +23 -0
- package/shared-modules/linux-audio/fluidsynth2-static.json +2 -2
- package/shared-modules/linux-audio/fluidsynth2.json +2 -2
- package/shared-modules/linux-audio/libinstpatch.json +2 -2
- package/shared-modules/linux-audio/liblo-static.json +3 -0
- package/shared-modules/luajit/luajit.json +2 -2
- package/shared-modules/squashfs-tools/squashfs-tools.json +0 -3
- package/slash-commands.json +7 -2
- package/src/renderer/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/src/renderer/shared/agentProgress.ts +51 -3
- package/src/renderer/shared/components/Settings/AutomationTab.tsx +2 -56
- package/src/renderer/shared/components/Settings/AvatarCropModal.tsx +15 -1
- package/src/renderer/shared/components/Settings/GeneralTab.tsx +25 -12
- package/src/renderer/shared/components/Settings/ThemeTab.test.tsx +45 -0
- package/src/renderer/shared/components/Settings/ThemeTab.tsx +106 -3
- package/src/renderer/shared/components/activity/AgentActivityDrawer.tsx +67 -17
- package/src/renderer/shared/components/activity/AgentActivityTable.tsx +376 -134
- package/src/renderer/shared/components/activity/AskUserActivityCard.test.tsx +122 -0
- package/src/renderer/shared/components/activity/AskUserActivityCard.tsx +70 -0
- package/src/renderer/shared/components/activity/McpToolResults.tsx +39 -2
- package/src/renderer/shared/components/activity/SubagentDagView.tsx +7 -7
- package/src/renderer/shared/components/activity/ViewedImages.tsx +41 -2
- package/src/renderer/shared/components/app/ChunkErrorBoundary.tsx +3 -3
- package/src/renderer/shared/components/app/CommandPalette.tsx +7 -7
- package/src/renderer/shared/components/app/DesktopTitlebar.tsx +2 -2
- package/src/renderer/shared/components/app/MintDashboard.tsx +27 -17
- package/src/renderer/shared/components/app/ModalErrorBoundary.tsx +3 -3
- package/src/renderer/shared/components/cards/CalculationCard.tsx +3 -3
- package/src/renderer/shared/components/cards/ImageGenCard.tsx +2 -2
- package/src/renderer/shared/components/cards/ImageSearchCard.tsx +2 -2
- package/src/renderer/shared/components/cards/MermaidCard.tsx +1 -1
- package/src/renderer/shared/components/cards/PlanCard.test.tsx +41 -0
- package/src/renderer/shared/components/cards/PlanCard.tsx +32 -0
- package/src/renderer/shared/components/cards/ReleaseNotesCard.test.tsx +29 -0
- package/src/renderer/shared/components/cards/ReleaseNotesCard.tsx +137 -0
- package/src/renderer/shared/components/cards/StockCard.tsx +7 -7
- package/src/renderer/shared/components/cards/ToolResultCards.tsx +11 -3
- package/src/renderer/shared/components/cards/UiMockupWidget.tsx +4 -4
- package/src/renderer/shared/components/cards/WeatherCard.tsx +5 -5
- package/src/renderer/shared/components/chat/ApprovalCard.test.tsx +11 -0
- package/src/renderer/shared/components/chat/ApprovalCard.tsx +21 -2
- package/src/renderer/shared/components/chat/ArtifactCards.test.tsx +69 -0
- package/src/renderer/shared/components/chat/ArtifactCards.tsx +238 -0
- package/src/renderer/shared/components/chat/AttachedDocumentCard.test.tsx +39 -0
- package/src/renderer/shared/components/chat/AttachedDocumentCard.tsx +220 -0
- package/src/renderer/shared/components/chat/ChatCodeBlock.test.tsx +33 -0
- package/src/renderer/shared/components/chat/ChatCodeBlock.tsx +15 -1
- package/src/renderer/shared/components/chat/ChatMessageItem.test.tsx +40 -2
- package/src/renderer/shared/components/chat/ChatMessageItem.tsx +180 -34
- package/src/renderer/shared/components/chat/ChatModeSelector.css +227 -0
- package/src/renderer/shared/components/chat/ChatModeSelector.test.tsx +45 -0
- package/src/renderer/shared/components/chat/ChatModeSelector.tsx +198 -0
- package/src/renderer/shared/components/chat/ChatPanel.test.tsx +22 -0
- package/src/renderer/shared/components/chat/ChatPanel.tsx +227 -53
- package/src/renderer/shared/components/chat/DiffReviewModal.tsx +6 -6
- package/src/renderer/shared/components/chat/GeminiLiveOverlay.test.tsx +142 -1
- package/src/renderer/shared/components/chat/GeminiLiveOverlay.tsx +45 -3
- package/src/renderer/shared/components/chat/ModelSelectorPopover.tsx +42 -14
- package/src/renderer/shared/components/chat/RewindModal.tsx +10 -10
- package/src/renderer/shared/components/chat/SlashSuggestions.test.tsx +14 -0
- package/src/renderer/shared/components/chat/SourcesBlock.test.tsx +53 -0
- package/src/renderer/shared/components/chat/SourcesBlock.tsx +236 -90
- package/src/renderer/shared/components/chat/TurnFileChanges.test.tsx +45 -1
- package/src/renderer/shared/components/chat/TurnFileChanges.tsx +202 -169
- package/src/renderer/shared/components/extensions/CliSessionsView.tsx +5 -4
- package/src/renderer/shared/components/extensions/McpRegistryPicker.tsx +3 -3
- package/src/renderer/shared/components/studio/LibraryPage.tsx +48 -5
- package/src/renderer/shared/components/workspace/ArtifactPreviewPanel.tsx +125 -13
- package/src/renderer/shared/components/workspace/CodeReviewPage.test.tsx +50 -0
- package/src/renderer/shared/components/workspace/CodeReviewPage.tsx +77 -16
- package/src/renderer/shared/components/workspace/GitBranchSelector.tsx +78 -22
- package/src/renderer/shared/components/workspace/ToolSurfacePage.test.tsx +13 -0
- package/src/renderer/shared/components/workspace/ToolSurfacePage.tsx +48 -28
- package/src/renderer/shared/components/workspace/WorkspacePdfPreview.tsx +266 -47
- package/src/renderer/shared/components/workspace/WorkspacePreviewActions.test.tsx +18 -6
- package/src/renderer/shared/components/workspace/background-terminals.css +11 -11
- package/src/renderer/shared/constants/config.ts +1 -5
- package/src/renderer/shared/constants/models.test.ts +51 -0
- package/src/renderer/shared/constants/models.ts +139 -32
- package/src/renderer/shared/conversation/lifecycle.test.ts +91 -3
- package/src/renderer/shared/conversation/lifecycle.ts +104 -5
- package/src/renderer/shared/conversation/progressiveStream.test.ts +83 -0
- package/src/renderer/shared/conversation/progressiveStream.ts +219 -0
- package/src/renderer/shared/css/agent-observability.css +133 -0
- package/src/renderer/shared/css/chat-ui-cards.css +13 -13
- package/src/renderer/shared/css/code-review.css +63 -34
- package/src/renderer/shared/css/code-sessions.css +47 -18
- package/src/renderer/shared/css/collapsed-paste.css +1 -1
- package/src/renderer/shared/css/error-notice.css +1 -1
- package/src/renderer/shared/css/file-changes.css +165 -80
- package/src/renderer/shared/css/library.css +105 -10
- package/src/renderer/shared/css/management-views.css +1 -1
- package/src/renderer/shared/css/mcp-results.css +5 -5
- package/src/renderer/shared/css/model-selector.css +18 -18
- package/src/renderer/shared/css/mods.css +7 -7
- package/src/renderer/shared/css/notification-notice.css +2 -2
- package/src/renderer/shared/css/queued-messages.css +5 -5
- package/src/renderer/shared/css/settings/general.css +18 -13
- package/src/renderer/shared/css/settings/profile.css +5 -5
- package/src/renderer/shared/css/settings/theme.css +5 -5
- package/src/renderer/shared/css/slash-choice.css +2 -2
- package/src/renderer/shared/css/slash-suggestions.css +3 -3
- package/src/renderer/shared/css/sources-block.css +41 -2
- package/src/renderer/shared/css/tools-panel.css +2 -2
- package/src/renderer/shared/css/ui-tailwind.css +8 -0
- package/src/renderer/shared/css/veo-studio.css +2 -2
- package/src/renderer/shared/css/viewed-images.css +7 -7
- package/src/renderer/shared/platform.ts +2 -1
- package/src/renderer/shared/theme/themeManager.test.ts +17 -0
- package/src/renderer/shared/theme/themeManager.ts +21 -4
- package/src/renderer/shared/theme/themes.ts +54 -0
- package/src/renderer/shared/theme/tokens.css +6 -4
- package/src/renderer/shared/types.ts +1 -1
- package/src/renderer/shared/utils/agentActivity.test.ts +468 -2
- package/src/renderer/shared/utils/agentActivity.ts +602 -35
- package/src/renderer/shared/utils/artifactBrowser.test.ts +37 -32
- package/src/renderer/shared/utils/artifactBrowser.ts +17 -19
- package/src/renderer/shared/utils/attachedDocument.test.ts +73 -0
- package/src/renderer/shared/utils/attachedDocument.ts +49 -0
- package/src/renderer/shared/utils/fileIcons.test.ts +59 -0
- package/src/renderer/shared/utils/fileIcons.ts +149 -16
- package/src/renderer/shared/utils/markdown.tsx +72 -19
- package/src/renderer/shared/utils/markdown.webImages.test.tsx +16 -0
- package/src/renderer/shared/utils/mcpResults.test.tsx +29 -0
- package/src/renderer/shared/utils/slashCommandProcessor.ts +4 -1
- package/src/renderer/shared/utils/syntaxHighlight.test.tsx +11 -1
- package/src/renderer/shared/utils/syntaxHighlight.tsx +51 -3
- package/src/renderer/shared/utils/useGeminiLiveVoice.ts +324 -51
- package/src/renderer/shared/utils/workspaceDrag.test.ts +153 -0
- package/src/renderer/shared/utils/workspaceDrag.ts +142 -0
- package/src/renderer/shared/utils/workspaceMedia.ts +10 -2
- package/src/renderer/src/App.tsx +14 -8
- package/src/renderer/src/agentProgress.ts +1 -0
- package/src/renderer/src/components/ScreenPicker.css +1 -1
- package/src/renderer/src/components/WorkspacePanel.tsx +6 -5
- package/src/renderer/src/css/app-shell.css +4 -4
- package/src/renderer/src/css/chat.css +1261 -241
- package/src/renderer/src/css/desktop-tools.css +11 -11
- package/src/renderer/src/css/sidebar-workspace.css +2 -2
- package/src/renderer/src/css/tool-surfaces.css +12 -12
- package/src/renderer/src/index.css +38 -20
- package/src/renderer/src/tauri.ts +22 -2
- package/src/renderer/src-web/App.tsx +14 -0
- package/src/renderer/src-web/agentProgress.ts +1 -0
- package/src/renderer/src-web/css/app-shell.css +4 -4
- package/src/renderer/src-web/css/chat.css +1278 -190
- package/src/renderer/src-web/css/mobile.css +29 -13
- package/src/renderer/src-web/css/settings/mobile.css +2 -2
- package/src/renderer/src-web/css/sidebar-workspace.css +1 -1
- package/src/renderer/src-web/index.css +38 -20
- package/src/renderer/src-web/tauri.ts +22 -2
- package/src/renderer/tests/browserArtifacts.browser.tsx +1 -1
- package/src/renderer/tests/library.browser.tsx +3 -0
- package/src/renderer/tests/liveVoice.browser.html +1 -0
- package/src/renderer/tests/workspaceDrop.browser.tsx +1 -1
- package/src-tauri/src/app/lifecycle.rs +1 -14
- package/src-tauri/src/background/headless.rs +14 -8
- package/src-tauri/src/commands/conversation.rs +38 -0
- package/src-tauri/src/native/mod.rs +0 -1
- package/src-tauri/src/native/system.rs +4 -47
- package/crates/mint-cli/src/interactive/chat_tui.rs +0 -8855
- package/crates/mint-core/src/agent/chat.rs +0 -4394
- package/crates/mint-core/src/browser/lifecycle.rs +0 -291
- package/crates/mint-core/src/browser/logging.rs +0 -20
- package/crates/mint-core/src/orchestration/tools/browser.rs +0 -31
- package/out/web/assets/ArtifactPreviewPanel-S0dPfYFx.js +0 -2
- package/out/web/assets/CalculationCard-CRjP3E1j.js +0 -1
- package/out/web/assets/CliSessionsView-C3Br2v5Y.css +0 -1
- package/out/web/assets/CodeReviewPage-CUJceQme.css +0 -1
- package/out/web/assets/CodeReviewPage-VCUgPla_.js +0 -2
- package/out/web/assets/ImageGenCard-BCXxkVJX.js +0 -1
- package/out/web/assets/ImageSearchCard-N3yQOr8Z.js +0 -1
- package/out/web/assets/LibraryPage-DAxUTAg7.css +0 -1
- package/out/web/assets/LibraryPage-WlviRdR8.js +0 -2
- package/out/web/assets/LinkedFoldersView-CKRgroWK.js +0 -1
- package/out/web/assets/McpServersView-D3wHnuHg.js +0 -1
- package/out/web/assets/MermaidCard-NqrHdyJW.js +0 -2
- package/out/web/assets/MintDashboard-B2DJsDDO.css +0 -1
- package/out/web/assets/MintDashboard-COw_xol7.js +0 -63
- package/out/web/assets/RewindModal-DempuDod.js +0 -1
- package/out/web/assets/SettingsWindow-2YP3yj7s.js +0 -4
- package/out/web/assets/SettingsWindow-Dz8LQVgD.css +0 -1
- package/out/web/assets/StockCard-BDMCe7mx.js +0 -1
- package/out/web/assets/ToolSurfacePage-B0J_q0Jl.js +0 -38
- package/out/web/assets/ToolSurfacePage-CRIQ1owD.css +0 -1
- package/out/web/assets/UiMockupWidget-DD73QWg1.js +0 -1
- package/out/web/assets/WeatherCard-CPucIfq8.js +0 -1
- package/out/web/assets/WorkspacePdfPreview-Dx_lkjNu.js +0 -2
- package/out/web/assets/classDiagram-ZZMXUADV-BgJ5WtSp.js +0 -1
- package/out/web/assets/classDiagram-v2-VYDZK3BY-BgJ5WtSp.js +0 -1
- package/out/web/assets/config-CvIO5hkn.js +0 -2
- package/out/web/assets/flowDiagram-HODETNUW-uqCHJond.js +0 -1
- package/out/web/assets/index-BmpulIkg.js +0 -168
- package/out/web/assets/index-CkvBwhX_.css +0 -1
- package/out/web/assets/stateDiagram-v2-MP3YSRHH-uf3kdNW4.js +0 -1
- package/out/web/assets/swimlanesDiagram-VR7AAH4N-Y8q5bQce.js +0 -8
- package/shared-modules/libsecret/libsecret.json +0 -23
- package/shared-modules/libusb/libusb.json +0 -27
- package/shared-modules/lzo/lzo.json +0 -27
- package/src/renderer/src/components/BrowserShell.tsx +0 -108
- package/src/renderer/src/components/BrowserSuggestionsPopup.tsx +0 -91
- package/src/renderer/src/components/browser-shell.css +0 -185
- package/src-tauri/src/native/browser.rs +0 -252
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
height: 40px;
|
|
35
35
|
padding: 0;
|
|
36
36
|
border: 1px solid var(--border-default);
|
|
37
|
-
border-radius:
|
|
37
|
+
border-radius: var(--radius-xl, 18px);
|
|
38
38
|
background: var(--bg-surface-raised);
|
|
39
39
|
color: var(--text-primary);
|
|
40
40
|
}
|
|
@@ -406,7 +406,7 @@
|
|
|
406
406
|
height: 52px;
|
|
407
407
|
padding: 0 8px;
|
|
408
408
|
border: 1px solid var(--border-default);
|
|
409
|
-
border-radius:
|
|
409
|
+
border-radius: var(--radius-full, 9999px);
|
|
410
410
|
background: var(--mobile-chrome-bg);
|
|
411
411
|
backdrop-filter: var(--mobile-chrome-filter);
|
|
412
412
|
-webkit-backdrop-filter: var(--mobile-chrome-filter);
|
|
@@ -422,7 +422,7 @@
|
|
|
422
422
|
.chat-header-clear-btn,
|
|
423
423
|
.chat-header-back-btn,
|
|
424
424
|
.web-mobile-nav-btn {
|
|
425
|
-
border-radius:
|
|
425
|
+
border-radius: var(--radius-full, 9999px);
|
|
426
426
|
}
|
|
427
427
|
|
|
428
428
|
.web-mobile-nav-btn,
|
|
@@ -443,7 +443,7 @@
|
|
|
443
443
|
height: 44px;
|
|
444
444
|
padding: 0;
|
|
445
445
|
border: 1px solid var(--border);
|
|
446
|
-
border-radius:
|
|
446
|
+
border-radius: var(--radius-full, 9999px);
|
|
447
447
|
background: var(--mobile-chrome-bg);
|
|
448
448
|
color: var(--text-main);
|
|
449
449
|
backdrop-filter: var(--mobile-chrome-filter);
|
|
@@ -460,7 +460,7 @@
|
|
|
460
460
|
width: min(280px, calc(100vw - 24px)) !important;
|
|
461
461
|
padding-top: calc(20px + env(safe-area-inset-top)) !important;
|
|
462
462
|
padding-bottom: calc(12px + env(safe-area-inset-bottom)) !important;
|
|
463
|
-
border-radius: 0
|
|
463
|
+
border-radius: 0 var(--radius-2xl) var(--radius-2xl) 0;
|
|
464
464
|
border-right: 1px solid var(--border-default);
|
|
465
465
|
}
|
|
466
466
|
|
|
@@ -470,7 +470,7 @@
|
|
|
470
470
|
-webkit-backdrop-filter: var(--mobile-chrome-filter);
|
|
471
471
|
border: 1px solid var(--border-subtle);
|
|
472
472
|
border-bottom: 0;
|
|
473
|
-
border-radius:
|
|
473
|
+
border-radius: var(--radius-2xl) var(--radius-2xl) 0 0;
|
|
474
474
|
}
|
|
475
475
|
|
|
476
476
|
#chat-form,
|
|
@@ -499,12 +499,12 @@
|
|
|
499
499
|
}
|
|
500
500
|
|
|
501
501
|
#chat-form {
|
|
502
|
-
border-radius:
|
|
502
|
+
border-radius: var(--radius-composer, 24px);
|
|
503
503
|
}
|
|
504
504
|
|
|
505
505
|
.user-message .message-bubble {
|
|
506
506
|
background: color-mix(in srgb, var(--accent) 10%, var(--mobile-reading-bg));
|
|
507
|
-
border-radius:
|
|
507
|
+
border-radius: var(--radius-xl) var(--radius-xl) var(--radius-xs, 4px) var(--radius-xl);
|
|
508
508
|
}
|
|
509
509
|
|
|
510
510
|
.app-body .img-studio,
|
|
@@ -514,18 +514,18 @@
|
|
|
514
514
|
|
|
515
515
|
.app-body .img-studio-controls,
|
|
516
516
|
.app-body .veo-studio-controls {
|
|
517
|
-
border-radius:
|
|
517
|
+
border-radius: var(--radius-xl) var(--radius-xl) 0 0;
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
.app-body .management-card,
|
|
521
521
|
.picture-card,
|
|
522
522
|
.img-studio-dropzone {
|
|
523
|
-
border-radius:
|
|
523
|
+
border-radius: var(--radius-xl);
|
|
524
524
|
}
|
|
525
525
|
|
|
526
526
|
.pictures-header {
|
|
527
527
|
border: 1px solid var(--border-default);
|
|
528
|
-
border-radius:
|
|
528
|
+
border-radius: var(--radius-xl);
|
|
529
529
|
padding: 12px;
|
|
530
530
|
}
|
|
531
531
|
|
|
@@ -570,19 +570,35 @@
|
|
|
570
570
|
grid-template-rows: minmax(48px, auto) 40px 40px;
|
|
571
571
|
}
|
|
572
572
|
|
|
573
|
+
#chat-form .chat-composer-pills,
|
|
573
574
|
#chat-form .model-selector-container {
|
|
574
575
|
grid-column: 1 / -1;
|
|
575
576
|
grid-row: 3;
|
|
576
577
|
display: flex;
|
|
578
|
+
align-items: center;
|
|
579
|
+
justify-content: space-between;
|
|
580
|
+
gap: 6px;
|
|
577
581
|
width: 100%;
|
|
578
582
|
min-width: 0;
|
|
579
583
|
height: 40px;
|
|
580
584
|
}
|
|
581
585
|
|
|
586
|
+
#chat-form:not(:has(.mint-attachment)) .chat-composer-pills,
|
|
582
587
|
#chat-form:not(:has(.mint-attachment)) .model-selector-container {
|
|
583
588
|
grid-row: 2;
|
|
584
589
|
}
|
|
585
590
|
|
|
591
|
+
#chat-form .chat-composer-pills .chat-mode-selector-wrap {
|
|
592
|
+
flex: 0 0 auto;
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
#chat-form .chat-composer-pills .model-selector-container {
|
|
596
|
+
flex: 1 1 auto;
|
|
597
|
+
min-width: 0;
|
|
598
|
+
grid-column: unset;
|
|
599
|
+
grid-row: unset;
|
|
600
|
+
}
|
|
601
|
+
|
|
586
602
|
#chat-form .model-selector-trigger {
|
|
587
603
|
display: flex;
|
|
588
604
|
width: 100%;
|
|
@@ -625,7 +641,7 @@
|
|
|
625
641
|
height: min(60dvh, 420px);
|
|
626
642
|
max-height: calc(var(--mint-viewport-height, 100dvh) - 160px);
|
|
627
643
|
flex-direction: column;
|
|
628
|
-
border-radius:
|
|
644
|
+
border-radius: var(--radius-xl);
|
|
629
645
|
background: var(--bg-overlay);
|
|
630
646
|
backdrop-filter: none;
|
|
631
647
|
-webkit-backdrop-filter: none;
|
|
@@ -643,7 +659,7 @@
|
|
|
643
659
|
flex: 1;
|
|
644
660
|
min-height: 40px;
|
|
645
661
|
border: 0;
|
|
646
|
-
border-radius:
|
|
662
|
+
border-radius: var(--radius-lg, 14px);
|
|
647
663
|
background: transparent;
|
|
648
664
|
color: var(--text-soft);
|
|
649
665
|
}
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
.settings-content .setting-feature-card {
|
|
179
179
|
min-width: 0;
|
|
180
180
|
padding: 14px;
|
|
181
|
-
border-radius: 18px;
|
|
181
|
+
border-radius: var(--radius-xl, 18px);
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
.settings-content .provider-card-header {
|
|
@@ -315,6 +315,6 @@
|
|
|
315
315
|
|
|
316
316
|
.settings-nav-search,
|
|
317
317
|
.tab-btn {
|
|
318
|
-
border-radius: 14px;
|
|
318
|
+
border-radius: var(--radius-lg, 14px);
|
|
319
319
|
}
|
|
320
320
|
}
|
|
@@ -51,12 +51,26 @@ button {
|
|
|
51
51
|
background: color-mix(in srgb, var(--accent, #10b981) 12%, transparent);
|
|
52
52
|
border: 1px solid color-mix(in srgb, var(--accent, #10b981) 25%, transparent);
|
|
53
53
|
color: var(--interactive-fg);
|
|
54
|
-
padding:
|
|
55
|
-
border-radius: 6px;
|
|
54
|
+
padding: 1px 6px;
|
|
55
|
+
border-radius: var(--radius-xs, 6px);
|
|
56
56
|
font-weight: 500;
|
|
57
|
-
font-size: 0.
|
|
58
|
-
display: inline-
|
|
57
|
+
font-size: 0.88em;
|
|
58
|
+
display: inline-flex;
|
|
59
|
+
align-items: center;
|
|
60
|
+
gap: 4px;
|
|
61
|
+
vertical-align: middle;
|
|
59
62
|
margin: 0 2px;
|
|
63
|
+
line-height: 1.4;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.chat-mention.chat-file-mention {
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
transition: background 0.15s ease, border-color 0.15s ease;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.chat-mention.chat-file-mention:hover {
|
|
72
|
+
background: color-mix(in srgb, var(--accent, #10b981) 20%, transparent);
|
|
73
|
+
border-color: color-mix(in srgb, var(--accent, #10b981) 40%, transparent);
|
|
60
74
|
}
|
|
61
75
|
|
|
62
76
|
.chat-ui-grid-item:hover {
|
|
@@ -75,7 +89,7 @@ button {
|
|
|
75
89
|
flex-direction: column;
|
|
76
90
|
background: var(--panel-soft, #121214);
|
|
77
91
|
border: 1px solid var(--border, rgba(255, 255, 255, 0.08));
|
|
78
|
-
border-radius:
|
|
92
|
+
border-radius: var(--radius-xl, 18px);
|
|
79
93
|
margin: 12px 0;
|
|
80
94
|
overflow: hidden;
|
|
81
95
|
box-shadow: var(--shadow-sm, 0 4px 16px rgba(0, 0, 0, 0.18));
|
|
@@ -110,7 +124,7 @@ button {
|
|
|
110
124
|
color: var(--text-soft, #64748b);
|
|
111
125
|
background: var(--bg-surface-soft);
|
|
112
126
|
padding: 1px 6px;
|
|
113
|
-
border-radius: 4px;
|
|
127
|
+
border-radius: var(--radius-2xs, 4px);
|
|
114
128
|
}
|
|
115
129
|
|
|
116
130
|
.chat-code-block-actions {
|
|
@@ -125,7 +139,7 @@ button {
|
|
|
125
139
|
color: var(--text-soft, #94a3b8);
|
|
126
140
|
cursor: pointer;
|
|
127
141
|
padding: 4px 8px;
|
|
128
|
-
border-radius:
|
|
142
|
+
border-radius: var(--radius-xs, 6px);
|
|
129
143
|
display: inline-flex;
|
|
130
144
|
align-items: center;
|
|
131
145
|
gap: 5px;
|
|
@@ -143,6 +157,10 @@ button {
|
|
|
143
157
|
padding: 4px 6px;
|
|
144
158
|
}
|
|
145
159
|
|
|
160
|
+
.chat-code-toggle-lines-btn.is-active {
|
|
161
|
+
color: var(--interactive-fg, #38bdf8);
|
|
162
|
+
}
|
|
163
|
+
|
|
146
164
|
.chat-code-copy-btn.is-copied {
|
|
147
165
|
color: var(--interactive-fg);
|
|
148
166
|
}
|
|
@@ -164,9 +182,9 @@ button {
|
|
|
164
182
|
}
|
|
165
183
|
|
|
166
184
|
.chat-code-block-body code {
|
|
167
|
-
font-family: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
168
|
-
font-size:
|
|
169
|
-
line-height: 1.
|
|
185
|
+
font-family: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Noto Sans Thai', monospace;
|
|
186
|
+
font-size: 14.5px;
|
|
187
|
+
line-height: 1.65;
|
|
170
188
|
white-space: pre;
|
|
171
189
|
color: var(--text-chat, var(--text-main, #e2e8f0));
|
|
172
190
|
display: block;
|
|
@@ -197,7 +215,7 @@ button {
|
|
|
197
215
|
padding-right: 14px;
|
|
198
216
|
text-align: right;
|
|
199
217
|
color: var(--text-soft, #475569);
|
|
200
|
-
font-size: 0.
|
|
218
|
+
font-size: 0.82rem;
|
|
201
219
|
user-select: none;
|
|
202
220
|
opacity: 0.65;
|
|
203
221
|
}
|
|
@@ -219,6 +237,7 @@ button {
|
|
|
219
237
|
/* Code Syntax Highlighting (Driven by tokens.css) */
|
|
220
238
|
.token-command { color: var(--syntax-command); font-weight: 500; }
|
|
221
239
|
.token-keyword { color: var(--syntax-keyword); font-weight: 500; }
|
|
240
|
+
.token-tag { color: var(--syntax-variable, #f43f5e); font-weight: 500; }
|
|
222
241
|
.token-string { color: var(--syntax-string); }
|
|
223
242
|
.token-flag { color: var(--syntax-flag); }
|
|
224
243
|
.token-comment { color: var(--syntax-comment); font-style: italic; }
|
|
@@ -231,19 +250,18 @@ button {
|
|
|
231
250
|
.token-operator { color: var(--syntax-operator); }
|
|
232
251
|
.token-punctuation { color: var(--syntax-punctuation); }
|
|
233
252
|
|
|
234
|
-
/*
|
|
253
|
+
/* Minimal Inline Code */
|
|
235
254
|
.chat-inline-code {
|
|
236
|
-
background: var(--bg-surface-
|
|
237
|
-
border:
|
|
238
|
-
color: var(--text-primary);
|
|
239
|
-
padding:
|
|
240
|
-
border-radius: var(--radius-
|
|
255
|
+
background: var(--bg-surface-hover, rgba(127, 127, 127, 0.14));
|
|
256
|
+
border: none;
|
|
257
|
+
color: var(--text-chat, var(--text-primary, inherit));
|
|
258
|
+
padding: 1.5px 5px;
|
|
259
|
+
border-radius: var(--radius-xs, 4px);
|
|
241
260
|
font-family: 'Fira Code', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
|
|
242
|
-
font-size: 0.
|
|
261
|
+
font-size: 0.88em;
|
|
243
262
|
font-weight: 500;
|
|
244
263
|
letter-spacing: -0.01em;
|
|
245
|
-
box-shadow:
|
|
246
|
-
display: inline-block;
|
|
264
|
+
box-shadow: none;
|
|
247
265
|
vertical-align: baseline;
|
|
248
266
|
}
|
|
249
267
|
|
|
@@ -798,6 +798,25 @@ export async function clearChatHistory(chatId?: string | null): Promise<number>
|
|
|
798
798
|
return invoke<number>('clear_chat_history', { chatId })
|
|
799
799
|
}
|
|
800
800
|
|
|
801
|
+
export async function truncateInteractionsFrom(chatId: string | null | undefined, fromId: number): Promise<number> {
|
|
802
|
+
if (typeof window === 'undefined' || !isTauriRuntime()) {
|
|
803
|
+
const API_BASE = getApiBase();
|
|
804
|
+
try {
|
|
805
|
+
const params = new URLSearchParams();
|
|
806
|
+
if (chatId) params.set('chatId', chatId);
|
|
807
|
+
params.set('fromId', String(fromId));
|
|
808
|
+
const res = await authFetch(`${API_BASE}/interactions/truncate?${params.toString()}`, { method: 'POST' });
|
|
809
|
+
const data = await res.json();
|
|
810
|
+
return data.status === 'ok' ? 1 : 0;
|
|
811
|
+
} catch (e) {
|
|
812
|
+
console.error("Failed to truncate interactions on web:", e);
|
|
813
|
+
return 0;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
const { invoke } = await import('@tauri-apps/api/core')
|
|
817
|
+
return invoke<number>('truncate_interactions_from', { chatId, fromId })
|
|
818
|
+
}
|
|
819
|
+
|
|
801
820
|
export async function listSavedPictures(): Promise<PictureEntry[]> {
|
|
802
821
|
if (typeof window === 'undefined' || !isTauriRuntime()) {
|
|
803
822
|
const API_BASE = getApiBase();
|
|
@@ -2402,6 +2421,7 @@ const _apiCheck: MintPlatformApi = {
|
|
|
2402
2421
|
saveSubagent,
|
|
2403
2422
|
deleteSubagent,
|
|
2404
2423
|
clearChatHistory,
|
|
2424
|
+
truncateInteractionsFrom,
|
|
2405
2425
|
listSavedPictures,
|
|
2406
2426
|
deleteSavedPicture,
|
|
2407
2427
|
generateImages,
|
|
@@ -2451,8 +2471,8 @@ export function getBackgroundJob(id: string) { return backgroundRequest<import('
|
|
|
2451
2471
|
export function stopBackgroundJob(id: string) { return backgroundRequest<import('../shared/types').BackgroundJob>(`/${encodeURIComponent(id)}/stop`, 'POST') }
|
|
2452
2472
|
export function deleteBackgroundJob(id: string) { return backgroundRequest<{deleted: boolean}>(`/${encodeURIComponent(id)}`, 'DELETE').then(() => undefined) }
|
|
2453
2473
|
|
|
2454
|
-
export async function startHtmlPreview(root: string, relativePath: string,
|
|
2455
|
-
const response = await authFetch(`${getLocalApiBase()}/html-preview`, { method: 'POST', headers: {'Content-Type':'application/json'}, body: JSON.stringify({root, relativePath
|
|
2474
|
+
export async function startHtmlPreview(root: string, relativePath: string, _mintBrowser = false): Promise<{url: string; jobId: string}> {
|
|
2475
|
+
const response = await authFetch(`${getLocalApiBase()}/html-preview`, { method: 'POST', headers: {'Content-Type':'application/json'}, body: JSON.stringify({root, relativePath}) })
|
|
2456
2476
|
const value = await response.json()
|
|
2457
2477
|
if (!response.ok) throw new Error(value.message || 'Could not start HTML preview')
|
|
2458
2478
|
return value
|
|
@@ -25,7 +25,7 @@ installRendererPlatform({ readMcpArtifact: async (id, chat) => {
|
|
|
25
25
|
|
|
26
26
|
const artifacts: AgentProgress = { type: 'ToolArtifacts', data: { callId: 'capture', warnings: [], artifacts: [{ id: 'browser-image', name: 'result.png', mimeType: 'image/png', kind: 'image', size: 12000, chatId: 'browser-chat', callId: 'capture', server: 'browser', metadata: { url: 'http://localhost:3000/search', width: 960, height: 600, capturedAt: '2026-10-19T10:00:00Z' } }] } }
|
|
27
27
|
const original: AgentProgress[] = [
|
|
28
|
-
{ type: 'ToolEnd', data: { action: '
|
|
28
|
+
{ type: 'ToolEnd', data: { action: 'view_image', callId: 'capture', input: { path: 'result.png' }, result: 'Screenshot saved as an artifact.', status: 'success' } }, artifacts,
|
|
29
29
|
// Reopening the same image should not create another gallery card.
|
|
30
30
|
{ ...artifacts, data: { ...artifacts.data, callId: 'view-again' } },
|
|
31
31
|
{ type: 'RunCompleted', data: { summary: { outcome: 'UNVERIFIED' } as any } },
|
|
@@ -42,6 +42,9 @@ async function run(){
|
|
|
42
42
|
check(document.documentElement.scrollWidth<=innerWidth,'long source message fits viewport')
|
|
43
43
|
if(location.search.includes('source-preview')){document.getElementById('qa-results')!.textContent='';return}
|
|
44
44
|
document.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}));await waitFor(()=>!document.querySelector('.library-preview'),'Close image preview')
|
|
45
|
+
click('[data-filter="image"]');await waitFor(()=>Boolean(document.querySelector('.library-grid-sizes')),'Image filter shows grid size controls')
|
|
46
|
+
click('[data-grid-size="large"]');await waitFor(()=>Boolean(document.querySelector('.library-items.is-grid-large')),'Grid size switches to large')
|
|
47
|
+
click('[data-grid-size="normal"]');await waitFor(()=>Boolean(document.querySelector('.library-items.is-grid-normal')),'Grid size switches back to normal')
|
|
45
48
|
click('[data-filter="file"]');await waitFor(()=>document.querySelectorAll('.library-item').length===2,'Files filter')
|
|
46
49
|
click('[data-preview="notes"]');await waitFor(()=>Boolean(document.querySelector('.library-preview pre')?.textContent?.includes('Regression reference')),'Document preview')
|
|
47
50
|
check(document.querySelector('.library-preview pre')?.textContent?.includes('Regression reference'),'text preview reads original file')
|
|
@@ -19,6 +19,7 @@ try{
|
|
|
19
19
|
permission=defer();session=defer();voice.setVoiceMode(true);await wait(50);const live=stream();permission.resolve(live);await wait(50);session.resolve('live');await wait(100);
|
|
20
20
|
assert(voice.isRecording&&voice.analyserRef.current,'active call exposes its existing audio analyser');
|
|
21
21
|
eventHandler({type:'audioChunk',data:btoa('\0\0\0\0')});await wait(50);const ctx=contexts.at(-1);assert(ctx.sources.length===1,'normal streamed playback still works');
|
|
22
|
+
eventHandler({type:'interrupted'});await wait(50);assert(ctx.sources[0].stopped&&!voice.isSpeaking&&voice.isRecording,'barge-in interruption stops queued playback immediately without closing mic session');
|
|
22
23
|
voice.setVoiceMode(false);await wait(100);
|
|
23
24
|
assert(live.track.stopped&&ctx.state==='closed'&&ctx.sources[0].stopped&&!voice.analyserRef.current,'ending releases microphone, output audio, analyser and audio context');
|
|
24
25
|
const count=ctx.sources.length;eventHandler({type:'audioChunk',data:btoa('\0\0')});await wait(50);assert(ctx.sources.length===count&&contexts.length===1,'late events cannot restart audio after call ends');
|
|
@@ -108,7 +108,7 @@ async function run() {
|
|
|
108
108
|
await until(() => document.querySelector<HTMLImageElement>('.artifact-preview-panel img')?.naturalWidth)
|
|
109
109
|
check(!document.querySelector('.tool-surface-drop-overlay'), 'dropping clears the drag overlay')
|
|
110
110
|
check(calls.filter(call => call.startsWith('serve:')).length === 0 && calls.filter(call => call.startsWith('image:')).length === 1, 'image reads directly without starting any background preview service')
|
|
111
|
-
check(!document.querySelector('[aria-label="Open
|
|
111
|
+
check(!document.querySelector('[aria-label="Open preview"]'), 'direct images do not offer an HTTP-only browser action')
|
|
112
112
|
await drop('notes.md'); await until(() => document.querySelector('.artifact-preview-panel')?.textContent?.includes('Preview heading') && !document.querySelector('.artifact-preview-panel')?.textContent?.includes('# Preview heading'))
|
|
113
113
|
check(true, 'Markdown opens rendered content')
|
|
114
114
|
await drop('main.py'); await until(() => document.querySelector('.artifact-preview-panel')?.textContent?.includes('Hello from Workspace'))
|
|
@@ -158,15 +158,6 @@ pub fn run() {
|
|
|
158
158
|
native::terminal::write_interactive_terminal,
|
|
159
159
|
native::terminal::resize_interactive_terminal,
|
|
160
160
|
native::terminal::stop_interactive_terminal,
|
|
161
|
-
native::browser::open_mint_browser,
|
|
162
|
-
native::browser::close_mint_browser,
|
|
163
|
-
native::browser::show_mint_browser_suggestions,
|
|
164
|
-
native::browser::hide_mint_browser_suggestions,
|
|
165
|
-
native::browser::get_mint_browser_suggestion_query,
|
|
166
|
-
native::browser::navigate_mint_browser,
|
|
167
|
-
native::browser::browser_go_back,
|
|
168
|
-
native::browser::browser_go_forward,
|
|
169
|
-
native::browser::browser_reload,
|
|
170
161
|
commands::settings::get_runtime_status,
|
|
171
162
|
commands::settings::detect_system_tools,
|
|
172
163
|
commands::integrations::reauth_mcp_server,
|
|
@@ -228,6 +219,7 @@ pub fn run() {
|
|
|
228
219
|
commands::auth::auth_update_profile,
|
|
229
220
|
commands::auth::auth_upload_avatar,
|
|
230
221
|
commands::conversation::clear_chat_history,
|
|
222
|
+
commands::conversation::truncate_interactions_from,
|
|
231
223
|
commands::integrations::list_learned_skills,
|
|
232
224
|
commands::integrations::add_learned_skill,
|
|
233
225
|
commands::integrations::delete_learned_skill,
|
|
@@ -286,11 +278,6 @@ pub fn run() {
|
|
|
286
278
|
native::capture::capture_translation_frame,
|
|
287
279
|
native::capture::translate_captured_frame,
|
|
288
280
|
native::actions::get_smart_context,
|
|
289
|
-
native::browser::get_browser_tabs,
|
|
290
|
-
native::browser::navigate_browser,
|
|
291
|
-
native::browser::read_browser_page,
|
|
292
|
-
native::browser::click_browser_selector,
|
|
293
|
-
native::browser::type_in_browser,
|
|
294
281
|
native::capture::start_live_translate,
|
|
295
282
|
native::capture::open_live_translate_controls,
|
|
296
283
|
native::capture::live_translate_geometry,
|
|
@@ -8,12 +8,10 @@ use mint_core::{
|
|
|
8
8
|
use serde_json::{Value, json};
|
|
9
9
|
use tauri::{AppHandle, Emitter, Manager};
|
|
10
10
|
|
|
11
|
-
use mint_core::browser::{click, navigate, read_page_text, type_text};
|
|
12
|
-
|
|
13
11
|
const MAX_STEPS: usize = 20;
|
|
14
12
|
const SYSTEM_PROMPT: &str = r#"You are Mint's native background task agent. Return only JSON:
|
|
15
|
-
{"thought":"short progress note","action":"done|propose_folder|propose_write_file|
|
|
16
|
-
Use only one action per response. Background tasks never mutate the filesystem or execute shell commands. Use propose_folder, propose_write_file, and propose_bash so Mint can record a proposal for explicit user approval."#;
|
|
13
|
+
{"thought":"short progress note","action":"done|propose_folder|propose_write_file|propose_url|knowledge_search|propose_bash","target":"path, URL, query, command, or final result","data":"optional file content"}
|
|
14
|
+
Use only one action per response. Background tasks never mutate the filesystem or execute shell commands. Use propose_folder, propose_write_file, propose_url, and propose_bash so Mint can record a proposal for explicit user approval."#;
|
|
17
15
|
|
|
18
16
|
#[derive(Debug, Deserialize)]
|
|
19
17
|
struct AgentAction {
|
|
@@ -174,10 +172,18 @@ async fn execute_action(
|
|
|
174
172
|
action.target
|
|
175
173
|
))
|
|
176
174
|
}
|
|
177
|
-
"open_url" =>
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
175
|
+
"propose_url" | "open_url" => {
|
|
176
|
+
store
|
|
177
|
+
.add_artifact(
|
|
178
|
+
&task.id,
|
|
179
|
+
json!({ "type": "url_proposal", "url": action.target, "description": format!("Proposed by native task step {step}; explicit approval required") }),
|
|
180
|
+
)
|
|
181
|
+
.map_err(|error| error.to_string())?;
|
|
182
|
+
Ok(format!(
|
|
183
|
+
"url proposal recorded but not opened: {}",
|
|
184
|
+
action.target
|
|
185
|
+
))
|
|
186
|
+
}
|
|
181
187
|
"knowledge_search" => {
|
|
182
188
|
let hits = KnowledgeStore::open_default()
|
|
183
189
|
.map_err(|error| error.to_string())?
|
|
@@ -27,6 +27,26 @@ pub(crate) enum DesktopStreamEvent {
|
|
|
27
27
|
},
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
fn apply_request_overrides_to_config(config: &mut mint_core::MintConfig, chat_req: &ChatRequest) {
|
|
31
|
+
let active_model = config.active_model().to_string();
|
|
32
|
+
if let Some(temp) = chat_req.temperature {
|
|
33
|
+
config.temperature = Some(temp);
|
|
34
|
+
config.set_model_temperature(&active_model, Some(temp));
|
|
35
|
+
}
|
|
36
|
+
if chat_req.thinking_enabled.is_some() || chat_req.thinking_effort.is_some() {
|
|
37
|
+
let (cur_enabled, cur_effort) = config.resolved_thinking();
|
|
38
|
+
let enabled = chat_req.thinking_enabled.unwrap_or(cur_enabled);
|
|
39
|
+
let effort = chat_req
|
|
40
|
+
.thinking_effort
|
|
41
|
+
.as_deref()
|
|
42
|
+
.unwrap_or(cur_effort)
|
|
43
|
+
.to_string();
|
|
44
|
+
config.thinking_enabled = enabled;
|
|
45
|
+
config.thinking_effort = effort.clone();
|
|
46
|
+
config.set_model_thinking(&active_model, enabled, &effort);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
30
50
|
#[tauri::command]
|
|
31
51
|
pub(crate) async fn send_chat_message(
|
|
32
52
|
app: AppHandle,
|
|
@@ -52,6 +72,7 @@ pub(crate) async fn send_chat_message(
|
|
|
52
72
|
}
|
|
53
73
|
let (request, receipt) =
|
|
54
74
|
mint_core::library::prepare_chat(&request, attachment_metadata.as_ref(), &config).await?;
|
|
75
|
+
apply_request_overrides_to_config(&mut config, &request);
|
|
55
76
|
|
|
56
77
|
if request.message.starts_with("/chat ") {
|
|
57
78
|
let mut clean_request = request.clone();
|
|
@@ -225,6 +246,7 @@ pub(crate) async fn stream_chat_message(
|
|
|
225
246
|
}
|
|
226
247
|
let (request, receipt) =
|
|
227
248
|
mint_core::library::prepare_chat(&request, attachment_metadata.as_ref(), &config).await?;
|
|
249
|
+
apply_request_overrides_to_config(&mut config, &request);
|
|
228
250
|
|
|
229
251
|
if request.message.starts_with("/chat ") {
|
|
230
252
|
let mut clean_request = request.clone();
|
|
@@ -583,6 +605,22 @@ pub(crate) async fn clear_chat_history(chat_id: Option<String>) -> Result<usize,
|
|
|
583
605
|
.await
|
|
584
606
|
}
|
|
585
607
|
|
|
608
|
+
#[tauri::command]
|
|
609
|
+
pub(crate) async fn truncate_interactions_from(
|
|
610
|
+
chat_id: Option<String>,
|
|
611
|
+
from_id: i64,
|
|
612
|
+
) -> Result<usize, String> {
|
|
613
|
+
with_default_memory(move |memory| {
|
|
614
|
+
memory.truncate_interactions_from(
|
|
615
|
+
chat_id
|
|
616
|
+
.as_deref()
|
|
617
|
+
.unwrap_or(mint_core::DEFAULT_CONVERSATION_ID),
|
|
618
|
+
from_id,
|
|
619
|
+
)
|
|
620
|
+
})
|
|
621
|
+
.await
|
|
622
|
+
}
|
|
623
|
+
|
|
586
624
|
#[tauri::command]
|
|
587
625
|
pub(crate) async fn submit_tool_approval(
|
|
588
626
|
state: tauri::State<'_, ApprovalsState>,
|
|
@@ -29,62 +29,19 @@ pub async fn smart_context() -> SmartContext {
|
|
|
29
29
|
captured_at: unix_timestamp().to_string(),
|
|
30
30
|
platform: std::env::consts::OS,
|
|
31
31
|
host: hostname(),
|
|
32
|
-
browser: browser_context(
|
|
32
|
+
browser: browser_context().await,
|
|
33
33
|
active_window,
|
|
34
34
|
current_app,
|
|
35
35
|
selected_text: selected_text(),
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
.and_then(|window| window["appName"].as_str())
|
|
43
|
-
.map(str::to_ascii_lowercase)
|
|
44
|
-
.is_some_and(|name| {
|
|
45
|
-
["chrome", "chromium", "brave", "edge"]
|
|
46
|
-
.iter()
|
|
47
|
-
.any(|browser| name.contains(browser))
|
|
48
|
-
});
|
|
49
|
-
if is_chromium && let Some(context) = chromium_context().await {
|
|
50
|
-
return Some(context);
|
|
51
|
-
}
|
|
39
|
+
/// Active-tab context comes from the optional browser extension only; Mint no
|
|
40
|
+
/// longer reads a remote-debugging port.
|
|
41
|
+
async fn browser_context() -> Option<Value> {
|
|
52
42
|
browser_extension_context().await
|
|
53
43
|
}
|
|
54
44
|
|
|
55
|
-
async fn chromium_context() -> Option<Value> {
|
|
56
|
-
let endpoint = load_config()
|
|
57
|
-
.ok()
|
|
58
|
-
.and_then(|config| {
|
|
59
|
-
config
|
|
60
|
-
.extra
|
|
61
|
-
.get("browserDebugUrl")
|
|
62
|
-
.and_then(Value::as_str)
|
|
63
|
-
.map(str::to_owned)
|
|
64
|
-
})
|
|
65
|
-
.unwrap_or_else(|| "http://127.0.0.1:9222/json/list".into());
|
|
66
|
-
let pages: Value = mint_core::HTTP_CLIENT
|
|
67
|
-
.clone()
|
|
68
|
-
.get(endpoint)
|
|
69
|
-
.send()
|
|
70
|
-
.await
|
|
71
|
-
.ok()?
|
|
72
|
-
.json()
|
|
73
|
-
.await
|
|
74
|
-
.ok()?;
|
|
75
|
-
pages
|
|
76
|
-
.as_array()?
|
|
77
|
-
.iter()
|
|
78
|
-
.find(|page| page["type"] == "page")
|
|
79
|
-
.map(|page| {
|
|
80
|
-
json!({
|
|
81
|
-
"title": page["title"],
|
|
82
|
-
"url": page["url"],
|
|
83
|
-
"source": "chromium-remote-debug"
|
|
84
|
-
})
|
|
85
|
-
})
|
|
86
|
-
}
|
|
87
|
-
|
|
88
45
|
async fn browser_extension_context() -> Option<Value> {
|
|
89
46
|
let endpoint = load_config()
|
|
90
47
|
.ok()
|