1
0
mirror of https://github.com/tw93/Mole.git synced 2026-02-14 15:52:29 +00:00

Merge branch 'main' into dev

This commit is contained in:
Tw93
2025-12-14 09:29:31 +08:00
10 changed files with 41 additions and 8 deletions

3
.gitignore vendored
View File

@@ -41,6 +41,9 @@ temp/
# AI Assistant Instructions # AI Assistant Instructions
.claude/ .claude/
.gemini/
CLAUDE.md
GEMINI.md
.cursorrules .cursorrules
# Go build artifacts (development) # Go build artifacts (development)

View File

@@ -1 +0,0 @@
AGENT.md

View File

@@ -1 +0,0 @@
AGENT.md

View File

@@ -1,8 +1,8 @@
# Mole Security Audit Report # Mole Security Audit Report
**Date:** December 12, 2025 **Date:** December 14, 2025
**Audited Version:** Current `main` branch **Audited Version:** Current `main` branch (V1.12.25)
**Status:** Passed **Status:** Passed
@@ -53,7 +53,7 @@ Mole's "Smart Uninstall" and orphan detection (`lib/clean/apps.sh`) are intentio
- **Active Uninstallation Heuristics** - **Active Uninstallation Heuristics**
When a user explicitly selects an app for uninstallation, Mole employs advanced heuristics to find scattered remnants (e.g., "Visual Studio Code" -> `~/.vscode`, `~/Library/Application Support/VisualStudioCode`). When a user explicitly selects an app for uninstallation, Mole employs advanced heuristics to find scattered remnants (e.g., "Visual Studio Code" -> `~/.vscode`, `~/Library/Application Support/VisualStudioCode`).
- **Sanitized Name Matching**: We search for app name variations to catch non-standard folder naming. - **Sanitized Name Matching**: We search for app name variations to catch non-standard folder naming.
- **Safety Constraints**: Fuzzy matching and sanitized name searches are **strictly disabled** for app names shorter than 4 characters to prevent false positives. - **Safety Constraints**: Fuzzy matching and sanitized name searches are **strictly disabled** for app names shorter than 3 characters to prevent false positives.
- **System Scope**: Mole scans specific system-level directories (`/Library/LaunchAgents`, etc.) for related components. - **System Scope**: Mole scans specific system-level directories (`/Library/LaunchAgents`, etc.) for related components.
- **System Integrity Protection (SIP) Awareness** - **System Integrity Protection (SIP) Awareness**
@@ -65,6 +65,12 @@ Mole's "Smart Uninstall" and orphan detection (`lib/clean/apps.sh`) are intentio
- **VPN & Proxy Protection** - **VPN & Proxy Protection**
Mole includes a comprehensive protection layer for VPN and Proxy applications (e.g., Shadowsocks, V2Ray, Tailscale). It protects both their application bundles and data directories from automated cleanup to prevent network configuration loss. Mole includes a comprehensive protection layer for VPN and Proxy applications (e.g., Shadowsocks, V2Ray, Tailscale). It protects both their application bundles and data directories from automated cleanup to prevent network configuration loss.
- **AI & LLM Data Protection (New in v1.12.25)**
Mole now explicitly protects data for AI tools (Cursor, Claude, ChatGPT, Ollama, LM Studio, etc.). Both the automated cleaning logic (`bin/clean.sh`) and orphan detection (`lib/core/app_protection.sh`) exclude these applications to prevent loss of:
- Local LLM models (which can be gigabytes in size).
- Authentication tokens and session states.
- Chat history and local configurations.
## 4. Atomic Operations & Crash Safety ## 4. Atomic Operations & Crash Safety
We anticipate that scripts can be interrupted (e.g., power loss, `Ctrl+C`). We anticipate that scripts can be interrupted (e.g., power loss, `Ctrl+C`).

Binary file not shown.

View File

