首页/新闻资讯/正文详情

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

发布时间:2026/9/21 0:00:18 来源:云帆数科 栏目:资讯中心
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系
桌面应用AI 应用插件系统【免费下载链接】WoxA cross-platform launcher that simply works项目地址https://gitcode.com/gh_mirrors/wo/Wox点击查看免费下载全功能插件Full-featured Plugin是 Wox 三类插件实现方式中能力最完整的一类它运行在独立的 Python 或 Node.js 宿主进程中通过 WebSocket 与wox.core通信常驻内存、可持续保有状态并可使用 Wox 公开 API 中的预览、设置 UI、工具栏消息、MRU 恢复、截图采集、AI 流式对话与深链等高级能力。本文以 Wox 官方文档 full-featured-plugin.md 为骨架结合仓库内 Python/Node.js SDK 源码与系统插件实现完整讲解全功能插件的选型依据、最小示例、plugin.json配置、查询与结果构建、设置系统、截图 API 以及本地开发调试闭环读完即可着手开发一个可商用级别的 Wox 插件。一、何时选择全功能插件Wox 将插件按安装形态分为系统插件随 Wox 内置、不可卸载与用户插件可安装、卸载、更新、禁用按实现方式分为脚本插件Script Plugin、单文件 SDK 插件Single-file SDK Plugin与全功能插件三类详细对比可参见 插件概览。当你的插件需要以下一项或多项能力时应当选择全功能插件模型跨多次查询保持持久状态persistent state across queries异步 / 网络密集型工作async/network-heavy work自定义设置 UIcustom settings UI更丰富的预览与动作richer previews and actions插件驱动的截图或剪贴板工作流plugin-driven screenshot or clipboard workflowsAI 或 MRU 集成AI or MRU integration。如果插件只是一个小型单文件自动化脚本应从 脚本插件指南 开始如果希望保持单文件但需要使用 Wox API请参考 单文件 SDK 插件指南。若使用 Codex 等兼容 Agent 辅助开发可参考 AI Skills For Plugin Development。从源码结构看全功能插件的核心契约定义在 Python SDK 的 plugin.py 中插件类只需实现init(ctx, init_params)与query(ctx, query)两个异步方法即可进入 Wox 的插件生命周期实例化 → 初始化 → 查询 → 卸载。二、快速开始全功能插件的最小落地步骤在~/.wox/plugins/your-plugin-id/下创建插件目录添加plugin.json与入口文件main.py、index.js或构建产物如dist/index.js安装对应语言的 SDK在 Wox 设置中重载插件或重启 Wox。SDK 安装命令Pythonuv add wox-pluginNode.jspnpm add wox-launcher/wox-pluginPython SDK 的包结构与类型标注位于 wox_plugin 包Node.js SDK 的入口与类型定义位于 wox.plugin.nodejs/src/index.ts 与 wox.plugin.nodejs/types/index.d.ts。三、最小示例Hello Wox以下两个示例均返回QueryResponse因此插件的plugin.json必须将MinWoxVersion声明为2.0.4或更新版本。如果同一份插件构建需要兼容更老版本的 Wox则直接返回list[Result]Python或Result[]Node.js。Python 最小示例from wox_plugin import Plugin, Query, QueryResponse, Result, Context, PluginInitParams from wox_plugin.models.image import WoxImage class MyPlugin(Plugin): async def init(self, ctx: Context, params: PluginInitParams) - None: self.api params.api self.plugin_dir params.plugin_directory async def query(self, ctx: Context, query: Query) - QueryResponse: return QueryResponse(results[ Result( titleHello Wox, sub_titleThis is a sample result, iconWoxImage.new_emoji(), score100, ) ]) plugin MyPlugin()Node.js 最小示例import { Plugin, Query, QueryResponse, Context, PluginInitParams } from wox-launcher/wox-plugin class MyPlugin implements Plugin { private api!: PluginInitParams[API] private pluginDir async init(ctx: Context, params: PluginInitParams): Promisevoid { this.api params.API this.pluginDir params.PluginDirectory } async query(ctx: Context, query: Query): PromiseQueryResponse { return { Results: [ { Title: Hello Wox, SubTitle: This is a sample result, Icon: { ImageType: emoji, ImageData: }, Score: 100, }, ], } } } export const plugin new MyPlugin()QueryResponse 与 list[Result] 的兼容性说明直接返回list[Result]/Result[]已被标记为 deprecated但 Python 与 Node.js 宿主仍会接受旧形态以兼容老版本 Wox。只有在plugin.json声明MinWoxVersion 2.0.4时才应使用QueryResponse。从 query_response.py 的实现可以看到原因QueryResponse将Results、Refinements查询级筛选/排序控件与Layout每查询的预览宽度、网格布局提示打包成一个归一化载荷一次下发旧形态无法携带这些信息。同理SDK 在 plugin.py 中将返回类型声明为QueryReturn Union[QueryResponse, List[Result]]即两种形态在类型层面都被接受。四、plugin.json 核心配置plugin.json位于每个全功能插件的根目录Wox 依据它决定插件能否在当前平台加载、使用哪个运行时与入口文件、如何注册触发关键词与命令。完整字段参考 插件规范全功能插件应遵循以下要点完整 schema 见 Specification即 www/docs/development/plugins/specification.mdRuntime取值为PYTHON或NODEJSEntry指向 Wox 应执行的入口文件Features只声明实际使用的能力。示例{ Id: my-awesome-plugin, Name: My Awesome Plugin, Description: Do awesome things, Author: You, Version: 1.0.0, MinWoxVersion: 2.0.4, Runtime: NODEJS, Entry: dist/index.js, TriggerKeywords: [awesome, ap], Features: [{ Name: querySelection }, { Name: ai }], SettingDefinitions: [ { Type: textbox, Value: { Key: api_key, Label: API Key, DefaultValue: } } ] }补充说明几个关键字段依据 规范字段是否必填说明示例Id✅稳定唯一 ID建议 UUIDcea0f...28855MinWoxVersion✅最低要求的 Wox 版本2.0.4Runtime✅PYTHON、NODEJS、SCRIPTGo 仅系统插件保留PYTHONEntry✅相对插件根的入口文件main.pyIcon✅WoxImage字符串emoji:、base64、相对路径均可emoji:TriggerKeywords✅一个或多个触发关键词*表示全局触发[calc]SupportedOS✅Windows、Linux、Darwin的任意组合[Windows,Darwin]Features⭕可选能力开关可带参数[{Name:debounce,Params:{IntervalMs:200}}]SettingDefinitions⭕渲染在 Wox 设置页的配置 schema[...]五、查询处理Query 对象模型Wox 会将每次用户交互归一化为一个Query对象传入query()核心字段如下详细拆分规则见 Query 模型Query.Type取值为input或selectionQuery.RawQuery保留原始输入Query.TriggerKeyword、Query.Command、Query.Search解析后的三个分段Query.Id做异步后续更新时必须保留的标识符Query.Env当启用queryEnv功能时携带的可选环境上下文如活动窗口信息、浏览器 URL。以wpm install wox为例的拆分结果TriggerKeywordwpmCommandinstallSearchwoxRawQuerywpm install woxselection类型仅在插件声明querySelection功能时才会送达载荷包含文本与文件路径Env仅在声明queryEnv时出现。SDK 侧对应的数据模型定义在 query.pyQuery、QueryType、Selection、QueryEnv等。六、构建结果Result、预览、Tails、Actions 与增量更新每个Result可包含IconPreviewTailsActionsGroup与GroupScore实用模式用Preview承载 markdown、纯文本、图片、文件、列表或内嵌 HTML/网页预览用Tails显示徽章或小型元数据当某个动作会持续原地更新同一结果时设置PreventHideAfterAction。若动作启动后需要更新一个已经可见的结果使用GetUpdatableResult获取结果当前状态若结果已不可见如用户改换了查询返回NoneUpdateResult应用更新并返回布尔值表示结果是否仍然可见。若需要为同一次活跃查询流式追加更多结果使用PushResults传入当前Query与结果批次查询仍活跃时返回true查询已切换时返回false且结果被忽略——这非常适合先返回部分结果、再异步补齐剩余结果的场景。这些方法的签名与使用示例可在 Python SDK 的 api.py 中直接查看。七、静态 HTML 预览webview使用webview渲染内联 HTML含 CSS无需启动 HTTP 服务器或创建临时 HTML 文件html是负载字段payload field不是一种预览类型。import type { WoxPreview, WoxPreviewWebviewData } from wox-launcher/wox-plugin const preview: WoxPreview { PreviewType: webview, PreviewData: JSON.stringify({ html: !doctype htmlhtmlbodyh1 stylecolor:tealHello Wox/h1/body/html } satisfies WoxPreviewWebviewData) } // Assign preview to Result.Preview.import json from wox_plugin import WoxPreview, WoxPreviewType preview WoxPreview( preview_typeWoxPreviewType.WEBVIEW, preview_datajson.dumps({ html: !doctype htmlhtmlbodyh1 stylecolor:tealHello Wox/h1/body/html }), ) # Assign preview to Result(previewpreview, ...).关键约束html与url二选一可选 JSON 字段为injectCss、userAgent、cacheDisabled与cacheKey默认取 URL 或 HTML 内容内联 HTML 没有插件相对基 URL请内嵌 CSS/图片或使用绝对资源 URL这是浏览器内容而非经过净化的 Markdown在将不可信文本拼入 HTML 之前必须先转义。底层实现可在 Python SDK 的 preview.py 中确认WoxPreviewType枚举完整覆盖MARKDOWN、TEXT、IMAGE、URL、WEBVIEW、FILE、LIST、REMOTE八种类型其中WEBVIEW的preview_data是含url或html的 JSON 字符串FILE类型支持 markdown、图片、PDF、文本等格式LIST类型用WoxPreviewListData的行式载荷展示进度、状态等结构化信息适用于长时间运行的动作更新。八、设置系统SettingDefinitions 与运行时读写在plugin.json中用SettingDefinitions定义设置 UI。常用设置类型textboxcheckboxselectselectAIModeltabledynamicheadlabelnewline各类型的取值键说明可参考 规范例如head使用Contentselect使用Key、Label、DefaultValue与Options[] { Label, Value }selectAIModel的下拉项由 Wox 按已配置的 AI 提供商动态填充table支持Columns与可选的分组Groups[]可CollapsedByDefaultdynamic仅含Key由插件在运行时填充Style支持PaddingLeft/Top/Right/Bottom与Width。运行时读写约定用GetSetting读取值用SetSetting持久化要求 Wox 2.4.0对绝不允许进入云同步Cloud Sync的值设置IsLocalSaveSetting仅用于兼容更老版本的 Wox已标记 deprecated用OnSettingChanged响应设置变更回调签名(context, key, new_value)适用于热更新 API Key 等场景用OnGetDynamicSetting提供运行时生成的设置项。Python SDK 中 api.py 的SetSettingOption数据类进一步揭示了SetSetting的完整字段Key、Value、PlatformSpecific按平台分别存储与IsLocal仅本机保存、不进入云同步set_setting返回包含Success与ErrMsg的结果对象。OnGetDynamicSetting回调在设置页打开时按需拉取因此应保持回调快速且确定性必要时缓存远程数据避免拖慢 UI。九、常用 Feature flags全功能插件最可能用到的能力开关querySelection接收文本/文件选区查询queryEnv接收活动窗口或浏览器上下文ai使用 Wox 已配置的 AI APIdeepLink注册插件深链mru从 Wox 的 MRU 存储恢复条目resultPreviewWidthRatio已弃用改用QueryResponse.Layout.ResultPreviewWidthRatiogridLayout已弃用改用QueryResponse.Layout.GridLayout。其余可用开关还包括debounce参数IntervalMs避免输入过程中高频触发query、ignoreAutoScore退出 Wox 频率自动评分等完整列表见 规范。只启用确实需要的能力——它们会改变 Wox 对查询的路由方式与插件上下文的构建。布局类能力推荐通过QueryResponse.Layout按查询声明从 query_response.py 可以看到QueryLayout支持Icon、ResultPreviewWidthRatio与GridLayoutGridLayout含Columns、ImageWidth/ImageHeight、ItemPadding、ItemMargin、AspectRatio、ShowTitle等参数相比静态的 plugin.json 元数据开关能够针对每次查询结果集独立决定预览宽度与网格呈现。十、截图 API把选区绘制交给 WoxWox 为全功能插件内置了一套截图工作流。当插件需要用户绘制一个区域、再自行处理得到的图片路径时使用典型场景包括OCR 识别图片上传缺陷报告bug reportingWox 之外的视觉标注流水线。API 返回值Screenshot()返回Success采集是否成功完成ScreenshotPath成功时导出的图片路径ErrMsg失败原因若采集完成但存在注意项则为警告信息。选项ScreenshotOption支持HideAnnotationToolbar将流程聚焦于纯粹的选区绘制AutoConfirm用户完成一次有效选区后立即结束。Node.js 示例const capture await this.api.Screenshot(ctx, { HideAnnotationToolbar: true, AutoConfirm: true, }) if (!capture.Success) { await this.api.Notify(ctx, Screenshot failed: ${capture.ErrMsg}) return } await this.api.Notify(ctx, Saved to ${capture.ScreenshotPath})行为注意点导出的文件路径会返回给插件剪贴板处理由插件自行负责第三方插件会自动在浮动截图工具箱中显示自己的插件图标若需要 Wox 内置的标注 UI请不要设置HideAnnotationToolbar。Python SDK 中对应定义位于 api.pyScreenshotOptionhide_annotation_toolbar/auto_confirm序列化为HideAnnotationToolbar/AutoConfirm与ScreenshotResultsuccess/screenshot_path/errmsg。Wox 内置截图系统插件的实现可参考 screenshot.go其中展示了完整截图工作流采集 → 导出路径 → 生成缩略图 → OCR 侧车文件 → 通知如何在宿主层落地可作为插件侧截图流程对接的实际参照。十一、AI、深链与 MRUAI API 需要声明ai功能深链回调需要deepLink功能与OnDeepLink回调接收参数字典典型用法为解析wox://myplugin?actionopenid123之类的调用MRU 恢复需要mru功能与OnMRURestore回调返回Result以恢复条目返回None表示条目失效并从 MRU 移除。这些都是可选能力。如果首版还不需要它们保持插件尽量精简。对应 API 方法ai_chat_stream、on_deep_link、on_mru_restore的签名与完整示例见 api.py。十二、本地开发循环与调试开发循环将插件目录放在~/.wox/plugins/下或把你的工作目录软链接到那里修改plugin.json后从 Wox 设置中重载插件或重启 Wox修改 TypeScript 构建产物后重新构建插件并重载如果插件触及核心/宿主契约应重新构建 Wox 本体而不是指望宿主自动拾取类型变更。推荐的调试顺序当出现问题时的排查步骤先核对plugin.json确认正在使用正确的运行时宿主Python 还是 Node.js通过 SDK API 在插件侧添加日志查看核心日志~/.wox/log/wox.log必要时再查看同一日志目录下的 UI 或宿主日志如果问题跨层从仓库根目录执行make build重新构建。make build会依次执行清理、AI 技能同步、原生组件WoxMR、窗口钩子、崩溃处理器、文件索引服务构建与 Go 核心编译完整目标定义见 wox.core/Makefile。核心日志目录与插件目录约定同样适用于 Python/Node.js 宿主SDK 中的log(ctx, level, msg)方法会将日志写入 Wox 日志文件便于与核心日志交叉排查。赞分享桌面应用AI 应用插件系统【免费下载链接】WoxA cross-platform launcher that simply works项目地址https://gitcode.com/gh_mirrors/wo/Wox点击查看免费下载相关推荐Wox 全功能插件开发指南基于 WebSocket 常驻宿主的完整 API 实战Wox 全功能插件开发指南基于 WebSocket 常驻宿主的完整 API 实战 全功能插件Full featured Plugin是 Wox 插件体系中桌面应用AI 应用插件系统Wox 插件体系全解析系统插件、脚本插件、单文件 SDK 插件与全功能插件的分类与选型指南Wox 插件体系全解析系统插件、脚本插件、单文件 SDK 插件与全功能插件的分类与选型指南 本篇技术指南以 Wox 官方文档《插件概览》为骨架系统梳理 Wo桌面应用AI 应用插件系统Wox 单文件 SDK 插件开发指南一个文件、完整 Public API、常驻宿主进程Wox 单文件 SDK 插件开发指南一个文件、完整 Public API、常驻宿主进程 单文件 SDK 插件Single file SDK Plugin是桌面应用AI 应用插件系统上一篇探秘QArt4J二维码的艺术之旅下一篇Agent Zero模型配置从零到一的智能代理搭建之旅创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

