feat(engine): register MCP profiles and provider transitions

This commit is contained in:
Codex
2026-07-25 15:39:23 +03:00
parent 951b884c4b
commit e9e03143cd
21 changed files with 3573 additions and 28 deletions
@@ -0,0 +1,45 @@
{
"id": "fleet.units.contacts.current.v2",
"version": "2.0.0",
"ontologyRevision": "ontology.map.moving_object.v3",
"deliveryMode": "snapshot+patch",
"semanticTypes": [
"map.moving_object"
],
"fields": [
"available_user_emails",
"available_user_ids",
"available_user_legal_names",
"available_user_logins",
"available_user_phones",
"device_imei",
"device_phone_primary",
"device_phone_secondary",
"display_name",
"provider_creator_email",
"provider_creator_id",
"provider_creator_legal_name",
"provider_creator_login",
"provider_creator_phone"
],
"fieldContracts": {
"available_user_emails": { "type": "string_array", "required": false },
"available_user_ids": { "type": "string_array", "required": false },
"available_user_legal_names": { "type": "string_array", "required": false },
"available_user_logins": { "type": "string_array", "required": false },
"available_user_phones": { "type": "string_array", "required": false },
"device_imei": { "type": "string", "required": false },
"device_phone_primary": { "type": "string", "required": false },
"device_phone_secondary": { "type": "string", "required": false },
"display_name": { "type": "string", "required": true },
"provider_creator_email": { "type": "string", "required": false },
"provider_creator_id": { "type": "string", "required": false },
"provider_creator_legal_name": { "type": "string", "required": false },
"provider_creator_login": { "type": "string", "required": false },
"provider_creator_phone": { "type": "string", "required": false }
},
"history": {
"mode": "none",
"retentionDays": 1
}
}
@@ -13,6 +13,7 @@ assert.deepEqual(bundled.map((definition) => definition.id), [
"fleet.positions.current.v4",
"fleet.positions.current.v5",
"fleet.units.contacts.current.v1",
"fleet.units.contacts.current.v2",
"fleet.units.identity.current.v1",
"fleet.units.profile.current.v1",
"map.zones.current.v1",
@@ -59,27 +60,33 @@ assert.equal(bundled[5].ontologyRevision, "ontology.map.moving_object.v3");
assert.deepEqual(bundled[5].semanticTypes, ["map.moving_object"]);
assert.equal(bundled[5].history.mode, "none");
assert.equal(bundled[5].fieldContracts.device_phone_primary.type, "string");
assert.equal(bundled[6].version, "1.0.0");
assert.equal(bundled[6].version, "2.0.0");
assert.equal(bundled[6].ontologyRevision, "ontology.map.moving_object.v3");
assert.deepEqual(bundled[6].semanticTypes, ["map.moving_object"]);
assert.equal(bundled[6].history.mode, "none");
assert.equal(bundled[6].fieldContracts.available_user_logins.type, "string_array");
assert.equal(bundled[6].fieldContracts.device_imei.type, "string");
assert.equal(bundled[6].fieldContracts.available_user_emails.type, "string_array");
assert.equal(bundled[6].fieldContracts.provider_creator_email.type, "string");
assert.equal(bundled[7].version, "1.0.0");
assert.equal(bundled[7].ontologyRevision, "ontology.map.moving_object.v3");
assert.deepEqual(bundled[7].semanticTypes, ["map.moving_object"]);
assert.equal(bundled[7].history.mode, "none");
assert.equal(bundled[7].fieldContracts.hardware_port.type, "number");
assert.equal(bundled[7].fieldContracts.available_user_logins.type, "string_array");
assert.equal(bundled[7].fieldContracts.device_imei.type, "string");
assert.equal(bundled[8].version, "1.0.0");
assert.equal(bundled[8].ontologyRevision, "ontology.map.zone.v1");
assert.deepEqual(bundled[8].semanticTypes, ["map.zone"]);
assert.deepEqual(bundled[8].fieldContracts.geometry, { type: "geometry", required: true });
assert.equal(bundled[8].fields.includes("dataset_authority"), false);
assert.equal(bundled[9].version, "2.0.0");
assert.equal(bundled[8].ontologyRevision, "ontology.map.moving_object.v3");
assert.deepEqual(bundled[8].semanticTypes, ["map.moving_object"]);
assert.equal(bundled[8].history.mode, "none");
assert.equal(bundled[8].fieldContracts.hardware_port.type, "number");
assert.equal(bundled[9].version, "1.0.0");
assert.equal(bundled[9].ontologyRevision, "ontology.map.zone.v1");
assert.deepEqual(bundled[9].semanticTypes, ["map.zone"]);
assert.deepEqual(bundled[9].fieldContracts.geometry, { type: "geometry", required: true });
assert.deepEqual(bundled[9].fieldContracts.dataset_authority.enum, ["moscow-department-of-transport"]);
assert.equal(bundled[9].fields.includes("dataset_authority"), false);
assert.equal(bundled[10].version, "2.0.0");
assert.equal(bundled[10].ontologyRevision, "ontology.map.zone.v1");
assert.deepEqual(bundled[10].semanticTypes, ["map.zone"]);
assert.deepEqual(bundled[10].fieldContracts.geometry, { type: "geometry", required: true });
assert.deepEqual(bundled[10].fieldContracts.dataset_authority.enum, ["moscow-department-of-transport"]);
assert.equal(Object.keys(bundled[3].fieldContracts).length, bundled[3].fields.length);
assert.equal(Object.keys(bundled[4].fieldContracts).length, bundled[4].fields.length);
assert.equal(Object.keys(bundled[5].fieldContracts).length, bundled[5].fields.length);
@@ -87,6 +94,7 @@ assert.equal(Object.keys(bundled[6].fieldContracts).length, bundled[6].fields.le
assert.equal(Object.keys(bundled[7].fieldContracts).length, bundled[7].fields.length);
assert.equal(Object.keys(bundled[8].fieldContracts).length, bundled[8].fields.length);
assert.equal(Object.keys(bundled[9].fieldContracts).length, bundled[9].fields.length);
assert.equal(Object.keys(bundled[10].fieldContracts).length, bundled[10].fields.length);
const directory = await mkdtemp(join(tmpdir(), "nodedc-edp-definitions-"));
try {