Files
market/schemas/catalog-metadata.v1.schema.json
Yige a205ef20f0 feat: 迁移统一目录元数据契约 (#102)
## 中文

- 为 System Agent、34 个 Builtin Skill、28 个 Pointer/Collection 条目增加 catalog
sidecar
- 覆盖 147 个 collection child,并固定可证明的来源;无法证明的内容保持 listing-only/unknown
- 增加 strict Schema、validator、collection check 与 CI 完整性门禁

## English

- Add catalog metadata sidecars for the System Agent, 34 built-in
Skills, and 28 pointer/collection entries
- Cover 147 collection children while keeping unverifiable facts
listing-only or unknown
- Add strict schemas, validators, deterministic collection checks, and
CI completeness gates

## 验证 / Verification

- Catalog validator 17/17
- Collection generator 4/4
- 63 sidecars, 147 children, zero errors
2026-08-31 04:10:49 -04:00

586 lines
17 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://desirecore.com/schemas/market/catalog-metadata.v1.schema.json",
"title": "DesireCore Market catalog metadata sidecar v1",
"description": "Strict source-owned metadata stored next to one legacy Market Agent or Skill. The trusted catalog source ID, catalog commit, catalog path and catalog trust are injected by DesireCore and are intentionally prohibited here.",
"type": "object",
"required": [
"schemaVersion",
"identity",
"presentation",
"release",
"timestamps",
"provenance",
"governance",
"compatibility",
"spec"
],
"properties": {
"$schema": {
"type": "string",
"const": "../../schemas/catalog-metadata.v1.schema.json",
"description": "Relative schema reference from agents/<id>/ or skills/<id>/."
},
"schemaVersion": {
"type": "integer",
"const": 1,
"description": "Sidecar contract version. This is not the legacy Market manifest version."
},
"identity": {
"$ref": "#/$defs/identity"
},
"presentation": {
"$ref": "#/$defs/presentation"
},
"release": {
"$ref": "#/$defs/release"
},
"timestamps": {
"$ref": "#/$defs/timestamps"
},
"provenance": {
"$ref": "#/$defs/provenance"
},
"governance": {
"$ref": "#/$defs/governance"
},
"compatibility": {
"$ref": "#/$defs/compatibility"
},
"spec": {
"oneOf": [
{ "$ref": "#/$defs/agentSpec" },
{ "$ref": "#/$defs/skillSpec" }
]
}
},
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"identity": {
"properties": { "kind": { "const": "agent" } },
"required": ["kind"]
}
}
},
"then": {
"properties": {
"spec": { "$ref": "#/$defs/agentSpec" }
}
}
},
{
"if": {
"properties": {
"identity": {
"properties": { "kind": { "const": "skill" } },
"required": ["kind"]
}
}
},
"then": {
"properties": {
"spec": { "$ref": "#/$defs/skillSpec" }
}
}
},
{
"if": {
"properties": {
"spec": {
"properties": {
"kind": { "const": "agent" },
"installPolicy": { "const": "system" }
},
"required": ["kind", "installPolicy"]
}
},
"required": ["spec"]
},
"then": {
"properties": {
"spec": {
"properties": { "updatePolicy": { "const": "repository" } },
"required": ["updatePolicy"]
},
"governance": {
"properties": { "availability": { "const": "listing-only" } },
"required": ["availability"]
},
"release": {
"properties": { "state": { "const": "unknown" } },
"required": ["state"]
}
}
}
},
{
"if": {
"properties": {
"spec": {
"properties": {
"kind": { "const": "agent" },
"installPolicy": { "const": "market" }
},
"required": ["kind", "installPolicy"]
}
},
"required": ["spec"]
},
"then": {
"properties": {
"spec": {
"properties": { "updatePolicy": { "const": "market" } },
"required": ["updatePolicy"]
}
}
}
}
],
"$defs": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"pattern": "^(?!-)(?!.*--)[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"
},
"safeRelativePath": {
"type": "string",
"minLength": 1,
"pattern": "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\).+$"
},
"identity": {
"type": "object",
"description": "Source-local identity. catalogSourceId is injected by the trusted synchronizer and must not appear in the sidecar.",
"required": ["kind", "id"],
"properties": {
"kind": {
"type": "string",
"enum": ["agent", "skill"]
},
"id": {
"$ref": "#/$defs/slug"
},
"parentId": {
"$ref": "#/$defs/slug"
}
},
"additionalProperties": false
},
"localizedPresentation": {
"type": "object",
"required": ["name", "summary"],
"properties": {
"name": { "type": "string", "minLength": 1, "maxLength": 200 },
"summary": { "type": "string", "minLength": 1, "maxLength": 1024 },
"description": { "type": "string", "minLength": 1 }
},
"additionalProperties": false
},
"presentation": {
"type": "object",
"required": ["defaultLocale", "i18n", "tags"],
"properties": {
"defaultLocale": {
"type": "string",
"pattern": "^[a-z]{2,3}(?:-[A-Z]{2})?$"
},
"i18n": {
"type": "object",
"minProperties": 1,
"patternProperties": {
"^[a-z]{2,3}(?:-[A-Z]{2})?$": {
"$ref": "#/$defs/localizedPresentation"
}
},
"additionalProperties": false
},
"icon": {
"type": "object",
"required": ["kind", "value"],
"properties": {
"kind": { "enum": ["emoji", "letter", "asset", "url"] },
"value": { "type": "string", "minLength": 1, "maxLength": 2048 }
},
"additionalProperties": false
},
"category": { "$ref": "#/$defs/slug" },
"tags": {
"type": "array",
"items": { "type": "string", "minLength": 1, "maxLength": 120 },
"uniqueItems": true
}
},
"additionalProperties": false
},
"unknownRelease": {
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
"knownRelease": {
"type": "object",
"required": ["state", "version", "versionScheme"],
"properties": {
"state": { "const": "known" },
"version": { "type": "string", "minLength": 1, "maxLength": 160 },
"versionScheme": {
"type": "string",
"enum": ["semver", "calver", "opaque"]
},
"changelog": {
"type": "array",
"maxItems": 100,
"items": { "type": "string", "minLength": 1, "maxLength": 2000 }
}
},
"additionalProperties": false,
"allOf": [
{
"if": { "properties": { "versionScheme": { "const": "semver" } } },
"then": {
"properties": {
"version": {
"pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"
}
}
}
},
{
"if": { "properties": { "versionScheme": { "const": "calver" } } },
"then": {
"properties": {
"version": { "pattern": "^\\d{4}(?:[.-]\\d{1,2}){1,2}(?:[.-][0-9A-Za-z]+)*$" }
}
}
}
]
},
"release": {
"description": "A collection parent may explicitly use unknown; versions are never synthesized from children.",
"oneOf": [
{ "$ref": "#/$defs/unknownRelease" },
{ "$ref": "#/$defs/knownRelease" }
]
},
"unknownTimestamp": {
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
"knownDayTimestamp": {
"type": "object",
"required": ["state", "value", "precision"],
"properties": {
"state": { "const": "known" },
"value": {
"type": "string",
"format": "date",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"precision": { "const": "day" }
},
"additionalProperties": false
},
"knownSecondTimestamp": {
"type": "object",
"required": ["state", "value", "precision"],
"properties": {
"state": { "const": "known" },
"value": {
"type": "string",
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
},
"precision": { "const": "second" }
},
"additionalProperties": false
},
"timestamp": {
"oneOf": [
{ "$ref": "#/$defs/unknownTimestamp" },
{ "$ref": "#/$defs/knownDayTimestamp" },
{ "$ref": "#/$defs/knownSecondTimestamp" }
]
},
"timestamps": {
"type": "object",
"description": "Catalog modification, content publication, governance review and upstream observation are separate facts. syncedAt is runtime-only and prohibited.",
"required": [
"catalogUpdatedAt",
"releasePublishedAt",
"reviewedAt",
"upstreamObservedAt"
],
"properties": {
"catalogUpdatedAt": { "$ref": "#/$defs/timestamp" },
"releasePublishedAt": { "$ref": "#/$defs/timestamp" },
"reviewedAt": { "$ref": "#/$defs/timestamp" },
"upstreamObservedAt": { "$ref": "#/$defs/timestamp" }
},
"additionalProperties": false
},
"contentProvenance": {
"type": "object",
"required": ["kind", "url"],
"properties": {
"kind": {
"type": "string",
"enum": ["git", "web", "zip", "release", "package", "container"]
},
"url": { "type": "string", "format": "uri", "pattern": "^https://" },
"path": { "$ref": "#/$defs/safeRelativePath" },
"ref": { "type": "string", "minLength": 1, "maxLength": 256 },
"sha256": { "type": "string", "pattern": "^[a-fA-F0-9]{64}$" }
},
"additionalProperties": false
},
"provenance": {
"type": "object",
"description": "Only content provenance is source-owned. Catalog provenance and trust are injected by the synchronizer.",
"properties": {
"content": { "$ref": "#/$defs/contentProvenance" }
},
"additionalProperties": false
},
"maintainer": {
"type": "object",
"required": ["name"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"url": { "type": "string", "format": "uri" },
"verified": { "type": "boolean" }
},
"additionalProperties": false
},
"unknownLicense": {
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
"knownLicense": {
"type": "object",
"required": ["state", "value"],
"properties": {
"state": { "const": "known" },
"value": { "type": "string", "minLength": 1 },
"evidencePath": { "$ref": "#/$defs/safeRelativePath" }
},
"additionalProperties": false
},
"license": {
"oneOf": [
{ "$ref": "#/$defs/unknownLicense" },
{ "$ref": "#/$defs/knownLicense" }
]
},
"branding": {
"type": "object",
"required": ["relationship", "nameUsage", "logoStatus"],
"properties": {
"relationship": { "enum": ["official", "partner", "independent-listing"] },
"nameUsage": { "enum": ["owned", "licensed", "nominative"] },
"logoStatus": {
"enum": ["not-used", "license-covered", "trademark-policy-allowed", "permission-obtained"]
}
},
"additionalProperties": false
},
"compliance": {
"type": "object",
"required": ["licenseEvidencePath", "reviewedRef", "reviewedAt", "reviewedBy", "upstreamEndorsed"],
"properties": {
"licenseEvidencePath": { "$ref": "#/$defs/safeRelativePath" },
"noticePath": { "$ref": "#/$defs/safeRelativePath" },
"reviewedRef": { "type": "string", "minLength": 1 },
"reviewedAt": {
"type": "string",
"oneOf": [
{ "format": "date", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" },
{
"format": "date-time",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z$"
}
]
},
"reviewedBy": { "type": "string", "minLength": 1 },
"upstreamEndorsed": { "type": "boolean" }
},
"additionalProperties": false
},
"governance": {
"type": "object",
"required": ["availability", "license", "redistribution"],
"properties": {
"stewardship": {
"enum": ["official", "partner", "community", "pointer"]
},
"availability": {
"enum": ["listing-only", "installable"]
},
"license": { "$ref": "#/$defs/license" },
"redistribution": {
"enum": ["allowed", "source-pointer-only", "verify-package-terms"]
},
"branding": { "$ref": "#/$defs/branding" },
"compliance": { "$ref": "#/$defs/compliance" },
"listingMaintainer": { "$ref": "#/$defs/maintainer" },
"upstreamMaintainer": { "$ref": "#/$defs/maintainer" }
},
"additionalProperties": false
},
"platforms": {
"oneOf": [
{
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "unknown" } },
"additionalProperties": false
},
{
"type": "object",
"required": ["state"],
"properties": { "state": { "const": "all" } },
"additionalProperties": false
},
{
"type": "object",
"required": ["state", "values"],
"properties": {
"state": { "const": "known" },
"values": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": { "enum": ["macos", "windows", "linux", "web", "ios", "android"] }
}
},
"additionalProperties": false
}
]
},
"requirement": {
"type": "object",
"required": ["kind", "value"],
"properties": {
"kind": { "enum": ["runtime", "hardware", "permission", "connection"] },
"value": { "type": "string", "minLength": 1, "maxLength": 500 }
},
"additionalProperties": false
},
"compatibility": {
"type": "object",
"required": ["platforms"],
"properties": {
"platforms": { "$ref": "#/$defs/platforms" },
"requiredClientVersion": {
"type": "string",
"pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$"
},
"compatibleAgents": {
"type": "array",
"items": { "$ref": "#/$defs/slug" },
"uniqueItems": true
},
"requirements": {
"type": "array",
"items": { "$ref": "#/$defs/requirement" },
"uniqueItems": true
}
},
"additionalProperties": false
},
"agentSpec": {
"type": "object",
"required": ["kind"],
"properties": {
"kind": { "const": "agent" },
"installPolicy": { "enum": ["market", "system"] },
"updatePolicy": { "enum": ["market", "repository"] },
"persona": {
"type": "object",
"required": ["role", "traits"],
"properties": {
"role": { "type": "string", "minLength": 1 },
"traits": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
}
},
"additionalProperties": false
}
},
"dependencies": {
"installPolicy": ["updatePolicy"],
"updatePolicy": ["installPolicy"]
},
"additionalProperties": false
},
"collectionChild": {
"type": "object",
"required": ["identity", "path", "presentation", "release"],
"properties": {
"identity": {
"type": "object",
"required": ["kind", "id", "parentId"],
"properties": {
"kind": { "const": "skill" },
"id": { "$ref": "#/$defs/slug" },
"parentId": { "$ref": "#/$defs/slug" }
},
"additionalProperties": false
},
"path": { "$ref": "#/$defs/safeRelativePath" },
"presentation": { "$ref": "#/$defs/presentation" },
"release": { "$ref": "#/$defs/release" }
},
"additionalProperties": false
},
"collection": {
"type": "object",
"required": ["role", "childCount", "children"],
"properties": {
"role": { "const": "parent" },
"childCount": { "type": "integer", "minimum": 1 },
"children": {
"type": "array",
"minItems": 1,
"items": { "$ref": "#/$defs/collectionChild" }
}
},
"additionalProperties": false
},
"skillSpec": {
"type": "object",
"required": ["kind"],
"properties": {
"kind": { "const": "skill" },
"riskLevel": { "enum": ["low", "medium", "high", "critical"] },
"skillType": { "enum": ["procedural", "declarative", "hybrid"] },
"requires": {
"type": "object",
"required": ["tools", "connections"],
"properties": {
"tools": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
},
"connections": {
"type": "array",
"items": { "type": "string", "minLength": 1 }
}
},
"additionalProperties": false
},
"collection": { "$ref": "#/$defs/collection" }
},
"additionalProperties": false
}
}
}