// 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,
        },
        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,
              },
              serverUrl: {
                type: "string",
              },
              password: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              webhookPath: {
                type: "string",
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              enrichGroupParticipantsFromContacts: {
                default: true,
                type: "boolean",
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              mediaMaxMb: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              mediaLocalRoots: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              sendReadReceipts: {
                type: "boolean",
              },
              allowPrivateNetwork: {
                type: "boolean",
              },
              blockStreaming: {
                type: "boolean",
              },
              groups: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                  additionalProperties: false,
                },
              },
            },
            required: ["enrichGroupParticipantsFromContacts"],
            additionalProperties: false,
          },
        },
        defaultAccount: {
          type: "string",
        },
        actions: {
          type: "object",
          properties: {
            reactions: {
              default: true,
              type: "boolean",
            },
            edit: {
              default: true,
              type: "boolean",
            },
            unsend: {
              default: true,
              type: "boolean",
            },
            reply: {
              default: true,
              type: "boolean",
            },
            sendWithEffect: {
              default: true,
              type: "boolean",
            },
            renameGroup: {
              default: true,
              type: "boolean",
            },
            setGroupIcon: {
              default: true,
              type: "boolean",
            },
            addParticipant: {
              default: true,
              type: "boolean",
            },
            removeParticipant: {
              default: true,
              type: "boolean",
            },
            leaveGroup: {
              default: true,
              type: "boolean",
            },
            sendAttachment: {
              default: true,
              type: "boolean",
            },
          },
          required: [
            "reactions",
            "edit",
            "unsend",
            "reply",
            "sendWithEffect",
            "renameGroup",
            "setGroupIcon",
            "addParticipant",
            "removeParticipant",
            "leaveGroup",
            "sendAttachment",
          ],
          additionalProperties: false,
        },
      },
      required: ["enrichGroupParticipantsFromContacts"],
      additionalProperties: false,
    },
    uiHints: {
      "": {
        label: "BlueBubbles",
        help: "BlueBubbles channel provider configuration used for Apple messaging bridge integrations. Keep DM policy aligned with your trusted sender model in shared deployments.",
      },
      dmPolicy: {
        label: "BlueBubbles DM Policy",
        help: 'Direct message access control ("pairing" recommended). "open" requires channels.bluebubbles.allowFrom=["*"].',
      },
    },
  },
  {
    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: {
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    ignoreOtherMentions: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        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: {
                          allow: {
                            type: "boolean",
                          },
                          requireMention: {
                            type: "boolean",
                          },
                          ignoreOtherMentions: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          users: {
                            type: "array",
                            items: {
                              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.',
      },
      streamMode: {
        label: "Discord Stream Mode (Legacy)",
        help: "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.",
      },
      "draftChunk.minChars": {
        label: "Discord Draft Chunk Min Chars",
        help: 'Minimum chars before emitting a Discord stream preview update when channels.discord.streaming="block" (default: 200).',
      },
      "draftChunk.maxChars": {
        label: "Discord Draft Chunk Max Chars",
        help: 'Target max size for a Discord stream preview chunk when channels.discord.streaming="block" (default: 800; clamped to channels.discord.textChunkLimit).',
      },
      "draftChunk.breakPreference": {
        label: "Discord Draft Chunk Break Preference",
        help: "Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.",
      },
      "retry.attempts": {
        label: "Discord Retry Attempts",
        help: "Max retry attempts for outbound Discord API calls (default: 3).",
      },
      "retry.minDelayMs": {
        label: "Discord Retry Min Delay (ms)",
        help: "Minimum retry delay in ms for Discord outbound calls.",
      },
      "retry.maxDelayMs": {
        label: "Discord Retry Max Delay (ms)",
        help: "Maximum retry delay cap in ms for Discord outbound calls.",
      },
      "retry.jitter": {
        label: "Discord Retry Jitter",
        help: "Jitter factor (0-1) applied to Discord retry delays.",
      },
      maxLinesPerMessage: {
        label: "Discord Max Lines Per Message",
        help: "Soft max line count per Discord message (default: 17).",
      },
      "inboundWorker.runTimeoutMs": {
        label: "Discord Inbound Worker Timeout (ms)",
        help: "Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts.<id>.inboundWorker.runTimeoutMs.",
      },
      "eventQueue.listenerTimeout": {
        label: "Discord EventQueue Listener Timeout (ms)",
        help: "Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts.<id>.eventQueue.listenerTimeout.",
      },
      "eventQueue.maxQueueSize": {
        label: "Discord EventQueue Max Queue Size",
        help: "Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts.<id>.eventQueue.maxQueueSize.",
      },
      "eventQueue.maxConcurrency": {
        label: "Discord EventQueue Max Concurrency",
        help: "Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts.<id>.eventQueue.maxConcurrency.",
      },
      "threadBindings.enabled": {
        label: "Discord Thread Binding Enabled",
        help: "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.",
      },
      "threadBindings.idleHours": {
        label: "Discord Thread Binding Idle Timeout (hours)",
        help: "Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.",
      },
      "threadBindings.maxAgeHours": {
        label: "Discord Thread Binding Max Age (hours)",
        help: "Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.",
      },
      "threadBindings.spawnSubagentSessions": {
        label: "Discord Thread-Bound Subagent Spawn",
        help: "Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.",
      },
      "threadBindings.spawnAcpSessions": {
        label: "Discord Thread-Bound ACP Spawn",
        help: "Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.",
      },
      "ui.components.accentColor": {
        label: "Discord Component Accent Color",
        help: "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts.<id>.ui.components.accentColor.",
      },
      "intents.presence": {
        label: "Discord Presence Intent",
        help: "Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.",
      },
      "intents.guildMembers": {
        label: "Discord Guild Members Intent",
        help: "Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.",
      },
      "voice.enabled": {
        label: "Discord Voice Enabled",
        help: "Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.",
      },
      "voice.autoJoin": {
        label: "Discord Voice Auto-Join",
        help: "Voice channels to auto-join on startup (list of guildId/channelId entries).",
      },
      "voice.daveEncryption": {
        label: "Discord Voice DAVE Encryption",
        help: "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).",
      },
      "voice.decryptionFailureTolerance": {
        label: "Discord Voice Decrypt Failure Tolerance",
        help: "Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).",
      },
      "voice.tts": {
        label: "Discord Voice Text-to-Speech",
        help: "Optional TTS overrides for Discord voice playback (merged with messages.tts).",
      },
      "pluralkit.enabled": {
        label: "Discord PluralKit Enabled",
        help: "Resolve PluralKit proxied messages and treat system members as distinct senders.",
      },
      "pluralkit.token": {
        label: "Discord PluralKit Token",
        help: "Optional PluralKit token for resolving private systems or members.",
      },
      activity: {
        label: "Discord Presence Activity",
        help: "Discord presence activity text (defaults to custom status).",
      },
      status: {
        label: "Discord Presence Status",
        help: "Discord presence status (online, dnd, idle, invisible).",
      },
      "autoPresence.enabled": {
        label: "Discord Auto Presence Enabled",
        help: "Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.",
      },
      "autoPresence.intervalMs": {
        label: "Discord Auto Presence Check Interval (ms)",
        help: "How often to evaluate Discord auto-presence state in milliseconds (default: 30000).",
      },
      "autoPresence.minUpdateIntervalMs": {
        label: "Discord Auto Presence Min Update Interval (ms)",
        help: "Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.",
      },
      "autoPresence.healthyText": {
        label: "Discord Auto Presence Healthy Text",
        help: "Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.",
      },
      "autoPresence.degradedText": {
        label: "Discord Auto Presence Degraded Text",
        help: "Optional custom status text while runtime/model availability is degraded or unknown (idle).",
      },
      "autoPresence.exhaustedText": {
        label: "Discord Auto Presence Exhausted Text",
        help: "Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.",
      },
      activityType: {
        label: "Discord Presence Activity Type",
        help: "Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).",
      },
      activityUrl: {
        label: "Discord Presence Activity URL",
        help: "Discord presence streaming URL (required for activityType=1).",
      },
      allowBots: {
        label: "Discord Allow Bot Messages",
        help: 'Allow bot-authored messages to trigger Discord replies (default: false). Set "mentions" to only accept bot messages that mention the bot.',
      },
      token: {
        label: "Discord Bot Token",
        help: "Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.",
        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",
              },
              allow: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              users: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              systemPrompt: {
                type: "string",
              },
            },
            additionalProperties: false,
          },
        },
        defaultTo: {
          type: "string",
        },
        serviceAccount: {
          anyOf: [
            {
              type: "string",
            },
            {
              type: "object",
              propertyNames: {
                type: "string",
              },
              additionalProperties: {},
            },
            {
              oneOf: [
                {
                  type: "object",
                  properties: {
                    source: {
                      type: "string",
                      const: "env",
                    },
                    provider: {
                      type: "string",
                      pattern: "^[a-z][a-z0-9_-]{0,63}$",
                    },
                    id: {
                      type: "string",
                      pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                    },
                  },
                  required: ["source", "provider", "id"],
                  additionalProperties: false,
                },
                {
                  type: "object",
                  properties: {
                    source: {
                      type: "string",
                      const: "file",
                    },
                    provider: {
                      type: "string",
                      pattern: "^[a-z][a-z0-9_-]{0,63}$",
                    },
                    id: {
                      type: "string",
                    },
                  },
                  required: ["source", "provider", "id"],
                  additionalProperties: false,
                },
                {
                  type: "object",
                  properties: {
                    source: {
                      type: "string",
                      const: "exec",
                    },
                    provider: {
                      type: "string",
                      pattern: "^[a-z][a-z0-9_-]{0,63}$",
                    },
                    id: {
                      type: "string",
                    },
                  },
                  required: ["source", "provider", "id"],
                  additionalProperties: false,
                },
              ],
            },
          ],
        },
        serviceAccountRef: {
          oneOf: [
            {
              type: "object",
              properties: {
                source: {
                  type: "string",
                  const: "env",
                },
                provider: {
                  type: "string",
                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                },
                id: {
                  type: "string",
                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                },
              },
              required: ["source", "provider", "id"],
              additionalProperties: false,
            },
            {
              type: "object",
              properties: {
                source: {
                  type: "string",
                  const: "file",
                },
                provider: {
                  type: "string",
                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                },
                id: {
                  type: "string",
                },
              },
              required: ["source", "provider", "id"],
              additionalProperties: false,
            },
            {
              type: "object",
              properties: {
                source: {
                  type: "string",
                  const: "exec",
                },
                provider: {
                  type: "string",
                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                },
                id: {
                  type: "string",
                },
              },
              required: ["source", "provider", "id"],
              additionalProperties: false,
            },
          ],
        },
        serviceAccountFile: {
          type: "string",
        },
        audienceType: {
          type: "string",
          enum: ["app-url", "project-number"],
        },
        audience: {
          type: "string",
        },
        appPrincipal: {
          type: "string",
        },
        webhookPath: {
          type: "string",
        },
        webhookUrl: {
          type: "string",
        },
        botUser: {
          type: "string",
        },
        historyLimit: {
          type: "integer",
          minimum: 0,
          maximum: 9007199254740991,
        },
        dmHistoryLimit: {
          type: "integer",
          minimum: 0,
          maximum: 9007199254740991,
        },
        dms: {
          type: "object",
          propertyNames: {
            type: "string",
          },
          additionalProperties: {
            type: "object",
            properties: {
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
            },
            additionalProperties: false,
          },
        },
        textChunkLimit: {
          type: "integer",
          exclusiveMinimum: 0,
          maximum: 9007199254740991,
        },
        chunkMode: {
          type: "string",
          enum: ["length", "newline"],
        },
        blockStreaming: {
          type: "boolean",
        },
        blockStreamingCoalesce: {
          type: "object",
          properties: {
            minChars: {
              type: "integer",
              exclusiveMinimum: 0,
              maximum: 9007199254740991,
            },
            maxChars: {
              type: "integer",
              exclusiveMinimum: 0,
              maximum: 9007199254740991,
            },
            idleMs: {
              type: "integer",
              minimum: 0,
              maximum: 9007199254740991,
            },
          },
          additionalProperties: false,
        },
        streamMode: {
          default: "replace",
          type: "string",
          enum: ["replace", "status_final", "append"],
        },
        mediaMaxMb: {
          type: "number",
          exclusiveMinimum: 0,
        },
        replyToMode: {
          anyOf: [
            {
              type: "string",
              const: "off",
            },
            {
              type: "string",
              const: "first",
            },
            {
              type: "string",
              const: "all",
            },
          ],
        },
        actions: {
          type: "object",
          properties: {
            reactions: {
              type: "boolean",
            },
          },
          additionalProperties: false,
        },
        dm: {
          type: "object",
          properties: {
            enabled: {
              type: "boolean",
            },
            policy: {
              default: "pairing",
              type: "string",
              enum: ["pairing", "allowlist", "open", "disabled"],
            },
            allowFrom: {
              type: "array",
              items: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    type: "number",
                  },
                ],
              },
            },
          },
          required: ["policy"],
          additionalProperties: false,
        },
        healthMonitor: {
          type: "object",
          properties: {
            enabled: {
              type: "boolean",
            },
          },
          additionalProperties: false,
        },
        typingIndicator: {
          type: "string",
          enum: ["none", "message", "reaction"],
        },
        responsePrefix: {
          type: "string",
        },
        accounts: {
          type: "object",
          propertyNames: {
            type: "string",
          },
          additionalProperties: {
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              enabled: {
                type: "boolean",
              },
              configWrites: {
                type: "boolean",
              },
              allowBots: {
                type: "boolean",
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              defaultTo: {
                type: "string",
              },
              serviceAccount: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    type: "object",
                    propertyNames: {
                      type: "string",
                    },
                    additionalProperties: {},
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              serviceAccountRef: {
                oneOf: [
                  {
                    type: "object",
                    properties: {
                      source: {
                        type: "string",
                        const: "env",
                      },
                      provider: {
                        type: "string",
                        pattern: "^[a-z][a-z0-9_-]{0,63}$",
                      },
                      id: {
                        type: "string",
                        pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                      },
                    },
                    required: ["source", "provider", "id"],
                    additionalProperties: false,
                  },
                  {
                    type: "object",
                    properties: {
                      source: {
                        type: "string",
                        const: "file",
                      },
                      provider: {
                        type: "string",
                        pattern: "^[a-z][a-z0-9_-]{0,63}$",
                      },
                      id: {
                        type: "string",
                      },
                    },
                    required: ["source", "provider", "id"],
                    additionalProperties: false,
                  },
                  {
                    type: "object",
                    properties: {
                      source: {
                        type: "string",
                        const: "exec",
                      },
                      provider: {
                        type: "string",
                        pattern: "^[a-z][a-z0-9_-]{0,63}$",
                      },
                      id: {
                        type: "string",
                      },
                    },
                    required: ["source", "provider", "id"],
                    additionalProperties: false,
                  },
                ],
              },
              serviceAccountFile: {
                type: "string",
              },
              audienceType: {
                type: "string",
                enum: ["app-url", "project-number"],
              },
              audience: {
                type: "string",
              },
              appPrincipal: {
                type: "string",
              },
              webhookPath: {
                type: "string",
              },
              webhookUrl: {
                type: "string",
              },
              botUser: {
                type: "string",
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              streamMode: {
                default: "replace",
                type: "string",
                enum: ["replace", "status_final", "append"],
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              replyToMode: {
                anyOf: [
                  {
                    type: "string",
                    const: "off",
                  },
                  {
                    type: "string",
                    const: "first",
                  },
                  {
                    type: "string",
                    const: "all",
                  },
                ],
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              dm: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  policy: {
                    default: "pairing",
                    type: "string",
                    enum: ["pairing", "allowlist", "open", "disabled"],
                  },
                  allowFrom: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                },
                required: ["policy"],
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              typingIndicator: {
                type: "string",
                enum: ["none", "message", "reaction"],
              },
              responsePrefix: {
                type: "string",
              },
            },
            required: ["groupPolicy", "streamMode"],
            additionalProperties: false,
          },
        },
        defaultAccount: {
          type: "string",
        },
      },
      required: ["groupPolicy", "streamMode"],
      additionalProperties: false,
    },
  },
  {
    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",
              },
              allow: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              allowBots: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "string",
                    const: "mentions",
                  },
                ],
              },
              tools: {
                type: "object",
                properties: {
                  allow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  alsoAllow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  deny: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                },
                additionalProperties: false,
              },
              autoReply: {
                type: "boolean",
              },
              users: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              skills: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              systemPrompt: {
                type: "string",
              },
            },
            additionalProperties: false,
          },
        },
        rooms: {
          type: "object",
          properties: {},
          additionalProperties: {
            type: "object",
            properties: {
              account: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              allow: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              allowBots: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "string",
                    const: "mentions",
                  },
                ],
              },
              tools: {
                type: "object",
                properties: {
                  allow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  alsoAllow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  deny: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                },
                additionalProperties: false,
              },
              autoReply: {
                type: "boolean",
              },
              users: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              skills: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              systemPrompt: {
                type: "string",
              },
            },
            additionalProperties: false,
          },
        },
        actions: {
          type: "object",
          properties: {
            reactions: {
              type: "boolean",
            },
            messages: {
              type: "boolean",
            },
            pins: {
              type: "boolean",
            },
            profile: {
              type: "boolean",
            },
            memberInfo: {
              type: "boolean",
            },
            channelInfo: {
              type: "boolean",
            },
            verification: {
              type: "boolean",
            },
          },
          additionalProperties: false,
        },
      },
      additionalProperties: false,
    },
  },
  {
    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",
              },
              allow: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              tools: {
                type: "object",
                properties: {
                  allow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  alsoAllow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  deny: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                },
                additionalProperties: false,
              },
              toolsBySender: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    allow: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    alsoAllow: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    deny: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                  },
                  additionalProperties: false,
                },
              },
              allowBots: {
                type: "boolean",
              },
              users: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              skills: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              systemPrompt: {
                type: "string",
              },
            },
            additionalProperties: false,
          },
        },
        heartbeat: {
          type: "object",
          properties: {
            showOk: {
              type: "boolean",
            },
            showAlerts: {
              type: "boolean",
            },
            useIndicator: {
              type: "boolean",
            },
          },
          additionalProperties: false,
        },
        healthMonitor: {
          type: "object",
          properties: {
            enabled: {
              type: "boolean",
            },
          },
          additionalProperties: false,
        },
        responsePrefix: {
          type: "string",
        },
        ackReaction: {
          type: "string",
        },
        typingReaction: {
          type: "string",
        },
        accounts: {
          type: "object",
          propertyNames: {
            type: "string",
          },
          additionalProperties: {
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              mode: {
                type: "string",
                enum: ["socket", "http"],
              },
              signingSecret: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              webhookPath: {
                type: "string",
              },
              capabilities: {
                anyOf: [
                  {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  {
                    type: "object",
                    properties: {
                      interactiveReplies: {
                        type: "boolean",
                      },
                    },
                    additionalProperties: false,
                  },
                ],
              },
              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",
                    },
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    allowBots: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              ackReaction: {
                type: "string",
              },
              typingReaction: {
                type: "string",
              },
            },
            required: ["userTokenReadOnly"],
            additionalProperties: false,
          },
        },
        defaultAccount: {
          type: "string",
        },
      },
      required: ["mode", "webhookPath", "userTokenReadOnly", "groupPolicy"],
      additionalProperties: false,
    },
    uiHints: {
      "": {
        label: "Slack",
        help: "Slack channel provider configuration for bot/app tokens, streaming behavior, and DM policy controls. Keep token handling and thread behavior explicit to avoid noisy workspace interactions.",
      },
      "dm.policy": {
        label: "Slack DM Policy",
        help: 'Direct message access control ("pairing" recommended). "open" requires channels.slack.allowFrom=["*"] (legacy: channels.slack.dm.allowFrom).',
      },
      dmPolicy: {
        label: "Slack DM Policy",
        help: 'Direct message access control ("pairing" recommended). "open" requires channels.slack.allowFrom=["*"].',
      },
      configWrites: {
        label: "Slack Config Writes",
        help: "Allow Slack to write config in response to channel events/commands (default: true).",
      },
      "commands.native": {
        label: "Slack Native Commands",
        help: 'Override native commands for Slack (bool or "auto").',
      },
      "commands.nativeSkills": {
        label: "Slack Native Skill Commands",
        help: 'Override native skill commands for Slack (bool or "auto").',
      },
      allowBots: {
        label: "Slack Allow Bot Messages",
        help: "Allow bot-authored messages to trigger Slack replies (default: false).",
      },
      botToken: {
        label: "Slack Bot Token",
        help: "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.",
      },
      appToken: {
        label: "Slack App Token",
        help: "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.",
      },
      userToken: {
        label: "Slack User Token",
        help: "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.",
      },
      userTokenReadOnly: {
        label: "Slack User Token Read Only",
        help: "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.",
      },
      "capabilities.interactiveReplies": {
        label: "Slack Interactive Replies",
        help: "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.",
      },
      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).",
      },
      streamMode: {
        label: "Slack Stream Mode (Legacy)",
        help: "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.",
      },
      "thread.historyScope": {
        label: "Slack Thread History Scope",
        help: 'Scope for Slack thread history context ("thread" isolates per thread; "channel" reuses channel history).',
      },
      "thread.inheritParent": {
        label: "Slack Thread Parent Inheritance",
        help: "If true, Slack thread sessions inherit the parent channel transcript (default: false).",
      },
      "thread.initialHistoryLimit": {
        label: "Slack Thread Initial History Limit",
        help: "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).",
      },
    },
  },
  {
    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",
        },
        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",
              },
              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.",
      },
      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: {
              allow: {
                type: "boolean",
              },
              enabled: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              tools: {
                type: "object",
                properties: {
                  allow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  alsoAllow: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  deny: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                },
                additionalProperties: false,
              },
            },
            additionalProperties: false,
          },
        },
        messagePrefix: {
          type: "string",
        },
        responsePrefix: {
          type: "string",
        },
        accounts: {
          type: "object",
          properties: {},
          additionalProperties: {
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code", "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: {
                    allow: {
                      type: "boolean",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                  additionalProperties: false,
                },
              },
              messagePrefix: {
                type: "string",
              },
              responsePrefix: {
                type: "string",
              },
            },
            required: ["groupPolicy"],
            additionalProperties: false,
          },
        },
        defaultAccount: {
          type: "string",
        },
      },
      required: ["groupPolicy"],
      additionalProperties: false,
    },
  },
] as const;
