用途:为 browse CLI 创建插件,以自定义命令、自定义报告器和生命周期钩子扩展 browse。
插件形式:一个 TypeScript 或 JavaScript 文件,默认导出 BrowsePlugin 对象,包含 name、version,以及可选的 commands、reporters、hooks。类型定义位于 src/plugin.ts。
主要能力:PluginCommand 定义命令名、摘要、用法、已知 flags、timeoutExempt 与 handler;处理器接收 CommandContext(含当前 Playwright page、BrowserContext、config、args、sessionState、request)并返回 Response({ok:true,data} 或 {ok:false,error})。PluginHooks 支持 init、beforeCommand、afterCommand、cleanup,其中 beforeCommand 可返回 Response 以短路命令,afterCommand 只读。CustomReporter 通过 browse flow --reporter <name> 和 browse test-matrix --reporter <name> 使用。
注册与测试:在 browse.config.json 的 plugins 数组填写路径(相对路径按配置文件目录解析,裸名按 npm 包解析);放置在 ~/.browse/plugins/ 下的 .ts 或 .js 文件会自动加载。测试命令为 browse my-cmd、browse my-cmd --json、browse help my-cmd。
行为与限制:命令名与报告器名必须唯一,冲突在加载时被拒绝并给出警告。处理器抛错返回 {ok:false,error},不会使守护进程崩溃;钩子错误同样捕获。sessionState 按会话持久,会话关闭时重置。init 失败不致命,插件命令与钩子仍会注册。示例见 examples/plugin-example.ts 及 examples/plugins/ 下的 slack、discord、jira,完整文档见 docs/plugins.md(含发布为 npm 包)。