Files
cutThink_lite/CLAUDE.md
Claude 39031bda68 fix: migrate to Tauri v2 and fix compilation errors
- Update @tauri-apps/api and @tauri-apps/cli to v2.1.0
- Fix API imports: @tauri-apps/api/core (instead of tauri)
- Add Emitter trait import for event emission
- Export ClassifierConfig from ai module
- Fix private field access: use data_dir() instead of config_dir
- Add serde::Deserialize to AiResult struct
- Fix base64 encoding: use BASE64 Engine API
- Simplify tauri.conf.json for v2 compatibility
- Fix Shortcut::new() call for hotkey module

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 20:08:26 +08:00

186 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
**重要:使用中文进行交流和文档生成**
## 项目概述
CutThenThink Lite 是一个基于 Tauri 2.x 开发的轻量级截图和 AI 分类工具,目标是替代 Python 版本实现 < 10MB 的原生应用。
## 技术栈
- **框架**: Tauri 2.10.0 (Rust + WebView)
- **前端**: Vanilla HTML/CSS/JS (零框架)
- **后端**: Rust (Tokio 异步运行时)
- **数据库**: SQLite (rusqlite)
- **构建工具**: Vite 5.4.11
## 常用命令
### 开发命令
```bash
# 开发模式 (前端热重载 + 后端热重载)
npm run tauri:dev
# 仅前端开发 (端口 5173)
npm run dev
```
### 构建命令
```bash
# 前端生产构建
npm run build
# 完整应用构建 (生成安装包)
npm run tauri:build
# 构建分析 (查看打包体积)
npm run build:analyze
# 清理构建产物
npm run clean
```
### 系统依赖安装 (Linux)
```bash
sudo ./install-deps.sh
# 或手动安装:
# sudo apt-get install -y pkg-config libgtk-3-dev libwebkit2gtk-4.1-dev librsvg2-dev
```
## 项目架构
### 后端架构 (Rust)
后端代码位于 `src-tauri/src/`,采用模块化架构:
**核心模块**:
- `lib.rs` - 主入口,注册 Tauri 命令和全局状态
- `main.rs` - 应用启动点
- `config.rs` - 配置管理器 (应用配置、路径管理)
- `database.rs` - SQLite 数据库封装
- `hotkey.rs` - 全局快捷键
**功能模块**:
- `screenshot.rs` - 截图管理器 (全屏/区域/窗口截图、剪贴板操作)
- `upload.rs` - 图片上传到图床
- `secure_storage.rs` - API 密钥安全存储
**OCR 模块** (`ocr/`):
- `mod.rs` - OCR 管理器
- `cloud.rs` - 云端 OCR (百度/腾讯)
- `local.rs` - 本地 OCR 插件系统
- `result.rs` - OCR 结果数据结构
**AI 模块** (`ai/`):
- `mod.rs` - AI 模块入口
- `client.rs` - AI 客户端 (Claude/OpenAI)
- `classify.rs` - AI 分类器
- `template.rs` - Prompt 模板管理器
- `prompt.rs` - Prompt 渲染引擎
**插件系统**:
- `plugin/mod.rs` - 插件管理器 (安装/卸载/状态查询)
### 前端架构
前端代码位于 `src/`,采用原生 JavaScript 模块化架构:
**目录结构**:
```
src/
├── index.html # 主页面
├── main.js # 应用入口
├── style.css # 全局样式
├── api/ # Tauri API 封装
│ ├── index.js # 通用 API 调用
│ └── ai.ts # AI 相关 API
├── store/ # 简单状态管理
│ ├── index.js # Store 入口
│ ├── records.ts # 记录状态
│ ├── settings.ts # 设置状态
│ ├── upload.ts # 上传状态
│ └── ai.ts # AI 状态
├── components/ # UI 组件
│ ├── shared/ # 共享组件
│ └── views/ # 页面视图
└── utils/ # 工具函数
```
### 全局状态管理
后端使用 `AppState` 结构体管理全局状态(`lib.rs:25-32`:
- `screenshot_manager` - 截图管理器
- `config_manager` - 配置管理器
- `database` - 数据库实例
- `plugin_manager` - 插件管理器
- `classifier` - AI 分类器
- `template_manager` - 模板管理器
所有状态通过 `Mutex` 包装以保证线程安全。
## Tauri 命令系统
所有前端与后端通信通过 Tauri 命令实现(`lib.rs:89-137`),命令分组如下:
**截图命令** (`screenshot_*`): 全屏截图、区域截图、剪贴板操作、删除、列表、清理
**配置命令** (`config_*`): 获取/设置配置、获取路径
**上传命令** (`upload_image`): 上传到图床
**数据库命令** (`record_*`, `setting_*`): 记录 CRUD、设置管理
**OCR 命令** (`ocr_*`): 识别、保存/获取 API 密钥
**插件命令** (`plugin_*`): 列表、安装、卸载
**AI 命令** (`ai_*`): 分类(普通/流式、API 密钥管理、提供商配置
**模板命令** (`template_*`): 模板 CRUD、测试
**分类命令** (`classification_*`): 获取/确认分类结果、历史记录、统计
## 数据库架构
SQLite 数据库文件位于配置目录的 `data/` 文件夹下,主要表结构:
- **records** - 截图记录表 (id, type, content, file_path, thumbnail, metadata, created_at)
- **settings** - 设置表 (key, value, updated_at)
- **classifications** - AI 分类结果表 (id, record_id, category, subcategory, tags, confidence, reasoning, template_id, confirmed, created_at)
- **classification_history** - 分类历史表
## 配置文件
- `.env.development` - 开发环境变量
- `src-tauri/tauri.conf.json` - Tauri 应用配置 (窗口、权限、打包)
- `src-tauri/Cargo.toml` - Rust 依赖管理
- `vite.config.js` - Vite 构建配置 (代码分割、压缩、优化)
- `package.json` - Node.js 依赖和脚本
## 关键设计模式
1. **异步处理**: 长时间运行的操作OCR、AI 分类、上传)使用 `tokio::spawn` 在后台异步执行
2. **进度通知**: 通过 `window.emit()` 发送实时进度更新 (`ocr-progress`, `plugin-install-progress`, `ai-classify-chunk` 等)
3. **错误处理**: 统一返回 `Result<T, String>`,错误信息向前端展示
4. **插件系统**: 本地 OCR 插件为独立的可执行文件,通过 SHA256 校验确保安全性
## 安全注意事项
- API 密钥存储在数据库中,通过 `secure_storage.rs` 提供额外保护
- 插件安装前进行 SHA256 校验
- Tauri 权限配置位于 `src-tauri/capabilities/` 目录
- 敏感操作需要用户确认(如删除、卸载)
## 开发提示
1. 修改 Rust 代码后需重启 `tauri:dev`(前端可热重载,后端需要重新编译)
2. 新增 Tauri 命令需要在 `lib.rs``invoke_handler!` 宏中注册
3. 前端调用后端命令使用 `invoke()` 函数 (见 `src/api/index.js`)
4. 数据库迁移需要手动修改 `database.rs` 中的表创建逻辑
5. 窗口配置修改 `src-tauri/tauri.conf.json`
## 构建产物
- `dist/` - 前端构建产物 (JS/CSS/图片)
- `src-tauri/target/release/bundle/` - 完整应用安装包 (.deb, .app, .exe 等)
## 相关文档
- `docs/design-v3-complete.md` - 完整设计文档
- `docs/BUILD-GUIDE.md` - 构建指南
- `README.md` - 快速开始指南