Commit Graph

21 Commits

Author SHA1 Message Date
be3cef2e0d feat: MarkBase 三层架构设计
架构设计:
- Admin Layer: 系统管理 (admin.sqlite)
  * system_config - 系统配置
  * users - 用户管理
  * groups - 群组管理
  * permissions - 权限管理
  * audit_logs - 审计日志

- Group Layer: 群组管理 (group_{id}.sqlite)
  * group_config - 群组配置
  * group_members - 群组成员
  * group_files - 群组文件
  * group_permissions - 群组权限
  * group_shares - 群组共享

- User Layer: 用户数据 ({username}.sqlite)
  * user_config - 用户配置
  * user_files - 用户文件
  * user_bookmarks - 用户书签
  * search_history - 搜索历史
  * video_marks - 视频标记

目录结构:
data/
├── admin/admin.sqlite
├── groups/group_{id}.sqlite
└── users/{username}.sqlite

权限模型:
- Admin: 系统管理
- Group Owner: 群组管理
- Group Member: 群组访问
- User: 个人数据

文档:
- MARKBASE_THREE_LAYER_ARCHITECTURE.md - 完整架构设计
- THREE_LAYER_IMPLEMENTATION_GUIDE.md - 实施指南

脚本:
- init_three_layer_db.sh - 数据库初始化
- check_three_layer.sh - 架构检查

预计工作量: 3-5 天
优先级: 高
2026-10-12 15:08:48 +08:00
08584ecc87 docs: 确认用户数据库隔离问题
问题发现:
- Momentry Studio 硬编码 demo.sqlite
- 违反'一用户一数据库'设计原则
- 所有用户共享同一数据库

检查结果:
- Momentry Studio: 只有 1 个 demo.sqlite ❌
- MarkBase Core: 3 个用户数据库 ✅

修复方案:
1. 方案 1: 函数参数传递 (推荐)
   - db_path(username) 动态生成路径
   - 所有数据库函数添加 username 参数

2. 方案 2: 环境变量 (折中)
   - MOMENTRY_CURRENT_USER 环境变量
   - db_path() 读取环境变量

3. 方案 3: 全局状态 (Tauri State)
   - 线程安全的状态管理
   - 集中管理用户状态

受影响功能:
- 搜索历史
- 书签
- 视频标记
- 用户认证 (例外,保持共享)

工作量: 2-3 天
优先级: 高 (影响数据隔离)

文档:
- docs/USER_DATABASE_ISOLATION_FIX.md - 详细修复方案
- scripts/check_user_isolation.sh - 检查脚本
2026-10-12 14:50:34 +08:00
643ad66465 docs: 添加数据库依赖优化建议
问题:
- Momentry Studio 有未使用的 sqlx (PostgreSQL) 依赖
- 通过 markbase-core 间接引入

影响:
- 编译时间增加 ~30%
- 二进制大小增加 ~10%
- 依赖复杂度增加

解决方案:
- 方案 1: 移除 sqlx 依赖 (推荐)
- 方案 2: 禁用 PostgreSQL 功能
- 方案 3: 将 markbase-core 改为可选

收益:
- 编译时间减少 30%
- 二进制大小减少 10%
- 依赖更清晰

实施步骤:
- 创建备份分支
- 修改 Cargo.toml
- 测试功能
- 提交改动
2026-10-12 14:45:43 +08:00
1bd4b9215f docs: 确认数据库依赖关系
核心发现:
1. Momentry Studio
   - ✅ SQLite (rusqlite): 搜索历史、书签、用户认证
   - ❌ PostgreSQL (sqlx): 遗留依赖,未使用

2. MarkBase Core
   - ✅ SQLite: 认证数据
   - ⚠️ PostgreSQL: 可选,未启用

3. Momentry Core
   - ✅ PostgreSQL: 核心业务数据
   - ✅ Qdrant: 向量搜索
   - ✅ MongoDB: 文档存储

数据库文件:
- Momentry Studio: data/users/demo.sqlite
- MarkBase: ~/markbase/data/auth.sqlite
- Momentry Core: postgresql://localhost:5432/momentry

必需服务:
- PostgreSQL 12+ (pgvector 扩展)
- Qdrant 1.7+
- MongoDB 5+

建议:
- 移除 Momentry Studio 的 sqlx 依赖
- 简化依赖树
2026-10-12 14:41:57 +08:00
69ab0e8000 feat: 实现动态密码系统,消除硬编码
核心改动:
1. db.rs - 默认密码从环境变量读取或自动生成
   - 优先级: MOMENTRY_DEFAULT_PASSWORD > 自动生成
   - 格式: demo_<timestamp> 或自定义
   - 首次创建时打印密码到控制台

