Create OpenClaw kitchen sink plugin

This commit is contained in:
Patrick Erichsen 2026-04-26 19:24:23 -07:00
commit 91f253e89b
16 changed files with 7648 additions and 0 deletions

11
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 5
groups:
openclaw-sdk:
patterns:
- "openclaw"

23
.github/workflows/check.yml vendored Normal file
View File

@ -0,0 +1,23 @@
name: Check
on:
pull_request:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm test

View File

@ -0,0 +1,44 @@
name: Update OpenClaw SDK Surface
on:
schedule:
- cron: "17 9 * * *"
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm install openclaw@latest --save-exact --package-lock
- run: npm run sync:surface
- run: npm test
- name: Open pull request
env:
GH_TOKEN: ${{ github.token }}
run: |
if git diff --quiet package.json package-lock.json openclaw.plugin.json src/generated-hooks.js src/generated-registrars.js src/generated-sdk-imports.ts; then
echo "OpenClaw SDK surface is already current."
exit 0
fi
version="$(node -p "require('./node_modules/openclaw/package.json').version")"
branch="automation/openclaw-sdk-${version}"
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git checkout -B "$branch"
git add package.json package-lock.json openclaw.plugin.json src/generated-hooks.js src/generated-registrars.js src/generated-sdk-imports.ts
git commit -m "Update OpenClaw SDK surface to ${version}"
git push --force-with-lease origin "$branch"
gh pr create \
--base main \
--head "$branch" \
--title "Update OpenClaw SDK surface to ${version}" \
--body "Automated update of the pinned OpenClaw SDK package and generated kitchen-sink API surface."

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
node_modules/
npm-debug.log*
*.tgz
.DS_Store

33
README.md Normal file
View File

@ -0,0 +1,33 @@
# OpenClaw Kitchen Sink Plugin
Credential-free OpenClaw plugin fixture that intentionally touches the public
plugin API surface.
This repo is both:
- a readable example for plugin authors
- a dummy compatibility fixture for Crabpot and plugin-inspector
The runtime handlers are no-op probes. They should not call external services,
read secrets, spawn processes, or require live credentials.
## API Surface Sync
The generated files under `src/generated-*` are derived from the installed
`openclaw` package:
```sh
npm install
npm run sync:surface
npm test
```
When Dependabot bumps `openclaw`, `npm test` verifies that this fixture still
covers every discovered hook, registrar, manifest contract key, and plugin SDK
export path for that package version.
## Why Generated Files Exist
Crabpot and plugin-inspector rely on static source evidence. The generated files
therefore contain explicit calls such as `api.registerTool(...)` and
`api.on("before_prompt_build", ...)` instead of dynamic loops.

123
openclaw.plugin.json Normal file
View File

@ -0,0 +1,123 @@
{
"id": "openclaw-kitchen-sink",
"name": "OpenClaw Kitchen Sink",
"version": "0.1.0",
"description": "Generated kitchen-sink fixture for OpenClaw plugin API surface 2026.4.24.",
"enabledByDefault": false,
"kind": [
"tool",
"hook",
"channel",
"provider"
],
"channels": [
"kitchen-sink-channel"
],
"providers": [
"kitchen-sink-provider"
],
"cliBackends": [
"kitchen-sink-cli-backend"
],
"commandAliases": [
{
"command": "kitchen-sink",
"pluginId": "openclaw-kitchen-sink"
}
],
"activation": {
"onProviders": [
"kitchen-sink-provider"
],
"onChannels": [
"kitchen-sink-channel"
],
"onCommands": [
"kitchen-sink"
],
"onCapabilities": [
"provider",
"channel",
"tool",
"hook"
]
},
"setup": {
"providers": [
{
"id": "kitchen-sink-provider",
"authMethods": [
"none"
],
"envVars": []
}
],
"cliBackends": [
"kitchen-sink-cli-backend"
],
"configMigrations": [
"kitchen-sink-config-migration"
],
"requiresRuntime": false
},
"contracts": {
"agentToolResultMiddleware": [
"kitchen-sink-agent-tool-result-middleware"
],
"documentExtractors": [
"kitchen-sink-document-extractors"
],
"embeddedExtensionFactories": [
"kitchen-sink-embedded-extension-factories"
],
"externalAuthProviders": [
"kitchen-sink-external-auth-providers"
],
"imageGenerationProviders": [
"kitchen-sink-image-generation-providers"
],
"mediaUnderstandingProviders": [
"kitchen-sink-media-understanding-providers"
],
"memoryEmbeddingProviders": [
"kitchen-sink-memory-embedding-providers"
],
"musicGenerationProviders": [
"kitchen-sink-music-generation-providers"
],
"realtimeTranscriptionProviders": [
"kitchen-sink-realtime-transcription-providers"
],
"realtimeVoiceProviders": [
"kitchen-sink-realtime-voice-providers"
],
"speechProviders": [
"kitchen-sink-speech-providers"
],
"tools": [
"kitchen-sink-tools"
],
"videoGenerationProviders": [
"kitchen-sink-video-generation-providers"
],
"webContentExtractors": [
"kitchen-sink-web-content-extractors"
],
"webFetchProviders": [
"kitchen-sink-web-fetch-providers"
],
"webSearchProviders": [
"kitchen-sink-web-search-providers"
]
},
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"default": false
}
}
}
}

6278
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

45
package.json Normal file
View File

@ -0,0 +1,45 @@
{
"name": "openclaw-kitchen-sink-plugin",
"version": "0.1.0",
"private": false,
"description": "Credential-free kitchen-sink OpenClaw plugin fixture covering the public plugin API surface.",
"type": "module",
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/Patrick-Erichsen/openclaw-kitchen-sink-plugin.git"
},
"files": [
"src/",
"openclaw.plugin.json",
"README.md"
],
"exports": {
".": "./src/index.js",
"./runtime": "./src/index.js",
"./setup": "./src/setup.js"
},
"openclaw": {
"extensions": [
"./src/index.js"
],
"runtimeExtensions": [
"./src/index.js"
],
"setupEntry": "./src/setup.js",
"compat": {
"pluginApi": "2026.4"
}
},
"scripts": {
"check": "npm run sync:surface -- --check && node scripts/check-sdk-surface.mjs",
"sync:surface": "node scripts/sync-surface.mjs",
"test": "npm run check"
},
"dependencies": {
"openclaw": "2026.4.24"
},
"engines": {
"node": ">=22"
}
}

View File

@ -0,0 +1,48 @@
import { readFileSync } from "node:fs";
import path from "node:path";
import { readOpenClawSurface } from "./openclaw-surface.mjs";
const rootDir = path.resolve(import.meta.dirname, "..");
const surface = readOpenClawSurface();
const hooksSource = read("src/generated-hooks.js");
const registrarsSource = read("src/generated-registrars.js");
const sdkImportsSource = read("src/generated-sdk-imports.ts");
const manifest = JSON.parse(read("openclaw.plugin.json"));
const errors = [];
for (const hook of surface.hooks) {
if (!hooksSource.includes(`api.on("${hook}"`)) {
errors.push(`missing hook coverage: ${hook}`);
}
}
for (const registrar of surface.registrars) {
if (!registrarsSource.includes(`api.${registrar}(`)) {
errors.push(`missing registrar coverage: ${registrar}`);
}
}
for (const specifier of surface.pluginSdkExports) {
if (!sdkImportsSource.includes(`"${specifier}"`)) {
errors.push(`missing SDK import coverage: ${specifier}`);
}
}
for (const contract of surface.manifestContracts) {
if (!Object.hasOwn(manifest.contracts ?? {}, contract)) {
errors.push(`missing manifest contract coverage: ${contract}`);
}
}
if (errors.length > 0) {
throw new Error(errors.join("\n"));
}
console.log(
`OpenClaw ${surface.packageVersion} surface covered: ${surface.registrars.length} registrars, ${surface.hooks.length} hooks, ${surface.manifestContracts.length} manifest contracts, ${surface.pluginSdkExports.length} SDK exports`,
);
function read(relativePath) {
return readFileSync(path.join(rootDir, relativePath), "utf8");
}

