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", "id": "openclaw-kitchen-sink-fixture",
"name": "OpenClaw Kitchen Sink", "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.", "description": "Generated kitchen-sink fixture for OpenClaw plugin API surface 2026.5.2.",
"enabledByDefault": false, "enabledByDefault": false,
"kind": [ "kind": [
@ -57,6 +57,42 @@
"hook" "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": { "setup": {
"providers": [ "providers": [
{ {

4
package-lock.json generated
View File

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

View File

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

View File

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

View File

@ -215,6 +215,29 @@ function renderManifest({ manifestContracts, packageVersion }) {
onCommands: ["kitchen", "kitchen-sink"], onCommands: ["kitchen", "kitchen-sink"],
onCapabilities: ["provider", "channel", "tool", "hook"], 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: { setup: {
providers: [ providers: [
{ id: "kitchen-sink-provider", authMethods: ["none"], envVars: [] }, { id: "kitchen-sink-provider", authMethods: ["none"], envVars: [] },
@ -256,7 +279,7 @@ function renderPackageJson({ packageVersion }) {
clawhubSpec: "clawhub:@openclaw/kitchen-sink", clawhubSpec: "clawhub:@openclaw/kitchen-sink",
npmSpec: "@openclaw/kitchen-sink", npmSpec: "@openclaw/kitchen-sink",
defaultChoice: "clawhub", defaultChoice: "clawhub",
minHostVersion: packageVersion, minHostVersion: `>=${packageVersion}`,
}; };
packageJson.openclaw.release = { packageJson.openclaw.release = {
...(packageJson.openclaw.release ?? {}), ...(packageJson.openclaw.release ?? {}),

View File

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

View File

@ -5,28 +5,44 @@ export const DEFAULT_KITCHEN_SINK_PERSONALITY = "full";
export const KITCHEN_SINK_EXPECTED_DIAGNOSTICS = { export const KITCHEN_SINK_EXPECTED_DIAGNOSTICS = {
full: [ full: [
"only bundled plugins can register agent tool result middleware", "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', 'agent harness "kitchen-sink-agent-harness" registration missing required runtime methods',
'channel "kitchen-sink-channel-probe" registration missing required config helpers', 'channel "kitchen-sink-channel-probe" registration missing required config helpers',
"cli registration missing explicit commands metadata", "cli registration missing explicit commands metadata",
"only bundled plugins can register Codex app-server extension factories", "only bundled plugins can register Codex app-server extension factories",
'compaction provider "kitchen-sink-compaction-provider" registration missing summarize', 'compaction provider "kitchen-sink-compaction-provider" registration missing summarize',
"context engine registration missing id", "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", "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", "plugin must own memory slot or declare contracts.memoryEmbeddingProviders for adapter: kitchen-sink-memory-embedding-provider",
"memory prompt supplement registration missing builder", "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: [], conformance: [],
adversarial: [ adversarial: [
"only bundled plugins can register agent tool result middleware", "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', 'agent harness "kitchen-sink-agent-harness" registration missing required runtime methods',
'channel "kitchen-sink-channel-probe" registration missing required config helpers', 'channel "kitchen-sink-channel-probe" registration missing required config helpers',
"cli registration missing explicit commands metadata", "cli registration missing explicit commands metadata",
"only bundled plugins can register Codex app-server extension factories", "only bundled plugins can register Codex app-server extension factories",
'compaction provider "kitchen-sink-compaction-provider" registration missing summarize', 'compaction provider "kitchen-sink-compaction-provider" registration missing summarize',
"context engine registration missing id", "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", "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", "plugin must own memory slot or declare contracts.memoryEmbeddingProviders for adapter: kitchen-sink-memory-embedding-provider",
"memory prompt supplement registration missing builder", "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",
], ],
}; };