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
4.2 KiB
4.2 KiB
無痕模式功能實現說明
功能概述
已成功為Perplexica項目添加了無痕模式功能,包括:
- 主頁面開關: 在主頁面提供無痕模式開關按鈕
- URL參數控制: 支持通過URL參數
?incognito=true來設定無痕模式 - 狀態管理: 使用localStorage保存無痕模式狀態
- 聊天記錄控制: 在無痕模式下不保存聊天記錄到數據庫
實現的文件
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. 狀態管理
// 檢查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集成
// 在ChatWindow中檢查無痕模式
const isIncognito = localStorage.getItem('incognitoMode') === 'true';
// 傳遞給API
body: JSON.stringify({
// ... 其他參數
isIncognito: isIncognito,
})
3. 數據庫保存控制
// 在API路由中跳過保存
if (!isIncognito) {
db.insert(messagesSchema).values({...}).execute();
}
if (!body.isIncognito) {
handleHistorySave(message, humanMessageId, body.focusMode, body.files);
}
測試建議
-
基本功能測試
- 開啟/關閉無痕模式開關
- 檢查按鈕狀態和視覺反饋
- 驗證狀態持久化
-
URL參數測試
- 訪問
/?incognito=true - 訪問
/?incognito=false - 檢查URL參數優先級
- 訪問
-
聊天功能測試
- 在無痕模式下發送消息
- 驗證聊天功能正常
- 檢查數據庫中無記錄保存
-
響應式測試
- 測試桌面和移動設備顯示
- 檢查深色/淺色模式兼容性
注意事項
- TypeScript錯誤: 當前顯示的TypeScript錯誤是由於缺少依賴包導致的,不影響功能實現
- 數據庫: 無痕模式下完全不保存聊天記錄,確保用戶隱私
- 性能: 無痕模式不會影響聊天性能,僅跳過數據庫操作
- 兼容性: 與現有功能完全兼容,不會影響普通模式的使用
未來擴展
- 可以添加無痕模式的更多視覺指示
- 可以在無痕模式下添加額外的隱私保護功能
- 可以添加無痕模式的使用統計(不保存具體內容)