197 lines
5.1 KiB
JSON
197 lines
5.1 KiB
JSON
{
|
||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||
"$id": "https://openclaw.local/skill-template/skill-policy-snapshot.schema.json",
|
||
"title": "SkillDataPolicySnapshot",
|
||
"description": "匠厂 Skill Data Policy Snapshot(schemaVersion 1)。由技能 policy CLI 输出到 stdout;宿主用于数据管理按钮/行列过滤。详见 references/POLICY.md。",
|
||
"type": "object",
|
||
"required": ["schemaVersion", "skill", "actor", "actions"],
|
||
"additionalProperties": true,
|
||
"properties": {
|
||
"schemaVersion": {
|
||
"type": "integer",
|
||
"const": 1
|
||
},
|
||
"skill": {
|
||
"type": "string",
|
||
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
|
||
"minLength": 1
|
||
},
|
||
"actor": {
|
||
"type": "object",
|
||
"required": ["userId"],
|
||
"additionalProperties": true,
|
||
"properties": {
|
||
"userId": { "type": "string", "minLength": 1 },
|
||
"displayName": { "type": "string" },
|
||
"roles": {
|
||
"type": "array",
|
||
"items": { "type": "string", "minLength": 1 }
|
||
},
|
||
"attributes": {
|
||
"type": "object",
|
||
"additionalProperties": {
|
||
"type": ["string", "number", "boolean", "null"]
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"actions": {
|
||
"type": "object",
|
||
"required": ["mode"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"mode": {
|
||
"type": "string",
|
||
"enum": ["allowlist", "open"],
|
||
"description": "v1 仅允许 allowlist/open;denylist 非法。"
|
||
},
|
||
"ids": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string",
|
||
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
|
||
},
|
||
"description": "mode=allowlist 时必填;mode=open 时应省略或 []。"
|
||
}
|
||
},
|
||
"allOf": [
|
||
{
|
||
"if": {
|
||
"properties": { "mode": { "const": "allowlist" } },
|
||
"required": ["mode"]
|
||
},
|
||
"then": {
|
||
"required": ["ids"]
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"hostCapabilities": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string",
|
||
"enum": ["refresh", "export", "view", "edit", "delete", "import"]
|
||
},
|
||
"description": "省略=不限制宿主内置能力;写出则按 allowlist(含 []=全禁)。"
|
||
},
|
||
"data": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"tables": {
|
||
"type": "object",
|
||
"additionalProperties": { "$ref": "#/$defs/tablePolicy" }
|
||
}
|
||
}
|
||
},
|
||
"extensions": {
|
||
"type": "object",
|
||
"description": "技能私有扩展;宿主必须忽略未知键。"
|
||
}
|
||
},
|
||
"$defs": {
|
||
"predicate": {
|
||
"type": "object",
|
||
"required": ["field", "op"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"field": {
|
||
"type": "string",
|
||
"minLength": 1,
|
||
"pattern": "^[a-z][a-z0-9_]*$"
|
||
},
|
||
"op": {
|
||
"type": "string",
|
||
"enum": [
|
||
"eq",
|
||
"ne",
|
||
"in",
|
||
"not_in",
|
||
"gt",
|
||
"gte",
|
||
"lt",
|
||
"lte",
|
||
"is_null",
|
||
"is_not_null"
|
||
]
|
||
},
|
||
"value": {
|
||
"description": "与 valueFrom 互斥;in/not_in 时为非空数组。"
|
||
},
|
||
"valueFrom": {
|
||
"type": "string",
|
||
"const": "actor.userId",
|
||
"description": "v1 仅允许 actor.userId。"
|
||
}
|
||
}
|
||
},
|
||
"scope": {
|
||
"oneOf": [
|
||
{ "$ref": "#/$defs/predicate" },
|
||
{
|
||
"type": "object",
|
||
"required": ["all"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"all": {
|
||
"type": "array",
|
||
"minItems": 1,
|
||
"items": { "$ref": "#/$defs/predicate" }
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "object",
|
||
"required": ["any"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"any": {
|
||
"type": "array",
|
||
"minItems": 1,
|
||
"items": { "$ref": "#/$defs/predicate" }
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"tablePolicy": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"accessible": { "type": "boolean" },
|
||
"columns": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"visible": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string",
|
||
"pattern": "^[a-z][a-z0-9_]*$"
|
||
}
|
||
},
|
||
"writable": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string",
|
||
"pattern": "^[a-z][a-z0-9_]*$"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"rows": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"mode": {
|
||
"type": "string",
|
||
"enum": ["scope", "open", "delegate"]
|
||
},
|
||
"scope": { "$ref": "#/$defs/scope" }
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|