最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenClaw .NET兼容性目錄指南(CompatibilityCatalog)

  發(fā)布時間:2026-05-22 08:53:34   作者:張善友   我要評論
這篇文章給大家介紹OpenClaw.NET兼容性目錄指南(CompatibilityCatalog),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

概述

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"]
    }
  ]
}

條目字段說明

字段按用途分為三組:通用字段、技能專用字段、插件專用字段

通用字段(所有條目必填)

字段類型說明
idstring場景唯一標(biāo)識,須在 entries 中保持唯一
categorystring場景分類:pure-skill、js-tool-plugin、ts-jiti-plugin、config-schema-pluginunsupported-surface-plugin
kindstring資源類型:clawhub-skill 或 npm-plugin

技能專用字段(kind == "clawhub-skill"

字段類型必填說明
slugstring?ClawHub 中的技能標(biāo)識符
versionstring?技能的 SemVer 版本
expectedRelativePathstring?安裝后的預(yù)期相對路徑,如 skills/my-skill/SKILL.md

插件專用字段(kind == "npm-plugin"

字段類型必填說明
specstring?NPM 包規(guī)范,如 @agentseo/openclaw-plugin@0.1.4
packageNamestring?NPM 包名
pluginIdstring?插件唯一標(biāo)識
expectedStatusstring?預(yù)期兼容性狀態(tài):compatible 或 incompatible
configJsonstring??JSON 字符串形式的示例配置
installExtraPackagesstring[]??需要額外安裝的依賴包列表
expectedToolNamesstring[]??預(yù)期暴露的工具名稱(僅 compatible 場景)
expectedSkillNamesstring[]??預(yù)期提供的技能名稱(僅 compatible 場景)
expectedDiagnosticCodesstring[]??預(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-pluginJavaScript 編寫的橋接插件驗(yàn)證 JS 插件加載與工具導(dǎo)出@example/js-plugin
ts-jiti-pluginTypeScript + 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)支持 compatibilityStatuskind、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、specpackageName、pluginId;
    • 技能:必須包含 slugversion、expectedRelativePath
    • 本地設(shè)置 OPENCLAW_PUBLIC_SMOKE=1 并執(zhí)行:
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 / idSubject按優(yōu)先級取第一個非空值
kind + spec / slugInstallCommand技能:openclaw clawhub install {slug}插件:openclaw plugins install {spec} --dry-run
category + expectedStatusSummary根據(jù)場景性質(zhì)生成人類可讀描述
expectedStatusScenarioTypecompatible → "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)文章

最新評論

盱眙县| 福安市| 宿迁市| 乌鲁木齐县| 石泉县| 尉氏县| 淮安市| 克拉玛依市| 城步| 澄江县| 景德镇市| 丽江市| 东港市| 衡东县| 栖霞市| 大邑县| 故城县| 营口市| 太湖县| 合山市| 桓仁| 巴林左旗| 玛多县| 天台县| 黄大仙区| 克山县| 平顺县| 珲春市| 叙永县| 长沙县| 庐江县| 马公市| 府谷县| 岚皋县| 丹江口市| 寿光市| 徐汇区| 旺苍县| 高安市| 张北县| 安吉县|