2. main.rs - SMB 服务密码动态化
   - 从 SMB_PASSWORD 或 MOMENTRY_DEFAULT_PASSWORD 读取
   - 支持自定义 SMB 用户名

3. user_tool.rs - 新增用户管理工具
   - list: 列出所有用户
   - create: 创建新用户
   - set-password: 修改密码
   - delete: 删除用户
   - init-demo: 初始化 demo 用户

4. install.sh - 安装时自动生成密码
   - 生成随机密码: demo_$(openssl rand -hex 4)
   - 保存到 .env 文件
   - 初始化数据库

5. .env.template - 新增密码配置
   - MOMENTRY_DEFAULT_PASSWORD
   - SMB_USER / SMB_PASSWORD

安全改进:
- 消除硬编码密码 'demo123'
- 每次安装密码唯一
- 密码哈希存储 (Argon2id)
- 支持自定义强密码

文档:
- docs/DEFAULT_PASSWORD_SYSTEM.md 完整说明
2026-10-12 14:25:47 +08:00
14fe2eda07 docs: 确认 ClientView 文件存储架构
确认结论:
- ClientView (/client) 使用 MarkBase API
- 文件存储位置: ~/momentry/var/sftpgo/data/{user}/
- 不是 ~/markbase 目录

架构详解:
1. API 端点
   - MarkBase API: localhost:11438
   - /api/v2/myfiles/{user}/folders
   - /api/v2/myfiles/{user}/files

2. 文件存储
   - 实际路径: ~/momentry/var/sftpgo/data/demo/
   - 包含所有上传的文件 (*.mp4)

3. MarkBase 目录
   - ~/markbase/data/ 存储 MarkBase 自身数据
   - 认证数据库 (auth.sqlite)
   - 配置文件
   - 不是文件存储位置

4. 配置映射
   - admin_config.json: server.storage_root
   - 环境变量: STORAGE_ROOT

关键区别:
- ~/markbase = MarkBase 项目代码和自身数据
- ~/momentry/var/sftpgo/data = 实际文件存储位置

部署注意:
- 需要创建 ~/momentry/var/sftpgo/data/{user}/
- 设置正确的权限
- 配置 STORAGE_ROOT 环境变量
2026-10-12 13:55:17 +08:00
bb45f0981a fix: 添加 m4promini 部署路径修复方案
问题:
- 100+ 处硬编码路径 /Users/accusys
- 配置文件 (admin_config.json) 无法适应新环境
- Rust 代码 (main.rs) 中 10+ 处路径硬编码
- 服务启动/停止命令依赖固定路径

影响:
- 无法在 m4promini (/Users/nextorageai) 上部署
- Admin 页面服务控制失效
- Worker 管理失败

解决方案:
1. 文档: docs/DEPLOYMENT_PATH_ISSUES.md
   - 详细分析所有硬编码路径
   - 提供 3 种修复方案
   - 环境变量优先级建议

2. 脚本: fix_paths_for_m4promini.sh
   - 自动替换所有硬编码路径
   - 创建备份
   - 生成环境变量模板
   - 创建部署说明

目标环境:
- 用户: nextorageai
- 主目录: /Users/nextorageai
- 项目目录: /Users/nextorageai/momentry_studio

下一步:
1. 在 m4promini 上运行 fix_paths_for_m4promini.sh
2. 配置环境变量 (.env)
3. 构建项目
4. 启动服务
2026-10-12 12:20:24 +08:00
7ee9ea0d30 docs: 添加分页实施路线图
内容:
- 文档索引(3 个核心文档)
- 实施目标(功能、性能)
- 实施步骤(Phase 1 + Phase 2)
- 快速开始指南(1 小时最小实施)
- 验证清单(功能、性能、样式)
- 技术栈适配表
- 故障排除指南
- 后续优化计划
- 成功标准

核心内容:
- 只需修改 1 个文件(SearchView.vue)
- 5 个步骤,预计 1-2 小时
- 初始加载提速 4x(2s → 0.5s)
- 渐进式加载降低内存占用

