fix: publish valid install metadata (#15)
This commit is contained in:
parent
02370e2338
commit
7f92e87bfc
@ -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
4
package-lock.json
generated
@ -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"
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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 ?? {}),
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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",
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user