创建 Lexora 插件
将用户的需求变成可安装、可修改的真实插件。完成最小可用版本,再依据编译诊断与用户的实际体验迭代。不要用占位 demo 代替需求。
理解需求
先利用当前对话确定触发时机、可见效果、设置和停止方式。描述充分时直接实施;只询问会改变实现的缺失信息。短需求选择轻量默认值并说明,不要求用户先填技术问卷。没有设置需求时优先复用插件管理中的启用、禁用,不额外增加导航和配置页面。
“打字时窗口出现礼花”默认指在 Lexora 对话输入时产生短暂效果,不是读取全局键盘。窗口效果使用插件自身绘制的隔离视图,由宿主提供不含文字和按键的输入活动。
阅读协议并创作
- 读取 协议与清单 和 完整 API 类型。这些文件与当前 Lexora 一起分发;不要根据其他产品的插件格式猜测接口。
- 在当前可写工作区创建独立源码目录,例如
plugins/typing-confetti/。通过文件工具写入真实文件,保留源码以便后续对话修改。不需要用户另外安装 Node、Bun 或 SDK。 - 使用稳定的
发布者.插件名ID。未指定发布者时使用local;不要冒用官方发布者。修改已有插件保持原 ID,并提升版本。 - 根据能力选择页面、资源视图或窗口效果。仅声明实际需要的权限;没有对应能力时解释限制,不绕过隔离访问宿主 DOM、内部接口或文件。
- 使用自包含 TS/JS 和包内资源。复制
references/api.d.ts为源码目录的lexora.d.ts,仅通过import type引用。源码清单设置format: "source"。视图导出render(context, container),需要命令、存储或调度时再添加宿主入口activate(context)。 - 事件、定时器、动画在关闭时清理,动画结束回收节点、空闲时停止循环。页面使用主题变量;窗口效果保持透明、不阻挡输入,并尊重减少动态效果偏好。
编译与修正
通过 lexora_tool_search 查找 lexora_plugin_build,然后调用它:
如果当前明确是在独立 Lexora Plugin SDK 仓库中开发、没有 Lexora 内置工具,使用 SDK 工作流。普通 Lexora 对话不需要这条分支。
{ "source": "plugins/typing-confetti", "output": "typing-confetti-1.0.0.lexora-extension", "review": true }
output 是已存在父目录中的新文件,放在源码目录之外;现有文件不会被覆盖。工具使用内置隔离编译器,不执行 npm 安装脚本或插件代码。错误结果包含 code 与有限的 diagnostics:修正对应问题后重新构建,避免重复提交相同错误。需要重新生成包时使用新的输出文件名。
review: true 请求显示安装确认,用户确认后才会安装。只要求源码或打包时设为 false。不要绕过确认或通过内部配置安装。工具返回 installed: false,不代表安装完成。
通过 lexora_output_present 交付源码目录与安装包。不要只在回答中粘贴代码,也不要下载 SDK 或建立另一套构建工程。
验证与迭代
选择 2–3 个与需求直接相关的检查:主要动作、停止或禁用、配置保存或关闭页面后的行为。编译通过只证明包可构建,不证明界面和运行效果通过。Lexora 的浏览器工具只能控制资源浏览器,不能操作插件安装弹窗或窗口效果;不要为此创建另一个 HTML 模拟宿主来代替安装验收。有能操作真实插件界面的工具时执行检查;否则交付编译后的包和待验证项,让用户安装后反馈,不在等待安装期间反复调用无关工具。不要编造截图、通知送达、运行成功或性能数据。
交付简短说明:完成了什么、源码与包的位置、如何触发、已检查和仍待体验的行为。用户反馈后读取现有源码,修正实现、重新编译并再次验证相同场景。保持 ID 与数据含义稳定。发布市场或同步远端单独遵循用户指示。