@pheem49/mint 1.8.1 → 1.8.2
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 +3 -3
- package/Cargo.toml +1 -1
- package/README.md +0 -17
- package/Release_Note.md +92 -58
- package/bin/mint +0 -0
- package/crates/mint-cli/src/agent.rs +100 -6
- package/crates/mint-cli/src/main.rs +166 -52
- package/crates/mint-core/src/agent_loop.rs +1 -0
- package/crates/mint-core/src/api_server.rs +55 -2
- package/crates/mint-core/src/browser.rs +55 -0
- package/crates/mint-core/src/channels.rs +1 -0
- package/crates/mint-core/src/chat.rs +3 -0
- package/crates/mint-core/src/config.rs +61 -0
- package/crates/mint-core/src/lib.rs +14 -0
- package/crates/mint-core/src/orchestration.rs +180 -11
- package/crates/mint-core/src/tts.rs +3 -1
- package/flatpak/com.pheem49.mint.desktop +9 -0
- package/flatpak/com.pheem49.mint.metainfo.xml +35 -0
- package/flatpak/com.pheem49.mint.yaml +52 -0
- package/package.json +1 -1
- package/shared-modules/.github/workflows/ci.yml +120 -0
- package/shared-modules/.github/workflows/update.yaml +28 -0
- package/shared-modules/CODEOWNERS +23 -0
- package/shared-modules/README.md +79 -0
- package/shared-modules/SDL/README.md +3 -0
- package/shared-modules/SDL/SDL-1.2.15.json +51 -0
- package/shared-modules/SDL/SDL_Pango-0.1.2-API-adds.patch +118 -0
- package/shared-modules/SDL/SDL_image-1.2.12.json +25 -0
- package/shared-modules/SDL/SDL_mixer-1.2.12.json +27 -0
- package/shared-modules/SDL/SDL_net-1.2.8.json +19 -0
- package/shared-modules/SDL/SDL_pango-0.1.2.json +26 -0
- package/shared-modules/SDL/SDL_ttf-2.0.11.json +28 -0
- package/shared-modules/SDL/libsdl-1.2.15-strict-prototypes.patch +316 -0
- package/shared-modules/SDL/sdl-check-for-SDL_VIDEO_X11_BACKINGSTORE.patch +24 -0
- package/shared-modules/SDL/sdl-libx11-build.patch +59 -0
- package/shared-modules/SDL/sdl-sysloadso-buffer-length.patch +27 -0
- package/shared-modules/SDL/sdl12-compat.json +22 -0
- package/shared-modules/SDL2/SDL2_image.json +27 -0
- package/shared-modules/SDL2/SDL2_ttf.json +29 -0
- package/shared-modules/cld2/CMakeLists.txt +157 -0
- package/shared-modules/cld2/cld2.json +24 -0
- package/shared-modules/clutter/clutter.json +72 -0
- package/shared-modules/dbus-glib/dbus-glib.json +29 -0
- package/shared-modules/glew/glew.json +36 -0
- package/shared-modules/glu/glu-9.json +12 -0
- package/shared-modules/gtk2/arc-gtk2-theme-Replace-Inkscape-dependency-with-rsvg-convert.patch +180 -0
- package/shared-modules/gtk2/gtk2-common-themes.json +360 -0
- package/shared-modules/gtk2/gtk2-fix-crash-in-show-uri.patch +30 -0
- package/shared-modules/gtk2/gtk2-gcc14.patch +281 -0
- package/shared-modules/gtk2/gtk2-gcc15.patch +250 -0
- package/shared-modules/gtk2/gtk2-murrine-c99.patch +34 -0
- package/shared-modules/gtk2/gtk2-use-adwaita-theme.patch +80 -0
- package/shared-modules/gtk2/gtk2.json +120 -0
- package/shared-modules/gtk2/ibus-gcc15.patch +13 -0
- package/shared-modules/gtk2/murrine-engine-fix-crash.patch +12 -0
- package/shared-modules/gtk2/readme.md +10 -0
- package/shared-modules/intltool/intltool-0.51.json +20 -0
- package/shared-modules/intltool/intltool-perl5.26-regex-fixes.patch +59 -0
- package/shared-modules/lame/0001-Build-xmm_quantize_sub.c-with-msse.patch +34 -0
- package/shared-modules/lame/0002-Include-GTK-1-autoconf-directives-in-build-system.patch +222 -0
- package/shared-modules/lame/0003-Patch-out-remaining-ansi2knr.patch +70 -0
- package/shared-modules/lame/0004-initscr-is-not-used-anywhere-in-lame-sourcetree.patch +41 -0
- package/shared-modules/lame/0005-Update-autoconf.patch +81 -0
- package/shared-modules/lame/lame-3.99.5.json +32 -0
- package/shared-modules/libappindicator/libappindicator-gtk2-12.10.json +140 -0
- package/shared-modules/libappindicator/libappindicator-gtk3-12.10.json +140 -0
- package/shared-modules/libappindicator/libappindicator-gtk3-introspection-12.10.json +140 -0
- package/shared-modules/libappindicator/patches/0001-libappindicator-ftbfs.patch +20 -0
- package/shared-modules/libappindicator/patches/0002-libappindicator-no-python.patch +888 -0
- package/shared-modules/libappindicator/patches/0003-libappindicator-fix-crash-from-incorrect-signal-emission.patch +74 -0
- package/shared-modules/libappindicator/patches/0004-libappindicator-fix-crash-iterating-icon-themes.patch +11 -0
- package/shared-modules/libayatana-appindicator/0001-Fix-HAVE_VALGRIND-AM_CONDITIONAL.patch +51 -0
- package/shared-modules/libayatana-appindicator/0001-Make-introspection-configurable.patch +44 -0
- package/shared-modules/libayatana-appindicator/libayatana-appindicator-gtk3.json +121 -0
- package/shared-modules/libcanberra/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch +123 -0
- package/shared-modules/libcanberra/libcanberra.json +44 -0
- package/shared-modules/libmad/libmad.json +19 -0
- package/shared-modules/libsecret/libsecret.json +23 -0
- package/shared-modules/libsoup/libsoup-2.4.json +14 -0
- package/shared-modules/libusb/libusb.json +27 -0
- package/shared-modules/linux-audio/dssi.json +31 -0
- package/shared-modules/linux-audio/fftw3f-static.json +44 -0
- package/shared-modules/linux-audio/fftw3f.json +42 -0
- package/shared-modules/linux-audio/fluidsynth2-static.json +30 -0
- package/shared-modules/linux-audio/fluidsynth2.json +19 -0
- package/shared-modules/linux-audio/ladspa.json +26 -0
- package/shared-modules/linux-audio/lash.json +35 -0
- package/shared-modules/linux-audio/libinstpatch.json +16 -0
- package/shared-modules/linux-audio/liblo-static.json +22 -0
- package/shared-modules/linux-audio/liblo.json +17 -0
- package/shared-modules/linux-audio/lilv-static.json +94 -0
- package/shared-modules/linux-audio/lilv.json +82 -0
- package/shared-modules/linux-audio/lrdf.json +57 -0
- package/shared-modules/linux-audio/lv2.json +21 -0
- package/shared-modules/linux-audio/patches/lash/0001-configure-remove-aclocal-m4.patch +29 -0
- package/shared-modules/linux-audio/patches/lash/0002-Fix-build-with-recent-gcc.patch +73 -0
- package/shared-modules/linux-audio/patches/lash/0003-Fix-linking.patch +136 -0
- package/shared-modules/linux-audio/patches/raptor-libxml.patch +31 -0
- package/shared-modules/linux-audio/patches/stk-install.sh +54 -0
- package/shared-modules/linux-audio/stk.json +28 -0
- package/shared-modules/lua5.1/0004-Fix-stack-overflow-in-vararg-functions.patch +21 -0
- package/shared-modules/lua5.1/lua-5.1.5-so.patch +43 -0
- package/shared-modules/lua5.1/lua-5.1.5.json +42 -0
- package/shared-modules/lua5.3/lua-5.3.5.json +41 -0
- package/shared-modules/lua5.3/lua.pc.in +8 -0
- package/shared-modules/lua5.3/luaconf.patch +47 -0
- package/shared-modules/lua5.3/makefile-add-liblua.so-rule.patch +47 -0
- package/shared-modules/lua5.4/lua-5.4.json +41 -0
- package/shared-modules/lua5.4/lua.pc.in +8 -0
- package/shared-modules/lua5.4/luaconf.patch +34 -0
- package/shared-modules/lua5.4/makefile-add-liblua.so-rule.patch +42 -0
- package/shared-modules/luajit/luajit.json +30 -0
- package/shared-modules/lzo/lzo.json +27 -0
- package/shared-modules/mac/mac.json +18 -0
- package/shared-modules/physfs/physfs.json +26 -0
- package/shared-modules/pygame/audiofile-gcc6.patch +21 -0
- package/shared-modules/pygame/cython-fixes.patch +34 -0
- package/shared-modules/pygame/fluidsynth-no-rawmidi.patch +69 -0
- package/shared-modules/pygame/glib.patch +25 -0
- package/shared-modules/pygame/pygame1-python2.json +157 -0
- package/shared-modules/pygtk/pygtk-c99.patch +15 -0
- package/shared-modules/pygtk/pygtk.json +117 -0
- package/shared-modules/pygtk/pygtk.patch +39 -0
- package/shared-modules/python2.7/python-2.7.json +48 -0
- package/shared-modules/smpeg/smpeg-0.4.5.json +50 -0
- package/shared-modules/smpeg/smpeg-am-prog-as.patch +12 -0
- package/shared-modules/smpeg/smpeg-export-mpegaudio-class.patch +17 -0
- package/shared-modules/smpeg/smpeg-gcc6.patch +40 -0
- package/shared-modules/smpeg/smpeg-no-gtk.patch +37 -0
- package/shared-modules/squashfs-tools/squashfs-tools.json +25 -0
- package/shared-modules/update-checker.sh +50 -0
- package/shared-modules/vorbisgain/0001-temp_files.patch +75 -0
- package/shared-modules/vorbisgain/0002-errno.patch +33 -0
- package/shared-modules/vorbisgain/0003-manpage.patch +248 -0
- package/shared-modules/vorbisgain/0004-vorbisgain_mtime.patch +183 -0
- package/shared-modules/vorbisgain/0005-double_fclose.patch +21 -0
- package/shared-modules/vorbisgain/0006-manpage_hyphens.patch +56 -0
- package/shared-modules/vorbisgain/0007-recursively_spelling.patch +14 -0
- package/shared-modules/vorbisgain/0008-manpage_recursion_mistake.patch +23 -0
- package/shared-modules/vorbisgain/0009-hardening.patch +13 -0
- package/shared-modules/vorbisgain/0010-fclose.patch +13 -0
- package/shared-modules/vorbisgain/README.md +23 -0
- package/shared-modules/vorbisgain/vorbisgain_0.37-2.json +29 -0
- package/src/renderer/shared/agentProgress.ts +145 -0
- package/src/renderer/shared/calculator.ts +52 -0
- package/src/renderer/shared/components/AgentActivityDrawer.tsx +72 -0
- package/src/renderer/shared/components/AgentActivityTable.tsx +66 -0
- package/src/renderer/shared/components/ApprovalCard.tsx +93 -0
- package/src/renderer/shared/components/ChatCodeBlock.tsx +75 -0
- package/src/renderer/shared/components/ThinkingBlock.tsx +101 -0
- package/src/renderer/shared/constants/models.ts +91 -0
- package/src/renderer/shared/platform.ts +82 -0
- package/src/renderer/shared/types.ts +140 -0
- package/src/renderer/shared/utils/agentActivity.ts +187 -0
- package/src/renderer/shared/utils/approval.ts +1 -0
- package/src/renderer/shared/utils/approval.tsx +64 -0
- package/src/renderer/shared/utils/markdown.tsx +347 -0
- package/src/renderer/shared/utils/providers.ts +36 -0
- package/src/renderer/shared/utils/speech.ts +216 -0
- package/src/renderer/shared/utils/ui.ts +147 -0
- package/src/renderer/src/agentProgress.ts +11 -39
- package/src/renderer/src/calculator.ts +3 -46
- package/src/renderer/src/components/ChatPanel.tsx +194 -1303
- package/src/renderer/src/components/MintDashboard.tsx +23 -169
- package/src/renderer/src/components/PicturesLibrary.tsx +32 -8
- package/src/renderer/src/components/Settings/AgentsTab.tsx +362 -0
- package/src/renderer/src/components/Settings/AutomationTab.tsx +0 -22
- package/src/renderer/src/components/SettingsWindow.tsx +53 -3
- package/src/renderer/src/css/styles.css +84 -0
- package/src/renderer/src/tauri.ts +128 -143
- package/src/renderer/src-web/agentProgress.ts +11 -39
- package/src/renderer/src-web/calculator.ts +3 -46
- package/src/renderer/src-web/components/ChatPanel.tsx +194 -1301
- package/src/renderer/src-web/components/MintDashboard.tsx +23 -169
- package/src/renderer/src-web/components/PicturesLibrary.tsx +23 -29
- package/src/renderer/src-web/components/Settings/AgentsTab.tsx +362 -0
- package/src/renderer/src-web/components/Settings/AutomationTab.tsx +0 -22
- package/src/renderer/src-web/components/SettingsWindow.tsx +53 -3
- package/src/renderer/src-web/css/styles.css +84 -0
- package/src/renderer/src-web/tauri.ts +180 -102
- package/src-tauri/src/lib.rs +137 -33
- package/src-tauri/src/webhooks.rs +1 -0
- package/src-tauri/src/workflows.rs +1 -0
- package/src-tauri/tauri.conf.json +1 -1
package/Cargo.lock
CHANGED
|
@@ -2095,7 +2095,7 @@ dependencies = [
|
|
|
2095
2095
|
|
|
2096
2096
|
[[package]]
|
|
2097
2097
|
name = "mint-cli"
|
|
2098
|
-
version = "1.8.
|
|
2098
|
+
version = "1.8.2"
|
|
2099
2099
|
dependencies = [
|
|
2100
2100
|
"anyhow",
|
|
2101
2101
|
"base64 0.22.1",
|
|
@@ -2114,7 +2114,7 @@ dependencies = [
|
|
|
2114
2114
|
|
|
2115
2115
|
[[package]]
|
|
2116
2116
|
name = "mint-core"
|
|
2117
|
-
version = "1.8.
|
|
2117
|
+
version = "1.8.2"
|
|
2118
2118
|
dependencies = [
|
|
2119
2119
|
"base64 0.22.1",
|
|
2120
2120
|
"chrono",
|
|
@@ -2135,7 +2135,7 @@ dependencies = [
|
|
|
2135
2135
|
|
|
2136
2136
|
[[package]]
|
|
2137
2137
|
name = "mint-desktop"
|
|
2138
|
-
version = "1.8.
|
|
2138
|
+
version = "1.8.2"
|
|
2139
2139
|
dependencies = [
|
|
2140
2140
|
"base64 0.22.1",
|
|
2141
2141
|
"dirs",
|
package/Cargo.toml
CHANGED
package/README.md
CHANGED
|
@@ -113,23 +113,6 @@ Mint is a local-first AI assistant running on your machine, capable of handling
|
|
|
113
113
|
- Right-click context menu to delete files/folders with confirmation modals.
|
|
114
114
|
- Drag-and-drop file mentions in the chat input with automatic spacing and dynamic accent-colored history bubble highlighting.
|
|
115
115
|
|
|
116
|
-
## What's New in v1.8.1
|
|
117
|
-
|
|
118
|
-
- **File-System Based AI Skills & UI Badges**: Scan and load AI skills from the Global folder (`~/.config/mint/mint-skills/`) and Workspace folders (`.agents/skills/` & `skills/`). Shows source badges (`Workspace` 🟢, `Global` 🔵, `Taught` 🟣) in settings UI and CLI listings (`mint learn --list` and `/learn`) with a clean hidden-content list view.
|
|
119
|
-
- **Unified MCP Servers UI & Toggle Controls**: Merged system-discovered servers into a unified list with toggles to enable/disable or install, and red trash can buttons to remove custom servers.
|
|
120
|
-
- **Advanced Workspace File Tree & Operations**: Manage files directly from the sidebar UI with file/folder creation buttons, right-click deletion modals, and automatic polling + focus-based syncing.
|
|
121
|
-
- **Drag-and-Drop File Mentions**: Drag files from the sidebar to chat input to insert `@filename` with auto-spacing, rendered as outline pills styled with your selected accent color.
|
|
122
|
-
- **CLI Agent Interface Polish & Terminal Line Wrapping Fix**: Indented status blocks and confirmation prompts by 2 spaces to align text. Implemented the *Dynamic Breathing Circle System* (`●` ⇄ `○` pulsing during thinking) and fixed terminal duplicate line bugs by counting physical terminal wrapping width and filtering Thai tone marks.
|
|
123
|
-
- **AskUser Text Input Modal (Desktop & Web)**: When the agent asks questions, a text input field is rendered inside the approval card so users can write and submit typed answers back to the agent backend.
|
|
124
|
-
- **Dynamic Language AI Suggestions**: Auto-translates process suggestions dynamically based on your configured `config.language`.
|
|
125
|
-
- **Mobile & Navigation Optimizations**: Mobile-fit Image Studio layout, hamburger menu access, and headers glass-morphism overlay fixes.
|
|
126
|
-
|
|
127
|
-
## What's New in v1.8.0
|
|
128
|
-
|
|
129
|
-
- **Integrated Web Search Settings**: Easily toggle between **Brave Search API** and **Google Custom Search API** directly from the General settings tab.
|
|
130
|
-
- **Image Generation Providers**: Choose and configure credentials for Stability AI, Ideogram, Replicate, OpenAI DALL-E, and Google NanoBanana (Gemini Images) inside dedicated inline settings cards.
|
|
131
|
-
- **Inline Productivity Settings**: Set up Client IDs, secrets, and API keys for native Gmail, Google Calendar, and Notion integrations inline inside the General settings tab.
|
|
132
|
-
- **Revamped Plugins Layout**: Moved **Learned AI Skills** (equivalent to `mint learn` in CLI) to the top of the Plugins tab, followed by MCP Servers (External tools), and Built-in Plugins (Spotify and Discord RPC) at the bottom.
|
|
133
116
|
|
|
134
117
|
## <img src="assets/setup.svg" width="24" height="24" valign="middle" /> Prerequisites
|
|
135
118
|
|
package/Release_Note.md
CHANGED
|
@@ -1,67 +1,72 @@
|
|
|
1
|
-
# Release Notes - Mint Agent v1.8.
|
|
1
|
+
# Release Notes - Mint Agent v1.8.2
|
|
2
2
|
|
|
3
|
-
We are excited to release **Mint Agent v1.8.
|
|
3
|
+
We are excited to release **Mint Agent v1.8.2**! This release introduces a configurable Multi-Agent system for sequential collaboration, powerful local workspace file management features, real-time AI-generated workflow suggestions in the user's active language, mobile layout optimization, and general UI/UX polish.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## 🔍 Web Search Source Cards
|
|
8
|
+
- **Favicon Source Cards:** After a web search, compact clickable source cards now appear above the AI response bubble — each showing the website's favicon, domain name, and a tooltip with the page snippet. Clicking a card opens the source in the browser.
|
|
9
|
+
- **Frontend-only change:** Parsed directly from existing `AgentProgress` `ToolEnd` events — no backend changes required.
|
|
10
|
+
- The AI response also includes a plain-text `Sources:` section listing title and URL for each result used.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
|
|
7
15
|
## 🚀 Key Features & Enhancements
|
|
8
16
|
|
|
9
|
-
###
|
|
10
|
-
You can now
|
|
11
|
-
- **
|
|
12
|
-
- **
|
|
13
|
-
- **
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- **
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
30
|
-
- **
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
- **
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
- **
|
|
47
|
-
- **
|
|
48
|
-
|
|
49
|
-
###
|
|
50
|
-
|
|
51
|
-
- **
|
|
52
|
-
- **Auto-
|
|
53
|
-
- **
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- **
|
|
58
|
-
- **
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- **Consolidated List:** Merged all system-discovered tools (Docker, Git, GitHub, Node) into the unified MCP Servers list.
|
|
63
|
-
- **Individual Toggle Switches:** Enables/disables or installs MCP servers dynamically with instant toggle state styling.
|
|
64
|
-
- **Red Trash Can Buttons:** Added a red trash icon button to easily remove custom/manually configured MCP servers.
|
|
17
|
+
### 🛑 1. Escape (Esc) Key & Stop Button to Cancel AI Agent / Chat
|
|
18
|
+
You can now cancel or stop an active AI stream or agent loop at any point in the web and desktop applications:
|
|
19
|
+
- **Escape Key Press:** Pressing the `Esc` key while the AI is thinking or executing automatically aborts the active stream.
|
|
20
|
+
- **Red Stop Composer Button:** When the AI is running, the composer "Send" button turns into a red "Stop" square icon button, allowing users to stop the generation instantly.
|
|
21
|
+
- **Thinking Label Hints:** Updated the progress indicator label to explicitly display "Thinking for Xs (Esc to cancel)" so users are aware of the shortcut.
|
|
22
|
+
|
|
23
|
+
### 🎙️ 2. Microphone Active Breathing Aura Glow
|
|
24
|
+
When the microphone/voice mode is active, the boundaries of the chat composer box and the voice status bar light up with a dynamic, breathing green aura, providing intuitive visual feedback.
|
|
25
|
+
|
|
26
|
+
### 🤖 3. Configurable Multi-Agent System & Collaboration Pipeline
|
|
27
|
+
Users can now configure and run multiple specialized AI agents (e.g. Planner, Coder, Reviewer) within the desktop and web settings panel, allocating custom models, providers, and instructions to each agent:
|
|
28
|
+
- **Global Toggle Switch:** Added a main "Enable Multi-Agent Collaboration" toggle switch at the top of the new "Multi-Agent (Beta)" settings tab to globally turn on/off the agent routing pipeline.
|
|
29
|
+
- **Provider-Specific Dropdowns:** Replaced the text input for model selection with provider-specific dropdown select lists matching the models available in General settings.
|
|
30
|
+
- **Disable All Button:** Added a "Disable All" button allowing users to disable all configured agents instantly in one click.
|
|
31
|
+
- **Real-Time Agent & Model Indicators:** The live thinking message bubble in the chat panel dynamically displays the active agent's name and model in real-time (e.g. `Planner (gemini-2.5-flash) is thinking...`).
|
|
32
|
+
|
|
33
|
+
### 🖥️ 4. CLI Suggestions Pagination & Ordering
|
|
34
|
+
Improved the autocomplete experience in the terminal:
|
|
35
|
+
- **Pagination (5 Items Max):** Autocomplete suggestions now display a maximum of 5 commands at a time with a page indicator (e.g., `Suggestions (1/4)`), preventing long list clutter.
|
|
36
|
+
- **Alphabetical Sorting:** Autocomplete suggestions are sorted alphabetically at source.
|
|
37
|
+
- **Simplified Exit Options:** Removed `/quit` from the autocomplete suggestions and help output (while retaining hidden execution support) to clean up the interface.
|
|
38
|
+
- **Real-Time Agent & Model Status:** The CLI live thinking status bar dynamically displays which agent and model is executing.
|
|
39
|
+
|
|
40
|
+
### 📋 5. Fix Clipboard Permission Popup on Text Paste (Ctrl+V)
|
|
41
|
+
- Fixed a bug where pasting text (or pressing `Ctrl + V`) would trigger a browser-level clipboard permission warning popup (asking to "Allow Paste").
|
|
42
|
+
- Removed the redundant global `keydown` Ctrl+V listener and the async `navigator.clipboard.read()` fallback on text paste events. The application now correctly relies on standard, synchronous `event.clipboardData` values during paste events, ensuring seamless pasting of both images and text without prompting the user.
|
|
43
|
+
|
|
44
|
+
### 📦 6. Codebase Refactoring & Shared Utilities
|
|
45
|
+
- **Shared UI & Progress Helpers:** Refactored duplicate helper functions and TypeScript interfaces from the desktop renderer (`src/renderer/src`) and web renderer (`src/renderer/src-web`) into the unified `shared` codebase.
|
|
46
|
+
- **Maintainability:** Standardized helper functions across both application targets to prevent future regressions.
|
|
47
|
+
|
|
48
|
+
### 🖥️ 7. Horizontal Scrolling for CLI Input Box
|
|
49
|
+
- **Arbitrary Input Length:** Removed the single-line input constraint (previously restricted to `term_width - 4`) in the CLI interactive prompt, allowing users to type or edit long prompt instructions.
|
|
50
|
+
- **Dynamic Sliding Window:** Implemented a horizontal scrolling viewport for the single-line prompt box. It dynamically slices and displays a subset of characters surrounding the cursor position to preserve console alignment and layout integrity.
|
|
51
|
+
- **Interactive Cursor Navigation:** Bounded the arrow keys (`Left` and `Right` navigation) to trigger full box redraws, enabling the visible text window to scroll back and forward dynamically as the cursor moves.
|
|
52
|
+
|
|
53
|
+
### 🖥️ 8. Browser Automation Visual Indicator (Green Aura)
|
|
54
|
+
- **Visual Feedback:** Injects a breathing green glowing border overlay around the viewport of any browser page under active AI control.
|
|
55
|
+
- **Non-Intrusive Design:** Built with `pointer-events: none` and a high z-index to ensure it sits on top of all page elements without blocking clicks, scrolling, or user interactions.
|
|
56
|
+
|
|
57
|
+
### 🎙️ 9. Client-Side Speech-to-Text Microphone Consolidation
|
|
58
|
+
- **Consolidated Flow**: Standardized the voice interface to client-side Speech-to-Text (`SpeechRecognition`), enabling compatibility with all AI models (Gemini, OpenAI, Claude, etc.) by transcribing voice to text before sending.
|
|
59
|
+
- **Accurate Speech End Detection**: Configured the Speech-to-Text engine to run in continuous mode (`continuous = true`) so it keeps listening continuously across normal speaking pauses. Added a custom silence timer that triggers sending only after a full 2 seconds of silence, and fixed a loop bug by triggering the timer only after the user starts speaking (preventing the mic from cycling on and off during initial silence).
|
|
60
|
+
- **TTS Language Auto-Detection**: Added automatic Thai character detection in both frontend system voice lookup (now matching language tags case-insensitively) and backend Google Translate TTS generation, resolving the issue where Thai responses were read aloud in English voices.
|
|
61
|
+
- **Codebase Simplification & Hook Refactoring**: Extracted all Speech-to-Text logic, Web Speech APIs, silence timers, and React states into a shared, reusable custom hook `useSpeechToText` in [speech.ts](file:///home/pheem49/vscode/Project/Mint-CLI/src/renderer/shared/utils/speech.ts). This cleaned up ~150 lines of duplicate code in both desktop and web `ChatPanel.tsx` components.
|
|
62
|
+
- **Native App Guidance**: Added a helper prompt to notify users if they attempt to record voice in a browser or WebView that doesn't natively support SpeechRecognition (such as Firefox, Safari, or the Tauri desktop application on Linux/Windows), guiding them to use Google Chrome or Microsoft Edge instead.
|
|
63
|
+
|
|
64
|
+
### 🖼️ 10. Saved Pictures Gallery Pagination & Caching
|
|
65
|
+
- **24-Picture Pagination**: Refactored the Saved Pictures library component to load exactly 24 images initially, replacing the buggy automatic timer loading with a clean, manual "Load More" button at the bottom of the grid.
|
|
66
|
+
- **Cache-Busting Image URLs**: Appended a dynamic timestamp query parameter (`?_t=...`) to the static API picture fetches and individual image URLs. This prevents the browser from loading stale lists or caching broken images, ensuring that clicking "Refresh" successfully resolves any missing or incomplete pictures.
|
|
67
|
+
|
|
68
|
+
### 🤖 11. AI Model Self-Awareness Context Injection
|
|
69
|
+
- **Dynamic Context Injection**: Updated the core prompt compilation layer to automatically append an `[Active Environment Context]` block to the system instructions. This supplies the active AI model name and provider to the AI model itself, allowing the AI to successfully know its own model configurations in real-time when queried by the user.
|
|
65
70
|
|
|
66
71
|
---
|
|
67
72
|
|
|
@@ -75,6 +80,15 @@ Upgraded the AI skills loading pipeline and settings interface:
|
|
|
75
80
|
- Change `submit_tool_approval` signature and `ApprovalsState` pending channel type to support `ApprovalOutcome` in `src-tauri/src/lib.rs`.
|
|
76
81
|
- Add executable search helper `which` and GitKraken auto-detection hooks to `load_config_from` in `crates/mint-core/src/config.rs`.
|
|
77
82
|
- Support multiple source directory scanning and deduplication of learned skills in `crates/mint-core/src/skills.rs`.
|
|
83
|
+
- Introduce a global `ACTIVE_AGENTS` thread-safe hash map registry and `cancel_agent` API in `crates/mint-core/src/lib.rs` to track active tokio tasks.
|
|
84
|
+
- Register Tauri command `cancel_chat_message` in `src-tauri/src/lib.rs`.
|
|
85
|
+
- Implement `POST /api/cancel-chat` in `crates/mint-core/src/api_server.rs` to cancel running web agent tasks.
|
|
86
|
+
- Add `enable_agent_collaboration` config parameter (defaulting to `false`) in `crates/mint-core/src/config.rs`.
|
|
87
|
+
- Update `resolve_agent_config` in `crates/mint-core/src/orchestration.rs` to return a tuple containing the active agent name and model, and check `enable_agent_collaboration`.
|
|
88
|
+
- Expand `AgentProgress::Thinking` in `crates/mint-core/src/orchestration.rs` to optionally contain `agent_name` and `model_name`.
|
|
89
|
+
- Inject active AI provider and model name environment context inside `enrich_request` and the initial prompt observation inside `crates/mint-core/src/orchestration.rs` so that the model becomes fully self-aware of its configuration and execution metadata.
|
|
90
|
+
- Inject a green aura viewport border style and DOM overlay (`#mint-browser-aura`) into the active browser page before executing CDP automation actions in `crates/mint-core/src/browser.rs` to visually notify users of active AI control.
|
|
91
|
+
|
|
78
92
|
|
|
79
93
|
### Desktop/Web Frontend (`src/renderer`)
|
|
80
94
|
- Integrate creation/deletion actions and focus/polling lifecycle listeners inside `WorkspacePanel.tsx`.
|
|
@@ -84,12 +98,32 @@ Upgraded the AI skills loading pipeline and settings interface:
|
|
|
84
98
|
- Update `activitiesFrom` and `AgentActivity` structure to parse and append the user's answer into the active `ask_user` tool target block upon `ToolEnd`.
|
|
85
99
|
- Update `LearnedSkill` TypeScript interface in `src/renderer/src/tauri.ts` to include optional `location`.
|
|
86
100
|
- Render colored location badges, strip lengthy content text boxes, and unify MCP toggles/delete controls in `src/renderer/src/components/Settings/PluginsTab.tsx` and `src/renderer/src-web/components/Settings/PluginsTab.tsx`.
|
|
101
|
+
- Implement `cancelChatMessage` API helpers in `tauri.ts` for desktop and web.
|
|
102
|
+
- Bind global Window keydown listeners for `Escape` key and dynamic "Stop" buttons in `ChatPanel.tsx` and `MintDashboard.tsx` under desktop and web source directories.
|
|
103
|
+
- Enhance microphone connection/permission alert dialogs in `ChatPanel.tsx` to print the exact Web API error message for easier debugging.
|
|
104
|
+
- Add voice-active class state and breathing keyframe animation effects around the chat input boundaries when microphone mode is active.
|
|
105
|
+
- Refine the voice status bar rendering logic to prevent displaying redundant text (such as "Listening Listening...") and display actual user speech transcripts wrapped inside quotes instead.
|
|
106
|
+
- Create new settings tab `AgentsTab.tsx` in desktop and web source directories supporting CRUD operations, provider-specific model dropdown selects, "Disable All" button, and global collaboration toggle.
|
|
107
|
+
- Register the `Multi-Agent (Beta)` tab in the sidebar of `SettingsWindow.tsx`.
|
|
108
|
+
- Update `ChatPanel.tsx` in desktop and web source directories to render the active agent and model names inside the live thinking status message.
|
|
109
|
+
- Remove duplicate "Enable Multi-Agent Review" checkbox from `AutomationTab.tsx`.
|
|
110
|
+
- Remove redundant `handleWindowKeyDown` Ctrl+V listeners, unused `onReadClipboardImage` prop, and `navigator.clipboard.read()` async fallback routines from `ChatPanel.tsx` and `MintDashboard.tsx` in both desktop and web directories to resolve browser clipboard permission warning popups during text pasting.
|
|
111
|
+
- Refactor duplicated types (`DiffHunk`, `FileChange`), helper functions (`numericSetting`, `errorMessage`, `readImage`, `readDocument`, `createTrimmedImagePreview`, `lightenColor`, `hexToRgb`, `applyThemeStyles`), and progress parsers (`parseFileChangesFromProgress`) from the desktop and web components to a central `src/renderer/shared` repository. Corrected a type checking issue by exporting `AgentProgress` and `InteractionMemory` from `shared/agentProgress.ts`.
|
|
112
|
+
- Consolidate microphone interface to client-side Speech-to-Text (`SpeechRecognition`), extract STT states, silence-detection timers, and event listeners into a reusable React hook `useSpeechToText` in [speech.ts](file:///home/pheem49/vscode/Project/Mint-CLI/src/renderer/shared/utils/speech.ts), and clean up both desktop (`src/renderer/src/components/ChatPanel.tsx`) and web (`src/renderer/src-web/components/ChatPanel.tsx`) `ChatPanel` components.
|
|
113
|
+
- Implement 24-picture pagination, a manual "Load More" button, and API/image fetch cache-busters in `PicturesLibrary.tsx` and `tauri.ts` across desktop and web directories.
|
|
87
114
|
|
|
88
115
|
### CLI Agent (`crates/mint-cli`)
|
|
89
116
|
- Redefine live status print lines (`plan_lines`, `tasks_lines`, `activities_lines`, `explored_lines`) to accept progress tick state and apply the `get_bullet` helper.
|
|
90
117
|
- Update `render_live_status` in `crates/mint-cli/src/agent.rs` to compute true physical lines of terminal wrapped text, using a new `is_thai_combining` filter.
|
|
91
118
|
- Modify `confirm` in `crates/mint-cli/src/main.rs` to indent confirmation prompts.
|
|
92
119
|
- Format `mint learn --list` and `/learn` CLI output into a bullet-point summary showing active skill locations and source paths.
|
|
120
|
+
- Register `/multi-agent` slash command to display configured agents and toggle collaboration status via `/multi-agent on` and `/multi-agent off` in `crates/mint-cli/src/main.rs`.
|
|
121
|
+
- Reorder `AUTOCOMPLETE_COMMANDS` alphabetically and simplify exit suggestions by keeping only `/exit`.
|
|
122
|
+
- Paginate suggestions to display at most 5 items per page with page numbers.
|
|
123
|
+
- Fixed `AgentProgress::Thinking` pattern matching compiler error (E0027) in `crates/mint-cli/src/agent.rs` and render active agent and model names in the live thinking terminal status bar.
|
|
124
|
+
- Implement horizontal scrolling viewport for the CLI prompt input box in `crates/mint-cli/src/main.rs`, slicing the visible text to fit the terminal screen and adjusting the cursor column offset accordingly, allowing arbitrary length instructions.
|
|
125
|
+
- Save `provider_change` system interaction events to the database and render a beautiful styled horizontal divider in the console when switching models via `/models` inside `crates/mint-cli/src/main.rs`.
|
|
126
|
+
|
|
93
127
|
|
|
94
128
|
### Github CI/CD Workflows
|
|
95
129
|
- Modify `Publish GitHub release` step in `.github/workflows/release.yml` to use `body_path: Release_Note.md`.
|
package/bin/mint
CHANGED
|
Binary file
|
|
@@ -184,13 +184,19 @@ pub async fn run_code_agent_with_options(
|
|
|
184
184
|
}
|
|
185
185
|
let progress_live_status = Arc::clone(&live_status);
|
|
186
186
|
let progress_cb = |progress: AgentProgress| match progress {
|
|
187
|
-
AgentProgress::Thinking {
|
|
187
|
+
AgentProgress::Thinking {
|
|
188
|
+
elapsed_secs,
|
|
189
|
+
agent_name,
|
|
190
|
+
model_name,
|
|
191
|
+
} => {
|
|
188
192
|
if !options.fast_mode {
|
|
189
193
|
if let Ok(mut status) = progress_live_status.lock() {
|
|
190
|
-
|
|
191
|
-
"
|
|
192
|
-
|
|
193
|
-
|
|
194
|
+
let label = if let (Some(a), Some(m)) = (agent_name, model_name) {
|
|
195
|
+
format!("{} ({}) is thinking ({} • Esc to interrupt)", a, m, format_elapsed(Duration::from_secs(elapsed_secs)))
|
|
196
|
+
} else {
|
|
197
|
+
format!("Thinking ({} • Esc to interrupt)", format_elapsed(Duration::from_secs(elapsed_secs)))
|
|
198
|
+
};
|
|
199
|
+
status.thinking = Some(label);
|
|
194
200
|
render_live_status(&mut status);
|
|
195
201
|
}
|
|
196
202
|
}
|
|
@@ -325,6 +331,16 @@ pub async fn run_code_agent_with_options(
|
|
|
325
331
|
render_live_status(&mut status);
|
|
326
332
|
}
|
|
327
333
|
}
|
|
334
|
+
// Parse web search sources from the result and store them for display
|
|
335
|
+
if action == "web_search"
|
|
336
|
+
&& !result.starts_with("Web search error:")
|
|
337
|
+
&& result != "No web search results found."
|
|
338
|
+
{
|
|
339
|
+
if let Ok(mut status) = progress_live_status.lock() {
|
|
340
|
+
let sources = parse_web_search_sources(&result);
|
|
341
|
+
status.web_sources.extend(sources);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
328
344
|
}
|
|
329
345
|
};
|
|
330
346
|
|
|
@@ -337,9 +353,23 @@ pub async fn run_code_agent_with_options(
|
|
|
337
353
|
clear_live_status(&mut status);
|
|
338
354
|
}
|
|
339
355
|
}
|
|
340
|
-
let formatted_summary = format_markdown_bold(&summary);
|
|
356
|
+
let formatted_summary = format_markdown_bold(&sanitize_latex(&summary));
|
|
341
357
|
print!("\n {MINT}Mint:{RESET} ");
|
|
342
358
|
render_live_summary(&formatted_summary);
|
|
359
|
+
|
|
360
|
+
// Print web search sources if any were collected
|
|
361
|
+
if let Ok(mut status) = chunk_live_status.lock() {
|
|
362
|
+
if !status.web_sources.is_empty() {
|
|
363
|
+
println!();
|
|
364
|
+
println!(" {DIM}Sources:{RESET}");
|
|
365
|
+
for (i, (title, url)) in status.web_sources.iter().enumerate() {
|
|
366
|
+
println!(" {DIM}{}.{RESET} {BLUE}{}{RESET}", i + 1, title);
|
|
367
|
+
println!(" {DIM}{}{RESET}", url);
|
|
368
|
+
}
|
|
369
|
+
status.web_sources.clear();
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
343
373
|
println!();
|
|
344
374
|
};
|
|
345
375
|
|
|
@@ -349,6 +379,7 @@ pub async fn run_code_agent_with_options(
|
|
|
349
379
|
root,
|
|
350
380
|
image_data_uri,
|
|
351
381
|
Some(CHAT_CLI_ID),
|
|
382
|
+
None,
|
|
352
383
|
options.fast_mode,
|
|
353
384
|
approve_cb,
|
|
354
385
|
progress_cb,
|
|
@@ -396,6 +427,34 @@ fn clear_working_status() {
|
|
|
396
427
|
let _ = io::stdout().flush();
|
|
397
428
|
}
|
|
398
429
|
|
|
430
|
+
/// Parse (title, url) pairs from the formatted `web_search` ToolEnd result text.
|
|
431
|
+
/// The format produced by orchestration.rs is:
|
|
432
|
+
/// 1. Title\n URL: https://...\n Snippet\n
|
|
433
|
+
fn parse_web_search_sources(result: &str) -> Vec<(String, String)> {
|
|
434
|
+
let mut sources = Vec::new();
|
|
435
|
+
let mut current_title: Option<String> = None;
|
|
436
|
+
for line in result.lines() {
|
|
437
|
+
let trimmed = line.trim();
|
|
438
|
+
// Match numbered title lines: "1. Title text"
|
|
439
|
+
if let Some(rest) = trimmed.split_once(". ") {
|
|
440
|
+
if rest.0.parse::<usize>().is_ok() {
|
|
441
|
+
current_title = Some(rest.1.trim().to_owned());
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// Match URL lines: "URL: https://..."
|
|
446
|
+
if let Some(url) = trimmed.strip_prefix("URL: ") {
|
|
447
|
+
if let Some(title) = current_title.take() {
|
|
448
|
+
let url = url.trim().to_owned();
|
|
449
|
+
if !url.is_empty() {
|
|
450
|
+
sources.push((title, url));
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
sources
|
|
456
|
+
}
|
|
457
|
+
|
|
399
458
|
fn format_elapsed(duration: Duration) -> String {
|
|
400
459
|
let total_seconds = duration.as_secs();
|
|
401
460
|
let minutes = total_seconds / 60;
|
|
@@ -487,6 +546,8 @@ struct LiveStatus {
|
|
|
487
546
|
committed_tasks: usize,
|
|
488
547
|
rendered_lines: usize,
|
|
489
548
|
spinner_tick: usize,
|
|
549
|
+
/// Sources collected from web_search ToolEnd results (title, url)
|
|
550
|
+
web_sources: Vec<(String, String)>,
|
|
490
551
|
}
|
|
491
552
|
|
|
492
553
|
#[derive(Debug, Clone)]
|
|
@@ -975,3 +1036,36 @@ fn process_inline_bold(text: &str) -> String {
|
|
|
975
1036
|
}
|
|
976
1037
|
result
|
|
977
1038
|
}
|
|
1039
|
+
|
|
1040
|
+
/// Replace common LaTeX math symbols with Unicode equivalents.
|
|
1041
|
+
/// Fixes garbled output like "ightarrow$" from models that emit LaTeX notation.
|
|
1042
|
+
fn sanitize_latex(text: &str) -> String {
|
|
1043
|
+
let mut s = text.to_owned();
|
|
1044
|
+
for (pat, uni) in [
|
|
1045
|
+
// arrows
|
|
1046
|
+
("$\\rightarrow$", "→"),
|
|
1047
|
+
("$\\leftarrow$", "←"),
|
|
1048
|
+
("$\\Rightarrow$", "⇒"),
|
|
1049
|
+
("$\\Leftarrow$", "⇐"),
|
|
1050
|
+
("$\\leftrightarrow$", "↔"),
|
|
1051
|
+
// comparison
|
|
1052
|
+
("$\\leq$", "≤"),
|
|
1053
|
+
("$\\geq$", "≥"),
|
|
1054
|
+
("$\\neq$", "≠"),
|
|
1055
|
+
("$\\approx$", "≈"),
|
|
1056
|
+
// math
|
|
1057
|
+
("$\\times$", "×"),
|
|
1058
|
+
("$\\div$", "÷"),
|
|
1059
|
+
("$\\pm$", "±"),
|
|
1060
|
+
("$\\infty$", "∞"),
|
|
1061
|
+
("$\\cdot$", "·"),
|
|
1062
|
+
// sets
|
|
1063
|
+
("$\\in$", "∈"),
|
|
1064
|
+
("$\\subset$", "⊂"),
|
|
1065
|
+
("$\\cup$", "∪"),
|
|
1066
|
+
("$\\cap$", "∩"),
|
|
1067
|
+
] {
|
|
1068
|
+
s = s.replace(pat, uni);
|
|
1069
|
+
}
|
|
1070
|
+
s
|
|
1071
|
+
}
|