Perplexica/INCOGNITO_MODE_IMPLEMENTATION.md
TamHC 3edafd0503 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
2025-06-24 22:10:59 +08:00

4.2 KiB
Raw Blame History

無痕模式功能實現說明

功能概述

已成功為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. 狀態管理

// 檢查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);
}

測試建議

  1. 基本功能測試

    • 開啟/關閉無痕模式開關
    • 檢查按鈕狀態和視覺反饋
    • 驗證狀態持久化
  2. URL參數測試

    • 訪問 /?incognito=true
    • 訪問 /?incognito=false
    • 檢查URL參數優先級
  3. 聊天功能測試

    • 在無痕模式下發送消息
    • 驗證聊天功能正常
    • 檢查數據庫中無記錄保存
  4. 響應式測試

    • 測試桌面和移動設備顯示
    • 檢查深色/淺色模式兼容性

注意事項

  1. TypeScript錯誤: 當前顯示的TypeScript錯誤是由於缺少依賴包導致的不影響功能實現
  2. 數據庫: 無痕模式下完全不保存聊天記錄,確保用戶隱私
  3. 性能: 無痕模式不會影響聊天性能,僅跳過數據庫操作
  4. 兼容性: 與現有功能完全兼容,不會影響普通模式的使用

未來擴展

  1. 可以添加無痕模式的更多視覺指示
  2. 可以在無痕模式下添加額外的隱私保護功能
  3. 可以添加無痕模式的使用統計(不保存具體內容)