// Auto-generated by scripts/generate-bundled-plugin-metadata.mjs. Do not edit directly.

export const GENERATED_BUNDLED_PLUGIN_METADATA = [
  {
    dirName: "acpx",
    idHint: "acpx",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/acpx",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw ACP runtime backend via acpx",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "acpx",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          command: {
            type: "string",
            minLength: 1,
          },
          expectedVersion: {
            type: "string",
            minLength: 1,
          },
          cwd: {
            type: "string",
            minLength: 1,
          },
          permissionMode: {
            type: "string",
            enum: ["approve-all", "approve-reads", "deny-all"],
          },
          nonInteractivePermissions: {
            type: "string",
            enum: ["deny", "fail"],
          },
          strictWindowsCmdWrapper: {
            type: "boolean",
          },
          timeoutSeconds: {
            type: "number",
            minimum: 0.001,
          },
          queueOwnerTtlSeconds: {
            type: "number",
            minimum: 0,
          },
          mcpServers: {
            type: "object",
            additionalProperties: {
              type: "object",
              properties: {
                command: {
                  type: "string",
                  minLength: 1,
                  description: "Command to run the MCP server",
                },
                args: {
                  type: "array",
                  items: {
                    type: "string",
                  },
                  description: "Arguments to pass to the command",
                },
                env: {
                  type: "object",
                  additionalProperties: {
                    type: "string",
                  },
                  description: "Environment variables for the MCP server",
                },
              },
              required: ["command"],
            },
          },
        },
      },
      skills: ["./skills"],
      name: "ACPX Runtime",
      description:
        "ACP runtime backend powered by acpx with configurable command path and version policy.",
      uiHints: {
        command: {
          label: "acpx Command",
          help: "Optional path/command override for acpx (for example /home/user/repos/acpx/dist/cli.js). Leave unset to use plugin-local bundled acpx.",
        },
        expectedVersion: {
          label: "Expected acpx Version",
          help: 'Exact version to enforce or "any" to skip strict version matching.',
        },
        cwd: {
          label: "Default Working Directory",
          help: "Default cwd for ACP session operations when not set per session.",
        },
        permissionMode: {
          label: "Permission Mode",
          help: "Default acpx permission policy for runtime prompts.",
        },
        nonInteractivePermissions: {
          label: "Non-Interactive Permission Policy",
          help: "acpx policy when interactive permission prompts are unavailable.",
        },
        strictWindowsCmdWrapper: {
          label: "Strict Windows cmd Wrapper",
          help: "Enabled by default. On Windows, reject unresolved .cmd/.bat wrappers instead of shell fallback. Disable only for compatibility with non-standard wrappers.",
          advanced: true,
        },
        timeoutSeconds: {
          label: "Prompt Timeout Seconds",
          help: "Optional acpx timeout for each runtime turn.",
          advanced: true,
        },
        queueOwnerTtlSeconds: {
          label: "Queue Owner TTL Seconds",
          help: "Idle queue-owner TTL for acpx prompt turns. Keep this short in OpenClaw to avoid delayed completion after each turn.",
          advanced: true,
        },
        mcpServers: {
          label: "MCP Servers",
          help: "Named MCP server definitions to inject into ACPX-backed session bootstrap. Each entry needs a command and can include args and env.",
          advanced: true,
        },
      },
    },
  },
  {
    dirName: "amazon-bedrock",
    idHint: "amazon-bedrock",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "discovery.js"],
    packageName: "@openclaw/amazon-bedrock-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Amazon Bedrock provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "amazon-bedrock",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["amazon-bedrock"],
    },
  },
  {
    dirName: "anthropic",
    idHint: "anthropic",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "cli-backend.js",
      "cli-migration.js",
      "cli-shared.js",
      "media-understanding-provider.js",
    ],
    packageName: "@openclaw/anthropic-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Anthropic provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "anthropic",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["anthropic"],
      cliBackends: ["claude-cli"],
      providerAuthEnvVars: {
        anthropic: ["ANTHROPIC_OAUTH_TOKEN", "ANTHROPIC_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "anthropic",
          method: "cli",
          choiceId: "anthropic-cli",
          deprecatedChoiceIds: ["claude-cli"],
          choiceLabel: "Anthropic Claude CLI",
          choiceHint: "Reuse a local Claude CLI login on this host",
          groupId: "anthropic",
          groupLabel: "Anthropic",
          groupHint: "Claude CLI + setup-token + API key",
        },
        {
          provider: "anthropic",
          method: "setup-token",
          choiceId: "token",
          choiceLabel: "Anthropic token (paste setup-token)",
          choiceHint: "Run `claude setup-token` elsewhere, then paste the token here",
          groupId: "anthropic",
          groupLabel: "Anthropic",
          groupHint: "Claude CLI + setup-token + API key",
        },
        {
          provider: "anthropic",
          method: "api-key",
          choiceId: "apiKey",
          choiceLabel: "Anthropic API key",
          groupId: "anthropic",
          groupLabel: "Anthropic",
          groupHint: "Claude CLI + setup-token + API key",
          optionKey: "anthropicApiKey",
          cliFlag: "--anthropic-api-key",
          cliOption: "--anthropic-api-key <key>",
          cliDescription: "Anthropic API key",
        },
      ],
      contracts: {
        mediaUnderstandingProviders: ["anthropic"],
      },
    },
  },
  {
    dirName: "bluebubbles",
    idHint: "bluebubbles",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "channel-config-api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/bluebubbles",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw BlueBubbles channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "bluebubbles",
        label: "BlueBubbles",
        selectionLabel: "BlueBubbles (macOS app)",
        detailLabel: "BlueBubbles",
        docsPath: "/channels/bluebubbles",
        docsLabel: "bluebubbles",
        blurb: "iMessage via the BlueBubbles mac app + REST API.",
        aliases: ["bb"],
        preferOver: ["imessage"],
        systemImage: "bubble.left.and.text.bubble.right",
        order: 75,
      },
      install: {
        npmSpec: "@openclaw/bluebubbles",
        localPath: "extensions/bluebubbles",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "bluebubbles",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["bluebubbles"],
      channelConfigs: {
        bluebubbles: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              serverUrl: {
                type: "string",
              },
              password: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              webhookPath: {
                type: "string",
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              enrichGroupParticipantsFromContacts: {
                default: true,
                type: "boolean",
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              mediaMaxMb: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              mediaLocalRoots: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              sendReadReceipts: {
                type: "boolean",
              },
              allowPrivateNetwork: {
                type: "boolean",
              },
              blockStreaming: {
                type: "boolean",
              },
              groups: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                  additionalProperties: false,
                },
              },
              accounts: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    serverUrl: {
                      type: "string",
                    },
                    password: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    webhookPath: {
                      type: "string",
                    },
                    dmPolicy: {
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    enrichGroupParticipantsFromContacts: {
                      default: true,
                      type: "boolean",
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    mediaMaxMb: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    mediaLocalRoots: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    sendReadReceipts: {
                      type: "boolean",
                    },
                    allowPrivateNetwork: {
                      type: "boolean",
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    groups: {
                      type: "object",
                      properties: {},
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                  },
                  required: ["enrichGroupParticipantsFromContacts"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    default: true,
                    type: "boolean",
                  },
                  edit: {
                    default: true,
                    type: "boolean",
                  },
                  unsend: {
                    default: true,
                    type: "boolean",
                  },
                  reply: {
                    default: true,
                    type: "boolean",
                  },
                  sendWithEffect: {
                    default: true,
                    type: "boolean",
                  },
                  renameGroup: {
                    default: true,
                    type: "boolean",
                  },
                  setGroupIcon: {
                    default: true,
                    type: "boolean",
                  },
                  addParticipant: {
                    default: true,
                    type: "boolean",
                  },
                  removeParticipant: {
                    default: true,
                    type: "boolean",
                  },
                  leaveGroup: {
                    default: true,
                    type: "boolean",
                  },
                  sendAttachment: {
                    default: true,
                    type: "boolean",
                  },
                },
                required: [
                  "reactions",
                  "edit",
                  "unsend",
                  "reply",
                  "sendWithEffect",
                  "renameGroup",
                  "setGroupIcon",
                  "addParticipant",
                  "removeParticipant",
                  "leaveGroup",
                  "sendAttachment",
                ],
                additionalProperties: false,
              },
            },
            required: ["enrichGroupParticipantsFromContacts"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "BlueBubbles",
              help: "BlueBubbles channel provider configuration used for Apple messaging bridge integrations. Keep DM policy aligned with your trusted sender model in shared deployments.",
            },
            dmPolicy: {
              label: "BlueBubbles DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.bluebubbles.allowFrom=["*"].',
            },
          },
          label: "BlueBubbles",
          description: "iMessage via the BlueBubbles mac app + REST API.",
          preferOver: ["imessage"],
        },
      },
    },
  },
  {
    dirName: "brave",
    idHint: "brave",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["web-search-provider.js"],
    packageName: "@openclaw/brave-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Brave plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "brave",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              mode: {
                type: "string",
                enum: ["web", "llm-context"],
              },
            },
          },
        },
      },
      providerAuthEnvVars: {
        brave: ["BRAVE_API_KEY"],
      },
      uiHints: {
        "webSearch.apiKey": {
          label: "Brave Search API Key",
          help: "Brave Search API key (fallback: BRAVE_API_KEY env var).",
          sensitive: true,
          placeholder: "BSA...",
        },
        "webSearch.mode": {
          label: "Brave Search Mode",
          help: "Brave Search mode: web or llm-context.",
        },
      },
      contracts: {
        webSearchProviders: ["brave"],
      },
    },
  },
  {
    dirName: "browser",
    idHint: "browser",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["browser-runtime-api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/browser-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw browser tool plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "browser",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
    },
  },
  {
    dirName: "byteplus",
    idHint: "byteplus",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "provider-catalog.js"],
    packageName: "@openclaw/byteplus-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw BytePlus provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "byteplus",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["byteplus", "byteplus-plan"],
      providerAuthEnvVars: {
        byteplus: ["BYTEPLUS_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "byteplus",
          method: "api-key",
          choiceId: "byteplus-api-key",
          choiceLabel: "BytePlus API key",
          groupId: "byteplus",
          groupLabel: "BytePlus",
          groupHint: "API key",
          optionKey: "byteplusApiKey",
          cliFlag: "--byteplus-api-key",
          cliOption: "--byteplus-api-key <key>",
          cliDescription: "BytePlus API key",
        },
      ],
    },
  },
  {
    dirName: "chutes",
    idHint: "chutes",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/chutes-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Chutes.ai provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "chutes",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["chutes"],
      providerAuthEnvVars: {
        chutes: ["CHUTES_API_KEY", "CHUTES_OAUTH_TOKEN"],
      },
      providerAuthChoices: [
        {
          provider: "chutes",
          method: "oauth",
          choiceId: "chutes",
          choiceLabel: "Chutes (OAuth)",
          choiceHint: "Browser sign-in",
          groupId: "chutes",
          groupLabel: "Chutes",
          groupHint: "OAuth + API key",
        },
        {
          provider: "chutes",
          method: "api-key",
          choiceId: "chutes-api-key",
          choiceLabel: "Chutes API key",
          choiceHint: "Open-source models including Llama, DeepSeek, and more",
          groupId: "chutes",
          groupLabel: "Chutes",
          groupHint: "OAuth + API key",
          optionKey: "chutesApiKey",
          cliFlag: "--chutes-api-key",
          cliOption: "--chutes-api-key <key>",
          cliDescription: "Chutes API key",
        },
      ],
    },
  },
  {
    dirName: "cloudflare-ai-gateway",
    idHint: "cloudflare-ai-gateway",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js"],
    packageName: "@openclaw/cloudflare-ai-gateway-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Cloudflare AI Gateway provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "cloudflare-ai-gateway",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["cloudflare-ai-gateway"],
      providerAuthEnvVars: {
        "cloudflare-ai-gateway": ["CLOUDFLARE_AI_GATEWAY_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "cloudflare-ai-gateway",
          method: "api-key",
          choiceId: "cloudflare-ai-gateway-api-key",
          choiceLabel: "Cloudflare AI Gateway",
          choiceHint: "Account ID + Gateway ID + API key",
          groupId: "cloudflare-ai-gateway",
          groupLabel: "Cloudflare AI Gateway",
          groupHint: "Account ID + Gateway ID + API key",
          optionKey: "cloudflareAiGatewayApiKey",
          cliFlag: "--cloudflare-ai-gateway-api-key",
          cliOption: "--cloudflare-ai-gateway-api-key <key>",
          cliDescription: "Cloudflare AI Gateway API key",
        },
      ],
    },
  },
  {
    dirName: "copilot-proxy",
    idHint: "copilot-proxy",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/copilot-proxy",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Copilot Proxy provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "copilot-proxy",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["copilot-proxy"],
      autoEnableWhenConfiguredProviders: ["copilot-proxy"],
      providerAuthChoices: [
        {
          provider: "copilot-proxy",
          method: "local",
          choiceId: "copilot-proxy",
          choiceLabel: "Copilot Proxy",
          choiceHint: "Configure base URL + model ids",
          groupId: "copilot",
          groupLabel: "Copilot",
          groupHint: "GitHub + local proxy",
        },
      ],
    },
  },
  {
    dirName: "deepgram",
    idHint: "deepgram",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["audio.js", "media-understanding-provider.js"],
    packageName: "@openclaw/deepgram-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Deepgram media-understanding provider",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "deepgram",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      contracts: {
        mediaUnderstandingProviders: ["deepgram"],
      },
    },
  },
  {
    dirName: "deepseek",
    idHint: "deepseek",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/deepseek-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw DeepSeek provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "deepseek",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["deepseek"],
      providerAuthEnvVars: {
        deepseek: ["DEEPSEEK_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "deepseek",
          method: "api-key",
          choiceId: "deepseek-api-key",
          choiceLabel: "DeepSeek API key",
          groupId: "deepseek",
          groupLabel: "DeepSeek",
          groupHint: "API key",
          optionKey: "deepseekApiKey",
          cliFlag: "--deepseek-api-key",
          cliOption: "--deepseek-api-key <key>",
          cliDescription: "DeepSeek API key",
        },
      ],
    },
  },
  {
    dirName: "diagnostics-otel",
    idHint: "diagnostics-otel",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js"],
    packageName: "@openclaw/diagnostics-otel",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw diagnostics OpenTelemetry exporter",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "diagnostics-otel",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
    },
  },
  {
    dirName: "diffs",
    idHint: "diffs",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js"],
    packageName: "@openclaw/diffs",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw diff viewer plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "diffs",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          defaults: {
            type: "object",
            additionalProperties: false,
            properties: {
              fontFamily: {
                type: "string",
                default: "Fira Code",
              },
              fontSize: {
                type: "number",
                minimum: 10,
                maximum: 24,
                default: 15,
              },
              lineSpacing: {
                type: "number",
                minimum: 1,
                maximum: 3,
                default: 1.6,
              },
              layout: {
                type: "string",
                enum: ["unified", "split"],
                default: "unified",
              },
              showLineNumbers: {
                type: "boolean",
                default: true,
              },
              diffIndicators: {
                type: "string",
                enum: ["bars", "classic", "none"],
                default: "bars",
              },
              wordWrap: {
                type: "boolean",
                default: true,
              },
              background: {
                type: "boolean",
                default: true,
              },
              theme: {
                type: "string",
                enum: ["light", "dark"],
                default: "dark",
              },
              fileFormat: {
                type: "string",
                enum: ["png", "pdf"],
                default: "png",
              },
              format: {
                type: "string",
                enum: ["png", "pdf"],
              },
              fileQuality: {
                type: "string",
                enum: ["standard", "hq", "print"],
                default: "standard",
              },
              fileScale: {
                type: "number",
                minimum: 1,
                maximum: 4,
                default: 2,
              },
              fileMaxWidth: {
                type: "number",
                minimum: 640,
                maximum: 2400,
                default: 960,
              },
              imageFormat: {
                type: "string",
                enum: ["png", "pdf"],
              },
              imageQuality: {
                type: "string",
                enum: ["standard", "hq", "print"],
              },
              imageScale: {
                type: "number",
                minimum: 1,
                maximum: 4,
              },
              imageMaxWidth: {
                type: "number",
                minimum: 640,
                maximum: 2400,
              },
              mode: {
                type: "string",
                enum: ["view", "image", "file", "both"],
                default: "both",
              },
            },
          },
          security: {
            type: "object",
            additionalProperties: false,
            properties: {
              allowRemoteViewer: {
                type: "boolean",
                default: false,
              },
            },
          },
        },
      },
      skills: ["./skills"],
      name: "Diffs",
      description: "Read-only diff viewer and file renderer for agents.",
      uiHints: {
        "defaults.fontFamily": {
          label: "Default Font",
          help: "Preferred font family name for diff content and headers.",
        },
        "defaults.fontSize": {
          label: "Default Font Size",
          help: "Base diff font size in pixels.",
        },
        "defaults.lineSpacing": {
          label: "Default Line Spacing",
          help: "Line-height multiplier applied to diff rows.",
        },
        "defaults.layout": {
          label: "Default Layout",
          help: "Initial diff layout shown in the viewer.",
        },
        "defaults.showLineNumbers": {
          label: "Show Line Numbers",
          help: "Show line numbers by default.",
        },
        "defaults.diffIndicators": {
          label: "Diff Indicator Style",
          help: "Choose added/removed indicators style.",
        },
        "defaults.wordWrap": {
          label: "Default Word Wrap",
          help: "Wrap long lines by default.",
        },
        "defaults.background": {
          label: "Default Background Highlights",
          help: "Show added/removed background highlights by default.",
        },
        "defaults.theme": {
          label: "Default Theme",
          help: "Initial viewer theme.",
        },
        "defaults.fileFormat": {
          label: "Default File Format",
          help: "Rendered file format for file mode (PNG or PDF).",
        },
        "defaults.fileQuality": {
          label: "Default File Quality",
          help: "Quality preset for PNG/PDF rendering.",
        },
        "defaults.fileScale": {
          label: "Default File Scale",
          help: "Device scale factor used while rendering file artifacts.",
        },
        "defaults.fileMaxWidth": {
          label: "Default File Max Width",
          help: "Maximum file render width in CSS pixels.",
        },
        "defaults.mode": {
          label: "Default Output Mode",
          help: "Tool default when mode is omitted. Use view for canvas/gateway viewer, file for PNG/PDF, or both.",
        },
        "security.allowRemoteViewer": {
          label: "Allow Remote Viewer",
          help: "Allow non-loopback access to diff viewer URLs when the token path is known.",
        },
      },
    },
  },
  {
    dirName: "discord",
    idHint: "discord",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: [
      "action-runtime-api.js",
      "api.js",
      "channel-config-api.js",
      "runtime-api.js",
      "session-key-api.js",
      "timeouts.js",
    ],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/discord",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Discord channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "discord",
        label: "Discord",
        selectionLabel: "Discord (Bot API)",
        detailLabel: "Discord Bot",
        docsPath: "/channels/discord",
        docsLabel: "discord",
        blurb: "very well supported right now.",
        systemImage: "bubble.left.and.bubble.right",
        markdownCapable: true,
      },
      install: {
        npmSpec: "@openclaw/discord",
        localPath: "extensions/discord",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "discord",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["discord"],
      channelConfigs: {
        discord: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              enabled: {
                type: "boolean",
              },
              commands: {
                type: "object",
                properties: {
                  native: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                  nativeSkills: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              configWrites: {
                type: "boolean",
              },
              token: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              proxy: {
                type: "string",
              },
              allowBots: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "string",
                    const: "mentions",
                  },
                ],
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              streaming: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "string",
                    enum: ["off", "partial", "block", "progress"],
                  },
                ],
              },
              streamMode: {
                type: "string",
                enum: ["partial", "block", "off"],
              },
              draftChunk: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  breakPreference: {
                    anyOf: [
                      {
                        type: "string",
                        const: "paragraph",
                      },
                      {
                        type: "string",
                        const: "newline",
                      },
                      {
                        type: "string",
                        const: "sentence",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              maxLinesPerMessage: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              retry: {
                type: "object",
                properties: {
                  attempts: {
                    type: "integer",
                    minimum: 1,
                    maximum: 9007199254740991,
                  },
                  minDelayMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxDelayMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                  jitter: {
                    type: "number",
                    minimum: 0,
                    maximum: 1,
                  },
                },
                additionalProperties: false,
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                  stickers: {
                    type: "boolean",
                  },
                  emojiUploads: {
                    type: "boolean",
                  },
                  stickerUploads: {
                    type: "boolean",
                  },
                  polls: {
                    type: "boolean",
                  },
                  permissions: {
                    type: "boolean",
                  },
                  messages: {
                    type: "boolean",
                  },
                  threads: {
                    type: "boolean",
                  },
                  pins: {
                    type: "boolean",
                  },
                  search: {
                    type: "boolean",
                  },
                  memberInfo: {
                    type: "boolean",
                  },
                  roleInfo: {
                    type: "boolean",
                  },
                  roles: {
                    type: "boolean",
                  },
                  channelInfo: {
                    type: "boolean",
                  },
                  voiceStatus: {
                    type: "boolean",
                  },
                  events: {
                    type: "boolean",
                  },
                  moderation: {
                    type: "boolean",
                  },
                  channels: {
                    type: "boolean",
                  },
                  presence: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              replyToMode: {
                anyOf: [
                  {
                    type: "string",
                    const: "off",
                  },
                  {
                    type: "string",
                    const: "first",
                  },
                  {
                    type: "string",
                    const: "all",
                  },
                ],
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              defaultTo: {
                type: "string",
              },
              dm: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  policy: {
                    type: "string",
                    enum: ["pairing", "allowlist", "open", "disabled"],
                  },
                  allowFrom: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                  groupEnabled: {
                    type: "boolean",
                  },
                  groupChannels: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                },
                additionalProperties: false,
              },
              guilds: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    slug: {
                      type: "string",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    ignoreOtherMentions: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    reactionNotifications: {
                      type: "string",
                      enum: ["off", "own", "all", "allowlist"],
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    roles: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    channels: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "boolean",
                          },
                          requireMention: {
                            type: "boolean",
                          },
                          ignoreOtherMentions: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          users: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          roles: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                          includeThreadStarter: {
                            type: "boolean",
                          },
                          autoThread: {
                            type: "boolean",
                          },
                          autoThreadName: {
                            type: "string",
                            enum: ["message", "generated"],
                          },
                          autoArchiveDuration: {
                            anyOf: [
                              {
                                type: "string",
                                enum: ["60", "1440", "4320", "10080"],
                              },
                              {
                                type: "number",
                                const: 60,
                              },
                              {
                                type: "number",
                                const: 1440,
                              },
                              {
                                type: "number",
                                const: 4320,
                              },
                              {
                                type: "number",
                                const: 10080,
                              },
                            ],
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                  },
                  additionalProperties: false,
                },
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              execApprovals: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  approvers: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                  agentFilter: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  sessionFilter: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  cleanupAfterResolve: {
                    type: "boolean",
                  },
                  target: {
                    type: "string",
                    enum: ["dm", "channel", "both"],
                  },
                },
                additionalProperties: false,
              },
              agentComponents: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              ui: {
                type: "object",
                properties: {
                  components: {
                    type: "object",
                    properties: {
                      accentColor: {
                        type: "string",
                        pattern: "^#?[0-9a-fA-F]{6}$",
                      },
                    },
                    additionalProperties: false,
                  },
                },
                additionalProperties: false,
              },
              slashCommand: {
                type: "object",
                properties: {
                  ephemeral: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              threadBindings: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  idleHours: {
                    type: "number",
                    minimum: 0,
                  },
                  maxAgeHours: {
                    type: "number",
                    minimum: 0,
                  },
                  spawnSubagentSessions: {
                    type: "boolean",
                  },
                  spawnAcpSessions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              intents: {
                type: "object",
                properties: {
                  presence: {
                    type: "boolean",
                  },
                  guildMembers: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              voice: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  autoJoin: {
                    type: "array",
                    items: {
                      type: "object",
                      properties: {
                        guildId: {
                          type: "string",
                          minLength: 1,
                        },
                        channelId: {
                          type: "string",
                          minLength: 1,
                        },
                      },
                      required: ["guildId", "channelId"],
                      additionalProperties: false,
                    },
                  },
                  daveEncryption: {
                    type: "boolean",
                  },
                  decryptionFailureTolerance: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                  tts: {
                    type: "object",
                    properties: {
                      auto: {
                        type: "string",
                        enum: ["off", "always", "inbound", "tagged"],
                      },
                      enabled: {
                        type: "boolean",
                      },
                      mode: {
                        type: "string",
                        enum: ["final", "all"],
                      },
                      provider: {
                        type: "string",
                        minLength: 1,
                      },
                      summaryModel: {
                        type: "string",
                      },
                      modelOverrides: {
                        type: "object",
                        properties: {
                          enabled: {
                            type: "boolean",
                          },
                          allowText: {
                            type: "boolean",
                          },
                          allowProvider: {
                            type: "boolean",
                          },
                          allowVoice: {
                            type: "boolean",
                          },
                          allowModelId: {
                            type: "boolean",
                          },
                          allowVoiceSettings: {
                            type: "boolean",
                          },
                          allowNormalization: {
                            type: "boolean",
                          },
                          allowSeed: {
                            type: "boolean",
                          },
                        },
                        additionalProperties: false,
                      },
                      providers: {
                        type: "object",
                        propertyNames: {
                          type: "string",
                        },
                        additionalProperties: {
                          type: "object",
                          properties: {
                            apiKey: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  oneOf: [
                                    {
                                      type: "object",
                                      properties: {
                                        source: {
                                          type: "string",
                                          const: "env",
                                        },
                                        provider: {
                                          type: "string",
                                          pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                        },
                                        id: {
                                          type: "string",
                                          pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                        },
                                      },
                                      required: ["source", "provider", "id"],
                                      additionalProperties: false,
                                    },
                                    {
                                      type: "object",
                                      properties: {
                                        source: {
                                          type: "string",
                                          const: "file",
                                        },
                                        provider: {
                                          type: "string",
                                          pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                        },
                                        id: {
                                          type: "string",
                                        },
                                      },
                                      required: ["source", "provider", "id"],
                                      additionalProperties: false,
                                    },
                                    {
                                      type: "object",
                                      properties: {
                                        source: {
                                          type: "string",
                                          const: "exec",
                                        },
                                        provider: {
                                          type: "string",
                                          pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                        },
                                        id: {
                                          type: "string",
                                        },
                                      },
                                      required: ["source", "provider", "id"],
                                      additionalProperties: false,
                                    },
                                  ],
                                },
                              ],
                            },
                          },
                          additionalProperties: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                              {
                                type: "boolean",
                              },
                              {
                                type: "null",
                              },
                              {
                                type: "array",
                                items: {},
                              },
                              {
                                type: "object",
                                propertyNames: {
                                  type: "string",
                                },
                                additionalProperties: {},
                              },
                            ],
                          },
                        },
                      },
                      prefsPath: {
                        type: "string",
                      },
                      maxTextLength: {
                        type: "integer",
                        minimum: 1,
                        maximum: 9007199254740991,
                      },
                      timeoutMs: {
                        type: "integer",
                        minimum: 1000,
                        maximum: 120000,
                      },
                    },
                    additionalProperties: false,
                  },
                },
                additionalProperties: false,
              },
              pluralkit: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  token: {
                    anyOf: [
                      {
                        type: "string",
                      },
                      {
                        oneOf: [
                          {
                            type: "object",
                            properties: {
                              source: {
                                type: "string",
                                const: "env",
                              },
                              provider: {
                                type: "string",
                                pattern: "^[a-z][a-z0-9_-]{0,63}$",
                              },
                              id: {
                                type: "string",
                                pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                              },
                            },
                            required: ["source", "provider", "id"],
                            additionalProperties: false,
                          },
                          {
                            type: "object",
                            properties: {
                              source: {
                                type: "string",
                                const: "file",
                              },
                              provider: {
                                type: "string",
                                pattern: "^[a-z][a-z0-9_-]{0,63}$",
                              },
                              id: {
                                type: "string",
                              },
                            },
                            required: ["source", "provider", "id"],
                            additionalProperties: false,
                          },
                          {
                            type: "object",
                            properties: {
                              source: {
                                type: "string",
                                const: "exec",
                              },
                              provider: {
                                type: "string",
                                pattern: "^[a-z][a-z0-9_-]{0,63}$",
                              },
                              id: {
                                type: "string",
                              },
                            },
                            required: ["source", "provider", "id"],
                            additionalProperties: false,
                          },
                        ],
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              ackReaction: {
                type: "string",
              },
              ackReactionScope: {
                type: "string",
                enum: ["group-mentions", "group-all", "direct", "all", "off", "none"],
              },
              activity: {
                type: "string",
              },
              status: {
                type: "string",
                enum: ["online", "dnd", "idle", "invisible"],
              },
              autoPresence: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  intervalMs: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  minUpdateIntervalMs: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  healthyText: {
                    type: "string",
                  },
                  degradedText: {
                    type: "string",
                  },
                  exhaustedText: {
                    type: "string",
                  },
                },
                additionalProperties: false,
              },
              activityType: {
                anyOf: [
                  {
                    type: "number",
                    const: 0,
                  },
                  {
                    type: "number",
                    const: 1,
                  },
                  {
                    type: "number",
                    const: 2,
                  },
                  {
                    type: "number",
                    const: 3,
                  },
                  {
                    type: "number",
                    const: 4,
                  },
                  {
                    type: "number",
                    const: 5,
                  },
                ],
              },
              activityUrl: {
                type: "string",
                format: "uri",
              },
              inboundWorker: {
                type: "object",
                properties: {
                  runTimeoutMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              eventQueue: {
                type: "object",
                properties: {
                  listenerTimeout: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxQueueSize: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxConcurrency: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    enabled: {
                      type: "boolean",
                    },
                    commands: {
                      type: "object",
                      properties: {
                        native: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                        nativeSkills: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    token: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    proxy: {
                      type: "string",
                    },
                    allowBots: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "string",
                          const: "mentions",
                        },
                      ],
                    },
                    dangerouslyAllowNameMatching: {
                      type: "boolean",
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    streaming: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "string",
                          enum: ["off", "partial", "block", "progress"],
                        },
                      ],
                    },
                    streamMode: {
                      type: "string",
                      enum: ["partial", "block", "off"],
                    },
                    draftChunk: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        breakPreference: {
                          anyOf: [
                            {
                              type: "string",
                              const: "paragraph",
                            },
                            {
                              type: "string",
                              const: "newline",
                            },
                            {
                              type: "string",
                              const: "sentence",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    maxLinesPerMessage: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                    retry: {
                      type: "object",
                      properties: {
                        attempts: {
                          type: "integer",
                          minimum: 1,
                          maximum: 9007199254740991,
                        },
                        minDelayMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxDelayMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                        jitter: {
                          type: "number",
                          minimum: 0,
                          maximum: 1,
                        },
                      },
                      additionalProperties: false,
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                        stickers: {
                          type: "boolean",
                        },
                        emojiUploads: {
                          type: "boolean",
                        },
                        stickerUploads: {
                          type: "boolean",
                        },
                        polls: {
                          type: "boolean",
                        },
                        permissions: {
                          type: "boolean",
                        },
                        messages: {
                          type: "boolean",
                        },
                        threads: {
                          type: "boolean",
                        },
                        pins: {
                          type: "boolean",
                        },
                        search: {
                          type: "boolean",
                        },
                        memberInfo: {
                          type: "boolean",
                        },
                        roleInfo: {
                          type: "boolean",
                        },
                        roles: {
                          type: "boolean",
                        },
                        channelInfo: {
                          type: "boolean",
                        },
                        voiceStatus: {
                          type: "boolean",
                        },
                        events: {
                          type: "boolean",
                        },
                        moderation: {
                          type: "boolean",
                        },
                        channels: {
                          type: "boolean",
                        },
                        presence: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    replyToMode: {
                      anyOf: [
                        {
                          type: "string",
                          const: "off",
                        },
                        {
                          type: "string",
                          const: "first",
                        },
                        {
                          type: "string",
                          const: "all",
                        },
                      ],
                    },
                    dmPolicy: {
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    defaultTo: {
                      type: "string",
                    },
                    dm: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        policy: {
                          type: "string",
                          enum: ["pairing", "allowlist", "open", "disabled"],
                        },
                        allowFrom: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                        groupEnabled: {
                          type: "boolean",
                        },
                        groupChannels: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    guilds: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          slug: {
                            type: "string",
                          },
                          requireMention: {
                            type: "boolean",
                          },
                          ignoreOtherMentions: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          reactionNotifications: {
                            type: "string",
                            enum: ["off", "own", "all", "allowlist"],
                          },
                          users: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          roles: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          channels: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "boolean",
                                },
                                requireMention: {
                                  type: "boolean",
                                },
                                ignoreOtherMentions: {
                                  type: "boolean",
                                },
                                tools: {
                                  type: "object",
                                  properties: {
                                    allow: {
                                      type: "array",
                                      items: {
                                        type: "string",
                                      },
                                    },
                                    alsoAllow: {
                                      type: "array",
                                      items: {
                                        type: "string",
                                      },
                                    },
                                    deny: {
                                      type: "array",
                                      items: {
                                        type: "string",
                                      },
                                    },
                                  },
                                  additionalProperties: false,
                                },
                                toolsBySender: {
                                  type: "object",
                                  propertyNames: {
                                    type: "string",
                                  },
                                  additionalProperties: {
                                    type: "object",
                                    properties: {
                                      allow: {
                                        type: "array",
                                        items: {
                                          type: "string",
                                        },
                                      },
                                      alsoAllow: {
                                        type: "array",
                                        items: {
                                          type: "string",
                                        },
                                      },
                                      deny: {
                                        type: "array",
                                        items: {
                                          type: "string",
                                        },
                                      },
                                    },
                                    additionalProperties: false,
                                  },
                                },
                                skills: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                enabled: {
                                  type: "boolean",
                                },
                                users: {
                                  type: "array",
                                  items: {
                                    anyOf: [
                                      {
                                        type: "string",
                                      },
                                      {
                                        type: "number",
                                      },
                                    ],
                                  },
                                },
                                roles: {
                                  type: "array",
                                  items: {
                                    anyOf: [
                                      {
                                        type: "string",
                                      },
                                      {
                                        type: "number",
                                      },
                                    ],
                                  },
                                },
                                systemPrompt: {
                                  type: "string",
                                },
                                includeThreadStarter: {
                                  type: "boolean",
                                },
                                autoThread: {
                                  type: "boolean",
                                },
                                autoThreadName: {
                                  type: "string",
                                  enum: ["message", "generated"],
                                },
                                autoArchiveDuration: {
                                  anyOf: [
                                    {
                                      type: "string",
                                      enum: ["60", "1440", "4320", "10080"],
                                    },
                                    {
                                      type: "number",
                                      const: 60,
                                    },
                                    {
                                      type: "number",
                                      const: 1440,
                                    },
                                    {
                                      type: "number",
                                      const: 4320,
                                    },
                                    {
                                      type: "number",
                                      const: 10080,
                                    },
                                  ],
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        showOk: {
                          type: "boolean",
                        },
                        showAlerts: {
                          type: "boolean",
                        },
                        useIndicator: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    execApprovals: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        approvers: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                        agentFilter: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        sessionFilter: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        cleanupAfterResolve: {
                          type: "boolean",
                        },
                        target: {
                          type: "string",
                          enum: ["dm", "channel", "both"],
                        },
                      },
                      additionalProperties: false,
                    },
                    agentComponents: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    ui: {
                      type: "object",
                      properties: {
                        components: {
                          type: "object",
                          properties: {
                            accentColor: {
                              type: "string",
                              pattern: "^#?[0-9a-fA-F]{6}$",
                            },
                          },
                          additionalProperties: false,
                        },
                      },
                      additionalProperties: false,
                    },
                    slashCommand: {
                      type: "object",
                      properties: {
                        ephemeral: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    threadBindings: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        idleHours: {
                          type: "number",
                          minimum: 0,
                        },
                        maxAgeHours: {
                          type: "number",
                          minimum: 0,
                        },
                        spawnSubagentSessions: {
                          type: "boolean",
                        },
                        spawnAcpSessions: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    intents: {
                      type: "object",
                      properties: {
                        presence: {
                          type: "boolean",
                        },
                        guildMembers: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    voice: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        autoJoin: {
                          type: "array",
                          items: {
                            type: "object",
                            properties: {
                              guildId: {
                                type: "string",
                                minLength: 1,
                              },
                              channelId: {
                                type: "string",
                                minLength: 1,
                              },
                            },
                            required: ["guildId", "channelId"],
                            additionalProperties: false,
                          },
                        },
                        daveEncryption: {
                          type: "boolean",
                        },
                        decryptionFailureTolerance: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                        tts: {
                          type: "object",
                          properties: {
                            auto: {
                              type: "string",
                              enum: ["off", "always", "inbound", "tagged"],
                            },
                            enabled: {
                              type: "boolean",
                            },
                            mode: {
                              type: "string",
                              enum: ["final", "all"],
                            },
                            provider: {
                              type: "string",
                              minLength: 1,
                            },
                            summaryModel: {
                              type: "string",
                            },
                            modelOverrides: {
                              type: "object",
                              properties: {
                                enabled: {
                                  type: "boolean",
                                },
                                allowText: {
                                  type: "boolean",
                                },
                                allowProvider: {
                                  type: "boolean",
                                },
                                allowVoice: {
                                  type: "boolean",
                                },
                                allowModelId: {
                                  type: "boolean",
                                },
                                allowVoiceSettings: {
                                  type: "boolean",
                                },
                                allowNormalization: {
                                  type: "boolean",
                                },
                                allowSeed: {
                                  type: "boolean",
                                },
                              },
                              additionalProperties: false,
                            },
                            providers: {
                              type: "object",
                              propertyNames: {
                                type: "string",
                              },
                              additionalProperties: {
                                type: "object",
                                properties: {
                                  apiKey: {
                                    anyOf: [
                                      {
                                        type: "string",
                                      },
                                      {
                                        oneOf: [
                                          {
                                            type: "object",
                                            properties: {
                                              source: {
                                                type: "string",
                                                const: "env",
                                              },
                                              provider: {
                                                type: "string",
                                                pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                              },
                                              id: {
                                                type: "string",
                                                pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                              },
                                            },
                                            required: ["source", "provider", "id"],
                                            additionalProperties: false,
                                          },
                                          {
                                            type: "object",
                                            properties: {
                                              source: {
                                                type: "string",
                                                const: "file",
                                              },
                                              provider: {
                                                type: "string",
                                                pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                              },
                                              id: {
                                                type: "string",
                                              },
                                            },
                                            required: ["source", "provider", "id"],
                                            additionalProperties: false,
                                          },
                                          {
                                            type: "object",
                                            properties: {
                                              source: {
                                                type: "string",
                                                const: "exec",
                                              },
                                              provider: {
                                                type: "string",
                                                pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                              },
                                              id: {
                                                type: "string",
                                              },
                                            },
                                            required: ["source", "provider", "id"],
                                            additionalProperties: false,
                                          },
                                        ],
                                      },
                                    ],
                                  },
                                },
                                additionalProperties: {
                                  anyOf: [
                                    {
                                      type: "string",
                                    },
                                    {
                                      type: "number",
                                    },
                                    {
                                      type: "boolean",
                                    },
                                    {
                                      type: "null",
                                    },
                                    {
                                      type: "array",
                                      items: {},
                                    },
                                    {
                                      type: "object",
                                      propertyNames: {
                                        type: "string",
                                      },
                                      additionalProperties: {},
                                    },
                                  ],
                                },
                              },
                            },
                            prefsPath: {
                              type: "string",
                            },
                            maxTextLength: {
                              type: "integer",
                              minimum: 1,
                              maximum: 9007199254740991,
                            },
                            timeoutMs: {
                              type: "integer",
                              minimum: 1000,
                              maximum: 120000,
                            },
                          },
                          additionalProperties: false,
                        },
                      },
                      additionalProperties: false,
                    },
                    pluralkit: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        token: {
                          anyOf: [
                            {
                              type: "string",
                            },
                            {
                              oneOf: [
                                {
                                  type: "object",
                                  properties: {
                                    source: {
                                      type: "string",
                                      const: "env",
                                    },
                                    provider: {
                                      type: "string",
                                      pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                    },
                                    id: {
                                      type: "string",
                                      pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                    },
                                  },
                                  required: ["source", "provider", "id"],
                                  additionalProperties: false,
                                },
                                {
                                  type: "object",
                                  properties: {
                                    source: {
                                      type: "string",
                                      const: "file",
                                    },
                                    provider: {
                                      type: "string",
                                      pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                    },
                                    id: {
                                      type: "string",
                                    },
                                  },
                                  required: ["source", "provider", "id"],
                                  additionalProperties: false,
                                },
                                {
                                  type: "object",
                                  properties: {
                                    source: {
                                      type: "string",
                                      const: "exec",
                                    },
                                    provider: {
                                      type: "string",
                                      pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                    },
                                    id: {
                                      type: "string",
                                    },
                                  },
                                  required: ["source", "provider", "id"],
                                  additionalProperties: false,
                                },
                              ],
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    ackReaction: {
                      type: "string",
                    },
                    ackReactionScope: {
                      type: "string",
                      enum: ["group-mentions", "group-all", "direct", "all", "off", "none"],
                    },
                    activity: {
                      type: "string",
                    },
                    status: {
                      type: "string",
                      enum: ["online", "dnd", "idle", "invisible"],
                    },
                    autoPresence: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        intervalMs: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        minUpdateIntervalMs: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        healthyText: {
                          type: "string",
                        },
                        degradedText: {
                          type: "string",
                        },
                        exhaustedText: {
                          type: "string",
                        },
                      },
                      additionalProperties: false,
                    },
                    activityType: {
                      anyOf: [
                        {
                          type: "number",
                          const: 0,
                        },
                        {
                          type: "number",
                          const: 1,
                        },
                        {
                          type: "number",
                          const: 2,
                        },
                        {
                          type: "number",
                          const: 3,
                        },
                        {
                          type: "number",
                          const: 4,
                        },
                        {
                          type: "number",
                          const: 5,
                        },
                      ],
                    },
                    activityUrl: {
                      type: "string",
                      format: "uri",
                    },
                    inboundWorker: {
                      type: "object",
                      properties: {
                        runTimeoutMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    eventQueue: {
                      type: "object",
                      properties: {
                        listenerTimeout: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxQueueSize: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxConcurrency: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                  required: ["groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["groupPolicy"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "Discord",
              help: "Discord channel provider configuration for bot auth, retry policy, streaming, thread bindings, and optional voice capabilities. Keep privileged intents and advanced features disabled unless needed.",
            },
            dmPolicy: {
              label: "Discord DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.discord.allowFrom=["*"].',
            },
            "dm.policy": {
              label: "Discord DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.discord.allowFrom=["*"] (legacy: channels.discord.dm.allowFrom).',
            },
            configWrites: {
              label: "Discord Config Writes",
              help: "Allow Discord to write config in response to channel events/commands (default: true).",
            },
            proxy: {
              label: "Discord Proxy URL",
              help: "Proxy URL for Discord gateway + API requests (app-id lookup and allowlist resolution). Set per account via channels.discord.accounts.<id>.proxy.",
            },
            "commands.native": {
              label: "Discord Native Commands",
              help: 'Override native commands for Discord (bool or "auto").',
            },
            "commands.nativeSkills": {
              label: "Discord Native Skill Commands",
              help: 'Override native skill commands for Discord (bool or "auto").',
            },
            streaming: {
              label: "Discord Streaming Mode",
              help: 'Unified Discord stream preview mode: "off" | "partial" | "block" | "progress". "progress" maps to "partial" on Discord. Legacy boolean/streamMode keys are auto-mapped.',
            },
            streamMode: {
              label: "Discord Stream Mode (Legacy)",
              help: "Legacy Discord preview mode alias (off | partial | block); auto-migrated to channels.discord.streaming.",
            },
            "draftChunk.minChars": {
              label: "Discord Draft Chunk Min Chars",
              help: 'Minimum chars before emitting a Discord stream preview update when channels.discord.streaming="block" (default: 200).',
            },
            "draftChunk.maxChars": {
              label: "Discord Draft Chunk Max Chars",
              help: 'Target max size for a Discord stream preview chunk when channels.discord.streaming="block" (default: 800; clamped to channels.discord.textChunkLimit).',
            },
            "draftChunk.breakPreference": {
              label: "Discord Draft Chunk Break Preference",
              help: "Preferred breakpoints for Discord draft chunks (paragraph | newline | sentence). Default: paragraph.",
            },
            "retry.attempts": {
              label: "Discord Retry Attempts",
              help: "Max retry attempts for outbound Discord API calls (default: 3).",
            },
            "retry.minDelayMs": {
              label: "Discord Retry Min Delay (ms)",
              help: "Minimum retry delay in ms for Discord outbound calls.",
            },
            "retry.maxDelayMs": {
              label: "Discord Retry Max Delay (ms)",
              help: "Maximum retry delay cap in ms for Discord outbound calls.",
            },
            "retry.jitter": {
              label: "Discord Retry Jitter",
              help: "Jitter factor (0-1) applied to Discord retry delays.",
            },
            maxLinesPerMessage: {
              label: "Discord Max Lines Per Message",
              help: "Soft max line count per Discord message (default: 17).",
            },
            "inboundWorker.runTimeoutMs": {
              label: "Discord Inbound Worker Timeout (ms)",
              help: "Optional queued Discord inbound worker timeout in ms. This is separate from Carbon listener timeouts; defaults to 1800000 and can be disabled with 0. Set per account via channels.discord.accounts.<id>.inboundWorker.runTimeoutMs.",
            },
            "eventQueue.listenerTimeout": {
              label: "Discord EventQueue Listener Timeout (ms)",
              help: "Canonical Discord listener timeout control in ms for gateway normalization/enqueue handlers. Default is 120000 in OpenClaw; set per account via channels.discord.accounts.<id>.eventQueue.listenerTimeout.",
            },
            "eventQueue.maxQueueSize": {
              label: "Discord EventQueue Max Queue Size",
              help: "Optional Discord EventQueue capacity override (max queued events before backpressure). Set per account via channels.discord.accounts.<id>.eventQueue.maxQueueSize.",
            },
            "eventQueue.maxConcurrency": {
              label: "Discord EventQueue Max Concurrency",
              help: "Optional Discord EventQueue concurrency override (max concurrent handler executions). Set per account via channels.discord.accounts.<id>.eventQueue.maxConcurrency.",
            },
            "threadBindings.enabled": {
              label: "Discord Thread Binding Enabled",
              help: "Enable Discord thread binding features (/focus, bound-thread routing/delivery, and thread-bound subagent sessions). Overrides session.threadBindings.enabled when set.",
            },
            "threadBindings.idleHours": {
              label: "Discord Thread Binding Idle Timeout (hours)",
              help: "Inactivity window in hours for Discord thread-bound sessions (/focus and spawned thread sessions). Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.",
            },
            "threadBindings.maxAgeHours": {
              label: "Discord Thread Binding Max Age (hours)",
              help: "Optional hard max age in hours for Discord thread-bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.",
            },
            "threadBindings.spawnSubagentSessions": {
              label: "Discord Thread-Bound Subagent Spawn",
              help: "Allow subagent spawns with thread=true to auto-create and bind Discord threads (default: false; opt-in). Set true to enable thread-bound subagent spawns for this account/channel.",
            },
            "threadBindings.spawnAcpSessions": {
              label: "Discord Thread-Bound ACP Spawn",
              help: "Allow /acp spawn to auto-create and bind Discord threads for ACP sessions (default: false; opt-in). Set true to enable thread-bound ACP spawns for this account/channel.",
            },
            "ui.components.accentColor": {
              label: "Discord Component Accent Color",
              help: "Accent color for Discord component containers (hex). Set per account via channels.discord.accounts.<id>.ui.components.accentColor.",
            },
            "intents.presence": {
              label: "Discord Presence Intent",
              help: "Enable the Guild Presences privileged intent. Must also be enabled in the Discord Developer Portal. Allows tracking user activities (e.g. Spotify). Default: false.",
            },
            "intents.guildMembers": {
              label: "Discord Guild Members Intent",
              help: "Enable the Guild Members privileged intent. Must also be enabled in the Discord Developer Portal. Default: false.",
            },
            "voice.enabled": {
              label: "Discord Voice Enabled",
              help: "Enable Discord voice channel conversations (default: true). Omit channels.discord.voice to keep voice support disabled for the account.",
            },
            "voice.autoJoin": {
              label: "Discord Voice Auto-Join",
              help: "Voice channels to auto-join on startup (list of guildId/channelId entries).",
            },
            "voice.daveEncryption": {
              label: "Discord Voice DAVE Encryption",
              help: "Toggle DAVE end-to-end encryption for Discord voice joins (default: true in @discordjs/voice; Discord may require this).",
            },
            "voice.decryptionFailureTolerance": {
              label: "Discord Voice Decrypt Failure Tolerance",
              help: "Consecutive decrypt failures before DAVE attempts session recovery (passed to @discordjs/voice; default: 24).",
            },
            "voice.tts": {
              label: "Discord Voice Text-to-Speech",
              help: "Optional TTS overrides for Discord voice playback (merged with messages.tts).",
            },
            "pluralkit.enabled": {
              label: "Discord PluralKit Enabled",
              help: "Resolve PluralKit proxied messages and treat system members as distinct senders.",
            },
            "pluralkit.token": {
              label: "Discord PluralKit Token",
              help: "Optional PluralKit token for resolving private systems or members.",
            },
            activity: {
              label: "Discord Presence Activity",
              help: "Discord presence activity text (defaults to custom status).",
            },
            status: {
              label: "Discord Presence Status",
              help: "Discord presence status (online, dnd, idle, invisible).",
            },
            "autoPresence.enabled": {
              label: "Discord Auto Presence Enabled",
              help: "Enable automatic Discord bot presence updates based on runtime/model availability signals. When enabled: healthy=>online, degraded/unknown=>idle, exhausted/unavailable=>dnd.",
            },
            "autoPresence.intervalMs": {
              label: "Discord Auto Presence Check Interval (ms)",
              help: "How often to evaluate Discord auto-presence state in milliseconds (default: 30000).",
            },
            "autoPresence.minUpdateIntervalMs": {
              label: "Discord Auto Presence Min Update Interval (ms)",
              help: "Minimum time between actual Discord presence update calls in milliseconds (default: 15000). Prevents status spam on noisy state changes.",
            },
            "autoPresence.healthyText": {
              label: "Discord Auto Presence Healthy Text",
              help: "Optional custom status text while runtime is healthy (online). If omitted, falls back to static channels.discord.activity when set.",
            },
            "autoPresence.degradedText": {
              label: "Discord Auto Presence Degraded Text",
              help: "Optional custom status text while runtime/model availability is degraded or unknown (idle).",
            },
            "autoPresence.exhaustedText": {
              label: "Discord Auto Presence Exhausted Text",
              help: "Optional custom status text while runtime detects exhausted/unavailable model quota (dnd). Supports {reason} template placeholder.",
            },
            activityType: {
              label: "Discord Presence Activity Type",
              help: "Discord presence activity type (0=Playing,1=Streaming,2=Listening,3=Watching,4=Custom,5=Competing).",
            },
            activityUrl: {
              label: "Discord Presence Activity URL",
              help: "Discord presence streaming URL (required for activityType=1).",
            },
            allowBots: {
              label: "Discord Allow Bot Messages",
              help: 'Allow bot-authored messages to trigger Discord replies (default: false). Set "mentions" to only accept bot messages that mention the bot.',
            },
            token: {
              label: "Discord Bot Token",
              help: "Discord bot token used for gateway and REST API authentication for this provider account. Keep this secret out of committed config and rotate immediately after any leak.",
            },
          },
          label: "Discord",
          description: "very well supported right now.",
        },
      },
    },
  },
  {
    dirName: "duckduckgo",
    idHint: "duckduckgo",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["web-search-provider.js"],
    packageName: "@openclaw/duckduckgo-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw DuckDuckGo plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "duckduckgo",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              region: {
                type: "string",
              },
              safeSearch: {
                type: "string",
                enum: ["strict", "moderate", "off"],
              },
            },
          },
        },
      },
      uiHints: {
        "webSearch.region": {
          label: "DuckDuckGo Region",
          help: "Optional DuckDuckGo region code such as us-en, uk-en, or de-de.",
        },
        "webSearch.safeSearch": {
          label: "DuckDuckGo SafeSearch",
          help: "SafeSearch level for DuckDuckGo results.",
        },
      },
      contracts: {
        webSearchProviders: ["duckduckgo"],
      },
    },
  },
  {
    dirName: "elevenlabs",
    idHint: "elevenlabs",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["speech-provider.js", "tts.js"],
    packageName: "@openclaw/elevenlabs-speech",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw ElevenLabs speech plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "elevenlabs",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      contracts: {
        speechProviders: ["elevenlabs"],
      },
    },
  },
  {
    dirName: "exa",
    idHint: "exa",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["web-search-provider.js"],
    packageName: "@openclaw/exa-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Exa plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "exa",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
            },
          },
        },
      },
      providerAuthEnvVars: {
        exa: ["EXA_API_KEY"],
      },
      uiHints: {
        "webSearch.apiKey": {
          label: "Exa API Key",
          help: "Exa Search API key (fallback: EXA_API_KEY env var).",
          sensitive: true,
          placeholder: "exa-...",
        },
      },
      contracts: {
        webSearchProviders: ["exa"],
      },
    },
  },
  {
    dirName: "fal",
    idHint: "fal",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["image-generation-provider.js", "onboard.js"],
    packageName: "@openclaw/fal-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw fal provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "fal",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["fal"],
      providerAuthEnvVars: {
        fal: ["FAL_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "fal",
          method: "api-key",
          choiceId: "fal-api-key",
          choiceLabel: "fal API key",
          groupId: "fal",
          groupLabel: "fal",
          groupHint: "Image generation",
          onboardingScopes: ["image-generation"],
          optionKey: "falApiKey",
          cliFlag: "--fal-api-key",
          cliOption: "--fal-api-key <key>",
          cliDescription: "fal API key",
        },
      ],
      contracts: {
        imageGenerationProviders: ["fal"],
      },
    },
  },
  {
    dirName: "feishu",
    idHint: "feishu",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js", "setup-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/feishu",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Feishu/Lark channel plugin (community maintained by @m1heng)",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "feishu",
        label: "Feishu",
        selectionLabel: "Feishu/Lark (飞书)",
        docsPath: "/channels/feishu",
        docsLabel: "feishu",
        blurb: "飞书/Lark enterprise messaging with doc/wiki/drive tools.",
        aliases: ["lark"],
        order: 35,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/feishu",
        localPath: "extensions/feishu",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "feishu",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["feishu"],
      skills: ["./skills"],
      channelConfigs: {
        feishu: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              enabled: {
                type: "boolean",
              },
              defaultAccount: {
                type: "string",
              },
              appId: {
                type: "string",
              },
              appSecret: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              encryptKey: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              verificationToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              domain: {
                default: "feishu",
                anyOf: [
                  {
                    type: "string",
                    enum: ["feishu", "lark"],
                  },
                  {
                    type: "string",
                    format: "uri",
                    pattern: "^https:\\/\\/.*",
                  },
                ],
              },
              connectionMode: {
                default: "websocket",
                type: "string",
                enum: ["websocket", "webhook"],
              },
              webhookPath: {
                default: "/feishu/events",
                type: "string",
              },
              webhookHost: {
                type: "string",
              },
              webhookPort: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              markdown: {
                type: "object",
                properties: {
                  mode: {
                    type: "string",
                    enum: ["native", "escape", "strip"],
                  },
                  tableMode: {
                    type: "string",
                    enum: ["native", "ascii", "simple"],
                  },
                },
                additionalProperties: false,
              },
              configWrites: {
                type: "boolean",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["open", "pairing", "allowlist"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                anyOf: [
                  {
                    type: "string",
                    enum: ["open", "allowlist", "disabled"],
                  },
                  {},
                ],
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupSenderAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              requireMention: {
                type: "boolean",
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                    groupSessionScope: {
                      type: "string",
                      enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
                    },
                    topicSessionMode: {
                      type: "string",
                      enum: ["disabled", "enabled"],
                    },
                    replyInThread: {
                      type: "string",
                      enum: ["disabled", "enabled"],
                    },
                  },
                  additionalProperties: false,
                },
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  minDelayMs: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxDelayMs: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              httpTimeoutMs: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 300000,
              },
              heartbeat: {
                type: "object",
                properties: {
                  visibility: {
                    type: "string",
                    enum: ["visible", "hidden"],
                  },
                  intervalMs: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              renderMode: {
                type: "string",
                enum: ["auto", "raw", "card"],
              },
              streaming: {
                type: "boolean",
              },
              tools: {
                type: "object",
                properties: {
                  doc: {
                    type: "boolean",
                  },
                  chat: {
                    type: "boolean",
                  },
                  wiki: {
                    type: "boolean",
                  },
                  drive: {
                    type: "boolean",
                  },
                  perm: {
                    type: "boolean",
                  },
                  scopes: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              replyInThread: {
                type: "string",
                enum: ["disabled", "enabled"],
              },
              reactionNotifications: {
                default: "own",
                type: "string",
                enum: ["off", "own", "all"],
              },
              typingIndicator: {
                default: true,
                type: "boolean",
              },
              resolveSenderNames: {
                default: true,
                type: "boolean",
              },
              groupSessionScope: {
                type: "string",
                enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
              },
              topicSessionMode: {
                type: "string",
                enum: ["disabled", "enabled"],
              },
              dynamicAgentCreation: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  workspaceTemplate: {
                    type: "string",
                  },
                  agentDirTemplate: {
                    type: "string",
                  },
                  maxAgents: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    name: {
                      type: "string",
                    },
                    appId: {
                      type: "string",
                    },
                    appSecret: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    encryptKey: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    verificationToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    domain: {
                      anyOf: [
                        {
                          type: "string",
                          enum: ["feishu", "lark"],
                        },
                        {
                          type: "string",
                          format: "uri",
                          pattern: "^https:\\/\\/.*",
                        },
                      ],
                    },
                    connectionMode: {
                      type: "string",
                      enum: ["websocket", "webhook"],
                    },
                    webhookPath: {
                      type: "string",
                    },
                    webhookHost: {
                      type: "string",
                    },
                    webhookPort: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        mode: {
                          type: "string",
                          enum: ["native", "escape", "strip"],
                        },
                        tableMode: {
                          type: "string",
                          enum: ["native", "ascii", "simple"],
                        },
                      },
                      additionalProperties: false,
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    dmPolicy: {
                      type: "string",
                      enum: ["open", "pairing", "allowlist"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      anyOf: [
                        {
                          type: "string",
                          enum: ["open", "allowlist", "disabled"],
                        },
                        {},
                      ],
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupSenderAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                          groupSessionScope: {
                            type: "string",
                            enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
                          },
                          topicSessionMode: {
                            type: "string",
                            enum: ["disabled", "enabled"],
                          },
                          replyInThread: {
                            type: "string",
                            enum: ["disabled", "enabled"],
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          enabled: {
                            type: "boolean",
                          },
                          systemPrompt: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        minDelayMs: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxDelayMs: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                    httpTimeoutMs: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 300000,
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        visibility: {
                          type: "string",
                          enum: ["visible", "hidden"],
                        },
                        intervalMs: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    renderMode: {
                      type: "string",
                      enum: ["auto", "raw", "card"],
                    },
                    streaming: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        doc: {
                          type: "boolean",
                        },
                        chat: {
                          type: "boolean",
                        },
                        wiki: {
                          type: "boolean",
                        },
                        drive: {
                          type: "boolean",
                        },
                        perm: {
                          type: "boolean",
                        },
                        scopes: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    replyInThread: {
                      type: "string",
                      enum: ["disabled", "enabled"],
                    },
                    reactionNotifications: {
                      type: "string",
                      enum: ["off", "own", "all"],
                    },
                    typingIndicator: {
                      type: "boolean",
                    },
                    resolveSenderNames: {
                      type: "boolean",
                    },
                    groupSessionScope: {
                      type: "string",
                      enum: ["group", "group_sender", "group_topic", "group_topic_sender"],
                    },
                    topicSessionMode: {
                      type: "string",
                      enum: ["disabled", "enabled"],
                    },
                  },
                  additionalProperties: false,
                },
              },
            },
            required: [
              "domain",
              "connectionMode",
              "webhookPath",
              "dmPolicy",
              "groupPolicy",
              "reactionNotifications",
              "typingIndicator",
              "resolveSenderNames",
            ],
            additionalProperties: false,
          },
          label: "Feishu",
          description: "飞书/Lark enterprise messaging with doc/wiki/drive tools.",
        },
      },
    },
  },
  {
    dirName: "firecrawl",
    idHint: "firecrawl",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["web-search-provider.js"],
    packageName: "@openclaw/firecrawl-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Firecrawl plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "firecrawl",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              baseUrl: {
                type: "string",
              },
            },
          },
        },
      },
      providerAuthEnvVars: {
        firecrawl: ["FIRECRAWL_API_KEY"],
      },
      uiHints: {
        "webSearch.apiKey": {
          label: "Firecrawl Search API Key",
          help: "Firecrawl API key for web search (fallback: FIRECRAWL_API_KEY env var).",
          sensitive: true,
          placeholder: "fc-...",
        },
        "webSearch.baseUrl": {
          label: "Firecrawl Search Base URL",
          help: "Firecrawl Search base URL override.",
        },
      },
      contracts: {
        webSearchProviders: ["firecrawl"],
        tools: ["firecrawl_search", "firecrawl_scrape"],
      },
    },
  },
  {
    dirName: "github-copilot",
    idHint: "github-copilot",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "login.js",
      "models-defaults.js",
      "models.js",
      "token.js",
      "usage.js",
    ],
    packageName: "@openclaw/github-copilot-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw GitHub Copilot provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "github-copilot",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["github-copilot"],
      providerAuthEnvVars: {
        "github-copilot": ["COPILOT_GITHUB_TOKEN", "GH_TOKEN", "GITHUB_TOKEN"],
      },
      providerAuthChoices: [
        {
          provider: "github-copilot",
          method: "device",
          choiceId: "github-copilot",
          choiceLabel: "GitHub Copilot",
          choiceHint: "Device login with your GitHub account",
          groupId: "copilot",
          groupLabel: "Copilot",
          groupHint: "GitHub + local proxy",
        },
      ],
    },
  },
  {
    dirName: "google",
    idHint: "google",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "cli-backend.js",
      "gemini-cli-provider.js",
      "image-generation-provider.js",
      "media-understanding-provider.js",
      "model-id.js",
      "oauth.credentials.js",
      "oauth.flow.js",
      "oauth.http.js",
      "oauth.js",
      "oauth.project.js",
      "oauth.runtime.js",
      "oauth.shared.js",
      "oauth.token.js",
      "provider-models.js",
      "runtime-api.js",
      "web-search-provider.js",
    ],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/google-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Google plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "google",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              model: {
                type: "string",
              },
            },
          },
        },
      },
      enabledByDefault: true,
      providers: ["google", "google-gemini-cli"],
      autoEnableWhenConfiguredProviders: ["google-gemini-cli"],
      cliBackends: ["google-gemini-cli"],
      providerAuthEnvVars: {
        google: ["GEMINI_API_KEY", "GOOGLE_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "google",
          method: "api-key",
          choiceId: "gemini-api-key",
          choiceLabel: "Google Gemini API key",
          groupId: "google",
          groupLabel: "Google",
          groupHint: "Gemini API key + OAuth",
          optionKey: "geminiApiKey",
          cliFlag: "--gemini-api-key",
          cliOption: "--gemini-api-key <key>",
          cliDescription: "Gemini API key",
        },
        {
          provider: "google-gemini-cli",
          method: "oauth",
          choiceId: "google-gemini-cli",
          choiceLabel: "Gemini CLI OAuth",
          choiceHint: "Google OAuth with project-aware token payload",
          groupId: "google",
          groupLabel: "Google",
          groupHint: "Gemini API key + OAuth",
        },
      ],
      uiHints: {
        "webSearch.apiKey": {
          label: "Gemini Search API Key",
          help: "Gemini API key for Google Search grounding (fallback: GEMINI_API_KEY env var).",
          sensitive: true,
          placeholder: "AIza...",
        },
        "webSearch.model": {
          label: "Gemini Search Model",
          help: "Gemini model override for web search grounding.",
        },
      },
      contracts: {
        mediaUnderstandingProviders: ["google"],
        imageGenerationProviders: ["google"],
        webSearchProviders: ["gemini"],
      },
    },
  },
  {
    dirName: "googlechat",
    idHint: "googlechat",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "channel-config-api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/googlechat",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Google Chat channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "googlechat",
        label: "Google Chat",
        selectionLabel: "Google Chat (Chat API)",
        detailLabel: "Google Chat",
        docsPath: "/channels/googlechat",
        docsLabel: "googlechat",
        blurb: "Google Workspace Chat app with HTTP webhook.",
        aliases: ["gchat", "google-chat"],
        order: 55,
        systemImage: "message.badge",
        markdownCapable: true,
      },
      install: {
        npmSpec: "@openclaw/googlechat",
        localPath: "extensions/googlechat",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "googlechat",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["googlechat"],
      channelConfigs: {
        googlechat: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              enabled: {
                type: "boolean",
              },
              configWrites: {
                type: "boolean",
              },
              allowBots: {
                type: "boolean",
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              defaultTo: {
                type: "string",
              },
              serviceAccount: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    type: "object",
                    propertyNames: {
                      type: "string",
                    },
                    additionalProperties: {},
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              serviceAccountRef: {
                oneOf: [
                  {
                    type: "object",
                    properties: {
                      source: {
                        type: "string",
                        const: "env",
                      },
                      provider: {
                        type: "string",
                        pattern: "^[a-z][a-z0-9_-]{0,63}$",
                      },
                      id: {
                        type: "string",
                        pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                      },
                    },
                    required: ["source", "provider", "id"],
                    additionalProperties: false,
                  },
                  {
                    type: "object",
                    properties: {
                      source: {
                        type: "string",
                        const: "file",
                      },
                      provider: {
                        type: "string",
                        pattern: "^[a-z][a-z0-9_-]{0,63}$",
                      },
                      id: {
                        type: "string",
                      },
                    },
                    required: ["source", "provider", "id"],
                    additionalProperties: false,
                  },
                  {
                    type: "object",
                    properties: {
                      source: {
                        type: "string",
                        const: "exec",
                      },
                      provider: {
                        type: "string",
                        pattern: "^[a-z][a-z0-9_-]{0,63}$",
                      },
                      id: {
                        type: "string",
                      },
                    },
                    required: ["source", "provider", "id"],
                    additionalProperties: false,
                  },
                ],
              },
              serviceAccountFile: {
                type: "string",
              },
              audienceType: {
                type: "string",
                enum: ["app-url", "project-number"],
              },
              audience: {
                type: "string",
              },
              appPrincipal: {
                type: "string",
              },
              webhookPath: {
                type: "string",
              },
              webhookUrl: {
                type: "string",
              },
              botUser: {
                type: "string",
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              streamMode: {
                default: "replace",
                type: "string",
                enum: ["replace", "status_final", "append"],
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              replyToMode: {
                anyOf: [
                  {
                    type: "string",
                    const: "off",
                  },
                  {
                    type: "string",
                    const: "first",
                  },
                  {
                    type: "string",
                    const: "all",
                  },
                ],
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              dm: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  policy: {
                    default: "pairing",
                    type: "string",
                    enum: ["pairing", "allowlist", "open", "disabled"],
                  },
                  allowFrom: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                },
                required: ["policy"],
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              typingIndicator: {
                type: "string",
                enum: ["none", "message", "reaction"],
              },
              responsePrefix: {
                type: "string",
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    allowBots: {
                      type: "boolean",
                    },
                    dangerouslyAllowNameMatching: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          enabled: {
                            type: "boolean",
                          },
                          allow: {
                            type: "boolean",
                          },
                          requireMention: {
                            type: "boolean",
                          },
                          users: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    defaultTo: {
                      type: "string",
                    },
                    serviceAccount: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "object",
                          propertyNames: {
                            type: "string",
                          },
                          additionalProperties: {},
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    serviceAccountRef: {
                      oneOf: [
                        {
                          type: "object",
                          properties: {
                            source: {
                              type: "string",
                              const: "env",
                            },
                            provider: {
                              type: "string",
                              pattern: "^[a-z][a-z0-9_-]{0,63}$",
                            },
                            id: {
                              type: "string",
                              pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                            },
                          },
                          required: ["source", "provider", "id"],
                          additionalProperties: false,
                        },
                        {
                          type: "object",
                          properties: {
                            source: {
                              type: "string",
                              const: "file",
                            },
                            provider: {
                              type: "string",
                              pattern: "^[a-z][a-z0-9_-]{0,63}$",
                            },
                            id: {
                              type: "string",
                            },
                          },
                          required: ["source", "provider", "id"],
                          additionalProperties: false,
                        },
                        {
                          type: "object",
                          properties: {
                            source: {
                              type: "string",
                              const: "exec",
                            },
                            provider: {
                              type: "string",
                              pattern: "^[a-z][a-z0-9_-]{0,63}$",
                            },
                            id: {
                              type: "string",
                            },
                          },
                          required: ["source", "provider", "id"],
                          additionalProperties: false,
                        },
                      ],
                    },
                    serviceAccountFile: {
                      type: "string",
                    },
                    audienceType: {
                      type: "string",
                      enum: ["app-url", "project-number"],
                    },
                    audience: {
                      type: "string",
                    },
                    appPrincipal: {
                      type: "string",
                    },
                    webhookPath: {
                      type: "string",
                    },
                    webhookUrl: {
                      type: "string",
                    },
                    botUser: {
                      type: "string",
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    streamMode: {
                      default: "replace",
                      type: "string",
                      enum: ["replace", "status_final", "append"],
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                    replyToMode: {
                      anyOf: [
                        {
                          type: "string",
                          const: "off",
                        },
                        {
                          type: "string",
                          const: "first",
                        },
                        {
                          type: "string",
                          const: "all",
                        },
                      ],
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    dm: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        policy: {
                          default: "pairing",
                          type: "string",
                          enum: ["pairing", "allowlist", "open", "disabled"],
                        },
                        allowFrom: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                      },
                      required: ["policy"],
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    typingIndicator: {
                      type: "string",
                      enum: ["none", "message", "reaction"],
                    },
                    responsePrefix: {
                      type: "string",
                    },
                  },
                  required: ["groupPolicy", "streamMode"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["groupPolicy", "streamMode"],
            additionalProperties: false,
          },
          label: "Google Chat",
          description: "Google Workspace Chat app with HTTP webhook.",
        },
      },
    },
  },
  {
    dirName: "groq",
    idHint: "groq",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["media-understanding-provider.js"],
    packageName: "@openclaw/groq-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Groq media-understanding provider",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "groq",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      contracts: {
        mediaUnderstandingProviders: ["groq"],
      },
    },
  },
  {
    dirName: "huggingface",
    idHint: "huggingface",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/huggingface-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Hugging Face provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "huggingface",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["huggingface"],
      providerAuthEnvVars: {
        huggingface: ["HUGGINGFACE_HUB_TOKEN", "HF_TOKEN"],
      },
      providerAuthChoices: [
        {
          provider: "huggingface",
          method: "api-key",
          choiceId: "huggingface-api-key",
          choiceLabel: "Hugging Face API key",
          choiceHint: "Inference API (HF token)",
          groupId: "huggingface",
          groupLabel: "Hugging Face",
          groupHint: "Inference API (HF token)",
          optionKey: "huggingfaceApiKey",
          cliFlag: "--huggingface-api-key",
          cliOption: "--huggingface-api-key <key>",
          cliDescription: "Hugging Face API key (HF token)",
        },
      ],
    },
  },
  {
    dirName: "imessage",
    idHint: "imessage",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "channel-config-api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/imessage",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw iMessage channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "imessage",
        label: "iMessage",
        selectionLabel: "iMessage (imsg)",
        detailLabel: "iMessage",
        docsPath: "/channels/imessage",
        docsLabel: "imessage",
        blurb: "this is still a work in progress.",
        aliases: ["imsg"],
        systemImage: "message.fill",
      },
    },
    manifest: {
      id: "imessage",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["imessage"],
      channelConfigs: {
        imessage: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              enabled: {
                type: "boolean",
              },
              configWrites: {
                type: "boolean",
              },
              cliPath: {
                type: "string",
              },
              dbPath: {
                type: "string",
              },
              remoteHost: {
                type: "string",
              },
              service: {
                anyOf: [
                  {
                    type: "string",
                    const: "imessage",
                  },
                  {
                    type: "string",
                    const: "sms",
                  },
                  {
                    type: "string",
                    const: "auto",
                  },
                ],
              },
              region: {
                type: "string",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              defaultTo: {
                type: "string",
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              includeAttachments: {
                type: "boolean",
              },
              attachmentRoots: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              remoteAttachmentRoots: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              mediaMaxMb: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                  },
                  additionalProperties: false,
                },
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    enabled: {
                      type: "boolean",
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    cliPath: {
                      type: "string",
                    },
                    dbPath: {
                      type: "string",
                    },
                    remoteHost: {
                      type: "string",
                    },
                    service: {
                      anyOf: [
                        {
                          type: "string",
                          const: "imessage",
                        },
                        {
                          type: "string",
                          const: "sms",
                        },
                        {
                          type: "string",
                          const: "auto",
                        },
                      ],
                    },
                    region: {
                      type: "string",
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    defaultTo: {
                      type: "string",
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    includeAttachments: {
                      type: "boolean",
                    },
                    attachmentRoots: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    remoteAttachmentRoots: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    mediaMaxMb: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        showOk: {
                          type: "boolean",
                        },
                        showAlerts: {
                          type: "boolean",
                        },
                        useIndicator: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    responsePrefix: {
                      type: "string",
                    },
                  },
                  required: ["dmPolicy", "groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["dmPolicy", "groupPolicy"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "iMessage",
              help: "iMessage channel provider configuration for CLI integration and DM access policy handling. Use explicit CLI paths when runtime environments have non-standard binary locations.",
            },
            dmPolicy: {
              label: "iMessage DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.imessage.allowFrom=["*"].',
            },
            configWrites: {
              label: "iMessage Config Writes",
              help: "Allow iMessage to write config in response to channel events/commands (default: true).",
            },
            cliPath: {
              label: "iMessage CLI Path",
              help: "Filesystem path to the iMessage bridge CLI binary used for send/receive operations. Set explicitly when the binary is not on PATH in service runtime environments.",
            },
          },
          label: "iMessage",
          description: "this is still a work in progress.",
        },
      },
    },
  },
  {
    dirName: "irc",
    idHint: "irc",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "channel-config-api.js"],
    packageName: "@openclaw/irc",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw IRC channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "irc",
        label: "IRC",
        selectionLabel: "IRC (Server + Nick)",
        detailLabel: "IRC",
        docsPath: "/channels/irc",
        docsLabel: "irc",
        blurb: "classic IRC networks with DM/channel routing and pairing controls.",
        aliases: ["internet-relay-chat"],
        systemImage: "network",
      },
      install: {
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "irc",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["irc"],
      channelConfigs: {
        irc: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              host: {
                type: "string",
              },
              port: {
                type: "integer",
                minimum: 1,
                maximum: 65535,
              },
              tls: {
                type: "boolean",
              },
              nick: {
                type: "string",
              },
              username: {
                type: "string",
              },
              realname: {
                type: "string",
              },
              password: {
                type: "string",
              },
              passwordFile: {
                type: "string",
              },
              nickserv: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  service: {
                    type: "string",
                  },
                  password: {
                    type: "string",
                  },
                  passwordFile: {
                    type: "string",
                  },
                  register: {
                    type: "boolean",
                  },
                  registerEmail: {
                    type: "string",
                  },
                },
                additionalProperties: false,
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              channels: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              mentionPatterns: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    dangerouslyAllowNameMatching: {
                      type: "boolean",
                    },
                    host: {
                      type: "string",
                    },
                    port: {
                      type: "integer",
                      minimum: 1,
                      maximum: 65535,
                    },
                    tls: {
                      type: "boolean",
                    },
                    nick: {
                      type: "string",
                    },
                    username: {
                      type: "string",
                    },
                    realname: {
                      type: "string",
                    },
                    password: {
                      type: "string",
                    },
                    passwordFile: {
                      type: "string",
                    },
                    nickserv: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        service: {
                          type: "string",
                        },
                        password: {
                          type: "string",
                        },
                        passwordFile: {
                          type: "string",
                        },
                        register: {
                          type: "boolean",
                        },
                        registerEmail: {
                          type: "string",
                        },
                      },
                      additionalProperties: false,
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    channels: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    mentionPatterns: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                  },
                  required: ["dmPolicy", "groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["dmPolicy", "groupPolicy"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "IRC",
              help: "IRC channel provider configuration and compatibility settings for classic IRC transport workflows. Use this section when bridging legacy chat infrastructure into OpenClaw.",
            },
            dmPolicy: {
              label: "IRC DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.irc.allowFrom=["*"].',
            },
            "nickserv.enabled": {
              label: "IRC NickServ Enabled",
              help: "Enable NickServ identify/register after connect (defaults to enabled when password is configured).",
            },
            "nickserv.service": {
              label: "IRC NickServ Service",
              help: "NickServ service nick (default: NickServ).",
            },
            "nickserv.password": {
              label: "IRC NickServ Password",
              help: "NickServ password used for IDENTIFY/REGISTER (sensitive).",
            },
            "nickserv.passwordFile": {
              label: "IRC NickServ Password File",
              help: "Optional file path containing NickServ password.",
            },
            "nickserv.register": {
              label: "IRC NickServ Register",
              help: "If true, send NickServ REGISTER on every connect. Use once for initial registration, then disable.",
            },
            "nickserv.registerEmail": {
              label: "IRC NickServ Register Email",
              help: "Email used with NickServ REGISTER (required when register=true).",
            },
            configWrites: {
              label: "IRC Config Writes",
              help: "Allow IRC to write config in response to channel events/commands (default: true).",
            },
          },
          label: "IRC",
          description: "classic IRC networks with DM/channel routing and pairing controls.",
        },
      },
    },
  },
  {
    dirName: "kilocode",
    idHint: "kilocode",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "onboard.js",
      "provider-catalog.js",
      "provider-models.js",
      "shared.js",
    ],
    packageName: "@openclaw/kilocode-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Kilo Gateway provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "kilocode",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["kilocode"],
      providerAuthEnvVars: {
        kilocode: ["KILOCODE_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "kilocode",
          method: "api-key",
          choiceId: "kilocode-api-key",
          choiceLabel: "Kilo Gateway API key",
          choiceHint: "API key (OpenRouter-compatible)",
          groupId: "kilocode",
          groupLabel: "Kilo Gateway",
          groupHint: "API key (OpenRouter-compatible)",
          optionKey: "kilocodeApiKey",
          cliFlag: "--kilocode-api-key",
          cliOption: "--kilocode-api-key <key>",
          cliDescription: "Kilo Gateway API key",
        },
      ],
    },
  },
  {
    dirName: "kimi-coding",
    idHint: "kimi",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/kimi-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Kimi provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "kimi",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["kimi", "kimi-coding"],
      providerAuthEnvVars: {
        kimi: ["KIMI_API_KEY", "KIMICODE_API_KEY"],
        "kimi-coding": ["KIMI_API_KEY", "KIMICODE_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "kimi",
          method: "api-key",
          choiceId: "kimi-code-api-key",
          choiceLabel: "Kimi Code API key (subscription)",
          groupId: "moonshot",
          groupLabel: "Moonshot AI (Kimi K2.5)",
          groupHint: "Kimi K2.5",
          optionKey: "kimiCodeApiKey",
          cliFlag: "--kimi-code-api-key",
          cliOption: "--kimi-code-api-key <key>",
          cliDescription: "Kimi Code API key (subscription)",
        },
      ],
    },
  },
  {
    dirName: "line",
    idHint: "line",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js", "setup-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/line",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw LINE channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "line",
        label: "LINE",
        selectionLabel: "LINE (Messaging API)",
        detailLabel: "LINE Bot",
        docsPath: "/channels/line",
        docsLabel: "line",
        blurb: "LINE Messaging API webhook bot.",
        systemImage: "message",
        order: 75,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/line",
        localPath: "extensions/line",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "line",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["line"],
      channelConfigs: {
        line: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              enabled: {
                type: "boolean",
              },
              channelAccessToken: {
                type: "string",
              },
              channelSecret: {
                type: "string",
              },
              tokenFile: {
                type: "string",
              },
              secretFile: {
                type: "string",
              },
              name: {
                type: "string",
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["open", "allowlist", "pairing", "disabled"],
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "allowlist", "disabled"],
              },
              responsePrefix: {
                type: "string",
              },
              mediaMaxMb: {
                type: "number",
              },
              webhookPath: {
                type: "string",
              },
              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,
          },
          label: "LINE",
          description: "LINE Messaging API webhook bot.",
        },
      },
    },
  },
  {
    dirName: "litellm",
    idHint: "litellm",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/litellm-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw LiteLLM provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "litellm",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["litellm"],
      providerAuthEnvVars: {
        litellm: ["LITELLM_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "litellm",
          method: "api-key",
          choiceId: "litellm-api-key",
          choiceLabel: "LiteLLM API key",
          choiceHint: "Unified gateway for 100+ LLM providers",
          groupId: "litellm",
          groupLabel: "LiteLLM",
          groupHint: "Unified LLM gateway (100+ providers)",
          optionKey: "litellmApiKey",
          cliFlag: "--litellm-api-key",
          cliOption: "--litellm-api-key <key>",
          cliDescription: "LiteLLM API key",
        },
      ],
    },
  },
  {
    dirName: "llm-task",
    idHint: "llm-task",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js"],
    packageName: "@openclaw/llm-task",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw JSON-only LLM task plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "llm-task",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          defaultProvider: {
            type: "string",
          },
          defaultModel: {
            type: "string",
          },
          defaultAuthProfileId: {
            type: "string",
          },
          allowedModels: {
            type: "array",
            items: {
              type: "string",
            },
            description: "Allowlist of provider/model keys like openai-codex/gpt-5.2.",
          },
          maxTokens: {
            type: "number",
          },
          timeoutMs: {
            type: "number",
          },
        },
      },
      name: "LLM Task",
      description: "Generic JSON-only LLM tool for structured tasks callable from workflows.",
    },
  },
  {
    dirName: "lobster",
    idHint: "lobster",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/lobster",
    packageVersion: "2026.3.28",
    packageDescription: "Lobster workflow tool plugin (typed pipelines + resumable approvals)",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "lobster",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      name: "Lobster",
      description: "Typed workflow tool with resumable approvals.",
    },
  },
  {
    dirName: "matrix",
    idHint: "matrix",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "helper-api.js",
      "legacy-crypto-inspector.js",
      "runtime-api.js",
      "thread-bindings-runtime.js",
    ],
    runtimeSidecarArtifacts: ["helper-api.js", "runtime-api.js", "thread-bindings-runtime.js"],
    packageName: "@openclaw/matrix",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Matrix channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "matrix",
        label: "Matrix",
        selectionLabel: "Matrix (plugin)",
        docsPath: "/channels/matrix",
        docsLabel: "matrix",
        blurb: "open protocol; install the plugin to enable.",
        order: 70,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/matrix",
        localPath: "extensions/matrix",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "matrix",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["matrix"],
      channelConfigs: {
        matrix: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              defaultAccount: {
                type: "string",
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {},
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              homeserver: {
                type: "string",
              },
              allowPrivateNetwork: {
                type: "boolean",
              },
              userId: {
                type: "string",
              },
              accessToken: {
                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"],
              },
              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",
              },
              autoJoin: {
                type: "string",
                enum: ["always", "allowlist", "off"],
              },
              autoJoinAllowlist: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              dm: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  policy: {
                    type: "string",
                    enum: ["pairing", "allowlist", "open", "disabled"],
                  },
                  allowFrom: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                },
                additionalProperties: false,
              },
              groups: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    allowBots: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "string",
                          const: "mentions",
                        },
                      ],
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    autoReply: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              rooms: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    allowBots: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "string",
                          const: "mentions",
                        },
                      ],
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    autoReply: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                  messages: {
                    type: "boolean",
                  },
                  pins: {
                    type: "boolean",
                  },
                  profile: {
                    type: "boolean",
                  },
                  memberInfo: {
                    type: "boolean",
                  },
                  channelInfo: {
                    type: "boolean",
                  },
                  verification: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
            },
            additionalProperties: false,
          },
          label: "Matrix",
          description: "open protocol; install the plugin to enable.",
        },
      },
    },
  },
  {
    dirName: "mattermost",
    idHint: "mattermost",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/mattermost",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Mattermost channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "mattermost",
        label: "Mattermost",
        selectionLabel: "Mattermost (plugin)",
        docsPath: "/channels/mattermost",
        docsLabel: "mattermost",
        blurb: "self-hosted Slack-style chat; install the plugin to enable.",
        order: 65,
      },
      install: {
        npmSpec: "@openclaw/mattermost",
        localPath: "extensions/mattermost",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "mattermost",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["mattermost"],
      channelConfigs: {
        mattermost: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              enabled: {
                type: "boolean",
              },
              configWrites: {
                type: "boolean",
              },
              botToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              baseUrl: {
                type: "string",
              },
              chatmode: {
                type: "string",
                enum: ["oncall", "onmessage", "onchar"],
              },
              oncharPrefixes: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              requireMention: {
                type: "boolean",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              replyToMode: {
                type: "string",
                enum: ["off", "first", "all"],
              },
              responsePrefix: {
                type: "string",
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              commands: {
                type: "object",
                properties: {
                  native: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                  nativeSkills: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                  callbackPath: {
                    type: "string",
                  },
                  callbackUrl: {
                    type: "string",
                  },
                },
                additionalProperties: false,
              },
              interactions: {
                type: "object",
                properties: {
                  callbackBaseUrl: {
                    type: "string",
                  },
                  allowedSourceIps: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                },
                additionalProperties: false,
              },
              allowPrivateNetwork: {
                type: "boolean",
              },
              dmChannelRetry: {
                type: "object",
                properties: {
                  maxRetries: {
                    type: "integer",
                    minimum: 0,
                    maximum: 10,
                  },
                  initialDelayMs: {
                    type: "integer",
                    minimum: 100,
                    maximum: 60000,
                  },
                  maxDelayMs: {
                    type: "integer",
                    minimum: 1000,
                    maximum: 60000,
                  },
                  timeoutMs: {
                    type: "integer",
                    minimum: 5000,
                    maximum: 120000,
                  },
                },
                additionalProperties: false,
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    dangerouslyAllowNameMatching: {
                      type: "boolean",
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    enabled: {
                      type: "boolean",
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    botToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    baseUrl: {
                      type: "string",
                    },
                    chatmode: {
                      type: "string",
                      enum: ["oncall", "onmessage", "onchar"],
                    },
                    oncharPrefixes: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    replyToMode: {
                      type: "string",
                      enum: ["off", "first", "all"],
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    commands: {
                      type: "object",
                      properties: {
                        native: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                        nativeSkills: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                        callbackPath: {
                          type: "string",
                        },
                        callbackUrl: {
                          type: "string",
                        },
                      },
                      additionalProperties: false,
                    },
                    interactions: {
                      type: "object",
                      properties: {
                        callbackBaseUrl: {
                          type: "string",
                        },
                        allowedSourceIps: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    allowPrivateNetwork: {
                      type: "boolean",
                    },
                    dmChannelRetry: {
                      type: "object",
                      properties: {
                        maxRetries: {
                          type: "integer",
                          minimum: 0,
                          maximum: 10,
                        },
                        initialDelayMs: {
                          type: "integer",
                          minimum: 100,
                          maximum: 60000,
                        },
                        maxDelayMs: {
                          type: "integer",
                          minimum: 1000,
                          maximum: 60000,
                        },
                        timeoutMs: {
                          type: "integer",
                          minimum: 5000,
                          maximum: 120000,
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                  required: ["dmPolicy", "groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["dmPolicy", "groupPolicy"],
            additionalProperties: false,
          },
          label: "Mattermost",
          description: "self-hosted Slack-style chat; install the plugin to enable.",
        },
      },
    },
  },
  {
    dirName: "memory-core",
    idHint: "memory-core",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/memory-core",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw core memory search plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "memory-core",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      kind: "memory",
    },
  },
  {
    dirName: "memory-lancedb",
    idHint: "memory-lancedb",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "config.js", "lancedb-runtime.js"],
    packageName: "@openclaw/memory-lancedb",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw LanceDB-backed long-term memory plugin with auto-recall/capture",
    packageManifest: {
      extensions: ["./index.ts"],
      install: {
        npmSpec: "@openclaw/memory-lancedb",
        localPath: "extensions/memory-lancedb",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "memory-lancedb",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          embedding: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: "string",
              },
              model: {
                type: "string",
              },
              baseUrl: {
                type: "string",
              },
              dimensions: {
                type: "number",
              },
            },
            required: ["apiKey"],
          },
          dbPath: {
            type: "string",
          },
          autoCapture: {
            type: "boolean",
          },
          autoRecall: {
            type: "boolean",
          },
          captureMaxChars: {
            type: "number",
            minimum: 100,
            maximum: 10000,
          },
        },
        required: ["embedding"],
      },
      kind: "memory",
      uiHints: {
        "embedding.apiKey": {
          label: "OpenAI API Key",
          sensitive: true,
          placeholder: "sk-proj-...",
          help: "API key for OpenAI embeddings (or use ${OPENAI_API_KEY})",
        },
        "embedding.model": {
          label: "Embedding Model",
          placeholder: "text-embedding-3-small",
          help: "OpenAI embedding model to use",
        },
        "embedding.baseUrl": {
          label: "Base URL",
          placeholder: "https://api.openai.com/v1",
          help: "Base URL for compatible providers (e.g. http://localhost:11434/v1)",
          advanced: true,
        },
        "embedding.dimensions": {
          label: "Dimensions",
          placeholder: "1536",
          help: "Vector dimensions for custom models (required for non-standard models)",
          advanced: true,
        },
        dbPath: {
          label: "Database Path",
          placeholder: "~/.openclaw/memory/lancedb",
          advanced: true,
        },
        autoCapture: {
          label: "Auto-Capture",
          help: "Automatically capture important information from conversations",
        },
        autoRecall: {
          label: "Auto-Recall",
          help: "Automatically inject relevant memories into context",
        },
        captureMaxChars: {
          label: "Capture Max Chars",
          help: "Maximum message length eligible for auto-capture",
          advanced: true,
          placeholder: "500",
        },
      },
    },
  },
  {
    dirName: "microsoft",
    idHint: "microsoft",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["speech-provider.js", "tts.js"],
    packageName: "@openclaw/microsoft-speech",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Microsoft speech plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "microsoft",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      contracts: {
        speechProviders: ["microsoft"],
      },
    },
  },
  {
    dirName: "microsoft-foundry",
    idHint: "microsoft-foundry",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "auth.js",
      "cli.js",
      "onboard.js",
      "provider.js",
      "runtime.js",
      "shared-runtime.js",
      "shared.js",
    ],
    packageName: "@openclaw/microsoft-foundry",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Microsoft Foundry provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "microsoft-foundry",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["microsoft-foundry"],
      providerAuthEnvVars: {
        "microsoft-foundry": ["AZURE_OPENAI_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "microsoft-foundry",
          method: "entra-id",
          choiceId: "microsoft-foundry-entra",
          choiceLabel: "Microsoft Foundry (Entra ID / az login)",
          choiceHint: "Use your Azure login — no API key needed",
          groupId: "microsoft-foundry",
          groupLabel: "Microsoft Foundry",
          groupHint: "Entra ID + API key",
        },
        {
          provider: "microsoft-foundry",
          method: "api-key",
          choiceId: "microsoft-foundry-apikey",
          choiceLabel: "Microsoft Foundry (API key)",
          choiceHint: "Use an Azure OpenAI API key directly",
          groupId: "microsoft-foundry",
          groupLabel: "Microsoft Foundry",
          groupHint: "Entra ID + API key",
        },
      ],
    },
  },
  {
    dirName: "minimax",
    idHint: "minimax",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "image-generation-provider.js",
      "media-understanding-provider.js",
      "model-definitions.js",
      "oauth.js",
      "oauth.runtime.js",
      "onboard.js",
      "provider-catalog.js",
      "provider-models.js",
    ],
    packageName: "@openclaw/minimax-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw MiniMax provider and OAuth plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "minimax",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["minimax", "minimax-portal"],
      autoEnableWhenConfiguredProviders: ["minimax-portal"],
      legacyPluginIds: ["minimax-portal-auth"],
      providerAuthEnvVars: {
        minimax: ["MINIMAX_API_KEY"],
        "minimax-portal": ["MINIMAX_OAUTH_TOKEN", "MINIMAX_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "minimax-portal",
          method: "oauth",
          choiceId: "minimax-global-oauth",
          choiceLabel: "MiniMax OAuth (Global)",
          choiceHint: "Global endpoint - api.minimax.io",
          groupId: "minimax",
          groupLabel: "MiniMax",
          groupHint: "M2.7 (recommended)",
        },
        {
          provider: "minimax",
          method: "api-global",
          choiceId: "minimax-global-api",
          deprecatedChoiceIds: ["minimax", "minimax-api", "minimax-cloud", "minimax-api-lightning"],
          choiceLabel: "MiniMax API key (Global)",
          choiceHint: "Global endpoint - api.minimax.io",
          groupId: "minimax",
          groupLabel: "MiniMax",
          groupHint: "M2.7 (recommended)",
          optionKey: "minimaxApiKey",
          cliFlag: "--minimax-api-key",
          cliOption: "--minimax-api-key <key>",
          cliDescription: "MiniMax API key",
        },
        {
          provider: "minimax-portal",
          method: "oauth-cn",
          choiceId: "minimax-cn-oauth",
          choiceLabel: "MiniMax OAuth (CN)",
          choiceHint: "CN endpoint - api.minimaxi.com",
          groupId: "minimax",
          groupLabel: "MiniMax",
          groupHint: "M2.7 (recommended)",
        },
        {
          provider: "minimax",
          method: "api-cn",
          choiceId: "minimax-cn-api",
          deprecatedChoiceIds: ["minimax-api-key-cn"],
          choiceLabel: "MiniMax API key (CN)",
          choiceHint: "CN endpoint - api.minimaxi.com",
          groupId: "minimax",
          groupLabel: "MiniMax",
          groupHint: "M2.7 (recommended)",
          optionKey: "minimaxApiKey",
          cliFlag: "--minimax-api-key",
          cliOption: "--minimax-api-key <key>",
          cliDescription: "MiniMax API key",
        },
      ],
      contracts: {
        mediaUnderstandingProviders: ["minimax", "minimax-portal"],
        imageGenerationProviders: ["minimax", "minimax-portal"],
      },
    },
  },
  {
    dirName: "mistral",
    idHint: "mistral",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "media-understanding-provider.js",
      "model-definitions.js",
      "onboard.js",
      "provider-catalog.js",
    ],
    packageName: "@openclaw/mistral-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Mistral provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "mistral",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["mistral"],
      providerAuthEnvVars: {
        mistral: ["MISTRAL_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "mistral",
          method: "api-key",
          choiceId: "mistral-api-key",
          choiceLabel: "Mistral API key",
          groupId: "mistral",
          groupLabel: "Mistral AI",
          groupHint: "API key",
          optionKey: "mistralApiKey",
          cliFlag: "--mistral-api-key",
          cliOption: "--mistral-api-key <key>",
          cliDescription: "Mistral API key",
        },
      ],
      contracts: {
        mediaUnderstandingProviders: ["mistral"],
      },
    },
  },
  {
    dirName: "modelstudio",
    idHint: "modelstudio",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "model-definitions.js",
      "models.js",
      "onboard.js",
      "provider-catalog.js",
    ],
    packageName: "@openclaw/modelstudio-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Model Studio provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "modelstudio",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["modelstudio"],
      providerAuthEnvVars: {
        modelstudio: ["MODELSTUDIO_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "modelstudio",
          method: "standard-api-key-cn",
          choiceId: "modelstudio-standard-api-key-cn",
          choiceLabel: "Standard API Key for China (pay-as-you-go)",
          choiceHint: "Endpoint: dashscope.aliyuncs.com",
          groupId: "modelstudio",
          groupLabel: "Qwen (Alibaba Cloud Model Studio)",
          groupHint: "Standard / Coding Plan (CN / Global)",
          optionKey: "modelstudioStandardApiKeyCn",
          cliFlag: "--modelstudio-standard-api-key-cn",
          cliOption: "--modelstudio-standard-api-key-cn <key>",
          cliDescription: "Alibaba Cloud Model Studio Standard API key (China)",
        },
        {
          provider: "modelstudio",
          method: "standard-api-key",
          choiceId: "modelstudio-standard-api-key",
          choiceLabel: "Standard API Key for Global/Intl (pay-as-you-go)",
          choiceHint: "Endpoint: dashscope-intl.aliyuncs.com",
          groupId: "modelstudio",
          groupLabel: "Qwen (Alibaba Cloud Model Studio)",
          groupHint: "Standard / Coding Plan (CN / Global)",
          optionKey: "modelstudioStandardApiKey",
          cliFlag: "--modelstudio-standard-api-key",
          cliOption: "--modelstudio-standard-api-key <key>",
          cliDescription: "Alibaba Cloud Model Studio Standard API key (Global/Intl)",
        },
        {
          provider: "modelstudio",
          method: "api-key-cn",
          choiceId: "modelstudio-api-key-cn",
          choiceLabel: "Coding Plan API Key for China (subscription)",
          choiceHint: "Endpoint: coding.dashscope.aliyuncs.com",
          groupId: "modelstudio",
          groupLabel: "Qwen (Alibaba Cloud Model Studio)",
          groupHint: "Standard / Coding Plan (CN / Global)",
          optionKey: "modelstudioApiKeyCn",
          cliFlag: "--modelstudio-api-key-cn",
          cliOption: "--modelstudio-api-key-cn <key>",
          cliDescription: "Alibaba Cloud Model Studio Coding Plan API key (China)",
        },
        {
          provider: "modelstudio",
          method: "api-key",
          choiceId: "modelstudio-api-key",
          choiceLabel: "Coding Plan API Key for Global/Intl (subscription)",
          choiceHint: "Endpoint: coding-intl.dashscope.aliyuncs.com",
          groupId: "modelstudio",
          groupLabel: "Qwen (Alibaba Cloud Model Studio)",
          groupHint: "Standard / Coding Plan (CN / Global)",
          optionKey: "modelstudioApiKey",
          cliFlag: "--modelstudio-api-key",
          cliOption: "--modelstudio-api-key <key>",
          cliDescription: "Alibaba Cloud Model Studio Coding Plan API key (Global/Intl)",
        },
      ],
    },
  },
  {
    dirName: "moonshot",
    idHint: "moonshot",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "media-understanding-provider.js",
      "onboard.js",
      "provider-catalog.js",
      "web-search-provider.js",
    ],
    packageName: "@openclaw/moonshot-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Moonshot provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "moonshot",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              baseUrl: {
                type: "string",
              },
              model: {
                type: "string",
              },
            },
          },
        },
      },
      enabledByDefault: true,
      providers: ["moonshot"],
      providerAuthEnvVars: {
        moonshot: ["MOONSHOT_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "moonshot",
          method: "api-key",
          choiceId: "moonshot-api-key",
          choiceLabel: "Moonshot API key (.ai)",
          groupId: "moonshot",
          groupLabel: "Moonshot AI (Kimi K2.5)",
          groupHint: "Kimi K2.5",
          optionKey: "moonshotApiKey",
          cliFlag: "--moonshot-api-key",
          cliOption: "--moonshot-api-key <key>",
          cliDescription: "Moonshot API key",
        },
        {
          provider: "moonshot",
          method: "api-key-cn",
          choiceId: "moonshot-api-key-cn",
          choiceLabel: "Moonshot API key (.cn)",
          groupId: "moonshot",
          groupLabel: "Moonshot AI (Kimi K2.5)",
          groupHint: "Kimi K2.5",
          optionKey: "moonshotApiKey",
          cliFlag: "--moonshot-api-key",
          cliOption: "--moonshot-api-key <key>",
          cliDescription: "Moonshot API key",
        },
      ],
      uiHints: {
        "webSearch.apiKey": {
          label: "Kimi Search API Key",
          help: "Moonshot/Kimi API key (fallback: KIMI_API_KEY or MOONSHOT_API_KEY env var).",
          sensitive: true,
        },
        "webSearch.baseUrl": {
          label: "Kimi Search Base URL",
          help: "Kimi base URL override.",
        },
        "webSearch.model": {
          label: "Kimi Search Model",
          help: "Kimi model override.",
        },
      },
      contracts: {
        mediaUnderstandingProviders: ["moonshot"],
        webSearchProviders: ["kimi"],
      },
    },
  },
  {
    dirName: "msteams",
    idHint: "msteams",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "channel-config-api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/msteams",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Microsoft Teams channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "msteams",
        label: "Microsoft Teams",
        selectionLabel: "Microsoft Teams (Teams SDK)",
        docsPath: "/channels/msteams",
        docsLabel: "msteams",
        blurb: "Teams SDK; enterprise support.",
        aliases: ["teams"],
        order: 60,
      },
      install: {
        npmSpec: "@openclaw/msteams",
        localPath: "extensions/msteams",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "msteams",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["msteams"],
      channelConfigs: {
        msteams: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              enabled: {
                type: "boolean",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              configWrites: {
                type: "boolean",
              },
              appId: {
                type: "string",
              },
              appPassword: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              tenantId: {
                type: "string",
              },
              webhook: {
                type: "object",
                properties: {
                  port: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  path: {
                    type: "string",
                  },
                },
                additionalProperties: false,
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              defaultTo: {
                type: "string",
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              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).",
            },
          },
          label: "Microsoft Teams",
          description: "Teams SDK; enterprise support.",
        },
      },
    },
  },
  {
    dirName: "nextcloud-talk",
    idHint: "nextcloud-talk",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/nextcloud-talk",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Nextcloud Talk channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "nextcloud-talk",
        label: "Nextcloud Talk",
        selectionLabel: "Nextcloud Talk (self-hosted)",
        docsPath: "/channels/nextcloud-talk",
        docsLabel: "nextcloud-talk",
        blurb: "Self-hosted chat via Nextcloud Talk webhook bots.",
        aliases: ["nc-talk", "nc"],
        order: 65,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/nextcloud-talk",
        localPath: "extensions/nextcloud-talk",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "nextcloud-talk",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["nextcloud-talk"],
      channelConfigs: {
        "nextcloud-talk": {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              baseUrl: {
                type: "string",
              },
              botSecret: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              botSecretFile: {
                type: "string",
              },
              apiUser: {
                type: "string",
              },
              apiPassword: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              apiPasswordFile: {
                type: "string",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              webhookPort: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              webhookHost: {
                type: "string",
              },
              webhookPath: {
                type: "string",
              },
              webhookPublicUrl: {
                type: "string",
              },
              allowFrom: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              rooms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              allowPrivateNetwork: {
                type: "boolean",
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    baseUrl: {
                      type: "string",
                    },
                    botSecret: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    botSecretFile: {
                      type: "string",
                    },
                    apiUser: {
                      type: "string",
                    },
                    apiPassword: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    apiPasswordFile: {
                      type: "string",
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    webhookPort: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    webhookHost: {
                      type: "string",
                    },
                    webhookPath: {
                      type: "string",
                    },
                    webhookPublicUrl: {
                      type: "string",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    rooms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    allowPrivateNetwork: {
                      type: "boolean",
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                  },
                  required: ["dmPolicy", "groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["dmPolicy", "groupPolicy"],
            additionalProperties: false,
          },
          label: "Nextcloud Talk",
          description: "Self-hosted chat via Nextcloud Talk webhook bots.",
        },
      },
    },
  },
  {
    dirName: "nostr",
    idHint: "nostr",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js", "setup-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/nostr",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Nostr channel plugin for NIP-04 encrypted DMs",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "nostr",
        label: "Nostr",
        selectionLabel: "Nostr (NIP-04 DMs)",
        docsPath: "/channels/nostr",
        docsLabel: "nostr",
        blurb: "Decentralized protocol; encrypted DMs via NIP-04.",
        order: 55,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/nostr",
        localPath: "extensions/nostr",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "nostr",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["nostr"],
      channelConfigs: {
        nostr: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              defaultAccount: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              privateKey: {
                type: "string",
              },
              relays: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              profile: {
                type: "object",
                properties: {
                  name: {
                    type: "string",
                    maxLength: 256,
                  },
                  displayName: {
                    type: "string",
                    maxLength: 256,
                  },
                  about: {
                    type: "string",
                    maxLength: 2000,
                  },
                  picture: {
                    type: "string",
                    format: "uri",
                  },
                  banner: {
                    type: "string",
                    format: "uri",
                  },
                  website: {
                    type: "string",
                    format: "uri",
                  },
                  nip05: {
                    type: "string",
                  },
                  lud16: {
                    type: "string",
                  },
                },
                additionalProperties: false,
              },
            },
            additionalProperties: false,
          },
          label: "Nostr",
          description: "Decentralized protocol; encrypted DMs via NIP-04.",
        },
      },
    },
  },
  {
    dirName: "nvidia",
    idHint: "nvidia",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "provider-catalog.js"],
    packageName: "@openclaw/nvidia-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw NVIDIA provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "nvidia",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["nvidia"],
      providerAuthEnvVars: {
        nvidia: ["NVIDIA_API_KEY"],
      },
    },
  },
  {
    dirName: "ollama",
    idHint: "ollama",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/ollama-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Ollama provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "ollama",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["ollama"],
      providerAuthEnvVars: {
        ollama: ["OLLAMA_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "ollama",
          method: "local",
          choiceId: "ollama",
          choiceLabel: "Ollama",
          choiceHint: "Cloud and local open models",
          groupId: "ollama",
          groupLabel: "Ollama",
          groupHint: "Cloud and local open models",
        },
      ],
    },
  },
  {
    dirName: "open-prose",
    idHint: "open-prose",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/open-prose",
    packageVersion: "2026.3.28",
    packageDescription: "OpenProse VM skill pack plugin (slash command + telemetry).",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "open-prose",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      skills: ["./skills"],
      name: "OpenProse",
      description: "OpenProse VM skill pack with a /prose slash command.",
    },
  },
  {
    dirName: "openai",
    idHint: "openai",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "cli-backend.js",
      "default-models.js",
      "image-generation-provider.js",
      "media-understanding-provider.js",
      "openai-codex-auth-identity.js",
      "openai-codex-catalog.js",
      "openai-codex-provider.js",
      "openai-codex-provider.runtime.js",
      "openai-provider.js",
      "shared.js",
      "speech-provider.js",
      "tts.js",
    ],
    packageName: "@openclaw/openai-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw OpenAI provider plugins",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "openai",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["openai", "openai-codex"],
      cliBackends: ["codex-cli"],
      providerAuthEnvVars: {
        openai: ["OPENAI_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "openai-codex",
          method: "oauth",
          choiceId: "openai-codex",
          deprecatedChoiceIds: ["codex-cli"],
          choiceLabel: "OpenAI Codex (ChatGPT OAuth)",
          choiceHint: "Browser sign-in",
          groupId: "openai",
          groupLabel: "OpenAI",
          groupHint: "Codex OAuth + API key",
        },
        {
          provider: "openai",
          method: "api-key",
          choiceId: "openai-api-key",
          choiceLabel: "OpenAI API key",
          groupId: "openai",
          groupLabel: "OpenAI",
          groupHint: "Codex OAuth + API key",
          optionKey: "openaiApiKey",
          cliFlag: "--openai-api-key",
          cliOption: "--openai-api-key <key>",
          cliDescription: "OpenAI API key",
        },
      ],
      contracts: {
        speechProviders: ["openai"],
        mediaUnderstandingProviders: ["openai", "openai-codex"],
        imageGenerationProviders: ["openai"],
      },
    },
  },
  {
    dirName: "opencode",
    idHint: "opencode",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "onboard.js"],
    packageName: "@openclaw/opencode-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw OpenCode Zen provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "opencode",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["opencode"],
      providerAuthEnvVars: {
        opencode: ["OPENCODE_API_KEY", "OPENCODE_ZEN_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "opencode",
          method: "api-key",
          choiceId: "opencode-zen",
          choiceLabel: "OpenCode Zen catalog",
          groupId: "opencode",
          groupLabel: "OpenCode",
          groupHint: "Shared API key for Zen + Go catalogs",
          optionKey: "opencodeZenApiKey",
          cliFlag: "--opencode-zen-api-key",
          cliOption: "--opencode-zen-api-key <key>",
          cliDescription: "OpenCode API key (Zen catalog)",
        },
      ],
    },
  },
  {
    dirName: "opencode-go",
    idHint: "opencode-go",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "onboard.js"],
    packageName: "@openclaw/opencode-go-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw OpenCode Go provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "opencode-go",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["opencode-go"],
      providerAuthEnvVars: {
        "opencode-go": ["OPENCODE_API_KEY", "OPENCODE_ZEN_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "opencode-go",
          method: "api-key",
          choiceId: "opencode-go",
          choiceLabel: "OpenCode Go catalog",
          groupId: "opencode",
          groupLabel: "OpenCode",
          groupHint: "Shared API key for Zen + Go catalogs",
          optionKey: "opencodeGoApiKey",
          cliFlag: "--opencode-go-api-key",
          cliOption: "--opencode-go-api-key <key>",
          cliDescription: "OpenCode API key (Go catalog)",
        },
      ],
    },
  },
  {
    dirName: "openrouter",
    idHint: "openrouter",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "media-understanding-provider.js",
      "onboard.js",
      "provider-catalog.js",
    ],
    packageName: "@openclaw/openrouter-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw OpenRouter provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "openrouter",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["openrouter"],
      providerAuthEnvVars: {
        openrouter: ["OPENROUTER_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "openrouter",
          method: "api-key",
          choiceId: "openrouter-api-key",
          choiceLabel: "OpenRouter API key",
          groupId: "openrouter",
          groupLabel: "OpenRouter",
          groupHint: "API key",
          optionKey: "openrouterApiKey",
          cliFlag: "--openrouter-api-key",
          cliOption: "--openrouter-api-key <key>",
          cliDescription: "OpenRouter API key",
        },
      ],
      contracts: {
        mediaUnderstandingProviders: ["openrouter"],
      },
    },
  },
  {
    dirName: "openshell",
    idHint: "openshell",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    packageName: "@openclaw/openshell-sandbox",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw OpenShell sandbox backend",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "openshell",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          mode: {
            type: "string",
            enum: ["mirror", "remote"],
          },
          command: {
            type: "string",
            minLength: 1,
          },
          gateway: {
            type: "string",
            minLength: 1,
          },
          gatewayEndpoint: {
            type: "string",
            minLength: 1,
          },
          from: {
            type: "string",
            minLength: 1,
          },
          policy: {
            type: "string",
            minLength: 1,
          },
          providers: {
            type: "array",
            items: {
              type: "string",
              minLength: 1,
            },
          },
          gpu: {
            type: "boolean",
          },
          autoProviders: {
            type: "boolean",
          },
          remoteWorkspaceDir: {
            type: "string",
            minLength: 1,
          },
          remoteAgentWorkspaceDir: {
            type: "string",
            minLength: 1,
          },
          timeoutSeconds: {
            type: "number",
            minimum: 1,
          },
        },
      },
      name: "OpenShell Sandbox",
      description:
        "Sandbox backend powered by OpenShell with mirrored local workspaces and SSH-based command execution.",
      uiHints: {
        mode: {
          label: "Mode",
          help: "Sandbox mode. Use mirror for the default local-workspace flow or remote for a fully remote workspace.",
        },
        command: {
          label: "OpenShell Command",
          help: "Path or command name for the openshell CLI.",
        },
        gateway: {
          label: "Gateway Name",
          help: "Optional OpenShell gateway name passed as --gateway.",
        },
        gatewayEndpoint: {
          label: "Gateway Endpoint",
          help: "Optional OpenShell gateway endpoint passed as --gateway-endpoint.",
        },
        from: {
          label: "Sandbox Source",
          help: "OpenShell sandbox source for first-time create. Defaults to openclaw.",
        },
        policy: {
          label: "Policy File",
          help: "Optional path to a custom OpenShell sandbox policy YAML.",
        },
        providers: {
          label: "Providers",
          help: "Provider names to attach when a sandbox is created.",
        },
        gpu: {
          label: "GPU",
          help: "Request GPU resources when creating the sandbox.",
          advanced: true,
        },
        autoProviders: {
          label: "Auto-create Providers",
          help: "When enabled, pass --auto-providers during sandbox create.",
          advanced: true,
        },
        remoteWorkspaceDir: {
          label: "Remote Workspace Dir",
          help: "Primary writable workspace inside the OpenShell sandbox.",
          advanced: true,
        },
        remoteAgentWorkspaceDir: {
          label: "Remote Agent Dir",
          help: "Mirror path for the real agent workspace when workspaceAccess is read-only.",
          advanced: true,
        },
        timeoutSeconds: {
          label: "Command Timeout Seconds",
          help: "Timeout for openshell CLI operations such as create/upload/download.",
          advanced: true,
        },
      },
    },
  },
  {
    dirName: "perplexity",
    idHint: "perplexity",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["web-search-provider.js"],
    packageName: "@openclaw/perplexity-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Perplexity plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "perplexity",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              baseUrl: {
                type: "string",
              },
              model: {
                type: "string",
              },
            },
          },
        },
      },
      providerAuthEnvVars: {
        perplexity: ["PERPLEXITY_API_KEY", "OPENROUTER_API_KEY"],
      },
      uiHints: {
        "webSearch.apiKey": {
          label: "Perplexity API Key",
          help: "Perplexity or OpenRouter API key for web search.",
          sensitive: true,
          placeholder: "pplx-...",
        },
        "webSearch.baseUrl": {
          label: "Perplexity Base URL",
          help: "Optional Perplexity/OpenRouter chat-completions base URL override.",
        },
        "webSearch.model": {
          label: "Perplexity Model",
          help: "Optional Sonar/OpenRouter model override.",
        },
      },
      contracts: {
        webSearchProviders: ["perplexity"],
      },
    },
  },
  {
    dirName: "qianfan",
    idHint: "qianfan",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/qianfan-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Qianfan provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "qianfan",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["qianfan"],
      providerAuthEnvVars: {
        qianfan: ["QIANFAN_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "qianfan",
          method: "api-key",
          choiceId: "qianfan-api-key",
          choiceLabel: "Qianfan API key",
          groupId: "qianfan",
          groupLabel: "Qianfan",
          groupHint: "API key",
          optionKey: "qianfanApiKey",
          cliFlag: "--qianfan-api-key",
          cliOption: "--qianfan-api-key <key>",
          cliDescription: "QIANFAN API key",
        },
      ],
    },
  },
  {
    dirName: "sglang",
    idHint: "sglang",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "defaults.js", "models.js"],
    packageName: "@openclaw/sglang-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw SGLang provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "sglang",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["sglang"],
      providerAuthEnvVars: {
        sglang: ["SGLANG_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "sglang",
          method: "custom",
          choiceId: "sglang",
          choiceLabel: "SGLang",
          choiceHint: "Fast self-hosted OpenAI-compatible server",
          groupId: "sglang",
          groupLabel: "SGLang",
          groupHint: "Fast self-hosted server",
        },
      ],
    },
  },
  {
    dirName: "signal",
    idHint: "signal",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "channel-config-api.js",
      "reaction-runtime-api.js",
      "runtime-api.js",
    ],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/signal",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Signal channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "signal",
        label: "Signal",
        selectionLabel: "Signal (signal-cli)",
        detailLabel: "Signal REST",
        docsPath: "/channels/signal",
        docsLabel: "signal",
        blurb: 'signal-cli linked device; more setup (David Reagans: "Hop on Discord.").',
        systemImage: "antenna.radiowaves.left.and.right",
        markdownCapable: true,
      },
    },
    manifest: {
      id: "signal",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["signal"],
      channelConfigs: {
        signal: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              enabled: {
                type: "boolean",
              },
              configWrites: {
                type: "boolean",
              },
              account: {
                type: "string",
              },
              accountUuid: {
                type: "string",
              },
              httpUrl: {
                type: "string",
              },
              httpHost: {
                type: "string",
              },
              httpPort: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              cliPath: {
                type: "string",
              },
              autoStart: {
                type: "boolean",
              },
              startupTimeoutMs: {
                type: "integer",
                minimum: 1000,
                maximum: 120000,
              },
              receiveMode: {
                anyOf: [
                  {
                    type: "string",
                    const: "on-start",
                  },
                  {
                    type: "string",
                    const: "manual",
                  },
                ],
              },
              ignoreAttachments: {
                type: "boolean",
              },
              ignoreStories: {
                type: "boolean",
              },
              sendReadReceipts: {
                type: "boolean",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              defaultTo: {
                type: "string",
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                  },
                  additionalProperties: false,
                },
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              mediaMaxMb: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              reactionNotifications: {
                type: "string",
                enum: ["off", "own", "all", "allowlist"],
              },
              reactionAllowlist: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              reactionLevel: {
                type: "string",
                enum: ["off", "ack", "minimal", "extensive"],
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    enabled: {
                      type: "boolean",
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    account: {
                      type: "string",
                    },
                    accountUuid: {
                      type: "string",
                    },
                    httpUrl: {
                      type: "string",
                    },
                    httpHost: {
                      type: "string",
                    },
                    httpPort: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    cliPath: {
                      type: "string",
                    },
                    autoStart: {
                      type: "boolean",
                    },
                    startupTimeoutMs: {
                      type: "integer",
                      minimum: 1000,
                      maximum: 120000,
                    },
                    receiveMode: {
                      anyOf: [
                        {
                          type: "string",
                          const: "on-start",
                        },
                        {
                          type: "string",
                          const: "manual",
                        },
                      ],
                    },
                    ignoreAttachments: {
                      type: "boolean",
                    },
                    ignoreStories: {
                      type: "boolean",
                    },
                    sendReadReceipts: {
                      type: "boolean",
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    defaultTo: {
                      type: "string",
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    mediaMaxMb: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    reactionNotifications: {
                      type: "string",
                      enum: ["off", "own", "all", "allowlist"],
                    },
                    reactionAllowlist: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    reactionLevel: {
                      type: "string",
                      enum: ["off", "ack", "minimal", "extensive"],
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        showOk: {
                          type: "boolean",
                        },
                        showAlerts: {
                          type: "boolean",
                        },
                        useIndicator: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    responsePrefix: {
                      type: "string",
                    },
                  },
                  required: ["dmPolicy", "groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["dmPolicy", "groupPolicy"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "Signal",
              help: "Signal channel provider configuration including account identity and DM policy behavior. Keep account mapping explicit so routing remains stable across multi-device setups.",
            },
            dmPolicy: {
              label: "Signal DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.signal.allowFrom=["*"].',
            },
            configWrites: {
              label: "Signal Config Writes",
              help: "Allow Signal to write config in response to channel events/commands (default: true).",
            },
            account: {
              label: "Signal Account",
              help: "Signal account identifier (phone/number handle) used to bind this channel config to a specific Signal identity. Keep this aligned with your linked device/session state.",
            },
          },
          label: "Signal",
          description: 'signal-cli linked device; more setup (David Reagans: "Hop on Discord.").',
        },
      },
    },
  },
  {
    dirName: "slack",
    idHint: "slack",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "channel-config-api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/slack",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Slack channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "slack",
        label: "Slack",
        selectionLabel: "Slack (Socket Mode)",
        detailLabel: "Slack Bot",
        docsPath: "/channels/slack",
        docsLabel: "slack",
        blurb: "supported (Socket Mode).",
        systemImage: "number",
        markdownCapable: true,
      },
    },
    manifest: {
      id: "slack",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["slack"],
      channelConfigs: {
        slack: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              mode: {
                default: "socket",
                type: "string",
                enum: ["socket", "http"],
              },
              signingSecret: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              webhookPath: {
                default: "/slack/events",
                type: "string",
              },
              capabilities: {
                anyOf: [
                  {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  {
                    type: "object",
                    properties: {
                      interactiveReplies: {
                        type: "boolean",
                      },
                    },
                    additionalProperties: false,
                  },
                ],
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              enabled: {
                type: "boolean",
              },
              commands: {
                type: "object",
                properties: {
                  native: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                  nativeSkills: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              configWrites: {
                type: "boolean",
              },
              botToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              appToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              userToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              userTokenReadOnly: {
                default: true,
                type: "boolean",
              },
              allowBots: {
                type: "boolean",
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              requireMention: {
                type: "boolean",
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              streaming: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "string",
                    enum: ["off", "partial", "block", "progress"],
                  },
                ],
              },
              nativeStreaming: {
                type: "boolean",
              },
              streamMode: {
                type: "string",
                enum: ["replace", "status_final", "append"],
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              reactionNotifications: {
                type: "string",
                enum: ["off", "own", "all", "allowlist"],
              },
              reactionAllowlist: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              replyToMode: {
                anyOf: [
                  {
                    type: "string",
                    const: "off",
                  },
                  {
                    type: "string",
                    const: "first",
                  },
                  {
                    type: "string",
                    const: "all",
                  },
                ],
              },
              replyToModeByChatType: {
                type: "object",
                properties: {
                  direct: {
                    anyOf: [
                      {
                        type: "string",
                        const: "off",
                      },
                      {
                        type: "string",
                        const: "first",
                      },
                      {
                        type: "string",
                        const: "all",
                      },
                    ],
                  },
                  group: {
                    anyOf: [
                      {
                        type: "string",
                        const: "off",
                      },
                      {
                        type: "string",
                        const: "first",
                      },
                      {
                        type: "string",
                        const: "all",
                      },
                    ],
                  },
                  channel: {
                    anyOf: [
                      {
                        type: "string",
                        const: "off",
                      },
                      {
                        type: "string",
                        const: "first",
                      },
                      {
                        type: "string",
                        const: "all",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              thread: {
                type: "object",
                properties: {
                  historyScope: {
                    type: "string",
                    enum: ["thread", "channel"],
                  },
                  inheritParent: {
                    type: "boolean",
                  },
                  initialHistoryLimit: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                  messages: {
                    type: "boolean",
                  },
                  pins: {
                    type: "boolean",
                  },
                  search: {
                    type: "boolean",
                  },
                  permissions: {
                    type: "boolean",
                  },
                  memberInfo: {
                    type: "boolean",
                  },
                  channelInfo: {
                    type: "boolean",
                  },
                  emojiList: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              slashCommand: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  name: {
                    type: "string",
                  },
                  sessionPrefix: {
                    type: "string",
                  },
                  ephemeral: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              defaultTo: {
                type: "string",
              },
              dm: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  policy: {
                    type: "string",
                    enum: ["pairing", "allowlist", "open", "disabled"],
                  },
                  allowFrom: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                  groupEnabled: {
                    type: "boolean",
                  },
                  groupChannels: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                  replyToMode: {
                    anyOf: [
                      {
                        type: "string",
                        const: "off",
                      },
                      {
                        type: "string",
                        const: "first",
                      },
                      {
                        type: "string",
                        const: "all",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              channels: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    allow: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    allowBots: {
                      type: "boolean",
                    },
                    users: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              responsePrefix: {
                type: "string",
              },
              ackReaction: {
                type: "string",
              },
              typingReaction: {
                type: "string",
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    mode: {
                      type: "string",
                      enum: ["socket", "http"],
                    },
                    signingSecret: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    webhookPath: {
                      type: "string",
                    },
                    capabilities: {
                      anyOf: [
                        {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        {
                          type: "object",
                          properties: {
                            interactiveReplies: {
                              type: "boolean",
                            },
                          },
                          additionalProperties: false,
                        },
                      ],
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    enabled: {
                      type: "boolean",
                    },
                    commands: {
                      type: "object",
                      properties: {
                        native: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                        nativeSkills: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    botToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    appToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    userToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    userTokenReadOnly: {
                      default: true,
                      type: "boolean",
                    },
                    allowBots: {
                      type: "boolean",
                    },
                    dangerouslyAllowNameMatching: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    groupPolicy: {
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    streaming: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "string",
                          enum: ["off", "partial", "block", "progress"],
                        },
                      ],
                    },
                    nativeStreaming: {
                      type: "boolean",
                    },
                    streamMode: {
                      type: "string",
                      enum: ["replace", "status_final", "append"],
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                    reactionNotifications: {
                      type: "string",
                      enum: ["off", "own", "all", "allowlist"],
                    },
                    reactionAllowlist: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    replyToMode: {
                      anyOf: [
                        {
                          type: "string",
                          const: "off",
                        },
                        {
                          type: "string",
                          const: "first",
                        },
                        {
                          type: "string",
                          const: "all",
                        },
                      ],
                    },
                    replyToModeByChatType: {
                      type: "object",
                      properties: {
                        direct: {
                          anyOf: [
                            {
                              type: "string",
                              const: "off",
                            },
                            {
                              type: "string",
                              const: "first",
                            },
                            {
                              type: "string",
                              const: "all",
                            },
                          ],
                        },
                        group: {
                          anyOf: [
                            {
                              type: "string",
                              const: "off",
                            },
                            {
                              type: "string",
                              const: "first",
                            },
                            {
                              type: "string",
                              const: "all",
                            },
                          ],
                        },
                        channel: {
                          anyOf: [
                            {
                              type: "string",
                              const: "off",
                            },
                            {
                              type: "string",
                              const: "first",
                            },
                            {
                              type: "string",
                              const: "all",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    thread: {
                      type: "object",
                      properties: {
                        historyScope: {
                          type: "string",
                          enum: ["thread", "channel"],
                        },
                        inheritParent: {
                          type: "boolean",
                        },
                        initialHistoryLimit: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                        messages: {
                          type: "boolean",
                        },
                        pins: {
                          type: "boolean",
                        },
                        search: {
                          type: "boolean",
                        },
                        permissions: {
                          type: "boolean",
                        },
                        memberInfo: {
                          type: "boolean",
                        },
                        channelInfo: {
                          type: "boolean",
                        },
                        emojiList: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    slashCommand: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        name: {
                          type: "string",
                        },
                        sessionPrefix: {
                          type: "string",
                        },
                        ephemeral: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    dmPolicy: {
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    defaultTo: {
                      type: "string",
                    },
                    dm: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        policy: {
                          type: "string",
                          enum: ["pairing", "allowlist", "open", "disabled"],
                        },
                        allowFrom: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                        groupEnabled: {
                          type: "boolean",
                        },
                        groupChannels: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                        replyToMode: {
                          anyOf: [
                            {
                              type: "string",
                              const: "off",
                            },
                            {
                              type: "string",
                              const: "first",
                            },
                            {
                              type: "string",
                              const: "all",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    channels: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          enabled: {
                            type: "boolean",
                          },
                          allow: {
                            type: "boolean",
                          },
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          allowBots: {
                            type: "boolean",
                          },
                          users: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        showOk: {
                          type: "boolean",
                        },
                        showAlerts: {
                          type: "boolean",
                        },
                        useIndicator: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    ackReaction: {
                      type: "string",
                    },
                    typingReaction: {
                      type: "string",
                    },
                  },
                  required: ["userTokenReadOnly"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["mode", "webhookPath", "userTokenReadOnly", "groupPolicy"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "Slack",
              help: "Slack channel provider configuration for bot/app tokens, streaming behavior, and DM policy controls. Keep token handling and thread behavior explicit to avoid noisy workspace interactions.",
            },
            "dm.policy": {
              label: "Slack DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.slack.allowFrom=["*"] (legacy: channels.slack.dm.allowFrom).',
            },
            dmPolicy: {
              label: "Slack DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.slack.allowFrom=["*"].',
            },
            configWrites: {
              label: "Slack Config Writes",
              help: "Allow Slack to write config in response to channel events/commands (default: true).",
            },
            "commands.native": {
              label: "Slack Native Commands",
              help: 'Override native commands for Slack (bool or "auto").',
            },
            "commands.nativeSkills": {
              label: "Slack Native Skill Commands",
              help: 'Override native skill commands for Slack (bool or "auto").',
            },
            allowBots: {
              label: "Slack Allow Bot Messages",
              help: "Allow bot-authored messages to trigger Slack replies (default: false).",
            },
            botToken: {
              label: "Slack Bot Token",
              help: "Slack bot token used for standard chat actions in the configured workspace. Keep this credential scoped and rotate if workspace app permissions change.",
            },
            appToken: {
              label: "Slack App Token",
              help: "Slack app-level token used for Socket Mode connections and event transport when enabled. Use least-privilege app scopes and store this token as a secret.",
            },
            userToken: {
              label: "Slack User Token",
              help: "Optional Slack user token for workflows requiring user-context API access beyond bot permissions. Use sparingly and audit scopes because this token can carry broader authority.",
            },
            userTokenReadOnly: {
              label: "Slack User Token Read Only",
              help: "When true, treat configured Slack user token usage as read-only helper behavior where possible. Keep enabled if you only need supplemental reads without user-context writes.",
            },
            "capabilities.interactiveReplies": {
              label: "Slack Interactive Replies",
              help: "Enable agent-authored Slack interactive reply directives (`[[slack_buttons: ...]]`, `[[slack_select: ...]]`). Default: false.",
            },
            streaming: {
              label: "Slack Streaming Mode",
              help: 'Unified Slack stream preview mode: "off" | "partial" | "block" | "progress". Legacy boolean/streamMode keys are auto-mapped.',
            },
            nativeStreaming: {
              label: "Slack Native Streaming",
              help: "Enable native Slack text streaming (chat.startStream/chat.appendStream/chat.stopStream) when channels.slack.streaming is partial (default: true).",
            },
            streamMode: {
              label: "Slack Stream Mode (Legacy)",
              help: "Legacy Slack preview mode alias (replace | status_final | append); auto-migrated to channels.slack.streaming.",
            },
            "thread.historyScope": {
              label: "Slack Thread History Scope",
              help: 'Scope for Slack thread history context ("thread" isolates per thread; "channel" reuses channel history).',
            },
            "thread.inheritParent": {
              label: "Slack Thread Parent Inheritance",
              help: "If true, Slack thread sessions inherit the parent channel transcript (default: false).",
            },
            "thread.initialHistoryLimit": {
              label: "Slack Thread Initial History Limit",
              help: "Maximum number of existing Slack thread messages to fetch when starting a new thread session (default: 20, set to 0 to disable).",
            },
          },
          label: "Slack",
          description: "supported (Socket Mode).",
        },
      },
    },
  },
  {
    dirName: "synology-chat",
    idHint: "synology-chat",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["setup-api.js"],
    packageName: "@openclaw/synology-chat",
    packageVersion: "2026.3.28",
    packageDescription: "Synology Chat channel plugin for OpenClaw",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "synology-chat",
        label: "Synology Chat",
        selectionLabel: "Synology Chat (Webhook)",
        docsPath: "/channels/synology-chat",
        docsLabel: "synology-chat",
        blurb: "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.",
        order: 90,
      },
      install: {
        npmSpec: "@openclaw/synology-chat",
        localPath: "extensions/synology-chat",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "synology-chat",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["synology-chat"],
      channelConfigs: {
        "synology-chat": {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              dangerouslyAllowInheritedWebhookPath: {
                type: "boolean",
              },
            },
            additionalProperties: {},
          },
          label: "Synology Chat",
          description: "Connect your Synology NAS Chat to OpenClaw with full agent capabilities.",
        },
      },
    },
  },
  {
    dirName: "synthetic",
    idHint: "synthetic",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/synthetic-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Synthetic provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "synthetic",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["synthetic"],
      providerAuthEnvVars: {
        synthetic: ["SYNTHETIC_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "synthetic",
          method: "api-key",
          choiceId: "synthetic-api-key",
          choiceLabel: "Synthetic API key",
          groupId: "synthetic",
          groupLabel: "Synthetic",
          groupHint: "Anthropic-compatible (multi-model)",
          optionKey: "syntheticApiKey",
          cliFlag: "--synthetic-api-key",
          cliOption: "--synthetic-api-key <key>",
          cliDescription: "Synthetic API key",
        },
      ],
    },
  },
  {
    dirName: "tavily",
    idHint: "tavily",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["web-search-provider.js"],
    packageName: "@openclaw/tavily-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Tavily plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "tavily",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              baseUrl: {
                type: "string",
              },
            },
          },
        },
      },
      providerAuthEnvVars: {
        tavily: ["TAVILY_API_KEY"],
      },
      skills: ["./skills"],
      uiHints: {
        "webSearch.apiKey": {
          label: "Tavily API Key",
          help: "Tavily API key for web search and extraction (fallback: TAVILY_API_KEY env var).",
          sensitive: true,
          placeholder: "tvly-...",
        },
        "webSearch.baseUrl": {
          label: "Tavily Base URL",
          help: "Tavily API base URL override.",
        },
      },
      contracts: {
        webSearchProviders: ["tavily"],
        tools: ["tavily_search", "tavily_extract"],
      },
    },
  },
  {
    dirName: "telegram",
    idHint: "telegram",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: [
      "allow-from.js",
      "api.js",
      "channel-config-api.js",
      "runtime-api.js",
      "update-offset-runtime-api.js",
    ],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/telegram",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Telegram channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "telegram",
        label: "Telegram",
        selectionLabel: "Telegram (Bot API)",
        detailLabel: "Telegram Bot",
        docsPath: "/channels/telegram",
        docsLabel: "telegram",
        blurb: "simplest way to get started — register a bot with @BotFather and get going.",
        systemImage: "paperplane",
        selectionDocsPrefix: "",
        selectionDocsOmitLabel: true,
        selectionExtras: ["https://openclaw.ai"],
        markdownCapable: true,
      },
    },
    manifest: {
      id: "telegram",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["telegram"],
      channelConfigs: {
        telegram: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              capabilities: {
                anyOf: [
                  {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  {
                    type: "object",
                    properties: {
                      inlineButtons: {
                        type: "string",
                        enum: ["off", "dm", "group", "all", "allowlist"],
                      },
                    },
                    additionalProperties: false,
                  },
                ],
              },
              execApprovals: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  approvers: {
                    type: "array",
                    items: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                  },
                  agentFilter: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  sessionFilter: {
                    type: "array",
                    items: {
                      type: "string",
                    },
                  },
                  target: {
                    type: "string",
                    enum: ["dm", "channel", "both"],
                  },
                },
                additionalProperties: false,
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              enabled: {
                type: "boolean",
              },
              commands: {
                type: "object",
                properties: {
                  native: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                  nativeSkills: {
                    anyOf: [
                      {
                        type: "boolean",
                      },
                      {
                        type: "string",
                        const: "auto",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              customCommands: {
                type: "array",
                items: {
                  type: "object",
                  properties: {
                    command: {
                      type: "string",
                    },
                    description: {
                      type: "string",
                    },
                  },
                  required: ["command", "description"],
                  additionalProperties: false,
                },
              },
              configWrites: {
                type: "boolean",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              botToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              tokenFile: {
                type: "string",
              },
              replyToMode: {
                anyOf: [
                  {
                    type: "string",
                    const: "off",
                  },
                  {
                    type: "string",
                    const: "first",
                  },
                  {
                    type: "string",
                    const: "all",
                  },
                ],
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    disableAudioPreflight: {
                      type: "boolean",
                    },
                    groupPolicy: {
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                    topics: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          disableAudioPreflight: {
                            type: "boolean",
                          },
                          groupPolicy: {
                            type: "string",
                            enum: ["open", "disabled", "allowlist"],
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                          agentId: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                  },
                  additionalProperties: false,
                },
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              defaultTo: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    type: "number",
                  },
                ],
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              direct: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    dmPolicy: {
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    skills: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    enabled: {
                      type: "boolean",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    systemPrompt: {
                      type: "string",
                    },
                    topics: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          disableAudioPreflight: {
                            type: "boolean",
                          },
                          groupPolicy: {
                            type: "string",
                            enum: ["open", "disabled", "allowlist"],
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                          agentId: {
                            type: "string",
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    requireTopic: {
                      type: "boolean",
                    },
                    autoTopicLabel: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "object",
                          properties: {
                            enabled: {
                              type: "boolean",
                            },
                            prompt: {
                              type: "string",
                            },
                          },
                          additionalProperties: false,
                        },
                      ],
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              streaming: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "string",
                    enum: ["off", "partial", "block", "progress"],
                  },
                ],
              },
              blockStreaming: {
                type: "boolean",
              },
              draftChunk: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  breakPreference: {
                    anyOf: [
                      {
                        type: "string",
                        const: "paragraph",
                      },
                      {
                        type: "string",
                        const: "newline",
                      },
                      {
                        type: "string",
                        const: "sentence",
                      },
                    ],
                  },
                },
                additionalProperties: false,
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              streamMode: {
                type: "string",
                enum: ["off", "partial", "block"],
              },
              mediaMaxMb: {
                type: "number",
                exclusiveMinimum: 0,
              },
              timeoutSeconds: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              retry: {
                type: "object",
                properties: {
                  attempts: {
                    type: "integer",
                    minimum: 1,
                    maximum: 9007199254740991,
                  },
                  minDelayMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxDelayMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                  jitter: {
                    type: "number",
                    minimum: 0,
                    maximum: 1,
                  },
                },
                additionalProperties: false,
              },
              network: {
                type: "object",
                properties: {
                  autoSelectFamily: {
                    type: "boolean",
                  },
                  dnsResultOrder: {
                    type: "string",
                    enum: ["ipv4first", "verbatim"],
                  },
                },
                additionalProperties: false,
              },
              proxy: {
                type: "string",
              },
              webhookUrl: {
                description:
                  "Public HTTPS webhook URL registered with Telegram for inbound updates. This must be internet-reachable and requires channels.telegram.webhookSecret.",
                type: "string",
              },
              webhookSecret: {
                description:
                  "Secret token sent to Telegram during webhook registration and verified on inbound webhook requests. Telegram returns this value for verification; this is not the gateway auth token and not the bot token.",
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              webhookPath: {
                description:
                  "Local webhook route path served by the gateway listener. Defaults to /telegram-webhook.",
                type: "string",
              },
              webhookHost: {
                description:
                  "Local bind host for the webhook listener. Defaults to 127.0.0.1; keep loopback unless you intentionally expose direct ingress.",
                type: "string",
              },
              webhookPort: {
                description:
                  "Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.",
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              webhookCertPath: {
                description:
                  "Path to the self-signed certificate (PEM) to upload to Telegram during webhook registration. Required for self-signed certs (direct IP or no domain).",
                type: "string",
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                  sendMessage: {
                    type: "boolean",
                  },
                  poll: {
                    type: "boolean",
                  },
                  deleteMessage: {
                    type: "boolean",
                  },
                  editMessage: {
                    type: "boolean",
                  },
                  sticker: {
                    type: "boolean",
                  },
                  createForumTopic: {
                    type: "boolean",
                  },
                  editForumTopic: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              threadBindings: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  idleHours: {
                    type: "number",
                    minimum: 0,
                  },
                  maxAgeHours: {
                    type: "number",
                    minimum: 0,
                  },
                  spawnSubagentSessions: {
                    type: "boolean",
                  },
                  spawnAcpSessions: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              reactionNotifications: {
                type: "string",
                enum: ["off", "own", "all"],
              },
              reactionLevel: {
                type: "string",
                enum: ["off", "ack", "minimal", "extensive"],
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              linkPreview: {
                type: "boolean",
              },
              silentErrorReplies: {
                type: "boolean",
              },
              responsePrefix: {
                type: "string",
              },
              ackReaction: {
                type: "string",
              },
              apiRoot: {
                type: "string",
                format: "uri",
              },
              autoTopicLabel: {
                anyOf: [
                  {
                    type: "boolean",
                  },
                  {
                    type: "object",
                    properties: {
                      enabled: {
                        type: "boolean",
                      },
                      prompt: {
                        type: "string",
                      },
                    },
                    additionalProperties: false,
                  },
                ],
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    capabilities: {
                      anyOf: [
                        {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        {
                          type: "object",
                          properties: {
                            inlineButtons: {
                              type: "string",
                              enum: ["off", "dm", "group", "all", "allowlist"],
                            },
                          },
                          additionalProperties: false,
                        },
                      ],
                    },
                    execApprovals: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        approvers: {
                          type: "array",
                          items: {
                            anyOf: [
                              {
                                type: "string",
                              },
                              {
                                type: "number",
                              },
                            ],
                          },
                        },
                        agentFilter: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        sessionFilter: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        target: {
                          type: "string",
                          enum: ["dm", "channel", "both"],
                        },
                      },
                      additionalProperties: false,
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    enabled: {
                      type: "boolean",
                    },
                    commands: {
                      type: "object",
                      properties: {
                        native: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                        nativeSkills: {
                          anyOf: [
                            {
                              type: "boolean",
                            },
                            {
                              type: "string",
                              const: "auto",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    customCommands: {
                      type: "array",
                      items: {
                        type: "object",
                        properties: {
                          command: {
                            type: "string",
                          },
                          description: {
                            type: "string",
                          },
                        },
                        required: ["command", "description"],
                        additionalProperties: false,
                      },
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    botToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    tokenFile: {
                      type: "string",
                    },
                    replyToMode: {
                      anyOf: [
                        {
                          type: "string",
                          const: "off",
                        },
                        {
                          type: "string",
                          const: "first",
                        },
                        {
                          type: "string",
                          const: "all",
                        },
                      ],
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          disableAudioPreflight: {
                            type: "boolean",
                          },
                          groupPolicy: {
                            type: "string",
                            enum: ["open", "disabled", "allowlist"],
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                          topics: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                requireMention: {
                                  type: "boolean",
                                },
                                disableAudioPreflight: {
                                  type: "boolean",
                                },
                                groupPolicy: {
                                  type: "string",
                                  enum: ["open", "disabled", "allowlist"],
                                },
                                skills: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                enabled: {
                                  type: "boolean",
                                },
                                allowFrom: {
                                  type: "array",
                                  items: {
                                    anyOf: [
                                      {
                                        type: "string",
                                      },
                                      {
                                        type: "number",
                                      },
                                    ],
                                  },
                                },
                                systemPrompt: {
                                  type: "string",
                                },
                                agentId: {
                                  type: "string",
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    defaultTo: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          type: "number",
                        },
                      ],
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    direct: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          dmPolicy: {
                            type: "string",
                            enum: ["pairing", "allowlist", "open", "disabled"],
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          skills: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          enabled: {
                            type: "boolean",
                          },
                          allowFrom: {
                            type: "array",
                            items: {
                              anyOf: [
                                {
                                  type: "string",
                                },
                                {
                                  type: "number",
                                },
                              ],
                            },
                          },
                          systemPrompt: {
                            type: "string",
                          },
                          topics: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                requireMention: {
                                  type: "boolean",
                                },
                                disableAudioPreflight: {
                                  type: "boolean",
                                },
                                groupPolicy: {
                                  type: "string",
                                  enum: ["open", "disabled", "allowlist"],
                                },
                                skills: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                enabled: {
                                  type: "boolean",
                                },
                                allowFrom: {
                                  type: "array",
                                  items: {
                                    anyOf: [
                                      {
                                        type: "string",
                                      },
                                      {
                                        type: "number",
                                      },
                                    ],
                                  },
                                },
                                systemPrompt: {
                                  type: "string",
                                },
                                agentId: {
                                  type: "string",
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                          requireTopic: {
                            type: "boolean",
                          },
                          autoTopicLabel: {
                            anyOf: [
                              {
                                type: "boolean",
                              },
                              {
                                type: "object",
                                properties: {
                                  enabled: {
                                    type: "boolean",
                                  },
                                  prompt: {
                                    type: "string",
                                  },
                                },
                                additionalProperties: false,
                              },
                            ],
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    streaming: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "string",
                          enum: ["off", "partial", "block", "progress"],
                        },
                      ],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    draftChunk: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        breakPreference: {
                          anyOf: [
                            {
                              type: "string",
                              const: "paragraph",
                            },
                            {
                              type: "string",
                              const: "newline",
                            },
                            {
                              type: "string",
                              const: "sentence",
                            },
                          ],
                        },
                      },
                      additionalProperties: false,
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    streamMode: {
                      type: "string",
                      enum: ["off", "partial", "block"],
                    },
                    mediaMaxMb: {
                      type: "number",
                      exclusiveMinimum: 0,
                    },
                    timeoutSeconds: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    retry: {
                      type: "object",
                      properties: {
                        attempts: {
                          type: "integer",
                          minimum: 1,
                          maximum: 9007199254740991,
                        },
                        minDelayMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxDelayMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                        jitter: {
                          type: "number",
                          minimum: 0,
                          maximum: 1,
                        },
                      },
                      additionalProperties: false,
                    },
                    network: {
                      type: "object",
                      properties: {
                        autoSelectFamily: {
                          type: "boolean",
                        },
                        dnsResultOrder: {
                          type: "string",
                          enum: ["ipv4first", "verbatim"],
                        },
                      },
                      additionalProperties: false,
                    },
                    proxy: {
                      type: "string",
                    },
                    webhookUrl: {
                      description:
                        "Public HTTPS webhook URL registered with Telegram for inbound updates. This must be internet-reachable and requires channels.telegram.webhookSecret.",
                      type: "string",
                    },
                    webhookSecret: {
                      description:
                        "Secret token sent to Telegram during webhook registration and verified on inbound webhook requests. Telegram returns this value for verification; this is not the gateway auth token and not the bot token.",
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    webhookPath: {
                      description:
                        "Local webhook route path served by the gateway listener. Defaults to /telegram-webhook.",
                      type: "string",
                    },
                    webhookHost: {
                      description:
                        "Local bind host for the webhook listener. Defaults to 127.0.0.1; keep loopback unless you intentionally expose direct ingress.",
                      type: "string",
                    },
                    webhookPort: {
                      description:
                        "Local bind port for the webhook listener. Defaults to 8787; set to 0 to let the OS assign an ephemeral port.",
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    webhookCertPath: {
                      description:
                        "Path to the self-signed certificate (PEM) to upload to Telegram during webhook registration. Required for self-signed certs (direct IP or no domain).",
                      type: "string",
                    },
                    actions: {
                      type: "object",
                      properties: {
                        reactions: {
                          type: "boolean",
                        },
                        sendMessage: {
                          type: "boolean",
                        },
                        poll: {
                          type: "boolean",
                        },
                        deleteMessage: {
                          type: "boolean",
                        },
                        editMessage: {
                          type: "boolean",
                        },
                        sticker: {
                          type: "boolean",
                        },
                        createForumTopic: {
                          type: "boolean",
                        },
                        editForumTopic: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    threadBindings: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                        idleHours: {
                          type: "number",
                          minimum: 0,
                        },
                        maxAgeHours: {
                          type: "number",
                          minimum: 0,
                        },
                        spawnSubagentSessions: {
                          type: "boolean",
                        },
                        spawnAcpSessions: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    reactionNotifications: {
                      type: "string",
                      enum: ["off", "own", "all"],
                    },
                    reactionLevel: {
                      type: "string",
                      enum: ["off", "ack", "minimal", "extensive"],
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        showOk: {
                          type: "boolean",
                        },
                        showAlerts: {
                          type: "boolean",
                        },
                        useIndicator: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    linkPreview: {
                      type: "boolean",
                    },
                    silentErrorReplies: {
                      type: "boolean",
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    ackReaction: {
                      type: "string",
                    },
                    apiRoot: {
                      type: "string",
                      format: "uri",
                    },
                    autoTopicLabel: {
                      anyOf: [
                        {
                          type: "boolean",
                        },
                        {
                          type: "object",
                          properties: {
                            enabled: {
                              type: "boolean",
                            },
                            prompt: {
                              type: "string",
                            },
                          },
                          additionalProperties: false,
                        },
                      ],
                    },
                  },
                  required: ["dmPolicy", "groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["dmPolicy", "groupPolicy"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "Telegram",
              help: "Telegram channel provider configuration including auth tokens, retry behavior, and message rendering controls. Use this section to tune bot behavior for Telegram-specific API semantics.",
            },
            customCommands: {
              label: "Telegram Custom Commands",
              help: "Additional Telegram bot menu commands (merged with native; conflicts ignored).",
            },
            botToken: {
              label: "Telegram Bot Token",
              help: "Telegram bot token used to authenticate Bot API requests for this account/provider config. Use secret/env substitution and rotate tokens if exposure is suspected.",
            },
            dmPolicy: {
              label: "Telegram DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.telegram.allowFrom=["*"].',
            },
            configWrites: {
              label: "Telegram Config Writes",
              help: "Allow Telegram to write config in response to channel events/commands (default: true).",
            },
            "commands.native": {
              label: "Telegram Native Commands",
              help: 'Override native commands for Telegram (bool or "auto").',
            },
            "commands.nativeSkills": {
              label: "Telegram Native Skill Commands",
              help: 'Override native skill commands for Telegram (bool or "auto").',
            },
            streaming: {
              label: "Telegram Streaming Mode",
              help: 'Unified Telegram stream preview mode: "off" | "partial" | "block" | "progress" (default: "partial"). "progress" maps to "partial" on Telegram. Legacy boolean/streamMode keys are auto-mapped.',
            },
            "retry.attempts": {
              label: "Telegram Retry Attempts",
              help: "Max retry attempts for outbound Telegram API calls (default: 3).",
            },
            "retry.minDelayMs": {
              label: "Telegram Retry Min Delay (ms)",
              help: "Minimum retry delay in ms for Telegram outbound calls.",
            },
            "retry.maxDelayMs": {
              label: "Telegram Retry Max Delay (ms)",
              help: "Maximum retry delay cap in ms for Telegram outbound calls.",
            },
            "retry.jitter": {
              label: "Telegram Retry Jitter",
              help: "Jitter factor (0-1) applied to Telegram retry delays.",
            },
            "network.autoSelectFamily": {
              label: "Telegram autoSelectFamily",
              help: "Override Node autoSelectFamily for Telegram (true=enable, false=disable).",
            },
            timeoutSeconds: {
              label: "Telegram API Timeout (seconds)",
              help: "Max seconds before Telegram API requests are aborted (default: 500 per grammY).",
            },
            silentErrorReplies: {
              label: "Telegram Silent Error Replies",
              help: "When true, Telegram bot replies marked as errors are sent silently (no notification sound). Default: false.",
            },
            apiRoot: {
              label: "Telegram API Root URL",
              help: "Custom Telegram Bot API root URL. Use for self-hosted Bot API servers (https://github.com/tdlib/telegram-bot-api) or reverse proxies in regions where api.telegram.org is blocked.",
            },
            autoTopicLabel: {
              label: "Telegram Auto Topic Label",
              help: "Auto-rename DM forum topics on first message using LLM. Default: true. Set to false to disable, or use object form { enabled: true, prompt: '...' } for custom prompt.",
            },
            "autoTopicLabel.enabled": {
              label: "Telegram Auto Topic Label Enabled",
              help: "Whether auto topic labeling is enabled. Default: true.",
            },
            "autoTopicLabel.prompt": {
              label: "Telegram Auto Topic Label Prompt",
              help: "Custom prompt for LLM-based topic naming. The user message is appended after the prompt.",
            },
            "capabilities.inlineButtons": {
              label: "Telegram Inline Buttons",
              help: "Enable Telegram inline button components for supported command and interaction surfaces. Disable if your deployment needs plain-text-only compatibility behavior.",
            },
            execApprovals: {
              label: "Telegram Exec Approvals",
              help: "Telegram-native exec approval routing and approver authorization. Enable this only when Telegram should act as an explicit exec-approval client for the selected bot account.",
            },
            "execApprovals.enabled": {
              label: "Telegram Exec Approvals Enabled",
              help: "Enable Telegram exec approvals for this account. When false or unset, Telegram messages/buttons cannot approve exec requests.",
            },
            "execApprovals.approvers": {
              label: "Telegram Exec Approval Approvers",
              help: "Telegram user IDs allowed to approve exec requests for this bot account. Use numeric Telegram user IDs; prompts are only delivered to these approvers when target includes dm.",
            },
            "execApprovals.agentFilter": {
              label: "Telegram Exec Approval Agent Filter",
              help: 'Optional allowlist of agent IDs eligible for Telegram exec approvals, for example `["main", "ops-agent"]`. Use this to keep approval prompts scoped to the agents you actually operate from Telegram.',
            },
            "execApprovals.sessionFilter": {
              label: "Telegram Exec Approval Session Filter",
              help: "Optional session-key filters matched as substring or regex-style patterns before Telegram approval routing is used. Use narrow patterns so Telegram approvals only appear for intended sessions.",
            },
            "execApprovals.target": {
              label: "Telegram Exec Approval Target",
              help: 'Controls where Telegram approval prompts are sent: "dm" sends to approver DMs (default), "channel" sends to the originating Telegram chat/topic, and "both" sends to both. Channel delivery exposes the command text to the chat, so only use it in trusted groups/topics.',
            },
            "threadBindings.enabled": {
              label: "Telegram Thread Binding Enabled",
              help: "Enable Telegram conversation binding features (/focus, /unfocus, /agents, and /session idle|max-age). Overrides session.threadBindings.enabled when set.",
            },
            "threadBindings.idleHours": {
              label: "Telegram Thread Binding Idle Timeout (hours)",
              help: "Inactivity window in hours for Telegram bound sessions. Set 0 to disable idle auto-unfocus (default: 24). Overrides session.threadBindings.idleHours when set.",
            },
            "threadBindings.maxAgeHours": {
              label: "Telegram Thread Binding Max Age (hours)",
              help: "Optional hard max age in hours for Telegram bound sessions. Set 0 to disable hard cap (default: 0). Overrides session.threadBindings.maxAgeHours when set.",
            },
            "threadBindings.spawnSubagentSessions": {
              label: "Telegram Thread-Bound Subagent Spawn",
              help: "Allow subagent spawns with thread=true to auto-bind Telegram current conversations when supported.",
            },
            "threadBindings.spawnAcpSessions": {
              label: "Telegram Thread-Bound ACP Spawn",
              help: "Allow ACP spawns with thread=true to auto-bind Telegram current conversations when supported.",
            },
          },
          label: "Telegram",
          description:
            "simplest way to get started — register a bot with @BotFather and get going.",
        },
      },
    },
  },
  {
    dirName: "tlon",
    idHint: "tlon",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js", "setup-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/tlon",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Tlon/Urbit channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "tlon",
        label: "Tlon",
        selectionLabel: "Tlon (Urbit)",
        docsPath: "/channels/tlon",
        docsLabel: "tlon",
        blurb: "decentralized messaging on Urbit; install the plugin to enable.",
        order: 90,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/tlon",
        localPath: "extensions/tlon",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "tlon",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["tlon"],
      skills: ["node_modules/@tloncorp/tlon-skill"],
      channelConfigs: {
        tlon: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              ship: {
                type: "string",
                minLength: 1,
              },
              url: {
                type: "string",
              },
              code: {
                type: "string",
              },
              allowPrivateNetwork: {
                type: "boolean",
              },
              groupChannels: {
                type: "array",
                items: {
                  type: "string",
                  minLength: 1,
                },
              },
              dmAllowlist: {
                type: "array",
                items: {
                  type: "string",
                  minLength: 1,
                },
              },
              autoDiscoverChannels: {
                type: "boolean",
              },
              showModelSignature: {
                type: "boolean",
              },
              responsePrefix: {
                type: "string",
              },
              autoAcceptDmInvites: {
                type: "boolean",
              },
              autoAcceptGroupInvites: {
                type: "boolean",
              },
              ownerShip: {
                type: "string",
                minLength: 1,
              },
              authorization: {
                type: "object",
                properties: {
                  channelRules: {
                    type: "object",
                    propertyNames: {
                      type: "string",
                    },
                    additionalProperties: {
                      type: "object",
                      properties: {
                        mode: {
                          type: "string",
                          enum: ["restricted", "open"],
                        },
                        allowedShips: {
                          type: "array",
                          items: {
                            type: "string",
                            minLength: 1,
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                },
                additionalProperties: false,
              },
              defaultAuthorizedShips: {
                type: "array",
                items: {
                  type: "string",
                  minLength: 1,
                },
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    ship: {
                      type: "string",
                      minLength: 1,
                    },
                    url: {
                      type: "string",
                    },
                    code: {
                      type: "string",
                    },
                    allowPrivateNetwork: {
                      type: "boolean",
                    },
                    groupChannels: {
                      type: "array",
                      items: {
                        type: "string",
                        minLength: 1,
                      },
                    },
                    dmAllowlist: {
                      type: "array",
                      items: {
                        type: "string",
                        minLength: 1,
                      },
                    },
                    autoDiscoverChannels: {
                      type: "boolean",
                    },
                    showModelSignature: {
                      type: "boolean",
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    autoAcceptDmInvites: {
                      type: "boolean",
                    },
                    autoAcceptGroupInvites: {
                      type: "boolean",
                    },
                    ownerShip: {
                      type: "string",
                      minLength: 1,
                    },
                  },
                  additionalProperties: false,
                },
              },
            },
            additionalProperties: false,
          },
          label: "Tlon",
          description: "decentralized messaging on Urbit; install the plugin to enable.",
        },
      },
    },
  },
  {
    dirName: "together",
    idHint: "together",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/together-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Together provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "together",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["together"],
      providerAuthEnvVars: {
        together: ["TOGETHER_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "together",
          method: "api-key",
          choiceId: "together-api-key",
          choiceLabel: "Together AI API key",
          groupId: "together",
          groupLabel: "Together AI",
          groupHint: "API key",
          optionKey: "togetherApiKey",
          cliFlag: "--together-api-key",
          cliOption: "--together-api-key <key>",
          cliDescription: "Together AI API key",
        },
      ],
    },
  },
  {
    dirName: "twitch",
    idHint: "twitch",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/twitch",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Twitch channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      channel: {
        id: "twitch",
        label: "Twitch",
        selectionLabel: "Twitch (Chat)",
        docsPath: "/channels/twitch",
        blurb: "Twitch chat integration",
        aliases: ["twitch-chat"],
      },
      install: {
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "twitch",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["twitch"],
      channelConfigs: {
        twitch: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            anyOf: [
              {
                allOf: [
                  {
                    type: "object",
                    properties: {
                      name: {
                        type: "string",
                      },
                      enabled: {
                        type: "boolean",
                      },
                      markdown: {
                        type: "object",
                        properties: {
                          tables: {
                            type: "string",
                            enum: ["off", "bullets", "code"],
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    additionalProperties: false,
                  },
                  {
                    type: "object",
                    properties: {
                      username: {
                        type: "string",
                      },
                      accessToken: {
                        type: "string",
                      },
                      clientId: {
                        type: "string",
                      },
                      channel: {
                        type: "string",
                        minLength: 1,
                      },
                      enabled: {
                        type: "boolean",
                      },
                      allowFrom: {
                        type: "array",
                        items: {
                          type: "string",
                        },
                      },
                      allowedRoles: {
                        type: "array",
                        items: {
                          type: "string",
                          enum: ["moderator", "owner", "vip", "subscriber", "all"],
                        },
                      },
                      requireMention: {
                        type: "boolean",
                      },
                      responsePrefix: {
                        type: "string",
                      },
                      clientSecret: {
                        type: "string",
                      },
                      refreshToken: {
                        type: "string",
                      },
                      expiresIn: {
                        anyOf: [
                          {
                            type: "number",
                          },
                          {
                            type: "null",
                          },
                        ],
                      },
                      obtainmentTimestamp: {
                        type: "number",
                      },
                    },
                    required: ["username", "accessToken", "channel"],
                    additionalProperties: false,
                  },
                ],
              },
              {
                allOf: [
                  {
                    type: "object",
                    properties: {
                      name: {
                        type: "string",
                      },
                      enabled: {
                        type: "boolean",
                      },
                      markdown: {
                        type: "object",
                        properties: {
                          tables: {
                            type: "string",
                            enum: ["off", "bullets", "code"],
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    additionalProperties: false,
                  },
                  {
                    type: "object",
                    properties: {
                      accounts: {
                        type: "object",
                        propertyNames: {
                          type: "string",
                        },
                        additionalProperties: {
                          type: "object",
                          properties: {
                            username: {
                              type: "string",
                            },
                            accessToken: {
                              type: "string",
                            },
                            clientId: {
                              type: "string",
                            },
                            channel: {
                              type: "string",
                              minLength: 1,
                            },
                            enabled: {
                              type: "boolean",
                            },
                            allowFrom: {
                              type: "array",
                              items: {
                                type: "string",
                              },
                            },
                            allowedRoles: {
                              type: "array",
                              items: {
                                type: "string",
                                enum: ["moderator", "owner", "vip", "subscriber", "all"],
                              },
                            },
                            requireMention: {
                              type: "boolean",
                            },
                            responsePrefix: {
                              type: "string",
                            },
                            clientSecret: {
                              type: "string",
                            },
                            refreshToken: {
                              type: "string",
                            },
                            expiresIn: {
                              anyOf: [
                                {
                                  type: "number",
                                },
                                {
                                  type: "null",
                                },
                              ],
                            },
                            obtainmentTimestamp: {
                              type: "number",
                            },
                          },
                          required: ["username", "accessToken", "channel"],
                          additionalProperties: false,
                        },
                      },
                    },
                    required: ["accounts"],
                    additionalProperties: false,
                  },
                ],
              },
            ],
          },
          label: "Twitch",
          description: "Twitch chat integration",
        },
      },
    },
  },
  {
    dirName: "venice",
    idHint: "venice",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/venice-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Venice provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "venice",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["venice"],
      providerAuthEnvVars: {
        venice: ["VENICE_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "venice",
          method: "api-key",
          choiceId: "venice-api-key",
          choiceLabel: "Venice AI API key",
          groupId: "venice",
          groupLabel: "Venice AI",
          groupHint: "Privacy-focused (uncensored models)",
          optionKey: "veniceApiKey",
          cliFlag: "--venice-api-key",
          cliOption: "--venice-api-key <key>",
          cliDescription: "Venice API key",
        },
      ],
    },
  },
  {
    dirName: "vercel-ai-gateway",
    idHint: "vercel-ai-gateway",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/vercel-ai-gateway-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Vercel AI Gateway provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "vercel-ai-gateway",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["vercel-ai-gateway"],
      providerAuthEnvVars: {
        "vercel-ai-gateway": ["AI_GATEWAY_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "vercel-ai-gateway",
          method: "api-key",
          choiceId: "ai-gateway-api-key",
          choiceLabel: "Vercel AI Gateway API key",
          groupId: "ai-gateway",
          groupLabel: "Vercel AI Gateway",
          groupHint: "API key",
          optionKey: "aiGatewayApiKey",
          cliFlag: "--ai-gateway-api-key",
          cliOption: "--ai-gateway-api-key <key>",
          cliDescription: "Vercel AI Gateway API key",
        },
      ],
    },
  },
  {
    dirName: "vllm",
    idHint: "vllm",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "defaults.js", "models.js"],
    packageName: "@openclaw/vllm-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw vLLM provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "vllm",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["vllm"],
      providerAuthEnvVars: {
        vllm: ["VLLM_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "vllm",
          method: "custom",
          choiceId: "vllm",
          choiceLabel: "vLLM",
          choiceHint: "Local/self-hosted OpenAI-compatible server",
          groupId: "vllm",
          groupLabel: "vLLM",
          groupHint: "Local/self-hosted OpenAI-compatible",
        },
      ],
    },
  },
  {
    dirName: "voice-call",
    idHint: "voice-call",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js", "runtime-entry.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/voice-call",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw voice-call plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      install: {
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "voice-call",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          enabled: {
            type: "boolean",
          },
          provider: {
            type: "string",
            enum: ["telnyx", "twilio", "plivo", "mock"],
          },
          telnyx: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: "string",
              },
              connectionId: {
                type: "string",
              },
              publicKey: {
                type: "string",
              },
            },
          },
          twilio: {
            type: "object",
            additionalProperties: false,
            properties: {
              accountSid: {
                type: "string",
              },
              authToken: {
                type: "string",
              },
            },
          },
          plivo: {
            type: "object",
            additionalProperties: false,
            properties: {
              authId: {
                type: "string",
              },
              authToken: {
                type: "string",
              },
            },
          },
          fromNumber: {
            type: "string",
            pattern: "^\\+[1-9]\\d{1,14}$",
          },
          toNumber: {
            type: "string",
            pattern: "^\\+[1-9]\\d{1,14}$",
          },
          inboundPolicy: {
            type: "string",
            enum: ["disabled", "allowlist", "pairing", "open"],
          },
          allowFrom: {
            type: "array",
            items: {
              type: "string",
              pattern: "^\\+[1-9]\\d{1,14}$",
            },
          },
          inboundGreeting: {
            type: "string",
          },
          outbound: {
            type: "object",
            additionalProperties: false,
            properties: {
              defaultMode: {
                type: "string",
                enum: ["notify", "conversation"],
              },
              notifyHangupDelaySec: {
                type: "integer",
                minimum: 0,
              },
            },
          },
          maxDurationSeconds: {
            type: "integer",
            minimum: 1,
          },
          staleCallReaperSeconds: {
            type: "integer",
            minimum: 0,
          },
          silenceTimeoutMs: {
            type: "integer",
            minimum: 1,
          },
          transcriptTimeoutMs: {
            type: "integer",
            minimum: 1,
          },
          ringTimeoutMs: {
            type: "integer",
            minimum: 1,
          },
          maxConcurrentCalls: {
            type: "integer",
            minimum: 1,
          },
          serve: {
            type: "object",
            additionalProperties: false,
            properties: {
              port: {
                type: "integer",
                minimum: 1,
              },
              bind: {
                type: "string",
              },
              path: {
                type: "string",
              },
            },
          },
          tailscale: {
            type: "object",
            additionalProperties: false,
            properties: {
              mode: {
                type: "string",
                enum: ["off", "serve", "funnel"],
              },
              path: {
                type: "string",
              },
            },
          },
          tunnel: {
            type: "object",
            additionalProperties: false,
            properties: {
              provider: {
                type: "string",
                enum: ["none", "ngrok", "tailscale-serve", "tailscale-funnel"],
              },
              ngrokAuthToken: {
                type: "string",
              },
              ngrokDomain: {
                type: "string",
              },
              allowNgrokFreeTierLoopbackBypass: {
                type: "boolean",
              },
            },
          },
          webhookSecurity: {
            type: "object",
            additionalProperties: false,
            properties: {
              allowedHosts: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              trustForwardingHeaders: {
                type: "boolean",
              },
              trustedProxyIPs: {
                type: "array",
                items: {
                  type: "string",
                },
              },
            },
          },
          streaming: {
            type: "object",
            additionalProperties: false,
            properties: {
              enabled: {
                type: "boolean",
              },
              sttProvider: {
                type: "string",
                enum: ["openai-realtime"],
              },
              openaiApiKey: {
                type: "string",
              },
              sttModel: {
                type: "string",
              },
              silenceDurationMs: {
                type: "integer",
                minimum: 1,
              },
              vadThreshold: {
                type: "number",
                minimum: 0,
                maximum: 1,
              },
              streamPath: {
                type: "string",
              },
              preStartTimeoutMs: {
                type: "integer",
                minimum: 1,
              },
              maxPendingConnections: {
                type: "integer",
                minimum: 1,
              },
              maxPendingConnectionsPerIp: {
                type: "integer",
                minimum: 1,
              },
              maxConnections: {
                type: "integer",
                minimum: 1,
              },
            },
          },
          publicUrl: {
            type: "string",
          },
          skipSignatureVerification: {
            type: "boolean",
          },
          stt: {
            type: "object",
            additionalProperties: false,
            properties: {
              provider: {
                type: "string",
                enum: ["openai"],
              },
              model: {
                type: "string",
              },
            },
          },
          tts: {
            type: "object",
            additionalProperties: false,
            properties: {
              auto: {
                type: "string",
                enum: ["off", "always", "inbound", "tagged"],
              },
              enabled: {
                type: "boolean",
              },
              mode: {
                type: "string",
                enum: ["final", "all"],
              },
              provider: {
                type: "string",
              },
              summaryModel: {
                type: "string",
              },
              modelOverrides: {
                type: "object",
                additionalProperties: false,
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  allowText: {
                    type: "boolean",
                  },
                  allowProvider: {
                    type: "boolean",
                  },
                  allowVoice: {
                    type: "boolean",
                  },
                  allowModelId: {
                    type: "boolean",
                  },
                  allowVoiceSettings: {
                    type: "boolean",
                  },
                  allowNormalization: {
                    type: "boolean",
                  },
                  allowSeed: {
                    type: "boolean",
                  },
                },
              },
              elevenlabs: {
                type: "object",
                additionalProperties: false,
                properties: {
                  apiKey: {
                    type: "string",
                  },
                  baseUrl: {
                    type: "string",
                  },
                  voiceId: {
                    type: "string",
                  },
                  modelId: {
                    type: "string",
                  },
                  seed: {
                    type: "integer",
                    minimum: 0,
                    maximum: 4294967295,
                  },
                  applyTextNormalization: {
                    type: "string",
                    enum: ["auto", "on", "off"],
                  },
                  languageCode: {
                    type: "string",
                  },
                  voiceSettings: {
                    type: "object",
                    additionalProperties: false,
                    properties: {
                      stability: {
                        type: "number",
                        minimum: 0,
                        maximum: 1,
                      },
                      similarityBoost: {
                        type: "number",
                        minimum: 0,
                        maximum: 1,
                      },
                      style: {
                        type: "number",
                        minimum: 0,
                        maximum: 1,
                      },
                      useSpeakerBoost: {
                        type: "boolean",
                      },
                      speed: {
                        type: "number",
                        minimum: 0.5,
                        maximum: 2,
                      },
                    },
                  },
                },
              },
              openai: {
                type: "object",
                additionalProperties: false,
                properties: {
                  apiKey: {
                    type: "string",
                  },
                  baseUrl: {
                    type: "string",
                  },
                  model: {
                    type: "string",
                  },
                  voice: {
                    type: "string",
                  },
                  speed: {
                    type: "number",
                    minimum: 0.25,
                    maximum: 4,
                  },
                  instructions: {
                    type: "string",
                  },
                },
              },
              edge: {
                type: "object",
                additionalProperties: false,
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                  voice: {
                    type: "string",
                  },
                  lang: {
                    type: "string",
                  },
                  outputFormat: {
                    type: "string",
                  },
                  pitch: {
                    type: "string",
                  },
                  rate: {
                    type: "string",
                  },
                  volume: {
                    type: "string",
                  },
                  saveSubtitles: {
                    type: "boolean",
                  },
                  proxy: {
                    type: "string",
                  },
                  timeoutMs: {
                    type: "integer",
                    minimum: 1000,
                    maximum: 120000,
                  },
                },
              },
              prefsPath: {
                type: "string",
              },
              maxTextLength: {
                type: "integer",
                minimum: 1,
              },
              timeoutMs: {
                type: "integer",
                minimum: 1000,
                maximum: 120000,
              },
            },
          },
          store: {
            type: "string",
          },
          responseModel: {
            type: "string",
          },
          responseSystemPrompt: {
            type: "string",
          },
          responseTimeoutMs: {
            type: "integer",
            minimum: 1,
          },
        },
      },
      uiHints: {
        provider: {
          label: "Provider",
          help: "Use twilio, telnyx, or mock for dev/no-network.",
        },
        fromNumber: {
          label: "From Number",
          placeholder: "+15550001234",
        },
        toNumber: {
          label: "Default To Number",
          placeholder: "+15550001234",
        },
        inboundPolicy: {
          label: "Inbound Policy",
        },
        allowFrom: {
          label: "Inbound Allowlist",
        },
        inboundGreeting: {
          label: "Inbound Greeting",
          advanced: true,
        },
        "telnyx.apiKey": {
          label: "Telnyx API Key",
          sensitive: true,
        },
        "telnyx.connectionId": {
          label: "Telnyx Connection ID",
        },
        "telnyx.publicKey": {
          label: "Telnyx Public Key",
          sensitive: true,
        },
        "twilio.accountSid": {
          label: "Twilio Account SID",
        },
        "twilio.authToken": {
          label: "Twilio Auth Token",
          sensitive: true,
        },
        "outbound.defaultMode": {
          label: "Default Call Mode",
        },
        "outbound.notifyHangupDelaySec": {
          label: "Notify Hangup Delay (sec)",
          advanced: true,
        },
        "serve.port": {
          label: "Webhook Port",
        },
        "serve.bind": {
          label: "Webhook Bind",
        },
        "serve.path": {
          label: "Webhook Path",
        },
        "tailscale.mode": {
          label: "Tailscale Mode",
          advanced: true,
        },
        "tailscale.path": {
          label: "Tailscale Path",
          advanced: true,
        },
        "tunnel.provider": {
          label: "Tunnel Provider",
          advanced: true,
        },
        "tunnel.ngrokAuthToken": {
          label: "ngrok Auth Token",
          sensitive: true,
          advanced: true,
        },
        "tunnel.ngrokDomain": {
          label: "ngrok Domain",
          advanced: true,
        },
        "tunnel.allowNgrokFreeTierLoopbackBypass": {
          label: "Allow ngrok Free Tier (Loopback Bypass)",
          advanced: true,
        },
        "streaming.enabled": {
          label: "Enable Streaming",
          advanced: true,
        },
        "streaming.openaiApiKey": {
          label: "OpenAI Realtime API Key",
          sensitive: true,
          advanced: true,
        },
        "streaming.sttModel": {
          label: "Realtime STT Model",
          advanced: true,
        },
        "streaming.streamPath": {
          label: "Media Stream Path",
          advanced: true,
        },
        "tts.provider": {
          label: "TTS Provider Override",
          help: "Deep-merges with messages.tts (Microsoft is ignored for calls).",
          advanced: true,
        },
        "tts.openai.model": {
          label: "OpenAI TTS Model",
          advanced: true,
        },
        "tts.openai.voice": {
          label: "OpenAI TTS Voice",
          advanced: true,
        },
        "tts.openai.apiKey": {
          label: "OpenAI API Key",
          sensitive: true,
          advanced: true,
        },
        "tts.elevenlabs.modelId": {
          label: "ElevenLabs Model ID",
          advanced: true,
        },
        "tts.elevenlabs.voiceId": {
          label: "ElevenLabs Voice ID",
          advanced: true,
        },
        "tts.elevenlabs.apiKey": {
          label: "ElevenLabs API Key",
          sensitive: true,
          advanced: true,
        },
        "tts.elevenlabs.baseUrl": {
          label: "ElevenLabs Base URL",
          advanced: true,
        },
        publicUrl: {
          label: "Public Webhook URL",
          advanced: true,
        },
        skipSignatureVerification: {
          label: "Skip Signature Verification",
          advanced: true,
        },
        store: {
          label: "Call Log Store Path",
          advanced: true,
        },
        responseModel: {
          label: "Response Model",
          advanced: true,
        },
        responseSystemPrompt: {
          label: "Response System Prompt",
          advanced: true,
        },
        responseTimeoutMs: {
          label: "Response Timeout (ms)",
          advanced: true,
        },
      },
    },
  },
  {
    dirName: "volcengine",
    idHint: "volcengine",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "models.js", "provider-catalog.js"],
    packageName: "@openclaw/volcengine-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Volcengine provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "volcengine",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["volcengine", "volcengine-plan"],
      providerAuthEnvVars: {
        volcengine: ["VOLCANO_ENGINE_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "volcengine",
          method: "api-key",
          choiceId: "volcengine-api-key",
          choiceLabel: "Volcano Engine API key",
          groupId: "volcengine",
          groupLabel: "Volcano Engine",
          groupHint: "API key",
          optionKey: "volcengineApiKey",
          cliFlag: "--volcengine-api-key",
          cliOption: "--volcengine-api-key <key>",
          cliDescription: "Volcano Engine API key",
        },
      ],
    },
  },
  {
    dirName: "whatsapp",
    idHint: "whatsapp",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: [
      "action-runtime-api.js",
      "action-runtime.runtime.js",
      "api.js",
      "auth-presence.js",
      "channel-config-api.js",
      "light-runtime-api.js",
      "login-qr-api.js",
      "runtime-api.js",
    ],
    runtimeSidecarArtifacts: ["light-runtime-api.js", "runtime-api.js"],
    packageName: "@openclaw/whatsapp",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw WhatsApp channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "whatsapp",
        label: "WhatsApp",
        selectionLabel: "WhatsApp (QR link)",
        detailLabel: "WhatsApp Web",
        docsPath: "/channels/whatsapp",
        docsLabel: "whatsapp",
        blurb: "works with your own number; recommend a separate phone + eSIM.",
        systemImage: "message",
      },
      install: {
        npmSpec: "@openclaw/whatsapp",
        localPath: "extensions/whatsapp",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "whatsapp",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["whatsapp"],
      channelConfigs: {
        whatsapp: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              enabled: {
                type: "boolean",
              },
              capabilities: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              configWrites: {
                type: "boolean",
              },
              sendReadReceipts: {
                type: "boolean",
              },
              messagePrefix: {
                type: "string",
              },
              responsePrefix: {
                type: "string",
              },
              dmPolicy: {
                default: "pairing",
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              selfChatMode: {
                type: "boolean",
              },
              allowFrom: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              defaultTo: {
                type: "string",
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  type: "string",
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dmHistoryLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              dms: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  additionalProperties: false,
                },
              },
              textChunkLimit: {
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              chunkMode: {
                type: "string",
                enum: ["length", "newline"],
              },
              blockStreaming: {
                type: "boolean",
              },
              blockStreamingCoalesce: {
                type: "object",
                properties: {
                  minChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  maxChars: {
                    type: "integer",
                    exclusiveMinimum: 0,
                    maximum: 9007199254740991,
                  },
                  idleMs: {
                    type: "integer",
                    minimum: 0,
                    maximum: 9007199254740991,
                  },
                },
                additionalProperties: false,
              },
              groups: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                    toolsBySender: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          alsoAllow: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                          deny: {
                            type: "array",
                            items: {
                              type: "string",
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                  },
                  additionalProperties: false,
                },
              },
              ackReaction: {
                type: "object",
                properties: {
                  emoji: {
                    type: "string",
                  },
                  direct: {
                    default: true,
                    type: "boolean",
                  },
                  group: {
                    default: "mentions",
                    type: "string",
                    enum: ["always", "mentions", "never"],
                  },
                },
                required: ["direct", "group"],
                additionalProperties: false,
              },
              debounceMs: {
                default: 0,
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              heartbeat: {
                type: "object",
                properties: {
                  showOk: {
                    type: "boolean",
                  },
                  showAlerts: {
                    type: "boolean",
                  },
                  useIndicator: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              healthMonitor: {
                type: "object",
                properties: {
                  enabled: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
              accounts: {
                type: "object",
                propertyNames: {
                  type: "string",
                },
                additionalProperties: {
                  type: "object",
                  properties: {
                    enabled: {
                      type: "boolean",
                    },
                    capabilities: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    configWrites: {
                      type: "boolean",
                    },
                    sendReadReceipts: {
                      type: "boolean",
                    },
                    messagePrefix: {
                      type: "string",
                    },
                    responsePrefix: {
                      type: "string",
                    },
                    dmPolicy: {
                      default: "pairing",
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    selfChatMode: {
                      type: "boolean",
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    defaultTo: {
                      type: "string",
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        type: "string",
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dmHistoryLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    dms: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          historyLimit: {
                            type: "integer",
                            minimum: 0,
                            maximum: 9007199254740991,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    textChunkLimit: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                    chunkMode: {
                      type: "string",
                      enum: ["length", "newline"],
                    },
                    blockStreaming: {
                      type: "boolean",
                    },
                    blockStreamingCoalesce: {
                      type: "object",
                      properties: {
                        minChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        maxChars: {
                          type: "integer",
                          exclusiveMinimum: 0,
                          maximum: 9007199254740991,
                        },
                        idleMs: {
                          type: "integer",
                          minimum: 0,
                          maximum: 9007199254740991,
                        },
                      },
                      additionalProperties: false,
                    },
                    groups: {
                      type: "object",
                      propertyNames: {
                        type: "string",
                      },
                      additionalProperties: {
                        type: "object",
                        properties: {
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                          toolsBySender: {
                            type: "object",
                            propertyNames: {
                              type: "string",
                            },
                            additionalProperties: {
                              type: "object",
                              properties: {
                                allow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                alsoAllow: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                                deny: {
                                  type: "array",
                                  items: {
                                    type: "string",
                                  },
                                },
                              },
                              additionalProperties: false,
                            },
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    ackReaction: {
                      type: "object",
                      properties: {
                        emoji: {
                          type: "string",
                        },
                        direct: {
                          default: true,
                          type: "boolean",
                        },
                        group: {
                          default: "mentions",
                          type: "string",
                          enum: ["always", "mentions", "never"],
                        },
                      },
                      required: ["direct", "group"],
                      additionalProperties: false,
                    },
                    debounceMs: {
                      default: 0,
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    heartbeat: {
                      type: "object",
                      properties: {
                        showOk: {
                          type: "boolean",
                        },
                        showAlerts: {
                          type: "boolean",
                        },
                        useIndicator: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    healthMonitor: {
                      type: "object",
                      properties: {
                        enabled: {
                          type: "boolean",
                        },
                      },
                      additionalProperties: false,
                    },
                    name: {
                      type: "string",
                    },
                    authDir: {
                      type: "string",
                    },
                    mediaMaxMb: {
                      type: "integer",
                      exclusiveMinimum: 0,
                      maximum: 9007199254740991,
                    },
                  },
                  required: ["dmPolicy", "groupPolicy", "debounceMs"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
              mediaMaxMb: {
                default: 50,
                type: "integer",
                exclusiveMinimum: 0,
                maximum: 9007199254740991,
              },
              actions: {
                type: "object",
                properties: {
                  reactions: {
                    type: "boolean",
                  },
                  sendMessage: {
                    type: "boolean",
                  },
                  polls: {
                    type: "boolean",
                  },
                },
                additionalProperties: false,
              },
            },
            required: ["dmPolicy", "groupPolicy", "debounceMs", "mediaMaxMb"],
            additionalProperties: false,
          },
          uiHints: {
            "": {
              label: "WhatsApp",
              help: "WhatsApp channel provider configuration for access policy and message batching behavior. Use this section to tune responsiveness and direct-message routing safety for WhatsApp chats.",
            },
            dmPolicy: {
              label: "WhatsApp DM Policy",
              help: 'Direct message access control ("pairing" recommended). "open" requires channels.whatsapp.allowFrom=["*"].',
            },
            selfChatMode: {
              label: "WhatsApp Self-Phone Mode",
              help: "Same-phone setup (bot uses your personal WhatsApp number).",
            },
            debounceMs: {
              label: "WhatsApp Message Debounce (ms)",
              help: "Debounce window (ms) for batching rapid consecutive messages from the same sender (0 to disable).",
            },
            configWrites: {
              label: "WhatsApp Config Writes",
              help: "Allow WhatsApp to write config in response to channel events/commands (default: true).",
            },
          },
          label: "WhatsApp",
          description: "works with your own number; recommend a separate phone + eSIM.",
        },
      },
    },
  },
  {
    dirName: "xai",
    idHint: "xai",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "code-execution.js",
      "model-definitions.js",
      "model-id.js",
      "onboard.js",
      "provider-catalog.js",
      "provider-models.js",
      "stream.js",
      "web-search.js",
      "x-search.js",
    ],
    packageName: "@openclaw/xai-plugin",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw xAI plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "xai",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {
          webSearch: {
            type: "object",
            additionalProperties: false,
            properties: {
              apiKey: {
                type: ["string", "object"],
              },
              model: {
                type: "string",
              },
              inlineCitations: {
                type: "boolean",
              },
            },
          },
          codeExecution: {
            type: "object",
            additionalProperties: false,
            properties: {
              enabled: {
                type: "boolean",
              },
              model: {
                type: "string",
              },
              maxTurns: {
                type: "number",
              },
              timeoutSeconds: {
                type: "number",
              },
            },
          },
        },
      },
      enabledByDefault: true,
      providers: ["xai"],
      providerAuthEnvVars: {
        xai: ["XAI_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "xai",
          method: "api-key",
          choiceId: "xai-api-key",
          choiceLabel: "xAI API key",
          groupId: "xai",
          groupLabel: "xAI (Grok)",
          groupHint: "API key",
          optionKey: "xaiApiKey",
          cliFlag: "--xai-api-key",
          cliOption: "--xai-api-key <key>",
          cliDescription: "xAI API key",
        },
      ],
      uiHints: {
        "webSearch.apiKey": {
          label: "Grok Search API Key",
          help: "xAI API key for Grok web search (fallback: XAI_API_KEY env var).",
          sensitive: true,
        },
        "webSearch.model": {
          label: "Grok Search Model",
          help: "Grok model override for web search.",
        },
        "webSearch.inlineCitations": {
          label: "Inline Citations",
          help: "Include inline markdown citations in Grok responses.",
        },
        "codeExecution.enabled": {
          label: "Enable Code Execution",
          help: "Enable the code_execution tool for remote xAI sandbox analysis.",
        },
        "codeExecution.model": {
          label: "Code Execution Model",
          help: "xAI model override for code_execution.",
        },
        "codeExecution.maxTurns": {
          label: "Code Execution Max Turns",
          help: "Optional max internal tool turns xAI may use for code_execution.",
        },
        "codeExecution.timeoutSeconds": {
          label: "Code Execution Timeout",
          help: "Timeout in seconds for code_execution requests.",
        },
      },
      contracts: {
        webSearchProviders: ["grok"],
        tools: ["code_execution", "x_search"],
      },
    },
  },
  {
    dirName: "xiaomi",
    idHint: "xiaomi",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: ["api.js", "onboard.js", "provider-catalog.js"],
    packageName: "@openclaw/xiaomi-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Xiaomi provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "xiaomi",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["xiaomi"],
      providerAuthEnvVars: {
        xiaomi: ["XIAOMI_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "xiaomi",
          method: "api-key",
          choiceId: "xiaomi-api-key",
          choiceLabel: "Xiaomi API key",
          groupId: "xiaomi",
          groupLabel: "Xiaomi",
          groupHint: "API key",
          optionKey: "xiaomiApiKey",
          cliFlag: "--xiaomi-api-key",
          cliOption: "--xiaomi-api-key <key>",
          cliDescription: "Xiaomi API key",
        },
      ],
    },
  },
  {
    dirName: "zai",
    idHint: "zai",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    publicSurfaceArtifacts: [
      "api.js",
      "detect.js",
      "media-understanding-provider.js",
      "model-definitions.js",
      "onboard.js",
      "runtime-api.js",
    ],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/zai-provider",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Z.AI provider plugin",
    packageManifest: {
      extensions: ["./index.ts"],
    },
    manifest: {
      id: "zai",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      enabledByDefault: true,
      providers: ["zai"],
      providerAuthEnvVars: {
        zai: ["ZAI_API_KEY", "Z_AI_API_KEY"],
      },
      providerAuthChoices: [
        {
          provider: "zai",
          method: "api-key",
          choiceId: "zai-api-key",
          choiceLabel: "Z.AI API key",
          groupId: "zai",
          groupLabel: "Z.AI",
          groupHint: "GLM Coding Plan / Global / CN",
          optionKey: "zaiApiKey",
          cliFlag: "--zai-api-key",
          cliOption: "--zai-api-key <key>",
          cliDescription: "Z.AI API key",
        },
        {
          provider: "zai",
          method: "coding-global",
          choiceId: "zai-coding-global",
          choiceLabel: "Coding-Plan-Global",
          choiceHint: "GLM Coding Plan Global (api.z.ai)",
          groupId: "zai",
          groupLabel: "Z.AI",
          groupHint: "GLM Coding Plan / Global / CN",
          optionKey: "zaiApiKey",
          cliFlag: "--zai-api-key",
          cliOption: "--zai-api-key <key>",
          cliDescription: "Z.AI API key",
        },
        {
          provider: "zai",
          method: "coding-cn",
          choiceId: "zai-coding-cn",
          choiceLabel: "Coding-Plan-CN",
          choiceHint: "GLM Coding Plan CN (open.bigmodel.cn)",
          groupId: "zai",
          groupLabel: "Z.AI",
          groupHint: "GLM Coding Plan / Global / CN",
          optionKey: "zaiApiKey",
          cliFlag: "--zai-api-key",
          cliOption: "--zai-api-key <key>",
          cliDescription: "Z.AI API key",
        },
        {
          provider: "zai",
          method: "global",
          choiceId: "zai-global",
          choiceLabel: "Global",
          choiceHint: "Z.AI Global (api.z.ai)",
          groupId: "zai",
          groupLabel: "Z.AI",
          groupHint: "GLM Coding Plan / Global / CN",
          optionKey: "zaiApiKey",
          cliFlag: "--zai-api-key",
          cliOption: "--zai-api-key <key>",
          cliDescription: "Z.AI API key",
        },
        {
          provider: "zai",
          method: "cn",
          choiceId: "zai-cn",
          choiceLabel: "CN",
          choiceHint: "Z.AI CN (open.bigmodel.cn)",
          groupId: "zai",
          groupLabel: "Z.AI",
          groupHint: "GLM Coding Plan / Global / CN",
          optionKey: "zaiApiKey",
          cliFlag: "--zai-api-key",
          cliOption: "--zai-api-key <key>",
          cliDescription: "Z.AI API key",
        },
      ],
      contracts: {
        mediaUnderstandingProviders: ["zai"],
      },
    },
  },
  {
    dirName: "zalo",
    idHint: "zalo",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/zalo",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Zalo channel plugin",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "zalo",
        label: "Zalo",
        selectionLabel: "Zalo (Bot API)",
        docsPath: "/channels/zalo",
        docsLabel: "zalo",
        blurb: "Vietnam-focused messaging platform with Bot API.",
        aliases: ["zl"],
        order: 80,
        quickstartAllowFrom: true,
      },
      install: {
        npmSpec: "@openclaw/zalo",
        localPath: "extensions/zalo",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "zalo",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["zalo"],
      channelConfigs: {
        zalo: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              botToken: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              tokenFile: {
                type: "string",
              },
              webhookUrl: {
                type: "string",
              },
              webhookSecret: {
                anyOf: [
                  {
                    type: "string",
                  },
                  {
                    oneOf: [
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "env",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                            pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "file",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                      {
                        type: "object",
                        properties: {
                          source: {
                            type: "string",
                            const: "exec",
                          },
                          provider: {
                            type: "string",
                            pattern: "^[a-z][a-z0-9_-]{0,63}$",
                          },
                          id: {
                            type: "string",
                          },
                        },
                        required: ["source", "provider", "id"],
                        additionalProperties: false,
                      },
                    ],
                  },
                ],
              },
              webhookPath: {
                type: "string",
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              mediaMaxMb: {
                type: "number",
              },
              proxy: {
                type: "string",
              },
              responsePrefix: {
                type: "string",
              },
              accounts: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    botToken: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    tokenFile: {
                      type: "string",
                    },
                    webhookUrl: {
                      type: "string",
                    },
                    webhookSecret: {
                      anyOf: [
                        {
                          type: "string",
                        },
                        {
                          oneOf: [
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "env",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                  pattern: "^[A-Z][A-Z0-9_]{0,127}$",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "file",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                            {
                              type: "object",
                              properties: {
                                source: {
                                  type: "string",
                                  const: "exec",
                                },
                                provider: {
                                  type: "string",
                                  pattern: "^[a-z][a-z0-9_-]{0,63}$",
                                },
                                id: {
                                  type: "string",
                                },
                              },
                              required: ["source", "provider", "id"],
                              additionalProperties: false,
                            },
                          ],
                        },
                      ],
                    },
                    webhookPath: {
                      type: "string",
                    },
                    dmPolicy: {
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    mediaMaxMb: {
                      type: "number",
                    },
                    proxy: {
                      type: "string",
                    },
                    responsePrefix: {
                      type: "string",
                    },
                  },
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            additionalProperties: false,
          },
          label: "Zalo",
          description: "Vietnam-focused messaging platform with Bot API.",
        },
      },
    },
  },
  {
    dirName: "zalouser",
    idHint: "zalouser",
    source: {
      source: "./index.ts",
      built: "index.js",
    },
    setupSource: {
      source: "./setup-entry.ts",
      built: "setup-entry.js",
    },
    publicSurfaceArtifacts: ["api.js", "runtime-api.js"],
    runtimeSidecarArtifacts: ["runtime-api.js"],
    packageName: "@openclaw/zalouser",
    packageVersion: "2026.3.28",
    packageDescription: "OpenClaw Zalo Personal Account plugin via native zca-js integration",
    packageManifest: {
      extensions: ["./index.ts"],
      setupEntry: "./setup-entry.ts",
      channel: {
        id: "zalouser",
        label: "Zalo Personal",
        selectionLabel: "Zalo (Personal Account)",
        docsPath: "/channels/zalouser",
        docsLabel: "zalouser",
        blurb: "Zalo personal account via QR code login.",
        aliases: ["zlu"],
        order: 85,
        quickstartAllowFrom: false,
      },
      install: {
        npmSpec: "@openclaw/zalouser",
        localPath: "extensions/zalouser",
        defaultChoice: "npm",
        minHostVersion: ">=2026.3.28",
      },
    },
    manifest: {
      id: "zalouser",
      configSchema: {
        type: "object",
        additionalProperties: false,
        properties: {},
      },
      channels: ["zalouser"],
      channelConfigs: {
        zalouser: {
          schema: {
            $schema: "http://json-schema.org/draft-07/schema#",
            type: "object",
            properties: {
              name: {
                type: "string",
              },
              enabled: {
                type: "boolean",
              },
              markdown: {
                type: "object",
                properties: {
                  tables: {
                    type: "string",
                    enum: ["off", "bullets", "code"],
                  },
                },
                additionalProperties: false,
              },
              profile: {
                type: "string",
              },
              dangerouslyAllowNameMatching: {
                type: "boolean",
              },
              dmPolicy: {
                type: "string",
                enum: ["pairing", "allowlist", "open", "disabled"],
              },
              allowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              historyLimit: {
                type: "integer",
                minimum: 0,
                maximum: 9007199254740991,
              },
              groupAllowFrom: {
                type: "array",
                items: {
                  anyOf: [
                    {
                      type: "string",
                    },
                    {
                      type: "number",
                    },
                  ],
                },
              },
              groupPolicy: {
                default: "allowlist",
                type: "string",
                enum: ["open", "disabled", "allowlist"],
              },
              groups: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    allow: {
                      type: "boolean",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    requireMention: {
                      type: "boolean",
                    },
                    tools: {
                      type: "object",
                      properties: {
                        allow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        alsoAllow: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                        deny: {
                          type: "array",
                          items: {
                            type: "string",
                          },
                        },
                      },
                      additionalProperties: false,
                    },
                  },
                  additionalProperties: false,
                },
              },
              messagePrefix: {
                type: "string",
              },
              responsePrefix: {
                type: "string",
              },
              accounts: {
                type: "object",
                properties: {},
                additionalProperties: {
                  type: "object",
                  properties: {
                    name: {
                      type: "string",
                    },
                    enabled: {
                      type: "boolean",
                    },
                    markdown: {
                      type: "object",
                      properties: {
                        tables: {
                          type: "string",
                          enum: ["off", "bullets", "code"],
                        },
                      },
                      additionalProperties: false,
                    },
                    profile: {
                      type: "string",
                    },
                    dangerouslyAllowNameMatching: {
                      type: "boolean",
                    },
                    dmPolicy: {
                      type: "string",
                      enum: ["pairing", "allowlist", "open", "disabled"],
                    },
                    allowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    historyLimit: {
                      type: "integer",
                      minimum: 0,
                      maximum: 9007199254740991,
                    },
                    groupAllowFrom: {
                      type: "array",
                      items: {
                        anyOf: [
                          {
                            type: "string",
                          },
                          {
                            type: "number",
                          },
                        ],
                      },
                    },
                    groupPolicy: {
                      default: "allowlist",
                      type: "string",
                      enum: ["open", "disabled", "allowlist"],
                    },
                    groups: {
                      type: "object",
                      properties: {},
                      additionalProperties: {
                        type: "object",
                        properties: {
                          allow: {
                            type: "boolean",
                          },
                          enabled: {
                            type: "boolean",
                          },
                          requireMention: {
                            type: "boolean",
                          },
                          tools: {
                            type: "object",
                            properties: {
                              allow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              alsoAllow: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                              deny: {
                                type: "array",
                                items: {
                                  type: "string",
                                },
                              },
                            },
                            additionalProperties: false,
                          },
                        },
                        additionalProperties: false,
                      },
                    },
                    messagePrefix: {
                      type: "string",
                    },
                    responsePrefix: {
                      type: "string",
                    },
                  },
                  required: ["groupPolicy"],
                  additionalProperties: false,
                },
              },
              defaultAccount: {
                type: "string",
              },
            },
            required: ["groupPolicy"],
            additionalProperties: false,
          },
          label: "Zalo Personal",
          description: "Zalo personal account via QR code login.",
        },
      },
    },
  },
] as const;
