feat(foundry): add composable subject detail profiles

This commit is contained in:
Codex
2026-07-22 19:06:33 +03:00
parent dd2febe7cf
commit dc82ae4c07
21 changed files with 1007 additions and 140 deletions
+11
View File
@@ -126,6 +126,14 @@ test("one setup command provisions independent Foundry and Ontology MCP transpor
assert.equal(presentationTool.inputSchema.properties.profile.properties.label.properties.sizePx.minimum, 8);
assert.equal(Object.hasOwn(presentationTool.inputSchema.properties.profile.properties.label.properties, "fontSizePx"), false);
assert.deepEqual(presentationTool.inputSchema.properties.profile.properties.label.properties.mode.enum, ["subject_id", "attributes", "none"]);
const subjectDetailTool = foundryList.result.tools.find((tool) => tool.name === "foundry_upsert_map_subject_detail_profile");
assert.ok(subjectDetailTool);
assert.equal(subjectDetailTool.inputSchema.properties.profile.additionalProperties, false);
assert.deepEqual(subjectDetailTool.inputSchema.properties.profile.required, ["id", "version", "title", "semanticTypes", "defaultTabId", "tabs"]);
assert.deepEqual(
subjectDetailTool.inputSchema.properties.profile.properties.tabs.items.properties.sections.items.properties.fields.items.properties.format.enum,
["text", "number", "timestamp", "boolean", "coordinate", "signal_state", "movement_state", "telemetry_readings"],
);
const mapSettingsTool = foundryList.result.tools.find((tool) => tool.name === "foundry_update_map_page_settings");
assert.ok(mapSettingsTool);
assert.equal(mapSettingsTool.inputSchema.properties.settings.additionalProperties, false);
@@ -139,6 +147,9 @@ test("one setup command provisions independent Foundry and Ontology MCP transpor
const bindingTool = foundryList.result.tools.find((tool) => tool.name === "foundry_upsert_map_data_product_binding");
assert.equal(bindingTool.inputSchema.properties.binding.properties.displayName.maxLength, 120);
assert.equal(bindingTool.inputSchema.properties.binding.properties.order.maximum, 10000);
assert.ok(bindingTool.inputSchema.properties.binding.properties.subjectDetailProfileId);
assert.ok(bindingTool.inputSchema.properties.binding.properties.aspectId);
assert.ok(bindingTool.inputSchema.properties.binding.properties.joinToBindingId);
const crossTokenResponse = await fetch(redeemed.ontology.mcpUrl, {
method: "POST",