Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TextAction

TextAction 是一个轻量、开源的 Windows AI 划词助手。选中文字后按全局快捷键,即可从浮动菜单中选择“总结、翻译、改写、解释、生成 Prompt”等操作;TextAction 会调用你配置的 OpenAI 兼容 API,并在独立窗口中显示结果。

当前阶段:MVP。项目聚焦“选中 → 选择动作 → 查看结果”这一条核心路径,不包含聊天、知识库、Agent 或账号系统。

功能

  • Windows 全局快捷键,默认 Ctrl+Alt+Space
  • 跨应用获取选中文字,并在光标附近显示操作菜单
  • 内置总结、翻译、改写、解释、生成 Prompt 五个模板
  • 兼容 OpenAI Chat Completions API
  • 一个配置文件管理多个 Provider,不同动作可选择不同 Provider
  • 纯文本 Prompt 模板,通过 {{text}} 插入所选内容
  • 结果窗口支持选择和复制文本
  • 键盘操作:方向键选择、Enter 执行、Esc 关闭
  • 系统托盘可打开配置、打开模板目录或退出应用

工作方式

选中文字
    ↓
按 Ctrl+Alt+Space
    ↓
TextAction 模拟 Ctrl+C 获取所选文本
    ↓
选择一个 AI 动作
    ↓
渲染 Prompt 并请求对应 Provider
    ↓
在结果窗口显示响应

Windows 没有适用于所有桌面应用的统一“读取当前选区”接口,因此 MVP 通过模拟 Ctrl+C 读取剪贴板。部分管理员权限窗口、远程桌面、终端或自定义控件可能不支持该方式。

系统要求

  • Windows 10 或 Windows 11
  • 一个支持 OpenAI Chat Completions 格式的 API
  • .NET 8 SDK(仅从源码运行或构建时需要)

TextAction 是 WPF 应用,目前仅支持 Windows。

运行自包含包

项目发布包使用 win-x64 自包含格式,不要求预先安装 .NET:

  1. 解压 TextAction-win-x64-v0.1.0.zip
  2. 双击 TextAction.exe;首次启动会创建用户配置和五个模板。
  3. 设置配置引用的 API Key 环境变量并重新启动。
  4. 在任意支持复制的应用中选中文字,按 Ctrl+Alt+Space

当前 MVP 构建未做代码签名,Windows SmartScreen 可能显示“未知发布者”。请只运行从本仓库 Release 或你自己构建的文件。

从源码运行

dotnet restore
dotnet build TextAction.sln
dotnet run --project src/TextAction.App/TextAction.App.csproj

以上命令在克隆后的仓库根目录运行。

首次启动会在以下目录创建默认配置和五个 Prompt 模板:

%APPDATA%\TextAction\
├── config.json
└── prompts\
    ├── summary.txt
    ├── translate.txt
    ├── rewrite.txt
    ├── explain.txt
    └── prompt.txt

先编辑 config.json,并设置配置所引用的环境变量。动作、Provider 和模板会在后续调用时重新读取;修改全局快捷键或用户环境变量后需要重新启动 TextAction。

配置

下面的示例展示了两个 Provider,以及把不同动作路由到不同 Provider 的方法:

{
  "schemaVersion": 1,
  "hotkey": {
    "modifiers": ["Control", "Alt"],
    "key": "Space"
  },
  "providers": [
    {
      "id": "primary",
      "displayName": "Primary API",
      "baseUrl": "https://api.openai.com/v1",
      "apiKey": "env:OPENAI_API_KEY",
      "model": "gpt-4o-mini",
      "timeoutSeconds": 60
    },
    {
      "id": "local-gateway",
      "displayName": "Local Gateway",
      "baseUrl": "http://127.0.0.1:11434/v1",
      "apiKey": "env:TEXTACTION_LOCAL_API_KEY",
      "model": "your-model",
      "timeoutSeconds": 90
    }
  ],
  "actions": [
    {
      "id": "summary",
      "name": "总结",
      "description": "提炼核心观点和关键信息",
      "providerId": "primary",
      "templateFile": "prompts/summary.txt"
    },
    {
      "id": "explain",
      "name": "解释",
      "description": "用清晰的语言解释所选内容",
      "providerId": "local-gateway",
      "templateFile": "prompts/explain.txt"
    }
  ]
}

