270 lines
8.8 KiB
JSON
270 lines
8.8 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://github.com/DingTalk-Real-AI/dingtalk-workspace-cli/blob/main/internal/cli/param_concepts.schema.json",
|
|
"title": "DWS Reviewed Parameter Concept Dictionary",
|
|
"description": "Human-reviewed source of parameter concepts (equivalent flag spellings for the same entity) and per-command overrides. Build-time generators reduce these concepts against each command's real Cobra flags; they must never rewrite this file.",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"$schema",
|
|
"version",
|
|
"concepts"
|
|
],
|
|
"properties": {
|
|
"$schema": {
|
|
"const": "./param_concepts.schema.json",
|
|
"description": "Relative editor contract. Keep this value unchanged so agents can validate the dictionary without network access."
|
|
},
|
|
"version": {
|
|
"const": 1,
|
|
"description": "ParamConcepts source format version."
|
|
},
|
|
"morphological_rules": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/morphRule"
|
|
},
|
|
"description": "Table-free, global name normalization behaviors realized by pflag SetNormalizeFunc. Documentation of morph behavior, not per-command aliases."
|
|
},
|
|
"concepts": {
|
|
"type": "object",
|
|
"minProperties": 1,
|
|
"propertyNames": {
|
|
"$ref": "#/$defs/conceptId"
|
|
},
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/concept"
|
|
},
|
|
"description": "Global concepts keyed by stable concept id. Go validation additionally rejects members that overlap across concepts and members that intersect their own excludes."
|
|
},
|
|
"command_overrides": {
|
|
"type": "object",
|
|
"propertyNames": {
|
|
"$ref": "#/$defs/commandPath"
|
|
},
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/commandOverride"
|
|
},
|
|
"description": "Per-command overrides keyed by the command path (without leading 'dws'). Only needed for generic-name binding, command-scoped aliases, co-occurrence whitelisting, or reject."
|
|
},
|
|
"validation_fixture": {
|
|
"$ref": "#/$defs/validationFixture"
|
|
}
|
|
},
|
|
"$defs": {
|
|
"conceptId": {
|
|
"type": "string",
|
|
"pattern": "^[a-z][a-z0-9_]*$",
|
|
"description": "Stable concept id in lower snake_case."
|
|
},
|
|
"flagToken": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$",
|
|
"description": "A flag spelling token without leading dashes."
|
|
},
|
|
"commandPath": {
|
|
"type": "string",
|
|
"pattern": "^[A-Za-z0-9+][A-Za-z0-9._:+-]*(?: [A-Za-z0-9+][A-Za-z0-9._:+-]*)*$",
|
|
"description": "Exact command path without the leading 'dws' or flags. A leading '+' segment marks a shortcut subcommand. Existence against the real Cobra tree is validated by the generator, not this schema."
|
|
},
|
|
"risk": {
|
|
"type": "string",
|
|
"enum": [
|
|
"green",
|
|
"yellow"
|
|
],
|
|
"description": "Reviewed risk band. green concepts reduce freely; yellow concepts need extra reviewer attention on excludes boundaries."
|
|
},
|
|
"morphRule": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"desc",
|
|
"enabled"
|
|
],
|
|
"properties": {
|
|
"desc": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"guard": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"reason": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
}
|
|
}
|
|
},
|
|
"concept": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"denotes",
|
|
"canonical_hint",
|
|
"members",
|
|
"commands",
|
|
"risk"
|
|
],
|
|
"properties": {
|
|
"denotes": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Human description of the single entity this concept denotes."
|
|
},
|
|
"canonical_hint": {
|
|
"$ref": "#/$defs/flagToken",
|
|
"description": "Governance hint only; the runtime reduces to whichever real flag the command exposes, not to this value."
|
|
},
|
|
"members": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"items": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"description": "Equivalent spellings that all denote the concept's entity."
|
|
},
|
|
"excludes": {
|
|
"type": "array",
|
|
"default": [],
|
|
"uniqueItems": true,
|
|
"items": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"description": "Spellings that denote a DIFFERENT entity and must never be reduced into this concept."
|
|
},
|
|
"commands": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"items": {
|
|
"$ref": "#/$defs/commandPath"
|
|
},
|
|
"description": "Exact reviewed runnable command paths on which this concept may participate in reduction. A concept never activates on an unlisted command merely because a real flag has the same spelling."
|
|
},
|
|
"risk": {
|
|
"$ref": "#/$defs/risk"
|
|
}
|
|
}
|
|
},
|
|
"commandOverride": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"minProperties": 1,
|
|
"properties": {
|
|
"bind": {
|
|
"type": "object",
|
|
"minProperties": 1,
|
|
"propertyNames": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/conceptId"
|
|
},
|
|
"description": "Maps a generic real flag (e.g. id) to a concept id so concept members can reduce onto it. Go validation requires every value to be a declared concept id."
|
|
},
|
|
"scoped_aliases": {
|
|
"type": "object",
|
|
"minProperties": 1,
|
|
"propertyNames": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"additionalProperties": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"description": "Command-scoped emitted->realFlag aliases. Never promoted to a global concept member."
|
|
},
|
|
"block": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"items": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"description": "Emitted names that must never be reduced on this command; they route to did-you-mean instead."
|
|
},
|
|
"ambiguous": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"uniqueItems": true,
|
|
"items": {
|
|
"$ref": "#/$defs/flagToken"
|
|
},
|
|
"description": "Reviewed co-occurrence whitelist: when a concept intersects two or more real flags on this command, the emitted names listed here are expected to route to did-you-mean rather than fail generation."
|
|
},
|
|
"confirm": {
|
|
"type": "boolean",
|
|
"description": "Reviewer flagged this override as needing user confirmation of the mapping semantics."
|
|
},
|
|
"scope_strict": {
|
|
"type": "boolean",
|
|
"description": "This alias must stay strictly command-local; another command has a real and different flag with the same spelling."
|
|
},
|
|
"investigate": {
|
|
"type": "boolean",
|
|
"description": "Reviewer flagged this override as needing source-case investigation before landing."
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Reviewer note explaining the override."
|
|
}
|
|
}
|
|
},
|
|
"validationFixture": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"cases"
|
|
],
|
|
"properties": {
|
|
"cases": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": {
|
|
"$ref": "#/$defs/fixtureCase"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"fixtureCase": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"command",
|
|
"emitted",
|
|
"expect"
|
|
],
|
|
"properties": {
|
|
"command": {
|
|
"$ref": "#/$defs/commandPath"
|
|
},
|
|
"emitted": {
|
|
"$ref": "#/$defs/flagToken",
|
|
"description": "The name the model produced."
|
|
},
|
|
"expect": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Either the real flag the emitted name must reduce to, or one of the did-you-mean sentinels 'did-you-mean:ambiguous' / 'did-you-mean:blocked'."
|
|
},
|
|
"via": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"description": "Reviewer annotation of the reduction path; documentation only."
|
|
},
|
|
"occ": {
|
|
"type": "integer",
|
|
"minimum": 0,
|
|
"description": "Occurrence count in the evaluation batch; frequency evidence only."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|