{
  "id": "fabric",
  "kind": "channel",
  "channels": ["fabric"],
  "name": "Fabric",
  "description": "Fabric channel plugin — OpenClaw agents speak in Fabric guilds",
  "activation": {
    "onStartup": true
  },
  "contracts": {
    "tools": [
      "fabric-register",
      "create-chat-channel",
      "create-work-channel",
      "create-report-channel",
      "create-discussion-channel",
      "discussion-complete",
      "fabric-canvas",
      "fabric-channel",
      "fabric-send-message",
      "fabric-channel-list",
      "fabric-message-history"
    ]
  },
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "identityFilePath": {
        "type": "string",
        "description": "Path to the agent identity registry JSON (agentId -> Fabric API key). Default ~/.openclaw/fabric-identity.json"
      },
      "debugMode": { "type": "boolean", "default": false }
    },
    "required": []
  },
  "channelConfigs": {
    "fabric": {
      "schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "centerApiBase": {
            "type": "string",
            "description": "Fabric Center API base, e.g. http://localhost:7001/api"
          },
          "commandsSyncKey": {
            "type": "string",
            "minLength": 1,
            "description": "Shared secret that must equal the guild's FABRIC_BACKEND_GUILD_COMMANDS_SYNC_KEY. Required to register the slash-command catalog (Guild C-2). Read it from the guild via: docker exec fabric-backend-guild node dist/cli/print-commands-sync-key.js"
          },
          "coalesce": {
            "type": "boolean",
            "description": "Merge a split agent turn (text → thinking/tool → text) into ONE Fabric message. Flushed deterministically on the agent_end hook. Default true; false = raw per-segment posting."
          },
          "dmSecurity": { "type": "string" },
          "dmPolicy": { "type": "string" },
          "enabled": { "type": "boolean" },
          "allowFrom": { "type": "array", "items": { "type": "string" } },
          "defaultAccount": { "type": "string" },
          "accounts": {
            "type": "object",
            "description": "agent = account; key is the openclaw agentId",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": false,
              "properties": {
                "fabricApiKey": { "type": "string" },
                "centerApiBase": { "type": "string" },
                "enabled": { "type": "boolean" },
                "dmPolicy": { "type": "string" },
                "allowFrom": { "type": "array", "items": { "type": "string" } }
              }
            }
          }
        },
        "required": ["commandsSyncKey"]
      },
      "uiHints": {
        "centerApiBase": { "label": "Center API base" },
        "commandsSyncKey": { "label": "Commands sync key" }
      }
    }
  }
}
