{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://openclaw.local/skill-template/skill-grid-presentation.schema.json", "title": "SkillGridPresentationDocument", "description": "匠厂数据管理「Grid Presentation」文档(schemaVersion 1)。技能按业务规则为 rows×columns 声明语义 tone(整行、整列、区域或单格);禁止 all×all。非任意 CSS。与 skill-cell-presentation.schema.json(v1 cells[])并存,同一 cellPresentation.enabled。详见 references/CELL_PRESENTATION.md。", "type": "object", "required": ["schemaVersion", "skill", "table", "rowKey", "rules"], "additionalProperties": false, "properties": { "schemaVersion": { "type": "integer", "const": 1 }, "skill": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", "minLength": 1, "description": "与 SKILL.md metadata.openclaw.slug / actions.json skill 一致" }, "table": { "type": "string", "minLength": 1, "pattern": "^[a-z][a-z0-9_]*$", "description": "业务表物理名(snake_case)" }, "rowKey": { "type": "string", "minLength": 1, "pattern": "^[a-z][a-z0-9_]*$", "description": "用于匹配行的业务表列名(如 id);rules[].rows 的 id 取自该列" }, "generatedAt": { "type": "string", "minLength": 1, "description": "可选。ISO-8601 或技能约定的生成时间,便于排障" }, "rules": { "type": "array", "description": "当前应对该表生效的 grid 规则;空数组 = 该表无 grid 呈现(清除旧行/列/区域样式)。同 ruleKey 由 UNIQUE 约束覆盖。", "items": { "$ref": "#/$defs/ruleItem" } } }, "$defs": { "tone": { "type": "string", "enum": ["danger", "warning", "info", "success", "muted"], "description": "语义色板(闭集)。宿主映射到底色/字色/左边线等;禁止技能下发原始 CSS 或任意 hex。" }, "axisTarget": { "description": "\"all\" = 该轴全部;非空字符串数组 = 有限集合(行 id 或列名)", "oneOf": [ { "type": "string", "const": "all" }, { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } } ] }, "ruleItem": { "type": "object", "required": ["ruleKey", "rows", "columns", "tone"], "additionalProperties": false, "not": { "properties": { "rows": { "const": "all" }, "columns": { "const": "all" } }, "required": ["rows", "columns"] }, "properties": { "ruleKey": { "type": "string", "minLength": 1, "maxLength": 200, "description": "本表内唯一。建议稳定业务键(重算时覆盖同一条)" }, "rows": { "$ref": "#/$defs/axisTarget" }, "columns": { "$ref": "#/$defs/axisTarget" }, "tone": { "$ref": "#/$defs/tone" }, "message": { "type": "string", "maxLength": 500, "description": "可选。悬停/无障碍说明(短文案);不要塞长报告" }, "alert": { "type": "boolean", "description": "可选,默认 false。true = 按本条规则计入进页/同步提醒(不按命中格子数)" } } } } }