OpenClaw .NET兼容性目錄指南(CompatibilityCatalog)
概述
compat/public-smoke.json 是 OpenClaw.NET 兼容性驗(yàn)證體系的核心清單文件。它承擔(dān)著以下關(guān)鍵職責(zé):
- 集中管理所有已知公開插件(NPM Plugin)和技能(ClawHub Skill)的預(yù)期行為;
- 作為自動化煙霧測試(Public Smoke Tests) 的唯一數(shù)據(jù)源;
- 通過 CLI 命令 與 REST API 暴露給運(yùn)維與集成方查詢;
- 在構(gòu)建期作為嵌入資源(Embedded Resource)編譯進(jìn)
OpenClaw.Core程序集,對 NativeAOT 完全友好,運(yùn)行時無需訪問文件系統(tǒng)。
無論是發(fā)布前的回歸驗(yàn)證、外部集成方的兼容性自查,還是社區(qū)貢獻(xiàn)者新增插件,都以該清單為唯一事實(shí)來源(Single Source of Truth)。
文件結(jié)構(gòu)
清單頂層是一個帶版本號的 JSON 對象,entries 字段為條目數(shù)組:
{
"version": 2,
"entries": [
{
"id": "agentseo-plugin",
"category": "ts-jiti-plugin",
"kind": "npm-plugin",
"spec": "@agentseo/openclaw-plugin@0.1.4",
"packageName": "@agentseo/openclaw-plugin",
"pluginId": "agentseo",
"expectedStatus": "compatible",
"configJson": "{\"apiKey\":\"test_key\"}",
"expectedToolNames": ["agentseo_audit", "agentseo_keywords"],
"expectedSkillNames": ["agentseo"]
}
]
}條目字段說明
字段按用途分為三組:通用字段、技能專用字段、插件專用字段。
通用字段(所有條目必填)
| 字段 | 類型 | 說明 |
|---|---|---|
id | string | 場景唯一標(biāo)識,須在 entries 中保持唯一 |
category | string | 場景分類:pure-skill、js-tool-plugin、ts-jiti-plugin、config-schema-plugin、unsupported-surface-plugin |
kind | string | 資源類型:clawhub-skill 或 npm-plugin |
技能專用字段(kind == "clawhub-skill")
| 字段 | 類型 | 必填 | 說明 |
|---|---|---|---|
slug | string | ? | ClawHub 中的技能標(biāo)識符 |
version | string | ? | 技能的 SemVer 版本 |
expectedRelativePath | string | ? | 安裝后的預(yù)期相對路徑,如 skills/my-skill/SKILL.md |
插件專用字段(kind == "npm-plugin")
| 字段 | 類型 | 必填 | 說明 |
|---|---|---|---|
spec | string | ? | NPM 包規(guī)范,如 @agentseo/openclaw-plugin@0.1.4 |
packageName | string | ? | NPM 包名 |
pluginId | string | ? | 插件唯一標(biāo)識 |
expectedStatus | string | ? | 預(yù)期兼容性狀態(tài):compatible 或 incompatible |
configJson | string | ?? | JSON 字符串形式的示例配置 |
installExtraPackages | string[] | ?? | 需要額外安裝的依賴包列表 |
expectedToolNames | string[] | ?? | 預(yù)期暴露的工具名稱(僅 compatible 場景) |
expectedSkillNames | string[] | ?? | 預(yù)期提供的技能名稱(僅 compatible 場景) |
expectedDiagnosticCodes | string[] | ?? | 預(yù)期的診斷錯誤碼(僅 incompatible 場景) |
?? 注意:NPM 插件條目必須顯式指定
expectedStatus,編譯期校驗(yàn)會拒絕缺失該字段的條目。
場景分類詳解
OpenClaw.NET 共定義了 5 種 category,覆蓋了從純技能到負(fù)面用例的全部典型場景:
| Category | 說明 | 測試目的 | 典型示例 |
|---|---|---|---|
pure-skill | 獨(dú)立技能包,無 NPM 依賴 | 驗(yàn)證 SKILL.md 格式與 ClawHub 安裝流程 | pdf-form-filler |
js-tool-plugin | JavaScript 編寫的橋接插件 | 驗(yàn)證 JS 插件加載與工具導(dǎo)出 | @example/js-plugin |
ts-jiti-plugin | TypeScript + JITI 轉(zhuǎn)譯的插件 | 驗(yàn)證 TypeScript 轉(zhuǎn)譯與 JITI 集成 | @agentseo/openclaw-plugin |
config-schema-plugin | 配置校驗(yàn)負(fù)面場景 | 驗(yàn)證無效配置被檢測并返回診斷碼 | 缺失必填字段 / 字段類型錯誤 |
unsupported-surface-plugin | 不支持功能的負(fù)面場景 | 驗(yàn)證不支持的 API 被顯式拒絕 | 注冊 CLI 命令 / 調(diào)用受限 API |
正面與負(fù)面場景
正面場景(expectedStatus = "compatible")
- 驗(yàn)證插件/技能能夠成功加載;
- 驗(yàn)證聲明的工具和技能均正確暴露到 Gateway;
- 使用
expectedToolNames與expectedSkillNames進(jìn)行斷言; - 任何缺失或多余的工具/技能均判定為失敗。
負(fù)面場景(expectedStatus = "incompatible")
- 驗(yàn)證錯誤能被系統(tǒng)顯式檢測并拒絕,而非"部分加載"或靜默忽略;
- 使用
expectedDiagnosticCodes斷言錯誤碼; - 典型診斷碼:
| 診斷碼 | 含義 |
|---|---|
config_one_of_mismatch | 配置不滿足 oneOf 約束 |
unsupported_cli_registration | 插件嘗試注冊不支持的 CLI 命令 |
unsupported_surface_call | 調(diào)用了未公開/受限的 API 表面 |
schema_required_missing | 必填字段缺失 |
使用方式
CLI 查詢
OpenClaw CLI 提供 compatibility catalog 子命令,便于本地查詢與腳本消費(fèi):
# 查看所有條目 openclaw compatibility catalog # 按狀態(tài)過濾 openclaw compatibility catalog --status compatible openclaw compatibility catalog --status incompatible # 按類型與分類過濾 openclaw compatibility catalog --kind npm-plugin --category ts-jiti-plugin # JSON 格式輸出(適用于程序化消費(fèi)) openclaw compatibility catalog --json # 簡寫形式 openclaw compat catalog
REST API
Gateway 通過 /api/integration/compatibility 路由族對外暴露:
GET /api/integration/compatibility/catalog GET /api/integration/compatibility/catalog?compatibilityStatus=compatible GET /api/integration/compatibility/catalog?kind=npm-plugin&category=ts-jiti-plugin GET /api/integration/compatibility/export
/catalog端點(diǎn)支持compatibilityStatus、kind、category三個查詢參數(shù)過濾;/export端點(diǎn)返回完整的兼容性報(bào)告,包含運(yùn)行時模式(AOT / JIT)、安全態(tài)勢(Security Posture)、通道就緒狀態(tài)(Channel Readiness)等額外維度,適合在 CI 中歸檔或?qū)油獠块T戶。
自動化測試
測試類 PublicCompatibilitySmokeTests 在運(yùn)行時自動讀取清單并迭代執(zhí)行:
- 觸發(fā)開關(guān):環(huán)境變量
OPENCLAW_PUBLIC_SMOKE=1必須設(shè)置,否則測試整體跳過; - ClawHub 技能:通過
npx clawhub安裝并校驗(yàn)expectedRelativePath文件存在; compatible插件:執(zhí)行安裝、加載、然后斷言expectedToolNames/expectedSkillNames完整暴露;incompatible插件:執(zhí)行安裝、加載,斷言加載失敗且診斷碼集合至少包含expectedDiagnosticCodes中的全部條目。
CI/CD 集成
在 GitHub Actions 中,public-compatibility-smoke 作業(yè)承擔(dān)清單的回歸驗(yàn)證:
- 觸發(fā)條件:定時執(zhí)行(
schedule)或手動派發(fā)(workflow_dispatch); - 依賴環(huán)境:Node.js 20(用于
npm與clawhub命令鏈路); - 執(zhí)行流程:
dotnet test+--filter Category=PublicSmoke; - 報(bào)告產(chǎn)物:生成 TRX 格式測試報(bào)告并作為 artifact 上傳;
- 失敗語義:任意條目斷言失敗即視為整個作業(yè)失敗,需在合并前修復(fù)。
如何貢獻(xiàn)新條目
添加新技能
{
"id": "my-new-skill",
"category": "pure-skill",
"kind": "clawhub-skill",
"slug": "my-new-skill",
"version": "1.0.0",
"expectedRelativePath": "skills/my-new-skill/SKILL.md"
}添加兼容插件(正面場景)
{
"id": "my-plugin",
"category": "js-tool-plugin",
"kind": "npm-plugin",
"spec": "@my-org/openclaw-plugin@1.0.0",
"packageName": "@my-org/openclaw-plugin",
"pluginId": "my-plugin",
"expectedStatus": "compatible",
"configJson": "{\"apiKey\":\"test_key\"}",
"expectedToolNames": ["my_tool_1", "my_tool_2"],
"expectedSkillNames": ["my-skill"]
}添加不兼容場景(負(fù)面場景)
{
"id": "broken-plugin-example",
"category": "config-schema-plugin",
"kind": "npm-plugin",
"spec": "@my-org/broken-plugin@1.0.0",
"packageName": "@my-org/broken-plugin",
"pluginId": "broken-plugin",
"expectedStatus": "incompatible",
"configJson": "{\"wrongField\": 123}",
"expectedDiagnosticCodes": ["config_one_of_mismatch"]
}貢獻(xiàn)流程
- 在
compat/public-smoke.json的entries數(shù)組末尾追加條目; - 確保必填字段完整:
- NPM 插件:必須包含
expectedStatus、spec、packageName、pluginId; - 技能:必須包含
slug、version、expectedRelativePath; - 本地設(shè)置
OPENCLAW_PUBLIC_SMOKE=1并執(zhí)行:
- NPM 插件:必須包含
dotnet test OpenClaw.Net.slnx --filter Category=PublicSmoke
- 如引入了新的
category或kind,需同步: - 升級清單頂層
version字段; - 更新
PublicCompatibilityCatalog中的枚舉與轉(zhuǎn)換邏輯; - 更新本文檔的場景分類詳解表格(文中有介紹)。
數(shù)據(jù)轉(zhuǎn)換邏輯
清單在運(yùn)行時通過 PublicCompatibilityCatalog.CreateCatalog() 轉(zhuǎn)換為富目錄(Rich Catalog),以便 CLI 與 REST API 直接消費(fèi)。核心映射規(guī)則如下:
| 源字段 | 生成字段 | 轉(zhuǎn)換邏輯 |
|---|---|---|
slug / packageName / pluginId / id | Subject | 按優(yōu)先級取第一個非空值 |
kind + spec / slug | InstallCommand | 技能:openclaw clawhub install {slug}插件:openclaw plugins install {spec} --dry-run |
category + expectedStatus | Summary | 根據(jù)場景性質(zhì)生成人類可讀描述 |
expectedStatus | ScenarioType | compatible → "positive"incompatible → "negative" |
| 多字段組合 | Guidance[] | 上下文相關(guān)的操作建議(如"配置 schema 錯誤,請參考插件文檔") |
與 NativeAOT 的關(guān)系
OpenClaw.NET 的 NativeAOT 約束直接影響清單的加載與序列化方式:
- 嵌入資源:
compat/public-smoke.json在.csproj中以<EmbeddedResource>方式編譯進(jìn)OpenClaw.Core.dll,運(yùn)行時無任何文件 I/O; - JSON 源生成:使用
CoreJsonContext(基于JsonSerializerContext的 source generator)反序列化清單,完全規(guī)避反射; - 橋接協(xié)議:插件通過
plugin-bridge.mjs走 JSON-RPC over stdio,避免在主進(jìn)程中動態(tài)加載托管程序集; - AOT/JIT 一致性:清單驅(qū)動的煙霧測試同時覆蓋 AOT 與 JIT 兩種發(fā)布模式,確保行為一致。
故障排查
| 癥狀 | 可能原因 | 解決方案 |
|---|---|---|
| 測試報(bào)告 "plugin failed to load" | configJson 格式錯誤或字段類型不匹配 | 檢查 JSON 是否符合插件實(shí)際 schema,使用 --dry-run 先行驗(yàn)證 |
| "expected tool not found" | 插件未聲明該工具或工具名拼寫錯誤 | 校對 expectedToolNames 與插件運(yùn)行時實(shí)際暴露的工具名 |
| 編譯期錯誤 "npm-plugin must declare expectedStatus" | 新條目缺少 expectedStatus 字段 | 明確指定 "compatible" 或 "incompatible" |
| 煙霧測試整體未運(yùn)行 | 環(huán)境變量未設(shè)置 | 設(shè)置 OPENCLAW_PUBLIC_SMOKE=1 后重試 |
clawhub 安裝失敗 | Node.js 未安裝或版本過低 | 安裝 Node.js 20+ 并確保 npx 可用 |
expectedDiagnosticCodes 不匹配 | 錯誤碼命名變更或新增 | 查閱最新診斷碼列表,必要時同步更新清單 |
| AOT 模式啟動報(bào)缺少元數(shù)據(jù) | 新增字段未在 CoreJsonContext 中聲明 | 在源生成上下文中添加對應(yīng)類型 |
到此這篇關(guān)于OpenClaw.NET 兼容性目錄指南(Compatibility Catalog)的文章就介紹到這了,更多相關(guān)OpenClaw.NET 兼容性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章