校园二手交易网站设计的原则:不懂代码也能搞定,建站报价全解析
校园二手交易网站设计的原则:不懂代码也能搞定,建站报价全解析

校园二手交易网站设计的原则:不懂代码也能搞定,建站报价全解析 想做一个校园二手交易网站,却连HTML标签都写不利索?别慌,这太正常了。很多大学生或者初创团队都卡在第一步: 自己不会代码想做网站 。这时候,大家最关心的往往不是技术多高深,而是 建站报价 到底多少,以及能不能用最低成本跑起来。… · 2026/9/21 0:54:02

华为MA5800全光网校园改造实战:从选型到割接运维
华为MA5800全光网校园改造实战:从选型到割接运维

1. 为什么校园网改造要选MA5800这套全光方案先说说我接手这个项目的背景。学校老校区有6栋教学楼、4栋宿舍楼、1栋行政楼和1个图书馆,原来跑的是三层交换机堆叠加超五类网线的传统架构。最远的宿舍楼到中心机房走线超过180米,中间还经过两次转接&#xf… · 2026/9/21 0:53:29

酒店管理系统三端同步架构:实时房态、订单闭环与WebSocket推送实践
酒店管理系统三端同步架构:实时房态、订单闭环与WebSocket推送实践

简介:这套酒店管理系统定位于希望快速实现数字化运营的酒店管理者及需要参考完整商业项目的开发者,整合后台、官网、微信小程序三大入口。系统内置实时房间动态、订单管理、订餐管理、微信小程序下单与在线支付退款等核心业务,覆盖从客户预订… · 2026/9/21 0:53:29

