mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-05 17:20:22 +00:00
15491 lines
455 KiB
TypeScript
15491 lines
455 KiB
TypeScript
// Auto-generated by scripts/generate-bundled-channel-config-metadata.ts. Do not edit directly.
|
|
|
|
export const GENERATED_BUNDLED_CHANNEL_CONFIG_METADATA = [
|
|
{
|
|
pluginId: "bluebubbles",
|
|
channelId: "bluebubbles",
|
|
label: "BlueBubbles",
|
|
description: "iMessage via the BlueBubbles mac app + REST API.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
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,
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
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,
|
|
},
|
|
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",
|
|
},
|
|
},
|
|
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=["*"].',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "discord",
|
|
channelId: "discord",
|
|
label: "Discord",
|
|
description: "very well supported right now.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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: {
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupEnabled: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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: {
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
defaultTo: {
|
|
type: "string",
|
|
},
|
|
dm: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
policy: {
|
|
type: "string",
|
|
enum: ["pairing", "allowlist", "open", "disabled"],
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
groupEnabled: {
|
|
type: "boolean",
|
|
},
|
|
groupChannels: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
},
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
channels: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
roles: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
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: {
|
|
type: "string",
|
|
},
|
|
},
|
|
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.',
|
|
},
|
|
"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.",
|
|
sensitive: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "feishu",
|
|
channelId: "feishu",
|
|
label: "Feishu",
|
|
description: "飞书/Lark enterprise messaging with doc/wiki/drive tools.",
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "googlechat",
|
|
channelId: "googlechat",
|
|
label: "Google Chat",
|
|
description: "Google Workspace Chat app with HTTP webhook.",
|
|
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",
|
|
},
|
|
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,
|
|
},
|
|
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",
|
|
},
|
|
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,
|
|
},
|
|
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"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
required: ["groupPolicy"],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "imessage",
|
|
channelId: "imessage",
|
|
label: "iMessage",
|
|
description: "this is still a work in progress.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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.",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "irc",
|
|
channelId: "irc",
|
|
label: "IRC",
|
|
description: "classic IRC networks with DM/channel routing and pairing controls.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
dmHistoryLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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).",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "line",
|
|
channelId: "line",
|
|
label: "LINE",
|
|
description: "LINE Messaging API webhook bot.",
|
|
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",
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
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",
|
|
},
|
|
threadBindings: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
idleHours: {
|
|
type: "number",
|
|
},
|
|
maxAgeHours: {
|
|
type: "number",
|
|
},
|
|
spawnSubagentSessions: {
|
|
type: "boolean",
|
|
},
|
|
spawnAcpSessions: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "matrix",
|
|
channelId: "matrix",
|
|
label: "Matrix",
|
|
description: "open protocol; install the plugin to enable.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
homeserver: {
|
|
type: "string",
|
|
},
|
|
allowPrivateNetwork: {
|
|
type: "boolean",
|
|
},
|
|
proxy: {
|
|
type: "string",
|
|
},
|
|
userId: {
|
|
type: "string",
|
|
},
|
|
accessToken: {
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
blockStreaming: {
|
|
type: "boolean",
|
|
},
|
|
streaming: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
enum: ["partial", "off"],
|
|
},
|
|
{
|
|
type: "boolean",
|
|
},
|
|
],
|
|
},
|
|
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",
|
|
},
|
|
historyLimit: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
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",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
threadReplies: {
|
|
type: "string",
|
|
enum: ["off", "inbound", "always"],
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
account: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
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: {
|
|
account: {
|
|
type: "string",
|
|
},
|
|
enabled: {
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "mattermost",
|
|
channelId: "mattermost",
|
|
label: "Mattermost",
|
|
description: "self-hosted Slack-style chat; install the plugin to enable.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "msteams",
|
|
channelId: "msteams",
|
|
label: "Microsoft Teams",
|
|
description: "Teams SDK; enterprise support.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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,
|
|
},
|
|
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).",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "nextcloud-talk",
|
|
channelId: "nextcloud-talk",
|
|
label: "Nextcloud Talk",
|
|
description: "Self-hosted chat via Nextcloud Talk webhook bots.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "nostr",
|
|
channelId: "nostr",
|
|
label: "Nostr",
|
|
description: "Decentralized protocol; encrypted DMs via NIP-04.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
privateKey: {
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "qqbot",
|
|
channelId: "qqbot",
|
|
label: "QQ Bot",
|
|
description:
|
|
"connect to QQ via official QQ Bot API with group chat and direct message support.",
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
appId: {
|
|
type: "string",
|
|
},
|
|
clientSecret: {
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
clientSecretFile: {
|
|
type: "string",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
markdownSupport: {
|
|
type: "boolean",
|
|
},
|
|
voiceDirectUploadFormats: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
audioFormatPolicy: {
|
|
type: "object",
|
|
properties: {
|
|
sttDirectFormats: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
uploadDirectFormats: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
transcodeEnabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
urlDirectUpload: {
|
|
type: "boolean",
|
|
},
|
|
upgradeUrl: {
|
|
type: "string",
|
|
},
|
|
upgradeMode: {
|
|
type: "string",
|
|
enum: ["doc", "hot-reload"],
|
|
},
|
|
tts: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
apiKey: {
|
|
type: "string",
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
voice: {
|
|
type: "string",
|
|
},
|
|
authStyle: {
|
|
type: "string",
|
|
enum: ["bearer", "api-key"],
|
|
},
|
|
queryParams: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "string",
|
|
},
|
|
},
|
|
speed: {
|
|
type: "number",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
stt: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
provider: {
|
|
type: "string",
|
|
},
|
|
baseUrl: {
|
|
type: "string",
|
|
},
|
|
apiKey: {
|
|
type: "string",
|
|
},
|
|
model: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
accounts: {
|
|
type: "object",
|
|
properties: {},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
enabled: {
|
|
type: "boolean",
|
|
},
|
|
name: {
|
|
type: "string",
|
|
},
|
|
appId: {
|
|
type: "string",
|
|
},
|
|
clientSecret: {
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
clientSecretFile: {
|
|
type: "string",
|
|
},
|
|
allowFrom: {
|
|
type: "array",
|
|
items: {
|
|
anyOf: [
|
|
{
|
|
type: "string",
|
|
},
|
|
{
|
|
type: "number",
|
|
},
|
|
],
|
|
},
|
|
},
|
|
systemPrompt: {
|
|
type: "string",
|
|
},
|
|
markdownSupport: {
|
|
type: "boolean",
|
|
},
|
|
voiceDirectUploadFormats: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
audioFormatPolicy: {
|
|
type: "object",
|
|
properties: {
|
|
sttDirectFormats: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
uploadDirectFormats: {
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
transcodeEnabled: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
urlDirectUpload: {
|
|
type: "boolean",
|
|
},
|
|
upgradeUrl: {
|
|
type: "string",
|
|
},
|
|
upgradeMode: {
|
|
type: "string",
|
|
enum: ["doc", "hot-reload"],
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
defaultAccount: {
|
|
type: "string",
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "signal",
|
|
channelId: "signal",
|
|
label: "Signal",
|
|
description: 'signal-cli linked device; more setup (David Reagans: "Hop on 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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
ingest: {
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
groups: {
|
|
type: "object",
|
|
propertyNames: {
|
|
type: "string",
|
|
},
|
|
additionalProperties: {
|
|
type: "object",
|
|
properties: {
|
|
requireMention: {
|
|
type: "boolean",
|
|
},
|
|
ingest: {
|
|
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.",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "slack",
|
|
channelId: "slack",
|
|
label: "Slack",
|
|
description: "supported (Socket Mode).",
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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: {
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
nativeStreaming: {
|
|
type: "boolean",
|
|
},
|
|
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",
|
|
},
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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: {
|
|
type: "string",
|
|
enum: ["off", "partial", "block", "progress"],
|
|
},
|
|
nativeStreaming: {
|
|
type: "boolean",
|
|
},
|
|
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",
|
|
},
|
|
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.",
|
|
},
|
|
execApprovals: {
|
|
label: "Slack Exec Approvals",
|
|
help: "Slack-native exec approval routing and approver authorization. When unset, OpenClaw auto-enables DM-first native approvals if approvers can be resolved for this workspace account.",
|
|
},
|
|
"execApprovals.enabled": {
|
|
label: "Slack Exec Approvals Enabled",
|
|
help: 'Controls Slack native exec approvals for this account: unset or "auto" enables DM-first native approvals when approvers can be resolved, true forces native approvals on, and false disables them.',
|
|
},
|
|
"execApprovals.approvers": {
|
|
label: "Slack Exec Approval Approvers",
|
|
help: "Slack user IDs allowed to approve exec requests for this workspace account. Use Slack user IDs or user targets such as `U123`, `user:U123`, or `<@U123>`. If you leave this unset, OpenClaw falls back to commands.ownerAllowFrom when possible.",
|
|
},
|
|
"execApprovals.agentFilter": {
|
|
label: "Slack Exec Approval Agent Filter",
|
|
help: 'Optional allowlist of agent IDs eligible for Slack exec approvals, for example `["main", "ops-agent"]`. Use this to keep approval prompts scoped to the agents you actually operate from Slack.',
|
|
},
|
|
"execApprovals.sessionFilter": {
|
|
label: "Slack Exec Approval Session Filter",
|
|
help: "Optional session-key filters matched as substring or regex-style patterns before Slack approval routing is used. Use narrow patterns so Slack approvals only appear for intended sessions.",
|
|
},
|
|
"execApprovals.target": {
|
|
label: "Slack Exec Approval Target",
|
|
help: 'Controls where Slack approval prompts are sent: "dm" sends to approver DMs (default), "channel" sends to the originating Slack chat/thread, and "both" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted channels.',
|
|
},
|
|
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).",
|
|
},
|
|
"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).",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "synology-chat",
|
|
channelId: "synology-chat",
|
|
label: "Synology Chat",
|
|
description: "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.",
|
|
schema: {
|
|
$schema: "http://json-schema.org/draft-07/schema#",
|
|
type: "object",
|
|
properties: {
|
|
dangerouslyAllowNameMatching: {
|
|
type: "boolean",
|
|
},
|
|
dangerouslyAllowInheritedWebhookPath: {
|
|
type: "boolean",
|
|
},
|
|
},
|
|
additionalProperties: {},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "telegram",
|
|
channelId: "telegram",
|
|
label: "Telegram",
|
|
description: "simplest way to get started — register a bot with @BotFather and get going.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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",
|
|
},
|
|
ingest: {
|
|
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",
|
|
},
|
|
ingest: {
|
|
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",
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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",
|
|
},
|
|
ingest: {
|
|
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",
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
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: {
|
|
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,
|
|
},
|
|
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"],
|
|
},
|
|
dangerouslyAllowPrivateNetwork: {
|
|
description:
|
|
"Dangerous opt-in for trusted Telegram fake-IP or transparent-proxy environments where api.telegram.org resolves to private/internal/special-use addresses during media downloads.",
|
|
type: "boolean",
|
|
},
|
|
},
|
|
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",
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
apiRoot: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
trustedLocalFileRoots: {
|
|
description:
|
|
"Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths under these roots are read directly; all other absolute paths are rejected.",
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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",
|
|
},
|
|
ingest: {
|
|
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",
|
|
},
|
|
ingest: {
|
|
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",
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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",
|
|
},
|
|
ingest: {
|
|
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",
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
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: {
|
|
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,
|
|
},
|
|
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"],
|
|
},
|
|
dangerouslyAllowPrivateNetwork: {
|
|
description:
|
|
"Dangerous opt-in for trusted Telegram fake-IP or transparent-proxy environments where api.telegram.org resolves to private/internal/special-use addresses during media downloads.",
|
|
type: "boolean",
|
|
},
|
|
},
|
|
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",
|
|
},
|
|
errorPolicy: {
|
|
type: "string",
|
|
enum: ["always", "once", "silent"],
|
|
},
|
|
errorCooldownMs: {
|
|
type: "integer",
|
|
minimum: 0,
|
|
maximum: 9007199254740991,
|
|
},
|
|
apiRoot: {
|
|
type: "string",
|
|
format: "uri",
|
|
},
|
|
trustedLocalFileRoots: {
|
|
description:
|
|
"Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths under these roots are read directly; all other absolute paths are rejected.",
|
|
type: "array",
|
|
items: {
|
|
type: "string",
|
|
},
|
|
},
|
|
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).",
|
|
},
|
|
"network.dangerouslyAllowPrivateNetwork": {
|
|
label: "Telegram Dangerously Allow Private Network",
|
|
help: "Dangerous opt-in for trusted fake-IP or transparent-proxy environments where Telegram media downloads resolve api.telegram.org to private/internal/special-use addresses.",
|
|
},
|
|
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.",
|
|
},
|
|
trustedLocalFileRoots: {
|
|
label: "Telegram Trusted Local File Roots",
|
|
help: "Trusted local filesystem roots for self-hosted Telegram Bot API absolute file_path values. Only absolute paths inside these roots are read directly; all other absolute paths are rejected.",
|
|
},
|
|
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. When unset, OpenClaw auto-enables DM-first native approvals if approvers can be resolved for the selected bot account.",
|
|
},
|
|
"execApprovals.enabled": {
|
|
label: "Telegram Exec Approvals Enabled",
|
|
help: 'Controls Telegram native exec approvals for this account: unset or "auto" enables DM-first native approvals when approvers can be resolved, true forces native approvals on, and false disables them.',
|
|
},
|
|
"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. If you leave this unset, OpenClaw falls back to numeric owner IDs inferred from channels.telegram.allowFrom and direct-message defaultTo when possible.",
|
|
},
|
|
"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.",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "tlon",
|
|
channelId: "tlon",
|
|
label: "Tlon",
|
|
description: "decentralized messaging on Urbit; install the plugin to enable.",
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "twitch",
|
|
channelId: "twitch",
|
|
label: "Twitch",
|
|
description: "Twitch chat integration",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
pluginId: "whatsapp",
|
|
channelId: "whatsapp",
|
|
label: "WhatsApp",
|
|
description: "works with your own number; recommend a separate phone + eSIM.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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,
|
|
},
|
|
reactionLevel: {
|
|
type: "string",
|
|
enum: ["off", "ack", "minimal", "extensive"],
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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"],
|
|
},
|
|
contextVisibility: {
|
|
type: "string",
|
|
enum: ["all", "allowlist", "allowlist_quote"],
|
|
},
|
|
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,
|
|
},
|
|
reactionLevel: {
|
|
type: "string",
|
|
enum: ["off", "ack", "minimal", "extensive"],
|
|
},
|
|
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).",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "zalo",
|
|
channelId: "zalo",
|
|
label: "Zalo",
|
|
description: "Vietnam-focused messaging platform with Bot API.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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", "block"],
|
|
},
|
|
},
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
pluginId: "zalouser",
|
|
channelId: "zalouser",
|
|
label: "Zalo Personal",
|
|
description: "Zalo personal account via QR code login.",
|
|
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", "block"],
|
|
},
|
|
},
|
|
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: {
|
|
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", "block"],
|
|
},
|
|
},
|
|
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: {
|
|
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,
|
|
},
|
|
},
|
|
] as const;
|