forked from 1b-agent/opencadstudio-upstream
feat(mcp): declarative op table and per-variant request validation
- Define Ty, Param, Rule, and OpDef in src/mcp_ops.rs for all 39 mutations - Generate Draft 2020-12 schema using per-op anyOf variants with op enum discriminators - Disambiguate colliding properties (replace, center, name) across mutation variants - Add pre-dispatch validator enforcing required fields, rules, and parameter types - Emit unknown parameter warnings into response warnings - Introduce target_document_id for entities_copy_to with deprecated document_id fallback - Update unit tests and automation smoke assertions
This commit is contained in:
1 parent
74c48ff5e3
commit
6951cc2a7a
5 files changed
+1169
-411
No files matched your search
@@ -52,7 +52,8 @@ def legacy(server: Path) -> None:
|
||||
names = set(definitions)
|
||||
assert names == TOOLS, names
|
||||
execute_request = definitions["ocs_execute"]["inputSchema"]["properties"]["request"]
|
||||
assert len(execute_request["oneOf"]) == 39
|
||||
variants = execute_request.get("anyOf") or execute_request.get("oneOf")
|
||||
assert len(variants) == 39
|
||||
op_enum = execute_request["properties"]["op"]["enum"]
|
||||
for shipped in ("entities_create", "entities_delete", "entities_transform",
|
||||
"block_define", "block_delete", "file_identity", "xdata_set",
|
||||
@@ -65,15 +66,19 @@ def legacy(server: Path) -> None:
|
||||
assert "text_search" in definitions["ocs_read"]["inputSchema"]["properties"]["op"]["enum"]
|
||||
assert "text_audit" in definitions["ocs_read"]["inputSchema"]["properties"]["op"]["enum"]
|
||||
assert execute_request["properties"]["steps"]["maxItems"] == 64
|
||||
assert execute_request["properties"]["cmd"]["examples"][0] == "LINE 0,0 10,10"
|
||||
variant_map = {
|
||||
v["properties"]["op"].get("const") or v["properties"]["op"]["enum"][0]: v
|
||||
for v in variants
|
||||
}
|
||||
assert variant_map["run"]["properties"]["cmd"]["type"] == "string"
|
||||
assert "set_properties" in execute_request["properties"]["op"]["enum"]
|
||||
assert "save_verified" in execute_request["properties"]["op"]["enum"]
|
||||
assert "record_schema" in definitions["ocs_read"]["inputSchema"]["properties"]["op"]["enum"]
|
||||
assert "audit" in definitions["ocs_read"]["inputSchema"]["properties"]["op"]["enum"]
|
||||
read_parameters = definitions["ocs_read"]["inputSchema"]["properties"]["parameters"]["properties"]
|
||||
assert {"collection", "where", "paths", "target_format", "target_version"} <= set(read_parameters)
|
||||
assert execute_request["properties"]["target_version"]["enum"][0] == "R14"
|
||||
assert execute_request["properties"]["kind"]["enum"] == [
|
||||
assert variant_map["save_verified"]["properties"]["target_version"]["enum"][0] == "R14"
|
||||
assert variant_map["input"]["properties"]["kind"]["enum"] == [
|
||||
"text", "token", "point", "entity", "structure", "selection", "enter"
|
||||
]
|
||||
for name in {"ocs_sessions", "ocs_read", "ocs_execute"}:
|
||||
|
||||
Reference in new issue
Block a user