{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://www.anguskit.com/schema/anguscopilot-knowledge/1.0.0-alpha/chunking.json",
  "title": "Knowledge Chunking",
  "description": "Chunk 策略矩阵（与 §14.4.5 对齐）。",
  "type": "object",
  "properties": {
    "default": {
      "type": "string",
      "enum": ["fixed", "sentence", "semantic", "parent-child", "ast"]
    },
    "strategies": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["type"],
        "properties": {
          "match": {
            "type": "object",
            "properties": {
              "contentType": { "type": "string" },
              "language": { "type": "string" }
            },
            "patternProperties": { "^x-": true },
            "unevaluatedProperties": false
          },
          "type": {
            "type": "string",
            "enum": ["fixed", "sentence", "semantic", "parent-child", "ast"]
          },
          "params": {
            "type": "object",
            "properties": {
              "maxTokens": { "type": "integer", "minimum": 32 },
              "overlapTokens": { "type": "integer", "minimum": 0 },
              "childMaxTokens": { "type": "integer", "minimum": 32 },
              "parentMaxTokens": { "type": "integer", "minimum": 64 },
              "overlap": { "type": "integer", "minimum": 0 },
              "granularity": {
                "type": "string",
                "enum": ["function", "class", "block"]
              }
            },
            "patternProperties": { "^x-": true },
            "unevaluatedProperties": false
          }
        },
        "patternProperties": { "^x-": true },
        "$comment": "F4/F5 跨字段约束。",
        "allOf": [
          {
            "$comment": "F4: type=parent-child 必须 params.childMaxTokens + parentMaxTokens。",
            "if": {
              "properties": { "type": { "const": "parent-child" } },
              "required": ["type"]
            },
            "then": {
              "required": ["params"],
              "properties": {
                "params": { "required": ["childMaxTokens", "parentMaxTokens"] }
              }
            }
          },
          {
            "$comment": "F5: type=ast 必须 params.granularity ∈ enum。",
            "if": {
              "properties": { "type": { "const": "ast" } },
              "required": ["type"]
            },
            "then": {
              "required": ["params"],
              "properties": {
                "params": { "required": ["granularity"] }
              }
            }
          }
        ],
        "unevaluatedProperties": false
      }
    }
  },
  "patternProperties": { "^x-": true },
  "unevaluatedProperties": false
}
