mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-29 02:41:07 +00:00
19120 lines
634 KiB
TypeScript
19120 lines
634 KiB
TypeScript
// Auto-generated by scripts/generate-bundled-plugin-metadata.mjs. Do not edit directly.
|
|
|
|
export const GENERATED_BUNDLED_PLUGIN_METADATA = [
|
|
{
|
|
dirName: "acpx",
|
|
idHint: "acpx",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/acpx",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw ACP runtime backend via acpx",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "acpx",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
command: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
expectedVersion: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
cwd: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
permissionMode: {
|
|
type: "string",
|
|
enum: ["approve-all", "approve-reads", "deny-all"],
|
|
},
|
|
nonInteractivePermissions: {
|
|
type: "string",
|
|
enum: ["deny", "fail"],
|
|
},
|
|
strictWindowsCmdWrapper: {
|
|
type: "boolean",
|
|
},
|
|
timeoutSeconds: {
|
|
type: "number",
|
|
minimum: 0.001,
|
|
},
|
|
queueOwnerTtlSeconds: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
mcpServers: {
|
|
type: "object",
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
command: {
|
|
type: "string",
|
|
minLength: 1,
|
|
description: "Command to run the MCP server",
|
|
},
|
|
args: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
description: "Arguments to pass to the command",
|
|
},
|
|
env: {
|
|
type: "object",
|
|
additionalProperties: {
|
|
type: "string",
|
|
},
|
|
description: "Environment variables for the MCP server",
|
|
},
|
|
},
|
|
required: ["command"],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
skills: ["./skills"],
|
|
name: "ACPX Runtime",
|
|
description:
|
|
"ACP runtime backend powered by acpx with configurable command path and version policy.",
|
|
uiHints: {
|
|
command: {
|
|
label: "acpx Command",
|
|
help: "Optional path/command override for acpx (for example /home/user/repos/acpx/dist/cli.js). Leave unset to use plugin-local bundled acpx.",
|
|
},
|
|
expectedVersion: {
|
|
label: "Expected acpx Version",
|
|
help: 'Exact version to enforce or "any" to skip strict version matching.',
|
|
},
|
|
cwd: {
|
|
label: "Default Working Directory",
|
|
help: "Default cwd for ACP session operations when not set per session.",
|
|
},
|
|
permissionMode: {
|
|
label: "Permission Mode",
|
|
help: "Default acpx permission policy for runtime prompts.",
|
|
},
|
|
nonInteractivePermissions: {
|
|
label: "Non-Interactive Permission Policy",
|
|
help: "acpx policy when interactive permission prompts are unavailable.",
|
|
},
|
|
strictWindowsCmdWrapper: {
|
|
label: "Strict Windows cmd Wrapper",
|
|
help: "Enabled by default. On Windows, reject unresolved .cmd/.bat wrappers instead of shell fallback. Disable only for compatibility with non-standard wrappers.",
|
|
advanced: true,
|
|
},
|
|
timeoutSeconds: {
|
|
label: "Prompt Timeout Seconds",
|
|
help: "Optional acpx timeout for each runtime turn.",
|
|
advanced: true,
|
|
},
|
|
queueOwnerTtlSeconds: {
|
|
label: "Queue Owner TTL Seconds",
|
|
help: "Idle queue-owner TTL for acpx prompt turns. Keep this short in OpenClaw to avoid delayed completion after each turn.",
|
|
advanced: true,
|
|
},
|
|
mcpServers: {
|
|
label: "MCP Servers",
|
|
help: "Named MCP server definitions to inject into ACPX-backed session bootstrap. Each entry needs a command and can include args and env.",
|
|
advanced: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "amazon-bedrock",
|
|
idHint: "amazon-bedrock",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/amazon-bedrock-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Amazon Bedrock provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "amazon-bedrock",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["amazon-bedrock"],
|
|
},
|
|
},
|
|
{
|
|
dirName: "anthropic",
|
|
idHint: "anthropic",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/anthropic-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Anthropic provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "anthropic",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["anthropic"],
|
|
cliBackends: ["claude-cli"],
|
|
providerAuthEnvVars: {
|
|
anthropic: ["ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "anthropic",
|
|
method: "cli",
|
|
choiceId: "anthropic-cli",
|
|
choiceLabel: "Anthropic Claude CLI",
|
|
choiceHint: "Reuse a local Claude CLI login on this host",
|
|
groupId: "anthropic",
|
|
groupLabel: "Anthropic",
|
|
groupHint: "Claude CLI + setup-token + API key",
|
|
},
|
|
{
|
|
provider: "anthropic",
|
|
method: "setup-token",
|
|
choiceId: "token",
|
|
choiceLabel: "Anthropic token (paste setup-token)",
|
|
choiceHint: "Run `claude setup-token` elsewhere, then paste the token here",
|
|
groupId: "anthropic",
|
|
groupLabel: "Anthropic",
|
|
groupHint: "Claude CLI + setup-token + API key",
|
|
},
|
|
{
|
|
provider: "anthropic",
|
|
method: "api-key",
|
|
choiceId: "apiKey",
|
|
choiceLabel: "Anthropic API key",
|
|
groupId: "anthropic",
|
|
groupLabel: "Anthropic",
|
|
groupHint: "Claude CLI + setup-token + API key",
|
|
optionKey: "anthropicApiKey",
|
|
cliFlag: "--anthropic-api-key",
|
|
cliOption: "--anthropic-api-key <key>",
|
|
cliDescription: "Anthropic API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["anthropic"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "bluebubbles",
|
|
idHint: "bluebubbles",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/bluebubbles",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw BlueBubbles channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "bluebubbles",
|
|
label: "BlueBubbles",
|
|
selectionLabel: "BlueBubbles (macOS app)",
|
|
detailLabel: "BlueBubbles",
|
|
docsPath: "/channels/bluebubbles",
|
|
docsLabel: "bluebubbles",
|
|
blurb: "iMessage via the BlueBubbles mac app + REST API.",
|
|
aliases: ["bb"],
|
|
preferOver: ["imessage"],
|
|
systemImage: "bubble.left.and.text.bubble.right",
|
|
order: 75,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/bluebubbles",
|
|
localPath: "extensions/bluebubbles",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "bluebubbles",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["bluebubbles"],
|
|
channelConfigs: {
|
|
bluebubbles: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
serverUrl: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
enrichGroupParticipantsFromContacts: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
mediaLocalRoots: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
sendReadReceipts: {
|
|
type: "boolean",
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
serverUrl: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
enrichGroupParticipantsFromContacts: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
mediaLocalRoots: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
sendReadReceipts: {
|
|
type: "boolean",
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
required: ["enrichGroupParticipantsFromContacts"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
edit: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
unsend: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
reply: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
sendWithEffect: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
renameGroup: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
setGroupIcon: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
addParticipant: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
removeParticipant: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
leaveGroup: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
sendAttachment: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
},
|
|
required: [
|
|
"reactions",
|
|
"edit",
|
|
"unsend",
|
|
"reply",
|
|
"sendWithEffect",
|
|
"renameGroup",
|
|
"setGroupIcon",
|
|
"addParticipant",
|
|
"removeParticipant",
|
|
"leaveGroup",
|
|
"sendAttachment",
|
|
],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
required: ["enrichGroupParticipantsFromContacts"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "BlueBubbles",
|
|
help: "BlueBubbles channel provider configuration used for Apple messaging bridge integrations. Keep DM policy aligned with your trusted sender model in shared deployments.",
|
|
},
|
|
dmPolicy: {
|
|
label: "BlueBubbles DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.bluebubbles.allowFrom=["*"].',
|
|
},
|
|
},
|
|
label: "BlueBubbles",
|
|
description: "iMessage via the BlueBubbles mac app + REST API.",
|
|
preferOver: ["imessage"],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "brave",
|
|
idHint: "brave",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/brave-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Brave plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "brave",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
mode: {
|
|
type: "string",
|
|
enum: ["web", "llm-context"],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providerAuthEnvVars: {
|
|
brave: ["BRAVE_API_KEY"],
|
|
},
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Brave Search API Key",
|
|
help: "Brave Search API key (fallback: BRAVE_API_KEY env var).",
|
|
sensitive: true,
|
|
placeholder: "BSA...",
|
|
},
|
|
"webSearch.mode": {
|
|
label: "Brave Search Mode",
|
|
help: "Brave Search mode: web or llm-context.",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["brave"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "browser",
|
|
idHint: "browser",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/browser-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw browser tool plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "browser",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
enabledByDefault: true,
|
|
},
|
|
},
|
|
{
|
|
dirName: "byteplus",
|
|
idHint: "byteplus",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/byteplus-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw BytePlus provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "byteplus",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["byteplus", "byteplus-plan"],
|
|
providerAuthEnvVars: {
|
|
byteplus: ["BYTEPLUS_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "byteplus",
|
|
method: "api-key",
|
|
choiceId: "byteplus-api-key",
|
|
choiceLabel: "BytePlus API key",
|
|
groupId: "byteplus",
|
|
groupLabel: "BytePlus",
|
|
groupHint: "API key",
|
|
optionKey: "byteplusApiKey",
|
|
cliFlag: "--byteplus-api-key",
|
|
cliOption: "--byteplus-api-key <key>",
|
|
cliDescription: "BytePlus API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "chutes",
|
|
idHint: "chutes",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/chutes-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Chutes.ai provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "chutes",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
enabledByDefault: true,
|
|
providers: ["chutes"],
|
|
providerAuthEnvVars: {
|
|
chutes: ["CHUTES_API_KEY", "CHUTES_OAUTH_TOKEN"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "chutes",
|
|
method: "oauth",
|
|
choiceId: "chutes",
|
|
choiceLabel: "Chutes (OAuth)",
|
|
choiceHint: "Browser sign-in",
|
|
groupId: "chutes",
|
|
groupLabel: "Chutes",
|
|
groupHint: "OAuth + API key",
|
|
},
|
|
{
|
|
provider: "chutes",
|
|
method: "api-key",
|
|
choiceId: "chutes-api-key",
|
|
choiceLabel: "Chutes API key",
|
|
choiceHint: "Open-source models including Llama, DeepSeek, and more",
|
|
groupId: "chutes",
|
|
groupLabel: "Chutes",
|
|
groupHint: "OAuth + API key",
|
|
optionKey: "chutesApiKey",
|
|
cliFlag: "--chutes-api-key",
|
|
cliOption: "--chutes-api-key <key>",
|
|
cliDescription: "Chutes API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "cloudflare-ai-gateway",
|
|
idHint: "cloudflare-ai-gateway",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/cloudflare-ai-gateway-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Cloudflare AI Gateway provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "cloudflare-ai-gateway",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["cloudflare-ai-gateway"],
|
|
providerAuthEnvVars: {
|
|
"cloudflare-ai-gateway": ["CLOUDFLARE_AI_GATEWAY_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "cloudflare-ai-gateway",
|
|
method: "api-key",
|
|
choiceId: "cloudflare-ai-gateway-api-key",
|
|
choiceLabel: "Cloudflare AI Gateway",
|
|
choiceHint: "Account ID + Gateway ID + API key",
|
|
groupId: "cloudflare-ai-gateway",
|
|
groupLabel: "Cloudflare AI Gateway",
|
|
groupHint: "Account ID + Gateway ID + API key",
|
|
optionKey: "cloudflareAiGatewayApiKey",
|
|
cliFlag: "--cloudflare-ai-gateway-api-key",
|
|
cliOption: "--cloudflare-ai-gateway-api-key <key>",
|
|
cliDescription: "Cloudflare AI Gateway API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "copilot-proxy",
|
|
idHint: "copilot-proxy",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/copilot-proxy",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Copilot Proxy provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "copilot-proxy",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["copilot-proxy"],
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "copilot-proxy",
|
|
method: "local",
|
|
choiceId: "copilot-proxy",
|
|
choiceLabel: "Copilot Proxy",
|
|
choiceHint: "Configure base URL + model ids",
|
|
groupId: "copilot",
|
|
groupLabel: "Copilot",
|
|
groupHint: "GitHub + local proxy",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "deepgram",
|
|
idHint: "deepgram",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/deepgram-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Deepgram media-understanding provider",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "deepgram",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["deepgram"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "deepseek",
|
|
idHint: "deepseek",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/deepseek-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw DeepSeek provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "deepseek",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["deepseek"],
|
|
providerAuthEnvVars: {
|
|
deepseek: ["DEEPSEEK_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "deepseek",
|
|
method: "api-key",
|
|
choiceId: "deepseek-api-key",
|
|
choiceLabel: "DeepSeek API key",
|
|
groupId: "deepseek",
|
|
groupLabel: "DeepSeek",
|
|
groupHint: "API key",
|
|
optionKey: "deepseekApiKey",
|
|
cliFlag: "--deepseek-api-key",
|
|
cliOption: "--deepseek-api-key <key>",
|
|
cliDescription: "DeepSeek API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "diagnostics-otel",
|
|
idHint: "diagnostics-otel",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/diagnostics-otel",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw diagnostics OpenTelemetry exporter",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "diagnostics-otel",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "diffs",
|
|
idHint: "diffs",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/diffs",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw diff viewer plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "diffs",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
defaults: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
fontFamily: {
|
|
type: "string",
|
|
default: "Fira Code",
|
|
},
|
|
fontSize: {
|
|
type: "number",
|
|
minimum: 10,
|
|
maximum: 24,
|
|
default: 15,
|
|
},
|
|
lineSpacing: {
|
|
type: "number",
|
|
minimum: 1,
|
|
maximum: 3,
|
|
default: 1.6,
|
|
},
|
|
layout: {
|
|
type: "string",
|
|
enum: ["unified", "split"],
|
|
default: "unified",
|
|
},
|
|
showLineNumbers: {
|
|
type: "boolean",
|
|
default: true,
|
|
},
|
|
diffIndicators: {
|
|
type: "string",
|
|
enum: ["bars", "classic", "none"],
|
|
default: "bars",
|
|
},
|
|
wordWrap: {
|
|
type: "boolean",
|
|
default: true,
|
|
},
|
|
background: {
|
|
type: "boolean",
|
|
default: true,
|
|
},
|
|
theme: {
|
|
type: "string",
|
|
enum: ["light", "dark"],
|
|
default: "dark",
|
|
},
|
|
fileFormat: {
|
|
type: "string",
|
|
enum: ["png", "pdf"],
|
|
default: "png",
|
|
},
|
|
format: {
|
|
type: "string",
|
|
enum: ["png", "pdf"],
|
|
},
|
|
fileQuality: {
|
|
type: "string",
|
|
enum: ["standard", "hq", "print"],
|
|
default: "standard",
|
|
},
|
|
fileScale: {
|
|
type: "number",
|
|
minimum: 1,
|
|
maximum: 4,
|
|
default: 2,
|
|
},
|
|
fileMaxWidth: {
|
|
type: "number",
|
|
minimum: 640,
|
|
maximum: 2400,
|
|
default: 960,
|
|
},
|
|
imageFormat: {
|
|
type: "string",
|
|
enum: ["png", "pdf"],
|
|
},
|
|
imageQuality: {
|
|
type: "string",
|
|
enum: ["standard", "hq", "print"],
|
|
},
|
|
imageScale: {
|
|
type: "number",
|
|
minimum: 1,
|
|
maximum: 4,
|
|
},
|
|
imageMaxWidth: {
|
|
type: "number",
|
|
minimum: 640,
|
|
maximum: 2400,
|
|
},
|
|
mode: {
|
|
type: "string",
|
|
enum: ["view", "image", "file", "both"],
|
|
default: "both",
|
|
},
|
|
},
|
|
},
|
|
security: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
allowRemoteViewer: {
|
|
type: "boolean",
|
|
default: false,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
skills: ["./skills"],
|
|
name: "Diffs",
|
|
description: "Read-only diff viewer and file renderer for agents.",
|
|
uiHints: {
|
|
"defaults.fontFamily": {
|
|
label: "Default Font",
|
|
help: "Preferred font family name for diff content and headers.",
|
|
},
|
|
"defaults.fontSize": {
|
|
label: "Default Font Size",
|
|
help: "Base diff font size in pixels.",
|
|
},
|
|
"defaults.lineSpacing": {
|
|
label: "Default Line Spacing",
|
|
help: "Line-height multiplier applied to diff rows.",
|
|
},
|
|
"defaults.layout": {
|
|
label: "Default Layout",
|
|
help: "Initial diff layout shown in the viewer.",
|
|
},
|
|
"defaults.showLineNumbers": {
|
|
label: "Show Line Numbers",
|
|
help: "Show line numbers by default.",
|
|
},
|
|
"defaults.diffIndicators": {
|
|
label: "Diff Indicator Style",
|
|
help: "Choose added/removed indicators style.",
|
|
},
|
|
"defaults.wordWrap": {
|
|
label: "Default Word Wrap",
|
|
help: "Wrap long lines by default.",
|
|
},
|
|
"defaults.background": {
|
|
label: "Default Background Highlights",
|
|
help: "Show added/removed background highlights by default.",
|
|
},
|
|
"defaults.theme": {
|
|
label: "Default Theme",
|
|
help: "Initial viewer theme.",
|
|
},
|
|
"defaults.fileFormat": {
|
|
label: "Default File Format",
|
|
help: "Rendered file format for file mode (PNG or PDF).",
|
|
},
|
|
"defaults.fileQuality": {
|
|
label: "Default File Quality",
|
|
help: "Quality preset for PNG/PDF rendering.",
|
|
},
|
|
"defaults.fileScale": {
|
|
label: "Default File Scale",
|
|
help: "Device scale factor used while rendering file artifacts.",
|
|
},
|
|
"defaults.fileMaxWidth": {
|
|
label: "Default File Max Width",
|
|
help: "Maximum file render width in CSS pixels.",
|
|
},
|
|
"defaults.mode": {
|
|
label: "Default Output Mode",
|
|
help: "Tool default when mode is omitted. Use view for canvas/gateway viewer, file for PNG/PDF, or both.",
|
|
},
|
|
"security.allowRemoteViewer": {
|
|
label: "Allow Remote Viewer",
|
|
help: "Allow non-loopback access to diff viewer URLs when the token path is known.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "discord",
|
|
idHint: "discord",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/discord",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Discord channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "discord",
|
|
label: "Discord",
|
|
selectionLabel: "Discord (Bot API)",
|
|
detailLabel: "Discord Bot",
|
|
docsPath: "/channels/discord",
|
|
docsLabel: "discord",
|
|
blurb: "very well supported right now.",
|
|
systemImage: "bubble.left.and.bubble.right",
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/discord",
|
|
localPath: "extensions/discord",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "discord",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["discord"],
|
|
channelConfigs: {
|
|
discord: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
token: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
allowBots: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "mentions",
|
|
},
|
|
],
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
],
|
|
},
|
|
streamMode: {
|
|
type: "string",
|
|
enum: ["partial", "block", "off"],
|
|
},
|
|
draftChunk: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
breakPreference: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "paragraph",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "newline",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "sentence",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
maxLinesPerMessage: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
retry: {
|
|
type: "object",
|
|
properties: {
|
|
attempts: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 9007199254740991,
|
|
},
|
|
minDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
jitter: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
stickers: {
|
|
type: "boolean",
|
|
},
|
|
emojiUploads: {
|
|
type: "boolean",
|
|
},
|
|
stickerUploads: {
|
|
type: "boolean",
|
|
},
|
|
polls: {
|
|
type: "boolean",
|
|
},
|
|
permissions: {
|
|
type: "boolean",
|
|
},
|
|
messages: {
|
|
type: "boolean",
|
|
},
|
|
threads: {
|
|
type: "boolean",
|
|
},
|
|
pins: {
|
|
type: "boolean",
|
|
},
|
|
search: {
|
|
type: "boolean",
|
|
},
|
|
memberInfo: {
|
|
type: "boolean",
|
|
},
|
|
roleInfo: {
|
|
type: "boolean",
|
|
},
|
|
roles: {
|
|
type: "boolean",
|
|
},
|
|
channelInfo: {
|
|
type: "boolean",
|
|
},
|
|
voiceStatus: {
|
|
type: "boolean",
|
|
},
|
|
events: {
|
|
type: "boolean",
|
|
},
|
|
moderation: {
|
|
type: "boolean",
|
|
},
|
|
channels: {
|
|
type: "boolean",
|
|
},
|
|
presence: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupEnabled: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
guilds: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
slug: {
|
|
type: "string",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
ignoreOtherMentions: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all", "allowlist"],
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
ignoreOtherMentions: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
includeThreadStarter: {
|
|
type: "boolean",
|
|
},
|
|
autoThread: {
|
|
type: "boolean",
|
|
},
|
|
autoThreadName: {
|
|
type: "string",
|
|
enum: ["message", "generated"],
|
|
},
|
|
autoArchiveDuration: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["60", "1440", "4320", "10080"],
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 60,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 1440,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 4320,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 10080,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
execApprovals: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
approvers: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
agentFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
sessionFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
cleanupAfterResolve: {
|
|
type: "boolean",
|
|
},
|
|
target: {
|
|
type: "string",
|
|
enum: ["dm", "channel", "both"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
agentComponents: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
ui: {
|
|
type: "object",
|
|
properties: {
|
|
components: {
|
|
type: "object",
|
|
properties: {
|
|
accentColor: {
|
|
type: "string",
|
|
pattern: "^#?[0-9a-fA-F]{6}$",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
slashCommand: {
|
|
type: "object",
|
|
properties: {
|
|
ephemeral: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
intents: {
|
|
type: "object",
|
|
properties: {
|
|
presence: {
|
|
type: "boolean",
|
|
},
|
|
guildMembers: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
voice: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
autoJoin: {
|
|
type: "array",
|
|
items: {
|
|
type: "object",
|
|
properties: {
|
|
guildId: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
channelId: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
required: ["guildId", "channelId"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
daveEncryption: {
|
|
type: "boolean",
|
|
},
|
|
decryptionFailureTolerance: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
tts: {
|
|
type: "object",
|
|
properties: {
|
|
auto: {
|
|
type: "string",
|
|
enum: ["off", "always", "inbound", "tagged"],
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
mode: {
|
|
type: "string",
|
|
enum: ["final", "all"],
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
summaryModel: {
|
|
type: "string",
|
|
},
|
|
modelOverrides: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowText: {
|
|
type: "boolean",
|
|
},
|
|
allowProvider: {
|
|
type: "boolean",
|
|
},
|
|
allowVoice: {
|
|
type: "boolean",
|
|
},
|
|
allowModelId: {
|
|
type: "boolean",
|
|
},
|
|
allowVoiceSettings: {
|
|
type: "boolean",
|
|
},
|
|
allowNormalization: {
|
|
type: "boolean",
|
|
},
|
|
allowSeed: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
providers: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
apiKey: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
{
|
|
type: "array",
|
|
items: {},
|
|
},
|
|
{
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
prefsPath: {
|
|
type: "string",
|
|
},
|
|
maxTextLength: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 9007199254740991,
|
|
},
|
|
timeoutMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 120000,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
pluralkit: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
token: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
ackReactionScope: {
|
|
type: "string",
|
|
enum: ["group-mentions", "group-all", "direct", "all", "off", "none"],
|
|
},
|
|
activity: {
|
|
type: "string",
|
|
},
|
|
status: {
|
|
type: "string",
|
|
enum: ["online", "dnd", "idle", "invisible"],
|
|
},
|
|
autoPresence: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
intervalMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
minUpdateIntervalMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
healthyText: {
|
|
type: "string",
|
|
},
|
|
degradedText: {
|
|
type: "string",
|
|
},
|
|
exhaustedText: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
activityType: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
const: 0,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 1,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 2,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 3,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 4,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 5,
|
|
},
|
|
],
|
|
},
|
|
activityUrl: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
inboundWorker: {
|
|
type: "object",
|
|
properties: {
|
|
runTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
eventQueue: {
|
|
type: "object",
|
|
properties: {
|
|
listenerTimeout: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxQueueSize: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxConcurrency: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
token: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
allowBots: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "mentions",
|
|
},
|
|
],
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
],
|
|
},
|
|
streamMode: {
|
|
type: "string",
|
|
enum: ["partial", "block", "off"],
|
|
},
|
|
draftChunk: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
breakPreference: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "paragraph",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "newline",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "sentence",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
maxLinesPerMessage: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
retry: {
|
|
type: "object",
|
|
properties: {
|
|
attempts: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 9007199254740991,
|
|
},
|
|
minDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
jitter: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
stickers: {
|
|
type: "boolean",
|
|
},
|
|
emojiUploads: {
|
|
type: "boolean",
|
|
},
|
|
stickerUploads: {
|
|
type: "boolean",
|
|
},
|
|
polls: {
|
|
type: "boolean",
|
|
},
|
|
permissions: {
|
|
type: "boolean",
|
|
},
|
|
messages: {
|
|
type: "boolean",
|
|
},
|
|
threads: {
|
|
type: "boolean",
|
|
},
|
|
pins: {
|
|
type: "boolean",
|
|
},
|
|
search: {
|
|
type: "boolean",
|
|
},
|
|
memberInfo: {
|
|
type: "boolean",
|
|
},
|
|
roleInfo: {
|
|
type: "boolean",
|
|
},
|
|
roles: {
|
|
type: "boolean",
|
|
},
|
|
channelInfo: {
|
|
type: "boolean",
|
|
},
|
|
voiceStatus: {
|
|
type: "boolean",
|
|
},
|
|
events: {
|
|
type: "boolean",
|
|
},
|
|
moderation: {
|
|
type: "boolean",
|
|
},
|
|
channels: {
|
|
type: "boolean",
|
|
},
|
|
presence: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupEnabled: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
guilds: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
slug: {
|
|
type: "string",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
ignoreOtherMentions: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all", "allowlist"],
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
ignoreOtherMentions: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
includeThreadStarter: {
|
|
type: "boolean",
|
|
},
|
|
autoThread: {
|
|
type: "boolean",
|
|
},
|
|
autoThreadName: {
|
|
type: "string",
|
|
enum: ["message", "generated"],
|
|
},
|
|
autoArchiveDuration: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["60", "1440", "4320", "10080"],
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 60,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 1440,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 4320,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 10080,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
execApprovals: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
approvers: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
agentFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
sessionFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
cleanupAfterResolve: {
|
|
type: "boolean",
|
|
},
|
|
target: {
|
|
type: "string",
|
|
enum: ["dm", "channel", "both"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
agentComponents: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
ui: {
|
|
type: "object",
|
|
properties: {
|
|
components: {
|
|
type: "object",
|
|
properties: {
|
|
accentColor: {
|
|
type: "string",
|
|
pattern: "^#?[0-9a-fA-F]{6}$",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
slashCommand: {
|
|
type: "object",
|
|
properties: {
|
|
ephemeral: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
intents: {
|
|
type: "object",
|
|
properties: {
|
|
presence: {
|
|
type: "boolean",
|
|
},
|
|
guildMembers: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
voice: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
autoJoin: {
|
|
type: "array",
|
|
items: {
|
|
type: "object",
|
|
properties: {
|
|
guildId: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
channelId: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
required: ["guildId", "channelId"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
daveEncryption: {
|
|
type: "boolean",
|
|
},
|
|
decryptionFailureTolerance: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
tts: {
|
|
type: "object",
|
|
properties: {
|
|
auto: {
|
|
type: "string",
|
|
enum: ["off", "always", "inbound", "tagged"],
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
mode: {
|
|
type: "string",
|
|
enum: ["final", "all"],
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
summaryModel: {
|
|
type: "string",
|
|
},
|
|
modelOverrides: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowText: {
|
|
type: "boolean",
|
|
},
|
|
allowProvider: {
|
|
type: "boolean",
|
|
},
|
|
allowVoice: {
|
|
type: "boolean",
|
|
},
|
|
allowModelId: {
|
|
type: "boolean",
|
|
},
|
|
allowVoiceSettings: {
|
|
type: "boolean",
|
|
},
|
|
allowNormalization: {
|
|
type: "boolean",
|
|
},
|
|
allowSeed: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
providers: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
apiKey: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
{
|
|
type: "array",
|
|
items: {},
|
|
},
|
|
{
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
prefsPath: {
|
|
type: "string",
|
|
},
|
|
maxTextLength: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 9007199254740991,
|
|
},
|
|
timeoutMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 120000,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
pluralkit: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
token: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
ackReactionScope: {
|
|
type: "string",
|
|
enum: ["group-mentions", "group-all", "direct", "all", "off", "none"],
|
|
},
|
|
activity: {
|
|
type: "string",
|
|
},
|
|
status: {
|
|
type: "string",
|
|
enum: ["online", "dnd", "idle", "invisible"],
|
|
},
|
|
autoPresence: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
intervalMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
minUpdateIntervalMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
healthyText: {
|
|
type: "string",
|
|
},
|
|
degradedText: {
|
|
type: "string",
|
|
},
|
|
exhaustedText: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
activityType: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
const: 0,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 1,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 2,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 3,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 4,
|
|
},
|
|
{
|
|
type: "number",
|
|
const: 5,
|
|
},
|
|
],
|
|
},
|
|
activityUrl: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
inboundWorker: {
|
|
type: "object",
|
|
properties: {
|
|
runTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
eventQueue: {
|
|
type: "object",
|
|
properties: {
|
|
listenerTimeout: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxQueueSize: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxConcurrency: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
required: ["groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "Discord",
|
|
help: "Discord channel provider configuration for bot auth, retry policy, streaming, thread bindings, and optional voice capabilities. Keep privileged intents and advanced features disabled unless needed.",
|
|
},
|
|
dmPolicy: {
|
|
label: "Discord DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.discord.allowFrom=["*"].',
|
|
},
|
|
"dm.policy": {
|
|
label: "Discord DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.discord.allowFrom=["*"] (legacy: channels.discord.dm.allowFrom).',
|
|
},
|
|
configWrites: {
|
|
label: "Discord Config Writes",
|
|
help: "Allow Discord to write config in response to channel events/commands (default: true).",
|
|
},
|
|
proxy: {
|
|
label: "Discord Proxy URL",
|
|
help: "Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts.<id>.proxy.",
|
|
},
|
|
"commands.native": {
|
|
label: "Discord Native Commands",
|
|
help: 'Override native commands for Discord (bool or "auto").',
|
|
},
|
|
"commands.nativeSkills": {
|
|
label: "Discord Native Skill Commands",
|
|
help: 'Override native skill commands for Discord (bool or "auto").',
|
|
},
|
|
streaming: {
|
|
label: "Discord Streaming Mode",
|
|
help: 'Unified Discord stream preview mode: "off" | "partial" | "block" | "progress". "progress" maps to "partial" on Discord. Legacy boolean/streamMode keys are auto-mapped.',
|
|
},
|
|
streamMode: {
|
|
label: "Discord Stream Mode (Legacy)",
|
|
help: "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.",
|
|
},
|
|
"draftChunk.minChars": {
|
|
label: "Discord Draft Chunk Min Chars",
|
|
help: 'Minimum chars before emitting a Discord stream preview update when channels.discord.streaming="block" (default: 200).',
|
|
},
|
|
"draftChunk.maxChars": {
|
|
label: "Discord Draft Chunk Max Chars",
|
|
help: 'Target max size for a Discord stream preview chunk when channels.discord.streaming="block" (default: 800; clamped to channels.discord.textChunkLimit).',
|
|
},
|
|
"draftChunk.breakPreference": {
|
|
label: "Discord Draft Chunk Break Preference",
|
|
help: "Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.",
|
|
},
|
|
"retry.attempts": {
|
|
label: "Discord Retry Attempts",
|
|
help: "Max retry attempts for outbound Discord API calls (default: 3).",
|
|
},
|
|
"retry.minDelayMs": {
|
|
label: "Discord Retry Min Delay (ms)",
|
|
help: "Minimum retry delay in ms for Discord outbound calls.",
|
|
},
|
|
"retry.maxDelayMs": {
|
|
label: "Discord Retry Max Delay (ms)",
|
|
help: "Maximum retry delay cap in ms for Discord outbound calls.",
|
|
},
|
|
"retry.jitter": {
|
|
label: "Discord Retry Jitter",
|
|
help: "Jitter factor (0-1) applied to Discord retry delays.",
|
|
},
|
|
maxLinesPerMessage: {
|
|
label: "Discord Max Lines Per Message",
|
|
help: "Soft max line count per Discord message (default: 17).",
|
|
},
|
|
"inboundWorker.runTimeoutMs": {
|
|
label: "Discord Inbound Worker Timeout (ms)",
|
|
help: "Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts.<id>.inboundWorker.runTimeoutMs.",
|
|
},
|
|
"eventQueue.listenerTimeout": {
|
|
label: "Discord EventQueue Listener Timeout (ms)",
|
|
help: "Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts.<id>.eventQueue.listenerTimeout.",
|
|
},
|
|
"eventQueue.maxQueueSize": {
|
|
label: "Discord EventQueue Max Queue Size",
|
|
help: "Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts.<id>.eventQueue.maxQueueSize.",
|
|
},
|
|
"eventQueue.maxConcurrency": {
|
|
label: "Discord EventQueue Max Concurrency",
|
|
help: "Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts.<id>.eventQueue.maxConcurrency.",
|
|
},
|
|
"threadBindings.enabled": {
|
|
label: "Discord Thread Binding Enabled",
|
|
help: "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.",
|
|
},
|
|
"threadBindings.idleHours": {
|
|
label: "Discord Thread Binding Idle Timeout (hours)",
|
|
help: "Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.",
|
|
},
|
|
"threadBindings.maxAgeHours": {
|
|
label: "Discord Thread Binding Max Age (hours)",
|
|
help: "Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.",
|
|
},
|
|
"threadBindings.spawnSubagentSessions": {
|
|
label: "Discord Thread-Bound Subagent Spawn",
|
|
help: "Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.",
|
|
},
|
|
"threadBindings.spawnAcpSessions": {
|
|
label: "Discord Thread-Bound ACP Spawn",
|
|
help: "Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.",
|
|
},
|
|
"ui.components.accentColor": {
|
|
label: "Discord Component Accent Color",
|
|
help: "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts.<id>.ui.components.accentColor.",
|
|
},
|
|
"intents.presence": {
|
|
label: "Discord Presence Intent",
|
|
help: "Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.",
|
|
},
|
|
"intents.guildMembers": {
|
|
label: "Discord Guild Members Intent",
|
|
help: "Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.",
|
|
},
|
|
"voice.enabled": {
|
|
label: "Discord Voice Enabled",
|
|
help: "Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.",
|
|
},
|
|
"voice.autoJoin": {
|
|
label: "Discord Voice Auto-Join",
|
|
help: "Voice channels to auto-join on startup (list of guildId/channelId entries).",
|
|
},
|
|
"voice.daveEncryption": {
|
|
label: "Discord Voice DAVE Encryption",
|
|
help: "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).",
|
|
},
|
|
"voice.decryptionFailureTolerance": {
|
|
label: "Discord Voice Decrypt Failure Tolerance",
|
|
help: "Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).",
|
|
},
|
|
"voice.tts": {
|
|
label: "Discord Voice Text-to-Speech",
|
|
help: "Optional TTS overrides for Discord voice playback (merged with messages.tts).",
|
|
},
|
|
"pluralkit.enabled": {
|
|
label: "Discord PluralKit Enabled",
|
|
help: "Resolve PluralKit proxied messages and treat system members as distinct senders.",
|
|
},
|
|
"pluralkit.token": {
|
|
label: "Discord PluralKit Token",
|
|
help: "Optional PluralKit token for resolving private systems or members.",
|
|
},
|
|
activity: {
|
|
label: "Discord Presence Activity",
|
|
help: "Discord presence activity text (defaults to custom status).",
|
|
},
|
|
status: {
|
|
label: "Discord Presence Status",
|
|
help: "Discord presence status (online, dnd, idle, invisible).",
|
|
},
|
|
"autoPresence.enabled": {
|
|
label: "Discord Auto Presence Enabled",
|
|
help: "Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.",
|
|
},
|
|
"autoPresence.intervalMs": {
|
|
label: "Discord Auto Presence Check Interval (ms)",
|
|
help: "How often to evaluate Discord auto-presence state in milliseconds (default: 30000).",
|
|
},
|
|
"autoPresence.minUpdateIntervalMs": {
|
|
label: "Discord Auto Presence Min Update Interval (ms)",
|
|
help: "Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.",
|
|
},
|
|
"autoPresence.healthyText": {
|
|
label: "Discord Auto Presence Healthy Text",
|
|
help: "Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.",
|
|
},
|
|
"autoPresence.degradedText": {
|
|
label: "Discord Auto Presence Degraded Text",
|
|
help: "Optional custom status text while runtime/model availability is degraded or unknown (idle).",
|
|
},
|
|
"autoPresence.exhaustedText": {
|
|
label: "Discord Auto Presence Exhausted Text",
|
|
help: "Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.",
|
|
},
|
|
activityType: {
|
|
label: "Discord Presence Activity Type",
|
|
help: "Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).",
|
|
},
|
|
activityUrl: {
|
|
label: "Discord Presence Activity URL",
|
|
help: "Discord presence streaming URL (required for activityType=1).",
|
|
},
|
|
allowBots: {
|
|
label: "Discord Allow Bot Messages",
|
|
help: 'Allow bot-authored messages to trigger Discord replies (default: false). Set "mentions" to only accept bot messages that mention the bot.',
|
|
},
|
|
token: {
|
|
label: "Discord Bot Token",
|
|
help: "Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.",
|
|
},
|
|
},
|
|
label: "Discord",
|
|
description: "very well supported right now.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "duckduckgo",
|
|
idHint: "duckduckgo",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/duckduckgo-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw DuckDuckGo plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "duckduckgo",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
region: {
|
|
type: "string",
|
|
},
|
|
safeSearch: {
|
|
type: "string",
|
|
enum: ["strict", "moderate", "off"],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
uiHints: {
|
|
"webSearch.region": {
|
|
label: "DuckDuckGo Region",
|
|
help: "Optional DuckDuckGo region code such as us-en, uk-en, or de-de.",
|
|
},
|
|
"webSearch.safeSearch": {
|
|
label: "DuckDuckGo SafeSearch",
|
|
help: "SafeSearch level for DuckDuckGo results.",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["duckduckgo"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "elevenlabs",
|
|
idHint: "elevenlabs",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/elevenlabs-speech",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw ElevenLabs speech plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "elevenlabs",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
contracts: {
|
|
speechProviders: ["elevenlabs"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "exa",
|
|
idHint: "exa",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/exa-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Exa plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "exa",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providerAuthEnvVars: {
|
|
exa: ["EXA_API_KEY"],
|
|
},
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Exa API Key",
|
|
help: "Exa Search API key (fallback: EXA_API_KEY env var).",
|
|
sensitive: true,
|
|
placeholder: "exa-...",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["exa"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "fal",
|
|
idHint: "fal",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/fal-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw fal provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "fal",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["fal"],
|
|
providerAuthEnvVars: {
|
|
fal: ["FAL_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "fal",
|
|
method: "api-key",
|
|
choiceId: "fal-api-key",
|
|
choiceLabel: "fal API key",
|
|
groupId: "fal",
|
|
groupLabel: "fal",
|
|
groupHint: "Image generation",
|
|
onboardingScopes: ["image-generation"],
|
|
optionKey: "falApiKey",
|
|
cliFlag: "--fal-api-key",
|
|
cliOption: "--fal-api-key <key>",
|
|
cliDescription: "fal API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
imageGenerationProviders: ["fal"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "feishu",
|
|
idHint: "feishu",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/feishu",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "feishu",
|
|
label: "Feishu",
|
|
selectionLabel: "Feishu/Lark (飞书)",
|
|
docsPath: "/channels/feishu",
|
|
docsLabel: "feishu",
|
|
blurb: "飞书/Lark enterprise messaging with doc/wiki/drive tools.",
|
|
aliases: ["lark"],
|
|
order: 35,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/feishu",
|
|
localPath: "extensions/feishu",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "feishu",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["feishu"],
|
|
skills: ["./skills"],
|
|
channelConfigs: {
|
|
feishu: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
appId: {
|
|
type: "string",
|
|
},
|
|
appSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
encryptKey: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
verificationToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
domain: {
|
|
default: "feishu",
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["feishu", "lark"],
|
|
},
|
|
{
|
|
type: "string",
|
|
format: "uri",
|
|
pattern: "^https:\\/\\/.*",
|
|
},
|
|
],
|
|
},
|
|
connectionMode: {
|
|
default: "websocket",
|
|
type: "string",
|
|
enum: ["websocket", "webhook"],
|
|
},
|
|
webhookPath: {
|
|
default: "/feishu/events",
|
|
type: "string",
|
|
},
|
|
webhookHost: {
|
|
type: "string",
|
|
},
|
|
webhookPort: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
mode: {
|
|
type: "string",
|
|
enum: ["native", "escape", "strip"],
|
|
},
|
|
tableMode: {
|
|
type: "string",
|
|
enum: ["native", "ascii", "simple"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["open", "pairing", "allowlist"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["open", "allowlist", "disabled"],
|
|
},
|
|
{},
|
|
],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupSenderAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
groupSessionScope: {
|
|
type: "string",
|
|
enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
|
|
},
|
|
topicSessionMode: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
replyInThread: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
minDelayMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
httpTimeoutMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 300000,
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
visibility: {
|
|
type: "string",
|
|
enum: ["visible", "hidden"],
|
|
},
|
|
intervalMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
renderMode: {
|
|
type: "string",
|
|
enum: ["auto", "raw", "card"],
|
|
},
|
|
streaming: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
doc: {
|
|
type: "boolean",
|
|
},
|
|
chat: {
|
|
type: "boolean",
|
|
},
|
|
wiki: {
|
|
type: "boolean",
|
|
},
|
|
drive: {
|
|
type: "boolean",
|
|
},
|
|
perm: {
|
|
type: "boolean",
|
|
},
|
|
scopes: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
replyInThread: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
reactionNotifications: {
|
|
default: "own",
|
|
type: "string",
|
|
enum: ["off", "own", "all"],
|
|
},
|
|
typingIndicator: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
resolveSenderNames: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
groupSessionScope: {
|
|
type: "string",
|
|
enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
|
|
},
|
|
topicSessionMode: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
dynamicAgentCreation: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
workspaceTemplate: {
|
|
type: "string",
|
|
},
|
|
agentDirTemplate: {
|
|
type: "string",
|
|
},
|
|
maxAgents: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
appId: {
|
|
type: "string",
|
|
},
|
|
appSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
encryptKey: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
verificationToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
domain: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["feishu", "lark"],
|
|
},
|
|
{
|
|
type: "string",
|
|
format: "uri",
|
|
pattern: "^https:\\/\\/.*",
|
|
},
|
|
],
|
|
},
|
|
connectionMode: {
|
|
type: "string",
|
|
enum: ["websocket", "webhook"],
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
webhookHost: {
|
|
type: "string",
|
|
},
|
|
webhookPort: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
mode: {
|
|
type: "string",
|
|
enum: ["native", "escape", "strip"],
|
|
},
|
|
tableMode: {
|
|
type: "string",
|
|
enum: ["native", "ascii", "simple"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["open", "pairing", "allowlist"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["open", "allowlist", "disabled"],
|
|
},
|
|
{},
|
|
],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupSenderAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
groupSessionScope: {
|
|
type: "string",
|
|
enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
|
|
},
|
|
topicSessionMode: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
replyInThread: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
minDelayMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
httpTimeoutMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 300000,
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
visibility: {
|
|
type: "string",
|
|
enum: ["visible", "hidden"],
|
|
},
|
|
intervalMs: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
renderMode: {
|
|
type: "string",
|
|
enum: ["auto", "raw", "card"],
|
|
},
|
|
streaming: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
doc: {
|
|
type: "boolean",
|
|
},
|
|
chat: {
|
|
type: "boolean",
|
|
},
|
|
wiki: {
|
|
type: "boolean",
|
|
},
|
|
drive: {
|
|
type: "boolean",
|
|
},
|
|
perm: {
|
|
type: "boolean",
|
|
},
|
|
scopes: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
replyInThread: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all"],
|
|
},
|
|
typingIndicator: {
|
|
type: "boolean",
|
|
},
|
|
resolveSenderNames: {
|
|
type: "boolean",
|
|
},
|
|
groupSessionScope: {
|
|
type: "string",
|
|
enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
|
|
},
|
|
topicSessionMode: {
|
|
type: "string",
|
|
enum: ["disabled", "enabled"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
required: [
|
|
"domain",
|
|
"connectionMode",
|
|
"webhookPath",
|
|
"dmPolicy",
|
|
"groupPolicy",
|
|
"reactionNotifications",
|
|
"typingIndicator",
|
|
"resolveSenderNames",
|
|
],
|
|
additionalProperties: false,
|
|
},
|
|
label: "Feishu",
|
|
description: "飞书/Lark enterprise messaging with doc/wiki/drive tools.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "firecrawl",
|
|
idHint: "firecrawl",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/firecrawl-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Firecrawl plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "firecrawl",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providerAuthEnvVars: {
|
|
firecrawl: ["FIRECRAWL_API_KEY"],
|
|
},
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Firecrawl Search API Key",
|
|
help: "Firecrawl API key for web search (fallback: FIRECRAWL_API_KEY env var).",
|
|
sensitive: true,
|
|
placeholder: "fc-...",
|
|
},
|
|
"webSearch.baseUrl": {
|
|
label: "Firecrawl Search Base URL",
|
|
help: "Firecrawl Search base URL override.",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["firecrawl"],
|
|
tools: ["firecrawl_search", "firecrawl_scrape"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "github-copilot",
|
|
idHint: "github-copilot",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/github-copilot-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw GitHub Copilot provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "github-copilot",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["github-copilot"],
|
|
providerAuthEnvVars: {
|
|
"github-copilot": ["COPILOT_GITHUB_TOKEN", "GH_TOKEN", "GITHUB_TOKEN"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "github-copilot",
|
|
method: "device",
|
|
choiceId: "github-copilot",
|
|
choiceLabel: "GitHub Copilot",
|
|
choiceHint: "Device login with your GitHub account",
|
|
groupId: "copilot",
|
|
groupLabel: "Copilot",
|
|
groupHint: "GitHub + local proxy",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "google",
|
|
idHint: "google",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/google-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Google plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "google",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providers: ["google", "google-gemini-cli"],
|
|
cliBackends: ["google-gemini-cli"],
|
|
providerAuthEnvVars: {
|
|
google: ["GEMINI_API_KEY", "GOOGLE_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "google",
|
|
method: "api-key",
|
|
choiceId: "gemini-api-key",
|
|
choiceLabel: "Google Gemini API key",
|
|
groupId: "google",
|
|
groupLabel: "Google",
|
|
groupHint: "Gemini API key + OAuth",
|
|
optionKey: "geminiApiKey",
|
|
cliFlag: "--gemini-api-key",
|
|
cliOption: "--gemini-api-key <key>",
|
|
cliDescription: "Gemini API key",
|
|
},
|
|
{
|
|
provider: "google-gemini-cli",
|
|
method: "oauth",
|
|
choiceId: "google-gemini-cli",
|
|
choiceLabel: "Gemini CLI OAuth",
|
|
choiceHint: "Google OAuth with project-aware token payload",
|
|
groupId: "google",
|
|
groupLabel: "Google",
|
|
groupHint: "Gemini API key + OAuth",
|
|
},
|
|
],
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Gemini Search API Key",
|
|
help: "Gemini API key for Google Search grounding (fallback: GEMINI_API_KEY env var).",
|
|
sensitive: true,
|
|
placeholder: "AIza...",
|
|
},
|
|
"webSearch.model": {
|
|
label: "Gemini Search Model",
|
|
help: "Gemini model override for web search grounding.",
|
|
},
|
|
},
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["google"],
|
|
imageGenerationProviders: ["google"],
|
|
webSearchProviders: ["gemini"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "googlechat",
|
|
idHint: "googlechat",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/googlechat",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Google Chat channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "googlechat",
|
|
label: "Google Chat",
|
|
selectionLabel: "Google Chat (Chat API)",
|
|
detailLabel: "Google Chat",
|
|
docsPath: "/channels/googlechat",
|
|
docsLabel: "googlechat",
|
|
blurb: "Google Workspace Chat app via HTTP webhooks.",
|
|
aliases: ["gchat", "google-chat"],
|
|
order: 55,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/googlechat",
|
|
localPath: "extensions/googlechat",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "googlechat",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["googlechat"],
|
|
channelConfigs: {
|
|
googlechat: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
serviceAccount: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
serviceAccountRef: {
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
serviceAccountFile: {
|
|
type: "string",
|
|
},
|
|
audienceType: {
|
|
type: "string",
|
|
enum: ["app-url", "project-number"],
|
|
},
|
|
audience: {
|
|
type: "string",
|
|
},
|
|
appPrincipal: {
|
|
type: "string",
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
webhookUrl: {
|
|
type: "string",
|
|
},
|
|
botUser: {
|
|
type: "string",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streamMode: {
|
|
default: "replace",
|
|
type: "string",
|
|
enum: ["replace", "status_final", "append"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
required: ["policy"],
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
typingIndicator: {
|
|
type: "string",
|
|
enum: ["none", "message", "reaction"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
serviceAccount: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
serviceAccountRef: {
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
serviceAccountFile: {
|
|
type: "string",
|
|
},
|
|
audienceType: {
|
|
type: "string",
|
|
enum: ["app-url", "project-number"],
|
|
},
|
|
audience: {
|
|
type: "string",
|
|
},
|
|
appPrincipal: {
|
|
type: "string",
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
webhookUrl: {
|
|
type: "string",
|
|
},
|
|
botUser: {
|
|
type: "string",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streamMode: {
|
|
default: "replace",
|
|
type: "string",
|
|
enum: ["replace", "status_final", "append"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
required: ["policy"],
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
typingIndicator: {
|
|
type: "string",
|
|
enum: ["none", "message", "reaction"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["groupPolicy", "streamMode"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["groupPolicy", "streamMode"],
|
|
additionalProperties: false,
|
|
},
|
|
label: "Google Chat",
|
|
description: "Google Workspace Chat app via HTTP webhooks.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "groq",
|
|
idHint: "groq",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/groq-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Groq media-understanding provider",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "groq",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["groq"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "huggingface",
|
|
idHint: "huggingface",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/huggingface-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Hugging Face provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "huggingface",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["huggingface"],
|
|
providerAuthEnvVars: {
|
|
huggingface: ["HUGGINGFACE_HUB_TOKEN", "HF_TOKEN"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "huggingface",
|
|
method: "api-key",
|
|
choiceId: "huggingface-api-key",
|
|
choiceLabel: "Hugging Face API key",
|
|
choiceHint: "Inference API (HF token)",
|
|
groupId: "huggingface",
|
|
groupLabel: "Hugging Face",
|
|
groupHint: "Inference API (HF token)",
|
|
optionKey: "huggingfaceApiKey",
|
|
cliFlag: "--huggingface-api-key",
|
|
cliOption: "--huggingface-api-key <key>",
|
|
cliDescription: "Hugging Face API key (HF token)",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "imessage",
|
|
idHint: "imessage",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/imessage",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw iMessage channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "imessage",
|
|
label: "iMessage",
|
|
selectionLabel: "iMessage (imsg)",
|
|
detailLabel: "iMessage",
|
|
docsPath: "/channels/imessage",
|
|
docsLabel: "imessage",
|
|
blurb: "this is still a work in progress.",
|
|
aliases: ["imsg"],
|
|
systemImage: "message.fill",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "imessage",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["imessage"],
|
|
channelConfigs: {
|
|
imessage: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
cliPath: {
|
|
type: "string",
|
|
},
|
|
dbPath: {
|
|
type: "string",
|
|
},
|
|
remoteHost: {
|
|
type: "string",
|
|
},
|
|
service: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "imessage",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "sms",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
region: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
includeAttachments: {
|
|
type: "boolean",
|
|
},
|
|
attachmentRoots: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
remoteAttachmentRoots: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
cliPath: {
|
|
type: "string",
|
|
},
|
|
dbPath: {
|
|
type: "string",
|
|
},
|
|
remoteHost: {
|
|
type: "string",
|
|
},
|
|
service: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "imessage",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "sms",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
region: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
includeAttachments: {
|
|
type: "boolean",
|
|
},
|
|
attachmentRoots: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
remoteAttachmentRoots: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "iMessage",
|
|
help: "iMessage channel provider configuration for CLI integration and DM access policy handling. Use explicit CLI paths when runtime environments have non-standard binary locations.",
|
|
},
|
|
dmPolicy: {
|
|
label: "iMessage DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.imessage.allowFrom=["*"].',
|
|
},
|
|
configWrites: {
|
|
label: "iMessage Config Writes",
|
|
help: "Allow iMessage to write config in response to channel events/commands (default: true).",
|
|
},
|
|
cliPath: {
|
|
label: "iMessage CLI Path",
|
|
help: "Filesystem path to the iMessage bridge CLI binary used for send/receive operations. Set explicitly when the binary is not on PATH in service runtime environments.",
|
|
},
|
|
},
|
|
label: "iMessage",
|
|
description: "this is still a work in progress.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "irc",
|
|
idHint: "irc",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/irc",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw IRC channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "irc",
|
|
label: "IRC",
|
|
selectionLabel: "IRC (Server + Nick)",
|
|
detailLabel: "IRC",
|
|
docsPath: "/channels/irc",
|
|
docsLabel: "irc",
|
|
blurb: "classic IRC networks with DM/channel routing and pairing controls.",
|
|
systemImage: "network",
|
|
},
|
|
install: {
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "irc",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["irc"],
|
|
channelConfigs: {
|
|
irc: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
host: {
|
|
type: "string",
|
|
},
|
|
port: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 65535,
|
|
},
|
|
tls: {
|
|
type: "boolean",
|
|
},
|
|
nick: {
|
|
type: "string",
|
|
},
|
|
username: {
|
|
type: "string",
|
|
},
|
|
realname: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
type: "string",
|
|
},
|
|
passwordFile: {
|
|
type: "string",
|
|
},
|
|
nickserv: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
service: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
type: "string",
|
|
},
|
|
passwordFile: {
|
|
type: "string",
|
|
},
|
|
register: {
|
|
type: "boolean",
|
|
},
|
|
registerEmail: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
channels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
mentionPatterns: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
host: {
|
|
type: "string",
|
|
},
|
|
port: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 65535,
|
|
},
|
|
tls: {
|
|
type: "boolean",
|
|
},
|
|
nick: {
|
|
type: "string",
|
|
},
|
|
username: {
|
|
type: "string",
|
|
},
|
|
realname: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
type: "string",
|
|
},
|
|
passwordFile: {
|
|
type: "string",
|
|
},
|
|
nickserv: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
service: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
type: "string",
|
|
},
|
|
passwordFile: {
|
|
type: "string",
|
|
},
|
|
register: {
|
|
type: "boolean",
|
|
},
|
|
registerEmail: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
channels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
mentionPatterns: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "IRC",
|
|
help: "IRC channel provider configuration and compatibility settings for classic IRC transport workflows. Use this section when bridging legacy chat infrastructure into OpenClaw.",
|
|
},
|
|
dmPolicy: {
|
|
label: "IRC DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.irc.allowFrom=["*"].',
|
|
},
|
|
"nickserv.enabled": {
|
|
label: "IRC NickServ Enabled",
|
|
help: "Enable NickServ identify/register after connect (defaults to enabled when password is configured).",
|
|
},
|
|
"nickserv.service": {
|
|
label: "IRC NickServ Service",
|
|
help: "NickServ service nick (default: NickServ).",
|
|
},
|
|
"nickserv.password": {
|
|
label: "IRC NickServ Password",
|
|
help: "NickServ password used for IDENTIFY/REGISTER (sensitive).",
|
|
},
|
|
"nickserv.passwordFile": {
|
|
label: "IRC NickServ Password File",
|
|
help: "Optional file path containing NickServ password.",
|
|
},
|
|
"nickserv.register": {
|
|
label: "IRC NickServ Register",
|
|
help: "If true, send NickServ REGISTER on every connect. Use once for initial registration, then disable.",
|
|
},
|
|
"nickserv.registerEmail": {
|
|
label: "IRC NickServ Register Email",
|
|
help: "Email used with NickServ REGISTER (required when register=true).",
|
|
},
|
|
configWrites: {
|
|
label: "IRC Config Writes",
|
|
help: "Allow IRC to write config in response to channel events/commands (default: true).",
|
|
},
|
|
},
|
|
label: "IRC",
|
|
description: "classic IRC networks with DM/channel routing and pairing controls.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "kilocode",
|
|
idHint: "kilocode",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/kilocode-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Kilo Gateway provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "kilocode",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["kilocode"],
|
|
providerAuthEnvVars: {
|
|
kilocode: ["KILOCODE_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "kilocode",
|
|
method: "api-key",
|
|
choiceId: "kilocode-api-key",
|
|
choiceLabel: "Kilo Gateway API key",
|
|
choiceHint: "API key (OpenRouter-compatible)",
|
|
groupId: "kilocode",
|
|
groupLabel: "Kilo Gateway",
|
|
groupHint: "API key (OpenRouter-compatible)",
|
|
optionKey: "kilocodeApiKey",
|
|
cliFlag: "--kilocode-api-key",
|
|
cliOption: "--kilocode-api-key <key>",
|
|
cliDescription: "Kilo Gateway API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "kimi-coding",
|
|
idHint: "kimi",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/kimi-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Kimi provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "kimi",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["kimi", "kimi-coding"],
|
|
providerAuthEnvVars: {
|
|
kimi: ["KIMI_API_KEY", "KIMICODE_API_KEY"],
|
|
"kimi-coding": ["KIMI_API_KEY", "KIMICODE_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "kimi",
|
|
method: "api-key",
|
|
choiceId: "kimi-code-api-key",
|
|
choiceLabel: "Kimi Code API key (subscription)",
|
|
groupId: "moonshot",
|
|
groupLabel: "Moonshot AI (Kimi K2.5)",
|
|
groupHint: "Kimi K2.5",
|
|
optionKey: "kimiCodeApiKey",
|
|
cliFlag: "--kimi-code-api-key",
|
|
cliOption: "--kimi-code-api-key <key>",
|
|
cliDescription: "Kimi Code API key (subscription)",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "line",
|
|
idHint: "line",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/line",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw LINE channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "line",
|
|
label: "LINE",
|
|
selectionLabel: "LINE (Messaging API)",
|
|
docsPath: "/channels/line",
|
|
docsLabel: "line",
|
|
blurb: "LINE Messaging API bot for Japan/Taiwan/Thailand markets.",
|
|
order: 75,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/line",
|
|
localPath: "extensions/line",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "line",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["line"],
|
|
channelConfigs: {
|
|
line: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
channelAccessToken: {
|
|
type: "string",
|
|
},
|
|
channelSecret: {
|
|
type: "string",
|
|
},
|
|
tokenFile: {
|
|
type: "string",
|
|
},
|
|
secretFile: {
|
|
type: "string",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["open", "allowlist", "pairing", "disabled"],
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "allowlist", "disabled"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
channelAccessToken: {
|
|
type: "string",
|
|
},
|
|
channelSecret: {
|
|
type: "string",
|
|
},
|
|
tokenFile: {
|
|
type: "string",
|
|
},
|
|
secretFile: {
|
|
type: "string",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["open", "allowlist", "pairing", "disabled"],
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "allowlist", "disabled"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
label: "LINE",
|
|
description: "LINE Messaging API bot for Japan/Taiwan/Thailand markets.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "llm-task",
|
|
idHint: "llm-task",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/llm-task",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw JSON-only LLM task plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "llm-task",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
defaultProvider: {
|
|
type: "string",
|
|
},
|
|
defaultModel: {
|
|
type: "string",
|
|
},
|
|
defaultAuthProfileId: {
|
|
type: "string",
|
|
},
|
|
allowedModels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
description: "Allowlist of provider/model keys like openai-codex/gpt-5.2.",
|
|
},
|
|
maxTokens: {
|
|
type: "number",
|
|
},
|
|
timeoutMs: {
|
|
type: "number",
|
|
},
|
|
},
|
|
},
|
|
name: "LLM Task",
|
|
description: "Generic JSON-only LLM tool for structured tasks callable from workflows.",
|
|
},
|
|
},
|
|
{
|
|
dirName: "lobster",
|
|
idHint: "lobster",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/lobster",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "lobster",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
name: "Lobster",
|
|
description: "Typed workflow tool with resumable approvals.",
|
|
},
|
|
},
|
|
{
|
|
dirName: "matrix",
|
|
idHint: "matrix",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/matrix",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Matrix channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "matrix",
|
|
label: "Matrix",
|
|
selectionLabel: "Matrix (plugin)",
|
|
docsPath: "/channels/matrix",
|
|
docsLabel: "matrix",
|
|
blurb: "open protocol; install the plugin to enable.",
|
|
order: 70,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/matrix",
|
|
localPath: "extensions/matrix",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "matrix",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["matrix"],
|
|
channelConfigs: {
|
|
matrix: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
homeserver: {
|
|
type: "string",
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
userId: {
|
|
type: "string",
|
|
},
|
|
accessToken: {
|
|
type: "string",
|
|
},
|
|
password: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
deviceId: {
|
|
type: "string",
|
|
},
|
|
deviceName: {
|
|
type: "string",
|
|
},
|
|
avatarUrl: {
|
|
type: "string",
|
|
},
|
|
initialSyncLimit: {
|
|
type: "number",
|
|
},
|
|
encryption: {
|
|
type: "boolean",
|
|
},
|
|
allowlistOnly: {
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "mentions",
|
|
},
|
|
],
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
replyToMode: {
|
|
type: "string",
|
|
enum: ["off", "first", "all"],
|
|
},
|
|
threadReplies: {
|
|
type: "string",
|
|
enum: ["off", "inbound", "always"],
|
|
},
|
|
textChunkLimit: {
|
|
type: "number",
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
ackReactionScope: {
|
|
type: "string",
|
|
enum: ["group-mentions", "group-all", "direct", "all", "none", "off"],
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own"],
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
startupVerification: {
|
|
type: "string",
|
|
enum: ["off", "if-unverified"],
|
|
},
|
|
startupVerificationCooldownHours: {
|
|
type: "number",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
},
|
|
autoJoin: {
|
|
type: "string",
|
|
enum: ["always", "allowlist", "off"],
|
|
},
|
|
autoJoinAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "mentions",
|
|
},
|
|
],
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
autoReply: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
rooms: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "mentions",
|
|
},
|
|
],
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
autoReply: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
messages: {
|
|
type: "boolean",
|
|
},
|
|
pins: {
|
|
type: "boolean",
|
|
},
|
|
profile: {
|
|
type: "boolean",
|
|
},
|
|
memberInfo: {
|
|
type: "boolean",
|
|
},
|
|
channelInfo: {
|
|
type: "boolean",
|
|
},
|
|
verification: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
label: "Matrix",
|
|
description: "open protocol; install the plugin to enable.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "mattermost",
|
|
idHint: "mattermost",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/mattermost",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Mattermost channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "mattermost",
|
|
label: "Mattermost",
|
|
selectionLabel: "Mattermost (plugin)",
|
|
docsPath: "/channels/mattermost",
|
|
docsLabel: "mattermost",
|
|
blurb: "self-hosted Slack-style chat; install the plugin to enable.",
|
|
order: 65,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/mattermost",
|
|
localPath: "extensions/mattermost",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "mattermost",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["mattermost"],
|
|
channelConfigs: {
|
|
mattermost: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
chatmode: {
|
|
type: "string",
|
|
enum: ["oncall", "onmessage", "onchar"],
|
|
},
|
|
oncharPrefixes: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
replyToMode: {
|
|
type: "string",
|
|
enum: ["off", "first", "all"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
callbackPath: {
|
|
type: "string",
|
|
},
|
|
callbackUrl: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
interactions: {
|
|
type: "object",
|
|
properties: {
|
|
callbackBaseUrl: {
|
|
type: "string",
|
|
},
|
|
allowedSourceIps: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
dmChannelRetry: {
|
|
type: "object",
|
|
properties: {
|
|
maxRetries: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 10,
|
|
},
|
|
initialDelayMs: {
|
|
type: "integer",
|
|
minimum: 100,
|
|
maximum: 60000,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 60000,
|
|
},
|
|
timeoutMs: {
|
|
type: "integer",
|
|
minimum: 5000,
|
|
maximum: 120000,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
chatmode: {
|
|
type: "string",
|
|
enum: ["oncall", "onmessage", "onchar"],
|
|
},
|
|
oncharPrefixes: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
replyToMode: {
|
|
type: "string",
|
|
enum: ["off", "first", "all"],
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
callbackPath: {
|
|
type: "string",
|
|
},
|
|
callbackUrl: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
interactions: {
|
|
type: "object",
|
|
properties: {
|
|
callbackBaseUrl: {
|
|
type: "string",
|
|
},
|
|
allowedSourceIps: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
dmChannelRetry: {
|
|
type: "object",
|
|
properties: {
|
|
maxRetries: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 10,
|
|
},
|
|
initialDelayMs: {
|
|
type: "integer",
|
|
minimum: 100,
|
|
maximum: 60000,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 60000,
|
|
},
|
|
timeoutMs: {
|
|
type: "integer",
|
|
minimum: 5000,
|
|
maximum: 120000,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
label: "Mattermost",
|
|
description: "self-hosted Slack-style chat; install the plugin to enable.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "memory-core",
|
|
idHint: "memory-core",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/memory-core",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw core memory search plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "memory-core",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
kind: "memory",
|
|
},
|
|
},
|
|
{
|
|
dirName: "memory-lancedb",
|
|
idHint: "memory-lancedb",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/memory-lancedb",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
install: {
|
|
npmSpec: "@openclaw/memory-lancedb",
|
|
localPath: "extensions/memory-lancedb",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "memory-lancedb",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
embedding: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: "string",
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
dimensions: {
|
|
type: "number",
|
|
},
|
|
},
|
|
required: ["apiKey"],
|
|
},
|
|
dbPath: {
|
|
type: "string",
|
|
},
|
|
autoCapture: {
|
|
type: "boolean",
|
|
},
|
|
autoRecall: {
|
|
type: "boolean",
|
|
},
|
|
captureMaxChars: {
|
|
type: "number",
|
|
minimum: 100,
|
|
maximum: 10000,
|
|
},
|
|
},
|
|
required: ["embedding"],
|
|
},
|
|
kind: "memory",
|
|
uiHints: {
|
|
"embedding.apiKey": {
|
|
label: "OpenAI API Key",
|
|
sensitive: true,
|
|
placeholder: "sk-proj-...",
|
|
help: "API key for OpenAI embeddings (or use ${OPENAI_API_KEY})",
|
|
},
|
|
"embedding.model": {
|
|
label: "Embedding Model",
|
|
placeholder: "text-embedding-3-small",
|
|
help: "OpenAI embedding model to use",
|
|
},
|
|
"embedding.baseUrl": {
|
|
label: "Base URL",
|
|
placeholder: "https://api.openai.com/v1",
|
|
help: "Base URL for compatible providers (e.g. http://localhost:11434/v1)",
|
|
advanced: true,
|
|
},
|
|
"embedding.dimensions": {
|
|
label: "Dimensions",
|
|
placeholder: "1536",
|
|
help: "Vector dimensions for custom models (required for non-standard models)",
|
|
advanced: true,
|
|
},
|
|
dbPath: {
|
|
label: "Database Path",
|
|
placeholder: "~/.openclaw/memory/lancedb",
|
|
advanced: true,
|
|
},
|
|
autoCapture: {
|
|
label: "Auto-Capture",
|
|
help: "Automatically capture important information from conversations",
|
|
},
|
|
autoRecall: {
|
|
label: "Auto-Recall",
|
|
help: "Automatically inject relevant memories into context",
|
|
},
|
|
captureMaxChars: {
|
|
label: "Capture Max Chars",
|
|
help: "Maximum message length eligible for auto-capture",
|
|
advanced: true,
|
|
placeholder: "500",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "microsoft",
|
|
idHint: "microsoft",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/microsoft-speech",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Microsoft speech plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "microsoft",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
contracts: {
|
|
speechProviders: ["microsoft"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "microsoft-foundry",
|
|
idHint: "microsoft-foundry",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/microsoft-foundry",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Microsoft Foundry provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "microsoft-foundry",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
enabledByDefault: true,
|
|
providers: ["microsoft-foundry"],
|
|
providerAuthEnvVars: {
|
|
"microsoft-foundry": ["AZURE_OPENAI_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "microsoft-foundry",
|
|
method: "entra-id",
|
|
choiceId: "microsoft-foundry-entra",
|
|
choiceLabel: "Microsoft Foundry (Entra ID / az login)",
|
|
choiceHint: "Use your Azure login — no API key needed",
|
|
groupId: "microsoft-foundry",
|
|
groupLabel: "Microsoft Foundry",
|
|
groupHint: "Entra ID + API key",
|
|
},
|
|
{
|
|
provider: "microsoft-foundry",
|
|
method: "api-key",
|
|
choiceId: "microsoft-foundry-apikey",
|
|
choiceLabel: "Microsoft Foundry (API key)",
|
|
choiceHint: "Use an Azure OpenAI API key directly",
|
|
groupId: "microsoft-foundry",
|
|
groupLabel: "Microsoft Foundry",
|
|
groupHint: "Entra ID + API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "minimax",
|
|
idHint: "minimax",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/minimax-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw MiniMax provider and OAuth plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "minimax",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["minimax", "minimax-portal"],
|
|
providerAuthEnvVars: {
|
|
minimax: ["MINIMAX_API_KEY"],
|
|
"minimax-portal": ["MINIMAX_OAUTH_TOKEN", "MINIMAX_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "minimax-portal",
|
|
method: "oauth",
|
|
choiceId: "minimax-global-oauth",
|
|
choiceLabel: "MiniMax OAuth (Global)",
|
|
choiceHint: "Global endpoint - api.minimax.io",
|
|
groupId: "minimax",
|
|
groupLabel: "MiniMax",
|
|
groupHint: "M2.7 (recommended)",
|
|
},
|
|
{
|
|
provider: "minimax",
|
|
method: "api-global",
|
|
choiceId: "minimax-global-api",
|
|
choiceLabel: "MiniMax API key (Global)",
|
|
choiceHint: "Global endpoint - api.minimax.io",
|
|
groupId: "minimax",
|
|
groupLabel: "MiniMax",
|
|
groupHint: "M2.7 (recommended)",
|
|
optionKey: "minimaxApiKey",
|
|
cliFlag: "--minimax-api-key",
|
|
cliOption: "--minimax-api-key <key>",
|
|
cliDescription: "MiniMax API key",
|
|
},
|
|
{
|
|
provider: "minimax-portal",
|
|
method: "oauth-cn",
|
|
choiceId: "minimax-cn-oauth",
|
|
choiceLabel: "MiniMax OAuth (CN)",
|
|
choiceHint: "CN endpoint - api.minimaxi.com",
|
|
groupId: "minimax",
|
|
groupLabel: "MiniMax",
|
|
groupHint: "M2.7 (recommended)",
|
|
},
|
|
{
|
|
provider: "minimax",
|
|
method: "api-cn",
|
|
choiceId: "minimax-cn-api",
|
|
choiceLabel: "MiniMax API key (CN)",
|
|
choiceHint: "CN endpoint - api.minimaxi.com",
|
|
groupId: "minimax",
|
|
groupLabel: "MiniMax",
|
|
groupHint: "M2.7 (recommended)",
|
|
optionKey: "minimaxApiKey",
|
|
cliFlag: "--minimax-api-key",
|
|
cliOption: "--minimax-api-key <key>",
|
|
cliDescription: "MiniMax API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["minimax", "minimax-portal"],
|
|
imageGenerationProviders: ["minimax", "minimax-portal"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "mistral",
|
|
idHint: "mistral",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/mistral-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Mistral provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "mistral",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["mistral"],
|
|
providerAuthEnvVars: {
|
|
mistral: ["MISTRAL_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "mistral",
|
|
method: "api-key",
|
|
choiceId: "mistral-api-key",
|
|
choiceLabel: "Mistral API key",
|
|
groupId: "mistral",
|
|
groupLabel: "Mistral AI",
|
|
groupHint: "API key",
|
|
optionKey: "mistralApiKey",
|
|
cliFlag: "--mistral-api-key",
|
|
cliOption: "--mistral-api-key <key>",
|
|
cliDescription: "Mistral API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["mistral"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "modelstudio",
|
|
idHint: "modelstudio",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/modelstudio-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Model Studio provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "modelstudio",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["modelstudio"],
|
|
providerAuthEnvVars: {
|
|
modelstudio: ["MODELSTUDIO_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "modelstudio",
|
|
method: "standard-api-key-cn",
|
|
choiceId: "modelstudio-standard-api-key-cn",
|
|
choiceLabel: "Standard API Key for China (pay-as-you-go)",
|
|
choiceHint: "Endpoint: dashscope.aliyuncs.com",
|
|
groupId: "modelstudio",
|
|
groupLabel: "Qwen (Alibaba Cloud Model Studio)",
|
|
groupHint: "Standard / Coding Plan (CN / Global)",
|
|
optionKey: "modelstudioStandardApiKeyCn",
|
|
cliFlag: "--modelstudio-standard-api-key-cn",
|
|
cliOption: "--modelstudio-standard-api-key-cn <key>",
|
|
cliDescription: "Alibaba Cloud Model Studio Standard API key (China)",
|
|
},
|
|
{
|
|
provider: "modelstudio",
|
|
method: "standard-api-key",
|
|
choiceId: "modelstudio-standard-api-key",
|
|
choiceLabel: "Standard API Key for Global/Intl (pay-as-you-go)",
|
|
choiceHint: "Endpoint: dashscope-intl.aliyuncs.com",
|
|
groupId: "modelstudio",
|
|
groupLabel: "Qwen (Alibaba Cloud Model Studio)",
|
|
groupHint: "Standard / Coding Plan (CN / Global)",
|
|
optionKey: "modelstudioStandardApiKey",
|
|
cliFlag: "--modelstudio-standard-api-key",
|
|
cliOption: "--modelstudio-standard-api-key <key>",
|
|
cliDescription: "Alibaba Cloud Model Studio Standard API key (Global/Intl)",
|
|
},
|
|
{
|
|
provider: "modelstudio",
|
|
method: "api-key-cn",
|
|
choiceId: "modelstudio-api-key-cn",
|
|
choiceLabel: "Coding Plan API Key for China (subscription)",
|
|
choiceHint: "Endpoint: coding.dashscope.aliyuncs.com",
|
|
groupId: "modelstudio",
|
|
groupLabel: "Qwen (Alibaba Cloud Model Studio)",
|
|
groupHint: "Standard / Coding Plan (CN / Global)",
|
|
optionKey: "modelstudioApiKeyCn",
|
|
cliFlag: "--modelstudio-api-key-cn",
|
|
cliOption: "--modelstudio-api-key-cn <key>",
|
|
cliDescription: "Alibaba Cloud Model Studio Coding Plan API key (China)",
|
|
},
|
|
{
|
|
provider: "modelstudio",
|
|
method: "api-key",
|
|
choiceId: "modelstudio-api-key",
|
|
choiceLabel: "Coding Plan API Key for Global/Intl (subscription)",
|
|
choiceHint: "Endpoint: coding-intl.dashscope.aliyuncs.com",
|
|
groupId: "modelstudio",
|
|
groupLabel: "Qwen (Alibaba Cloud Model Studio)",
|
|
groupHint: "Standard / Coding Plan (CN / Global)",
|
|
optionKey: "modelstudioApiKey",
|
|
cliFlag: "--modelstudio-api-key",
|
|
cliOption: "--modelstudio-api-key <key>",
|
|
cliDescription: "Alibaba Cloud Model Studio Coding Plan API key (Global/Intl)",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "moonshot",
|
|
idHint: "moonshot",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/moonshot-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Moonshot provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "moonshot",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providers: ["moonshot"],
|
|
providerAuthEnvVars: {
|
|
moonshot: ["MOONSHOT_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "moonshot",
|
|
method: "api-key",
|
|
choiceId: "moonshot-api-key",
|
|
choiceLabel: "Moonshot API key (.ai)",
|
|
groupId: "moonshot",
|
|
groupLabel: "Moonshot AI (Kimi K2.5)",
|
|
groupHint: "Kimi K2.5",
|
|
optionKey: "moonshotApiKey",
|
|
cliFlag: "--moonshot-api-key",
|
|
cliOption: "--moonshot-api-key <key>",
|
|
cliDescription: "Moonshot API key",
|
|
},
|
|
{
|
|
provider: "moonshot",
|
|
method: "api-key-cn",
|
|
choiceId: "moonshot-api-key-cn",
|
|
choiceLabel: "Moonshot API key (.cn)",
|
|
groupId: "moonshot",
|
|
groupLabel: "Moonshot AI (Kimi K2.5)",
|
|
groupHint: "Kimi K2.5",
|
|
optionKey: "moonshotApiKey",
|
|
cliFlag: "--moonshot-api-key",
|
|
cliOption: "--moonshot-api-key <key>",
|
|
cliDescription: "Moonshot API key",
|
|
},
|
|
],
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Kimi Search API Key",
|
|
help: "Moonshot/Kimi API key (fallback: KIMI_API_KEY or MOONSHOT_API_KEY env var).",
|
|
sensitive: true,
|
|
},
|
|
"webSearch.baseUrl": {
|
|
label: "Kimi Search Base URL",
|
|
help: "Kimi base URL override.",
|
|
},
|
|
"webSearch.model": {
|
|
label: "Kimi Search Model",
|
|
help: "Kimi model override.",
|
|
},
|
|
},
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["moonshot"],
|
|
webSearchProviders: ["kimi"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "msteams",
|
|
idHint: "msteams",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/msteams",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Microsoft Teams channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "msteams",
|
|
label: "Microsoft Teams",
|
|
selectionLabel: "Microsoft Teams (Teams SDK)",
|
|
docsPath: "/channels/msteams",
|
|
docsLabel: "msteams",
|
|
blurb: "Teams SDK; enterprise support.",
|
|
aliases: ["teams"],
|
|
order: 60,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/msteams",
|
|
localPath: "extensions/msteams",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "msteams",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["msteams"],
|
|
channelConfigs: {
|
|
msteams: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
appId: {
|
|
type: "string",
|
|
},
|
|
appPassword: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
tenantId: {
|
|
type: "string",
|
|
},
|
|
webhook: {
|
|
type: "object",
|
|
properties: {
|
|
port: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
path: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
mediaAllowHosts: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
mediaAuthAllowHosts: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
replyStyle: {
|
|
type: "string",
|
|
enum: ["thread", "top-level"],
|
|
},
|
|
teams: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
replyStyle: {
|
|
type: "string",
|
|
enum: ["thread", "top-level"],
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
replyStyle: {
|
|
type: "string",
|
|
enum: ["thread", "top-level"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
sharePointSiteId: {
|
|
type: "string",
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
welcomeCard: {
|
|
type: "boolean",
|
|
},
|
|
promptStarters: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupWelcomeCard: {
|
|
type: "boolean",
|
|
},
|
|
feedbackEnabled: {
|
|
type: "boolean",
|
|
},
|
|
feedbackReflection: {
|
|
type: "boolean",
|
|
},
|
|
feedbackReflectionCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "MS Teams",
|
|
help: "Microsoft Teams channel provider configuration and provider-specific policy toggles. Use this section to isolate Teams behavior from other enterprise chat providers.",
|
|
},
|
|
configWrites: {
|
|
label: "MS Teams Config Writes",
|
|
help: "Allow Microsoft Teams to write config in response to channel events/commands (default: true).",
|
|
},
|
|
},
|
|
label: "Microsoft Teams",
|
|
description: "Teams SDK; enterprise support.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "nextcloud-talk",
|
|
idHint: "nextcloud-talk",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/nextcloud-talk",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Nextcloud Talk channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "nextcloud-talk",
|
|
label: "Nextcloud Talk",
|
|
selectionLabel: "Nextcloud Talk (self-hosted)",
|
|
docsPath: "/channels/nextcloud-talk",
|
|
docsLabel: "nextcloud-talk",
|
|
blurb: "Self-hosted chat via Nextcloud Talk webhook bots.",
|
|
aliases: ["nc-talk", "nc"],
|
|
order: 65,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/nextcloud-talk",
|
|
localPath: "extensions/nextcloud-talk",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "nextcloud-talk",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["nextcloud-talk"],
|
|
channelConfigs: {
|
|
"nextcloud-talk": {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
botSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
botSecretFile: {
|
|
type: "string",
|
|
},
|
|
apiUser: {
|
|
type: "string",
|
|
},
|
|
apiPassword: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
apiPasswordFile: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
webhookPort: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
webhookHost: {
|
|
type: "string",
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
webhookPublicUrl: {
|
|
type: "string",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
rooms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
botSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
botSecretFile: {
|
|
type: "string",
|
|
},
|
|
apiUser: {
|
|
type: "string",
|
|
},
|
|
apiPassword: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
apiPasswordFile: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
webhookPort: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
webhookHost: {
|
|
type: "string",
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
webhookPublicUrl: {
|
|
type: "string",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
rooms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
label: "Nextcloud Talk",
|
|
description: "Self-hosted chat via Nextcloud Talk webhook bots.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "nostr",
|
|
idHint: "nostr",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/nostr",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "nostr",
|
|
label: "Nostr",
|
|
selectionLabel: "Nostr (NIP-04 DMs)",
|
|
docsPath: "/channels/nostr",
|
|
docsLabel: "nostr",
|
|
blurb: "Decentralized protocol; encrypted DMs via NIP-04.",
|
|
order: 55,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/nostr",
|
|
localPath: "extensions/nostr",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "nostr",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["nostr"],
|
|
channelConfigs: {
|
|
nostr: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
privateKey: {
|
|
type: "string",
|
|
},
|
|
relays: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
profile: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
maxLength: 256,
|
|
},
|
|
displayName: {
|
|
type: "string",
|
|
maxLength: 256,
|
|
},
|
|
about: {
|
|
type: "string",
|
|
maxLength: 2000,
|
|
},
|
|
picture: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
banner: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
website: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
nip05: {
|
|
type: "string",
|
|
},
|
|
lud16: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
label: "Nostr",
|
|
description: "Decentralized protocol; encrypted DMs via NIP-04.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "nvidia",
|
|
idHint: "nvidia",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/nvidia-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw NVIDIA provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "nvidia",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["nvidia"],
|
|
providerAuthEnvVars: {
|
|
nvidia: ["NVIDIA_API_KEY"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "ollama",
|
|
idHint: "ollama",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/ollama-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Ollama provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "ollama",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["ollama"],
|
|
providerAuthEnvVars: {
|
|
ollama: ["OLLAMA_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "ollama",
|
|
method: "local",
|
|
choiceId: "ollama",
|
|
choiceLabel: "Ollama",
|
|
choiceHint: "Cloud and local open models",
|
|
groupId: "ollama",
|
|
groupLabel: "Ollama",
|
|
groupHint: "Cloud and local open models",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "open-prose",
|
|
idHint: "open-prose",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/open-prose",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenProse VM skill pack plugin (slash command + telemetry).",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "open-prose",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
skills: ["./skills"],
|
|
name: "OpenProse",
|
|
description: "OpenProse VM skill pack with a /prose slash command.",
|
|
},
|
|
},
|
|
{
|
|
dirName: "openai",
|
|
idHint: "openai",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/openai-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw OpenAI provider plugins",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "openai",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["openai", "openai-codex"],
|
|
cliBackends: ["codex-cli"],
|
|
providerAuthEnvVars: {
|
|
openai: ["OPENAI_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "openai-codex",
|
|
method: "oauth",
|
|
choiceId: "openai-codex",
|
|
choiceLabel: "OpenAI Codex (ChatGPT OAuth)",
|
|
choiceHint: "Browser sign-in",
|
|
groupId: "openai",
|
|
groupLabel: "OpenAI",
|
|
groupHint: "Codex OAuth + API key",
|
|
},
|
|
{
|
|
provider: "openai",
|
|
method: "api-key",
|
|
choiceId: "openai-api-key",
|
|
choiceLabel: "OpenAI API key",
|
|
groupId: "openai",
|
|
groupLabel: "OpenAI",
|
|
groupHint: "Codex OAuth + API key",
|
|
optionKey: "openaiApiKey",
|
|
cliFlag: "--openai-api-key",
|
|
cliOption: "--openai-api-key <key>",
|
|
cliDescription: "OpenAI API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
speechProviders: ["openai"],
|
|
mediaUnderstandingProviders: ["openai", "openai-codex"],
|
|
imageGenerationProviders: ["openai"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "opencode",
|
|
idHint: "opencode",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/opencode-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw OpenCode Zen provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "opencode",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["opencode"],
|
|
providerAuthEnvVars: {
|
|
opencode: ["OPENCODE_API_KEY", "OPENCODE_ZEN_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "opencode",
|
|
method: "api-key",
|
|
choiceId: "opencode-zen",
|
|
choiceLabel: "OpenCode Zen catalog",
|
|
groupId: "opencode",
|
|
groupLabel: "OpenCode",
|
|
groupHint: "Shared API key for Zen + Go catalogs",
|
|
optionKey: "opencodeZenApiKey",
|
|
cliFlag: "--opencode-zen-api-key",
|
|
cliOption: "--opencode-zen-api-key <key>",
|
|
cliDescription: "OpenCode API key (Zen catalog)",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "opencode-go",
|
|
idHint: "opencode-go",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/opencode-go-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw OpenCode Go provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "opencode-go",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["opencode-go"],
|
|
providerAuthEnvVars: {
|
|
"opencode-go": ["OPENCODE_API_KEY", "OPENCODE_ZEN_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "opencode-go",
|
|
method: "api-key",
|
|
choiceId: "opencode-go",
|
|
choiceLabel: "OpenCode Go catalog",
|
|
groupId: "opencode",
|
|
groupLabel: "OpenCode",
|
|
groupHint: "Shared API key for Zen + Go catalogs",
|
|
optionKey: "opencodeGoApiKey",
|
|
cliFlag: "--opencode-go-api-key",
|
|
cliOption: "--opencode-go-api-key <key>",
|
|
cliDescription: "OpenCode API key (Go catalog)",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "openrouter",
|
|
idHint: "openrouter",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/openrouter-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw OpenRouter provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "openrouter",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["openrouter"],
|
|
providerAuthEnvVars: {
|
|
openrouter: ["OPENROUTER_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "openrouter",
|
|
method: "api-key",
|
|
choiceId: "openrouter-api-key",
|
|
choiceLabel: "OpenRouter API key",
|
|
groupId: "openrouter",
|
|
groupLabel: "OpenRouter",
|
|
groupHint: "API key",
|
|
optionKey: "openrouterApiKey",
|
|
cliFlag: "--openrouter-api-key",
|
|
cliOption: "--openrouter-api-key <key>",
|
|
cliDescription: "OpenRouter API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["openrouter"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "openshell",
|
|
idHint: "openshell",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/openshell-sandbox",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw OpenShell sandbox backend",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "openshell",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
mode: {
|
|
type: "string",
|
|
enum: ["mirror", "remote"],
|
|
},
|
|
command: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
gateway: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
gatewayEndpoint: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
from: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
providers: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
gpu: {
|
|
type: "boolean",
|
|
},
|
|
autoProviders: {
|
|
type: "boolean",
|
|
},
|
|
remoteWorkspaceDir: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
remoteAgentWorkspaceDir: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
timeoutSeconds: {
|
|
type: "number",
|
|
minimum: 1,
|
|
},
|
|
},
|
|
},
|
|
name: "OpenShell Sandbox",
|
|
description:
|
|
"Sandbox backend powered by OpenShell with mirrored local workspaces and SSH-based command execution.",
|
|
uiHints: {
|
|
mode: {
|
|
label: "Mode",
|
|
help: "Sandbox mode. Use mirror for the default local-workspace flow or remote for a fully remote workspace.",
|
|
},
|
|
command: {
|
|
label: "OpenShell Command",
|
|
help: "Path or command name for the openshell CLI.",
|
|
},
|
|
gateway: {
|
|
label: "Gateway Name",
|
|
help: "Optional OpenShell gateway name passed as --gateway.",
|
|
},
|
|
gatewayEndpoint: {
|
|
label: "Gateway Endpoint",
|
|
help: "Optional OpenShell gateway endpoint passed as --gateway-endpoint.",
|
|
},
|
|
from: {
|
|
label: "Sandbox Source",
|
|
help: "OpenShell sandbox source for first-time create. Defaults to openclaw.",
|
|
},
|
|
policy: {
|
|
label: "Policy File",
|
|
help: "Optional path to a custom OpenShell sandbox policy YAML.",
|
|
},
|
|
providers: {
|
|
label: "Providers",
|
|
help: "Provider names to attach when a sandbox is created.",
|
|
},
|
|
gpu: {
|
|
label: "GPU",
|
|
help: "Request GPU resources when creating the sandbox.",
|
|
advanced: true,
|
|
},
|
|
autoProviders: {
|
|
label: "Auto-create Providers",
|
|
help: "When enabled, pass --auto-providers during sandbox create.",
|
|
advanced: true,
|
|
},
|
|
remoteWorkspaceDir: {
|
|
label: "Remote Workspace Dir",
|
|
help: "Primary writable workspace inside the OpenShell sandbox.",
|
|
advanced: true,
|
|
},
|
|
remoteAgentWorkspaceDir: {
|
|
label: "Remote Agent Dir",
|
|
help: "Mirror path for the real agent workspace when workspaceAccess is read-only.",
|
|
advanced: true,
|
|
},
|
|
timeoutSeconds: {
|
|
label: "Command Timeout Seconds",
|
|
help: "Timeout for openshell CLI operations such as create/upload/download.",
|
|
advanced: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "perplexity",
|
|
idHint: "perplexity",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/perplexity-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Perplexity plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "perplexity",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providerAuthEnvVars: {
|
|
perplexity: ["PERPLEXITY_API_KEY", "OPENROUTER_API_KEY"],
|
|
},
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Perplexity API Key",
|
|
help: "Perplexity or OpenRouter API key for web search.",
|
|
sensitive: true,
|
|
placeholder: "pplx-...",
|
|
},
|
|
"webSearch.baseUrl": {
|
|
label: "Perplexity Base URL",
|
|
help: "Optional Perplexity/OpenRouter chat-completions base URL override.",
|
|
},
|
|
"webSearch.model": {
|
|
label: "Perplexity Model",
|
|
help: "Optional Sonar/OpenRouter model override.",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["perplexity"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "qianfan",
|
|
idHint: "qianfan",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/qianfan-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Qianfan provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "qianfan",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["qianfan"],
|
|
providerAuthEnvVars: {
|
|
qianfan: ["QIANFAN_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "qianfan",
|
|
method: "api-key",
|
|
choiceId: "qianfan-api-key",
|
|
choiceLabel: "Qianfan API key",
|
|
groupId: "qianfan",
|
|
groupLabel: "Qianfan",
|
|
groupHint: "API key",
|
|
optionKey: "qianfanApiKey",
|
|
cliFlag: "--qianfan-api-key",
|
|
cliOption: "--qianfan-api-key <key>",
|
|
cliDescription: "QIANFAN API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "sglang",
|
|
idHint: "sglang",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/sglang-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw SGLang provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "sglang",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["sglang"],
|
|
providerAuthEnvVars: {
|
|
sglang: ["SGLANG_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "sglang",
|
|
method: "custom",
|
|
choiceId: "sglang",
|
|
choiceLabel: "SGLang",
|
|
choiceHint: "Fast self-hosted OpenAI-compatible server",
|
|
groupId: "sglang",
|
|
groupLabel: "SGLang",
|
|
groupHint: "Fast self-hosted server",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "signal",
|
|
idHint: "signal",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/signal",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Signal channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "signal",
|
|
label: "Signal",
|
|
selectionLabel: "Signal (signal-cli)",
|
|
detailLabel: "Signal REST",
|
|
docsPath: "/channels/signal",
|
|
docsLabel: "signal",
|
|
blurb: 'signal-cli linked device; more setup (David Reagans: "Hop on Discord.").',
|
|
systemImage: "antenna.radiowaves.left.and.right",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "signal",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["signal"],
|
|
channelConfigs: {
|
|
signal: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
account: {
|
|
type: "string",
|
|
},
|
|
accountUuid: {
|
|
type: "string",
|
|
},
|
|
httpUrl: {
|
|
type: "string",
|
|
},
|
|
httpHost: {
|
|
type: "string",
|
|
},
|
|
httpPort: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
cliPath: {
|
|
type: "string",
|
|
},
|
|
autoStart: {
|
|
type: "boolean",
|
|
},
|
|
startupTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 120000,
|
|
},
|
|
receiveMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "on-start",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "manual",
|
|
},
|
|
],
|
|
},
|
|
ignoreAttachments: {
|
|
type: "boolean",
|
|
},
|
|
ignoreStories: {
|
|
type: "boolean",
|
|
},
|
|
sendReadReceipts: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all", "allowlist"],
|
|
},
|
|
reactionAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
reactionLevel: {
|
|
type: "string",
|
|
enum: ["off", "ack", "minimal", "extensive"],
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
account: {
|
|
type: "string",
|
|
},
|
|
accountUuid: {
|
|
type: "string",
|
|
},
|
|
httpUrl: {
|
|
type: "string",
|
|
},
|
|
httpHost: {
|
|
type: "string",
|
|
},
|
|
httpPort: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
cliPath: {
|
|
type: "string",
|
|
},
|
|
autoStart: {
|
|
type: "boolean",
|
|
},
|
|
startupTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 120000,
|
|
},
|
|
receiveMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "on-start",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "manual",
|
|
},
|
|
],
|
|
},
|
|
ignoreAttachments: {
|
|
type: "boolean",
|
|
},
|
|
ignoreStories: {
|
|
type: "boolean",
|
|
},
|
|
sendReadReceipts: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all", "allowlist"],
|
|
},
|
|
reactionAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
reactionLevel: {
|
|
type: "string",
|
|
enum: ["off", "ack", "minimal", "extensive"],
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "Signal",
|
|
help: "Signal channel provider configuration including account identity and DM policy behavior. Keep account mapping explicit so routing remains stable across multi-device setups.",
|
|
},
|
|
dmPolicy: {
|
|
label: "Signal DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.signal.allowFrom=["*"].',
|
|
},
|
|
configWrites: {
|
|
label: "Signal Config Writes",
|
|
help: "Allow Signal to write config in response to channel events/commands (default: true).",
|
|
},
|
|
account: {
|
|
label: "Signal Account",
|
|
help: "Signal account identifier (phone/number handle) used to bind this channel config to a specific Signal identity. Keep this aligned with your linked device/session state.",
|
|
},
|
|
},
|
|
label: "Signal",
|
|
description: 'signal-cli linked device; more setup (David Reagans: "Hop on Discord.").',
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "slack",
|
|
idHint: "slack",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/slack",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Slack channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "slack",
|
|
label: "Slack",
|
|
selectionLabel: "Slack (Socket Mode)",
|
|
detailLabel: "Slack Bot",
|
|
docsPath: "/channels/slack",
|
|
docsLabel: "slack",
|
|
blurb: "supported (Socket Mode).",
|
|
systemImage: "number",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "slack",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["slack"],
|
|
channelConfigs: {
|
|
slack: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
mode: {
|
|
default: "socket",
|
|
type: "string",
|
|
enum: ["socket", "http"],
|
|
},
|
|
signingSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
default: "/slack/events",
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
anyOf: [
|
|
{
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
interactiveReplies: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
appToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
userToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
userTokenReadOnly: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
],
|
|
},
|
|
nativeStreaming: {
|
|
type: "boolean",
|
|
},
|
|
streamMode: {
|
|
type: "string",
|
|
enum: ["replace", "status_final", "append"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all", "allowlist"],
|
|
},
|
|
reactionAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
replyToModeByChatType: {
|
|
type: "object",
|
|
properties: {
|
|
direct: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
group: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
channel: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
thread: {
|
|
type: "object",
|
|
properties: {
|
|
historyScope: {
|
|
type: "string",
|
|
enum: ["thread", "channel"],
|
|
},
|
|
inheritParent: {
|
|
type: "boolean",
|
|
},
|
|
initialHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
messages: {
|
|
type: "boolean",
|
|
},
|
|
pins: {
|
|
type: "boolean",
|
|
},
|
|
search: {
|
|
type: "boolean",
|
|
},
|
|
permissions: {
|
|
type: "boolean",
|
|
},
|
|
memberInfo: {
|
|
type: "boolean",
|
|
},
|
|
channelInfo: {
|
|
type: "boolean",
|
|
},
|
|
emojiList: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
slashCommand: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
sessionPrefix: {
|
|
type: "string",
|
|
},
|
|
ephemeral: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupEnabled: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
allowBots: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
typingReaction: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
mode: {
|
|
type: "string",
|
|
enum: ["socket", "http"],
|
|
},
|
|
signingSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
anyOf: [
|
|
{
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
interactiveReplies: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
appToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
userToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
userTokenReadOnly: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
allowBots: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
],
|
|
},
|
|
nativeStreaming: {
|
|
type: "boolean",
|
|
},
|
|
streamMode: {
|
|
type: "string",
|
|
enum: ["replace", "status_final", "append"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all", "allowlist"],
|
|
},
|
|
reactionAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
replyToModeByChatType: {
|
|
type: "object",
|
|
properties: {
|
|
direct: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
group: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
channel: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
thread: {
|
|
type: "object",
|
|
properties: {
|
|
historyScope: {
|
|
type: "string",
|
|
enum: ["thread", "channel"],
|
|
},
|
|
inheritParent: {
|
|
type: "boolean",
|
|
},
|
|
initialHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
messages: {
|
|
type: "boolean",
|
|
},
|
|
pins: {
|
|
type: "boolean",
|
|
},
|
|
search: {
|
|
type: "boolean",
|
|
},
|
|
permissions: {
|
|
type: "boolean",
|
|
},
|
|
memberInfo: {
|
|
type: "boolean",
|
|
},
|
|
channelInfo: {
|
|
type: "boolean",
|
|
},
|
|
emojiList: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
slashCommand: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
sessionPrefix: {
|
|
type: "string",
|
|
},
|
|
ephemeral: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupEnabled: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
allowBots: {
|
|
type: "boolean",
|
|
},
|
|
users: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
typingReaction: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["userTokenReadOnly"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["mode", "webhookPath", "userTokenReadOnly", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "Slack",
|
|
help: "Slack channel provider configuration for bot/app tokens, streaming behavior, and DM policy controls. Keep token handling and thread behavior explicit to avoid noisy workspace interactions.",
|
|
},
|
|
"dm.policy": {
|
|
label: "Slack DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.slack.allowFrom=["*"] (legacy: channels.slack.dm.allowFrom).',
|
|
},
|
|
dmPolicy: {
|
|
label: "Slack DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.slack.allowFrom=["*"].',
|
|
},
|
|
configWrites: {
|
|
label: "Slack Config Writes",
|
|
help: "Allow Slack to write config in response to channel events/commands (default: true).",
|
|
},
|
|
"commands.native": {
|
|
label: "Slack Native Commands",
|
|
help: 'Override native commands for Slack (bool or "auto").',
|
|
},
|
|
"commands.nativeSkills": {
|
|
label: "Slack Native Skill Commands",
|
|
help: 'Override native skill commands for Slack (bool or "auto").',
|
|
},
|
|
allowBots: {
|
|
label: "Slack Allow Bot Messages",
|
|
help: "Allow bot-authored messages to trigger Slack replies (default: false).",
|
|
},
|
|
botToken: {
|
|
label: "Slack Bot Token",
|
|
help: "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.",
|
|
},
|
|
appToken: {
|
|
label: "Slack App Token",
|
|
help: "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.",
|
|
},
|
|
userToken: {
|
|
label: "Slack User Token",
|
|
help: "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.",
|
|
},
|
|
userTokenReadOnly: {
|
|
label: "Slack User Token Read Only",
|
|
help: "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.",
|
|
},
|
|
"capabilities.interactiveReplies": {
|
|
label: "Slack Interactive Replies",
|
|
help: "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.",
|
|
},
|
|
streaming: {
|
|
label: "Slack Streaming Mode",
|
|
help: 'Unified Slack stream preview mode: "off" | "partial" | "block" | "progress". Legacy boolean/streamMode keys are auto-mapped.',
|
|
},
|
|
nativeStreaming: {
|
|
label: "Slack Native Streaming",
|
|
help: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).",
|
|
},
|
|
streamMode: {
|
|
label: "Slack Stream Mode (Legacy)",
|
|
help: "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.",
|
|
},
|
|
"thread.historyScope": {
|
|
label: "Slack Thread History Scope",
|
|
help: 'Scope for Slack thread history context ("thread" isolates per thread; "channel" reuses channel history).',
|
|
},
|
|
"thread.inheritParent": {
|
|
label: "Slack Thread Parent Inheritance",
|
|
help: "If true, Slack thread sessions inherit the parent channel transcript (default: false).",
|
|
},
|
|
"thread.initialHistoryLimit": {
|
|
label: "Slack Thread Initial History Limit",
|
|
help: "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).",
|
|
},
|
|
},
|
|
label: "Slack",
|
|
description: "supported (Socket Mode).",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "synology-chat",
|
|
idHint: "synology-chat",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/synology-chat",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "Synology Chat channel plugin for OpenClaw",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "synology-chat",
|
|
label: "Synology Chat",
|
|
selectionLabel: "Synology Chat (Webhook)",
|
|
docsPath: "/channels/synology-chat",
|
|
docsLabel: "synology-chat",
|
|
blurb: "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.",
|
|
order: 90,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/synology-chat",
|
|
localPath: "extensions/synology-chat",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "synology-chat",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["synology-chat"],
|
|
channelConfigs: {
|
|
"synology-chat": {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowInheritedWebhookPath: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
label: "Synology Chat",
|
|
description: "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "synthetic",
|
|
idHint: "synthetic",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/synthetic-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Synthetic provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "synthetic",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["synthetic"],
|
|
providerAuthEnvVars: {
|
|
synthetic: ["SYNTHETIC_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "synthetic",
|
|
method: "api-key",
|
|
choiceId: "synthetic-api-key",
|
|
choiceLabel: "Synthetic API key",
|
|
groupId: "synthetic",
|
|
groupLabel: "Synthetic",
|
|
groupHint: "Anthropic-compatible (multi-model)",
|
|
optionKey: "syntheticApiKey",
|
|
cliFlag: "--synthetic-api-key",
|
|
cliOption: "--synthetic-api-key <key>",
|
|
cliDescription: "Synthetic API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "tavily",
|
|
idHint: "tavily",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/tavily-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Tavily plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "tavily",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providerAuthEnvVars: {
|
|
tavily: ["TAVILY_API_KEY"],
|
|
},
|
|
skills: ["./skills"],
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Tavily API Key",
|
|
help: "Tavily API key for web search and extraction (fallback: TAVILY_API_KEY env var).",
|
|
sensitive: true,
|
|
placeholder: "tvly-...",
|
|
},
|
|
"webSearch.baseUrl": {
|
|
label: "Tavily Base URL",
|
|
help: "Tavily API base URL override.",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["tavily"],
|
|
tools: ["tavily_search", "tavily_extract"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "telegram",
|
|
idHint: "telegram",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/telegram",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Telegram channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "telegram",
|
|
label: "Telegram",
|
|
selectionLabel: "Telegram (Bot API)",
|
|
detailLabel: "Telegram Bot",
|
|
docsPath: "/channels/telegram",
|
|
docsLabel: "telegram",
|
|
blurb: "simplest way to get started — register a bot with @BotFather and get going.",
|
|
systemImage: "paperplane",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "telegram",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["telegram"],
|
|
channelConfigs: {
|
|
telegram: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
anyOf: [
|
|
{
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
inlineButtons: {
|
|
type: "string",
|
|
enum: ["off", "dm", "group", "all", "allowlist"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
execApprovals: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
approvers: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
agentFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
sessionFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
target: {
|
|
type: "string",
|
|
enum: ["dm", "channel", "both"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
customCommands: {
|
|
type: "array",
|
|
items: {
|
|
type: "object",
|
|
properties: {
|
|
command: {
|
|
type: "string",
|
|
},
|
|
description: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["command", "description"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
tokenFile: {
|
|
type: "string",
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
disableAudioPreflight: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
topics: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
disableAudioPreflight: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
agentId: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
direct: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
topics: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
disableAudioPreflight: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
agentId: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
requireTopic: {
|
|
type: "boolean",
|
|
},
|
|
autoTopicLabel: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
prompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
draftChunk: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
breakPreference: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "paragraph",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "newline",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "sentence",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streamMode: {
|
|
type: "string",
|
|
enum: ["off", "partial", "block"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
timeoutSeconds: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
retry: {
|
|
type: "object",
|
|
properties: {
|
|
attempts: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 9007199254740991,
|
|
},
|
|
minDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
jitter: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
network: {
|
|
type: "object",
|
|
properties: {
|
|
autoSelectFamily: {
|
|
type: "boolean",
|
|
},
|
|
dnsResultOrder: {
|
|
type: "string",
|
|
enum: ["ipv4first", "verbatim"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
webhookUrl: {
|
|
description:
|
|
"Public HTTPS webhook URL registered with Telegram for inbound updates. This must be internet-reachable and requires channels.telegram.webhookSecret.",
|
|
type: "string",
|
|
},
|
|
webhookSecret: {
|
|
description:
|
|
"Secret token sent to Telegram during webhook registration and verified on inbound webhook requests. Telegram returns this value for verification; this is not the gateway auth token and not the bot token.",
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
description:
|
|
"Local webhook route path served by the gateway listener. Defaults to /telegram-webhook.",
|
|
type: "string",
|
|
},
|
|
webhookHost: {
|
|
description:
|
|
"Local bind host for the webhook listener. Defaults to 127.0.0.1; keep loopback unless you intentionally expose direct ingress.",
|
|
type: "string",
|
|
},
|
|
webhookPort: {
|
|
description:
|
|
"Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.",
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
webhookCertPath: {
|
|
description:
|
|
"Path to the self-signed certificate (PEM) to upload to Telegram during webhook registration. Required for self-signed certs (direct IP or no domain).",
|
|
type: "string",
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
sendMessage: {
|
|
type: "boolean",
|
|
},
|
|
poll: {
|
|
type: "boolean",
|
|
},
|
|
deleteMessage: {
|
|
type: "boolean",
|
|
},
|
|
editMessage: {
|
|
type: "boolean",
|
|
},
|
|
sticker: {
|
|
type: "boolean",
|
|
},
|
|
createForumTopic: {
|
|
type: "boolean",
|
|
},
|
|
editForumTopic: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all"],
|
|
},
|
|
reactionLevel: {
|
|
type: "string",
|
|
enum: ["off", "ack", "minimal", "extensive"],
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
linkPreview: {
|
|
type: "boolean",
|
|
},
|
|
silentErrorReplies: {
|
|
type: "boolean",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
apiRoot: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
autoTopicLabel: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
prompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
capabilities: {
|
|
anyOf: [
|
|
{
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
inlineButtons: {
|
|
type: "string",
|
|
enum: ["off", "dm", "group", "all", "allowlist"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
execApprovals: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
approvers: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
agentFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
sessionFilter: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
target: {
|
|
type: "string",
|
|
enum: ["dm", "channel", "both"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
commands: {
|
|
type: "object",
|
|
properties: {
|
|
native: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
nativeSkills: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "auto",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
customCommands: {
|
|
type: "array",
|
|
items: {
|
|
type: "object",
|
|
properties: {
|
|
command: {
|
|
type: "string",
|
|
},
|
|
description: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["command", "description"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
tokenFile: {
|
|
type: "string",
|
|
},
|
|
replyToMode: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "off",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "first",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "all",
|
|
},
|
|
],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
disableAudioPreflight: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
topics: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
disableAudioPreflight: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
agentId: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
defaultTo: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
direct: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
topics: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
disableAudioPreflight: {
|
|
type: "boolean",
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
skills: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
agentId: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
requireTopic: {
|
|
type: "boolean",
|
|
},
|
|
autoTopicLabel: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
prompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
draftChunk: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
breakPreference: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
const: "paragraph",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "newline",
|
|
},
|
|
{
|
|
type: "string",
|
|
const: "sentence",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
streamMode: {
|
|
type: "string",
|
|
enum: ["off", "partial", "block"],
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
exclusiveMinimum: 0,
|
|
},
|
|
timeoutSeconds: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
retry: {
|
|
type: "object",
|
|
properties: {
|
|
attempts: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
maximum: 9007199254740991,
|
|
},
|
|
minDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxDelayMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
jitter: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
network: {
|
|
type: "object",
|
|
properties: {
|
|
autoSelectFamily: {
|
|
type: "boolean",
|
|
},
|
|
dnsResultOrder: {
|
|
type: "string",
|
|
enum: ["ipv4first", "verbatim"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
webhookUrl: {
|
|
description:
|
|
"Public HTTPS webhook URL registered with Telegram for inbound updates. This must be internet-reachable and requires channels.telegram.webhookSecret.",
|
|
type: "string",
|
|
},
|
|
webhookSecret: {
|
|
description:
|
|
"Secret token sent to Telegram during webhook registration and verified on inbound webhook requests. Telegram returns this value for verification; this is not the gateway auth token and not the bot token.",
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
description:
|
|
"Local webhook route path served by the gateway listener. Defaults to /telegram-webhook.",
|
|
type: "string",
|
|
},
|
|
webhookHost: {
|
|
description:
|
|
"Local bind host for the webhook listener. Defaults to 127.0.0.1; keep loopback unless you intentionally expose direct ingress.",
|
|
type: "string",
|
|
},
|
|
webhookPort: {
|
|
description:
|
|
"Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.",
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
webhookCertPath: {
|
|
description:
|
|
"Path to the self-signed certificate (PEM) to upload to Telegram during webhook registration. Required for self-signed certs (direct IP or no domain).",
|
|
type: "string",
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
sendMessage: {
|
|
type: "boolean",
|
|
},
|
|
poll: {
|
|
type: "boolean",
|
|
},
|
|
deleteMessage: {
|
|
type: "boolean",
|
|
},
|
|
editMessage: {
|
|
type: "boolean",
|
|
},
|
|
sticker: {
|
|
type: "boolean",
|
|
},
|
|
createForumTopic: {
|
|
type: "boolean",
|
|
},
|
|
editForumTopic: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
minimum: 0,
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
reactionNotifications: {
|
|
type: "string",
|
|
enum: ["off", "own", "all"],
|
|
},
|
|
reactionLevel: {
|
|
type: "string",
|
|
enum: ["off", "ack", "minimal", "extensive"],
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
linkPreview: {
|
|
type: "boolean",
|
|
},
|
|
silentErrorReplies: {
|
|
type: "boolean",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
ackReaction: {
|
|
type: "string",
|
|
},
|
|
apiRoot: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
autoTopicLabel: {
|
|
anyOf: [
|
|
{
|
|
type: "boolean",
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
prompt: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "Telegram",
|
|
help: "Telegram channel provider configuration including auth tokens, retry behavior, and message rendering controls. Use this section to tune bot behavior for Telegram-specific API semantics.",
|
|
},
|
|
customCommands: {
|
|
label: "Telegram Custom Commands",
|
|
help: "Additional Telegram bot menu commands (merged with native; conflicts ignored).",
|
|
},
|
|
botToken: {
|
|
label: "Telegram Bot Token",
|
|
help: "Telegram bot token used to authenticate Bot API requests for this account/provider config. Use secret/env substitution and rotate tokens if exposure is suspected.",
|
|
},
|
|
dmPolicy: {
|
|
label: "Telegram DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.telegram.allowFrom=["*"].',
|
|
},
|
|
configWrites: {
|
|
label: "Telegram Config Writes",
|
|
help: "Allow Telegram to write config in response to channel events/commands (default: true).",
|
|
},
|
|
"commands.native": {
|
|
label: "Telegram Native Commands",
|
|
help: 'Override native commands for Telegram (bool or "auto").',
|
|
},
|
|
"commands.nativeSkills": {
|
|
label: "Telegram Native Skill Commands",
|
|
help: 'Override native skill commands for Telegram (bool or "auto").',
|
|
},
|
|
streaming: {
|
|
label: "Telegram Streaming Mode",
|
|
help: 'Unified Telegram stream preview mode: "off" | "partial" | "block" | "progress" (default: "partial"). "progress" maps to "partial" on Telegram. Legacy boolean/streamMode keys are auto-mapped.',
|
|
},
|
|
"retry.attempts": {
|
|
label: "Telegram Retry Attempts",
|
|
help: "Max retry attempts for outbound Telegram API calls (default: 3).",
|
|
},
|
|
"retry.minDelayMs": {
|
|
label: "Telegram Retry Min Delay (ms)",
|
|
help: "Minimum retry delay in ms for Telegram outbound calls.",
|
|
},
|
|
"retry.maxDelayMs": {
|
|
label: "Telegram Retry Max Delay (ms)",
|
|
help: "Maximum retry delay cap in ms for Telegram outbound calls.",
|
|
},
|
|
"retry.jitter": {
|
|
label: "Telegram Retry Jitter",
|
|
help: "Jitter factor (0-1) applied to Telegram retry delays.",
|
|
},
|
|
"network.autoSelectFamily": {
|
|
label: "Telegram autoSelectFamily",
|
|
help: "Override Node autoSelectFamily for Telegram (true=enable, false=disable).",
|
|
},
|
|
timeoutSeconds: {
|
|
label: "Telegram API Timeout (seconds)",
|
|
help: "Max seconds before Telegram API requests are aborted (default: 500 per grammY).",
|
|
},
|
|
silentErrorReplies: {
|
|
label: "Telegram Silent Error Replies",
|
|
help: "When true, Telegram bot replies marked as errors are sent silently (no notification sound). Default: false.",
|
|
},
|
|
apiRoot: {
|
|
label: "Telegram API Root URL",
|
|
help: "Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.",
|
|
},
|
|
autoTopicLabel: {
|
|
label: "Telegram Auto Topic Label",
|
|
help: "Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.",
|
|
},
|
|
"autoTopicLabel.enabled": {
|
|
label: "Telegram Auto Topic Label Enabled",
|
|
help: "Whether auto topic labeling is enabled. Default: true.",
|
|
},
|
|
"autoTopicLabel.prompt": {
|
|
label: "Telegram Auto Topic Label Prompt",
|
|
help: "Custom prompt for LLM-based topic naming. The user message is appended after the prompt.",
|
|
},
|
|
"capabilities.inlineButtons": {
|
|
label: "Telegram Inline Buttons",
|
|
help: "Enable Telegram inline button components for supported command and interaction surfaces. Disable if your deployment needs plain-text-only compatibility behavior.",
|
|
},
|
|
execApprovals: {
|
|
label: "Telegram Exec Approvals",
|
|
help: "Telegram-native exec approval routing and approver authorization. Enable this only when Telegram should act as an explicit exec-approval client for the selected bot account.",
|
|
},
|
|
"execApprovals.enabled": {
|
|
label: "Telegram Exec Approvals Enabled",
|
|
help: "Enable Telegram exec approvals for this account. When false or unset, Telegram messages/buttons cannot approve exec requests.",
|
|
},
|
|
"execApprovals.approvers": {
|
|
label: "Telegram Exec Approval Approvers",
|
|
help: "Telegram user IDs allowed to approve exec requests for this bot account. Use numeric Telegram user IDs; prompts are only delivered to these approvers when target includes dm.",
|
|
},
|
|
"execApprovals.agentFilter": {
|
|
label: "Telegram Exec Approval Agent Filter",
|
|
help: 'Optional allowlist of agent IDs eligible for Telegram exec approvals, for example `["main", "ops-agent"]`. Use this to keep approval prompts scoped to the agents you actually operate from Telegram.',
|
|
},
|
|
"execApprovals.sessionFilter": {
|
|
label: "Telegram Exec Approval Session Filter",
|
|
help: "Optional session-key filters matched as substring or regex-style patterns before Telegram approval routing is used. Use narrow patterns so Telegram approvals only appear for intended sessions.",
|
|
},
|
|
"execApprovals.target": {
|
|
label: "Telegram Exec Approval Target",
|
|
help: 'Controls where Telegram approval prompts are sent: "dm" sends to approver DMs (default), "channel" sends to the originating Telegram chat/topic, and "both" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted groups/topics.',
|
|
},
|
|
"threadBindings.enabled": {
|
|
label: "Telegram Thread Binding Enabled",
|
|
help: "Enable Telegram conversation binding features (/focus, /unfocus, /agents, and /session idle|max-age). Overrides session.threadBindings.enabled when set.",
|
|
},
|
|
"threadBindings.idleHours": {
|
|
label: "Telegram Thread Binding Idle Timeout (hours)",
|
|
help: "Inactivity window in hours for Telegram bound sessions. Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.",
|
|
},
|
|
"threadBindings.maxAgeHours": {
|
|
label: "Telegram Thread Binding Max Age (hours)",
|
|
help: "Optional hard max age in hours for Telegram bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.",
|
|
},
|
|
"threadBindings.spawnSubagentSessions": {
|
|
label: "Telegram Thread-Bound Subagent Spawn",
|
|
help: "Allow subagent spawns with thread=true to auto-bind Telegram current conversations when supported.",
|
|
},
|
|
"threadBindings.spawnAcpSessions": {
|
|
label: "Telegram Thread-Bound ACP Spawn",
|
|
help: "Allow ACP spawns with thread=true to auto-bind Telegram current conversations when supported.",
|
|
},
|
|
},
|
|
label: "Telegram",
|
|
description:
|
|
"simplest way to get started — register a bot with @BotFather and get going.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "tlon",
|
|
idHint: "tlon",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/tlon",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Tlon/Urbit channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "tlon",
|
|
label: "Tlon",
|
|
selectionLabel: "Tlon (Urbit)",
|
|
docsPath: "/channels/tlon",
|
|
docsLabel: "tlon",
|
|
blurb: "decentralized messaging on Urbit; install the plugin to enable.",
|
|
order: 90,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/tlon",
|
|
localPath: "extensions/tlon",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "tlon",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["tlon"],
|
|
skills: ["node_modules/@tloncorp/tlon-skill"],
|
|
channelConfigs: {
|
|
tlon: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
ship: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
url: {
|
|
type: "string",
|
|
},
|
|
code: {
|
|
type: "string",
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
dmAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
autoDiscoverChannels: {
|
|
type: "boolean",
|
|
},
|
|
showModelSignature: {
|
|
type: "boolean",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
autoAcceptDmInvites: {
|
|
type: "boolean",
|
|
},
|
|
autoAcceptGroupInvites: {
|
|
type: "boolean",
|
|
},
|
|
ownerShip: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
authorization: {
|
|
type: "object",
|
|
properties: {
|
|
channelRules: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
mode: {
|
|
type: "string",
|
|
enum: ["restricted", "open"],
|
|
},
|
|
allowedShips: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
defaultAuthorizedShips: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
ship: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
url: {
|
|
type: "string",
|
|
},
|
|
code: {
|
|
type: "string",
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
dmAllowlist: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
autoDiscoverChannels: {
|
|
type: "boolean",
|
|
},
|
|
showModelSignature: {
|
|
type: "boolean",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
autoAcceptDmInvites: {
|
|
type: "boolean",
|
|
},
|
|
autoAcceptGroupInvites: {
|
|
type: "boolean",
|
|
},
|
|
ownerShip: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
label: "Tlon",
|
|
description: "decentralized messaging on Urbit; install the plugin to enable.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "together",
|
|
idHint: "together",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/together-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Together provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "together",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["together"],
|
|
providerAuthEnvVars: {
|
|
together: ["TOGETHER_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "together",
|
|
method: "api-key",
|
|
choiceId: "together-api-key",
|
|
choiceLabel: "Together AI API key",
|
|
groupId: "together",
|
|
groupLabel: "Together AI",
|
|
groupHint: "API key",
|
|
optionKey: "togetherApiKey",
|
|
cliFlag: "--together-api-key",
|
|
cliOption: "--together-api-key <key>",
|
|
cliDescription: "Together AI API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "twitch",
|
|
idHint: "twitch",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/twitch",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Twitch channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
channel: {
|
|
id: "twitch",
|
|
label: "Twitch",
|
|
selectionLabel: "Twitch (Chat)",
|
|
docsPath: "/channels/twitch",
|
|
blurb: "Twitch chat integration",
|
|
aliases: ["twitch-chat"],
|
|
},
|
|
install: {
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "twitch",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["twitch"],
|
|
channelConfigs: {
|
|
twitch: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
anyOf: [
|
|
{
|
|
allOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
username: {
|
|
type: "string",
|
|
},
|
|
accessToken: {
|
|
type: "string",
|
|
},
|
|
clientId: {
|
|
type: "string",
|
|
},
|
|
channel: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
allowedRoles: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
enum: ["moderator", "owner", "vip", "subscriber", "all"],
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
clientSecret: {
|
|
type: "string",
|
|
},
|
|
refreshToken: {
|
|
type: "string",
|
|
},
|
|
expiresIn: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
},
|
|
obtainmentTimestamp: {
|
|
type: "number",
|
|
},
|
|
},
|
|
required: ["username", "accessToken", "channel"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
allOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
username: {
|
|
type: "string",
|
|
},
|
|
accessToken: {
|
|
type: "string",
|
|
},
|
|
clientId: {
|
|
type: "string",
|
|
},
|
|
channel: {
|
|
type: "string",
|
|
minLength: 1,
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
allowedRoles: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
enum: ["moderator", "owner", "vip", "subscriber", "all"],
|
|
},
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
clientSecret: {
|
|
type: "string",
|
|
},
|
|
refreshToken: {
|
|
type: "string",
|
|
},
|
|
expiresIn: {
|
|
anyOf: [
|
|
{
|
|
type: "number",
|
|
},
|
|
{
|
|
type: "null",
|
|
},
|
|
],
|
|
},
|
|
obtainmentTimestamp: {
|
|
type: "number",
|
|
},
|
|
},
|
|
required: ["username", "accessToken", "channel"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
required: ["accounts"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
label: "Twitch",
|
|
description: "Twitch chat integration",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "venice",
|
|
idHint: "venice",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/venice-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Venice provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "venice",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["venice"],
|
|
providerAuthEnvVars: {
|
|
venice: ["VENICE_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "venice",
|
|
method: "api-key",
|
|
choiceId: "venice-api-key",
|
|
choiceLabel: "Venice AI API key",
|
|
groupId: "venice",
|
|
groupLabel: "Venice AI",
|
|
groupHint: "Privacy-focused (uncensored models)",
|
|
optionKey: "veniceApiKey",
|
|
cliFlag: "--venice-api-key",
|
|
cliOption: "--venice-api-key <key>",
|
|
cliDescription: "Venice API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "vercel-ai-gateway",
|
|
idHint: "vercel-ai-gateway",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/vercel-ai-gateway-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Vercel AI Gateway provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "vercel-ai-gateway",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["vercel-ai-gateway"],
|
|
providerAuthEnvVars: {
|
|
"vercel-ai-gateway": ["AI_GATEWAY_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "vercel-ai-gateway",
|
|
method: "api-key",
|
|
choiceId: "ai-gateway-api-key",
|
|
choiceLabel: "Vercel AI Gateway API key",
|
|
groupId: "ai-gateway",
|
|
groupLabel: "Vercel AI Gateway",
|
|
groupHint: "API key",
|
|
optionKey: "aiGatewayApiKey",
|
|
cliFlag: "--ai-gateway-api-key",
|
|
cliOption: "--ai-gateway-api-key <key>",
|
|
cliDescription: "Vercel AI Gateway API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "vllm",
|
|
idHint: "vllm",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/vllm-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw vLLM provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "vllm",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["vllm"],
|
|
providerAuthEnvVars: {
|
|
vllm: ["VLLM_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "vllm",
|
|
method: "custom",
|
|
choiceId: "vllm",
|
|
choiceLabel: "vLLM",
|
|
choiceHint: "Local/self-hosted OpenAI-compatible server",
|
|
groupId: "vllm",
|
|
groupLabel: "vLLM",
|
|
groupHint: "Local/self-hosted OpenAI-compatible",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "voice-call",
|
|
idHint: "voice-call",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/voice-call",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw voice-call plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
install: {
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "voice-call",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
enum: ["telnyx", "twilio", "plivo", "mock"],
|
|
},
|
|
telnyx: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: "string",
|
|
},
|
|
connectionId: {
|
|
type: "string",
|
|
},
|
|
publicKey: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
twilio: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
accountSid: {
|
|
type: "string",
|
|
},
|
|
authToken: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
plivo: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
authId: {
|
|
type: "string",
|
|
},
|
|
authToken: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
fromNumber: {
|
|
type: "string",
|
|
pattern: "^\\+[1-9]\\d{1,14}$",
|
|
},
|
|
toNumber: {
|
|
type: "string",
|
|
pattern: "^\\+[1-9]\\d{1,14}$",
|
|
},
|
|
inboundPolicy: {
|
|
type: "string",
|
|
enum: ["disabled", "allowlist", "pairing", "open"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
pattern: "^\\+[1-9]\\d{1,14}$",
|
|
},
|
|
},
|
|
inboundGreeting: {
|
|
type: "string",
|
|
},
|
|
outbound: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
defaultMode: {
|
|
type: "string",
|
|
enum: ["notify", "conversation"],
|
|
},
|
|
notifyHangupDelaySec: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
},
|
|
},
|
|
maxDurationSeconds: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
staleCallReaperSeconds: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
},
|
|
silenceTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
transcriptTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
ringTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
maxConcurrentCalls: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
serve: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
port: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
bind: {
|
|
type: "string",
|
|
},
|
|
path: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
tailscale: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
mode: {
|
|
type: "string",
|
|
enum: ["off", "serve", "funnel"],
|
|
},
|
|
path: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
tunnel: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
provider: {
|
|
type: "string",
|
|
enum: ["none", "ngrok", "tailscale-serve", "tailscale-funnel"],
|
|
},
|
|
ngrokAuthToken: {
|
|
type: "string",
|
|
},
|
|
ngrokDomain: {
|
|
type: "string",
|
|
},
|
|
allowNgrokFreeTierLoopbackBypass: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
},
|
|
webhookSecurity: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
allowedHosts: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
trustForwardingHeaders: {
|
|
type: "boolean",
|
|
},
|
|
trustedProxyIPs: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
streaming: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
sttProvider: {
|
|
type: "string",
|
|
enum: ["openai-realtime"],
|
|
},
|
|
openaiApiKey: {
|
|
type: "string",
|
|
},
|
|
sttModel: {
|
|
type: "string",
|
|
},
|
|
silenceDurationMs: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
vadThreshold: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
streamPath: {
|
|
type: "string",
|
|
},
|
|
preStartTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
maxPendingConnections: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
maxPendingConnectionsPerIp: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
maxConnections: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
},
|
|
},
|
|
publicUrl: {
|
|
type: "string",
|
|
},
|
|
skipSignatureVerification: {
|
|
type: "boolean",
|
|
},
|
|
stt: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
provider: {
|
|
type: "string",
|
|
enum: ["openai"],
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
tts: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
auto: {
|
|
type: "string",
|
|
enum: ["off", "always", "inbound", "tagged"],
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
mode: {
|
|
type: "string",
|
|
enum: ["final", "all"],
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
},
|
|
summaryModel: {
|
|
type: "string",
|
|
},
|
|
modelOverrides: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
allowText: {
|
|
type: "boolean",
|
|
},
|
|
allowProvider: {
|
|
type: "boolean",
|
|
},
|
|
allowVoice: {
|
|
type: "boolean",
|
|
},
|
|
allowModelId: {
|
|
type: "boolean",
|
|
},
|
|
allowVoiceSettings: {
|
|
type: "boolean",
|
|
},
|
|
allowNormalization: {
|
|
type: "boolean",
|
|
},
|
|
allowSeed: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
},
|
|
elevenlabs: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: "string",
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
voiceId: {
|
|
type: "string",
|
|
},
|
|
modelId: {
|
|
type: "string",
|
|
},
|
|
seed: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 4294967295,
|
|
},
|
|
applyTextNormalization: {
|
|
type: "string",
|
|
enum: ["auto", "on", "off"],
|
|
},
|
|
languageCode: {
|
|
type: "string",
|
|
},
|
|
voiceSettings: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
stability: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
similarityBoost: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
style: {
|
|
type: "number",
|
|
minimum: 0,
|
|
maximum: 1,
|
|
},
|
|
useSpeakerBoost: {
|
|
type: "boolean",
|
|
},
|
|
speed: {
|
|
type: "number",
|
|
minimum: 0.5,
|
|
maximum: 2,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
openai: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: "string",
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
voice: {
|
|
type: "string",
|
|
},
|
|
speed: {
|
|
type: "number",
|
|
minimum: 0.25,
|
|
maximum: 4,
|
|
},
|
|
instructions: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
edge: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
voice: {
|
|
type: "string",
|
|
},
|
|
lang: {
|
|
type: "string",
|
|
},
|
|
outputFormat: {
|
|
type: "string",
|
|
},
|
|
pitch: {
|
|
type: "string",
|
|
},
|
|
rate: {
|
|
type: "string",
|
|
},
|
|
volume: {
|
|
type: "string",
|
|
},
|
|
saveSubtitles: {
|
|
type: "boolean",
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
timeoutMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 120000,
|
|
},
|
|
},
|
|
},
|
|
prefsPath: {
|
|
type: "string",
|
|
},
|
|
maxTextLength: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
timeoutMs: {
|
|
type: "integer",
|
|
minimum: 1000,
|
|
maximum: 120000,
|
|
},
|
|
},
|
|
},
|
|
store: {
|
|
type: "string",
|
|
},
|
|
responseModel: {
|
|
type: "string",
|
|
},
|
|
responseSystemPrompt: {
|
|
type: "string",
|
|
},
|
|
responseTimeoutMs: {
|
|
type: "integer",
|
|
minimum: 1,
|
|
},
|
|
},
|
|
},
|
|
uiHints: {
|
|
provider: {
|
|
label: "Provider",
|
|
help: "Use twilio, telnyx, or mock for dev/no-network.",
|
|
},
|
|
fromNumber: {
|
|
label: "From Number",
|
|
placeholder: "+15550001234",
|
|
},
|
|
toNumber: {
|
|
label: "Default To Number",
|
|
placeholder: "+15550001234",
|
|
},
|
|
inboundPolicy: {
|
|
label: "Inbound Policy",
|
|
},
|
|
allowFrom: {
|
|
label: "Inbound Allowlist",
|
|
},
|
|
inboundGreeting: {
|
|
label: "Inbound Greeting",
|
|
advanced: true,
|
|
},
|
|
"telnyx.apiKey": {
|
|
label: "Telnyx API Key",
|
|
sensitive: true,
|
|
},
|
|
"telnyx.connectionId": {
|
|
label: "Telnyx Connection ID",
|
|
},
|
|
"telnyx.publicKey": {
|
|
label: "Telnyx Public Key",
|
|
sensitive: true,
|
|
},
|
|
"twilio.accountSid": {
|
|
label: "Twilio Account SID",
|
|
},
|
|
"twilio.authToken": {
|
|
label: "Twilio Auth Token",
|
|
sensitive: true,
|
|
},
|
|
"outbound.defaultMode": {
|
|
label: "Default Call Mode",
|
|
},
|
|
"outbound.notifyHangupDelaySec": {
|
|
label: "Notify Hangup Delay (sec)",
|
|
advanced: true,
|
|
},
|
|
"serve.port": {
|
|
label: "Webhook Port",
|
|
},
|
|
"serve.bind": {
|
|
label: "Webhook Bind",
|
|
},
|
|
"serve.path": {
|
|
label: "Webhook Path",
|
|
},
|
|
"tailscale.mode": {
|
|
label: "Tailscale Mode",
|
|
advanced: true,
|
|
},
|
|
"tailscale.path": {
|
|
label: "Tailscale Path",
|
|
advanced: true,
|
|
},
|
|
"tunnel.provider": {
|
|
label: "Tunnel Provider",
|
|
advanced: true,
|
|
},
|
|
"tunnel.ngrokAuthToken": {
|
|
label: "ngrok Auth Token",
|
|
sensitive: true,
|
|
advanced: true,
|
|
},
|
|
"tunnel.ngrokDomain": {
|
|
label: "ngrok Domain",
|
|
advanced: true,
|
|
},
|
|
"tunnel.allowNgrokFreeTierLoopbackBypass": {
|
|
label: "Allow ngrok Free Tier (Loopback Bypass)",
|
|
advanced: true,
|
|
},
|
|
"streaming.enabled": {
|
|
label: "Enable Streaming",
|
|
advanced: true,
|
|
},
|
|
"streaming.openaiApiKey": {
|
|
label: "OpenAI Realtime API Key",
|
|
sensitive: true,
|
|
advanced: true,
|
|
},
|
|
"streaming.sttModel": {
|
|
label: "Realtime STT Model",
|
|
advanced: true,
|
|
},
|
|
"streaming.streamPath": {
|
|
label: "Media Stream Path",
|
|
advanced: true,
|
|
},
|
|
"tts.provider": {
|
|
label: "TTS Provider Override",
|
|
help: "Deep-merges with messages.tts (Microsoft is ignored for calls).",
|
|
advanced: true,
|
|
},
|
|
"tts.openai.model": {
|
|
label: "OpenAI TTS Model",
|
|
advanced: true,
|
|
},
|
|
"tts.openai.voice": {
|
|
label: "OpenAI TTS Voice",
|
|
advanced: true,
|
|
},
|
|
"tts.openai.apiKey": {
|
|
label: "OpenAI API Key",
|
|
sensitive: true,
|
|
advanced: true,
|
|
},
|
|
"tts.elevenlabs.modelId": {
|
|
label: "ElevenLabs Model ID",
|
|
advanced: true,
|
|
},
|
|
"tts.elevenlabs.voiceId": {
|
|
label: "ElevenLabs Voice ID",
|
|
advanced: true,
|
|
},
|
|
"tts.elevenlabs.apiKey": {
|
|
label: "ElevenLabs API Key",
|
|
sensitive: true,
|
|
advanced: true,
|
|
},
|
|
"tts.elevenlabs.baseUrl": {
|
|
label: "ElevenLabs Base URL",
|
|
advanced: true,
|
|
},
|
|
publicUrl: {
|
|
label: "Public Webhook URL",
|
|
advanced: true,
|
|
},
|
|
skipSignatureVerification: {
|
|
label: "Skip Signature Verification",
|
|
advanced: true,
|
|
},
|
|
store: {
|
|
label: "Call Log Store Path",
|
|
advanced: true,
|
|
},
|
|
responseModel: {
|
|
label: "Response Model",
|
|
advanced: true,
|
|
},
|
|
responseSystemPrompt: {
|
|
label: "Response System Prompt",
|
|
advanced: true,
|
|
},
|
|
responseTimeoutMs: {
|
|
label: "Response Timeout (ms)",
|
|
advanced: true,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "volcengine",
|
|
idHint: "volcengine",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/volcengine-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Volcengine provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "volcengine",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["volcengine", "volcengine-plan"],
|
|
providerAuthEnvVars: {
|
|
volcengine: ["VOLCANO_ENGINE_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "volcengine",
|
|
method: "api-key",
|
|
choiceId: "volcengine-api-key",
|
|
choiceLabel: "Volcano Engine API key",
|
|
groupId: "volcengine",
|
|
groupLabel: "Volcano Engine",
|
|
groupHint: "API key",
|
|
optionKey: "volcengineApiKey",
|
|
cliFlag: "--volcengine-api-key",
|
|
cliOption: "--volcengine-api-key <key>",
|
|
cliDescription: "Volcano Engine API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "whatsapp",
|
|
idHint: "whatsapp",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/whatsapp",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw WhatsApp channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "whatsapp",
|
|
label: "WhatsApp",
|
|
selectionLabel: "WhatsApp (QR link)",
|
|
detailLabel: "WhatsApp Web",
|
|
docsPath: "/channels/whatsapp",
|
|
docsLabel: "whatsapp",
|
|
blurb: "works with your own number; recommend a separate phone + eSIM.",
|
|
systemImage: "message",
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/whatsapp",
|
|
localPath: "extensions/whatsapp",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "whatsapp",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["whatsapp"],
|
|
channelConfigs: {
|
|
whatsapp: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
sendReadReceipts: {
|
|
type: "boolean",
|
|
},
|
|
messagePrefix: {
|
|
type: "string",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
selfChatMode: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
ackReaction: {
|
|
type: "object",
|
|
properties: {
|
|
emoji: {
|
|
type: "string",
|
|
},
|
|
direct: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
group: {
|
|
default: "mentions",
|
|
type: "string",
|
|
enum: ["always", "mentions", "never"],
|
|
},
|
|
},
|
|
required: ["direct", "group"],
|
|
additionalProperties: false,
|
|
},
|
|
debounceMs: {
|
|
default: 0,
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
capabilities: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
configWrites: {
|
|
type: "boolean",
|
|
},
|
|
sendReadReceipts: {
|
|
type: "boolean",
|
|
},
|
|
messagePrefix: {
|
|
type: "string",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
default: "pairing",
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
selfChatMode: {
|
|
type: "boolean",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dms: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
textChunkLimit: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
chunkMode: {
|
|
type: "string",
|
|
enum: ["length", "newline"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
blockStreamingCoalesce: {
|
|
type: "object",
|
|
properties: {
|
|
minChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
maxChars: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
idleMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
toolsBySender: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
ackReaction: {
|
|
type: "object",
|
|
properties: {
|
|
emoji: {
|
|
type: "string",
|
|
},
|
|
direct: {
|
|
default: true,
|
|
type: "boolean",
|
|
},
|
|
group: {
|
|
default: "mentions",
|
|
type: "string",
|
|
enum: ["always", "mentions", "never"],
|
|
},
|
|
},
|
|
required: ["direct", "group"],
|
|
additionalProperties: false,
|
|
},
|
|
debounceMs: {
|
|
default: 0,
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
heartbeat: {
|
|
type: "object",
|
|
properties: {
|
|
showOk: {
|
|
type: "boolean",
|
|
},
|
|
showAlerts: {
|
|
type: "boolean",
|
|
},
|
|
useIndicator: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
healthMonitor: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
authDir: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy", "debounceMs"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
mediaMaxMb: {
|
|
default: 50,
|
|
type: "integer",
|
|
exclusiveMinimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
actions: {
|
|
type: "object",
|
|
properties: {
|
|
reactions: {
|
|
type: "boolean",
|
|
},
|
|
sendMessage: {
|
|
type: "boolean",
|
|
},
|
|
polls: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
required: ["dmPolicy", "groupPolicy", "debounceMs", "mediaMaxMb"],
|
|
additionalProperties: false,
|
|
},
|
|
uiHints: {
|
|
"": {
|
|
label: "WhatsApp",
|
|
help: "WhatsApp channel provider configuration for access policy and message batching behavior. Use this section to tune responsiveness and direct-message routing safety for WhatsApp chats.",
|
|
},
|
|
dmPolicy: {
|
|
label: "WhatsApp DM Policy",
|
|
help: 'Direct message access control ("pairing" recommended). "open" requires channels.whatsapp.allowFrom=["*"].',
|
|
},
|
|
selfChatMode: {
|
|
label: "WhatsApp Self-Phone Mode",
|
|
help: "Same-phone setup (bot uses your personal WhatsApp number).",
|
|
},
|
|
debounceMs: {
|
|
label: "WhatsApp Message Debounce (ms)",
|
|
help: "Debounce window (ms) for batching rapid consecutive messages from the same sender (0 to disable).",
|
|
},
|
|
configWrites: {
|
|
label: "WhatsApp Config Writes",
|
|
help: "Allow WhatsApp to write config in response to channel events/commands (default: true).",
|
|
},
|
|
},
|
|
label: "WhatsApp",
|
|
description: "works with your own number; recommend a separate phone + eSIM.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "xai",
|
|
idHint: "xai",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/xai-plugin",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw xAI plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "xai",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
webSearch: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {
|
|
apiKey: {
|
|
type: ["string", "object"],
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
inlineCitations: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
providers: ["xai"],
|
|
providerAuthEnvVars: {
|
|
xai: ["XAI_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "xai",
|
|
method: "api-key",
|
|
choiceId: "xai-api-key",
|
|
choiceLabel: "xAI API key",
|
|
groupId: "xai",
|
|
groupLabel: "xAI (Grok)",
|
|
groupHint: "API key",
|
|
optionKey: "xaiApiKey",
|
|
cliFlag: "--xai-api-key",
|
|
cliOption: "--xai-api-key <key>",
|
|
cliDescription: "xAI API key",
|
|
},
|
|
],
|
|
uiHints: {
|
|
"webSearch.apiKey": {
|
|
label: "Grok Search API Key",
|
|
help: "xAI API key for Grok web search (fallback: XAI_API_KEY env var).",
|
|
sensitive: true,
|
|
},
|
|
"webSearch.model": {
|
|
label: "Grok Search Model",
|
|
help: "Grok model override for web search.",
|
|
},
|
|
"webSearch.inlineCitations": {
|
|
label: "Inline Citations",
|
|
help: "Include inline markdown citations in Grok responses.",
|
|
},
|
|
},
|
|
contracts: {
|
|
webSearchProviders: ["grok"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "xiaomi",
|
|
idHint: "xiaomi",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/xiaomi-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Xiaomi provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "xiaomi",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["xiaomi"],
|
|
providerAuthEnvVars: {
|
|
xiaomi: ["XIAOMI_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "xiaomi",
|
|
method: "api-key",
|
|
choiceId: "xiaomi-api-key",
|
|
choiceLabel: "Xiaomi API key",
|
|
groupId: "xiaomi",
|
|
groupLabel: "Xiaomi",
|
|
groupHint: "API key",
|
|
optionKey: "xiaomiApiKey",
|
|
cliFlag: "--xiaomi-api-key",
|
|
cliOption: "--xiaomi-api-key <key>",
|
|
cliDescription: "Xiaomi API key",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
dirName: "zai",
|
|
idHint: "zai",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
packageName: "@openclaw/zai-provider",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Z.AI provider plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
},
|
|
manifest: {
|
|
id: "zai",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
providers: ["zai"],
|
|
providerAuthEnvVars: {
|
|
zai: ["ZAI_API_KEY", "Z_AI_API_KEY"],
|
|
},
|
|
providerAuthChoices: [
|
|
{
|
|
provider: "zai",
|
|
method: "api-key",
|
|
choiceId: "zai-api-key",
|
|
choiceLabel: "Z.AI API key",
|
|
groupId: "zai",
|
|
groupLabel: "Z.AI",
|
|
groupHint: "GLM Coding Plan / Global / CN",
|
|
optionKey: "zaiApiKey",
|
|
cliFlag: "--zai-api-key",
|
|
cliOption: "--zai-api-key <key>",
|
|
cliDescription: "Z.AI API key",
|
|
},
|
|
{
|
|
provider: "zai",
|
|
method: "coding-global",
|
|
choiceId: "zai-coding-global",
|
|
choiceLabel: "Coding-Plan-Global",
|
|
choiceHint: "GLM Coding Plan Global (api.z.ai)",
|
|
groupId: "zai",
|
|
groupLabel: "Z.AI",
|
|
groupHint: "GLM Coding Plan / Global / CN",
|
|
optionKey: "zaiApiKey",
|
|
cliFlag: "--zai-api-key",
|
|
cliOption: "--zai-api-key <key>",
|
|
cliDescription: "Z.AI API key",
|
|
},
|
|
{
|
|
provider: "zai",
|
|
method: "coding-cn",
|
|
choiceId: "zai-coding-cn",
|
|
choiceLabel: "Coding-Plan-CN",
|
|
choiceHint: "GLM Coding Plan CN (open.bigmodel.cn)",
|
|
groupId: "zai",
|
|
groupLabel: "Z.AI",
|
|
groupHint: "GLM Coding Plan / Global / CN",
|
|
optionKey: "zaiApiKey",
|
|
cliFlag: "--zai-api-key",
|
|
cliOption: "--zai-api-key <key>",
|
|
cliDescription: "Z.AI API key",
|
|
},
|
|
{
|
|
provider: "zai",
|
|
method: "global",
|
|
choiceId: "zai-global",
|
|
choiceLabel: "Global",
|
|
choiceHint: "Z.AI Global (api.z.ai)",
|
|
groupId: "zai",
|
|
groupLabel: "Z.AI",
|
|
groupHint: "GLM Coding Plan / Global / CN",
|
|
optionKey: "zaiApiKey",
|
|
cliFlag: "--zai-api-key",
|
|
cliOption: "--zai-api-key <key>",
|
|
cliDescription: "Z.AI API key",
|
|
},
|
|
{
|
|
provider: "zai",
|
|
method: "cn",
|
|
choiceId: "zai-cn",
|
|
choiceLabel: "CN",
|
|
choiceHint: "Z.AI CN (open.bigmodel.cn)",
|
|
groupId: "zai",
|
|
groupLabel: "Z.AI",
|
|
groupHint: "GLM Coding Plan / Global / CN",
|
|
optionKey: "zaiApiKey",
|
|
cliFlag: "--zai-api-key",
|
|
cliOption: "--zai-api-key <key>",
|
|
cliDescription: "Z.AI API key",
|
|
},
|
|
],
|
|
contracts: {
|
|
mediaUnderstandingProviders: ["zai"],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "zalo",
|
|
idHint: "zalo",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/zalo",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Zalo channel plugin",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "zalo",
|
|
label: "Zalo",
|
|
selectionLabel: "Zalo (Bot API)",
|
|
docsPath: "/channels/zalo",
|
|
docsLabel: "zalo",
|
|
blurb: "Vietnam-focused messaging platform with Bot API.",
|
|
aliases: ["zl"],
|
|
order: 80,
|
|
quickstartAllowFrom: true,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/zalo",
|
|
localPath: "extensions/zalo",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "zalo",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["zalo"],
|
|
channelConfigs: {
|
|
zalo: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
tokenFile: {
|
|
type: "string",
|
|
},
|
|
webhookUrl: {
|
|
type: "string",
|
|
},
|
|
webhookSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
botToken: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
tokenFile: {
|
|
type: "string",
|
|
},
|
|
webhookUrl: {
|
|
type: "string",
|
|
},
|
|
webhookSecret: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
oneOf: [
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "env",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
pattern: "^[A-Z][A-Z0-9_]{0,127}$",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "file",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
{
|
|
type: "object",
|
|
properties: {
|
|
source: {
|
|
type: "string",
|
|
const: "exec",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
pattern: "^[a-z][a-z0-9_-]{0,63}$",
|
|
},
|
|
id: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["source", "provider", "id"],
|
|
additionalProperties: false,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
webhookPath: {
|
|
type: "string",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
mediaMaxMb: {
|
|
type: "number",
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
label: "Zalo",
|
|
description: "Vietnam-focused messaging platform with Bot API.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
dirName: "zalouser",
|
|
idHint: "zalouser",
|
|
source: {
|
|
source: "./index.ts",
|
|
built: "index.js",
|
|
},
|
|
setupSource: {
|
|
source: "./setup-entry.ts",
|
|
built: "setup-entry.js",
|
|
},
|
|
packageName: "@openclaw/zalouser",
|
|
packageVersion: "2026.3.26",
|
|
packageDescription: "OpenClaw Zalo Personal Account plugin via native zca-js integration",
|
|
packageManifest: {
|
|
extensions: ["./index.ts"],
|
|
setupEntry: "./setup-entry.ts",
|
|
channel: {
|
|
id: "zalouser",
|
|
label: "Zalo Personal",
|
|
selectionLabel: "Zalo (Personal Account)",
|
|
docsPath: "/channels/zalouser",
|
|
docsLabel: "zalouser",
|
|
blurb: "Zalo personal account via QR code login.",
|
|
aliases: ["zlu"],
|
|
order: 85,
|
|
quickstartAllowFrom: false,
|
|
},
|
|
install: {
|
|
npmSpec: "@openclaw/zalouser",
|
|
localPath: "extensions/zalouser",
|
|
defaultChoice: "npm",
|
|
minHostVersion: ">=2026.3.26",
|
|
},
|
|
},
|
|
manifest: {
|
|
id: "zalouser",
|
|
configSchema: {
|
|
type: "object",
|
|
additionalProperties: false,
|
|
properties: {},
|
|
},
|
|
channels: ["zalouser"],
|
|
channelConfigs: {
|
|
zalouser: {
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
profile: {
|
|
type: "string",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
messagePrefix: {
|
|
type: "string",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
name: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
markdown: {
|
|
type: "object",
|
|
properties: {
|
|
tables: {
|
|
type: "string",
|
|
enum: ["off", "bullets", "code"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
profile: {
|
|
type: "string",
|
|
},
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
dmPolicy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
groupAllowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
groupPolicy: {
|
|
default: "allowlist",
|
|
type: "string",
|
|
enum: ["open", "disabled", "allowlist"],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "boolean",
|
|
},
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
tools: {
|
|
type: "object",
|
|
properties: {
|
|
allow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
alsoAllow: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
deny: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
messagePrefix: {
|
|
type: "string",
|
|
},
|
|
responsePrefix: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
label: "Zalo Personal",
|
|
description: "Zalo personal account via QR code login.",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
] as const;
|