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

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









