--- name: plugin-creator description: 创建、修改并验证可安装的 Lexora 桌面插件,包括工作台装饰、导航与面板、文件阅读工具、控件样式、网络查询、通知和定时命令。也响应 $plugin-creator。普通任务执行、使用现有插件、其他产品的插件开发不属于此技能。 --- # 创建 Lexora 插件 将用户的需求变成可安装、可修改的真实插件。完成最小可用版本,再依据编译诊断与用户的实际体验迭代。不要用占位 demo 代替需求。 ## 理解需求 先利用当前对话确定输入、触发时机、呈现位置与生效范围、需要保留的数据和停止方式。描述充分时直接实施;只询问会改变实现的缺失信息。短需求选择轻量默认值并说明,不要求用户先填技术问卷。没有设置需求时优先复用插件管理中的启用、禁用,不额外增加导航和配置页面。 分别确定事件来自哪里、内容画在哪里、何时可见。事件来自某个控件,不意味着内容只能画在该控件内;保留用户指定的窗口、分屏或局部区域,不擅自缩小范围。未指定的视觉细节可以选择默认值;指定范围缺少正式能力时明确说明,不能用相近位置代替交付。 用户提供外部参考时先阅读公开说明或代码,提取需要复现的用户行为,再映射到 Lexora 的正式能力。参考项目的内部接口不能直接移植;读取失败时说明缺少的依据,不把推测写成已经核对的实现。 用户给出的作者署名或调用名不符合规则时,说明具体原因并给出 1–3 个保留原意的可用候选,通过对话请用户确定后继续。不要静默截断、转拼音、替换为系统账号或生成陌生名称;中文作者署名本身合法,无需改成英文。尚未指定调用名时可以按插件功能提出简短名称。 ## 按需求组合能力 读取 [能力选择与组合](references/capabilities.md),将需求对应到输入来源、呈现方式、运行入口与状态归属,再确定最小清单。一个插件可以组合多种正式扩展点,也可以只提供命令或一个文件视图;现有示例不是插件类别或必须复制的模板。 查询宿主扩展能力时,通过 `lexora_tool_search` 查找 `lexora_plugin_capabilities`。先无参数查询当前宿主的简短目录,再按 `kind` 或 `target` 获取所需能力的契约;不要把完整目录提前塞进提示词。内容区的共同规则见 [内容插槽](references/slots.md)。没有匹配位置时说明能力缺口,不借助 CSS 选择器或相近区域模拟替换。 先说明所选组合能完成的用户行为,再创作。文件阅读工具需要按文件打开的独立视图和各自的阅读状态;常驻信息条可能需要底部挂载、宿主查询命令与私有设置。不要因为都“有界面”就统一做导航页,也不要为了演示全部 API 给插件添加无关权限。 ## 阅读协议并创作 继续旧对话创作时,重新读取当前技能与协议。历史消息、旧工具结果和压缩摘要中的命名示例不作为新插件的身份依据;维护已有插件时读取实际源码清单,并保留其中的 ID。 1. 读取 [协议与清单](references/protocol.md) 和 [完整 API 类型](references/api.d.ts)。这些文件与当前 Lexora 一起分发;不要根据其他产品的插件格式猜测接口。 需要实时配置、表单依赖或运行状态判断时,读取 [条件函数](references/conditions.md),声明数据输入与作用域,不将函数序列化进清单。需要 Agent 指令、后台任务动作、模型调用、任务标题或原生设置时,追加读取 [Agent 与设置](references/agent-settings.md),并确认当前宿主能力目录支持。事件驱动动作与订阅按 [事件与触发列表](references/events.md) 选择精确入口和载荷,不把普通事件监听器当作任务能力调用。 2. 在当前可写工作区创建独立源码目录,例如 `plugins/<插件名>/`。通过文件工具写入真实文件,保留源码以便后续对话修改。不需要用户另外安装 Node、Bun 或 SDK。 3. 新建独立插件时通过 `lexora_tool_search` 查找 `lexora_plugin_identity`,传入按功能选定的简短英文 `slug`,将返回的 `id`、`author` 和 `engines` 写入 `extension.json`。作者未指定时省略参数,使用已保存的默认署名;明确不署名时传空字符串。作者名支持中文,不要求用户提供英文名、平台账号或唯一名称,也不从系统用户名、Git 配置或目录推断署名。不要自行编造 ID 或继续生成 `local.*`。修改、升级、换电脑维护及分发沿用源码内已有 ID,不重新调用身份生成工具;包括已有的 `local.*`。只有创建独立副本时生成新 ID 并同步内部引用。 4. 按选定组合声明视图、命令、导航和挂载点,明确每项能力由宿主入口还是视图入口调用;限定页面时使用公开上下文和声明条件。仅声明实际需要的权限;没有对应能力时解释限制,不绕过隔离访问宿主 DOM、内部接口或文件。明确用户第一次如何启动、关闭后如何再次打开;普通挂载需要显式打开;内容插槽和替换控件的启用、回退与配置归属按 [内容插槽](references/slots.md) 实现。现有入口足够时不额外增加设置页。 5. 使用自包含 TS/JS 和包内资源。复制 `references/api.d.ts` 为源码目录的 `lexora.d.ts`,仅通过 `import type` 引用。源码清单设置 `format: "source"`。视图导出 `render(context, container)`,需要命令、存储或调度时再添加宿主入口 `activate(context)`。 6. 事件、定时器、动画在关闭时清理,动画结束回收节点、空闲时停止循环。页面使用主题变量;窗口效果保持透明、不阻挡输入,并尊重减少动态效果偏好。 修改作者署名时直接更新清单 `author`,保留已有 `id` 和所有贡献引用,无需调用身份生成工具。ID 的前缀不会自动成为署名;用户说“用户名”或“发布者”且含义不明确时,先区分作者署名与更换插件身份。用户明确要求更换 ID 时,先说明它会被当作另一份插件,既有数据不会自动转移。 ## 编译与修正 通过 `lexora_tool_search` 查找 `lexora_plugin_build`,然后调用它: 如果当前明确是在独立 Lexora Plugin SDK 仓库中开发、没有 Lexora 内置工具,使用 [SDK 工作流](references/sdk-workflow.md)。普通 Lexora 对话不需要这条分支。 ```json { "source": "plugins/my-plugin", "output": "my-plugin-1.0.0.lexora-extension", "review": true } ``` `output` 是已存在父目录中的新文件,放在源码目录之外;现有文件不会被覆盖。工具使用内置隔离编译器,不执行 npm 安装脚本或插件代码。错误结果包含 `code` 与有限的 `diagnostics`:修正对应问题后重新构建,避免重复提交相同错误。需要重新生成包时使用新的输出文件名。 `review: true` 请求显示安装确认,用户确认后才会安装。只要求源码或打包时设为 `false`。不要绕过确认或通过内部配置安装。交付前核对构建结果中的 `id`、`name`、`author` 和 `version`。`author` 为空表示安装界面会显示未署名;用户要求署名时,修正清单并重新构建,不能把 ID 前缀当作署名已经生效。构建结果中的 `installation` 只表示是否发起审核,不代表当前安装状态;旧版本返回的 `installed: false` 也不能用于断言用户尚未安装。 需要判断安装、待应用更新或加载失败时,通过 `lexora_tool_search` 查找 `lexora_plugin_inspect`,以插件 `id` 读取当前宿主状态。比较当前版本与 `pendingVersion`,检查可见命令、导航入口、视图 ready 和错误。仍待用户审核时交付结果即可,不循环轮询;工具不可用时明确安装状态未核实。ready 只证明入口完成加载,不能代替实际功能验收。 通过 `lexora_output_present` 交付源码目录与安装包。不要只在回答中粘贴代码,也不要下载 SDK 或建立另一套构建工程。 ## 验证与迭代 按所选能力检查主要动作,以及真正影响它的边界:文件视图验证两份资源的状态互不覆盖;组合面板验证导航切换和设置刷新;控件验证宿主允许值、失败回退与明确重试;后台命令验证关闭页面后仍按约定运行。再验证禁用后的停止行为,避免机械套用某个示例的测试步骤。 有持久设置时,检查修改后的实际行为、离开页面再返回及重启后的恢复;开关需要验证关闭与重新开启,不能只确认表单显示成功提示。 编译通过只证明包可构建,不证明界面和运行效果通过。Lexora 的浏览器工具只能控制资源浏览器,不能操作插件安装弹窗或窗口效果;不要为此创建另一个 HTML 模拟宿主来代替安装验收。有能操作真实插件界面的工具时执行检查;否则交付编译后的包和待验证项,让用户安装后反馈,不在等待安装期间反复调用无关工具。不要编造截图、通知送达、运行成功或性能数据。 交付简短说明:完成了什么、源码与包的位置、如何触发、已检查和仍待体验的行为。用户反馈后读取现有源码,修正实现、重新编译并再次验证相同场景。保持 ID 与数据含义稳定。发布市场或同步远端单独遵循用户指示。