文档索引:
1. Agent_Search_Integration_Analysis.md - 分析文档
2. Vue3_Pagination_Implementation_Guide.md - 完整指南
3. Quick_Implementation_Checklist.md - 快速清单
4. Pagination_Implementation_Roadmap.md - 路线图
2026-10-11 21:38:26 +08:00
896b12be9a docs: 添加 Vue 3 分页实施指南
内容:
1. Vue3_Pagination_Implementation_Guide.md (718 行)
   - Vue 3 + TypeScript + Tauri 2 完整实施指南
   - 完整的代码示例
   - 分页和 Session 管理
   - 临时方案(兼容现有 API)

2. Quick_Implementation_Checklist.md (331 行)
   - 5 步快速实施(1-2 小时)
   - 只需修改 1 个文件(SearchView.vue)
   - 复制即用的代码片段
   - 验证步骤

实施方案:
- 添加状态(sessionId, hasMore, nextOffset 等)
- 实现 loadMore() 函数
- 修改 executeSearch() 支持分页
- 添加 More 按钮 UI
- 添加样式

预期效果:
- 初始加载:~2s → ~0.5s(4x 更快)
- 内存占用:渐进式加载
- 用户体验:立即反馈

技术栈适配:
- useState → ref / reactive
- useEffect → onMounted / watch
- lucide-react → 内联 SVG
2026-10-11 21:37:50 +08:00
1618965a9b docs: Agent Search 集成现状分析
内容:
- 分析提供的 React 文档与 Studio Vue 3 现状的差异
- 确认 Studio 已实现大部分功能(5 种搜索模式)
- 识别缺失的核心功能(More 按钮、Session 管理)
- 提供实施建议和优先级

现状:
✅ 5 种搜索模式(Keyword, Semantic, Visual, Agent, People)
✅ 统一搜索界面(SearchView.vue)
✅ 结果显示和视频播放
✅ 搜索历史和书签

缺失:
❌ More 按钮和分页加载(高优先级)
❌ Session 管理(高优先级)
❌ 智能意图识别(中优先级,可选)

技术栈差异:
- 提供的文档是 React 版本
- Studio 使用 Vue 3 + TypeScript
- 需要转换为 Composition API

下一步:
1. 实现 More 按钮 + 分页加载(1-2 天)
2. 后端实现 Session API(2-3 天)
3. 测试验证
2026-10-11 21:21:23 +08:00
e11ee429f1 docs: 添加 Tauri GUI 架构分析文档
内容:
- 四大模块总览(Search, File Prep, Admin, File Mgmt)
- 每个模块的详细分析(组件、API、数据流、数据库)
- 模块间交互关系和依赖关系
- 已知问题和改进建议
- API 调用链示例
- 技术栈总结

四大模块:
1. Search - 多模式搜索 + 历史管理
2. File Prep/Processing - Pipeline 处理 + 状态追踪
3. Admin - 系统监控 + 配置管理
4. File Management - 文件上传/下载/移动

关键问题:
- 双 API 架构复杂度
- 状态同步不一致
- 缩略图缓存无淘汰策略
- Pipeline 进度轮询效率低
- Admin 配置无验证

改进建议:
- 短期: WebSocket 状态推送、LRU Cache、批量查询
- 中期: 统一 API Gateway、Resumable Upload
- 长期: IndexedDB、离线模式、插件系统
2026-10-11 16:41:27 +08:00
af967b3345 docs: 添加 FaceFilterSettings 透明文件管理部署测试指南
内容:
- 完整的部署步骤
- 4 个测试场景(自动迁移、持久化、新文件、跨设备)
- API 行为变化说明
- 调试方法和故障排查
- 验证清单

测试文件: 020.mp4 (UUID: b496a68800f90770aa7246c877f38985)

相关:
- Core API: 86c776ce, 1379cf59
- Studio: 8789770, f75ebfa
2026-10-09 21:14:55 +08:00
f75ebfac88 fix: 修复 Face Filter UI 参数持久化到后端数据库
问题:
- UI Filter Rules (min_confidence, min_bbox_size 等) 修改后只保存到 localStorage
- 不会持久化到后端数据库,导致刷新页面或换浏览器后设置丢失

修复:
- updateRules() 函数现在会调用 markSingleFrameSettingsModified()
- 触发 500ms debounce 的 auto-save 到后端 API
- 保存完整的 FaceFilterSettings (包括 ui_filter_rules, processing_thresholds, trace_settings)

变更:
1. src/composables/useFaceFilter.ts
   - updateRules() 新增调用 markSingleFrameSettingsModified()
   - 确保 UI Filter Rules 修改后自动保存到后端

2. docs/FACE_FILTER_PERSISTENCE_TEST_GUIDE.md
   - 完整的测试指南
   - 包含调试方法和后端 API 要求

