--- summary: "插件和通道合约测试命令、类别以及何时运行它们" title: "合同测试" read_when: - "您更改了频道、提供商或插件 SDK 表面" --- ## 契约测试(插件和通道形状) 契约测试验证每个注册的插件和通道是否符合其接口契约。他们迭代所有发现的插件并运行一套形状和行为断言。默认的 `pnpm test` 单元通道故意跳过这些共享边界和烟雾文件;当您触摸共享通道或提供者界面时显式运行合约命令。 ### 命令 - 所有契约:`pnpm test:contracts` - 仅通道契约:`pnpm test:contracts:channels` - 仅提供方契约:`pnpm test:contracts:plugins` ### 通道契约 位于 `src/channels/plugins/contracts/*.contract.test.ts`。当前的顶层类别包括: - **频道目录** - bundled/registry 频道目录条目元数据 - **plugin**(基于注册表,分片执行) - 基本插件注册形状 - **surfaces-only**(基于注册表,分片执行) - 针对 `actions`、`setup`、`status`、`outbound`、`messaging`、`threading`、`directory` 和 `gateway` 各接口的形状检查 - **session-binding**(基于注册表) - 会话绑定行为 - **outbound-payload** - 消息负载结构和规范化 - **group-policy**(回退) - 每个通道的默认群组策略强制执行 - **threading**(注册表支持,分片) - 线程 ID 处理 - **directory**(注册表支持,分片)- directory/roster API - **registry** 和 **plugins-core.\*** - 通道插件注册表、加载器和配置写入授权内部逻辑 这些套件使用的入站调度捕获和出站有效负载harness助手通过 `src/plugin-sdk/channel-contract-testing.ts` 在内部公开(npm- 除外,不是公共 SDK 子路径);此目录中没有独立的 `inbound.contract.test.ts` 文件。 ### 提供方契约 位于 `src/plugins/contracts/*.contract.test.ts`。当前类别包括: - **shape** - 插件清单、API 和运行时导出形状 - **plugin-registration**(+ 并行) - 清单注册用例 - **package-manifest** - 包清单要求 - **loader** - 插件加载器 setup/teardown 行为 - **registry** - 插件契约注册表内容和查找 - **providers** - 内置提供方之间的共享提供方行为,以及 Web 搜索提供方 - **auth-choice** - 身份验证选项元数据和设置行为 - **provider-catalog-deprecation** - 已弃用的提供方目录元数据 - **wizard.choice-resolution**、**wizard.model-picker**、**wizard.setup-options** - 提供方设置向导契约 - **embedding-provider**、**memory-embedding-provider**、**web-fetch-provider**、**tts** - 特定能力的提供方契约 - **session-actions**、**session-attachments**、**session-entry-projection** - 插件自有的会话状态契约 - **scheduled-turns** - 插件计划回合元数据和时间戳范围 - **主机挂钩**、**运行上下文生命周期**、**运行时导入副作用**、 **runtime-seams** - 插件 host/runtime 生命周期和导入边界合约 - **extension-runtime-dependencies** - 扩展的运行时依赖放置 ### 何时运行 - 在更改 plugin-sdk 导出或子路径之后 - 在添加或修改通道或提供方插件之后 - 在重构插件注册或发现逻辑之后 契约测试在 CI 中运行,不需要真实 API key。