@@ -223,7 +223,7 @@ safe_clean() {
# Hard-coded protection for critical apps (cannot be disabled by user) # Hard-coded protection for critical apps (cannot be disabled by user)
case "$path" in case "$path" in
*clash* | *Clash* | *surge* | *Surge* | *mihomo* | *openvpn* | *OpenVPN* | *verge* | *Verge* | *shadowsocks* | *Shadowsocks* | *v2ray* | *V2Ray* | *sing-box* | *tailscale* | *nordvpn* | *NordVPN* | *expressvpn* | *ExpressVPN* | *protonvpn* | *ProtonVPN* | *mullvad* | *Mullvad* | *hiddify* | *Hiddify* | *loon* | *Loon*) *clash* | *Clash* | *surge* | *Surge* | *mihomo* | *openvpn* | *OpenVPN* | *verge* | *Verge* | *shadowsocks* | *Shadowsocks* | *v2ray* | *V2Ray* | *sing-box* | *tailscale* | *nordvpn* | *NordVPN* | *expressvpn* | *ExpressVPN* | *protonvpn* | *ProtonVPN* | *mullvad* | *Mullvad* | *hiddify* | *Hiddify* | *loon* | *Loon* | *Cursor* | *cursor* | *Claude* | *claude* | *ChatGPT* | *chatgpt* | *Ollama* | *ollama* | *lmstudio* | *Chatbox* | *Gemini* | *gemini* | *Perplexity* | *perplexity* | *Windsurf* | *windsurf* | *Poe* | *poe* | *DiffusionBee* | *diffusionbee* | *DrawThings* | *drawthings*)
skip=true skip=true
((skipped_count++)) ((skipped_count++))
;; ;;

Binary file not shown.

View File

@@ -137,7 +137,9 @@ clean_sandboxed_app_caches() {
# Clean contents safely # Clean contents safely
# We know this is a user cache path, so rm -rf is acceptable here # We know this is a user cache path, so rm -rf is acceptable here
# provided we keep the Cache directory itself # provided we keep the Cache directory itself
rm -rf "${cache_dir:?}"/* 2> /dev/null || true for item in "${cache_dir:?}"/*; do
safe_remove "$item" true || true
done
fi fi
fi fi
fi fi

View File

@@ -109,6 +109,30 @@ readonly DATA_PROTECTED_BUNDLES=(
"abnerworks.Typora" # Typora (Markdown editor) "abnerworks.Typora" # Typora (Markdown editor)
"com.uranusjr.macdown" # MacDown "com.uranusjr.macdown" # MacDown
# ============================================================================
# AI & LLM Tools
# ============================================================================
"com.todesktop.*" # Cursor (often uses generic todesktop ID)
"Cursor" # Cursor App Support
"com.anthropic.claude*" # Claude
"Claude" # Claude App Support
"com.openai.chat*" # ChatGPT
"ChatGPT" # ChatGPT App Support
"com.ollama.ollama" # Ollama
"Ollama" # Ollama App Support
"com.lmstudio.lmstudio" # LM Studio
"LM Studio" # LM Studio App Support
"co.supertool.chatbox" # Chatbox
"page.jan.jan" # Jan
"com.huggingface.huggingchat" # HuggingChat
"Gemini" # Gemini
"com.perplexity.Perplexity" # Perplexity
"com.drawthings.DrawThings" # Draw Things
"com.divamgupta.diffusionbee" # DiffusionBee
"com.exafunction.windsurf" # Windsurf
"com.quora.poe.electron" # Poe
"chat.openai.com.*" # OpenAI web wrappers
# ============================================================================ # ============================================================================
# Development Tools - Database Clients # Development Tools - Database Clients
# ============================================================================ # ============================================================================

2
mole
View File

@@ -22,7 +22,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/core/common.sh" source "$SCRIPT_DIR/lib/core/common.sh"
# Version info # Version info
VERSION="1.12.24" VERSION="1.12.25"
MOLE_TAGLINE="can dig deep to clean your Mac." MOLE_TAGLINE="can dig deep to clean your Mac."
# Check if Touch ID is already configured # Check if Touch ID is already configured