在 PowerShell 中设置当前用户的 API Key:

[Environment]::SetEnvironmentVariable(
  "OPENAI_API_KEY",
  "replace-with-your-key",
  "User"
)

重新启动 TextAction 后环境变量才会生效。apiKey 也支持直接填写密钥,但这会把密钥以明文保存在磁盘上,不推荐这样做。

配置规则和字段说明见 配置文档

扩展 Prompt 模板

模板是 UTF-8 纯文本文件,必须且只能包含一个 {{text}}

请用简体中文总结下面的内容。

要求:
- 提炼核心观点
- 保留重要事实和数字
- 用项目符号输出

{{text}}

新增动作只需:

  1. %APPDATA%\TextAction\prompts\ 新建模板文件。
  2. config.jsonactions 数组中添加动作。
  3. providerId 指定该动作使用的 Provider。
  4. 保存文件,再次触发 TextAction。

完整约束与示例见 Prompt 模板文档

项目结构

TextAction.sln
├── src/
│   ├── TextAction.App/        # WPF 窗口、全局热键与 Windows 集成
│   └── TextAction.Core/       # 配置、模板渲染与 OpenAI 兼容客户端
├── tests/
│   ├── TextAction.Core.Tests/ # 配置、模板和 API 客户端单元测试
│   └── TextAction.App.Tests/  # Windows 进程生命周期测试
├── docs/                      # 配置、模板和设计决策
└── DESIGN.md                  # UI 设计系统

核心逻辑与 WPF 外壳分离,便于测试,也为未来替换 UI 或增加其他调用入口保留空间。

构建与测试

dotnet build TextAction.sln
dotnet test TextAction.sln

创建与 Release 相同规格的自包含包:

dotnet publish src/TextAction.App/TextAction.App.csproj `
  -c Release -r win-x64 --self-contained true `
  -p:PublishSingleFile=true `
  -p:IncludeNativeLibrariesForSelfExtract=true `
  -p:EnableCompressionInSingleFile=true

项目开发约定见 CONTRIBUTING.md

隐私与安全

  • 所选文字会发送给动作指定的第三方 API Provider。发送前请确认内容不含密码、令牌、个人隐私或其他敏感信息。
  • TextAction MVP 不包含账号、云同步或产品遥测;应用网络请求只发往用户配置并主动选择的 Provider。
  • TextAction 不会让第三方 Provider 变成本地服务;数据如何存储和使用取决于该 Provider 的政策。
  • 优先使用 env:VARIABLE_NAME 引用 API Key,避免把密钥提交到 Git。
  • 只配置你信任的 baseUrl,远程服务优先使用 HTTPS。
  • MVP 不提供 Windows Credential Manager 集成;直接写入配置的密钥是明文。

发现安全问题时,请不要公开提交包含利用细节的 Issue,参见 SECURITY.md

已知限制

  • 仅支持 Windows,且只有深色主题。
  • 获取选区依赖模拟 Ctrl+C,不是所有应用和权限边界都能可靠工作。
  • 在约 350 毫秒的复制轮询窗口内,其他进程若同时改写剪贴板,TextAction 可能捕获到那次改写;执行 AI 动作前请确认当前选区。
  • 当前只支持 OpenAI 兼容的 Chat Completions 响应格式。
  • MVP 不提供流式输出、对话历史、OCR、图片理解、自动替换原文或 Provider 管理界面。
  • 没有设置界面;全局快捷键和用户环境变量变更后需要重启应用。

路线图

路线图按真实使用反馈推进,不承诺时间:

  • Windows Credential Manager 密钥存储
  • UI Automation 选区读取后备方案
  • 可编辑的快捷键和设置界面
  • 流式响应与取消请求
  • 浅色/跟随系统主题
  • 可选的“替换原文”和历史记录

关键取舍记录在 设计决策

参与贡献

Issue、文档改进和小而清晰的 Pull Request 都欢迎。提交前请先阅读 CONTRIBUTING.md。请勿在 Issue、日志、截图或测试配置中包含真实 API Key 或敏感文本。

许可证

MIT License © 2026 TextAction contributors

About

Lightweight Windows AI text-selection assistant built with C# and WPF.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages