fix: publish valid install metadata (#15)

This commit is contained in:
Vincent Koc 2026-05-02 18:22:01 -07:00 committed by GitHub
parent 02370e2338
commit 7f92e87bfc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 89 additions and 9 deletions

View File

@ -1,7 +1,7 @@
{
"id": "openclaw-kitchen-sink-fixture",
"name": "OpenClaw Kitchen Sink",
"version": "0.2.4",
"version": "0.2.5",
"description": "Generated kitchen-sink fixture for OpenClaw plugin API surface 2026.5.2.",
"enabledByDefault": false,
"kind": [
@ -57,6 +57,42 @@
"hook"
]
},
"channelConfigs": {
"kitchen-sink-channel": {
"schema": {
"type": "object",
"additionalProperties": false,
"properties": {
"configured": {
"type": "boolean",
"default": true
},
"disabled": {
"type": "boolean",
"default": false
},
"enabled": {
"type": "boolean",
"default": true
},
"token": {
"type": "string"
}
}
},
"uiHints": {
"token": {
"sensitive": true
}
},
"label": "Kitchen Sink",
"description": "Credential-free channel fixture for deterministic Kitchen Sink conversations.",
"commands": {
"nativeCommandsAutoEnabled": true,
"nativeSkillsAutoEnabled": true
}
}
},
"setup": {
"providers": [
{

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{
"name": "@openclaw/kitchen-sink",
"version": "0.2.4",
"version": "0.2.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/kitchen-sink",
"version": "0.2.4",
"version": "0.2.5",
"license": "MIT",
"dependencies": {
"openclaw": "2026.5.2"

View File

@ -1,6 +1,6 @@
{
"name": "@openclaw/kitchen-sink",
"version": "0.2.4",
"version": "0.2.5",
"private": false,
"description": "Credential-free kitchen-sink OpenClaw plugin fixture covering the public plugin API surface.",
"type": "module",
@ -50,7 +50,7 @@
"clawhubSpec": "clawhub:@openclaw/kitchen-sink",
"npmSpec": "@openclaw/kitchen-sink",
"defaultChoice": "clawhub",
"minHostVersion": "2026.5.2"
"minHostVersion": ">=2026.5.2"
},
"release": {
"publishToClawHub": true,

View File

@ -51,6 +51,7 @@ const requiredFiles = [
const missingFiles = requiredFiles.filter((file) => !files.has(file));
const packageJson = JSON.parse(fs.readFileSync("package.json", "utf8"));
const pluginManifest = JSON.parse(fs.readFileSync("openclaw.plugin.json", "utf8"));
const issues = [];
function sameStringArray(actual, expected) {
@ -109,8 +110,12 @@ if (packageJson.openclaw?.install?.npmSpec !== "@openclaw/kitchen-sink") {
if (packageJson.openclaw?.install?.defaultChoice !== "clawhub") {
issues.push('openclaw.install.defaultChoice must be "clawhub"');
}
if (packageJson.openclaw?.install?.minHostVersion !== buildOpenClawVersion) {
issues.push("openclaw.install.minHostVersion must match openclaw.build.openclawVersion");
if (packageJson.openclaw?.install?.minHostVersion !== `>=${buildOpenClawVersion}`) {
issues.push("openclaw.install.minHostVersion must be a semver floor for openclaw.build.openclawVersion");
}
const kitchenSinkChannelConfig = pluginManifest.channelConfigs?.["kitchen-sink-channel"];
if (!kitchenSinkChannelConfig?.schema || kitchenSinkChannelConfig.schema.type !== "object") {
issues.push("openclaw.plugin.json must declare channelConfigs.kitchen-sink-channel.schema");
}
if (packageJson.openclaw?.release?.publishToClawHub !== true) {
issues.push("openclaw.release.publishToClawHub must be true");

View File

@ -215,6 +215,29 @@ function renderManifest({ manifestContracts, packageVersion }) {
onCommands: ["kitchen", "kitchen-sink"],
onCapabilities: ["provider", "channel", "tool", "hook"],
},
channelConfigs: {
"kitchen-sink-channel": {
schema: {
type: "object",
additionalProperties: false,
properties: {
configured: { type: "boolean", default: true },
disabled: { type: "boolean", default: false },
enabled: { type: "boolean", default: true },
token: { type: "string" },
},
},
uiHints: {
token: { sensitive: true },
},
label: "Kitchen Sink",
description: "Credential-free channel fixture for deterministic Kitchen Sink conversations.",
commands: {
nativeCommandsAutoEnabled: true,
nativeSkillsAutoEnabled: true,
},
},
},
setup: {
providers: [
{ id: "kitchen-sink-provider", authMethods: ["none"], envVars: [] },
@ -256,7 +279,7 @@ function renderPackageJson({ packageVersion }) {
clawhubSpec: "clawhub:@openclaw/kitchen-sink",
npmSpec: "@openclaw/kitchen-sink",
defaultChoice: "clawhub",
minHostVersion: packageVersion,
minHostVersion: `>=${packageVersion}`,
};
packageJson.openclaw.release = {
...(packageJson.openclaw.release ?? {}),

View File

@ -10,7 +10,7 @@ import {
export const plugin = {
id: PLUGIN_ID,
name: "OpenClaw Kitchen Sink",
version: "0.2.4",
version: "0.2.5",
description: "Credential-free fixture covering OpenClaw plugin API seams.",
expectedDiagnostics: KITCHEN_SINK_EXPECTED_DIAGNOSTICS,
register(api) {

View File

@ -5,28 +5,44 @@ export const DEFAULT_KITCHEN_SINK_PERSONALITY = "full";
export const KITCHEN_SINK_EXPECTED_DIAGNOSTICS = {
full: [
"only bundled plugins can register agent tool result middleware",
"agent event subscription registration requires id and handle",
'agent harness "kitchen-sink-agent-harness" registration missing required runtime methods',
'channel "kitchen-sink-channel-probe" registration missing required config helpers',
"cli registration missing explicit commands metadata",
"only bundled plugins can register Codex app-server extension factories",
'compaction provider "kitchen-sink-compaction-provider" registration missing summarize',
"context engine registration missing id",
"control UI descriptor registration requires id, surface, label, and valid optional fields",
"http route registration missing or invalid auth: /kitchen-sink/http-route",
"node invoke policy registration missing commands",
"only bundled plugins can register trusted tool policies",
"plugin must declare contracts.tools for: kitchen-sink-tool",
"plugin must own memory slot or declare contracts.memoryEmbeddingProviders for adapter: kitchen-sink-memory-embedding-provider",
"memory prompt supplement registration missing builder",
"session extension registration requires namespace and description",
"session scheduler job registration requires unique id, sessionKey, and kind",
"tool metadata registration missing toolName",
],
conformance: [],
adversarial: [
"only bundled plugins can register agent tool result middleware",
"agent event subscription registration requires id and handle",
'agent harness "kitchen-sink-agent-harness" registration missing required runtime methods',
'channel "kitchen-sink-channel-probe" registration missing required config helpers',
"cli registration missing explicit commands metadata",
"only bundled plugins can register Codex app-server extension factories",
'compaction provider "kitchen-sink-compaction-provider" registration missing summarize',
"context engine registration missing id",
"control UI descriptor registration requires id, surface, label, and valid optional fields",
"http route registration missing or invalid auth: /kitchen-sink/http-route",
"node invoke policy registration missing commands",
"only bundled plugins can register trusted tool policies",
"plugin must declare contracts.tools for: kitchen-sink-tool",
"plugin must own memory slot or declare contracts.memoryEmbeddingProviders for adapter: kitchen-sink-memory-embedding-provider",
"memory prompt supplement registration missing builder",
"session extension registration requires namespace and description",
"session scheduler job registration requires unique id, sessionKey, and kind",
"tool metadata registration missing toolName",
],
};