SwarmClaw:面向生产的自托管多智能体AI运行时底座
SwarmClaw:面向生产的自托管多智能体AI运行时底座

1. 项目概述:SwarmClaw不是另一个“玩具框架”,而是面向真实生产场景的多智能体运行时底座SwarmClaw这个名字乍听像某种开源工具的代号,但如果你已经踩过Ollama本地部署、Dify多智能体配置、vLLM大模型服务化、甚至RancherNacos微服务治理的坑… · 2026/9/21 0:53:29

不必要的 RT 切换与 Resolve:手机 GPU 最贵的那笔隐形账单
不必要的 RT 切换与 Resolve:手机 GPU 最贵的那笔隐形账单

抓帧报告(1080p,训练场静止不动) Draw Calls : 412 ← 还行 Triangles : 1.2 M ← 还行 Texture Read : 180 MB/s ← 还行 ──────────────────────────────── RenderPass : 23 … · 2026/9/21 0:52:28

Vue这个响应式更新陷阱你可能也踩过
Vue这个响应式更新陷阱你可能也踩过

上周排查一个线上问题时,我盯着屏幕上的列表数据愣了足足十秒——明明更新了数组里的对象属性,视图却像是被冻住了一样纹丝不动。你可能也遇到过这种场景:你以为 Vue 的响应式系统该触发更新了,但它偏偏没动静。今天我们就扒一扒这… · 2026/9/21 0:52:28

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39

Word表格编号全攻略:从列表编号到题注交叉引用
Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39

从第一个站到第二个站:独立开发者的静态网站选型与落地实践
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41

Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行
Claude Code 按智谱AI指南装完,ANTHROPIC_BASE_URL 改走 TaoToken 兼容通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/21 0:00:18

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码