[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-77196":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":28,"discoverSource":29},77196,"yanzi","luoluoluo22\u002Fyanzi","luoluoluo22","Yanzi launcher with cloud-synced JSON extensions and Cloudflare backend",null,"C#",198,15,2,5,0,20,21,72,60,81.31,"MIT License",false,"main",[],"2026-06-12 04:01:21","# 燕子启动器 (Yanzi)\n\n> 完全免费的开源 Windows 效率神器，可替代 Quicker\n\n用过 Quicker 吗？燕子做的事情差不多，但**完全免费、源码公开、永远不会涨价停服**。\n\n鼠标一划弹出常用工具面板，打几个字就能搜到任何东西。最酷的是：你可以让 AI 帮你生成专属工具，不需要懂编程，一句话描述需求，粘贴进来就能用。\n\n![燕子主界面与鼠标面板](launcher-and-quick-panel.png)\n\n**一句话说清楚燕子能干嘛：**\n\n- 按快捷键弹出搜索框，快速打开任何软件、文件夹、网站\n- 鼠标一划呼出面板，一键执行你最常用的操作\n- 让 AI 帮你生成专属工具，不懂编程也没关系\n- 多台电脑的配置自动同步，换电脑不用重新设置\n- 所有数据存你自己电脑，不怕隐私泄露\n\n---\n\n## 和 Quicker 比，燕子好在哪里？\n\n| 我关心的问题           | 燕子怎么说                   | Quicker 怎么样       |\n| :--------------------- | :--------------------------- | :------------------- |\n| 要花钱吗？             | 永久免费，没有会员           | 部分功能需要付费订阅 |\n| 会不会突然停服？       | 开源自部署，不怕跑路         | 官方服务，停服就完了 |\n| 能让 AI 帮我做工具吗？ | 可以，内置 AI 生成提示词     | 不支持               |\n| 我的数据安全吗？       | 全存本地，同步到你自己的网盘 | 存在第三方服务器     |\n| 能自己改代码吗？       | 完整源码公开，随便改         | 不可修改             |\n| 会不会越用越贵？       | 不会，永远免费               | 可能涨价             |\n\n\n---\n\n## 主要功能\n\n- **一键呼出搜索** — 按 `Alt+Space`，在任何界面弹出搜索框，输几个字就找到想要的东西，支持中文、拼音缩写\n- **鼠标面板** — 在桌面划一下鼠标，常用工具面板弹出来，不用找图标不用记快捷键\n- **AI 生成工具** — 告诉 AI 你想要什么功能，它帮你生成，粘贴到燕子里直接用\n- **快速网页搜索** — 输入 `bing 今天的新闻`，自动打开搜索，支持自定义任意搜索引擎\n- **自动化脚本** — 批量重命名、自动整理文件、定时操作，做成按钮一键搞定\n- **多设备同步** — 配置一次，多台电脑自动同步，换电脑不用重新设置\n- **扩展市场** — 下载别人分享的现成工具，也可以把自己的工具分享出去\n- **后台驻留** — 最小化到系统托盘，随时呼出，不占地方\n\n\n## 界面预览\n\n### 1. 主启动器 + 鼠标面板\n\n![主启动器与鼠标面板](launcher-and-quick-panel.png)\n\n### 2. JSON 扩展编辑器\n\n![JSON 扩展编辑器](json-extension-editor.png)\n\n### 3. 前缀搜索 \u002F 传参预览\n\n![前缀搜索预览](query-prefix-preview.png)\n\n### 4. 脚本执行日志\n\n![脚本执行日志](script-execution-log.png)\n\n---\n\n## 用户使用指南\n\n### 1. 下载与安装\n\n从蓝奏云下载最新版安装包：\n\n- 下载地址：\u003Chttps:\u002F\u002Fwwbnh.lanzout.com\u002Fb0pnkaj6j>\n- 提取密码：`62yn`\n\n下载后直接运行安装包。安装完成后启动 `Yanzi.exe`，默认使用 `Alt+Space` 呼出启动器。\n\n**系统要求：**\n- Windows 10 \u002F 11（64 位）\n- 安装包为自包含构建，不需要用户额外安装 .NET 运行时\n\n### 构建输出目录约定\n\n为了避免本地调试、发布和临时验证目录混淆，当前项目只认这两个标准输出目录：\n\n- 调试版：`src\\OpenQuickHost\\bin\\Debug\\net9.0-windows\\`\n- 发布版：`src\\OpenQuickHost\\bin\\Release\\net9.0-windows\\`\n\n约定说明：\n\n- `src\\OpenQuickHost\\bin\\Debug\\net9.0-windows\\` 是默认本地运行目录\n- `src\\OpenQuickHost\\bin\\Release\\net9.0-windows\\` 是默认发布构建目录\n- 像 `net9.0`、`net9.0-windows-verify` 这类目录，属于历史残留或临时验证目录，不作为正式输出目录使用\n- 临时验证输出如果需要保留，统一明确标成 `verify`，验证完成后清理\n\n### 2. 基本操作\n\n| 操作         | 快捷键 \u002F 动作  |\n| :----------- | :------------- |\n| 呼出启动器   | `Alt+Space`    |\n| 搜索命令     | 直接输入关键字 |\n| 切换条目     | `Up \u002F Down`    |\n| 执行命令     | `Enter` 或双击 |\n| 打开动作菜单 | `Ctrl+K`       |\n| 返回 \u002F 收起  | `Esc`          |\n| 右键管理     | 右键点击条目   |\n\n### 3. 添加扩展\n\n**方法一：启动器内 `+` 按钮**\n\n1. 呼出启动器，点击底部状态栏右侧 `+`\n2. 粘贴扩展 JSON（可让 AI 帮你生成，也支持直接粘贴剪贴板里的 `json` 代码块）\n3. 点击保存即可立即使用\n\n**方法二：直接写 JSON 文件**\n\n在应用运行目录的 `Extensions\u002F` 下新建一个子目录，放入 `manifest.json`：\n\n```json\n{\n  \"id\": \"open-downloads\",\n  \"name\": \"打开下载目录\",\n  \"version\": \"0.1.0\",\n  \"category\": \"目录\",\n  \"description\": \"打开当前用户的下载目录。\",\n  \"keywords\": [\"downloads\", \"下载\", \"xiazai\"],\n  \"icon\": \"mdi:folder\",\n  \"openTarget\": \"C:\\\\Users\\\\你的用户名\\\\Downloads\"\n}\n```\n\n重启启动器或在设置页刷新扩展统计后即可命中。\n\n**方法三：搜索类扩展**\n\n使用 `queryPrefixes` 和 `queryTargetTemplate`。启动器输入 `gg openai`，即可用默认浏览器打开搜索页。\n\n```json\n{\n  \"id\": \"google-search\",\n  \"name\": \"谷歌搜索\",\n  \"version\": \"0.1.0\",\n  \"category\": \"搜索\",\n  \"description\": \"用默认浏览器打开 Google 搜索。\",\n  \"keywords\": [\"google\", \"谷歌\", \"gg\", \"guge\"],\n  \"icon\": \"mdi:search\",\n  \"queryPrefixes\": [\"谷歌\", \"google\", \"gg\", \"guge\"],\n  \"queryTargetTemplate\": \"https:\u002F\u002Fwww.google.com\u002Fsearch?q={query}\"\n}\n```\n\n**方法三点五：前缀传参脚本扩展**\n\n如果你希望用户在主界面输入 `前缀 + 内容`，然后把后面的内容直接传给脚本，就要同时提供 `queryPrefixes` 和脚本入口：\n\n```json\n{\n  \"id\": \"text-length-counter\",\n  \"name\": \"文本长度统计\",\n  \"version\": \"0.1.0\",\n  \"category\": \"脚本\",\n  \"description\": \"读取主界面输入的后半段文本并返回长度。\",\n  \"keywords\": [\"文本\", \"长度\", \"统计\"],\n  \"queryPrefixes\": [\"统计\", \"count\"],\n  \"runtime\": \"csharp\",\n  \"entryMode\": \"inline\",\n  \"permissions\": [\"context.read\"],\n  \"icon\": \"mdi:counter\",\n  \"script\": {\n    \"source\": \"using System.Threading.Tasks;\\\\nusing OpenQuickHost.CSharpRuntime;\\\\n\\\\npublic static class YanziAction\\\\n{\\\\n    public static Task\u003Cstring> RunAsync(YanziActionContext context)\\\\n    {\\\\n        var input = context.InputText ?? string.Empty;\\\\n        return Task.FromResult(\\\\\\\"原文：\\\\\\\" + input + \\\\\\\"\\\\\\\\n长度：\\\\\\\" + input.Length);\\\\n    }\\\\n}\"\n  }\n}\n```\n\n用户输入 `统计 今天的安排` 后，脚本里收到的 `context.InputText` 就是 `今天的安排`。\n\n**方法四：内联 C# 动作**\n\n快捷面板触发扩展时，燕子会在点击扩展后抓取当前选中的文本或文件路径，并写入 `context.InputText`。\n\n```json\n{\n  \"id\": \"csharp-selection-summary\",\n  \"name\": \"选中内容摘要\",\n  \"version\": \"0.1.0\",\n  \"category\": \"C#\",\n  \"description\": \"读取快捷面板传入的选中文本。\",\n  \"keywords\": [\"csharp\", \"selection\", \"选中\", \"摘要\"],\n  \"icon\": \"mdi:code\",\n  \"runtime\": \"csharp\",\n  \"entryMode\": \"inline\",\n  \"permissions\": [\"context.read\"],\n  \"script\": {\n    \"source\": \"using OpenQuickHost.CSharpRuntime;\\\\n\\\\npublic static class YanziAction\\\\n{\\\\n    public static Task\u003Cstring> RunAsync(YanziActionContext context)\\\\n    {\\\\n        var text = string.IsNullOrWhiteSpace(context.InputText) ? \\\\\\\"没有收到选中内容。\\\\\\\" : context.InputText.Trim();\\\\n        return Task.FromResult($\\\\\\\"来源: {context.LaunchSource}\\\\\\\\n长度: {text.Length}\\\\\\\\n\\\\\\\\n{text}\\\\\\\");\\\\n    }\\\\n}\"\n  }\n}\n```\n\n**方法五：内联 PowerShell 脚本**\n\n```json\n{\n  \"id\": \"clipboard-read\",\n  \"name\": \"读取剪贴板\",\n  \"version\": \"0.1.0\",\n  \"category\": \"脚本\",\n  \"description\": \"读取当前剪贴板文本。\",\n  \"keywords\": [\"clipboard\", \"剪贴板\"],\n  \"icon\": \"mdi:clipboard\",\n  \"runtime\": \"powershell\",\n  \"entryMode\": \"inline\",\n  \"permissions\": [\"clipboard.read\"],\n  \"script\": {\n    \"source\": \"param([string]$InputText = \\\\\\\"\\\\\\\", [string]$ContextPath = \\\\\\\"\\\\\\\")\\\\n[Console]::OutputEncoding = [System.Text.Encoding]::UTF8\\\\n$text = Get-Clipboard -Raw\\\\nif ([string]::IsNullOrWhiteSpace($text)) { Write-Output \\\\\\\"当前剪贴板为空。\\\\\\\" } else { Write-Output $text.Trim() }\"\n  }\n}\n```\n\n**方法六：宿主界面扩展**\n\n适合翻译、文本处理、查询等需要输入区和结果区的工具。`actionType = \"script\"` 时，按钮会执行当前扩展的 C# 或 PowerShell 入口，并把结果显示在右侧。\n\n```json\n{\n  \"id\": \"text-workbench\",\n  \"name\": \"文本处理台\",\n  \"version\": \"0.1.0\",\n  \"category\": \"工具\",\n  \"description\": \"在宿主窗口中输入文本并执行 C# 动作。\",\n  \"keywords\": [\"text\", \"文本\", \"workbench\"],\n  \"icon\": \"mdi:terminal\",\n  \"runtime\": \"csharp\",\n  \"entryMode\": \"inline\",\n  \"hostedView\": {\n    \"type\": \"split-workbench\",\n    \"title\": \"文本处理台\",\n    \"description\": \"左侧输入文本，右侧显示执行结果。\",\n    \"inputLabel\": \"输入\",\n    \"inputPlaceholder\": \"输入要处理的文本...\",\n    \"outputLabel\": \"结果\",\n    \"actionButtonText\": \"执行\",\n    \"actionType\": \"script\",\n    \"emptyState\": \"结果会显示在这里。\"\n  },\n  \"script\": {\n    \"source\": \"using OpenQuickHost.CSharpRuntime;\\\\n\\\\npublic static class YanziAction\\\\n{\\\\n    public static Task\u003Cstring> RunAsync(YanziActionContext context)\\\\n    {\\\\n        return Task.FromResult(context.InputText.ToUpperInvariant());\\\\n    }\\\\n}\"\n  }\n}\n```\n\n更多示例见 [扩展编写指南](docs\u002Fextension-authoring-guide.md)。\n\n### 4. 云同步\n\n当前客户端支持两类同步：\n\n- Cloudflare 账号同步：用于账号、分享扩展、坚果云配置等账户级信息。\n- 坚果云 \u002F WebDAV 个人扩展同步：用于低频同步个人扩展包，适合多设备恢复和备份。\n\n推荐流程：\n\n1. 在设置窗口登录燕子云账号。\n2. 在“同步”设置里配置坚果云 \u002F WebDAV。\n3. 点击“立即同步”完成首轮上传或拉取。\n4. 后续新建、修改、删除扩展后，客户端会按低频策略进行后台同步。\n\n---\n\n## 开发者部署指南\n\n### 本地构建与运行\n\n**前置依赖：**\n- [.NET 9 SDK](https:\u002F\u002Fdotnet.microsoft.com\u002Fdownload)\n- Windows 系统（WPF 依赖 Windows）\n\n```powershell\n# 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002Fluoluoluo22\u002Fyanzi.git\ncd yanzi\n\n# 编译\ndotnet build\n\n# 运行（Debug）\n.\\src\\OpenQuickHost\\bin\\Debug\\net9.0-windows\\Yanzi.exe\n```\n\n### 发布单文件可执行程序\n\n```powershell\ndotnet publish .\\src\\OpenQuickHost\\OpenQuickHost.csproj -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o .\\publish\n```\n\n输出文件在 `.\u002Fpublish\u002FYanzi.exe`，可直接分发给用户，无需安装 .NET 运行时。\n\n也可以使用仓库脚本生成发布产物：\n\n```powershell\n.\\scripts\\publish-installer.ps1 -Version 0.1.0\n```\n\n脚本会先生成自包含单文件：`.artifacts\\publish\\win-x64\\Yanzi.exe`。\n如果本机安装了 Inno Setup 6，还会继续生成一键安装包：`.artifacts\\installer\\YanziSetup-0.1.0.exe`。\n\n### 配置云同步后端（Cloudflare Worker）\n\n云同步基于 Cloudflare Worker + KV 存储，**你需要部署自己的 Worker 实例**。\n\n```powershell\n# 进入 Worker 目录\ncd cloudflare\n\n# 安装依赖\nnpm install\n\n# 部署到你的 Cloudflare 账户\nnpx wrangler deploy\n```\n\n部署完成后，将 Worker 的 URL 填入项目根目录的 `syncsettings.json`：\n\n```json\n{\n  \"baseUrl\": \"https:\u002F\u002Fyour-worker.your-account.workers.dev\"\n}\n```\n\n参考示例文件：`syncsettings.example.json`。\n\n### 网站部署（Cloudflare Pages）\n\n官网静态站位于 `website\u002F` 目录：\n\n```powershell\n# 部署到 Cloudflare Pages\nnpx wrangler pages deploy .\u002Fwebsite --project-name openquickhost-site --branch main\n```\n\n### 目录说明\n\n```text\nOpenQuickHost\u002F\n├── OpenQuickHost.sln          根目录解决方案\n├── src\u002F\n│   └── OpenQuickHost\u002F         WPF 桌面应用源码\n│       ├── MainWindow.xaml \u002F .cs\n│       ├── SettingsWindow.xaml \u002F .cs\n│       ├── QuickPanelWindow.xaml \u002F .cs\n│       ├── AddJsonExtensionWindow.*\n│       ├── ScriptExtensionRunner.cs\n│       ├── LocalAgentApiServer.cs\n│       └── Sync\u002F\n├── cloudflare\u002F                Cloudflare Worker 后端源码\n├── website\u002F                   官网静态站源码\n├── docs\u002F                      产品说明与扩展规范文档\n├── installer\u002F                 Inno Setup 一键安装包脚本\n├── scripts\u002F                   发布与验证脚本\n├── skills\u002F                    内置 Agent Skill 包\n└── syncsettings.example.json  云同步配置示例\n```\n\n---\n\n## 扩展规范文档\n\n| 文档                                              | 说明                            |\n| :------------------------------------------------ | :------------------------------ |\n| [产品说明](docs\u002Fproduct-overview.md)              | 设计原则与产品定位              |\n| [扩展编写指南](docs\u002Fextension-authoring-guide.md) | 面向用户和 AI 的扩展写作示例    |\n| [扩展规范](docs\u002Fextension-spec.md)                | manifest.json 完整字段说明      |\n| [Agent Skill 规范](docs\u002Fagent-skill-spec.md)      | 为 AI 工具导出 Skill 的格式规范 |\n| [使用说明](docs\u002Fgetting-started.md)               | 快速上手指南                    |\n\n---\n\n## 更新日志\n\n### 2026-05-15\n\n- 优化燕幕默认组件样式，移除天气模块和残留说明文案，恢复便签组件并统一新增组件 HTML\u002FAI 提示词风格。\n- 修复燕幕多屏定位漂移、同步按钮触发后退出、便签同步延迟和本地缓存读取等问题。\n- 扩展燕环触发配置，支持 Win、CapsLock、自定义快捷键和鼠标触发统一分配。\n- 为燕环、燕幕、燕选增加进程黑白名单管理，并支持通过定位窗口自动添加目标进程。\n- 新增鼠标触发录制窗口，可将识别到的鼠标动作分配给面板、燕环或燕幕。\n- 调整燕选黑名单作用范围，避免影响燕环、鼠标面板等其他输入逻辑。\n- 新增输入状态窗口和托盘修复入口，便于查看和重置键盘、鼠标状态。\n\n---\n\n## 开源协议\n\n本项目以 MIT 协议开源，欢迎 Fork、提 PR 或基于此构建你自己的启动器工具。\n","燕子启动器是一个完全免费且开源的Windows效率工具，旨在替代Quicker等商业软件。其核心功能包括一键呼出搜索框以快速访问软件、文件夹或网站；通过鼠标手势调用常用操作面板；利用AI生成定制化工具而无需编程知识；支持多台电脑间的配置自动同步，并将所有数据存储于本地以确保隐私安全。此外，它还提供了丰富的自动化脚本能力以及一个扩展市场供用户分享和下载现成工具。该项目适用于追求高效工作流程同时又希望保持数据自主权的个人及团队使用。","2026-06-11 03:55:10","CREATED_QUERY"]