ARCH: довести catalog drilldown от metadata surface до planner chain

This commit is contained in:
2026-04-23 10:48:01 +03:00
parent c2392f6420
commit 8fc90ae65f
12 changed files with 322 additions and 15 deletions
@@ -381,6 +381,8 @@ function tagSetFromMetadataSurfaceInput(input: AssistantMcpCatalogMetadataSurfac
}
if (routeFamily === "catalog_drilldown" || recommendedPrimitive === "drilldown_related_objects") {
tags.add("drilldown");
tags.add("metadata");
tags.add("surface_inspection");
}
for (const value of surfaceValues) {
if (metadataSurfaceSuggestsDocument(value)) {
@@ -391,6 +393,8 @@ function tagSetFromMetadataSurfaceInput(input: AssistantMcpCatalogMetadataSurfac
}
if (metadataSurfaceSuggestsCatalog(value)) {
tags.add("drilldown");
tags.add("metadata");
tags.add("surface_inspection");
}
}
const requiredAxisSet = toStringSet(input.required_axes ?? []);
@@ -416,6 +420,15 @@ function factFamiliesFromMetadataSurfaceInput(input: AssistantMcpCatalogMetadata
if (routeFamily === "movement_evidence") {
families.add("movement_evidence");
}
if (routeFamily === "catalog_drilldown") {
families.add("schema_surface");
}
for (const value of [input.selected_entity_set ?? "", ...(input.selected_surface_objects ?? [])]) {
if (metadataSurfaceSuggestsCatalog(value)) {
families.add("schema_surface");
break;
}
}
return families;
}
@@ -552,6 +565,12 @@ export function searchAssistantMcpCatalogPrimitivesByMetadataSurface(
}
const hasCompatibleAxisGroup = requiredAxisSet.size > 0 && hasAnyAxisGroup(requiredAxisSet, contract.required_axes_any_of);
const axisOverlap = requiredAxisSet.size > 0 ? countAxisOverlap(requiredAxisSet, contract.required_axes_any_of) : 0;
if (contract.primitive_id === "probe_coverage" && !desiredTags.has("coverage")) {
continue;
}
if (contract.primitive_id === "drilldown_related_objects" && !hasCompatibleAxisGroup && axisOverlap <= 0) {
continue;
}
let score = 0;
if (primitiveRecommended) {
@@ -613,7 +613,8 @@ function isValueFlowPilotEligible(planner: AssistantMcpDiscoveryPlannerContract)
function isMetadataPilotEligible(planner: AssistantMcpDiscoveryPlannerContract): boolean {
if (
planner.selected_chain_id === "metadata_inspection" ||
planner.selected_chain_id === "metadata_lane_clarification"
planner.selected_chain_id === "metadata_lane_clarification" ||
planner.selected_chain_id === "catalog_drilldown"
) {
return true;
}
@@ -658,6 +659,23 @@ function metadataScopeForPlanner(planner: AssistantMcpDiscoveryPlannerContract):
if (entityCandidate) {
return entityCandidate;
}
if (planner.selected_chain_id === "catalog_drilldown") {
const surface = planner.metadata_surface_ref;
const scopeCandidate = [
...(surface?.selected_surface_objects ?? []),
surface?.selected_entity_set ?? ""
]
.map((value) => toNonEmptyString(value))
.filter((value): value is string => Boolean(value))
.map((value) => {
const parts = value.split(".").map((item) => item.trim()).filter((item) => item.length > 0);
return parts.length > 0 ? parts[parts.length - 1] ?? value : value;
})
.find((value) => value.length > 0);
if (scopeCandidate) {
return scopeCandidate;
}
}
const meaning = planner.discovery_plan.turn_meaning_ref;
const combined = `${meaning?.asked_domain_family ?? ""} ${meaning?.asked_action_family ?? ""} ${meaning?.unsupported_but_understood_family ?? ""}`
.toLowerCase()
@@ -675,6 +693,12 @@ function metadataScopeForPlanner(planner: AssistantMcpDiscoveryPlannerContract):
}
function metadataTypesForPlanner(planner: AssistantMcpDiscoveryPlannerContract): string[] {
if (planner.selected_chain_id === "catalog_drilldown") {
const selectedEntitySet = toNonEmptyString(planner.metadata_surface_ref?.selected_entity_set);
if (selectedEntitySet) {
return [selectedEntitySet];
}
}
const meaning = planner.discovery_plan.turn_meaning_ref;
const action = String(meaning?.asked_action_family ?? "").toLowerCase();
if (action === "inspect_registers") {
@@ -2381,6 +2405,7 @@ function buildEmptyEvidence(
function pilotScopeForPlanner(planner: AssistantMcpDiscoveryPlannerContract): AssistantMcpDiscoveryPilotScope {
switch (planner.selected_chain_id) {
case "catalog_drilldown":
case "metadata_lane_clarification":
case "metadata_inspection":
return "metadata_inspection_v1";
@@ -2524,6 +2549,9 @@ export async function executeAssistantMcpDiscoveryPilot(
let metadataResult: AddressMcpMetadataRowsResult | null = null;
const metadataScope = metadataScopeForPlanner(planner);
const requestedMetaTypes = metadataTypesForPlanner(planner);
if (planner.selected_chain_id === "catalog_drilldown" && metadataScope) {
pushReason(reasonCodes, "pilot_catalog_drilldown_metadata_scope_seeded_from_surface_ref");
}
for (const step of dryRun.execution_steps) {
if (step.primitive_id !== "inspect_1c_metadata") {
@@ -37,6 +37,7 @@ export interface AssistantMcpDiscoveryMetadataSurfaceRef {
export type AssistantMcpDiscoveryChainId =
| "metadata_inspection"
| "catalog_drilldown"
| "metadata_lane_clarification"
| "value_flow"
| "value_flow_comparison"
@@ -382,8 +383,15 @@ function routeFamilyFromThinMetadataSurfaceInput(
if (graphFactFamily === "movement_evidence" || includesAny(combined, ["movement", "movements", "list_movements", "bank_operations"])) {
return surface.downstream_route_family === "movement_evidence" ? "movement_evidence" : null;
}
if (graphFactFamily === "schema_surface" || includesAny(combined, ["catalog", "directory", "inspect_catalog"])) {
return surface.downstream_route_family === "catalog_drilldown" ? "catalog_drilldown" : null;
}
if (!graphFactFamily && !domain && !action) {
if (surface.downstream_route_family === "document_evidence" || surface.downstream_route_family === "movement_evidence") {
if (
surface.downstream_route_family === "document_evidence" ||
surface.downstream_route_family === "movement_evidence" ||
surface.downstream_route_family === "catalog_drilldown"
) {
return surface.downstream_route_family;
}
}
@@ -463,6 +471,26 @@ function recipeFor(input: AssistantMcpDiscoveryPlannerInput): PlannerRecipe {
extraReasons: primitiveSelection.reasonCodes
};
}
if (thinSurfaceRouteFamily === "catalog_drilldown") {
pushUnique(axes, "metadata_scope");
const primitiveSelection = selectPrimitivesFromGraphAndCatalog({
dataNeedGraph,
fallbackPrimitives: ["inspect_1c_metadata"],
requiredAxes: axes,
metadataSurface: input.metadataSurface,
actionFamily: action
});
return {
semanticDataNeed: "catalog drilldown metadata evidence",
chainId: "catalog_drilldown",
chainSummary:
"Drill deeper into the confirmed catalog-oriented metadata surface, inspect related metadata objects, and keep the next safe lane grounded in checked schema evidence.",
primitives: primitiveSelection.primitives,
axes,
reason: "planner_selected_catalog_drilldown_from_confirmed_metadata_surface_ref",
extraReasons: primitiveSelection.reasonCodes
};
}
if (graphFactFamily === "value_flow") {
if (dataNeedGraph?.comparison_need === "incoming_vs_outgoing" && !hasSubjectCandidates(dataNeedGraph)) {
@@ -1080,6 +1080,17 @@ export function buildAssistantMcpDiscoveryTurnInput(
!metadataMovementHintSignal &&
hasMetadataDownstreamContinuationSignal(rawText)
);
const metadataGroundedCatalogLaneContinuationApplicable = Boolean(
followupSeed.pilotScope === "metadata_inspection_v1" &&
followupSeed.metadataRouteFamily === "catalog_drilldown" &&
!followupSeed.metadataAmbiguityDetected &&
!rawLifecycleSignal &&
!rawValueFlowSignal &&
!rawMetadataSignal &&
!metadataDocumentHintSignal &&
!metadataMovementHintSignal &&
hasMetadataDownstreamContinuationSignal(rawText)
);
const metadataAmbiguityCollapsedDocumentLaneContinuationApplicable = Boolean(
followupSeed.pilotScope === "metadata_inspection_v1" &&
followupSeed.metadataAmbiguityDetected &&
@@ -1139,13 +1150,16 @@ export function buildAssistantMcpDiscoveryTurnInput(
metadataFollowupSeedApplicable &&
!metadataAmbiguityLaneClarificationApplicable &&
!metadataGroundedDocumentLaneApplicable &&
!metadataGroundedMovementLaneApplicable;
!metadataGroundedMovementLaneApplicable &&
!metadataGroundedCatalogLaneContinuationApplicable;
const seededDomain = metadataAmbiguityLaneClarificationApplicable
? "metadata"
: metadataGroundedDocumentLaneApplicable
? "documents"
: metadataGroundedMovementLaneApplicable
? "movements"
: metadataGroundedCatalogLaneContinuationApplicable
? "metadata"
: followupDiscoverySeedApplicable || effectiveMetadataFollowupSeedApplicable
? followupSeed.domain
: null;
@@ -1155,6 +1169,8 @@ export function buildAssistantMcpDiscoveryTurnInput(
? "list_documents"
: metadataGroundedMovementLaneApplicable
? "list_movements"
: metadataGroundedCatalogLaneContinuationApplicable
? "inspect_catalog"
: followupDiscoverySeedApplicable || effectiveMetadataFollowupSeedApplicable
? followupSeed.action
: null;
@@ -1164,6 +1180,8 @@ export function buildAssistantMcpDiscoveryTurnInput(
? "document_evidence"
: metadataGroundedMovementLaneApplicable
? "movement_evidence"
: metadataGroundedCatalogLaneContinuationApplicable
? "schema_surface"
: followupDiscoverySeedApplicable || effectiveMetadataFollowupSeedApplicable
? followupSeed.unsupported
: null;
@@ -1505,6 +1523,9 @@ export function buildAssistantMcpDiscoveryTurnInput(
if (metadataGroundedLaneContinuationApplicable) {
pushReason(reasonCodes, "mcp_discovery_metadata_grounded_lane_continuation");
}
if (metadataGroundedCatalogLaneContinuationApplicable) {
pushReason(reasonCodes, "mcp_discovery_metadata_grounded_catalog_continuation");
}
if (metadataAmbiguityCollapsedDocumentLaneContinuationApplicable) {
pushReason(reasonCodes, "mcp_discovery_metadata_ambiguity_collapsed_to_document_lane");
}