OpenClaw開發(fā)自定義Skills的實(shí)戰(zhàn)指南
為 OpenClaw開發(fā)自定義 Skills,就像是給它裝上能按你心意干活的新“手腳”,這個過程比你想象的要簡單,只要遵循一定的規(guī)范和流程,即便是新手也能在短時間內(nèi)開發(fā)出第一個2026-05-20
OpenClaw Gateway 卡死假死問題完整診斷與預(yù)防方案解析
這篇文章給大家介紹OpenClaw Gateway 卡死假死問題完整診斷與預(yù)防方案解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-05-20
在2026年的AI智能體浪潮中,OpenClaw無疑是GitHub上最受關(guān)注的開源項(xiàng)目之一,GitHub星標(biāo)已超過30.9萬顆,登頂多個開源榜單,本文給大家介紹了本地部署OpenClaw(龍蝦)的全攻2026-05-19
本文介紹了OpenClawSkills的概念、獲取途徑、安裝方式、推薦Skills及配置方法,通過ClawHub官網(wǎng)、GitHub倉庫等獲取Skills,使用ClawHubCLI或OpenClawCLI安裝,文章還提供了安2026-05-18
這篇文章給大家介紹OpenClaw修改默認(rèn)端口的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2026-05-18
openclaw允許公網(wǎng)和內(nèi)網(wǎng)訪問的實(shí)現(xiàn)
OpenClaw網(wǎng)關(guān)默認(rèn)僅監(jiān)聽本地回環(huán)地址,通過檢查防火墻規(guī)則、網(wǎng)關(guān)狀態(tài)和配置,發(fā)現(xiàn)服務(wù)僅在本地運(yùn)行,下面就來詳細(xì)的介紹一下openclaw允許公網(wǎng)和內(nèi)網(wǎng)訪問的實(shí)現(xiàn),感興趣的可以2026-05-18
openclaw環(huán)境搭建、模型配置與 WebUI 遠(yuǎn)程訪問
文章詳細(xì)介紹了使用OpenClaw框架搭建自主智能體的過程,包括環(huán)境初始化、模型接入配置、技能庫設(shè)置、服務(wù)啟動等WebUI遠(yuǎn)程訪問等,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或2026-05-15
云端 OpenClaw 遠(yuǎn)程執(zhí)行本地進(jìn)程原理機(jī)制詳解:Gateway、approvals 與 system.run 到底
這篇文章給大家介紹云端 OpenClaw 遠(yuǎn)程執(zhí)行本地進(jìn)程原理機(jī)制詳解:Gateway、approvals 與 system.run 到底誰在判定、誰在執(zhí)行,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨2026-05-15
OpenClaw實(shí)操指南之6個最值得優(yōu)先安裝的基礎(chǔ)元技能Skill
本文介紹了OpenClaw系統(tǒng)中6個最值得優(yōu)先安裝的基礎(chǔ)元技能,這些技能專注于管理和擴(kuò)展OpenClaw本身的功能,包括find-skills,skill-creator,mcp-builder,skill-vetter,web2026-05-14
利用OpenClaw為Android開發(fā)電腦瘦身的詳細(xì)步驟
開發(fā)久了的電腦,Android 項(xiàng)目越堆越多,compileSdk 五花八門,NDK 版本滿天飛,想清理又懶得一個個翻?讓 AI 助手一句話搞定,所以本文給大家介紹了如何利用OpenClaw為Andro2026-05-14









