selectly

Selectly

License: MIT [Chrome Extension](https://developer.chrome.com/docs/extensio## 🛠️ 技术栈

技术 用途 版本
Plasmo 现代浏览器扩展框架 0.90.5
TypeScript 类型安全开发 5.3.3
React UI 组件 18.2.0
Tailwind CSS 样式框架 3.4.17
OpenAI SDK LLM 集成 5.16.0
Dexie.js 收藏功能的 IndexedDB 封装 4.0.8
Stripe 支付处理 9.8.0
Chrome Identity API OAuth2 认证 内置

TypeScript](https://www.typescriptlang.org/) React

🚀 Selectly 是一款 AI 驱动的浏览器扩展,通过智能操作增强文本选择功能。使用大语言模型(LLM)的上下文感知文本处理能力,改变你的浏览体验。

English 中文文档

✨ 功能特性

🤖 AI 驱动的操作

利用大语言模型的强大能力即时处理选中的文本:

🛠️ 实用功能

触手可及的快速实用操作:

� 高级功能

🎛️ 高度可定制


🚀 快速开始

从源码安装

1. 前置要求

2. 克隆仓库

git clone https://github.com/1850298154/selectly.git
cd selectly

3. 安装依赖

pnpm install

4. 开发模式

pnpm dev

这将启动支持热重载的开发服务器。

5. 加载扩展

  1. 打开 Chrome 浏览器
  2. 访问 chrome://extensions/
  3. 启用”开发者模式”(右上角切换开关)
  4. 点击”加载已解压的扩展程序”
  5. 选择 build/chrome-mv3-dev 目录

6. 配置 LLM

  1. 点击工具栏中的扩展图标
  2. 切换到”LLM 配置”标签
  3. 选择一个提供商并输入你的 API 密钥
  4. 点击”测试连接”进行验证
  5. 选择你偏好的模型

7. 开始使用

在任意网页选择文本,操作按钮会自动出现!


📋 配置指南

自定义功能

你可以创建自定义的 AI 驱动功能:

示例:代码审查

功能键名: code_review
提示词: 请审查以下代码并提供改进建议:\n\n{text}
模型: default(或指定模型)
自动执行: false

示例:简化文本

功能键名: simplify
提示词: 简化以下文本,使其更易于理解:\n\n{text}

示例:生成创意

功能键名: brainstorm
提示词: 生成 5 个与以下内容相关的创意想法:\n\n{text}

特定域名功能

你可以配置功能以:


🛠️ 技术栈

📁 项目结构

selectly/
├── core/                          # 核心业务逻辑
│   ├── config/
│   │   └── llm-config.ts         # 配置管理
│   ├── services/
│   │   ├── llm-service.ts        # LLM 服务(提供商无关)
│   │   ├── action-service.ts     # 操作处理
│   │   ├── collect-service.ts    # 收藏管理
│   │   ├── collect-sync-service.ts # 收藏云同步
│   │   ├── collect-sync-api.ts   # 同步 API 客户端
│   │   ├── collect-sync-types.ts # 同步类型定义
│   │   ├── subscription-service-v2.ts # 订阅管理
│   │   ├── cloud-sync-subscription-service.ts # 云订阅同步
│   │   ├── model-service.ts      # LLM 模型解析
│   │   ├── image-generator-service.ts # 分享图片生成
│   │   └── notification-service.ts # 用户通知
│   ├── storage/
│   │   ├── secure-storage.ts     # 加密存储封装
│   │   ├── collect-db.ts         # 收藏的 IndexedDB
│   │   ├── dictionary-db.ts      # 词典 IndexedDB
│   │   ├── sync-queue-db.ts      # 同步队列数据库
│   │   ├── crypto.ts             # 加密工具
│   │   ├── migration.ts          # 存储迁移
│   │   └── security-test.ts      # 安全测试
│   ├── auth/
│   │   ├── auth-service.ts       # OAuth2 认证
│   │   └── auth-background-bridge.ts # 认证后台桥接
│   ├── i18n/                      # 国际化
│   │   ├── index.ts              # i18n 入口
│   │   ├── types.ts              # i18n 类型定义
│   │   ├── hooks/                # i18n React hooks
│   │   └── locales/              # 翻译文件
│   ├── hooks/
│   │   └── useSubscription.ts    # 订阅 React hook
│   ├── content/
│   │   ├── Selectly.tsx          # 主内容脚本 UI
│   │   └── content-styles.ts     # 内容脚本样式
│   ├── oauth/                     # OAuth 工具
│   ├── premium-api-v2.ts          # 高级 API 客户端
│   └── user-info.tsx              # 用户信息组件
├── components/
│   ├── content/
│   │   ├── ActionButtons.tsx     # 浮动操作按钮
│   │   ├── StreamingResult.tsx   # 流式 LLM 响应显示
│   │   ├── ShareImageRenderer.tsx # 分享图片生成
│   │   ├── SharePreview.tsx      # 分享预览组件
│   │   └── ErrorBoundary.tsx     # 错误处理
│   ├── options/
│   │   ├── GeneralPage.tsx       # 通用设置页面
│   │   ├── LLMPage.tsx           # LLM 配置页面
│   │   ├── FunctionsPage.tsx     # 功能配置页面
│   │   ├── FunctionCard.tsx      # 功能配置卡片
│   │   ├── SubscriptionPage.tsx  # 订阅页面
│   │   ├── SubscriptionManagerV3.tsx # 订阅管理器 UI
│   │   ├── SubscriptionStatus.tsx # 订阅状态显示
│   │   ├── CollectionsPage.tsx   # 收藏管理页面
│   │   ├── DictionaryPage.tsx    # 词典页面
│   │   ├── OptionsHeader.tsx     # 选项页面头部
│   │   ├── PopupHeader.tsx       # 弹窗头部
│   │   ├── Sidebar.tsx           # 选项侧边栏
│   │   ├── TabsBar.tsx           # 设置标签页
│   │   ├── Drawer.tsx            # 抽屉组件
│   │   ├── constants.ts          # UI 常量
│   │   └── forms/                # 表单组件
│   ├── shared/
│   │   └── PremiumCrown.tsx      # 高级标识组件
│   └── ui/                        # 可复用 UI 组件 (shadcn/ui)
│       ├── badge.tsx
│       ├── button.tsx
│       ├── input.tsx
│       └── separator.tsx
├── lib/
│   └── utils.ts                   # 工具函数
├── utils/
│   ├── icon-utils.ts              # 图标工具
│   └── url-utils.ts               # URL 工具
├── locales/                       # 旧版本地化文件
├── scripts/
│   └── generate-keys.js           # 密钥生成工具
├── background.ts                  # Service Worker(事件处理)
├── content.tsx                    # 内容脚本入口
├── popup.tsx                      # 扩展弹窗
├── options.tsx                    # 选项页面
├── style.css                      # 全局样式
├── tailwind.config.js             # Tailwind 配置
├── postcss.config.js              # PostCSS 配置
├── tsconfig.json                  # TypeScript 配置
└── package.json                   # 项目依赖

架构原则

遵循单一职责模块化设计


🔒 隐私与安全


🧪 开发

可用命令

# 开发模式,支持热重载
pnpm dev

# 生产构建
pnpm build

# 打包扩展(创建 zip)
pnpm package

# 生成 OAuth 密钥
pnpm generate-keys

# 格式化所有文件
pnpm format

# 检查格式化状态
pnpm format:check

代码质量


🤝 贡献

欢迎贡献!以下是你可以提供帮助的方式:

指南

贡献想法


📝 路线图


🙏 致谢

使用以下优秀的开源项目构建:


📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。


💬 支持

如果你遇到问题或有疑问:

  1. 查看现有 Issues
  2. 搜索 Discussions
  3. 提交包含详细信息的新 issue

⭐ Star 历史

如果这个项目对你有帮助,请考虑给它一个 ⭐ star!


用 ❤️ 为开源社区打造