Tabby-Grouper

Tabby Grouper

English version: README.en.md.

使用 AI 自動分析並分組 Chrome 分頁的 MV3 擴充功能。支援 OpenRouterOpenAIGoogle Gemini 三家供應商,呼叫你選擇的模型(Claude、Gemini、GPT 等),僅依分頁標題網域最多 80 字元的網址路徑前綴把相關分頁放進同一個 Chrome 分頁群組;不讀取分頁內容,也不送出 query string 與 fragment。

特色

安裝

從原始碼建置

npm install
npm run build

建置完成後會在 dist/ 產生擴充功能檔案。在 Chrome 開啟 chrome://extensions,開啟右上角「開發人員模式」,點「載入未封裝項目」並選擇 dist/

打包

npm run zip

會在專案根目錄產生 tabby-grouper.zip,可上傳至 Chrome Web Store 或分發。

使用

  1. 安裝後點擊工具列的 Tabby Grouper 圖示 → 「開啟設定」
  2. 選擇 AI 供應商,貼上對應的 API Key(OpenRouter / OpenAI / Google AI Studio),可選填模型名稱
  3. 回到 popup,視需要在文字框輸入過濾規則(上限 512 字),按「分組目前視窗的分頁」

任務記憶與恢復

個人化記憶(選用)

開發

npm run dev          # Vite dev 模式
npm run type-check   # TypeScript 型別檢查
npm run test         # Vitest 單元測試
npm run gen:icons    # 從來源產生各尺寸圖示

技術棧:Vite + @crxjs/vite-plugin + 純 TypeScript,無框架。

專案結構

src/
├── background.ts         # Service worker:接收訊息、呼叫 API、建立群組、註冊 tabGroups 監聽器
├── lib/
│   ├── openrouter.ts     # AI 供應商(OpenRouter / OpenAI / Gemini)呼叫與輸出驗證
│   ├── grouping.ts       # 共用 helpers:pickColor、isGroupableTab
│   ├── tasks.ts          # Task 型別、storage key 常數、保留期/容量上限
│   ├── storage.ts        # chrome.storage.local 讀寫、CAS lock、lazy prune
│   ├── groupSync.ts      # group↔task 對映重建、pendingResume 偵測、name/color 同步
│   ├── resume.ts         # 任務恢復演算法
│   ├── messages.ts       # background ↔ popup 訊息型別(discriminated union)
│   ├── *.test.ts         # Vitest 單元測試
├── popup/                # 工具列 popup UI(分組 / 任務 兩個 view)
└── options/              # 設定頁(API Key、模型)

限制與安全性

變更紀錄

CHANGELOG.md

隱私權

PRIVACY.md。簡言之: