v1.11.0
Release Notes - Mint Agent v1.11.0
We are excited to release Mint Agent v1.11.0! This version introduces major enhancements across CLI, Desktop, and Web: Core Rust Crates Integration (ignore, grep-searcher, shlex, srtlib, tree-sitter), Interactive Native UI Widgets Suite (Weather, Stock & Financial, Calculation & Unit Conversion), Multimodal Video, Remote Messaging Bridges, Browser Automation, LaTeX Sanitization, AI Image-to-Image & Inpainting Editing Capabilities, and the AI Video Editor Core & Auto Shorts Generator.
🧠 Agentic Core Overhaul — Native Tool-Calling, Context Compaction & Safety Hardening
A ground-up rework of the coding-agent loop (crates/mint-core/src/orchestration.rs), moving from a hand-parsed JSON-in-text protocol to real provider-native tool-calling, plus a full pass of reliability and safety fixes — including two bugs found and fixed through live testing against real Anthropic, Gemini, OpenAI-family, and DeepSeek APIs.
- Native Tool-Calling (Anthropic, OpenAI-family, Gemini, allowlisted Ollama models): Replaced the old "reply with one JSON blob" scheme with real
tools/functionDeclarationsAPI calls per provider (crates/mint-core/src/chat.rs), each backed by request/response golden tests. A per-tool JSON schema catalog (crates/mint-core/src/prompts/tool_catalog.rs) now enforces argument shapes at the API level for all 49 agent actions instead of one giant shared free-text struct. Providers without reliable native tool support automatically fall back to the legacy JSON-prompt path — with a visible warning, never a silent downgrade. - 🐛 System Prompt Fix (found via live API testing): The system prompt was unconditionally instructing the model to reply with raw JSON text — even in native tool-calling mode — which actively sabotaged real tool calls for every native-capable provider. Fixed in
crates/mint-core/src/prompts/agent.rsto build a leaner, tool-calling-appropriate prompt when native mode is active; verified live against Gemini and DeepSeek after the fix. - 🐛
read_fileSilent Truncation Fix (found via live API testing): Reading a file longer than 240 lines returned a truncated result with no indication it was incomplete, so the agent had no way to know it needed to keep reading.crates/mint-core/src/code_tools.rsnow reports the file's total line count and tells the model the exactstartLine/endLineto request next — verified end-to-end against a real 323-line file, which the agent now reads and summarizes in full. - Context Compaction: Long-running agent conversations now track real token usage reported by each provider and automatically summarize older tool-call history into one condensed entry once usage crosses 80% of the model's context window, keeping the most recent steps verbatim.
- Subagent Isolation (
dispatch_subagent): New.agents/subagents/*.mdfile-based subagent definitions the top-level agent can delegate focused sub-tasks to. Each subagent runs in a fully isolated context (its own message history, optional restricted tool set, optional different model/provider) and returns only its final summary — its internal steps never leak into the parent conversation. Listable viamint code subagents. - Persistent Permission Rules: Approval prompts for shell commands, file edits, plugins, and MCP tools can now be saved as "always allow" rules (per-project or global) so the same action doesn't need re-approving every time. Manageable via
mint safety permissions list/remove. - Sandbox Visibility: Shell commands that run unconfined because OS-level sandboxing (
bwrap/sandbox-exec) isn't available now surface an explicit warning instead of silently skipping sandboxing; status visible viamint config doctor. Also hardened the destructive-command blocklist (git push --force,find -delete,rsync --delete). - Persistent MCP Sessions: MCP servers no longer spawn a brand-new process for every single tool call — sessions are now reused across calls, with automatic reconnect if a server process dies. Added support for
resources/list,resources/read,prompts/list, andprompts/get. - Atomic File Writes & Edit Uniqueness: File edits now write atomically (temp file + rename) instead of a direct overwrite, and
apply_patchrejects ambiguous edits that match more than one location in a file instead of silently editing the wrong spot.
🎨 Interactive Native UI Widgets Suite (Weather, Stock & Calculation)
Ported and integrated native interactive widgets across CLI, Desktop UI, and Web UI:
- 🌤️ Weather & Daily Forecast Widget: Real-time Open-Meteo weather fetch, 5-day daily forecast grid, wind speed, humidity, and radial-gradient Blue Weather Card UI (
WeatherCard.tsx). - 📈 Stock & Financial Asset Widget: Real-time market quotes via Yahoo Finance v8 API for stocks (AAPL, TSLA, NVDA) and cryptocurrencies (BTC, ETH, SOL) with positive/negative price gain/loss indicators, ticker resolution, and styled Stock Card UI (
StockCard.tsx). - 🧮 Calculation & Unit Converter Widget: Expression evaluation, percentage calculations ("25% of 8500"), and unit/currency conversions rendered in a modern, transparent Glassmorphism Calculator Card UI (
CalculationCard.tsx). - 📱 Universal Cross-Platform & Dual Desktop/Web Parity: Single-source-of-truth card components in
src/renderer/shared/components/rendering seamlessly across Desktop Tauri App and Web Browser Client.
⚙️ Standard Crates Refactoring (URL Opening, Binary Lookup & HTML Scraping)
Replaced custom string manipulations and OS-specific subprocess calls with battle-tested standard Rust crates:
open::that(url): Replaced platform-conditional (xdg-open/open/cmd) process spawning incrates/mint-core/src/mcp.rswithopencrate for seamless cross-platform URL opening across Linux, macOS, Windows, Flatpak, and WSL.which::which(command): Replaced process-basedwhichCLI calls incrates/mint-core/src/shell.rswithwhichcrate for cross-platform binary executable lookup.scraper::Html: Replaced string matching (.find("og:image")) incrates/mint-core/src/web_search.rswithscraperCSS selector query (meta[property='og:image'],meta[name='twitter:image']) for robust Open Graph thumbnail extraction.AST & Syntax Boundary Chunking: Refactoredchunk_text()incrates/mint-core/src/semantic.rsto break chunks at natural code boundaries (function/class declarations, doc comments, closing braces, empty lines) instead of fixed character positions, drastically improving code embedding vector quality.
🎨 Enhanced Settings UI (SVG Icons & Visual Theme Swatches)
Upgraded the Settings interface across Desktop (src/renderer/src) and Web (src/renderer/src-web) to improve visual hierarchy and scanability:
-
Section Group SVG Icons: Added clean SVG icons to section headers (
GeneralTab.tsx,AutomationTab.tsx) including AI Routing 🧠, API Keys 🔑, Web Search 🔎, Automation Engine 🌐, and Native Headless Queue ⚡. -
Authentic Brand Plugin SVG Icons (
plugins.tsx): Replaced generic outline icons in the Plugins tab (PluginsTab.tsx) with official multi-colored SVG brand logos for Spotify 🟢, Discord 🟣, Gmail ✉️ (Google 4-color M), Google Calendar 📅 (Google 4-color 31), Notion ⬛ (authentic N logo), YouTube Music 🔴, Vercel 🔺, and GitHub 🐱 across Desktop and Web UIs. -
Expanded Settings Modal Width (
styles.css&desktop.rs): Increased Settings window width from920pxto1180px(min(1180px, 95vw)) in Web UI CSS and updated Desktop Tauri window dimensions to1180.0x780.0, providing significantly more horizontal space for plugin cards, API key inputs, and integration descriptions. -
Action Buttons with SVG Icons: Enhanced footer buttons (
SettingsWindow.tsx) with inline SVG icons for Save Settings 💾, Reset Defaults 🔄, and Quit Application 🚪. -
Dual UI Build Command (
package.json): Updatednpm run buildscript to execute both Desktop UI (build:desktop:ui) and Web UI (build:web) in sequence for complete platform parity. -
Updated Google Veo Video Generation Models: Upgraded Veo video generation presets across CLI, Desktop UI, Web UI, and Rust Core engine to
veo-3.1-generate-preview⭐,veo-3.1-fast-generate-preview, andveo-3.1-lite-generate-preview, removing deprecated Veo 2.x models. -
Dedicated Black Forest Labs (FLUX API) Integration: Added official direct FLUX API (
api.bfl.ml) provider (bfl/flux) separate from Replicate across CLI, Desktop UI, Web UI, and Rust Core engine with Text-to-Image models (flux-pro-1.1,flux-pro-1.1-ultra,flux-pro,flux-dev,flux-schnell) and Image Editing models (flux-kontext-pro,flux-kontext-max,flux-fill-pro). -
Updated Model Presets Across Providers: Updated model option lists across CLI, Desktop UI, and Web UI for Gemini, Anthropic Claude, OpenAI, OpenRouter, Hugging Face, and Image Generation Studio (
gemini-3.1-flash-image⭐,gpt-image-1⭐,stable-image-ultra⭐,Ideogram V3⭐,FLUX 1.1 Pro⭐). -
Centralized Model Manager & Bi-directional Sync (
modelManager.ts): Built reactive Model Manager bus to synchronize active model selections in real-time between Veo Studio, Image Studio, Chat Panel, and Settings Window across CLI, Desktop UI, and Web UI. -
OAuth 2.0 PKCE Popup Sign-In System (
oauth.rs,oauthManager.ts&lib.rs): Built browser-based OAuth 2.0 PKCE authorization and local callback engine (GET /api/oauth/callback) with popup sign-in support for Google Services (Gmail, Calendar, YouTube Music), Vercel, GitHub, Spotify, and Notion across CLI, Desktop UI, and Web UI. Auto-spawns background API server on port 3000 during Desktop Tauri app launch for seamless single-click Sign In parity. -
Single Source of Truth Architecture Refactoring: Refactored
DEFAULT_CONFIG(config.ts), AI model arrays (models.ts), aspect ratios, and studio style presets (studio.ts) into canonicalshared/constants, eliminating code duplication across renderers. -
Clean Path HTML5 History Routing (
App.tsx&MintDashboard.tsx): Upgraded routing engine to HTML5 History API clean path URLs (/chat,/pictures,/image-studio,/veo-studio,/settings) with zero#symbols in the URL bar, while maintaining backwards compatibility for hash URLs (#/pictures). Fully supports direct URL linking, browser back/forward history navigation, and state preservation across F5 reloads across Desktop and Web UIs.
⚡ UI Performance & Composite Layer Optimizations (Desktop & Web)
Optimized rendering pipelines, state updates, and animation loops across both Desktop and Web interfaces:
- Memoized Chat Message Items (
src/renderer/shared/components/ChatMessageItem.tsx): RefactoredChatPanelmessage list to useReact.memowith custom prop comparison anduseMemomarkdown parsing caches, preventing full message list re-renders and Regex re-parsing during AI response streaming. - Agent Activity Drawer Toggle Fix (
ChatMessageItem.tsx&ChatPanel.tsx): Fixed an issue where clicking "Working through task >" (historical agent activity drawer) did not open/expand. AddedopenActivityIds,openReviewIds, andopenFileDiffsprops and comparison checks toChatMessageItem'sReact.memocomparator, ensuring state updates correctly trigger message re-renders and drawer toggling across both Desktop and Web interfaces. Also restored historical activity fallback (interaction.agentActivity) when live snapshots are absent. - Throttled Live2D Pointer Move Tracking (
src/renderer/src/components/Live2DStage.tsx): Capped pointer move events usingrequestAnimationFrameto 60FPS (~16ms), eliminating JavaScript main thread contention and micro-stutters from high-polling gaming mice (500Hz - 1000Hz). - Blob Object URL Attachment Previews (
src/renderer/shared/utils/ui.ts): Replaced heavy Base64 Data URI strings in DOM preview<img>tags with lightweightURL.createObjectURL(file)blob previews, reducing React state diffing overhead and memory footprint. - CSS Layer Containment (
styles.css): Addedcontain: content;andwill-change: transform;to.chat-containerin both Desktop and Web CSS stylesheets to isolate render composite boundaries and eliminate GPU repaint lag during chat scrolling.
🗑️ Picture & Video Deletion System (CLI, Desktop & Web)
Implemented full-stack media deletion across Rust core, Tauri IPC, Web REST API, and Desktop/Web UIs:
- Rust Core & Disk Storage (
crates/mint-core/src/pictures.rs): Addeddelete_saved_picture(id)function to remove picture/video media files on disk, delete generated thumbnails, and persist updatedpictures.jsonmetadata index. - REST & IPC Endpoints: Exposed
DELETE /api/pictures/:idHTTP REST endpoint incrates/mint-core/src/api_server.rsanddelete_pictureTauri IPC command insrc-tauri/src/lib.rs. - Interactive Deletion UI (
PicturesLibrary.tsx): Added hover trash action button 🗑️ to picture/video cards and a confirmation modal dialog ("Are you sure you want to permanently delete...?") across both Desktop UI (src/renderer/src) and Web UI (src/renderer/src-web).
🖼️ Web Search Image Thumbnails + Inline Images in Response
Web searches now fetch and display representative images in two places:
- Sources strip — horizontal thumbnail cards above the source chips
- Inline in the AI's answer — images embedded between bullet points, just like the Dola AI app
Changes
crates/mint-core/src/web_search.rs: Addedimage_url: Option<String>toSearchHit. Google CSE extracts frompagemap.cse_image[0].src; Brave fromthumbnail.src. Added Open Graph fallback scraper (og_image_fallback) — when the search API returns no thumbnail, fetches up to 8KB of each result URL in parallel (4 URLs, 4s timeout) and extractsog:imageortwitter:imagemeta tags.crates/mint-core/src/orchestration.rs: Emits optionalImage: <url>line per result. Updated the finish-summary instruction to tell the AI to embedmarkdown image tags inline in its answer, placed immediately after the bullet point referencing each result. AI applies images only for visual topics (food, people, places, products) and skips them for code/text answers.src/renderer/shared/utils/agentActivity.ts: AddedimageUrl?toWebSearchSource;parseWebSearchSources()detects and strips theImage:line.src/renderer/shared/utils/markdown.tsx(shared): Added two-tier image rendering — externalhttps://URLs (web search OG images) use a compact200px / objectFit: coverpreview card with title label. Internal/api/URLs (AI-generated images) keep the original420px / objectFit: containstyle.src/renderer/src/components/ChatPanel.tsx(Desktop) &src/renderer/src-web/components/ChatPanel.tsx(Web):renderWebSearchSources()renders a scrollable image card strip (max 4 cards) above source chips. Full platform parity.crates/mint-cli/src/markdown.rs(CLI):format_line()now detectslines and renders them as🖼 alt — urlwith a cyan-colored clickable URL, instead of printing raw markdown syntax. Ctrl+Click / Cmd+Click the URL in supported terminals (iTerm2, WezTerm, VS Code terminal) to open in browser.
🎬 AI Video Editor & Auto Shorts Generator (Milestones 1–4 Complete)
Mint Agent now includes a full-featured AI Video Editor Core & Auto Shorts Generator available across CLI, Desktop UI, and Web UI! Every video operation is built as a first-class tool callable by both the user and the AI Agent.
Features Added
-
Core FFmpeg Video Operations (
crates/mint-core/src/video_edit.rs):video_trim: Precise start and end timestamp clipping.video_resize: Change aspect ratio and resolution (e.g. 1080p, 4K, 9:16 vertical).video_merge: Concatenate multiple video clips cleanly via FFmpeg concat filter.video_extract_audio: Extract high-fidelity audio tracks as WAV files.video_remove_silence: Auto-detect audio quietness viasilencedetectand trim out dead air.render_timeline: Multi-clip non-linear JSON Timeline Engine.
-
Speech & Subtitles Engine (
crates/mint-core/src/speech.rs&subtitle.rs):- Speech-to-Text (STT) transcription with OpenAI Whisper API integration, local
whisperCLI fallback, or heuristic chunking. - LLM-based Subtitle Translation preserving SRT timing codes.
- Styled Subtitle Burning with customizable ASS presets (
🔥 TikTok Bold,✨ Minimal White,📺 Standard).
- Speech-to-Text (STT) transcription with OpenAI Whisper API integration, local
-
⚡ Make Auto Shorts (
crates/mint-core/src/auto_shorts.rs):- Automatically analyze long video transcripts via LLM to extract top viral highlight moments.
- Auto-crop and resize to 9:16 vertical (1080x1920) format.
- Auto-generate and burn yellow TikTok-style subtitles onto output clips.
-
🖼️ & 🎬 Direct Image & Video Generation in Chat (Agent Mode):
- Added Generate image and Generate video action options directly into the Chat plus (
+) attachment menu dropdown. - Integrated
generate_image(DALL-E,Stability,NanoBanana,Replicate) andgenerate_video(Google Veo) tool dispatch actions intocrates/mint-core/src/orchestration.rs. - Added inline media rendering in
src/renderer/shared/utils/markdown.tsxso when the AI Agent generates images or videos in Chat, the generated media (&<video controls src="..."></video>) renders directly inside the chat conversation bubble.
- Added Generate image and Generate video action options directly into the Chat plus (
-
🎬 Fully Interactive Veo Studio AI Video Editor UI:
- Maintained header title Veo Studio with AI Editor badge across both Desktop UI (
src/renderer/src) and Web UI (src/renderer/src-web). - Expanded video preview canvas Viewport (
.capcut-video-viewport) to dynamically fill 100% available height and width of the center workspace stage, maximizing video editing screen area. - Integrated Tauri native system file picker (
dialog.open()) into the Browse button so picking a video file automatically captures the full absolute system path (/path/to/video.mp4), preventingffmpegfile-not-found errors. - Fully integrated dynamic CSS application theme variables (
var(--accent),var(--bg-color),var(--panel-bg),var(--input-bg),var(--border)) with a clean neutral dark (#09090b) video canvas stage, eliminating unwanted blue theme tinting around player preview. - Replaced all text emojis with high-quality, resolution-independent SVG vector icons across all control buttons, tool options, and timeline cards.
- Interactive range scrubber & storyboard transcript cards carousel replacing multi-track lines.
- Real-time player canvas controls (Play, Pause, Stop, Skip -5s/+5s) with formatted timecode.
- Full Manual Tools control panel (Trim with playhead timestamp capture, Resize, Remove Silence, Extract Audio, Subtitles STT & burning, Auto Shorts, Export).
- Instant Output Result vs Source Video toggle preview.
- Maintained header title Veo Studio with AI Editor badge across both Desktop UI (
-
AI Agent Tool Registration & Platform Parity:
- Registered all video tools (
video_trim,video_resize,video_merge,video_extract_audio,speech_transcribe,subtitle_burn,make_shorts) intoorchestration.rssystem prompt and dispatch arms so the AI Agent can execute video editing requests automatically from chat prompts. - CLI:
mint video load|trim|merge|resize|extract-audio|export|transcribe|subtitle|translate-subtitle|make-shortssubcommands. - Full UI parity across Desktop (
src/renderer/src/components/VeoStudioPanel.tsx) and Web (src/renderer/src-web/components/VeoStudioPanel.tsx).
- Registered all video tools (
-
🎨 Image Studio & Chat Image Generation Parity:
- Fixed
generate_imagetool dispatch incrates/mint-core/src/orchestration.rsto automatically invokecrate::pictures::save_chat_images, persisting generated images directly to physical disk (~/.config/mint/Pictures/) and indexing them intopictures.json. - Updated
generate_imagetool system prompt format by removing hardcoded"provider": "dalle", allowing the AI Agent to respect the user's default selected provider in Image Studio / Settings (NanoBanana (Gemini)). - Added smart fallback from DALL-E to
call_nanobanana(Gemini) when OpenAI API key is missing. - Updated
ImageStudioPanel.tsx(Desktop UI & Web UI) gallery filtering to seamlessly display all AI-generated images from Chat (chat,image_gen,cli) while filtering out non-AI chat attachment uploads. - Implemented
resolveMediaUrlinsrc/renderer/shared/utils/markdown.tsxto automatically resolve/api/pictures/URLs to origin server (http://localhost:3000), ensuring 100% image card rendering parity on Web UI (port 9000). - Added automatic media & model feedback attribution appending (
![Generated Image],✓ Image generated successfully with model..., andSaved to: ...) inorchestration.rsto guarantee complete model feedback display in chat bubbles.
- Fixed
-
💻 CLI Interactive Mode Slash Command Parity:
- Added
/generate-image <prompt>and/gen-image <prompt>slash commands to CLI interactive/helpmenu andAUTOCOMPLETE_COMMANDSautocompletion list. - Connected
/generate-imageslash command directly toSlashResult::ForwardToAgent, sharing 100% of the native Agent Thinking animation engine (moon phase spinner frames, wave effect, real-time elapsed timer, andEsc to interrupt), central image persistence, and model attribution.
- Added
📦 Core Engine Crate Integrations (crates/mint-core)
ignoreCrate Integration: Replaced legacycollect_fileswithignore::WalkBuilderinlist_code_files, automatically respecting.gitignoreand.ignorerules across workspaces.grep-searcher&grep-regexEngine: Refactoredsearch_codeto usegrep_searcher::Searcherandgrep_regex::RegexMatcherBuilderfor fast, streaming code text searching powered byripgrepinternals.shlexShell Tokenization: Upgradedclassify_shell_commandinsafety.rsto useshlex::splitPOSIX shell lexing, ensuring quoted or escaped command strings (e.g.rm\ -rf) are properly tokenized before safety evaluation.srtlibSubtitle Formatting: Integratedsrtlib::Subtitle,Subtitles, andTimestampstructs intosubtitle.rsfor standard.srtsubtitle generation and millisecond timecode conversion.tree-sitterAST Symbol Extraction: Integratedtree-sitter(0.20.10) withtree-sitter-rustandtree-sitter-typescriptgrammars intosymbols.rs, extracting function, struct, class, enum, trait, interface, and type declarations at the Abstract Syntax Tree level across Rust, TypeScript, JavaScript, and TSX files with automatic regex fallback.
🎨 Ecosystem Plugins, Utilitarian UI Redesign & OAuth 2.0 Client ID Engine
- Single-Source-of-Truth Plugins Architecture (
src/renderer/shared/constants/plugins.tsx): ExtractedBUILTIN_PLUGINS_LISTand vector SVG logos (renderMcpSvgIcon) into shared constants, enforcing complete feature and visual parity across CLI (crates/mint-cli), Desktop UI (src/renderer/src), and Web UI (src/renderer/src-web). - Product-Native UI Redesign (Anti-AI Slop Aesthetic): Completely revamped
PluginsTab.tsxin Desktop and Web UIs:- Stripped out emoji headings (
🧠,🔌,🧩,⚡,🟢,⚪) and inline dashed card boxes. - Applied the clean Mint typography system (
section-kicker,section-title,section-description). - Upgraded skill tiles and plugin cards with flat surface borders, high-contrast status tags (
Connected,Not Connected,Workspace,Global), and high-resolution SVG brand logos.
- Stripped out emoji headings (
- Web UI Tauri IPC Crash Fix: Resolved Web UI white screen crash by replacing direct
@tauri-apps/apidesktop IPC imports insrc-web/components/Settings/PluginsTab.tsxwith safe REST API HTTP endpoints (src-web/tauri.ts). - Dynamic OAuth Client ID Pass-Through (
api_server.rs): Updated/api/oauth/startREST endpoint in Rust Core to dynamically inject user-configured Client IDs (gmailClientId,googleCalendarClientId,spotifyClientId,notionApiKey) into PKCE authorization flows. - Interactive CLI & Documentation: Added
mint pluginssubcommand documentation and ecosystem configuration guide toREADME.md.
🎨 Dynamic Theme Engine, Management Views Redesign & Workspace Skills Detection
- 🎨 Dynamic Theme Management Views (
management-views.css,ui.ts):- Consolidated standalone management stylesheets into
src/renderer/shared/css/management-views.css. - Driven theme variables (
--accent,--accent-hover,--accent-glow,--accent-subtle,--accent-border,--text-main) dynamically from Accent Color and Text Accent Color settings. - Set background of
/skills,/mcp, and/pluginsviews inMintDashboard.tsxtotransparent, allowing custom background gradients and wallpapers to show through seamlessly.
- Consolidated standalone management stylesheets into
- 🎛️ Settings-Parity Toggle Sliders & Far-Right Controls (
McpServersView.tsx&PluginsView.tsx):- Upgraded MCP and Plugin item rows to use iOS-style pill toggle sliders (
.settings-toggle-switch&.settings-toggle-slider). - Added complete action button controls (
Sign In 🌐,Disconnect,Configure,Remove). - Aligned right-side control containers to the far right edge (
marginLeft: 'auto',flex: 1) across all item cards. - Fixed MCP server toggle behavior to toggle
disabled: true / falseproperty instead of deleting the server configuration on toggle OFF.
- Upgraded MCP and Plugin item rows to use iOS-style pill toggle sliders (
- ✨ Vector SVG Icons (
plugins.tsx&DashboardSidebar.tsx):- Replaced text emojis with vector SVG icons (
renderSkillsSvgIcon,renderMcpHubSvgIcon,renderPluginsSvgIcon) in SidebarMorepopover menu and page headers. - Updated section title from
Built-in Plugins & IntegrationstoPlugins & Integrations.
- Replaced text emojis with vector SVG icons (
- 🌐 Clean Routing & Form Submit Hash Cleanup (
SettingsWindow.tsx,MintDashboard.tsx&tauri.ts):- Added
type="button"ande.preventDefault()toSettingsWindowfooter buttons. - Built automatic hash cleanup in
MintDashboard.tsxandcloseSettings(), preventing unwanted#/settingshash accumulation in browser address bar.
- Added
- 🦀 Rust Workspace vs. Global Skills Engine (
memory.rs,skills.rs&api_server.rs):- Added
is_workspacefield (#[serde(rename = "is_workspace")]) toLearnedSkillstruct inmint-core. - Updated
/api/learned-skillsREST endpoint inapi_server.rsto compute whether a skill file (.agents/skills/*,AGENTS.md) is located within the active project workspace root (current_dir), rendering accurate teal• Workspacebadges vs. purple• Globalbadges in the UI.
- Added
🎙️ Gemini Live Voice Fixes, Messaging Bridges & CLI Syntax Highlighting
- 🐛 Gemini Live Silent-Session Fix (found via live API testing):
crates/mint-core/src/gemini_live.rsonly matchedMessage::Textwhen reading server frames, but the Gemini Live WebSocket sends every event —setupComplete, audio replies, transcripts, tool calls — asMessage::Binary. Every single server event was being silently dropped by a_ => continuearm, so Live Mode connected and streamed mic audio fine but the model's replies never reached the UI. Fixed to decode both frame types; verified end-to-end against the real Gemini Live API (setup handshake, a spoken text-turn reply, and clean session close). - 🗣️ Gemini Live Voice Selection: Added
speechConfig.voiceConfig.prebuiltVoiceConfigto the Live session setup (gemini_live.rs,resolve_live_voice), configurable via a newgeminiLiveVoicesetting. Exposed as a dropdown in Settings → Audio (AudioTab.tsx, both Desktop and Web) and as a live voice-picker button directly inside the Live overlay (GeminiLiveOverlay.tsx) that reconnects the session with the new voice immediately, without losing the persisted setting. - 📲 LINE & WhatsApp Messaging Bridges (real implementations, not just Settings UI): The Settings UI for LINE Messaging and WhatsApp Cloud API bridges existed with zero backend behind it — enabling either toggle did nothing. Implemented
line_webhook_loop()andwhatsapp_webhook_loop()incrates/mint-core/src/channels.rs: small hand-rolled HTTP servers (lineWebhookHost:lineWebhookPort,whatsappWebhookHost:whatsappWebhookPort) with HMAC-SHA256 signature verification (X-Line-Signature,X-Hub-Signature-256), the WhatsApphub.challengeverification handshake, and replies routed through the sameanswer_channelpath Telegram/Discord/Slack already use. Verified end-to-end over real loopback HTTP requests (valid/invalid signatures, verification handshake, message delivery). - 🧩 Subagent Settings UI (
dispatch_subagent): The file-based subagent-delegation system (subagents.rs,.agents/subagents/*.md) had a fully working backend and zero way to create one without hand-writing Markdown frontmatter. Addedsave_subagent()/delete_subagent()write functions tosubagents.rs, exposed via Tauri commands (list_subagents,save_subagent,delete_subagentinsrc-tauri/src/lib.rs) and REST endpoints (GET/POST /api/subagents,DELETE /api/subagents/:sourcePathinapi_server.rs), and built a full CRUD section in Settings → Agents (AgentsTab.tsx, both Desktop and Web) — create/edit/delete subagents with name, description, system prompt, allowed-tools list, model/provider override, and workspace-vs-global scope. - 🎨 CLI Code Block Syntax Highlighting: Code blocks in
mint's interactive/agent output got a bordered box with a language label but no coloring of the code itself. Integratedsyntect(pure-Rustfancy-regexbackend, no C toolchain required) intocrates/mint-cli/src/agent.rs'sformat_markdown_bold— the fenced block's language hint now drives real token-level syntax highlighting (base16-ocean.darktheme), with a clean fallback to plain unhighlighted text for unrecognized or missing language hints.