View File

@ -0,0 +1,86 @@
import { existsSync, readFileSync } from "node:fs";
import path from "node:path";
import { createRequire } from "node:module";
const require = createRequire(import.meta.url);
export function readOpenClawSurface() {
const packageEntryPath = require.resolve("openclaw");
const packageRoot = findPackageRoot(packageEntryPath);
const packageJsonPath = path.join(packageRoot, "package.json");
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf8"));
const pluginSdkExports = Object.keys(packageJson.exports ?? {})
.filter((specifier) => specifier === "./plugin-sdk" || specifier.startsWith("./plugin-sdk/"))
.map((specifier) => `openclaw/${specifier.slice(2)}`)
.sort();
const apiBuilderPath = firstExistingPath([
path.join(packageRoot, "dist/plugin-sdk/src/plugins/api-builder.d.ts"),
path.join(packageRoot, "src/plugins/api-builder.ts"),
]);
const hookTypesPath = firstExistingPath([
path.join(packageRoot, "dist/plugin-sdk/src/plugins/hook-types.d.ts"),
path.join(packageRoot, "src/plugins/hook-types.ts"),
]);
const manifestPath = firstExistingPath([
path.join(packageRoot, "dist/plugin-sdk/src/plugins/manifest.d.ts"),
path.join(packageRoot, "src/plugins/manifest.ts"),
]);
const apiBuilderSource = readOptional(apiBuilderPath);
const hookTypesSource = readOptional(hookTypesPath);
const manifestSource = readOptional(manifestPath);
return {
packageJsonPath,
packageVersion: packageJson.version,
pluginSdkExports,
registrars: unique([...apiBuilderSource.matchAll(/\b(register[A-Za-z0-9]+)\b/g)].map((match) => match[1])).sort(),
hooks: parseHookNames(hookTypesSource),
manifestContracts: parseTypeFields(manifestSource, "PluginManifestContracts"),
};
}
function findPackageRoot(entryPath) {
let current = path.dirname(entryPath);
while (current !== path.dirname(current)) {
const candidate = path.join(current, "package.json");
if (existsSync(candidate)) {
return current;
}
current = path.dirname(current);
}
throw new Error(`Could not find openclaw package root from ${entryPath}`);
}
function firstExistingPath(paths) {
return paths.find((item) => existsSync(item)) ?? null;
}
function readOptional(filePath) {
return filePath ? readFileSync(filePath, "utf8") : "";
}
function parseHookNames(source) {
const arrayMatch = source.match(/PLUGIN_HOOK_NAMES[^=]*=\s*\[([\s\S]*?)\]/);
if (arrayMatch) {
return unique([...arrayMatch[1].matchAll(/["'`]([a-z0-9_:-]+)["'`]/g)].map((match) => match[1])).sort();
}
const unionMatch = source.match(/type\s+PluginHookName\s*=\s*([\s\S]*?);/);
if (unionMatch) {
return unique([...unionMatch[1].matchAll(/["'`]([a-z0-9_:-]+)["'`]/g)].map((match) => match[1])).sort();
}
return [];
}
function parseTypeFields(source, typeName) {
const match = source.match(new RegExp(`(?:export\\s+)?(?:declare\\s+)?type\\s+${typeName}\\s*=\\s*\\{([\\s\\S]*?)\\n\\};`));
if (!match) {
return [];
}
return unique([...match[1].matchAll(/^\s*([A-Za-z][A-Za-z0-9]*)\??\s*:/gm)].map((field) => field[1])).sort();
}
function unique(values) {
return [...new Set(values)];
}

173
scripts/sync-surface.mjs Normal file
View File

@ -0,0 +1,173 @@
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
import path from "node:path";
import { readOpenClawSurface } from "./openclaw-surface.mjs";
const rootDir = path.resolve(import.meta.dirname, "..");
const check = process.argv.includes("--check");
const surface = readOpenClawSurface();
const generated = new Map([
["src/generated-hooks.js", renderHooks(surface)],
["src/generated-registrars.js", renderRegistrars(surface)],
["src/generated-sdk-imports.ts", renderSdkImports(surface)],
["openclaw.plugin.json", renderManifest(surface)],
]);
const changed = [];
for (const [relativePath, content] of generated) {
const filePath = path.join(rootDir, relativePath);
const current = readIfExists(filePath);
if (current !== content) {
changed.push(relativePath);
if (!check) {
mkdirSync(path.dirname(filePath), { recursive: true });
writeFileSync(filePath, content, "utf8");
}
}
}
if (changed.length > 0 && check) {
throw new Error(`generated OpenClaw surface files are stale:\n${changed.join("\n")}\nRun npm run sync:surface.`);
}
console.log(
`surface ${check ? "checked" : "synced"} for openclaw ${surface.packageVersion}: ${surface.registrars.length} registrars, ${surface.hooks.length} hooks, ${surface.manifestContracts.length} manifest contracts, ${surface.pluginSdkExports.length} SDK exports`,
);
function renderHooks({ hooks, packageVersion }) {
return `${header(packageVersion)}
export function registerAllHooks(api) {
${hooks.map((hook) => ` api.on("${hook}", kitchenSinkHook("${hook}"));`).join("\n")}
}
function kitchenSinkHook(name) {
return async (event, context) => ({
kitchenSink: true,
hook: name,
observedEventKeys: Object.keys(event ?? {}),
observedContextKeys: Object.keys(context ?? {}),
});
}
`;
}
function renderRegistrars({ registrars, packageVersion }) {
return `${header(packageVersion)}
export function registerAllRegistrars(api) {
${registrars.map((registrar) => ` safeRegister("${registrar}", () => api.${registrar}(payloadFor("${registrar}")));`).join("\n")}
}
function safeRegister(name, register) {
try {
register();
} catch (error) {
apiSurfaceProbeFailures.push({ name, message: String(error?.message ?? error) });
}
}
export const apiSurfaceProbeFailures = [];
function payloadFor(name) {
const id = name.replace(/^register/, "").replace(/[A-Z]/g, (letter, index) => (index === 0 ? "" : "-") + letter.toLowerCase()) || "probe";
return {
id: "kitchen-sink-" + id,
name: "kitchen-sink-" + id,
description: "Kitchen-sink no-op probe for " + name + ".",
command: "kitchen-sink-" + id,
path: "/kitchen-sink/" + id,
method: "POST",
inputSchema: objectSchema(),
schema: objectSchema(),
configSchema: objectSchema(),
handler: async () => ({ ok: true, registrar: name }),
run: async () => ({ ok: true, registrar: name }),
execute: async () => ({ ok: true, registrar: name }),
start: async () => ({ ok: true, registrar: name }),
stop: async () => ({ ok: true, registrar: name }),
setup: async () => ({ ok: true, registrar: name }),
migrate: async (value) => value,
transform: async (value) => value,
render: async () => "kitchen-sink memory prompt section",
create: async () => ({ ok: true, registrar: name }),
speak: async () => ({ audio: new Uint8Array(), mimeType: "audio/wav" }),
synthesize: async () => ({ audio: new Uint8Array(), mimeType: "audio/wav" }),
send: async () => ({ ok: true }),
receive: async () => ({ ok: true }),
probe: async () => ({ enabled: false, reason: "kitchen-sink no-op" }),
};
}
function objectSchema() {
return {
type: "object",
additionalProperties: true,
properties: {
input: { type: "string" },
},
};
}
`;
}
function renderSdkImports({ pluginSdkExports, packageVersion }) {
return `${header(packageVersion)}${pluginSdkExports
.map((specifier, index) => `import type * as sdk${index} from "${specifier}";`)
.join("\n")}
export type KitchenSinkSdkImportSurface =
${pluginSdkExports.map((_, index) => ` | typeof sdk${index}`).join("\n")};
`;
}
function renderManifest({ manifestContracts, packageVersion }) {
const contracts = Object.fromEntries(manifestContracts.map((field) => [field, [`kitchen-sink-${kebab(field)}`]]));
const manifest = {
id: "openclaw-kitchen-sink",
name: "OpenClaw Kitchen Sink",
version: "0.1.0",
description: `Generated kitchen-sink fixture for OpenClaw plugin API surface ${packageVersion}.`,
enabledByDefault: false,
kind: ["tool", "hook", "channel", "provider"],
channels: ["kitchen-sink-channel"],
providers: ["kitchen-sink-provider"],
cliBackends: ["kitchen-sink-cli-backend"],
commandAliases: [{ command: "kitchen-sink", pluginId: "openclaw-kitchen-sink" }],
activation: {
onProviders: ["kitchen-sink-provider"],
onChannels: ["kitchen-sink-channel"],
onCommands: ["kitchen-sink"],
onCapabilities: ["provider", "channel", "tool", "hook"],
},
setup: {
providers: [{ id: "kitchen-sink-provider", authMethods: ["none"], envVars: [] }],
cliBackends: ["kitchen-sink-cli-backend"],
configMigrations: ["kitchen-sink-config-migration"],
requiresRuntime: false,
},
contracts,
configSchema: {
type: "object",
additionalProperties: false,
properties: {
enabled: { type: "boolean", default: false },
},
},
};
return `${JSON.stringify(manifest, null, 2)}\n`;
}
function header(packageVersion) {
return `// Generated by scripts/sync-surface.mjs from openclaw ${packageVersion}. Do not edit by hand.\n`;
}
function kebab(value) {
return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^-/, "");
}
function readIfExists(filePath) {
try {
return readFileSync(filePath, "utf8");
} catch {
return null;
}
}

42
src/generated-hooks.js Normal file
View File

@ -0,0 +1,42 @@
// Generated by scripts/sync-surface.mjs from openclaw 2026.4.24. Do not edit by hand.
export function registerAllHooks(api) {
api.on("after_compaction", kitchenSinkHook("after_compaction"));
api.on("after_tool_call", kitchenSinkHook("after_tool_call"));
api.on("agent_end", kitchenSinkHook("agent_end"));
api.on("before_agent_reply", kitchenSinkHook("before_agent_reply"));
api.on("before_agent_start", kitchenSinkHook("before_agent_start"));
api.on("before_compaction", kitchenSinkHook("before_compaction"));
api.on("before_dispatch", kitchenSinkHook("before_dispatch"));
api.on("before_install", kitchenSinkHook("before_install"));
api.on("before_message_write", kitchenSinkHook("before_message_write"));
api.on("before_model_resolve", kitchenSinkHook("before_model_resolve"));
api.on("before_prompt_build", kitchenSinkHook("before_prompt_build"));
api.on("before_reset", kitchenSinkHook("before_reset"));
api.on("before_tool_call", kitchenSinkHook("before_tool_call"));
api.on("gateway_start", kitchenSinkHook("gateway_start"));
api.on("gateway_stop", kitchenSinkHook("gateway_stop"));
api.on("inbound_claim", kitchenSinkHook("inbound_claim"));
api.on("llm_input", kitchenSinkHook("llm_input"));
api.on("llm_output", kitchenSinkHook("llm_output"));
api.on("message_received", kitchenSinkHook("message_received"));
api.on("message_sending", kitchenSinkHook("message_sending"));
api.on("message_sent", kitchenSinkHook("message_sent"));
api.on("reply_dispatch", kitchenSinkHook("reply_dispatch"));
api.on("session_end", kitchenSinkHook("session_end"));
api.on("session_start", kitchenSinkHook("session_start"));
api.on("subagent_delivery_target", kitchenSinkHook("subagent_delivery_target"));
api.on("subagent_ended", kitchenSinkHook("subagent_ended"));
api.on("subagent_spawned", kitchenSinkHook("subagent_spawned"));
api.on("subagent_spawning", kitchenSinkHook("subagent_spawning"));
api.on("tool_result_persist", kitchenSinkHook("tool_result_persist"));
}
function kitchenSinkHook(name) {
return async (event, context) => ({
kitchenSink: true,
hook: name,
observedEventKeys: Object.keys(event ?? {}),
observedContextKeys: Object.keys(context ?? {}),
});
}

View File

@ -0,0 +1,94 @@
// Generated by scripts/sync-surface.mjs from openclaw 2026.4.24. Do not edit by hand.
export function registerAllRegistrars(api) {
safeRegister("registerAgentHarness", () => api.registerAgentHarness(payloadFor("registerAgentHarness")));
safeRegister("registerAgentToolResultMiddleware", () => api.registerAgentToolResultMiddleware(payloadFor("registerAgentToolResultMiddleware")));
safeRegister("registerAutoEnableProbe", () => api.registerAutoEnableProbe(payloadFor("registerAutoEnableProbe")));
safeRegister("registerChannel", () => api.registerChannel(payloadFor("registerChannel")));
safeRegister("registerCli", () => api.registerCli(payloadFor("registerCli")));
safeRegister("registerCliBackend", () => api.registerCliBackend(payloadFor("registerCliBackend")));
safeRegister("registerCodexAppServerExtensionFactory", () => api.registerCodexAppServerExtensionFactory(payloadFor("registerCodexAppServerExtensionFactory")));
safeRegister("registerCommand", () => api.registerCommand(payloadFor("registerCommand")));
safeRegister("registerCompactionProvider", () => api.registerCompactionProvider(payloadFor("registerCompactionProvider")));
safeRegister("registerConfigMigration", () => api.registerConfigMigration(payloadFor("registerConfigMigration")));
safeRegister("registerContextEngine", () => api.registerContextEngine(payloadFor("registerContextEngine")));
safeRegister("registerDetachedTaskRuntime", () => api.registerDetachedTaskRuntime(payloadFor("registerDetachedTaskRuntime")));
safeRegister("registerGatewayDiscoveryService", () => api.registerGatewayDiscoveryService(payloadFor("registerGatewayDiscoveryService")));
safeRegister("registerGatewayMethod", () => api.registerGatewayMethod(payloadFor("registerGatewayMethod")));
safeRegister("registerHook", () => api.registerHook(payloadFor("registerHook")));
safeRegister("registerHttpRoute", () => api.registerHttpRoute(payloadFor("registerHttpRoute")));
safeRegister("registerImageGenerationProvider", () => api.registerImageGenerationProvider(payloadFor("registerImageGenerationProvider")));
safeRegister("registerInteractiveHandler", () => api.registerInteractiveHandler(payloadFor("registerInteractiveHandler")));
safeRegister("registerMediaUnderstandingProvider", () => api.registerMediaUnderstandingProvider(payloadFor("registerMediaUnderstandingProvider")));
safeRegister("registerMemoryCapability", () => api.registerMemoryCapability(payloadFor("registerMemoryCapability")));
safeRegister("registerMemoryCorpusSupplement", () => api.registerMemoryCorpusSupplement(payloadFor("registerMemoryCorpusSupplement")));
safeRegister("registerMemoryEmbeddingProvider", () => api.registerMemoryEmbeddingProvider(payloadFor("registerMemoryEmbeddingProvider")));
safeRegister("registerMemoryFlushPlan", () => api.registerMemoryFlushPlan(payloadFor("registerMemoryFlushPlan")));
safeRegister("registerMemoryPromptSection", () => api.registerMemoryPromptSection(payloadFor("registerMemoryPromptSection")));
safeRegister("registerMemoryPromptSupplement", () => api.registerMemoryPromptSupplement(payloadFor("registerMemoryPromptSupplement")));
safeRegister("registerMemoryRuntime", () => api.registerMemoryRuntime(payloadFor("registerMemoryRuntime")));
safeRegister("registerMusicGenerationProvider", () => api.registerMusicGenerationProvider(payloadFor("registerMusicGenerationProvider")));
safeRegister("registerNodeHostCommand", () => api.registerNodeHostCommand(payloadFor("registerNodeHostCommand")));
safeRegister("registerProvider", () => api.registerProvider(payloadFor("registerProvider")));
safeRegister("registerRealtimeTranscriptionProvider", () => api.registerRealtimeTranscriptionProvider(payloadFor("registerRealtimeTranscriptionProvider")));
safeRegister("registerRealtimeVoiceProvider", () => api.registerRealtimeVoiceProvider(payloadFor("registerRealtimeVoiceProvider")));
safeRegister("registerReload", () => api.registerReload(payloadFor("registerReload")));
safeRegister("registerSecurityAuditCollector", () => api.registerSecurityAuditCollector(payloadFor("registerSecurityAuditCollector")));
safeRegister("registerService", () => api.registerService(payloadFor("registerService")));
safeRegister("registerSpeechProvider", () => api.registerSpeechProvider(payloadFor("registerSpeechProvider")));
safeRegister("registerTextTransforms", () => api.registerTextTransforms(payloadFor("registerTextTransforms")));
safeRegister("registerTool", () => api.registerTool(payloadFor("registerTool")));
safeRegister("registerVideoGenerationProvider", () => api.registerVideoGenerationProvider(payloadFor("registerVideoGenerationProvider")));
safeRegister("registerWebFetchProvider", () => api.registerWebFetchProvider(payloadFor("registerWebFetchProvider")));
safeRegister("registerWebSearchProvider", () => api.registerWebSearchProvider(payloadFor("registerWebSearchProvider")));
}
function safeRegister(name, register) {
try {
register();
} catch (error) {
apiSurfaceProbeFailures.push({ name, message: String(error?.message ?? error) });
}
}
export const apiSurfaceProbeFailures = [];
function payloadFor(name) {
const id = name.replace(/^register/, "").replace(/[A-Z]/g, (letter, index) => (index === 0 ? "" : "-") + letter.toLowerCase()) || "probe";
return {
id: "kitchen-sink-" + id,
name: "kitchen-sink-" + id,
description: "Kitchen-sink no-op probe for " + name + ".",
command: "kitchen-sink-" + id,
path: "/kitchen-sink/" + id,
method: "POST",
inputSchema: objectSchema(),
schema: objectSchema(),
configSchema: objectSchema(),
handler: async () => ({ ok: true, registrar: name }),
run: async () => ({ ok: true, registrar: name }),
execute: async () => ({ ok: true, registrar: name }),
start: async () => ({ ok: true, registrar: name }),
stop: async () => ({ ok: true, registrar: name }),
setup: async () => ({ ok: true, registrar: name }),
migrate: async (value) => value,
transform: async (value) => value,
render: async () => "kitchen-sink memory prompt section",
create: async () => ({ ok: true, registrar: name }),
speak: async () => ({ audio: new Uint8Array(), mimeType: "audio/wav" }),
synthesize: async () => ({ audio: new Uint8Array(), mimeType: "audio/wav" }),
send: async () => ({ ok: true }),
receive: async () => ({ ok: true }),
probe: async () => ({ enabled: false, reason: "kitchen-sink no-op" }),
};
}
function objectSchema() {
return {
type: "object",
additionalProperties: true,
properties: {
input: { type: "string" },
},
};
}

View File

@ -0,0 +1,615 @@
// Generated by scripts/sync-surface.mjs from openclaw 2026.4.24. Do not edit by hand.
import type * as sdk0 from "openclaw/plugin-sdk";
import type * as sdk1 from "openclaw/plugin-sdk/account-core";
import type * as sdk2 from "openclaw/plugin-sdk/account-helpers";
import type * as sdk3 from "openclaw/plugin-sdk/account-id";
import type * as sdk4 from "openclaw/plugin-sdk/account-resolution";
import type * as sdk5 from "openclaw/plugin-sdk/account-resolution-runtime";
import type * as sdk6 from "openclaw/plugin-sdk/acp-binding-resolve-runtime";
import type * as sdk7 from "openclaw/plugin-sdk/acp-binding-runtime";
import type * as sdk8 from "openclaw/plugin-sdk/acp-runtime";
import type * as sdk9 from "openclaw/plugin-sdk/agent-config-primitives";
import type * as sdk10 from "openclaw/plugin-sdk/agent-harness";
import type * as sdk11 from "openclaw/plugin-sdk/agent-harness-runtime";
import type * as sdk12 from "openclaw/plugin-sdk/agent-media-payload";
import type * as sdk13 from "openclaw/plugin-sdk/agent-runtime";
import type * as sdk14 from "openclaw/plugin-sdk/allow-from";
import type * as sdk15 from "openclaw/plugin-sdk/allowlist-config-edit";
import type * as sdk16 from "openclaw/plugin-sdk/approval-auth-runtime";
import type * as sdk17 from "openclaw/plugin-sdk/approval-client-runtime";
import type * as sdk18 from "openclaw/plugin-sdk/approval-delivery-runtime";
import type * as sdk19 from "openclaw/plugin-sdk/approval-gateway-runtime";
import type * as sdk20 from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
import type * as sdk21 from "openclaw/plugin-sdk/approval-handler-runtime";
import type * as sdk22 from "openclaw/plugin-sdk/approval-native-runtime";
import type * as sdk23 from "openclaw/plugin-sdk/approval-reply-runtime";
import type * as sdk24 from "openclaw/plugin-sdk/approval-runtime";
import type * as sdk25 from "openclaw/plugin-sdk/bluebubbles";
import type * as sdk26 from "openclaw/plugin-sdk/bluebubbles-policy";
import type * as sdk27 from "openclaw/plugin-sdk/boolean-param";
import type * as sdk28 from "openclaw/plugin-sdk/browser-cdp";
import type * as sdk29 from "openclaw/plugin-sdk/browser-config";
import type * as sdk30 from "openclaw/plugin-sdk/browser-config-runtime";
import type * as sdk31 from "openclaw/plugin-sdk/browser-config-support";
import type * as sdk32 from "openclaw/plugin-sdk/browser-control-auth";
import type * as sdk33 from "openclaw/plugin-sdk/browser-node-runtime";
import type * as sdk34 from "openclaw/plugin-sdk/browser-profiles";
import type * as sdk35 from "openclaw/plugin-sdk/browser-security-runtime";
import type * as sdk36 from "openclaw/plugin-sdk/browser-setup-tools";
import type * as sdk37 from "openclaw/plugin-sdk/browser-support";
import type * as sdk38 from "openclaw/plugin-sdk/channel-actions";
import type * as sdk39 from "openclaw/plugin-sdk/channel-config-helpers";
import type * as sdk40 from "openclaw/plugin-sdk/channel-config-primitives";
import type * as sdk41 from "openclaw/plugin-sdk/channel-config-schema";
import type * as sdk42 from "openclaw/plugin-sdk/channel-config-writes";
import type * as sdk43 from "openclaw/plugin-sdk/channel-contract";
import type * as sdk44 from "openclaw/plugin-sdk/channel-contract-testing";
import type * as sdk45 from "openclaw/plugin-sdk/channel-core";
import type * as sdk46 from "openclaw/plugin-sdk/channel-entry-contract";
import type * as sdk47 from "openclaw/plugin-sdk/channel-envelope";
import type * as sdk48 from "openclaw/plugin-sdk/channel-feedback";
import type * as sdk49 from "openclaw/plugin-sdk/channel-inbound";
import type * as sdk50 from "openclaw/plugin-sdk/channel-inbound-debounce";
import type * as sdk51 from "openclaw/plugin-sdk/channel-inbound-roots";
import type * as sdk52 from "openclaw/plugin-sdk/channel-lifecycle";
import type * as sdk53 from "openclaw/plugin-sdk/channel-location";
import type * as sdk54 from "openclaw/plugin-sdk/channel-logging";
import type * as sdk55 from "openclaw/plugin-sdk/channel-mention-gating";
import type * as sdk56 from "openclaw/plugin-sdk/channel-pairing";
import type * as sdk57 from "openclaw/plugin-sdk/channel-pairing-paths";
import type * as sdk58 from "openclaw/plugin-sdk/channel-plugin-common";
import type * as sdk59 from "openclaw/plugin-sdk/channel-policy";
import type * as sdk60 from "openclaw/plugin-sdk/channel-reply-options-runtime";
import type * as sdk61 from "openclaw/plugin-sdk/channel-reply-pipeline";
import type * as sdk62 from "openclaw/plugin-sdk/channel-runtime";
import type * as sdk63 from "openclaw/plugin-sdk/channel-runtime-context";
import type * as sdk64 from "openclaw/plugin-sdk/channel-secret-basic-runtime";
import type * as sdk65 from "openclaw/plugin-sdk/channel-secret-runtime";
import type * as sdk66 from "openclaw/plugin-sdk/channel-secret-tts-runtime";
import type * as sdk67 from "openclaw/plugin-sdk/channel-send-result";
import type * as sdk68 from "openclaw/plugin-sdk/channel-setup";
import type * as sdk69 from "openclaw/plugin-sdk/channel-status";
import type * as sdk70 from "openclaw/plugin-sdk/channel-streaming";
import type * as sdk71 from "openclaw/plugin-sdk/channel-targets";
import type * as sdk72 from "openclaw/plugin-sdk/cli-backend";
import type * as sdk73 from "openclaw/plugin-sdk/cli-runtime";
import type * as sdk74 from "openclaw/plugin-sdk/collection-runtime";
import type * as sdk75 from "openclaw/plugin-sdk/command-auth";
import type * as sdk76 from "openclaw/plugin-sdk/command-auth-native";
import type * as sdk77 from "openclaw/plugin-sdk/command-detection";
import type * as sdk78 from "openclaw/plugin-sdk/command-gating";
import type * as sdk79 from "openclaw/plugin-sdk/command-primitives-runtime";
import type * as sdk80 from "openclaw/plugin-sdk/command-status";
import type * as sdk81 from "openclaw/plugin-sdk/command-status-runtime";
import type * as sdk82 from "openclaw/plugin-sdk/command-surface";
import type * as sdk83 from "openclaw/plugin-sdk/compat";
import type * as sdk84 from "openclaw/plugin-sdk/config-runtime";
import type * as sdk85 from "openclaw/plugin-sdk/config-schema";
import type * as sdk86 from "openclaw/plugin-sdk/context-visibility-runtime";
import type * as sdk87 from "openclaw/plugin-sdk/conversation-binding-runtime";
import type * as sdk88 from "openclaw/plugin-sdk/conversation-runtime";
import type * as sdk89 from "openclaw/plugin-sdk/core";
import type * as sdk90 from "openclaw/plugin-sdk/dangerous-name-runtime";
import type * as sdk91 from "openclaw/plugin-sdk/device-bootstrap";
import type * as sdk92 from "openclaw/plugin-sdk/diagnostic-runtime";
import type * as sdk93 from "openclaw/plugin-sdk/diagnostics-otel";
import type * as sdk94 from "openclaw/plugin-sdk/diffs";
import type * as sdk95 from "openclaw/plugin-sdk/direct-dm";
import type * as sdk96 from "openclaw/plugin-sdk/direct-dm-access";
import type * as sdk97 from "openclaw/plugin-sdk/direct-dm-guard-policy";
import type * as sdk98 from "openclaw/plugin-sdk/directory-config-runtime";
import type * as sdk99 from "openclaw/plugin-sdk/directory-runtime";
import type * as sdk100 from "openclaw/plugin-sdk/document-extractor";
import type * as sdk101 from "openclaw/plugin-sdk/error-runtime";
import type * as sdk102 from "openclaw/plugin-sdk/extension-shared";
import type * as sdk103 from "openclaw/plugin-sdk/feishu";
import type * as sdk104 from "openclaw/plugin-sdk/feishu-conversation";
import type * as sdk105 from "openclaw/plugin-sdk/feishu-setup";
import type * as sdk106 from "openclaw/plugin-sdk/fetch-runtime";
import type * as sdk107 from "openclaw/plugin-sdk/file-lock";
import type * as sdk108 from "openclaw/plugin-sdk/gateway-runtime";
import type * as sdk109 from "openclaw/plugin-sdk/github-copilot-login";
import type * as sdk110 from "openclaw/plugin-sdk/github-copilot-token";
import type * as sdk111 from "openclaw/plugin-sdk/global-singleton";
import type * as sdk112 from "openclaw/plugin-sdk/googlechat";
import type * as sdk113 from "openclaw/plugin-sdk/googlechat-runtime-shared";
import type * as sdk114 from "openclaw/plugin-sdk/group-access";
import type * as sdk115 from "openclaw/plugin-sdk/group-activation";
import type * as sdk116 from "openclaw/plugin-sdk/hook-runtime";
import type * as sdk117 from "openclaw/plugin-sdk/host-runtime";
import type * as sdk118 from "openclaw/plugin-sdk/image-generation";
import type * as sdk119 from "openclaw/plugin-sdk/image-generation-core";
import type * as sdk120 from "openclaw/plugin-sdk/image-generation-runtime";
import type * as sdk121 from "openclaw/plugin-sdk/inbound-envelope";
import type * as sdk122 from "openclaw/plugin-sdk/inbound-reply-dispatch";
import type * as sdk123 from "openclaw/plugin-sdk/infra-runtime";
import type * as sdk124 from "openclaw/plugin-sdk/interactive-runtime";
import type * as sdk125 from "openclaw/plugin-sdk/irc";
import type * as sdk126 from "openclaw/plugin-sdk/irc-surface";
import type * as sdk127 from "openclaw/plugin-sdk/json-store";
import type * as sdk128 from "openclaw/plugin-sdk/keyed-async-queue";
import type * as sdk129 from "openclaw/plugin-sdk/lazy-runtime";
import type * as sdk130 from "openclaw/plugin-sdk/line";
import type * as sdk131 from "openclaw/plugin-sdk/line-core";
import type * as sdk132 from "openclaw/plugin-sdk/line-runtime";
import type * as sdk133 from "openclaw/plugin-sdk/line-surface";
import type * as sdk134 from "openclaw/plugin-sdk/llm-task";
import type * as sdk135 from "openclaw/plugin-sdk/lmstudio";
import type * as sdk136 from "openclaw/plugin-sdk/lmstudio-runtime";
import type * as sdk137 from "openclaw/plugin-sdk/logging-core";
import type * as sdk138 from "openclaw/plugin-sdk/markdown-table-runtime";
import type * as sdk139 from "openclaw/plugin-sdk/matrix";
import type * as sdk140 from "openclaw/plugin-sdk/matrix-helper";
import type * as sdk141 from "openclaw/plugin-sdk/matrix-runtime-heavy";
import type * as sdk142 from "openclaw/plugin-sdk/matrix-runtime-shared";
import type * as sdk143 from "openclaw/plugin-sdk/matrix-runtime-surface";
import type * as sdk144 from "openclaw/plugin-sdk/matrix-surface";
import type * as sdk145 from "openclaw/plugin-sdk/matrix-thread-bindings";
import type * as sdk146 from "openclaw/plugin-sdk/mattermost";
import type * as sdk147 from "openclaw/plugin-sdk/mattermost-policy";
import type * as sdk148 from "openclaw/plugin-sdk/media-generation-runtime";
import type * as sdk149 from "openclaw/plugin-sdk/media-generation-runtime-shared";
import type * as sdk150 from "openclaw/plugin-sdk/media-mime";
import type * as sdk151 from "openclaw/plugin-sdk/media-runtime";
import type * as sdk152 from "openclaw/plugin-sdk/media-store";
import type * as sdk153 from "openclaw/plugin-sdk/media-understanding";
import type * as sdk154 from "openclaw/plugin-sdk/media-understanding-runtime";
import type * as sdk155 from "openclaw/plugin-sdk/memory-core";
import type * as sdk156 from "openclaw/plugin-sdk/memory-core-engine-runtime";
import type * as sdk157 from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
import type * as sdk158 from "openclaw/plugin-sdk/memory-core-host-engine-foundation";
import type * as sdk159 from "openclaw/plugin-sdk/memory-core-host-engine-qmd";
import type * as sdk160 from "openclaw/plugin-sdk/memory-core-host-engine-storage";
import type * as sdk161 from "openclaw/plugin-sdk/memory-core-host-events";
import type * as sdk162 from "openclaw/plugin-sdk/memory-core-host-multimodal";
import type * as sdk163 from "openclaw/plugin-sdk/memory-core-host-query";
import type * as sdk164 from "openclaw/plugin-sdk/memory-core-host-runtime-cli";
import type * as sdk165 from "openclaw/plugin-sdk/memory-core-host-runtime-core";
import type * as sdk166 from "openclaw/plugin-sdk/memory-core-host-runtime-files";
import type * as sdk167 from "openclaw/plugin-sdk/memory-core-host-secret";
import type * as sdk168 from "openclaw/plugin-sdk/memory-core-host-status";
import type * as sdk169 from "openclaw/plugin-sdk/memory-host-core";
import type * as sdk170 from "openclaw/plugin-sdk/memory-host-events";
import type * as sdk171 from "openclaw/plugin-sdk/memory-host-files";
import type * as sdk172 from "openclaw/plugin-sdk/memory-host-markdown";
import type * as sdk173 from "openclaw/plugin-sdk/memory-host-search";
import type * as sdk174 from "openclaw/plugin-sdk/memory-host-status";
import type * as sdk175 from "openclaw/plugin-sdk/memory-lancedb";
import type * as sdk176 from "openclaw/plugin-sdk/messaging-targets";
import type * as sdk177 from "openclaw/plugin-sdk/models-provider-runtime";
import type * as sdk178 from "openclaw/plugin-sdk/msteams";
import type * as sdk179 from "openclaw/plugin-sdk/music-generation";
import type * as sdk180 from "openclaw/plugin-sdk/music-generation-core";
import type * as sdk181 from "openclaw/plugin-sdk/native-command-config-runtime";
import type * as sdk182 from "openclaw/plugin-sdk/native-command-registry";
import type * as sdk183 from "openclaw/plugin-sdk/nextcloud-talk";
import type * as sdk184 from "openclaw/plugin-sdk/nostr";
import type * as sdk185 from "openclaw/plugin-sdk/opencode";
import type * as sdk186 from "openclaw/plugin-sdk/outbound-media";
import type * as sdk187 from "openclaw/plugin-sdk/outbound-runtime";
import type * as sdk188 from "openclaw/plugin-sdk/param-readers";
import type * as sdk189 from "openclaw/plugin-sdk/persistent-dedupe";
import type * as sdk190 from "openclaw/plugin-sdk/plugin-entry";
import type * as sdk191 from "openclaw/plugin-sdk/plugin-runtime";
import type * as sdk192 from "openclaw/plugin-sdk/poll-runtime";
import type * as sdk193 from "openclaw/plugin-sdk/process-runtime";
import type * as sdk194 from "openclaw/plugin-sdk/provider-auth";
import type * as sdk195 from "openclaw/plugin-sdk/provider-auth-api-key";
import type * as sdk196 from "openclaw/plugin-sdk/provider-auth-login";
import type * as sdk197 from "openclaw/plugin-sdk/provider-auth-result";
import type * as sdk198 from "openclaw/plugin-sdk/provider-auth-runtime";
import type * as sdk199 from "openclaw/plugin-sdk/provider-catalog-shared";
import type * as sdk200 from "openclaw/plugin-sdk/provider-entry";
import type * as sdk201 from "openclaw/plugin-sdk/provider-env-vars";
import type * as sdk202 from "openclaw/plugin-sdk/provider-http";
import type * as sdk203 from "openclaw/plugin-sdk/provider-model-shared";
import type * as sdk204 from "openclaw/plugin-sdk/provider-model-types";
import type * as sdk205 from "openclaw/plugin-sdk/provider-onboard";
import type * as sdk206 from "openclaw/plugin-sdk/provider-selection-runtime";
import type * as sdk207 from "openclaw/plugin-sdk/provider-setup";
import type * as sdk208 from "openclaw/plugin-sdk/provider-stream";
import type * as sdk209 from "openclaw/plugin-sdk/provider-stream-family";
import type * as sdk210 from "openclaw/plugin-sdk/provider-stream-shared";
import type * as sdk211 from "openclaw/plugin-sdk/provider-tools";
import type * as sdk212 from "openclaw/plugin-sdk/provider-transport-runtime";
import type * as sdk213 from "openclaw/plugin-sdk/provider-usage";
import type * as sdk214 from "openclaw/plugin-sdk/provider-web-fetch";
import type * as sdk215 from "openclaw/plugin-sdk/provider-web-fetch-contract";
import type * as sdk216 from "openclaw/plugin-sdk/provider-web-search";
import type * as sdk217 from "openclaw/plugin-sdk/provider-web-search-config-contract";
import type * as sdk218 from "openclaw/plugin-sdk/provider-web-search-contract";
import type * as sdk219 from "openclaw/plugin-sdk/provider-zai-endpoint";
import type * as sdk220 from "openclaw/plugin-sdk/proxy-capture";
import type * as sdk221 from "openclaw/plugin-sdk/qa-channel";
import type * as sdk222 from "openclaw/plugin-sdk/qa-channel-protocol";
import type * as sdk223 from "openclaw/plugin-sdk/qa-runner-runtime";
import type * as sdk224 from "openclaw/plugin-sdk/realtime-transcription";
import type * as sdk225 from "openclaw/plugin-sdk/realtime-voice";
import type * as sdk226 from "openclaw/plugin-sdk/reply-chunking";
import type * as sdk227 from "openclaw/plugin-sdk/reply-dedupe";
import type * as sdk228 from "openclaw/plugin-sdk/reply-dispatch-runtime";
import type * as sdk229 from "openclaw/plugin-sdk/reply-history";
import type * as sdk230 from "openclaw/plugin-sdk/reply-payload";
import type * as sdk231 from "openclaw/plugin-sdk/reply-reference";
import type * as sdk232 from "openclaw/plugin-sdk/reply-runtime";
import type * as sdk233 from "openclaw/plugin-sdk/request-url";
import type * as sdk234 from "openclaw/plugin-sdk/response-limit-runtime";
import type * as sdk235 from "openclaw/plugin-sdk/retry-runtime";
import type * as sdk236 from "openclaw/plugin-sdk/routing";
import type * as sdk237 from "openclaw/plugin-sdk/run-command";
import type * as sdk238 from "openclaw/plugin-sdk/runtime";
import type * as sdk239 from "openclaw/plugin-sdk/runtime-config-snapshot";
import type * as sdk240 from "openclaw/plugin-sdk/runtime-doctor";
import type * as sdk241 from "openclaw/plugin-sdk/runtime-env";
import type * as sdk242 from "openclaw/plugin-sdk/runtime-fetch";
import type * as sdk243 from "openclaw/plugin-sdk/runtime-group-policy";
import type * as sdk244 from "openclaw/plugin-sdk/runtime-logger";
import type * as sdk245 from "openclaw/plugin-sdk/runtime-secret-resolution";
import type * as sdk246 from "openclaw/plugin-sdk/runtime-store";
import type * as sdk247 from "openclaw/plugin-sdk/sandbox";
import type * as sdk248 from "openclaw/plugin-sdk/secret-file-runtime";
import type * as sdk249 from "openclaw/plugin-sdk/secret-input";
import type * as sdk250 from "openclaw/plugin-sdk/secret-input-runtime";
import type * as sdk251 from "openclaw/plugin-sdk/secret-ref-runtime";
import type * as sdk252 from "openclaw/plugin-sdk/security-runtime";
import type * as sdk253 from "openclaw/plugin-sdk/self-hosted-provider-setup";
import type * as sdk254 from "openclaw/plugin-sdk/session-binding-runtime";
import type * as sdk255 from "openclaw/plugin-sdk/session-key-runtime";
import type * as sdk256 from "openclaw/plugin-sdk/session-store-runtime";
import type * as sdk257 from "openclaw/plugin-sdk/session-transcript-hit";
import type * as sdk258 from "openclaw/plugin-sdk/session-visibility";
import type * as sdk259 from "openclaw/plugin-sdk/setup";
import type * as sdk260 from "openclaw/plugin-sdk/setup-adapter-runtime";
import type * as sdk261 from "openclaw/plugin-sdk/setup-runtime";
import type * as sdk262 from "openclaw/plugin-sdk/setup-tools";
import type * as sdk263 from "openclaw/plugin-sdk/simple-completion-runtime";
import type * as sdk264 from "openclaw/plugin-sdk/skill-commands-runtime";
import type * as sdk265 from "openclaw/plugin-sdk/skills-runtime";
import type * as sdk266 from "openclaw/plugin-sdk/speech";
import type * as sdk267 from "openclaw/plugin-sdk/speech-core";
import type * as sdk268 from "openclaw/plugin-sdk/ssrf-dispatcher";
import type * as sdk269 from "openclaw/plugin-sdk/ssrf-policy";
import type * as sdk270 from "openclaw/plugin-sdk/ssrf-runtime";
import type * as sdk271 from "openclaw/plugin-sdk/state-paths";
import type * as sdk272 from "openclaw/plugin-sdk/status-helpers";
import type * as sdk273 from "openclaw/plugin-sdk/string-coerce-runtime";
import type * as sdk274 from "openclaw/plugin-sdk/string-normalization-runtime";
import type * as sdk275 from "openclaw/plugin-sdk/target-resolver-runtime";
import type * as sdk276 from "openclaw/plugin-sdk/telegram-command-config";
import type * as sdk277 from "openclaw/plugin-sdk/telegram-command-ui";
import type * as sdk278 from "openclaw/plugin-sdk/temp-path";
import type * as sdk279 from "openclaw/plugin-sdk/testing";
import type * as sdk280 from "openclaw/plugin-sdk/text-autolink-runtime";
import type * as sdk281 from "openclaw/plugin-sdk/text-chunking";
import type * as sdk282 from "openclaw/plugin-sdk/text-runtime";
import type * as sdk283 from "openclaw/plugin-sdk/thread-bindings-runtime";
import type * as sdk284 from "openclaw/plugin-sdk/thread-bindings-session-runtime";
import type * as sdk285 from "openclaw/plugin-sdk/thread-ownership";
import type * as sdk286 from "openclaw/plugin-sdk/tlon";
import type * as sdk287 from "openclaw/plugin-sdk/tool-payload";
import type * as sdk288 from "openclaw/plugin-sdk/tool-send";
import type * as sdk289 from "openclaw/plugin-sdk/twitch";
import type * as sdk290 from "openclaw/plugin-sdk/video-generation";
import type * as sdk291 from "openclaw/plugin-sdk/video-generation-core";
import type * as sdk292 from "openclaw/plugin-sdk/video-generation-runtime";
import type * as sdk293 from "openclaw/plugin-sdk/voice-call";
import type * as sdk294 from "openclaw/plugin-sdk/volc-model-catalog-shared";
import type * as sdk295 from "openclaw/plugin-sdk/web-content-extractor";
import type * as sdk296 from "openclaw/plugin-sdk/web-media";
import type * as sdk297 from "openclaw/plugin-sdk/webhook-ingress";
import type * as sdk298 from "openclaw/plugin-sdk/webhook-path";
import type * as sdk299 from "openclaw/plugin-sdk/webhook-request-guards";
import type * as sdk300 from "openclaw/plugin-sdk/webhook-targets";
import type * as sdk301 from "openclaw/plugin-sdk/windows-spawn";
import type * as sdk302 from "openclaw/plugin-sdk/zalo";
import type * as sdk303 from "openclaw/plugin-sdk/zalo-setup";
import type * as sdk304 from "openclaw/plugin-sdk/zalouser";
import type * as sdk305 from "openclaw/plugin-sdk/zod";
export type KitchenSinkSdkImportSurface =
| typeof sdk0
| typeof sdk1
| typeof sdk2
| typeof sdk3
| typeof sdk4
| typeof sdk5
| typeof sdk6
| typeof sdk7
| typeof sdk8
| typeof sdk9
| typeof sdk10
| typeof sdk11
| typeof sdk12
| typeof sdk13
| typeof sdk14
| typeof sdk15
| typeof sdk16
| typeof sdk17
| typeof sdk18
| typeof sdk19
| typeof sdk20
| typeof sdk21
| typeof sdk22
| typeof sdk23
| typeof sdk24
| typeof sdk25
| typeof sdk26
| typeof sdk27
| typeof sdk28
| typeof sdk29
| typeof sdk30
| typeof sdk31
| typeof sdk32
| typeof sdk33
| typeof sdk34
| typeof sdk35
| typeof sdk36
| typeof sdk37
| typeof sdk38
| typeof sdk39
| typeof sdk40
| typeof sdk41
| typeof sdk42
| typeof sdk43
| typeof sdk44
| typeof sdk45
| typeof sdk46
| typeof sdk47
| typeof sdk48
| typeof sdk49
| typeof sdk50
| typeof sdk51
| typeof sdk52
| typeof sdk53
| typeof sdk54
| typeof sdk55
| typeof sdk56
| typeof sdk57
| typeof sdk58
| typeof sdk59
| typeof sdk60
| typeof sdk61
| typeof sdk62
| typeof sdk63
| typeof sdk64
| typeof sdk65
| typeof sdk66
| typeof sdk67
| typeof sdk68
| typeof sdk69
| typeof sdk70
| typeof sdk71
| typeof sdk72
| typeof sdk73
| typeof sdk74
| typeof sdk75
| typeof sdk76
| typeof sdk77
| typeof sdk78
| typeof sdk79
| typeof sdk80
| typeof sdk81
| typeof sdk82
| typeof sdk83
| typeof sdk84
| typeof sdk85
| typeof sdk86
| typeof sdk87
| typeof sdk88
| typeof sdk89
| typeof sdk90
| typeof sdk91
| typeof sdk92
| typeof sdk93
| typeof sdk94
| typeof sdk95
| typeof sdk96
| typeof sdk97
| typeof sdk98
| typeof sdk99
| typeof sdk100
| typeof sdk101
| typeof sdk102
| typeof sdk103
| typeof sdk104
| typeof sdk105
| typeof sdk106
| typeof sdk107
| typeof sdk108
| typeof sdk109
| typeof sdk110
| typeof sdk111
| typeof sdk112
| typeof sdk113
| typeof sdk114
| typeof sdk115
| typeof sdk116
| typeof sdk117
| typeof sdk118
| typeof sdk119
| typeof sdk120
| typeof sdk121
| typeof sdk122
| typeof sdk123
| typeof sdk124
| typeof sdk125
| typeof sdk126
| typeof sdk127
| typeof sdk128
| typeof sdk129
| typeof sdk130
| typeof sdk131
| typeof sdk132
| typeof sdk133
| typeof sdk134
| typeof sdk135
| typeof sdk136
| typeof sdk137
| typeof sdk138
| typeof sdk139
| typeof sdk140
| typeof sdk141
| typeof sdk142
| typeof sdk143
| typeof sdk144
| typeof sdk145
| typeof sdk146
| typeof sdk147
| typeof sdk148
| typeof sdk149
| typeof sdk150
| typeof sdk151
| typeof sdk152
| typeof sdk153
| typeof sdk154
| typeof sdk155
| typeof sdk156
| typeof sdk157
| typeof sdk158
| typeof sdk159
| typeof sdk160
| typeof sdk161
| typeof sdk162
| typeof sdk163
| typeof sdk164
| typeof sdk165
| typeof sdk166
| typeof sdk167
| typeof sdk168
| typeof sdk169
| typeof sdk170
| typeof sdk171
| typeof sdk172
| typeof sdk173
| typeof sdk174
| typeof sdk175
| typeof sdk176
| typeof sdk177
| typeof sdk178
| typeof sdk179
| typeof sdk180
| typeof sdk181
| typeof sdk182
| typeof sdk183
| typeof sdk184
| typeof sdk185
| typeof sdk186
| typeof sdk187
| typeof sdk188
| typeof sdk189
| typeof sdk190
| typeof sdk191
| typeof sdk192
| typeof sdk193
| typeof sdk194
| typeof sdk195
| typeof sdk196
| typeof sdk197
| typeof sdk198
| typeof sdk199
| typeof sdk200
| typeof sdk201
| typeof sdk202
| typeof sdk203
| typeof sdk204
| typeof sdk205
| typeof sdk206
| typeof sdk207
| typeof sdk208
| typeof sdk209
| typeof sdk210
| typeof sdk211
| typeof sdk212
| typeof sdk213
| typeof sdk214
| typeof sdk215
| typeof sdk216
| typeof sdk217
| typeof sdk218
| typeof sdk219
| typeof sdk220
| typeof sdk221
| typeof sdk222
| typeof sdk223
| typeof sdk224
| typeof sdk225
| typeof sdk226
| typeof sdk227
| typeof sdk228
| typeof sdk229
| typeof sdk230
| typeof sdk231
| typeof sdk232
| typeof sdk233
| typeof sdk234
| typeof sdk235
| typeof sdk236
| typeof sdk237
| typeof sdk238
| typeof sdk239
| typeof sdk240
| typeof sdk241
| typeof sdk242
| typeof sdk243
| typeof sdk244
| typeof sdk245
| typeof sdk246
| typeof sdk247
| typeof sdk248
| typeof sdk249
| typeof sdk250
| typeof sdk251
| typeof sdk252
| typeof sdk253
| typeof sdk254
| typeof sdk255
| typeof sdk256
| typeof sdk257
| typeof sdk258
| typeof sdk259
| typeof sdk260
| typeof sdk261
| typeof sdk262
| typeof sdk263
| typeof sdk264
| typeof sdk265
| typeof sdk266
| typeof sdk267
| typeof sdk268
| typeof sdk269
| typeof sdk270
| typeof sdk271
| typeof sdk272
| typeof sdk273
| typeof sdk274
| typeof sdk275
| typeof sdk276
| typeof sdk277
| typeof sdk278
| typeof sdk279
| typeof sdk280
| typeof sdk281
| typeof sdk282
| typeof sdk283
| typeof sdk284
| typeof sdk285
| typeof sdk286
| typeof sdk287
| typeof sdk288
| typeof sdk289
| typeof sdk290
| typeof sdk291
| typeof sdk292
| typeof sdk293
| typeof sdk294
| typeof sdk295
| typeof sdk296
| typeof sdk297
| typeof sdk298
| typeof sdk299
| typeof sdk300
| typeof sdk301
| typeof sdk302
| typeof sdk303
| typeof sdk304
| typeof sdk305;

19
src/index.js Normal file
View File

@ -0,0 +1,19 @@
import { registerAllHooks } from "./generated-hooks.js";
import { registerAllRegistrars } from "./generated-registrars.js";
export const plugin = {
id: "openclaw-kitchen-sink",
name: "OpenClaw Kitchen Sink",
version: "0.1.0",
description: "No-op plugin fixture covering OpenClaw plugin API seams.",
register(api) {
registerAllHooks(api);
registerAllRegistrars(api);
},
};
export function register(api) {
plugin.register(api);
}
export default plugin;

10
src/setup.js Normal file
View File

@ -0,0 +1,10 @@
export default {
id: "openclaw-kitchen-sink-setup",
name: "OpenClaw Kitchen Sink Setup",
async setup() {
return {
configured: true,
message: "Kitchen-sink setup probe completed without credentials.",
};
},
};