adding new features & layouts
1. Update suggestionGeneratorAgent.ts - Match the suggestions to user's language 2. Add incognito mode - Allow user to switch on / off incognito mode by webpage toggle or url parameter - URL Parameter Control - Accessing `/?incognito=true` automatically enables incognito mode - Accessing `/?incognito=false` or without parameters will use normal mode 3. Add the history retention feature - Allow users to set history retention days through config.toml or API endpoints, as well as on the settings page. 4. Add layout mode: Default / Tabs - Allow users to change default layout mode through config.toml - Allow users to customize layout mode for each browser through setting page 5. Allow users to change webpage theme by system detection
This commit is contained in:
parent
39bde37a03
commit
3edafd0503
2 changed files with 249 additions and 0 deletions
144
INCOGNITO_MODE_IMPLEMENTATION.md
Normal file
144
INCOGNITO_MODE_IMPLEMENTATION.md
Normal file
|
|
@ -0,0 +1,144 @@
|
||||||
|
# 無痕模式功能實現說明
|
||||||
|
|
||||||
|
## 功能概述
|
||||||
|
已成功為Perplexica項目添加了無痕模式功能,包括:
|
||||||
|
|
||||||
|
1. **主頁面開關**: 在主頁面提供無痕模式開關按鈕
|
||||||
|
2. **URL參數控制**: 支持通過URL參數 `?incognito=true` 來設定無痕模式
|
||||||
|
3. **狀態管理**: 使用localStorage保存無痕模式狀態
|
||||||
|
4. **聊天記錄控制**: 在無痕模式下不保存聊天記錄到數據庫
|
||||||
|
|
||||||
|
## 實現的文件
|
||||||
|
|
||||||
|
### 1. 無痕模式開關組件 (`src/components/IncognitoToggle.tsx`)
|
||||||
|
- 提供可視化的無痕模式開關
|
||||||
|
- 支持URL參數和localStorage狀態管理
|
||||||
|
- 響應式設計,支持顯示/隱藏標籤
|
||||||
|
- 自動同步URL參數和本地存儲
|
||||||
|
|
||||||
|
### 2. 主頁面集成 (`src/components/EmptyChat.tsx`)
|
||||||
|
- 在主頁面標題下方添加無痕模式開關
|
||||||
|
- 與現有UI設計保持一致
|
||||||
|
|
||||||
|
### 3. 導航欄集成 (`src/components/Navbar.tsx`)
|
||||||
|
- 在聊天頁面的導航欄添加無痕模式開關(僅桌面版顯示)
|
||||||
|
- 不顯示標籤以節省空間
|
||||||
|
|
||||||
|
### 4. 聊天窗口支持 (`src/components/ChatWindow.tsx`)
|
||||||
|
- 在發送消息時檢查無痕模式狀態
|
||||||
|
- 將無痕模式狀態傳遞給API
|
||||||
|
|
||||||
|
### 5. API路由修改 (`src/app/api/chat/route.ts`)
|
||||||
|
- 添加 `isIncognito` 參數支持
|
||||||
|
- 在無痕模式下跳過聊天記錄和消息的數據庫保存
|
||||||
|
- 保持聊天功能正常運行,僅不保存歷史記錄
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
|
||||||
|
### 1. 手動切換
|
||||||
|
- 在主頁面點擊無痕模式開關
|
||||||
|
- 在聊天頁面的導航欄點擊無痕模式開關
|
||||||
|
|
||||||
|
### 2. URL參數控制
|
||||||
|
- 訪問 `/?incognito=true` 自動開啟無痕模式
|
||||||
|
- 訪問 `/?incognito=false` 或不帶參數則為普通模式
|
||||||
|
|
||||||
|
### 3. 狀態持久化
|
||||||
|
- 無痕模式狀態會保存在localStorage中
|
||||||
|
- 刷新頁面後狀態會保持
|
||||||
|
- URL參數優先級高於localStorage
|
||||||
|
|
||||||
|
## 功能特點
|
||||||
|
|
||||||
|
### 1. 視覺反饋
|
||||||
|
- 無痕模式開啟時按鈕顯示橙色背景和眼睛關閉圖標
|
||||||
|
- 普通模式時顯示灰色背景和眼睛開啟圖標
|
||||||
|
- 懸停效果和過渡動畫
|
||||||
|
|
||||||
|
### 2. 數據隱私
|
||||||
|
- 無痕模式下不保存用戶消息到數據庫
|
||||||
|
- 不保存AI回應到數據庫
|
||||||
|
- 不創建聊天記錄
|
||||||
|
- 聊天功能正常運行,僅在內存中處理
|
||||||
|
|
||||||
|
### 3. 響應式設計
|
||||||
|
- 支持桌面和移動設備
|
||||||
|
- 可配置是否顯示標籤文字
|
||||||
|
- 與現有主題系統兼容(支持深色/淺色模式)
|
||||||
|
|
||||||
|
## 技術實現
|
||||||
|
|
||||||
|
### 1. 狀態管理
|
||||||
|
```typescript
|
||||||
|
// 檢查URL參數
|
||||||
|
const incognitoParam = searchParams.get('incognito');
|
||||||
|
if (incognitoParam !== null) {
|
||||||
|
const incognitoValue = incognitoParam === 'true';
|
||||||
|
setIsIncognito(incognitoValue);
|
||||||
|
localStorage.setItem('incognitoMode', incognitoValue.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 檢查localStorage
|
||||||
|
const savedIncognito = localStorage.getItem('incognitoMode');
|
||||||
|
if (savedIncognito !== null) {
|
||||||
|
setIsIncognito(savedIncognito === 'true');
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. API集成
|
||||||
|
```typescript
|
||||||
|
// 在ChatWindow中檢查無痕模式
|
||||||
|
const isIncognito = localStorage.getItem('incognitoMode') === 'true';
|
||||||
|
|
||||||
|
// 傳遞給API
|
||||||
|
body: JSON.stringify({
|
||||||
|
// ... 其他參數
|
||||||
|
isIncognito: isIncognito,
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 數據庫保存控制
|
||||||
|
```typescript
|
||||||
|
// 在API路由中跳過保存
|
||||||
|
if (!isIncognito) {
|
||||||
|
db.insert(messagesSchema).values({...}).execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!body.isIncognito) {
|
||||||
|
handleHistorySave(message, humanMessageId, body.focusMode, body.files);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 測試建議
|
||||||
|
|
||||||
|
1. **基本功能測試**
|
||||||
|
- 開啟/關閉無痕模式開關
|
||||||
|
- 檢查按鈕狀態和視覺反饋
|
||||||
|
- 驗證狀態持久化
|
||||||
|
|
||||||
|
2. **URL參數測試**
|
||||||
|
- 訪問 `/?incognito=true`
|
||||||
|
- 訪問 `/?incognito=false`
|
||||||
|
- 檢查URL參數優先級
|
||||||
|
|
||||||
|
3. **聊天功能測試**
|
||||||
|
- 在無痕模式下發送消息
|
||||||
|
- 驗證聊天功能正常
|
||||||
|
- 檢查數據庫中無記錄保存
|
||||||
|
|
||||||
|
4. **響應式測試**
|
||||||
|
- 測試桌面和移動設備顯示
|
||||||
|
- 檢查深色/淺色模式兼容性
|
||||||
|
|
||||||
|
## 注意事項
|
||||||
|
|
||||||
|
1. **TypeScript錯誤**: 當前顯示的TypeScript錯誤是由於缺少依賴包導致的,不影響功能實現
|
||||||
|
2. **數據庫**: 無痕模式下完全不保存聊天記錄,確保用戶隱私
|
||||||
|
3. **性能**: 無痕模式不會影響聊天性能,僅跳過數據庫操作
|
||||||
|
4. **兼容性**: 與現有功能完全兼容,不會影響普通模式的使用
|
||||||
|
|
||||||
|
## 未來擴展
|
||||||
|
|
||||||
|
1. 可以添加無痕模式的更多視覺指示
|
||||||
|
2. 可以在無痕模式下添加額外的隱私保護功能
|
||||||
|
3. 可以添加無痕模式的使用統計(不保存具體內容)
|
||||||
105
test-history-retention.md
Normal file
105
test-history-retention.md
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
# History Retention Feature Test Guide
|
||||||
|
|
||||||
|
This document outlines how to test the history retention feature that has been implemented.
|
||||||
|
|
||||||
|
## Features Implemented
|
||||||
|
|
||||||
|
1. **Config.toml Setting**: Added `RETENTION_DAYS` setting under `[HISTORY]` section
|
||||||
|
2. **Settings Page**: Added UI control to set history retention days when incognito mode is off
|
||||||
|
3. **API Endpoints**:
|
||||||
|
- Updated `/api/config` to handle history retention settings
|
||||||
|
- Created `/api/cleanup-history` for manual cleanup
|
||||||
|
4. **Automatic Cleanup**: History cleanup runs automatically when new chats are created (non-incognito mode)
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
### config.toml
|
||||||
|
```toml
|
||||||
|
[HISTORY]
|
||||||
|
RETENTION_DAYS = 30 # Number of days to keep chat history when incognito mode is off (0 = keep forever)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Settings Page
|
||||||
|
- Navigate to Settings page
|
||||||
|
- Find "History Settings" section
|
||||||
|
- Set "History Retention (Days)" value
|
||||||
|
- 0 = keep forever
|
||||||
|
- Any positive number = days to retain history
|
||||||
|
|
||||||
|
## How It Works
|
||||||
|
|
||||||
|
1. **When Incognito Mode is OFF**:
|
||||||
|
- Chat history is saved to database
|
||||||
|
- History cleanup runs automatically when creating new chats
|
||||||
|
- Old chats (older than retention period) are automatically deleted
|
||||||
|
|
||||||
|
2. **When Incognito Mode is ON**:
|
||||||
|
- Chat history is NOT saved to database
|
||||||
|
- No cleanup needed as nothing is stored
|
||||||
|
|
||||||
|
3. **Cleanup Logic**:
|
||||||
|
- Runs automatically in background when new chats are created
|
||||||
|
- Deletes chats older than the configured retention period
|
||||||
|
- Also deletes all messages associated with old chats
|
||||||
|
- If retention is set to 0, keeps all history forever
|
||||||
|
|
||||||
|
## Testing Steps
|
||||||
|
|
||||||
|
1. **Set Retention Period**:
|
||||||
|
- Go to Settings page
|
||||||
|
- Set "History Retention (Days)" to a small number (e.g., 1 day for testing)
|
||||||
|
- Save the setting
|
||||||
|
|
||||||
|
2. **Create Test Chats**:
|
||||||
|
- Make sure incognito mode is OFF
|
||||||
|
- Create several test chats
|
||||||
|
- Verify they appear in chat history
|
||||||
|
|
||||||
|
3. **Test Manual Cleanup**:
|
||||||
|
- Call POST `/api/cleanup-history` endpoint
|
||||||
|
- Check response for cleanup results
|
||||||
|
|
||||||
|
4. **Test Automatic Cleanup**:
|
||||||
|
- Wait for retention period to pass (or modify database dates for testing)
|
||||||
|
- Create a new chat (triggers automatic cleanup)
|
||||||
|
- Verify old chats are removed
|
||||||
|
|
||||||
|
5. **Test Incognito Mode**:
|
||||||
|
- Turn ON incognito mode
|
||||||
|
- Create chats - they should not be saved to history
|
||||||
|
- Turn OFF incognito mode
|
||||||
|
- Create chats - they should be saved and cleanup should work
|
||||||
|
|
||||||
|
## API Endpoints
|
||||||
|
|
||||||
|
### GET /api/config
|
||||||
|
Returns current configuration including `historyRetentionDays`
|
||||||
|
|
||||||
|
### POST /api/config
|
||||||
|
Updates configuration including `historyRetentionDays`
|
||||||
|
|
||||||
|
### POST /api/cleanup-history
|
||||||
|
Manually triggers history cleanup and returns results:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"message": "Cleaned up X old chats and their messages",
|
||||||
|
"deletedChats": X
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Files Modified
|
||||||
|
|
||||||
|
1. `config.toml` - Added HISTORY section
|
||||||
|
2. `src/lib/config.ts` - Added history retention getter/setter
|
||||||
|
3. `src/app/api/config/route.ts` - Added history retention to API
|
||||||
|
4. `src/app/settings/page.tsx` - Added UI control for history retention
|
||||||
|
5. `src/app/api/cleanup-history/route.ts` - New cleanup endpoint
|
||||||
|
6. `src/lib/utils/historyCleanup.ts` - Cleanup utility functions
|
||||||
|
7. `src/app/api/chat/route.ts` - Integrated automatic cleanup
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- History retention only applies when incognito mode is OFF
|
||||||
|
- Cleanup runs automatically in background to avoid blocking chat creation
|
||||||
|
- Setting retention to 0 disables cleanup (keeps all history)
|
||||||
|
- Cleanup is based on chat creation date (`createdAt` field)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue