Repository navigation
v1.14.0
Release Notes - Mint Agent v1.14.0
Smart Consecutive Tool Grouping & Modern Activity Feed UI (Desktop & Web)
Eliminated repetitive tool execution rows (e.g. calculation > repeated 6–7 times) by introducing consecutive tool grouping, rich category iconography, and accurate input target parsing:
- Smart Consecutive Tool Grouping (
agentActivity.ts&AgentActivityTable.tsx):- Automatically aggregates consecutive executions of the same tool into a single, clean collapsible group row by default (e.g.
Calculated 7 expressionswith7 stepsbadge). - Designed with an interactive accordion: clicking the group reveals the granular sub-items connected by fine branch lines (
├─,└─). - Single tool executions remain unnested for instant visibility.
- Automatically aggregates consecutive executions of the same tool into a single, clean collapsible group row by default (e.g.
- Resilient Group Status Rollup & Smart Error Recovery:
- Fixed false-positive red
Failedbadges on tool groups when searches or tool calls experienced intermediate non-fatal hiccups or trailing redundant calls. - Group status in
agentActivity.tsnow rolls up todone(✓) if at least one sub-step succeeded (hasDone), marking a group aserroronly if zero sub-steps succeeded. - Non-fatal tool errors occurring before an overall successful run (
RunCompletedwithSUCCESS) are marked asretry/ recovered rather than fatal failures. - Granular sub-step badges remain fully transparent when expanding the accordion.
- Fixed false-positive red
- Cross-Platform Parameter Alias Resolution (CLI, Desktop & Web):
- Rust Backend (
crates/mint-core): Added Serde aliases onAgentInputforquery(q,keyword,search,searchTerm,search_term),symbol(ticker),city(location,place),expression(expr,math), andcommand(cmd). Intools/web.rs, added fallback checks againstprompt,command, andsymbolto eliminate(empty query)errors. - CLI (
crates/mint-cli): Added matching alias support ingeneric_tool_label,explored_action_label, andran_command_labelsensuring 100% Platform Parity. - Frontend (
agentActivity.ts): EnhanceddescribeToolto parse all parameter aliases and prioritizedqueryover generic placeholders.
- Rust Backend (
- Accurate Tool Target & Inline Result Extraction:
- Enhanced
describeToolinagentActivity.tsto extractexpression/exprfor math queries,city/locationfor weather,symbolfor stock tickers, andurl/selectorfor browser automation. - Eliminated the fallback where target duplicated the action name (e.g.
calculationrepeating as targetcalculation). - Added concise inline result previews (e.g.
16 - 28 + 12 → 0).
- Enhanced
- Modern Activity Feed Architecture (
AgentActivityTable.tsx):- Replaced the rigid 4-column raw table (
Tool | Target | >) with a modern Activity Feed with category icons (LucideCalculator,FileCode,Folder,Terminal,Search,Wrench), status badges, and expandable output logs. - Synchronized CSS stylesheets across Desktop (
src/renderer/src/css/chat.css) and Web (src/renderer/src-web/css/chat.css).
- Replaced the rigid 4-column raw table (
Model Chip, Ghost Message Actions & Enhanced Reasoning Block (Desktop & Web UI)
Elevated the visual hierarchy, micro-interactions, and status indicators of conversation messages and reasoning chains:
- Modern Model Chip (
.provider-model-chip):- Replaced plain text provider badge with a sleek, pill-shaped chip displaying provider indicator dot, clean provider name, and model tag.
- Dynamic indicator dot styling tailored to provider archetype (Anthropic amber, OpenAI green, Google/Gemini cyan, DeepSeek blue, Ollama purple, Groq orange, Mint emerald).
- Built with theme-adaptive background (
var(--surface-bg)), subtle border, and interactive hover illumination. - Implemented across completed chat turns (
ChatMessageItem.tsx) and live streaming responses (ChatPanel.tsx).
- Ghost Message Actions (
.msg-action-btn):- Upgraded action buttons (Copy, Read Aloud / TTS, Edit) into polished 26x26px ghost buttons.
- Smooth hover backgrounds, micro-border feedback, and prominent emerald accent states with pulsing glow for active playback and copy confirmation.
- Thinking / Reasoning CoT Block Overhaul (
ThinkingBlock.tsx):- Quiet UI Aesthetic: Replaced neon cyberpunk green borders and radioactive glowing effects with refined, quiet neutral borders (
var(--border, rgba(255, 255, 255, 0.08))) inspired by Claude 3.7 and Cursor. - Replaced legacy question-mark icon with an authentic, neutral Brain icon (
<Brain size={14} />) from Lucide. - Added a gentle, non-distracting live breathing pulse indicator (
@keyframes thinkingDotPulse) without high-intensity colored halos. - Secondary Role Typography & Visual Hierarchy:
- Downscaled reasoning body text size to
12.5px(compact and distinct from the15pxprimary chat messages) with line-height1.55. - Dropped text color to muted slate (
var(--text-muted, #94a3b8)withopacity: 0.88), communicating its role as internal background reasoning / secondary metadata. - Scoped all markdown children inside reasoning steps (
.chat-formatted-body,.chat-paragraph,.chat-heading,.chat-list-*,.chat-bold-highlight,.chat-inline-code): clamped headings to12.8px, subdued bold highlights, neutralized list bullets and numbering from neon green to muted slate, and tightened vertical margins.
- Downscaled reasoning body text size to
- Added custom ultra-slim 3px scrollbar (
.thinking-block-content::-webkit-scrollbar) with translucent thumb for deep reasoning chains.
- Quiet UI Aesthetic: Replaced neon cyberpunk green borders and radioactive glowing effects with refined, quiet neutral borders (
- Complete Desktop & Web Parity:
- Unified component logic in
src/renderer/sharedand synchronized stylesheet updates acrosssrc/renderer/src/css/chat.cssandsrc/renderer/src-web/css/chat.css.
- Unified component logic in
Native Chain-of-Thought Reasoning Extraction & Full Provider Parity (CLI, Desktop & Web)
Resolved an issue where reasoning models (such as deepseek-reasoner / DeepSeek-R1) appeared with "Model didn't send thinking steps this time" when executing tools in Agent Mode:
- Multi-Provider Reasoning & CoT Ingestion (
crates/mint-core/src/agent/chat.rs):- DeepSeek Reasoner: Extracted
message["reasoning_content"]emitted during native tool calling and conversation turns. - OpenRouter & Compatible Endpoints: Extracted
message["reasoning"]andmessage["thought"]fields. - Embedded
<think>Tags: Addedextract_think_tagparser to detect and extract<think>...</think>blocks embedded in model text streams (such as Ollama or local QwQ/R1 deployments). - Google Gemini 2.0 Flash Thinking: Separated candidate parts with
thought: trueinto the reasoning thought stream instead of blending into the final content string. - Anthropic Claude 3.7 Sonnet: Ingested native
thinkingcontent blocks. - Ollama: Extracted
message["thinking"]andmessage["reasoning_content"].
- DeepSeek Reasoner: Extracted
- Orchestration Agent Loop Integration (
crates/mint-core/src/orchestration/mod.rs):- Attached extracted
thoughttokens toAgentDecisionacross tool-calling and completion turns. - Guaranteed
AgentProgress::Thoughtis emitted for every step containing reasoning traces, allowing the frontend'sThinkingBlockto render the live pulsing brain icon and step-by-step reasoning steps. - Added unit test coverage for each reasoning provider schema.
- Attached extracted
Minimalist AI Workspace Code Block & Command Styling (Desktop & Web UI)
Mint's code block rendering and inline command displays have been redesigned to deliver a minimalist, high-clarity developer workspace aesthetic inspired by Claude and Cursor:
- Zero-Dependency Syntax Highlighting Engine (
src/renderer/shared/utils/syntaxHighlight.tsx):- Implemented a fast, lightweight, and resilient tokenization engine tailored for developer commands and code snippets.
- Bash / Shell / Terminal Commands: Intelligent distinction between primary commands (
ffmpeg,git,docker,cargo,npm, etc.), command-line flags and options (-i,-vf,--help), string parameters, variables ($VAR), property assignments (key=value), comments, and pipe operators (|,&&). - Comprehensive Multi-Language Support: Dedicated tokenizers for JavaScript, TypeScript, Python, Rust, JSON, SQL, HTML, CSS, and YAML with universal fallback handling.
- Low-Saturation Aesthetic: High-contrast, easy-on-the-eyes palette (soft sky blue commands, calm emerald strings, warm amber flags, muted slate comments).
- Redesigned Minimalist Header & Controls (
ChatCodeBlock.tsx):- Monospace lowercase language badge (
bash,typescript,python, etc.) with subtle metadata tracking code line count for multi-line snippets. - Interactive Copy Action: Added clear "Copy" label alongside the clipboard icon with fluid animated transition to green checkmark and "Copied!" confirmation.
- Ghost Download Button: Clean, unobtrusive button for downloading the snippet with the appropriate file extension.
- Monospace lowercase language badge (
- Line Numbers & Non-Selectable Gutter:
- Automatically displays a neat gutter with line numbers for multi-line snippets (
> 1lines). - Designed with
user-select: noneso selecting code or copying to clipboard preserves clean code without stray line numbers. - Single-line terminal commands (e.g.
ffmpeg ...) remain uncluttered with full padding and zero gutter distraction.
- Automatically displays a neat gutter with line numbers for multi-line snippets (
- Refined Tech Pill Inline Code (
.chat-inline-code):- Updated inline code pills across Desktop and Web with subtle dark translucent background (
rgba(255, 255, 255, 0.06)), fine border, and crisp typography for clear readability in paragraphs and lists.
- Updated inline code pills across Desktop and Web with subtle dark translucent background (
- Full Platform Parity:
- Shared component
ChatCodeBlockand identical CSS rules implemented across both Desktop (src/renderer/src/index.css) and Web (src/renderer/src-web/index.css).
- Shared component
Dynamic Model Temperature Control, Per-Model Persistence & Interactive Wizard (CLI, Desktop & Web)
Mint now provides comprehensive model temperature management with per-model persistence, interactive multi-step selection wizard, and fine-grained, model-aware defaults tailored to prevent repetitive reasoning loops on reasoning models while preserving strict precision on coding backends:
- Per-Model Persistence & Model-Aware Defaults (
crates/mint-core/src/system/config.rs):- Independent Per-Model Overrides: Stores custom temperatures in
modelTemperatures: HashMap<String, f64>so each model independently remembers its configured temperature (e.g.deepseek-chatat0.65,claude-sonnet-5at0.15, while unset models seamlessly use smart defaults). - Automatically sets temperature to
0.6for Open-Weight Reasoning / CoT models (DeepSeek-R1/V3, Qwen-QwQ, and thinking/reasoner fine-tunes), directly mitigating the known agent looping/stagnation behavior caused by greedy decoding (0.0) or unconstrained drift (1.0). - Sets temperature to
0.1for Codestral and pure code completion models to maximize deterministic completion accuracy. - Defaults to
0.2for general coding and tool-calling models (Claude 3.5/3.7, GPT-4o, Gemini 2.5, Qwen 2.5 Coder, Llama 3.3, Ollama, etc.) for high accuracy, strict JSON schema adherence, and reliable tool execution. - Automatically omits the
temperatureparameter for OpenAI reasoning architectures (o1,o3), which reject explicit temperature values with HTTP 400 Bad Request. - Clamps all user values safely between
0.0and2.0.
- Independent Per-Model Overrides: Stores custom temperatures in
- Interactive Multi-Step
/temperatureSelection Flow (crates/mint-core/src/slash/mod.rs&slash-commands.json):- Interactive Wizard: Pressing Enter on bare
/temperatureor/templaunches an interactive multi-step picker viaSlashResponse::NeedsChoice:- Provider / Active Model Shortcut: Quickly choose between the currently active model shortcut or any configured/standard provider.
- Model Selection: Lists provider models dynamically or from presets, tagged with current
[Custom: 0.XX]or[Auto: 0.XX]status. - Temperature Presets: Choose from curated presets (
Auto,0.0 Deterministic,0.1 Codestral,0.2 Standard Coding,0.4 Balanced,0.6 DeepSeek/Reasoning,0.8 Creative,1.0 Brainstorming) or specify custom values.
- Fast Shorthands:
/temperature <0.0-2.0>sets custom temperature for the active model./temperature <model> <0.0-2.0>sets temperature for a specific model directly./temperature defaultresets the active model to smart defaults./temperature <model> defaultresets that specific model./temperature statusdisplays a formatted markdown status table listing active model effective temperature, reasoning mode handling, and all configured per-model overrides.
- Available across all 3 interfaces with unified terminal interactive selection (CLI) and clickable chip selectors (Desktop & Web UI).
- Interactive Wizard: Pressing Enter on bare
- Interactive UI Slider with Per-Model Binding in Settings (
GeneralTab.tsx&config.ts):- Added a dedicated Model Temperature control card under AI Routing: Provider & Model in Settings.
- Dynamically binds to
config.modelTemperatures[activeModel], displaying dynamic status badges (Custom for <model> (0.XX)orAuto (<rationale>)). - Smooth slider (range
0.00to1.50, step0.05) with live numerical display and an instantReset to Autoaction that removes the override for the active model while preserving other model configurations. - Informative contextual tooltip explaining the optimal sampling entropy for each model archetype.
Remote MCP Server Connections via URL / SSE & Live Connection Testing (CLI, Desktop & Web)
Mint now natively supports connecting to remote Model Context Protocol (MCP) servers hosted over HTTP / HTTPS with Server-Sent Events (SSE) streaming and direct HTTP POST JSON-RPC transports.
- Remote MCP Protocol Support (
crates/mint-core/src/integrations/mcp.rs):- Extended
McpServerconfiguration withurl: Option<String>,headers: Option<BTreeMap<String, String>>, andtransport: Option<String>. - Added
McpRemoteSessionwith an SSE event listener thread and endpoint discovery (endpointSSE events), dual-channel JSON-RPC dispatch (direct POST responses with SSE event fallback), and background keepalive. - Unified local stdio processes and remote network connections under the
McpSessionabstraction. - Implemented
test_remote_mcp_connectionfor pre-flight connection verification and discovery of remote tools, prompts, and resources.
- Extended
- Interactive UI with Segmented Transport Toggle & Live Testing (
McpServersView.tsx):- Segmented Toggle: Switch effortlessly between
🌐 Remote Server (URL / SSE)and💻 Local Command (stdio)in the Add Server modal. - Remote Endpoint & Authentication Setup: Configure Remote Server URL (
https://...), choose Authentication type (None,Bearer Token, orCustom Headers JSON), and provide optional custom server icons. - Live Connection Testing: Interactive
Test Connectionbutton triggers a non-blocking diagnostic test against the endpoint, displaying live loading states, success verification (reporting available tools, resources, and prompts count), or detailed error diagnostics before saving. - Enterprise-Grade Security Notice & Risk Acknowledgement: Custom warning banner with
<ShieldAlert />icon and safety acknowledgement checkbox before adding external endpoints, ensuring users review risks prior to granting remote tool execution. - Server Card & Details Parity: Remote servers display a distinct
Remotebadge with Lucide vector icon on their card and reveal their full endpoint URL and custom headers in the server detail modal.
- Segmented Toggle: Switch effortlessly between
- Full Platform Parity across CLI, Desktop & Web:
- CLI (
crates/mint-cli):mint mcp add <name> <url>auto-detects remote URLs and accepts authentication headers via--env "Authorization=Bearer <token>".- Interactive slash command
/mcp add <name> <url>seamlessly adds remote servers with SSE transport. mint mcp listdisplays(url: <url>)for remote servers.
- Desktop Tauri (
src-tauri&src/renderer/src):- Registered
test_mcp_connectionTauri command for native asynchronous ping and schema validation.
- Registered
- Web UI & Server (
crates/mint-core/src/api_server/routes/cron_mcp.rs&src/renderer/src-web):- Added
POST /api/mcp/testREST route running on a dedicated blocking task to prevent event-loop starvation. - Updated Web
MintPlatformApiwithtestMcpConnectionbridging to the backend endpoint.
- Added
- CLI (
Rewind System Overhaul: Themed Confirmation Modal, Targeted Step Checkpoints & Rescue Undo (CLI, Desktop & Web)
A comprehensive upgrade to Mint's file rewind and Git time machine capabilities:
- Custom Themed Rewind Confirmation Modal (
RewindModal.tsx):- Replaced raw browser
window.confirm()andalert()with a custom, theme-aware review dialog (.rewind-modal). - Highlights safety guarantee, target step badge, short commit hash, action type, timestamp, and the exact files to be reverted (with line addition/deletion indicators and
[NEW FILE]tags). - Supports keyboard shortcuts (
Escapeto dismiss,Cmd/Ctrl + Enterto confirm) and includes safety loading states.
- Replaced raw browser
- Targeted Step Checkpoint Matching:
- Rewind buttons on file changes summary cards now dynamically bind to the exact pre-edit checkpoint for that specific interaction/turn, rather than defaulting to the latest session checkpoint.
- Matches checkpoints against files touched in that turn or interaction creation timestamp, ensuring rolling back an earlier turn restores the workspace to the exact state before that turn began.
- Rescue Snapshot Safety Net & Instant Undo (
/rewind undo):- Before any rollback occurs, Mint creates a safety rescue snapshot in Git (
refs/mint/rescue/<timestamp>). - Floating Undo Banner: After rewinding, an interactive floating notification appears in the chat panel with a prominent
[ ↩ Undo Rewind ]button, allowing users to restore reverted files with a single click. - Full Platform Parity:
- CLI: Run
/rewind undoto recover from the latest rescue snapshot. - Backend Slash Command:
/rewind undosupported viacmd_rewind. - Desktop Tauri Command:
undo_git_checkpointnative invocation. - Web REST API:
POST /api/checkpoints/undoendpoint.
- CLI: Run
- Before any rollback occurs, Mint creates a safety rescue snapshot in Git (
Live Preview Path Resolution & File Changes Deduplication (CLI, Desktop & Web)
- Intelligent Path Resolution (
mint_core::files::resolve_readable_path):- Solved
Failed to read file: Not Foundpreview errors when viewing files with relative paths, tilde (~) prefixes, or notes stored in~/.config/mint/notes/. - Automatically resolves file targets across candidates: user home directory expansion, active workspace root, current working directory, and system config note locations.
- Implemented with complete parity across all three interfaces: Web API endpoint (
/api/file/read), Desktop Tauri command (read_workspace_file), and CLI (mint preview/handle_preview).
- Solved
- Distinct Operation Tracking for Creation & Modifications (
agentProgress.ts):- Preserved distinct file change records for separate tool actions (e.g. initial file creation via
note_writevs subsequent edits viaapply_patch), ensuring the summary accurately reflects1 created, 1 modifiedwith dedicated diff inspection for each step. - Both cards link to the resolved target on disk so clicking Preview on either the created or modified entry works seamlessly without path errors.
- Preserved distinct file change records for separate tool actions (e.g. initial file creation via
- Preview Resiliency & Fallback Content:
- Pass initial created file content as in-memory fallback to
ArtifactPreviewPanel, ensuring previews render instantly and gracefully even before disk sync or in transient environments.
- Pass initial created file content as in-memory fallback to
- Chat Scroll Preservation on Preview Toggle:
- Eliminated the issue where opening or closing the Live Preview panel caused the chat messages container to unmount and reset its scroll position (
scrollTop = 0) to the top of history. - Stabilized the split view wrapper DOM hierarchy (
.chat-panel-split-wrapperwithdisplay: contentsinno-previewmode) so the conversation panel never unmounts, while anchoring the scroll position to the active message.
- Eliminated the issue where opening or closing the Live Preview panel caused the chat messages container to unmount and reset its scroll position (
- Draggable & Resizable Split Pane Divider:
- Added an interactive divider bar (
.preview-split-resizer) between the Chat Panel and Live Preview panel. - Smooth 60fps mouse drag-to-resize using direct CSS variable updates (
--preview-width), preventing costly re-renders of the chat conversation while dragging. - Double-click on the divider grip bar instantly snaps back to 50/50 balance.
- Automatically persists the user's preferred split ratio in
localStorage(mint_preview_split_ratio), preserving custom sizing across sessions. - Safety constraints prevent either pane from collapsing (Chat >= 340px, Preview >= 280px).
- Added an interactive divider bar (
File Changes, Live Preview & Diff Viewer Theme Parity (Desktop & Web UI)
- Comprehensive Theme Alignment:
- Replaced hardcoded inline styles (
#10b981,#0b0f19,rgba(15, 23, 42, 0.6),#a7f3d0) in the File Changes summary and live Diff viewer with dynamic CSS theme variables (var(--accent),var(--surface-bg),var(--input-bg),var(--border),var(--text-chat, var(--text-main)),var(--text-muted)). - Ensured complete visual parity across default dark, light (
[data-theme="light"]), midnight ([data-theme="midnight"]), and custom themes.
- Replaced hardcoded inline styles (
- Live Preview Split View Panel (
ArtifactPreviewPanel.tsx):- Replaced legacy fallback colors (
#232730,#111317,#f3f4f6,#181a20,#10b981) across the entire Preview panel with native Mint theme tokens:--panel-bg,--surface-bg,--border,--text-main, and--accent. - Preview/Code tab toggles, device viewport selectors (Desktop/Tablet/Mobile), artifact badges, and markdown view now fully match the active system theme.
- Replaced legacy fallback colors (
- Diff Review Modal (
DiffReviewModal.tsx):- Split and unified diff panes, header diff badge, and addition/deletion counters now track the active theme accent, error, and text variables.
- Readable Diff Line Highlighting:
- Diff hunk lines now preserve the user's configured chat text color (
var(--text-chat, var(--text-main))) while clearly highlighting additions and deletions with subtle background tints, accent/error border indicators, and separate unselectable sign markers (+invar(--accent),-invar(--status-error)).
- Diff hunk lines now preserve the user's configured chat text color (
- Rewind Action & Status Badges:
- Rewind checkpoint button, [NEW FILE] badge, and Preview button now cleanly utilize system theme tokens (
var(--status-error),var(--hover-delete-bg),var(--accent),var(--radius-xs)).
- Rewind checkpoint button, [NEW FILE] badge, and Preview button now cleanly utilize system theme tokens (
- Platform Parity:
- Reusable
.file-changes-*styling standardized across both Desktop (src/renderer/src/css/chat.css) and Web (src/renderer/src-web/css/chat.css).
- Reusable
Claude Desktop Style Choice Cards UI Overhaul (Web & Desktop)
Redesigned the Action Approval and AskUser Question interface across both Web (src/renderer/src-web) and Desktop (src/renderer/src):
- Claude Desktop "Choice Cards" Layout:
- Replaced legacy small horizontal buttons with vertical, interactive Choice Cards featuring dedicated hotkey badges (
[ 1 ],[ 2 ],[ 3 ]), titles, and explanatory subtitles. - Distinct hover accents for Approve (emerald), Session Allow (sky blue), and Deny/Cancel (rose red).
- Clean header with tool-specific badges (RunShell 🐚, File Edit 📝, MCP 🔌, Question 💬) and risk tiers (
DANGEROUS,APPROVAL REQUIRED). - Monospace code box for shell commands and diffs with quick syntax review.
- Replaced legacy small horizontal buttons with vertical, interactive Choice Cards featuring dedicated hotkey badges (
- Global Keyboard Hotkey Triggers:
- Pressing
1,2,3on the keyboard instantly selects or approves the corresponding choice card when not actively typing in an input field.
- Pressing
- Enhanced AskUser Selection & Custom Answer:
- Full support for single-select choices, multi-select checkboxes, and custom write-in answers with
Enter-to-submit.
- Full support for single-select choices, multi-select checkboxes, and custom write-in answers with
- Full Platform Parity:
- Unified across Desktop and Web via the shared
ApprovalCard.tsxcomponent and matching CSS tokens.
- Unified across Desktop and Web via the shared
Web UI Performance & Reliability Overhaul
This update resolves intermittent slow loading, white screens, and update error loops when accessing Mint via web browser:
- Decoupled Build Output Targets (
out/webvsout/renderer):- Web UI now builds cleanly to
out/webwhile Desktop UI continues building toout/renderer. - Completely eliminates output clobbering where desktop builds wiped out
index-web.htmlor chunk hashes.
- Web UI now builds cleanly to
- Same-Origin Vite API Reverse Proxying:
- Added reverse proxy configuration for
/apiin Vite dev and preview modes routing to backend port 3000. - Eliminated CORS preflight
OPTIONSrequests, dramatically reducing API response times. - Resolves browser mixed-content blocks when accessing over HTTPS, SSH tunnels, or VS Code port forwarding.
- Added reverse proxy configuration for
- Removed Render-Blocking Unused Live2D Script:
- Removed 150 KB synchronous
Live2DCubismCore.jsscript tag fromindex-web.html<head>, as Live2D companion rendering is desktop-only.
- Removed 150 KB synchronous
- Service Worker Dev Isolation & Smart Fallbacks:
- Dev mode now automatically purges leftover service workers from preview/production runs so Vite HMR is never intercepted or corrupted.
- Added strict exclusions in
sw.jsfor Vite internal endpoints.
- Resilient Chunk Error Boundary & Dark Recovery Screen:
- Replaced the harsh white
#fffffferror screen with an on-theme Mint dark card. - "Refresh & Update" button automatically clears stale
cachesand unregisters old service workers before reloading to guarantee a clean recovery loop.
- Replaced the harsh white
- Failsafe Timeout Guards:
- Added 5-second fetch timeouts to
authGetCurrentUser,getRuntimeStatus, andgetSettingswith a 6-second failsafe inAuthGate, preventing indefinite hangs on "Loading Mint…".
- Added 5-second fetch timeouts to
- Intelligent CLI Binary Discovery & Fast Dev Iteration:
- Rewrote src/bin/index.js to resolve binaries dynamically across local release (
target/release/mint), fast local debug (target/debug/mint), user Cargo installation (~/.cargo/bin/mint), user local bin (~/.local/bin/mint), and global system paths (/usr/local/bin). - Running
cargo build -p mint-cli(debug) is now immediately picked up by the CLI runner without requiring a full 5-10 minute--releasebuild or reinstall. - Added
npm run install:cli(cargo install --path crates/mint-cli --locked) to install the native binary permanently to~/.cargo/bin.
- Rewrote src/bin/index.js to resolve binaries dynamically across local release (
Agent Harness Engineering Upgrade (9-Pillar System)
This release introduces a major architectural overhaul transforming Mint Agent into an enterprise-grade Autonomous Agent Harness. Grounded in systematic harness engineering principles, this upgrade equips Mint with deep workspace awareness, precise code navigation, safe autonomous verification loops, git checkpointing, structured knowledge authoring, run-level observability, and benchmarking across CLI, Desktop, and Web.
1. Workspace & Monorepo Architecture Detection (Pillar 1)
- Deep Architecture Scanner (
mint_core::system::project_detector):- Automatically identifies monorepo structures (Cargo workspaces, pnpm-workspaces, Turborepo, Lerna, Nx) and primary project ecosystems (Rust, Node/TypeScript, Python, Go, Java).
- Scans workspace roots and sub-crates/packages, extracting build scripts, package managers, and test runner configurations.
- Automatically injects an architectural briefing directly into the Agent's system prompt before the first turn, eliminating exploratory "what kind of project is this?" steps.
- Custom Rules Auto-Ingestion:
- Automatically scans and injects project rules from
CLAUDE.md,.cursorrules,.github/copilot-instructions.md,.agents/rules/, and.agents/AGENTS.mdinto the agent's context.
- Automatically scans and injects project rules from
2. Code Intelligence & AST Symbol Navigation (Pillar 2)
- AST / Syntax-Aware Symbol Extraction (
mint_core::search::symbols):- Added native symbol navigation without requiring heavyweight external Language Server Protocol (LSP) daemons.
find_definitionTool: Locates definitions of functions, structs, classes, enums, interfaces, types, and traits across Rust, TypeScript, JavaScript, Python, and Go codebases.find_referencesTool: Scans call-sites, usages, and implementations across workspace files.- Eliminates blind full-text grep hallucinations when refactoring or tracing complex type hierarchies.
3. Safe Automated Tooling & Zero-Prompt Pre-Approval Policy (Pillar 3)
- Dedicated Validation Tools (
mint_core::orchestration::tools::safe_tools):run_tests: Automatically discovers and invokes test runners (cargo test,npm test,pytest,go test) or executes targeted test suites.run_typecheck: Invokes project type-checkers (tsc,cargo check,pyright,mypy) to catch compiler-level errors early.run_linter: Runs code linters (clippy,eslint,flake8/ruff,golangci-lint) to enforce style and correctness.
- Zero-Prompt Pre-Approval Policy:
- Classified validation and test-running tools as non-destructive safe operations, allowing autonomous execution in the background without prompting the user for repetitive command approvals.
4. Task Planning Checklist & State Machine (Pillar 4)
- Structured Plan State Machine (
mint_core::orchestration::tools::planning):- Introduces
plan_taskandupdate_plan_steptools enabling agents to establish structured, multi-step implementation workflows. - Supports dynamic step states:
Pending,InProgress,Completed,Failed, andSkipped.
- Introduces
- Live Terminal & UI Checklist Cards:
- CLI: Live ANSI progress cards with status glyphs (
[ ],[-],[x],[!],[~]) and dynamic step updates inmint-cli. - Desktop & Web: Dedicated
PlanChecklistWidgetdisplaying interactive progress, step state transitions, and step timing.
- CLI: Live ANSI progress cards with status glyphs (
5. Active Verification Loop & Balanced Log Engineering (Pillar 5)
- Automatic Post-Modification Verification Hook:
- Integrated post-edit verification passes in the orchestration loop to trigger targeted checks before declaring tasks completed.
- Balanced Log Truncation Engine (
Head + Tail Windowing):- Implemented 3 KB Head + 12 KB Tail balanced buffer windowing for command and test outputs.
- Preserves both invocation parameters at the start and critical failure stack traces/compiler errors at the end, joining them with a
[... N bytes truncated ...]marker to avoid context blowup while retaining actionable diagnostic data.
6. Git Safety Harness & Rollback Checkpoints (Pillar 6)
- Automatic Checkpoint & Rollback Engine (
mint_core::git::checkpoint):git_checkpoint: Snapshots working tree state and stash references before risky multi-file edits.git_rollback: Safely reverts working directory changes back to the pre-task snapshot when tasks fail or the agent goes astray.git_restore_file: Precision rollbacks of individual modified files (git checkout -- <file>).git_create_branch: Automatically spins up isolated task branches (mint/<task-id>-<slug>).git_commit: Generates context-aware commit messages based on diff analysis and commits verified changes.
7. Autonomous Knowledge Engine & Documentation (Pillar 8)
- Tiered Documentation Search & Authoring (
mint_core::system::knowledge_engine):- Recursively indexes repository knowledge repositories across
docs/,architecture/,decisions/(ADRs),api/, andtroubleshooting/. search_docs: High-speed keyword and semantic search across local project documentation before falling back to external sources.create_project_doc: Enables the agent to author, persist, and update Architecture Decision Records (ADRs), API guides, and troubleshooting runbooks directly in the workspace.
- Recursively indexes repository knowledge repositories across
8. Run Observability Dashboard & Telemetry (Pillar 9)
- Run Telemetry & Metrics Collection (
mint_core::orchestration):- Tracks total execution duration, step counts, token usage, tool breakdown counts, and per-tool execution latency via
RunTelemetrySummaryandToolExecutionRecord. - Emits
AgentProgress::RunCompletedevent upon task finalization.
- Tracks total execution duration, step counts, token usage, tool breakdown counts, and per-tool execution latency via
- Cross-Platform Telemetry Dashboards:
- CLI: Rich ANSI terminal summary card rendered upon agent turn completion.
- Desktop UI & Web UI: Themed
RunSummaryDashboardcomponent featuring execution statistics, status indicators, and an expandable tool-call latency drawer with platform parity acrosssrc/renderer/srcandsrc/renderer/src-web.
9. Benchmark Evaluation System (Pillar 10)
- Evaluation Suite Engine (
mint_core::eval) & CLI Subcommand (mint eval):- Added
mint eval --suite <path> [--concurrency <N>] [--output <path>]command for automated benchmarking of agent models and harnesses. - Evaluates benchmark cases against prompt instructions, file modifications, and unit test pass criteria.
- Includes benchmark suite templates under
benchmarks/mint_eval.json.
- Added
10. Design System & Theming Refactoring (agent-observability.css)
- Semantic CSS Token Integration:
- Extracted all ad-hoc styles from
RunSummaryDashboard.tsxandPlanChecklistWidget.tsxinto a shared stylesheetsrc/renderer/shared/css/agent-observability.css. - Strictly bound all components to Mint design tokens:
- Surfaces & borders:
var(--surface-bg),var(--surface-bg-alt),var(--border),var(--border-light). - Typography:
var(--text-main),var(--text-muted). - Accents & status:
var(--accent),var(--accent-hover),var(--status-speaking)(success),var(--status-error)(failure),var(--status-listening)(warning).
- Surfaces & borders:
- Guarantees seamless aesthetics and readability across Dark, Light, and Midnight themes on both Desktop and Web interfaces.
- Extracted all ad-hoc styles from
Agent Activity Retry & Self-Correction UX Refinement
- Soft Recovered / Retry State for Intermediate Tool Errors:
- When an intermediate tool step encounters an error (e.g. missing arguments or transient failures) but the Agent subsequently retries, self-corrects, or finishes the task, the activity table now marks the step as
'retry'with an amber badge ([Retried]) instead of a harsh redFailedlabel. - The tool/action name (e.g.,
web_search) is preserved in the "Tool" column rather than being wiped out by the word "Failed". - Terminal red
[Failed]badges are reserved strictly for unrecovered errors where the agent halted without subsequent success. - Added descriptive fallback targets (e.g.
(empty query),(empty path)) when a tool was invoked without required arguments so users immediately understand why a step required a retry. - Implemented across both Desktop (
src/renderer/src) and Web (src/renderer/src-web) interfaces with consistent theme styling.
- When an intermediate tool step encounters an error (e.g. missing arguments or transient failures) but the Agent subsequently retries, self-corrects, or finishes the task, the activity table now marks the step as
Settings First-Load Reliability & Route Resilience
-
Eliminated Circular Dependency Cycle in Settings Tabs:
- Moved
CustomProviderConfig,CustomProviderModel, andCustomProviderHeadertoshared/types.tsas the canonical source of truth. - Updated all settings tab components (
GeneralTab,AgentsTab,PluginsTab,ThemeTab,AutomationTab,AudioTab) to import config, models, and types directly from@shared/constantsand@shared/typesinstead of@/components/SettingsWindow. - Fixes uninitialized
undefinedexports during initial module evaluation in Vite ESM, which caused first-load crashes (ChunkErrorBoundary) in Web and Desktop.
- Moved
-
Hashbang Route Normalization (
#!/settings&#/settings):getCurrentRoute()in bothsrc-web/App.tsxandsrc/App.tsxnow normalizes both#/and#!/prefixes cleanly to prevent route mismatch on direct navigation or hashbang links.
-
Resilient Lazy Chunk Loading & Preload:
- Implemented
lazyWithRetrywith automatic backoff retry to prevent transient chunk fetch failures from unmounting the app. - Added background idle preloading for the Settings bundle so opening Settings is instant and reliable.
- Added a localized
ModalErrorBoundaryinside the settings modal container to prevent any modal rendering exception from bubbling up and unmounting the main dashboard and chat.
- Implemented
UI Stylesheet Cleanup & Theme Token Consistency
-
Removed the legacy
mint-*layout CSS (~330 lines per copy) fromsrc/renderer/src/index.cssandsrc/renderer/src-web/index.css:.mint-app,.mint-sidebar,.mint-toolbar,.mint-composer,.mint-message,.mint-model,.mint-picture(s),.mint-empty,.mint-workspaceand their@mediablock were dead — no component renders those classes anymore.- Fixed a real styling conflict: the leftover
.mint-attachment/.mint-attachment buttonrules were overriding the current composer-attachment styles inchat.css(transparent remove button, stray slate background/padding). The attachment strip now renders exactly aschat.cssdefines it, including the red circular remove button. - Removed the duplicate
.chat-inline-codedefinition (two conflicting blocks in the same file) and the unused.chat-ordered-list/.chat-unordered-listrules.
-
Hard-coded colors replaced with theme tokens so chat tables, code blocks, and error banners now follow the active theme (dark/light/midnight) instead of assuming a dark background:
.mint-errornow derives from--status-error/--text-mainviacolor-mix..chat-table*and.chat-code-*rules use--border,--border-light,--shadow-sm, andcolor-mixtints of--text-maininstead ofrgba(255,255,255,…)values that were invisible on the light theme.- Markdown table renderer (
src/renderer/shared/utils/markdown.tsx) inline styles (container border/shadow, header tint, zebra rows, row borders) — these override the CSS, so they are now token-based too, fixing themed tables on Desktop and Web at once. body/htmlbase text color now usesvar(--text-main)instead of a fixed dark-theme hex.
Web Search Image Hotlink Protection & Direct URL Resolution
-
Unwrapped Web Search Image Proxy URLs:
- Automatically unwraps Brave Search internal proxy URLs (
imgs.search.brave.com) back to direct source image URLs in both backend and frontend, eliminating 403 Forbidden errors. - Fixes images failing to display in Web and Desktop message bubbles while appearing as raw Markdown links in the CLI.
- Automatically decodes existing image URLs stored in past conversation history upon rendering.
- Automatically unwraps Brave Search internal proxy URLs (
-
Referrer Policy Hardening:
- Added
referrerPolicy="no-referrer"to image tags across Markdown bubbles, Image Search tiles, and Search Source drawer thumbnails to bypass third-party image hotlink protection.
- Added
CLI UX & Ergonomics Improvements
-
Direct One-Shot Prompt Execution (
mint [PROMPT]...):- Running
mint "explain this function"ormint explain this functionnow directly executes the code agent on that task without needingmint agent "..."or entering the interactive TUI. - Returns exit code
0on successful completion or130on cancellation.
- Running
-
Top-Level Global Flags (
-m,-C,--fast,--plan,--image):- Added
-C / --cwd <DIR>to set the workspace directory upfront (mirroringgit -C). - Added
-m / --model <MODEL>for temporary in-memory model overrides per session or task (e.g.mint -m claude-3-7-sonnet "..."ormint -m gemini-2.5-flash), with automatic provider detection. - Added
--fastand--planflags at the root CLI level. - Added
--image <PATH>to attach image files directly to one-shot prompts.
- Added
-
Graceful Interruption & Ctrl+C Handling:
- Fixed an issue where
Ctrl+Cwas swallowed while the queueing box held raw terminal mode.Ctrl+CandEscnow cleanly interrupt agent turns in both normal and fast modes. - Pressing
Ctrl+Con an empty prompt now displays the yellow{WARN}Press Ctrl+C again or Ctrl+D to exit{RESET}notice below the input box (matchingCtrl+D's notification behavior) instead of overriding the prompt placeholder. Pressing either key again cleanly closes the session.
- Fixed an issue where
-
Robust Piped Input, Non-TTY Fallbacks & Scriptability:
- Fixed TTY detection across
confirm.rs,picker.rs,approval_prompts.rs, andagent.rsby checking!io::stdin().is_tty()alongsidestdout. - When
stdinis piped (e.g.echo "y" | mint run ...or in CI/CD scripts), prompts automatically fall back to line-oriented reading (read_line) instead of attempting raw-mode key polling or hanging on terminal escape sequences. - Interactive arrow-key selection (
prompt_interactive_select) safely returnsNoneimmediately when input is not a terminal. mint run <COMMAND>now prompts for confirmation viaconfirm()when--approveis omitted, allowing interactive confirmation in terminals or automated pipeline approvals viaprintf "y\n" | mint run ....
- Fixed TTY detection across
-
Fast Mode Esc & Ctrl+C Cancellation:
- Unified turn cancellation in
agent.rsso that--fastmode can be interrupted immediately with eitherEscorCtrl+C, without leaving terminal cursor or raw mode in an inconsistent state.
- Unified turn cancellation in
-
Streaming Stability & Localization Audit:
- Replaced
lines().flatten()with.map_while(Result::ok)in themint autolog watcher, preventing infinite loop risks on broken file streams or invalid UTF-8 bytes. - Fixed UTF-8 character boundary panics in tool output truncation (
hooks.rs) and agent instruction summaries (agent.rs). Slicing strings with non-ASCII multi-byte characters (e.g. Thai\u{0e38}, Japanese, emojis) now safely snaps backward to the nearest valid character boundary. - Audited all user-facing CLI prompts across
crates/mint-clito ensure 100% English language consistency (e.g.$skillprompts).
- Replaced
Architecture & Platform Parity (CLI, Desktop & Web)
-
Core Slash Command Engine Unification (
mint_core::slash::execute):- Connected CLI interactive mode (
interactive/slash_commands.rs) directly tomint_core::slash::execute. - Guarantees 100% feature and behavioral parity across CLI, Desktop, and Web: commands like
/models,/fast,/autoskill,/autorecall,/autofacts,/factrecall,/multi-agent,/release-notes,/clear,/init,/remember,/memory,/link,/plugin,/code,/generate-image,/cd,/statsnow share identical backend logic, options, persistence, and Markdown rendering across all platforms. - Interactive choice requests (
SlashResponse::NeedsChoice) seamlessly invoke the CLI's interactive arrow-key selector (prompt_interactive_select) with live selection re-dispatch. - Preserved CLI-specific specialized commands (
/plan,/palette,/bg,/jobs,/shells,/exit,/image,/paste,/avatar, and interactive TUI wizards for bare/mcp,/cron,/subagent).
- Connected CLI interactive mode (
-
Comprehensive
@Mention Parity with GUI:- Upgraded the CLI's
@mention and autocompletion system from only listing MCP servers to a unified multi-category completion popup matching the Desktop & Web interface:- Configured MCP servers (
[Plugin]):@<server>with tool details (ordered at the very top). - Builtin contexts (
[Context]):@workspace,@file,@docs,@memorywith descriptive badges. - Workspace files and directories (
[File],[Folder]): Automatically scans the active workspace directory, skipping build artifacts (target,.git,node_modules).
- Configured MCP servers (
- Supports
@mention autocomplete anywhere in the input line (not only at the start of the line), correctly replacing the active token at the cursor.
- Upgraded the CLI's
-
Subcommand Modularization (
main.rsRefactoring):- De-monolithized the 3,190-line
main.rsdown to ~400 lines by decomposing subcommand handlers into dedicated modules undercrates/mint-cli/src/commands/:commands/config.rs:Status,Config,Providers,Update,Onboard,Setup.commands/system.rs:Run,Open,OpenApp,Preview,ReadFile,ReadFolder,Safety,Files.commands/agent.rs:Agent,Rewind,Auto,Web,Api,Gateway,Chat,Imagine,Veo,Video,Avatar.commands/integrations.rs:Mcp,Link,Hooks,Gmail,Plugins.commands/knowledge.rs:Learn,Symbols,SemanticCode,Knowledge,Code,Skills.commands/tasks.rs:Memory,Task,Cron.commands/mod.rs: UnifiedCommandenum and cleandispatch()router.
- De-monolithized the 3,190-line
-
Config Safety & Test Environment Isolation:
- Added automatic test environment isolation (
is_test_environment()incrates/mint-core) so test runners never read or write user configuration files (~/.config/mint/mint-config.json), preventing accidental config wiping during unit tests. - Added automatic backup preservation (
mint-config.json.bak) before every configuration write operation insave_config_to. - Added
MINT_CONFIG_PATHenvironment variable override support for testing and custom config paths.
- Added automatic test environment isolation (
-
Dynamic Model Fetching (Hybrid Approach):
- Replaced hardcoded model presets with live API discovery across Gemini (
/v1beta/models), Anthropic (/v1/models), OpenAI (/v1/models), OpenRouter (/api/v1/models), DeepSeek (/v1/models), and local OpenAI-compatible endpoints (e.g. LM Studio). - In-Memory Cache & Network Resilience: Live model lists are cached process-wide for 1 hour (
CACHE_TTL). Configured a 6-second HTTP request timeout inmint_core::slash::model_fetcherto promptly and silently fall back to static presets on network/DNS errors, authentication failures, or offline environments without hanging. - Cross-Platform Parity across CLI, Desktop, and Web:
- CLI (
crates/mint-cli): Integrated async live model fetching into/models <provider>selection and the interactive onboarding wizard (mint onboard), complete with transient terminal loading feedback (Fetching available models...). - Desktop UI (
src/renderer/src): Added Tauri commandfetch_provider_modelsand React hookuseProviderModelspowering the Settings General tab for hosted providers and LM Studio. - Web UI (
src/renderer/src-web): Added API endpointGET /api/modelson the core API server, web-runtime shim insrc-web/tauri.ts, and Web UIuseProviderModelshook ensuring identical dynamic model lists.
- CLI (
- Replaced hardcoded model presets with live API discovery across Gemini (
-
Dynamic Image Model Fetching (Hybrid Approach):
- Replaced hardcoded image model presets with live API discovery across Google Gemini / NanoBanana (
/v1beta/models), OpenAI DALL·E (/v1/models), and Replicate (/v1/collections/text-to-image), with immediate static fallback for Stability AI, Ideogram, and Black Forest Labs (FLUX). - In-Memory Cache & Network Resilience: Live image model lists are cached process-wide for 1 hour (
CACHE_TTL), with a 6-second HTTP request timeout inmint_core::media::image_model_fetcherfalling back gracefully to static presets on offline or auth errors. - Cross-Platform Parity across CLI, Desktop, and Web:
- CLI (
crates/mint-cli): Added/image-modelsslash command, enhanced/image-providerwith live model fetching, and integrated live model discovery intomint onboardStep 4 with transient loading indicators. - Desktop UI (
src/renderer/src): Added Tauri commandfetch_image_provider_models, React hookuseImageProviderModels, and updated Settings General Tab & Image Studio Panel (ImageStudioPanel.tsx) with dynamic dropdown selection. - Web UI (
src/renderer/src-web): Added API endpointGET /api/image-modelsonmint_coreAPI server, web-runtime shim insrc-web/tauri.ts, and Web UIuseImageProviderModelshook ensuring identical dynamic image model discovery.
- CLI (
- Replaced hardcoded image model presets with live API discovery across Google Gemini / NanoBanana (
-
Dynamic Video Generation Model Fetching & Studio Parity (Google Veo):
- Transitioned Google Veo video generation from hardcoded strings to dynamic API-discovered model discovery with static fallback presets (
veo-3.1-generate-preview,veo-3.1-fast-generate-preview,veo-3.1-lite-generate-preview,veo-2.0-generate-001). - In-Memory Cache & Network Resilience (
mint_core::media::video_model_fetcher):- Live video models queried from Gemini API (
/v1beta/models), filtered byveo/videokeywords, withmodels/prefix stripping. - Cached process-wide for 1 hour (
CACHE_TTL = 3600s) with a 6-second timeout guard, falling back instantly to canonical presets inmint_core::media::video_modelson network or authentication errors.
- Live video models queried from Gemini API (
- Full Platform Parity across CLI, Desktop, and Web:
- CLI (
crates/mint-cli): Added/video-models(and/videomodels) slash command, upgraded/video-providerwith live discovery and interactive selection prompts (SlashResponse::NeedsChoice), and integrated live model fetching intomint onboardwith transient terminal loading indicators (Fetching available models...). - Desktop UI (
src/renderer/src): Added Tauri IPC commandfetch_video_provider_models, created React hookuseVideoProviderModels, and updated the Settings General tab to render dynamic model dropdowns with bidirectional configuration persistence. - Web UI (
src/renderer/src-web): Added REST API endpointGET /api/video-modelsand dedicatedGET /api/video-gen/providers, web-runtime IPC shim insrc-web/tauri.ts, and WebuseVideoProviderModelshook. - Veo Studio Panel (
VeoStudioPanel.tsx): Upgraded studio model selection dropdown to dynamically load available live models while preserving static presets, synchronizing the active model seamlessly with settings and CLI commands via the centralizedmodelManager.
- CLI (
- Transitioned Google Veo video generation from hardcoded strings to dynamic API-discovered model discovery with static fallback presets (
-
Application Version & Community Links in Settings Footer:
- Replaced the legacy "Quit Application" button in the Settings modal footer with a clean metadata block.
- Displays application version (
Version: {APP_VERSION}) dynamically sourced fromversion.ts. - Added external link to GitHub repository (GitHub) with external link indicator icon (
↗). - Added external link to Mint website (Website) with external link indicator icon (
↗). - Implemented across both Desktop UI (
src/renderer/src) and Web UI (src/renderer/src-web) with responsive wrapping on compact viewports (< 620px). - Exported
APP_VERSIONfrompackage.jsoninto a centralized frontend module (src/renderer/shared/version.ts) ensuring a single source of truth without manual string duplication. - Added
"version"reporting to the core API server/api/statusendpoint.