持久化流程:
- FaceFilterPanel 打开 → loadSingleFrameSettings() 从后端加载
- 用户修改参数 → updateRules() → markSingleFrameSettingsModified() → auto-save
- 500ms debounce → saveSingleFrameSettings() → PUT /api/v1/file-profile

测试:
- ✅ TypeScript 编译通过
- ⏳ 需要验证后端 API 支持

测试文件: 020.mp4 (UUID: b496a68800f90770aa7246c877f38985)
2026-10-09 16:25:26 +08:00
6423eeed77 feat: 更新 FaceFilterSettings TypeScript 类型定义为三段式统一结构
变更内容:
- 创建 src/types/faceFilter.ts 类型定义文件
- 新增 UiFilterRules, ProcessingThresholds, TraceSettings 三个子结构
- 更新 FaceFilterSettings 为三段式统一结构
- min_confidence 范围从 0-100 改为 0.0-1.0
- min_size 重命名为 min_bbox_size
- 新增字段: max_confidence, max_bbox_size, source, backend_status

向后兼容性:
- FaceFilterSettingsMigration.fromLegacy() 自动转换旧格式
- FaceFilterSettingsMigration.defaults() 提供默认值
- 保留向后兼容字段(deprecated 标记)

更新文件:
- src/composables/useFaceFilter.ts: 使用新类型,更新变量名
- src/components/FaceFilterPanel.vue: 更新导入和变量引用
- docs/FACE_FILTER_SETTINGS_MIGRATION_GUIDE.md: 完整迁移指南

测试:
- ✅ TypeScript 编译通过
- ✅ Vite build 成功

对应 Core API commit: 86c776ce
2026-10-09 15:13:50 +08:00
2f9b44d4b3 docs: 添加 Deep Scan 队列功能需求文档
目的:
- 提交给 Core Team 实现后端队列功能
- 替代当前前端临时队列方案

主要内容:
1. 问题背景和当前限制
2. 核心需求说明
3. API 设计建议(包含详细示例)
4. 数据库设计
5. 后端架构建议
6. 前端集成简化方案
7. 配置选项
8. 实施里程碑

关键特性:
- 全局队列管理
- 优先级支持
- 动态并发控制
- 错误重试机制
- 实时状态跟踪
2026-10-08 01:50:38 +08:00
7b60ca3d2d feat: add face filter components and integration guide
- useFaceFilter composable: manages face filtering state and API calls
- FaceFilterPanel component: UI for filtering controls
- FaceCard component: text-only face display card
- Integration guide: step-by-step guide for integrating into PeopleView

Implements hybrid filtering mode with:
- Instant mode: client-side filtering (5-10ms)
- Backend mode: server-side complex filtering
- Hybrid mode: backend + instant filtering (AND)

Uses actual Core API endpoints:
- GET /file/{uuid}/faces
- POST /file/{uuid}/faces/filter
- GET /file/{uuid}/face/{faceId}/filter-report
- GET /file/{uuid}/filter-stats

Preferences stored in localStorage.
2026-08-09 21:24:52 +08:00
5951aca086 feat: frame-based positioning and mark system foundation
Core Changes:
- Fix SearchView to use start_frame/end_frame directly (no time*fps conversion)
- Add hard_delete support to delete_trace API
- VideoPlayer: Main timeline + Mark system foundation
- Proxy: Add local routes for auth, media, identity-matches, cluster-results
- Add .gitignore to exclude build artifacts and dependencies

Design Documents:
- Multi-track Mark system design (.opencode/plans/)
- Video editing positioning standards research

Files Modified:
- src/views/SearchView.vue: Frame positioning, ensureMinDuration (240 frames)
- src/views/PeopleView.vue: batchDeleteGroups with hard_delete
- src/api/index.ts: delete_trace with hard_delete body
- src/components/VideoPlayer.vue: Timeline + Mark UI
- src-tauri/src/proxy.rs: New local routes
- AGENTS.md: Update documentation
2026-07-24 20:19:47 +08:00
299f58e883 docs: update cluster-agent implementation status 2026-07-20 21:49:25 +08:00
f915aaf794 feat: pending identity sorting, face detail modal, video player fps, processor counts 2026-06-24 02:02:33 +08:00
d910bac0bb docs: People 頁面設計文件,基於實測 API 定義 2026-06-14 12:52:22 +08:00
6d6fd2d43c docs: Core API 完整測試報告,所有端點實測驗證 2026-06-14 12:39:19 +08:00