@uns-kit/assistant-workflow 2.0.78 → 2.0.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"tool-selection-policy.d.ts","sourceRoot":"","sources":["../src/tool-selection-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-selection-policy.d.ts","sourceRoot":"","sources":["../src/tool-selection-policy.ts"],"names":[],"mappings":"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"}
@@ -77,6 +77,7 @@ export function buildAssistantWorkflowToolSelectionDecision(input) {
77
77
  workflowSelectionCandidateToolNames: readStringArray(comparisonPayload["workflowSelectionCandidateTools"]),
78
78
  workflowStatus: readWorkflowStatus(comparisonPayload),
79
79
  workflowAuthorityEnabled,
80
+ selectionExercised: input.pruningEnabled !== false,
80
81
  })
81
82
  : buildAssistantWorkflowToolSelectionAuthority({
82
83
  selectedToolNames,
@@ -261,6 +262,15 @@ export function buildAssistantWorkflowToolSelectionAuthority(input) {
261
262
  workflowStatus,
262
263
  };
263
264
  }
265
+ if (input.selectionExercised === false) {
266
+ return {
267
+ source: "legacy-pruner",
268
+ reason: "workflow_selection_not_exercised",
269
+ selectedToolNames,
270
+ workflowSuggestedToolNames,
271
+ workflowStatus,
272
+ };
273
+ }
264
274
  if (comparableWorkflowToolNames.length > 0 && sameStringSet(selectedToolNames, comparableWorkflowToolNames)) {
265
275
  return {
266
276
  source: "workflow",
@@ -1 +1 @@
1
- {"version":3,"file":"tool-selection-policy.js","sourceRoot":"","sources":["../src/tool-selection-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findAssistantWorkflowIntent,\n type AssistantWorkflowDefinition,\n type AssistantWorkflowOptionalToolSelectionMode,\n type AssistantWorkflowToolContextRequirement,\n} from \"./definition.js\";\nimport type { AssistantWorkflowDecision, AssistantWorkflowDecisionInput } from \"./decision.js\";\nimport {\n buildAssistantWorkflowRun,\n buildAssistantWorkflowRunTracePayload,\n} from \"./run.js\";\nimport { summarizeAssistantWorkflowToolCapabilities } from \"./tool-capabilities.js\";\nimport {\n readAssistantWorkflowString as normalizeNullableString,\n readAssistantWorkflowStringArray as readStringArray,\n} from \"./value-readers.js\";\n\nexport type { AssistantWorkflowOptionalToolSelectionMode } from \"./definition.js\";\n\nexport type AssistantWorkflowToolSelectionCandidate = {\n optionalToolSelectionMode: AssistantWorkflowOptionalToolSelectionMode;\n toolNames: string[];\n classifierToolNames: string[];\n requiredToolNames: string[];\n optionalToolNames: string[];\n excludedOptionalToolNames: string[];\n activeProfileIds: string[];\n profileToolNames: string[];\n profileExcludedToolNames: string[];\n};\n\nexport type AssistantWorkflowToolSelectionCandidateInput = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n decision: Pick<\n AssistantWorkflowDecision,\n \"intent\" | \"classifierTools\" | \"requiredToolHints\" | \"toolHints\" | \"workflowSuggestedTools\"\n >;\n availableToolNames?: readonly string[] | null;\n hop?: number | null;\n selectedReason?: string | null;\n resolvedScope?: boolean;\n attributeCount?: number | null;\n};\n\nexport type AssistantWorkflowToolSelectionAuthoritySource = \"workflow\" | \"legacy-pruner\";\n\nexport type AssistantWorkflowToolSelectionAuthorityReason =\n | \"workflow_equivalent\"\n | \"workflow_authority_enabled\"\n | \"workflow_unavailable\"\n | \"workflow_authority_not_enabled\"\n | \"workflow_blocked\"\n | \"workflow_differs\";\n\nexport type AssistantWorkflowToolSelectionAuthority = {\n source: AssistantWorkflowToolSelectionAuthoritySource;\n reason: AssistantWorkflowToolSelectionAuthorityReason;\n selectedToolNames: string[];\n workflowSuggestedToolNames: string[];\n workflowStatus: string | null;\n};\n\nexport type AssistantWorkflowToolSelectionAuthorityInput = {\n selectedToolNames: readonly string[];\n workflowAvailable: boolean;\n workflowSuggestedToolNames?: readonly string[] | null;\n workflowSelectionCandidateToolNames?: readonly string[] | null;\n workflowStatus?: string | null;\n workflowAuthorityEnabled?: boolean | null;\n};\n\nexport type AssistantWorkflowToolSelectionComparisonInput = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n classification?: AssistantWorkflowDecisionInput | null;\n availableToolNames?: readonly string[] | null;\n selectedToolNames: readonly string[];\n selectedMode?: string | null;\n selectedReason?: string | null;\n hop?: number | null;\n pruningEnabled?: boolean | null;\n availableContext?: readonly AssistantWorkflowToolContextRequirement[] | null;\n resolvedScope?: boolean;\n workflowAuthorityIntentIds?: readonly string[] | null;\n workflowAuthoritySegmentKeys?: readonly string[] | null;\n workflowAuthorityProfileKeys?: readonly string[] | null;\n};\n\nexport type AssistantWorkflowToolSelectionDecisionInput = AssistantWorkflowToolSelectionComparisonInput;\n\nexport type AssistantWorkflowToolSelectionDecision = {\n comparisonPayload: Record<string, unknown> | null;\n authority: AssistantWorkflowToolSelectionAuthority;\n effectiveToolNames: string[];\n effectiveReason: string | null;\n};\n\nexport function buildAssistantWorkflowToolSelectionCandidate(\n input: AssistantWorkflowToolSelectionCandidateInput,\n): AssistantWorkflowToolSelectionCandidate {\n const intent = findAssistantWorkflowIntent(input.workflow, input.decision.intent);\n const optionalToolSelectionMode = intent?.optionalToolSelectionMode ?? \"classifier-confirmed\";\n const classifierToolNames = uniqueStrings(input.decision.classifierTools);\n const requiredToolNames = uniqueStrings(input.decision.requiredToolHints);\n const optionalToolNames = uniqueStrings(input.decision.toolHints)\n .filter((toolName) => !requiredToolNames.includes(toolName));\n const classifierToolSet = new Set(classifierToolNames);\n const availableToolNameSet = buildOptionalToolNameSet(input.availableToolNames);\n const activeProfiles = (intent?.toolSelectionProfiles ?? [])\n .filter((profile) => toolSelectionProfileConditionMatches(profile.condition, {\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n resolvedScope: input.resolvedScope === true,\n attributeCount: input.attributeCount ?? null,\n classifierToolNames: classifierToolSet,\n }));\n const activeProfileIds = uniqueStrings(activeProfiles.map((profile) => profile.id));\n const profileToolNames = uniqueStrings(activeProfiles.flatMap((profile) => {\n const mode = profile.optionalToolSelectionMode ?? \"workflow-suggested\";\n const profileToolHints = uniqueStrings(profile.toolHints)\n .filter((toolName) => !availableToolNameSet || availableToolNameSet.has(toolName));\n return mode === \"workflow-suggested\"\n ? profileToolHints\n : profileToolHints.filter((toolName) => classifierToolSet.has(toolName));\n }));\n const profileExcludedToolNames = uniqueStrings(activeProfiles.flatMap((profile) => profile.toolExclusions ?? []));\n const requiredToolSet = new Set(requiredToolNames);\n const profileExcludedToolSet = new Set(profileExcludedToolNames.filter((toolName) => !requiredToolSet.has(toolName)));\n const allowedOptionalToolNames = optionalToolSelectionMode === \"workflow-suggested\"\n ? optionalToolNames\n : optionalToolNames.filter((toolName) => classifierToolSet.has(toolName));\n const allowedOptionalToolSet = new Set(allowedOptionalToolNames);\n const allowedSet = new Set([\n ...classifierToolNames,\n ...requiredToolNames,\n ...allowedOptionalToolNames,\n ...profileToolNames,\n ]);\n const toolNames = orderToolNamesByAvailableCatalog(uniqueStrings([\n ...input.decision.workflowSuggestedTools.filter((toolName) => allowedSet.has(toolName)),\n ...classifierToolNames,\n ...requiredToolNames,\n ...allowedOptionalToolNames,\n ...profileToolNames,\n ]).filter((toolName) => !profileExcludedToolSet.has(toolName)), input.availableToolNames);\n\n return {\n optionalToolSelectionMode,\n toolNames,\n classifierToolNames,\n requiredToolNames,\n optionalToolNames,\n excludedOptionalToolNames: uniqueStrings([\n ...optionalToolNames.filter((toolName) => !allowedOptionalToolSet.has(toolName)),\n ...optionalToolNames.filter((toolName) => profileExcludedToolSet.has(toolName)),\n ]),\n activeProfileIds,\n profileToolNames: orderToolNamesByAvailableCatalog(profileToolNames, input.availableToolNames),\n profileExcludedToolNames: orderToolNamesByAvailableCatalog(profileExcludedToolNames, input.availableToolNames),\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionDecision(\n input: AssistantWorkflowToolSelectionDecisionInput,\n): AssistantWorkflowToolSelectionDecision {\n const selectedToolNames = uniqueStrings(input.selectedToolNames);\n const comparisonPayload = buildAssistantWorkflowToolSelectionComparisonPayload(input);\n const workflowAuthorityEnabled = comparisonPayload\n ? isWorkflowAuthorityEnabled(input, comparisonPayload)\n : false;\n const authority = comparisonPayload\n ? buildAssistantWorkflowToolSelectionAuthority({\n selectedToolNames,\n workflowAvailable: true,\n workflowSuggestedToolNames: readStringArray(comparisonPayload[\"workflowSuggestedTools\"]),\n workflowSelectionCandidateToolNames: readStringArray(comparisonPayload[\"workflowSelectionCandidateTools\"]),\n workflowStatus: readWorkflowStatus(comparisonPayload),\n workflowAuthorityEnabled,\n })\n : buildAssistantWorkflowToolSelectionAuthority({\n selectedToolNames,\n workflowAvailable: false,\n });\n const gatedAuthority = applyWorkflowAuthorityIntentGate(authority, input, comparisonPayload);\n const effectiveReason = gatedAuthority.source === \"workflow\"\n ? gatedAuthority.reason\n : normalizeNullableString(input.selectedReason);\n const effectiveToolNames = gatedAuthority.source === \"workflow\"\n ? [...gatedAuthority.selectedToolNames]\n : selectedToolNames;\n\n return {\n comparisonPayload: comparisonPayload\n ? {\n ...comparisonPayload,\n selectedReason: effectiveReason,\n selectedToolCount: effectiveToolNames.length,\n workflowAuthoritySegmentKey: buildAssistantWorkflowToolSelectionSegmentKey({\n intentId: normalizeNullableString(input.classification?.intent) ?? \"unknown\",\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n }),\n workflowAuthorityIntentIds: normalizeOptionalStringList(input.workflowAuthorityIntentIds),\n workflowAuthoritySegmentKeys: normalizeOptionalStringList(input.workflowAuthoritySegmentKeys),\n workflowAuthorityProfileKeys: normalizeOptionalStringList(input.workflowAuthorityProfileKeys),\n authority: gatedAuthority,\n }\n : null,\n authority: gatedAuthority,\n effectiveToolNames,\n effectiveReason,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionComparisonPayload(\n input: AssistantWorkflowToolSelectionComparisonInput,\n): Record<string, unknown> | null {\n if (!input.classification) return null;\n\n const selectedToolNames = uniqueStrings(input.selectedToolNames);\n const workflowRun = buildAssistantWorkflowRun(input.workflow, {\n classification: {\n ...input.classification,\n ...(input.resolvedScope === true ? { resolvedScope: true } : {}),\n },\n availableToolNames: input.availableToolNames ?? [],\n availableContext: input.availableContext ?? null,\n });\n const workflowDecision = workflowRun.decision;\n const workflowSelectionCandidate = buildAssistantWorkflowToolSelectionCandidate({\n workflow: input.workflow,\n decision: workflowDecision,\n availableToolNames: input.availableToolNames ?? [],\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n resolvedScope: input.resolvedScope === true,\n attributeCount: countDistinctAttributes(input.classification?.entities?.attributes),\n });\n const selectedSet = new Set(selectedToolNames);\n const workflowSet = new Set(workflowDecision.workflowSuggestedTools);\n const workflowSelectionCandidateSet = new Set(workflowSelectionCandidate.toolNames);\n const workflowAuthorityProfileKey = buildAssistantWorkflowToolSelectionProfileKey({\n intentId: workflowDecision.intent,\n profileIds: workflowSelectionCandidate.activeProfileIds,\n });\n const runTrace = buildAssistantWorkflowRunTracePayload(workflowRun);\n const decisionTrace = runTrace[\"decision\"] as Record<string, unknown>;\n const executionPlanTrace = runTrace[\"executionPlan\"] as Record<string, unknown>;\n\n return {\n ...(typeof input.hop === \"number\" ? { hop: input.hop } : {}),\n ...(typeof input.pruningEnabled === \"boolean\" ? { pruningEnabled: input.pruningEnabled } : {}),\n // Keep workflow identity flat so bounded trace payload sanitizers retain it\n // even when the detailed workflowRun object is omitted.\n workflowId: workflowRun.workflowId,\n workflowVersion: workflowRun.workflowVersion,\n resolvedScope: input.resolvedScope === true,\n ...(input.selectedMode ? { selectedMode: input.selectedMode } : {}),\n ...(input.selectedReason ? { selectedReason: input.selectedReason } : {}),\n selectedToolCount: selectedToolNames.length,\n ...decisionTrace,\n workflowRun: runTrace,\n executionPlan: executionPlanTrace,\n workflowSelectionCandidateTools: workflowSelectionCandidate.toolNames,\n workflowSelectionOptionalToolMode: workflowSelectionCandidate.optionalToolSelectionMode,\n workflowSelectionExcludedOptionalTools: workflowSelectionCandidate.excludedOptionalToolNames,\n workflowSelectionActiveProfileIds: workflowSelectionCandidate.activeProfileIds,\n workflowSelectionProfileTools: workflowSelectionCandidate.profileToolNames,\n workflowSelectionProfileExcludedTools: workflowSelectionCandidate.profileExcludedToolNames,\n ...(workflowAuthorityProfileKey ? { workflowAuthorityProfileKey } : {}),\n missingWorkflowSuggestedTools: workflowDecision.workflowSuggestedTools.filter((tool) => !selectedSet.has(tool)),\n missingWorkflowSelectionCandidateTools: workflowSelectionCandidate.toolNames.filter((tool) => !selectedSet.has(tool)),\n selectedOutsideWorkflowSuggestions: selectedToolNames.filter((tool) => !workflowSet.has(tool)),\n selectedOutsideWorkflowSelectionCandidate: selectedToolNames.filter((tool) => !workflowSelectionCandidateSet.has(tool)),\n selectedToolCapabilitySummary: summarizeAssistantWorkflowToolCapabilities(\n input.workflow,\n selectedToolNames,\n ),\n workflowSuggestedToolCapabilitySummary: summarizeAssistantWorkflowToolCapabilities(\n input.workflow,\n workflowDecision.workflowSuggestedTools,\n ),\n workflowSelectionCandidateToolCapabilitySummary: summarizeAssistantWorkflowToolCapabilities(\n input.workflow,\n workflowSelectionCandidate.toolNames,\n ),\n };\n}\n\nfunction toolSelectionProfileConditionMatches(\n condition: NonNullable<AssistantWorkflowDefinition<string, string, string, string>[\"intents\"][number][\"toolSelectionProfiles\"]>[number][\"condition\"],\n input: {\n hop: number | null;\n selectedReason: string | null;\n resolvedScope: boolean;\n attributeCount: number | null;\n classifierToolNames: ReadonlySet<string>;\n },\n): boolean {\n if (!condition) return true;\n if (condition.minHop !== undefined && (input.hop === null || input.hop < condition.minHop)) return false;\n if (condition.maxHop !== undefined && (input.hop === null || input.hop > condition.maxHop)) return false;\n if (condition.selectedReason !== undefined) {\n const expectedReason = normalizeNullableString(condition.selectedReason);\n if (expectedReason === null || normalizeNullableString(input.selectedReason) !== expectedReason) return false;\n }\n if (condition.resolvedScope !== undefined && condition.resolvedScope !== input.resolvedScope) return false;\n if (\n condition.minAttributeCount !== undefined &&\n (input.attributeCount === null || input.attributeCount < condition.minAttributeCount)\n ) {\n return false;\n }\n if (\n condition.maxAttributeCount !== undefined &&\n (input.attributeCount === null || input.attributeCount > condition.maxAttributeCount)\n ) {\n return false;\n }\n if (\n condition.requiredClassifierTools !== undefined &&\n !condition.requiredClassifierTools.every((toolName) => input.classifierToolNames.has(toolName))\n ) {\n return false;\n }\n return true;\n}\n\nfunction countDistinctAttributes(values: readonly string[] | null | undefined): number | null {\n if (!Array.isArray(values)) return null;\n return new Set(\n values\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim().toLocaleLowerCase())\n .filter((value) => value.length > 0),\n ).size;\n}\n\nfunction buildOptionalToolNameSet(values: readonly unknown[] | null | undefined): Set<string> | null {\n const toolNames = normalizeOptionalStringList(values);\n return toolNames === null || toolNames.length === 0 ? null : new Set(toolNames);\n}\n\nfunction orderToolNamesByAvailableCatalog(\n toolNames: string[],\n availableToolNames: readonly unknown[] | null | undefined,\n): string[] {\n const availableOrder = normalizeOptionalStringList(availableToolNames);\n if (!availableOrder?.length) return toolNames;\n const toolNameSet = new Set(toolNames);\n const ordered = availableOrder.filter((toolName) => toolNameSet.has(toolName));\n return uniqueStrings([\n ...ordered,\n ...toolNames.filter((toolName) => !ordered.includes(toolName)),\n ]);\n}\n\nexport function buildAssistantWorkflowToolSelectionAuthority(\n input: AssistantWorkflowToolSelectionAuthorityInput,\n): AssistantWorkflowToolSelectionAuthority {\n const selectedToolNames = uniqueStrings(input.selectedToolNames);\n const workflowSuggestedToolNames = uniqueStrings(input.workflowSuggestedToolNames ?? []);\n const workflowSelectionCandidateToolNames = uniqueStrings(input.workflowSelectionCandidateToolNames ?? []);\n const workflowStatus = normalizeNullableString(input.workflowStatus);\n const comparableWorkflowToolNames = workflowSelectionCandidateToolNames.length > 0\n ? workflowSelectionCandidateToolNames\n : workflowSuggestedToolNames;\n\n if (!input.workflowAvailable) {\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_unavailable\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus: null,\n };\n }\n\n if (workflowStatus === \"blocked\" || workflowStatus === \"needs-clarification\") {\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_blocked\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n if (input.workflowAuthorityEnabled && comparableWorkflowToolNames.length > 0) {\n return {\n source: \"workflow\",\n reason: sameStringSet(selectedToolNames, comparableWorkflowToolNames)\n ? \"workflow_equivalent\"\n : \"workflow_authority_enabled\",\n selectedToolNames: comparableWorkflowToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n if (comparableWorkflowToolNames.length > 0 && sameStringSet(selectedToolNames, comparableWorkflowToolNames)) {\n return {\n source: \"workflow\",\n reason: \"workflow_equivalent\",\n selectedToolNames: comparableWorkflowToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_differs\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionSegmentKey(input: {\n intentId: string | null;\n hop: number | null;\n selectedReason: string | null;\n}): string {\n return `${normalizeNullableString(input.intentId) ?? \"unknown\"}|hop:${input.hop ?? \"unknown\"}|${\n normalizeNullableString(input.selectedReason) ?? \"unknown\"\n }`;\n}\n\n/**\n * Exact active profile combinations are authority scopes. A single profile can\n * be safe in one combination and unsafe in another, so profile ids are sorted\n * and retained together with the intent.\n */\nexport function buildAssistantWorkflowToolSelectionProfileKey(input: {\n intentId: string | null;\n profileIds: readonly unknown[] | null | undefined;\n}): string | null {\n const intentId = normalizeNullableString(input.intentId);\n const profileIds = uniqueStrings(input.profileIds ?? []).sort((left, right) => left.localeCompare(right));\n if (!intentId || !profileIds.length) return null;\n return `${intentId}|profiles:${profileIds.join(\",\")}`;\n}\n\nfunction uniqueStrings(values: readonly unknown[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (!trimmed.length || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out;\n}\n\nfunction applyWorkflowAuthorityIntentGate(\n authority: AssistantWorkflowToolSelectionAuthority,\n input: AssistantWorkflowToolSelectionDecisionInput,\n comparisonPayload: Record<string, unknown> | null,\n): AssistantWorkflowToolSelectionAuthority {\n const enabledIntentIds = normalizeOptionalStringList(input.workflowAuthorityIntentIds);\n const enabledSegmentKeys = normalizeOptionalStringList(input.workflowAuthoritySegmentKeys);\n const enabledProfileKeys = normalizeOptionalStringList(input.workflowAuthorityProfileKeys);\n if (enabledIntentIds === null && enabledSegmentKeys === null && enabledProfileKeys === null) return authority;\n if (authority.source !== \"workflow\") return authority;\n const intentId = normalizeNullableString(input.classification?.intent);\n if (intentId && enabledIntentIds?.includes(intentId)) return authority;\n const segmentKey = buildAssistantWorkflowToolSelectionSegmentKey({\n intentId: intentId ?? \"unknown\",\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n });\n if (enabledSegmentKeys?.includes(segmentKey)) return authority;\n const profileKey = comparisonPayload\n ? normalizeNullableString(comparisonPayload[\"workflowAuthorityProfileKey\"])\n : null;\n if (profileKey && enabledProfileKeys?.includes(profileKey)) return authority;\n\n return {\n ...authority,\n source: \"legacy-pruner\",\n reason: \"workflow_authority_not_enabled\",\n };\n}\n\nfunction isWorkflowAuthorityEnabled(\n input: AssistantWorkflowToolSelectionDecisionInput,\n comparisonPayload: Record<string, unknown>,\n): boolean {\n const enabledIntentIds = normalizeOptionalStringList(input.workflowAuthorityIntentIds);\n const enabledSegmentKeys = normalizeOptionalStringList(input.workflowAuthoritySegmentKeys);\n const enabledProfileKeys = normalizeOptionalStringList(input.workflowAuthorityProfileKeys);\n if (enabledIntentIds === null && enabledSegmentKeys === null && enabledProfileKeys === null) return false;\n const intentId = normalizeNullableString(input.classification?.intent);\n if (intentId && enabledIntentIds?.includes(intentId)) return true;\n const segmentKey = buildAssistantWorkflowToolSelectionSegmentKey({\n intentId: intentId ?? \"unknown\",\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n });\n if (enabledSegmentKeys?.includes(segmentKey)) return true;\n const profileKey = normalizeNullableString(comparisonPayload[\"workflowAuthorityProfileKey\"]);\n return profileKey !== null && (enabledProfileKeys?.includes(profileKey) ?? false);\n}\n\nfunction normalizeOptionalStringList(values: readonly unknown[] | null | undefined): string[] | null {\n if (values === null || values === undefined) return null;\n return uniqueStrings(values);\n}\n\nfunction readWorkflowStatus(payload: Record<string, unknown>): string | null {\n const workflowRun = isRecord(payload[\"workflowRun\"]) ? payload[\"workflowRun\"] : null;\n return normalizeNullableString(workflowRun?.[\"status\"]);\n}\n\nfunction sameStringSet(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) return false;\n const rightSet = new Set(right);\n return left.every((item) => rightSet.has(item));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
1
+ {"version":3,"file":"tool-selection-policy.js","sourceRoot":"","sources":["../src/tool-selection-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findAssistantWorkflowIntent,\n type AssistantWorkflowDefinition,\n type AssistantWorkflowOptionalToolSelectionMode,\n type AssistantWorkflowToolContextRequirement,\n} from \"./definition.js\";\nimport type { AssistantWorkflowDecision, AssistantWorkflowDecisionInput } from \"./decision.js\";\nimport {\n buildAssistantWorkflowRun,\n buildAssistantWorkflowRunTracePayload,\n} from \"./run.js\";\nimport { summarizeAssistantWorkflowToolCapabilities } from \"./tool-capabilities.js\";\nimport {\n readAssistantWorkflowString as normalizeNullableString,\n readAssistantWorkflowStringArray as readStringArray,\n} from \"./value-readers.js\";\n\nexport type { AssistantWorkflowOptionalToolSelectionMode } from \"./definition.js\";\n\nexport type AssistantWorkflowToolSelectionCandidate = {\n optionalToolSelectionMode: AssistantWorkflowOptionalToolSelectionMode;\n toolNames: string[];\n classifierToolNames: string[];\n requiredToolNames: string[];\n optionalToolNames: string[];\n excludedOptionalToolNames: string[];\n activeProfileIds: string[];\n profileToolNames: string[];\n profileExcludedToolNames: string[];\n};\n\nexport type AssistantWorkflowToolSelectionCandidateInput = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n decision: Pick<\n AssistantWorkflowDecision,\n \"intent\" | \"classifierTools\" | \"requiredToolHints\" | \"toolHints\" | \"workflowSuggestedTools\"\n >;\n availableToolNames?: readonly string[] | null;\n hop?: number | null;\n selectedReason?: string | null;\n resolvedScope?: boolean;\n attributeCount?: number | null;\n};\n\nexport type AssistantWorkflowToolSelectionAuthoritySource = \"workflow\" | \"legacy-pruner\";\n\nexport type AssistantWorkflowToolSelectionAuthorityReason =\n | \"workflow_equivalent\"\n | \"workflow_authority_enabled\"\n | \"workflow_unavailable\"\n | \"workflow_authority_not_enabled\"\n | \"workflow_blocked\"\n | \"workflow_selection_not_exercised\"\n | \"workflow_differs\";\n\nexport type AssistantWorkflowToolSelectionAuthority = {\n source: AssistantWorkflowToolSelectionAuthoritySource;\n reason: AssistantWorkflowToolSelectionAuthorityReason;\n selectedToolNames: string[];\n workflowSuggestedToolNames: string[];\n workflowStatus: string | null;\n};\n\nexport type AssistantWorkflowToolSelectionAuthorityInput = {\n selectedToolNames: readonly string[];\n workflowAvailable: boolean;\n /** False when the caller deliberately exposed the complete legacy tool set. */\n selectionExercised?: boolean | null;\n workflowSuggestedToolNames?: readonly string[] | null;\n workflowSelectionCandidateToolNames?: readonly string[] | null;\n workflowStatus?: string | null;\n workflowAuthorityEnabled?: boolean | null;\n};\n\nexport type AssistantWorkflowToolSelectionComparisonInput = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n classification?: AssistantWorkflowDecisionInput | null;\n availableToolNames?: readonly string[] | null;\n selectedToolNames: readonly string[];\n selectedMode?: string | null;\n selectedReason?: string | null;\n hop?: number | null;\n pruningEnabled?: boolean | null;\n availableContext?: readonly AssistantWorkflowToolContextRequirement[] | null;\n resolvedScope?: boolean;\n workflowAuthorityIntentIds?: readonly string[] | null;\n workflowAuthoritySegmentKeys?: readonly string[] | null;\n workflowAuthorityProfileKeys?: readonly string[] | null;\n};\n\nexport type AssistantWorkflowToolSelectionDecisionInput = AssistantWorkflowToolSelectionComparisonInput;\n\nexport type AssistantWorkflowToolSelectionDecision = {\n comparisonPayload: Record<string, unknown> | null;\n authority: AssistantWorkflowToolSelectionAuthority;\n effectiveToolNames: string[];\n effectiveReason: string | null;\n};\n\nexport function buildAssistantWorkflowToolSelectionCandidate(\n input: AssistantWorkflowToolSelectionCandidateInput,\n): AssistantWorkflowToolSelectionCandidate {\n const intent = findAssistantWorkflowIntent(input.workflow, input.decision.intent);\n const optionalToolSelectionMode = intent?.optionalToolSelectionMode ?? \"classifier-confirmed\";\n const classifierToolNames = uniqueStrings(input.decision.classifierTools);\n const requiredToolNames = uniqueStrings(input.decision.requiredToolHints);\n const optionalToolNames = uniqueStrings(input.decision.toolHints)\n .filter((toolName) => !requiredToolNames.includes(toolName));\n const classifierToolSet = new Set(classifierToolNames);\n const availableToolNameSet = buildOptionalToolNameSet(input.availableToolNames);\n const activeProfiles = (intent?.toolSelectionProfiles ?? [])\n .filter((profile) => toolSelectionProfileConditionMatches(profile.condition, {\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n resolvedScope: input.resolvedScope === true,\n attributeCount: input.attributeCount ?? null,\n classifierToolNames: classifierToolSet,\n }));\n const activeProfileIds = uniqueStrings(activeProfiles.map((profile) => profile.id));\n const profileToolNames = uniqueStrings(activeProfiles.flatMap((profile) => {\n const mode = profile.optionalToolSelectionMode ?? \"workflow-suggested\";\n const profileToolHints = uniqueStrings(profile.toolHints)\n .filter((toolName) => !availableToolNameSet || availableToolNameSet.has(toolName));\n return mode === \"workflow-suggested\"\n ? profileToolHints\n : profileToolHints.filter((toolName) => classifierToolSet.has(toolName));\n }));\n const profileExcludedToolNames = uniqueStrings(activeProfiles.flatMap((profile) => profile.toolExclusions ?? []));\n const requiredToolSet = new Set(requiredToolNames);\n const profileExcludedToolSet = new Set(profileExcludedToolNames.filter((toolName) => !requiredToolSet.has(toolName)));\n const allowedOptionalToolNames = optionalToolSelectionMode === \"workflow-suggested\"\n ? optionalToolNames\n : optionalToolNames.filter((toolName) => classifierToolSet.has(toolName));\n const allowedOptionalToolSet = new Set(allowedOptionalToolNames);\n const allowedSet = new Set([\n ...classifierToolNames,\n ...requiredToolNames,\n ...allowedOptionalToolNames,\n ...profileToolNames,\n ]);\n const toolNames = orderToolNamesByAvailableCatalog(uniqueStrings([\n ...input.decision.workflowSuggestedTools.filter((toolName) => allowedSet.has(toolName)),\n ...classifierToolNames,\n ...requiredToolNames,\n ...allowedOptionalToolNames,\n ...profileToolNames,\n ]).filter((toolName) => !profileExcludedToolSet.has(toolName)), input.availableToolNames);\n\n return {\n optionalToolSelectionMode,\n toolNames,\n classifierToolNames,\n requiredToolNames,\n optionalToolNames,\n excludedOptionalToolNames: uniqueStrings([\n ...optionalToolNames.filter((toolName) => !allowedOptionalToolSet.has(toolName)),\n ...optionalToolNames.filter((toolName) => profileExcludedToolSet.has(toolName)),\n ]),\n activeProfileIds,\n profileToolNames: orderToolNamesByAvailableCatalog(profileToolNames, input.availableToolNames),\n profileExcludedToolNames: orderToolNamesByAvailableCatalog(profileExcludedToolNames, input.availableToolNames),\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionDecision(\n input: AssistantWorkflowToolSelectionDecisionInput,\n): AssistantWorkflowToolSelectionDecision {\n const selectedToolNames = uniqueStrings(input.selectedToolNames);\n const comparisonPayload = buildAssistantWorkflowToolSelectionComparisonPayload(input);\n const workflowAuthorityEnabled = comparisonPayload\n ? isWorkflowAuthorityEnabled(input, comparisonPayload)\n : false;\n const authority = comparisonPayload\n ? buildAssistantWorkflowToolSelectionAuthority({\n selectedToolNames,\n workflowAvailable: true,\n workflowSuggestedToolNames: readStringArray(comparisonPayload[\"workflowSuggestedTools\"]),\n workflowSelectionCandidateToolNames: readStringArray(comparisonPayload[\"workflowSelectionCandidateTools\"]),\n workflowStatus: readWorkflowStatus(comparisonPayload),\n workflowAuthorityEnabled,\n selectionExercised: input.pruningEnabled !== false,\n })\n : buildAssistantWorkflowToolSelectionAuthority({\n selectedToolNames,\n workflowAvailable: false,\n });\n const gatedAuthority = applyWorkflowAuthorityIntentGate(authority, input, comparisonPayload);\n const effectiveReason = gatedAuthority.source === \"workflow\"\n ? gatedAuthority.reason\n : normalizeNullableString(input.selectedReason);\n const effectiveToolNames = gatedAuthority.source === \"workflow\"\n ? [...gatedAuthority.selectedToolNames]\n : selectedToolNames;\n\n return {\n comparisonPayload: comparisonPayload\n ? {\n ...comparisonPayload,\n selectedReason: effectiveReason,\n selectedToolCount: effectiveToolNames.length,\n workflowAuthoritySegmentKey: buildAssistantWorkflowToolSelectionSegmentKey({\n intentId: normalizeNullableString(input.classification?.intent) ?? \"unknown\",\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n }),\n workflowAuthorityIntentIds: normalizeOptionalStringList(input.workflowAuthorityIntentIds),\n workflowAuthoritySegmentKeys: normalizeOptionalStringList(input.workflowAuthoritySegmentKeys),\n workflowAuthorityProfileKeys: normalizeOptionalStringList(input.workflowAuthorityProfileKeys),\n authority: gatedAuthority,\n }\n : null,\n authority: gatedAuthority,\n effectiveToolNames,\n effectiveReason,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionComparisonPayload(\n input: AssistantWorkflowToolSelectionComparisonInput,\n): Record<string, unknown> | null {\n if (!input.classification) return null;\n\n const selectedToolNames = uniqueStrings(input.selectedToolNames);\n const workflowRun = buildAssistantWorkflowRun(input.workflow, {\n classification: {\n ...input.classification,\n ...(input.resolvedScope === true ? { resolvedScope: true } : {}),\n },\n availableToolNames: input.availableToolNames ?? [],\n availableContext: input.availableContext ?? null,\n });\n const workflowDecision = workflowRun.decision;\n const workflowSelectionCandidate = buildAssistantWorkflowToolSelectionCandidate({\n workflow: input.workflow,\n decision: workflowDecision,\n availableToolNames: input.availableToolNames ?? [],\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n resolvedScope: input.resolvedScope === true,\n attributeCount: countDistinctAttributes(input.classification?.entities?.attributes),\n });\n const selectedSet = new Set(selectedToolNames);\n const workflowSet = new Set(workflowDecision.workflowSuggestedTools);\n const workflowSelectionCandidateSet = new Set(workflowSelectionCandidate.toolNames);\n const workflowAuthorityProfileKey = buildAssistantWorkflowToolSelectionProfileKey({\n intentId: workflowDecision.intent,\n profileIds: workflowSelectionCandidate.activeProfileIds,\n });\n const runTrace = buildAssistantWorkflowRunTracePayload(workflowRun);\n const decisionTrace = runTrace[\"decision\"] as Record<string, unknown>;\n const executionPlanTrace = runTrace[\"executionPlan\"] as Record<string, unknown>;\n\n return {\n ...(typeof input.hop === \"number\" ? { hop: input.hop } : {}),\n ...(typeof input.pruningEnabled === \"boolean\" ? { pruningEnabled: input.pruningEnabled } : {}),\n // Keep workflow identity flat so bounded trace payload sanitizers retain it\n // even when the detailed workflowRun object is omitted.\n workflowId: workflowRun.workflowId,\n workflowVersion: workflowRun.workflowVersion,\n resolvedScope: input.resolvedScope === true,\n ...(input.selectedMode ? { selectedMode: input.selectedMode } : {}),\n ...(input.selectedReason ? { selectedReason: input.selectedReason } : {}),\n selectedToolCount: selectedToolNames.length,\n ...decisionTrace,\n workflowRun: runTrace,\n executionPlan: executionPlanTrace,\n workflowSelectionCandidateTools: workflowSelectionCandidate.toolNames,\n workflowSelectionOptionalToolMode: workflowSelectionCandidate.optionalToolSelectionMode,\n workflowSelectionExcludedOptionalTools: workflowSelectionCandidate.excludedOptionalToolNames,\n workflowSelectionActiveProfileIds: workflowSelectionCandidate.activeProfileIds,\n workflowSelectionProfileTools: workflowSelectionCandidate.profileToolNames,\n workflowSelectionProfileExcludedTools: workflowSelectionCandidate.profileExcludedToolNames,\n ...(workflowAuthorityProfileKey ? { workflowAuthorityProfileKey } : {}),\n missingWorkflowSuggestedTools: workflowDecision.workflowSuggestedTools.filter((tool) => !selectedSet.has(tool)),\n missingWorkflowSelectionCandidateTools: workflowSelectionCandidate.toolNames.filter((tool) => !selectedSet.has(tool)),\n selectedOutsideWorkflowSuggestions: selectedToolNames.filter((tool) => !workflowSet.has(tool)),\n selectedOutsideWorkflowSelectionCandidate: selectedToolNames.filter((tool) => !workflowSelectionCandidateSet.has(tool)),\n selectedToolCapabilitySummary: summarizeAssistantWorkflowToolCapabilities(\n input.workflow,\n selectedToolNames,\n ),\n workflowSuggestedToolCapabilitySummary: summarizeAssistantWorkflowToolCapabilities(\n input.workflow,\n workflowDecision.workflowSuggestedTools,\n ),\n workflowSelectionCandidateToolCapabilitySummary: summarizeAssistantWorkflowToolCapabilities(\n input.workflow,\n workflowSelectionCandidate.toolNames,\n ),\n };\n}\n\nfunction toolSelectionProfileConditionMatches(\n condition: NonNullable<AssistantWorkflowDefinition<string, string, string, string>[\"intents\"][number][\"toolSelectionProfiles\"]>[number][\"condition\"],\n input: {\n hop: number | null;\n selectedReason: string | null;\n resolvedScope: boolean;\n attributeCount: number | null;\n classifierToolNames: ReadonlySet<string>;\n },\n): boolean {\n if (!condition) return true;\n if (condition.minHop !== undefined && (input.hop === null || input.hop < condition.minHop)) return false;\n if (condition.maxHop !== undefined && (input.hop === null || input.hop > condition.maxHop)) return false;\n if (condition.selectedReason !== undefined) {\n const expectedReason = normalizeNullableString(condition.selectedReason);\n if (expectedReason === null || normalizeNullableString(input.selectedReason) !== expectedReason) return false;\n }\n if (condition.resolvedScope !== undefined && condition.resolvedScope !== input.resolvedScope) return false;\n if (\n condition.minAttributeCount !== undefined &&\n (input.attributeCount === null || input.attributeCount < condition.minAttributeCount)\n ) {\n return false;\n }\n if (\n condition.maxAttributeCount !== undefined &&\n (input.attributeCount === null || input.attributeCount > condition.maxAttributeCount)\n ) {\n return false;\n }\n if (\n condition.requiredClassifierTools !== undefined &&\n !condition.requiredClassifierTools.every((toolName) => input.classifierToolNames.has(toolName))\n ) {\n return false;\n }\n return true;\n}\n\nfunction countDistinctAttributes(values: readonly string[] | null | undefined): number | null {\n if (!Array.isArray(values)) return null;\n return new Set(\n values\n .filter((value): value is string => typeof value === \"string\")\n .map((value) => value.trim().toLocaleLowerCase())\n .filter((value) => value.length > 0),\n ).size;\n}\n\nfunction buildOptionalToolNameSet(values: readonly unknown[] | null | undefined): Set<string> | null {\n const toolNames = normalizeOptionalStringList(values);\n return toolNames === null || toolNames.length === 0 ? null : new Set(toolNames);\n}\n\nfunction orderToolNamesByAvailableCatalog(\n toolNames: string[],\n availableToolNames: readonly unknown[] | null | undefined,\n): string[] {\n const availableOrder = normalizeOptionalStringList(availableToolNames);\n if (!availableOrder?.length) return toolNames;\n const toolNameSet = new Set(toolNames);\n const ordered = availableOrder.filter((toolName) => toolNameSet.has(toolName));\n return uniqueStrings([\n ...ordered,\n ...toolNames.filter((toolName) => !ordered.includes(toolName)),\n ]);\n}\n\nexport function buildAssistantWorkflowToolSelectionAuthority(\n input: AssistantWorkflowToolSelectionAuthorityInput,\n): AssistantWorkflowToolSelectionAuthority {\n const selectedToolNames = uniqueStrings(input.selectedToolNames);\n const workflowSuggestedToolNames = uniqueStrings(input.workflowSuggestedToolNames ?? []);\n const workflowSelectionCandidateToolNames = uniqueStrings(input.workflowSelectionCandidateToolNames ?? []);\n const workflowStatus = normalizeNullableString(input.workflowStatus);\n const comparableWorkflowToolNames = workflowSelectionCandidateToolNames.length > 0\n ? workflowSelectionCandidateToolNames\n : workflowSuggestedToolNames;\n\n if (!input.workflowAvailable) {\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_unavailable\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus: null,\n };\n }\n\n if (workflowStatus === \"blocked\" || workflowStatus === \"needs-clarification\") {\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_blocked\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n if (input.workflowAuthorityEnabled && comparableWorkflowToolNames.length > 0) {\n return {\n source: \"workflow\",\n reason: sameStringSet(selectedToolNames, comparableWorkflowToolNames)\n ? \"workflow_equivalent\"\n : \"workflow_authority_enabled\",\n selectedToolNames: comparableWorkflowToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n if (input.selectionExercised === false) {\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_selection_not_exercised\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n if (comparableWorkflowToolNames.length > 0 && sameStringSet(selectedToolNames, comparableWorkflowToolNames)) {\n return {\n source: \"workflow\",\n reason: \"workflow_equivalent\",\n selectedToolNames: comparableWorkflowToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n }\n\n return {\n source: \"legacy-pruner\",\n reason: \"workflow_differs\",\n selectedToolNames,\n workflowSuggestedToolNames,\n workflowStatus,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionSegmentKey(input: {\n intentId: string | null;\n hop: number | null;\n selectedReason: string | null;\n}): string {\n return `${normalizeNullableString(input.intentId) ?? \"unknown\"}|hop:${input.hop ?? \"unknown\"}|${\n normalizeNullableString(input.selectedReason) ?? \"unknown\"\n }`;\n}\n\n/**\n * Exact active profile combinations are authority scopes. A single profile can\n * be safe in one combination and unsafe in another, so profile ids are sorted\n * and retained together with the intent.\n */\nexport function buildAssistantWorkflowToolSelectionProfileKey(input: {\n intentId: string | null;\n profileIds: readonly unknown[] | null | undefined;\n}): string | null {\n const intentId = normalizeNullableString(input.intentId);\n const profileIds = uniqueStrings(input.profileIds ?? []).sort((left, right) => left.localeCompare(right));\n if (!intentId || !profileIds.length) return null;\n return `${intentId}|profiles:${profileIds.join(\",\")}`;\n}\n\nfunction uniqueStrings(values: readonly unknown[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n if (typeof value !== \"string\") continue;\n const trimmed = value.trim();\n if (!trimmed.length || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out;\n}\n\nfunction applyWorkflowAuthorityIntentGate(\n authority: AssistantWorkflowToolSelectionAuthority,\n input: AssistantWorkflowToolSelectionDecisionInput,\n comparisonPayload: Record<string, unknown> | null,\n): AssistantWorkflowToolSelectionAuthority {\n const enabledIntentIds = normalizeOptionalStringList(input.workflowAuthorityIntentIds);\n const enabledSegmentKeys = normalizeOptionalStringList(input.workflowAuthoritySegmentKeys);\n const enabledProfileKeys = normalizeOptionalStringList(input.workflowAuthorityProfileKeys);\n if (enabledIntentIds === null && enabledSegmentKeys === null && enabledProfileKeys === null) return authority;\n if (authority.source !== \"workflow\") return authority;\n const intentId = normalizeNullableString(input.classification?.intent);\n if (intentId && enabledIntentIds?.includes(intentId)) return authority;\n const segmentKey = buildAssistantWorkflowToolSelectionSegmentKey({\n intentId: intentId ?? \"unknown\",\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n });\n if (enabledSegmentKeys?.includes(segmentKey)) return authority;\n const profileKey = comparisonPayload\n ? normalizeNullableString(comparisonPayload[\"workflowAuthorityProfileKey\"])\n : null;\n if (profileKey && enabledProfileKeys?.includes(profileKey)) return authority;\n\n return {\n ...authority,\n source: \"legacy-pruner\",\n reason: \"workflow_authority_not_enabled\",\n };\n}\n\nfunction isWorkflowAuthorityEnabled(\n input: AssistantWorkflowToolSelectionDecisionInput,\n comparisonPayload: Record<string, unknown>,\n): boolean {\n const enabledIntentIds = normalizeOptionalStringList(input.workflowAuthorityIntentIds);\n const enabledSegmentKeys = normalizeOptionalStringList(input.workflowAuthoritySegmentKeys);\n const enabledProfileKeys = normalizeOptionalStringList(input.workflowAuthorityProfileKeys);\n if (enabledIntentIds === null && enabledSegmentKeys === null && enabledProfileKeys === null) return false;\n const intentId = normalizeNullableString(input.classification?.intent);\n if (intentId && enabledIntentIds?.includes(intentId)) return true;\n const segmentKey = buildAssistantWorkflowToolSelectionSegmentKey({\n intentId: intentId ?? \"unknown\",\n hop: input.hop ?? null,\n selectedReason: input.selectedReason ?? null,\n });\n if (enabledSegmentKeys?.includes(segmentKey)) return true;\n const profileKey = normalizeNullableString(comparisonPayload[\"workflowAuthorityProfileKey\"]);\n return profileKey !== null && (enabledProfileKeys?.includes(profileKey) ?? false);\n}\n\nfunction normalizeOptionalStringList(values: readonly unknown[] | null | undefined): string[] | null {\n if (values === null || values === undefined) return null;\n return uniqueStrings(values);\n}\n\nfunction readWorkflowStatus(payload: Record<string, unknown>): string | null {\n const workflowRun = isRecord(payload[\"workflowRun\"]) ? payload[\"workflowRun\"] : null;\n return normalizeNullableString(workflowRun?.[\"status\"]);\n}\n\nfunction sameStringSet(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) return false;\n const rightSet = new Set(right);\n return left.every((item) => rightSet.has(item));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
@@ -262,6 +262,9 @@ function inferLegacyAuthorityReason(payload, selectedToolNames) {
262
262
  if (workflowStatus === "blocked" || workflowStatus === "needs-clarification") {
263
263
  return "workflow_blocked";
264
264
  }
265
+ if (payload["pruningEnabled"] === false) {
266
+ return "workflow_selection_not_exercised";
267
+ }
265
268
  const hasWorkflowTools = readStringArray(payload["workflowSelectionCandidateTools"]).length > 0 ||
266
269
  readStringArray(payload["workflowSuggestedTools"]).length > 0;
267
270
  const hasDiffSignals = readStringArray(payload["missingWorkflowSelectionCandidateTools"]).length > 0 ||
@@ -1 +1 @@
1
- {"version":3,"file":"tool-selection-trace-export.js","sourceRoot":"","sources":["../src/tool-selection-trace-export.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\nimport {\n readAssistantWorkflowTraceBoolean as readBoolean,\n readAssistantWorkflowTraceNumber as readNumber,\n readAssistantWorkflowTracePayloadRecord as readRecord,\n readAssistantWorkflowTraceString as readString,\n readAssistantWorkflowTraceStringArray as readStringArray,\n readAssistantWorkflowTraceUserMessagePreview,\n type AssistantWorkflowTraceEvent,\n} from \"./trace-events.js\";\nimport { ASSISTANT_WORKFLOW_TRACE_STAGE } from \"./trace-stages.js\";\nimport type {\n AssistantWorkflowDefinition,\n AssistantWorkflowToolContextRequirement,\n} from \"./definition.js\";\nimport {\n buildAssistantWorkflowToolSelectionDecision,\n} from \"./tool-selection-policy.js\";\nimport {\n buildAssistantWorkflowEvalCaseFromSerializedToolSelectionDecision,\n type AssistantWorkflowEvalCase,\n type AssistantWorkflowToolSelectionEvalCaseOptions,\n} from \"./eval-case.js\";\nimport {\n parseAssistantWorkflowSerializedToolSelectionDecision,\n serializeAssistantWorkflowToolSelectionDecision,\n type AssistantWorkflowSerializedToolSelectionDecision,\n} from \"./tool-selection-json.js\";\n\nexport type AssistantWorkflowToolSelectionTraceExportResult = {\n traceEventCount: number;\n candidateEventCount: number;\n decisionCount: number;\n skippedCandidateEventCount: number;\n decisions: AssistantWorkflowSerializedToolSelectionDecision[];\n};\n\nexport type AssistantWorkflowToolSelectionTraceEvalCaseOptions =\n Omit<AssistantWorkflowToolSelectionEvalCaseOptions, \"prompt\"> & {\n prompt?: string | null;\n };\n\nexport type AssistantWorkflowToolSelectionTraceEvalCaseExportResult =\n AssistantWorkflowToolSelectionTraceExportResult & {\n prompt: string | null;\n evalCaseCount: number;\n missingPromptCount: number;\n cases: AssistantWorkflowEvalCase[];\n };\n\nexport type AssistantWorkflowToolSelectionTraceCurrentReplayOptions = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n availableToolNames?: readonly string[] | null;\n availableContext?: readonly AssistantWorkflowToolContextRequirement[] | null;\n workflowAuthorityIntentIds?: readonly string[] | null;\n workflowAuthoritySegmentKeys?: readonly string[] | null;\n includeWorkflowToolCapabilities?: boolean;\n};\n\nexport function buildAssistantWorkflowSerializedToolSelectionDecisionFromTraceEvent(\n event: AssistantWorkflowTraceEvent,\n): AssistantWorkflowSerializedToolSelectionDecision | null {\n if (event.stage !== ASSISTANT_WORKFLOW_TRACE_STAGE.toolSelectionWorkflowComparison) return null;\n const payload = readRecord(event.payload);\n if (!payload) return null;\n const authority = readRecord(payload[\"authority\"]);\n const inferredWorkflowAuthorityReason = authority\n ? null\n : inferWorkflowAuthorityReason(payload);\n const selectedToolNames = authority\n ? readStringArray(authority[\"selectedToolNames\"])\n : inferredWorkflowAuthorityReason\n ? inferWorkflowAuthoritySelectedToolNames(payload)\n : inferSelectedToolNames(payload);\n const workflowSuggestedToolNames = authority\n ? readStringArray(authority[\"workflowSuggestedToolNames\"])\n : readStringArray(payload[\"workflowSuggestedTools\"]);\n const comparisonPayload = toJsonRecordOrNull(payload);\n if (!comparisonPayload) return null;\n\n return parseAssistantWorkflowSerializedToolSelectionDecision({\n schemaVersion: 1,\n authority: {\n source: authority?.[\"source\"] ?? (inferredWorkflowAuthorityReason ? \"workflow\" : \"legacy-pruner\"),\n reason: authority?.[\"reason\"] ?? inferredWorkflowAuthorityReason ??\n inferLegacyAuthorityReason(payload, selectedToolNames),\n selectedToolNames,\n workflowSuggestedToolNames: workflowSuggestedToolNames.length\n ? workflowSuggestedToolNames\n : readStringArray(payload[\"workflowSuggestedTools\"]),\n workflowStatus: typeof authority?.[\"workflowStatus\"] === \"string\"\n ? authority[\"workflowStatus\"]\n : readWorkflowStatus(payload),\n },\n effectiveToolNames: readStringArray(payload[\"effectiveToolNames\"]).length\n ? readStringArray(payload[\"effectiveToolNames\"])\n : selectedToolNames,\n effectiveReason: typeof payload[\"selectedReason\"] === \"string\" ? payload[\"selectedReason\"] : null,\n comparisonPayload,\n });\n}\n\nexport function buildAssistantWorkflowSerializedToolSelectionDecisionsFromTraceEvents(\n events: readonly AssistantWorkflowTraceEvent[],\n): AssistantWorkflowToolSelectionTraceExportResult {\n const decisions: AssistantWorkflowSerializedToolSelectionDecision[] = [];\n let candidateEventCount = 0;\n let skippedCandidateEventCount = 0;\n\n for (const event of events) {\n if (event.stage !== ASSISTANT_WORKFLOW_TRACE_STAGE.toolSelectionWorkflowComparison) continue;\n candidateEventCount += 1;\n const decision = buildAssistantWorkflowSerializedToolSelectionDecisionFromTraceEvent(event);\n if (decision) {\n decisions.push(decision);\n } else {\n skippedCandidateEventCount += 1;\n }\n }\n\n return {\n traceEventCount: events.length,\n candidateEventCount,\n decisionCount: decisions.length,\n skippedCandidateEventCount,\n decisions,\n };\n}\n\nexport function buildAssistantWorkflowCurrentSerializedToolSelectionDecisionsFromTraceEvents(\n events: readonly AssistantWorkflowTraceEvent[],\n options: AssistantWorkflowToolSelectionTraceCurrentReplayOptions,\n): AssistantWorkflowToolSelectionTraceExportResult {\n const decisions: AssistantWorkflowSerializedToolSelectionDecision[] = [];\n let candidateEventCount = 0;\n let skippedCandidateEventCount = 0;\n let latestClassifierPayload: Record<string, unknown> | null = null;\n\n for (const event of events) {\n if (event.stage === ASSISTANT_WORKFLOW_TRACE_STAGE.plannerClassifierDone) {\n latestClassifierPayload = readRecord(event.payload);\n continue;\n }\n if (event.stage !== ASSISTANT_WORKFLOW_TRACE_STAGE.toolSelectionWorkflowComparison) continue;\n\n candidateEventCount += 1;\n const decision = buildAssistantWorkflowCurrentSerializedToolSelectionDecisionFromTraceEvent(\n event,\n latestClassifierPayload,\n options,\n );\n if (decision) {\n decisions.push(decision);\n } else {\n skippedCandidateEventCount += 1;\n }\n }\n\n return {\n traceEventCount: events.length,\n candidateEventCount,\n decisionCount: decisions.length,\n skippedCandidateEventCount,\n decisions,\n };\n}\n\nexport function buildAssistantWorkflowCurrentSerializedToolSelectionDecisionFromTraceEvent(\n event: AssistantWorkflowTraceEvent,\n classifierPayload: Record<string, unknown> | null,\n options: AssistantWorkflowToolSelectionTraceCurrentReplayOptions,\n): AssistantWorkflowSerializedToolSelectionDecision | null {\n const payload = readRecord(event.payload);\n if (!payload) return null;\n const historicalDecision = buildAssistantWorkflowSerializedToolSelectionDecisionFromTraceEvent(event);\n if (!historicalDecision) return null;\n const selectedToolNames = historicalDecision.authority.selectedToolNames;\n const availableToolNames = buildCurrentReplayAvailableToolNames(\n options,\n selectedToolNames,\n historicalDecision.authority.workflowSuggestedToolNames,\n payload,\n classifierPayload,\n );\n const currentDecision = buildAssistantWorkflowToolSelectionDecision({\n workflow: options.workflow,\n classification: {\n intent: readString(classifierPayload?.[\"intent\"]) ?? readString(payload[\"intent\"]),\n presentation:\n readString(classifierPayload?.[\"presentation\"]) ??\n readString(payload[\"effectivePresentation\"]) ??\n readString(payload[\"defaultPresentation\"]),\n toolsToExpose: firstNonEmptyStringArray(\n classifierPayload?.[\"tools\"],\n classifierPayload?.[\"toolsToExpose\"],\n payload[\"classifierTools\"],\n ),\n ...(typeof classifierPayload?.[\"confidence\"] === \"number\"\n ? { confidence: classifierPayload[\"confidence\"] }\n : {}),\n ...(readString(classifierPayload?.[\"timeWindowHint\"])\n ? { timeWindowHint: readString(classifierPayload?.[\"timeWindowHint\"]) }\n : {}),\n entities: {\n containers: firstNonEmptyStringArray(classifierPayload?.[\"containers\"], payload[\"containers\"]),\n attributes: firstNonEmptyStringArray(classifierPayload?.[\"attributes\"], payload[\"attributes\"]),\n fullTopicPaths: firstNonEmptyStringArray(classifierPayload?.[\"fullTopicPaths\"], payload[\"fullTopicPaths\"]),\n },\n },\n availableToolNames,\n selectedToolNames,\n selectedMode: readString(payload[\"selectedMode\"]),\n selectedReason: readString(payload[\"selectedReason\"]),\n hop: readNumber(payload[\"hop\"]),\n pruningEnabled: readBoolean(payload[\"pruningEnabled\"]),\n availableContext: options.availableContext ?? null,\n workflowAuthorityIntentIds: options.workflowAuthorityIntentIds ?? null,\n workflowAuthoritySegmentKeys: options.workflowAuthoritySegmentKeys ?? null,\n });\n\n return serializeAssistantWorkflowToolSelectionDecision(currentDecision);\n}\n\nexport function buildAssistantWorkflowToolSelectionEvalCasesFromTraceEvents(\n events: readonly AssistantWorkflowTraceEvent[],\n options: AssistantWorkflowToolSelectionTraceEvalCaseOptions = {},\n): AssistantWorkflowToolSelectionTraceEvalCaseExportResult {\n const exportResult = buildAssistantWorkflowSerializedToolSelectionDecisionsFromTraceEvents(events);\n const prompt = normalizeOptionalString(options.prompt) ?? readPromptPreview(events);\n const cases = prompt\n ? exportResult.decisions.map((decision, index) =>\n buildAssistantWorkflowEvalCaseFromSerializedToolSelectionDecision(decision, {\n prompt,\n ...(options.id !== undefined && exportResult.decisions.length === 1 ? { id: options.id } : {}),\n ...(options.required !== undefined ? { required: options.required } : {}),\n ...(options.tags !== undefined ? { tags: options.tags } : {}),\n ...(options.source !== undefined ? { source: options.source } : {}),\n ...(options.notes !== undefined ? { notes: options.notes } : {}),\n metadata: {\n ...(options.metadata ?? {}),\n traceDecisionIndex: index,\n },\n })\n )\n : [];\n\n return {\n ...exportResult,\n prompt,\n evalCaseCount: cases.length,\n missingPromptCount: prompt ? 0 : exportResult.decisionCount,\n cases,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionTraceExportPayload(\n result: AssistantWorkflowToolSelectionTraceExportResult,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n traceEventCount: result.traceEventCount,\n candidateEventCount: result.candidateEventCount,\n decisionCount: result.decisionCount,\n skippedCandidateEventCount: result.skippedCandidateEventCount,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionTraceEvalCaseExportPayload(\n result: AssistantWorkflowToolSelectionTraceEvalCaseExportResult,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n ...buildAssistantWorkflowToolSelectionTraceExportPayload(result),\n prompt: result.prompt,\n evalCaseCount: result.evalCaseCount,\n missingPromptCount: result.missingPromptCount,\n };\n}\n\nfunction firstNonEmptyStringArray(...values: unknown[]): string[] {\n for (const value of values) {\n const strings = readStringArray(value);\n if (strings.length > 0) return strings;\n }\n return [];\n}\n\nfunction buildCurrentReplayAvailableToolNames(\n options: AssistantWorkflowToolSelectionTraceCurrentReplayOptions,\n selectedToolNames: readonly string[],\n workflowSuggestedToolNames: readonly string[],\n payload: Record<string, unknown>,\n classifierPayload: Record<string, unknown> | null,\n): string[] {\n if (options.availableToolNames !== undefined && options.availableToolNames !== null) {\n return uniqueStrings(readStringArray(options.availableToolNames));\n }\n return uniqueStrings([\n ...selectedToolNames,\n ...workflowSuggestedToolNames,\n ...(options.includeWorkflowToolCapabilities === false\n ? []\n : (options.workflow.tools ?? []).map((tool) => tool.name)),\n ...readStringArray(payload[\"workflowSuggestedTools\"]),\n ...readStringArray(payload[\"toolHints\"]),\n ...readStringArray(payload[\"requiredToolHints\"]),\n ...readStringArray(payload[\"classifierTools\"]),\n ...readStringArray(classifierPayload?.[\"tools\"]),\n ...readStringArray(classifierPayload?.[\"toolsToExpose\"]),\n ]);\n}\n\nfunction readPromptPreview(events: readonly AssistantWorkflowTraceEvent[]): string | null {\n for (const event of events) {\n const payload = readRecord(event.payload);\n if (!payload) continue;\n const candidate = readAssistantWorkflowTraceUserMessagePreview(event.stage, payload);\n if (candidate) return candidate;\n }\n return null;\n}\n\nfunction inferSelectedToolNames(payload: Record<string, unknown>): string[] {\n const explicit = readStringArray(payload[\"effectiveToolNames\"]);\n if (explicit.length) return explicit;\n const selected = readStringArray(payload[\"selectedToolNames\"]);\n if (selected.length) return selected;\n\n const candidateTools = readStringArray(payload[\"workflowSelectionCandidateTools\"]);\n const workflowSuggestedTools = readStringArray(payload[\"workflowSuggestedTools\"]);\n const comparableTools = candidateTools.length ? candidateTools : workflowSuggestedTools;\n const missingTools = candidateTools.length\n ? readStringArray(payload[\"missingWorkflowSelectionCandidateTools\"])\n : readStringArray(payload[\"missingWorkflowSuggestedTools\"]);\n const outsideTools = candidateTools.length\n ? readStringArray(payload[\"selectedOutsideWorkflowSelectionCandidate\"])\n : readStringArray(payload[\"selectedOutsideWorkflowSuggestions\"]);\n const missingSet = new Set(missingTools);\n return uniqueStrings([\n ...comparableTools.filter((toolName) => !missingSet.has(toolName)),\n ...outsideTools,\n ]);\n}\n\nfunction inferWorkflowAuthoritySelectedToolNames(payload: Record<string, unknown>): string[] {\n const explicit = readStringArray(payload[\"effectiveToolNames\"]);\n if (explicit.length) return explicit;\n const selected = readStringArray(payload[\"selectedToolNames\"]);\n if (selected.length) return selected;\n const candidateTools = readStringArray(payload[\"workflowSelectionCandidateTools\"]);\n if (candidateTools.length) return candidateTools;\n return readStringArray(payload[\"workflowSuggestedTools\"]);\n}\n\nfunction inferWorkflowAuthorityReason(payload: Record<string, unknown>): string | null {\n const selectedReason = readString(payload[\"selectedReason\"]);\n return selectedReason === \"workflow_equivalent\" || selectedReason === \"workflow_authority_enabled\"\n ? selectedReason\n : null;\n}\n\nfunction inferLegacyAuthorityReason(\n payload: Record<string, unknown>,\n selectedToolNames: readonly string[],\n): string {\n const workflowStatus = readWorkflowStatus(payload);\n if (workflowStatus === \"blocked\" || workflowStatus === \"needs-clarification\") {\n return \"workflow_blocked\";\n }\n const hasWorkflowTools = readStringArray(payload[\"workflowSelectionCandidateTools\"]).length > 0 ||\n readStringArray(payload[\"workflowSuggestedTools\"]).length > 0;\n const hasDiffSignals = readStringArray(payload[\"missingWorkflowSelectionCandidateTools\"]).length > 0 ||\n readStringArray(payload[\"missingWorkflowSuggestedTools\"]).length > 0 ||\n readStringArray(payload[\"selectedOutsideWorkflowSelectionCandidate\"]).length > 0 ||\n readStringArray(payload[\"selectedOutsideWorkflowSuggestions\"]).length > 0;\n return hasWorkflowTools || selectedToolNames.length > 0 || hasDiffSignals\n ? \"workflow_differs\"\n : \"workflow_unavailable\";\n}\n\nfunction readWorkflowStatus(payload: Record<string, unknown>): string | null {\n const workflowRun = readRecord(payload[\"workflowRun\"]);\n if (typeof workflowRun?.[\"status\"] === \"string\") return workflowRun[\"status\"];\n const executionPlan = readRecord(payload[\"executionPlan\"]);\n if (typeof executionPlan?.[\"status\"] === \"string\") return executionPlan[\"status\"];\n return null;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const trimmed = value.trim();\n if (!trimmed.length || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out;\n}\n\nfunction normalizeOptionalString(value: string | null | undefined): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n}\n\nfunction toJsonRecordOrNull(value: unknown): Record<string, AssistantWorkflowJsonValue> | null {\n if (!isJsonRecord(value)) return null;\n return value;\n}\n\nfunction isJsonRecord(value: unknown): value is Record<string, AssistantWorkflowJsonValue> {\n const record = readRecord(value);\n if (!record) return false;\n return Object.values(record).every(isJsonValue);\n}\n\nfunction isJsonValue(value: unknown): value is AssistantWorkflowJsonValue {\n if (value === null) return true;\n if (typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every(isJsonValue);\n return isJsonRecord(value);\n}\n"]}
1
+ {"version":3,"file":"tool-selection-trace-export.js","sourceRoot":"","sources":["../src/tool-selection-trace-export.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iCAAiC,IAAI,WAAW,EAChD,gCAAgC,IAAI,UAAU,EAC9C,uCAAuC,IAAI,UAAU,EACrD,gCAAgC,IAAI,UAAU,EAC9C,qCAAqC,IAAI,eAAe,EACxD,4CAA4C,GAE7C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAKnE,OAAO,EACL,2CAA2C,GAC5C,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iEAAiE,GAGlE,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,qDAAqD,EACrD,+CAA+C,GAEhD,MAAM,0BAA0B,CAAC;AAgClC,MAAM,UAAU,mEAAmE,CACjF,KAAkC;IAElC,IAAI,KAAK,CAAC,KAAK,KAAK,8BAA8B,CAAC,+BAA+B;QAAE,OAAO,IAAI,CAAC;IAChG,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,MAAM,+BAA+B,GAAG,SAAS;QAC/C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,iBAAiB,GAAG,SAAS;QACjC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC,CAAC,+BAA+B;YAC/B,CAAC,CAAC,uCAAuC,CAAC,OAAO,CAAC;YACpD,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,0BAA0B,GAAG,SAAS;QAC1C,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC1D,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEpC,OAAO,qDAAqD,CAAC;QAC3D,aAAa,EAAE,CAAC;QAChB,SAAS,EAAE;YACT,MAAM,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;YACjG,MAAM,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,IAAI,+BAA+B;gBAC9D,0BAA0B,CAAC,OAAO,EAAE,iBAAiB,CAAC;YACxD,iBAAiB;YACjB,0BAA0B,EAAE,0BAA0B,CAAC,MAAM;gBAC3D,CAAC,CAAC,0BAA0B;gBAC5B,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACtD,cAAc,EAAE,OAAO,SAAS,EAAE,CAAC,gBAAgB,CAAC,KAAK,QAAQ;gBAC/D,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBAC7B,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC;SAChC;QACD,kBAAkB,EAAE,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM;YACvE,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAChD,CAAC,CAAC,iBAAiB;QACrB,eAAe,EAAE,OAAO,OAAO,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI;QACjG,iBAAiB;KAClB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qEAAqE,CACnF,MAA8C;IAE9C,MAAM,SAAS,GAAuD,EAAE,CAAC;IACzE,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,0BAA0B,GAAG,CAAC,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,8BAA8B,CAAC,+BAA+B;YAAE,SAAS;QAC7F,mBAAmB,IAAI,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,mEAAmE,CAAC,KAAK,CAAC,CAAC;QAC5F,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,0BAA0B,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,MAAM;QAC9B,mBAAmB;QACnB,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,0BAA0B;QAC1B,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4EAA4E,CAC1F,MAA8C,EAC9C,OAAgE;IAEhE,MAAM,SAAS,GAAuD,EAAE,CAAC;IACzE,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,0BAA0B,GAAG,CAAC,CAAC;IACnC,IAAI,uBAAuB,GAAmC,IAAI,CAAC;IAEnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,KAAK,KAAK,8BAA8B,CAAC,qBAAqB,EAAE,CAAC;YACzE,uBAAuB,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,KAAK,8BAA8B,CAAC,+BAA+B;YAAE,SAAS;QAE7F,mBAAmB,IAAI,CAAC,CAAC;QACzB,MAAM,QAAQ,GAAG,0EAA0E,CACzF,KAAK,EACL,uBAAuB,EACvB,OAAO,CACR,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,0BAA0B,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,MAAM;QAC9B,mBAAmB;QACnB,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,0BAA0B;QAC1B,SAAS;KACV,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0EAA0E,CACxF,KAAkC,EAClC,iBAAiD,EACjD,OAAgE;IAEhE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,kBAAkB,GAAG,mEAAmE,CAAC,KAAK,CAAC,CAAC;IACtG,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,SAAS,CAAC,iBAAiB,CAAC;IACzE,MAAM,kBAAkB,GAAG,oCAAoC,CAC7D,OAAO,EACP,iBAAiB,EACjB,kBAAkB,CAAC,SAAS,CAAC,0BAA0B,EACvD,OAAO,EACP,iBAAiB,CAClB,CAAC;IACF,MAAM,eAAe,GAAG,2CAA2C,CAAC;QAClE,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE;YACd,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClF,YAAY,EACV,UAAU,CAAC,iBAAiB,EAAE,CAAC,cAAc,CAAC,CAAC;gBAC/C,UAAU,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBAC5C,UAAU,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC5C,aAAa,EAAE,wBAAwB,CACrC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAC5B,iBAAiB,EAAE,CAAC,eAAe,CAAC,EACpC,OAAO,CAAC,iBAAiB,CAAC,CAC3B;YACD,GAAG,CAAC,OAAO,iBAAiB,EAAE,CAAC,YAAY,CAAC,KAAK,QAAQ;gBACvD,CAAC,CAAC,EAAE,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,EAAE;gBACjD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC,CAAC;gBACnD,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE;gBACvE,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ,EAAE;gBACR,UAAU,EAAE,wBAAwB,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC9F,UAAU,EAAE,wBAAwB,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC9F,cAAc,EAAE,wBAAwB,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;aAC3G;SACF;QACD,kBAAkB;QAClB,iBAAiB;QACjB,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACjD,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACrD,GAAG,EAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;QAClD,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,IAAI,IAAI;QACtE,4BAA4B,EAAE,OAAO,CAAC,4BAA4B,IAAI,IAAI;KAC3E,CAAC,CAAC;IAEH,OAAO,+CAA+C,CAAC,eAAe,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,2DAA2D,CACzE,MAA8C,EAC9C,UAA8D,EAAE;IAEhE,MAAM,YAAY,GAAG,qEAAqE,CAAC,MAAM,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,MAAM;QAClB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAC7C,iEAAiE,CAAC,QAAQ,EAAE;YAC1E,MAAM;YACN,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,QAAQ,EAAE;gBACR,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;gBAC3B,kBAAkB,EAAE,KAAK;aAC1B;SACF,CAAC,CACH;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,GAAG,YAAY;QACf,MAAM;QACN,aAAa,EAAE,KAAK,CAAC,MAAM;QAC3B,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa;QAC3D,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qDAAqD,CACnE,MAAuD;IAEvD,OAAO;QACL,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,0BAA0B,EAAE,MAAM,CAAC,0BAA0B;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6DAA6D,CAC3E,MAA+D;IAE/D,OAAO;QACL,GAAG,qDAAqD,CAAC,MAAM,CAAC;QAChE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAG,MAAiB;IACpD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC;IACzC,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,oCAAoC,CAC3C,OAAgE,EAChE,iBAAoC,EACpC,0BAA6C,EAC7C,OAAgC,EAChC,iBAAiD;IAEjD,IAAI,OAAO,CAAC,kBAAkB,KAAK,SAAS,IAAI,OAAO,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACpF,OAAO,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,aAAa,CAAC;QACnB,GAAG,iBAAiB;QACpB,GAAG,0BAA0B;QAC7B,GAAG,CAAC,OAAO,CAAC,+BAA+B,KAAK,KAAK;YACnD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,GAAG,eAAe,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACrD,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxC,GAAG,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAChD,GAAG,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC9C,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC;QAChD,GAAG,eAAe,CAAC,iBAAiB,EAAE,CAAC,eAAe,CAAC,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,MAA8C;IACvE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,SAAS,GAAG,4CAA4C,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrF,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAgC;IAC9D,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IAErC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACnF,MAAM,sBAAsB,GAAG,eAAe,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAClF,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACxF,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM;QACxC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QACpE,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM;QACxC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;QACvE,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACzC,OAAO,aAAa,CAAC;QACnB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClE,GAAG,YAAY;KAChB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uCAAuC,CAAC,OAAgC;IAC/E,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrC,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACrC,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACnF,IAAI,cAAc,CAAC,MAAM;QAAE,OAAO,cAAc,CAAC;IACjD,OAAO,eAAe,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAgC;IACpE,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC7D,OAAO,cAAc,KAAK,qBAAqB,IAAI,cAAc,KAAK,4BAA4B;QAChG,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,0BAA0B,CACjC,OAAgC,EAChC,iBAAoC;IAEpC,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,qBAAqB,EAAE,CAAC;QAC7E,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,KAAK,EAAE,CAAC;QACxC,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IACD,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAC7F,eAAe,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAClG,eAAe,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QACpE,eAAe,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;QAChF,eAAe,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5E,OAAO,gBAAgB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc;QACvE,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,sBAAsB,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAgC;IAC1D,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IACvD,IAAI,OAAO,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAC3D,IAAI,OAAO,aAAa,EAAE,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,SAAS;QACnD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAgC;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["import type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\nimport {\n readAssistantWorkflowTraceBoolean as readBoolean,\n readAssistantWorkflowTraceNumber as readNumber,\n readAssistantWorkflowTracePayloadRecord as readRecord,\n readAssistantWorkflowTraceString as readString,\n readAssistantWorkflowTraceStringArray as readStringArray,\n readAssistantWorkflowTraceUserMessagePreview,\n type AssistantWorkflowTraceEvent,\n} from \"./trace-events.js\";\nimport { ASSISTANT_WORKFLOW_TRACE_STAGE } from \"./trace-stages.js\";\nimport type {\n AssistantWorkflowDefinition,\n AssistantWorkflowToolContextRequirement,\n} from \"./definition.js\";\nimport {\n buildAssistantWorkflowToolSelectionDecision,\n} from \"./tool-selection-policy.js\";\nimport {\n buildAssistantWorkflowEvalCaseFromSerializedToolSelectionDecision,\n type AssistantWorkflowEvalCase,\n type AssistantWorkflowToolSelectionEvalCaseOptions,\n} from \"./eval-case.js\";\nimport {\n parseAssistantWorkflowSerializedToolSelectionDecision,\n serializeAssistantWorkflowToolSelectionDecision,\n type AssistantWorkflowSerializedToolSelectionDecision,\n} from \"./tool-selection-json.js\";\n\nexport type AssistantWorkflowToolSelectionTraceExportResult = {\n traceEventCount: number;\n candidateEventCount: number;\n decisionCount: number;\n skippedCandidateEventCount: number;\n decisions: AssistantWorkflowSerializedToolSelectionDecision[];\n};\n\nexport type AssistantWorkflowToolSelectionTraceEvalCaseOptions =\n Omit<AssistantWorkflowToolSelectionEvalCaseOptions, \"prompt\"> & {\n prompt?: string | null;\n };\n\nexport type AssistantWorkflowToolSelectionTraceEvalCaseExportResult =\n AssistantWorkflowToolSelectionTraceExportResult & {\n prompt: string | null;\n evalCaseCount: number;\n missingPromptCount: number;\n cases: AssistantWorkflowEvalCase[];\n };\n\nexport type AssistantWorkflowToolSelectionTraceCurrentReplayOptions = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n availableToolNames?: readonly string[] | null;\n availableContext?: readonly AssistantWorkflowToolContextRequirement[] | null;\n workflowAuthorityIntentIds?: readonly string[] | null;\n workflowAuthoritySegmentKeys?: readonly string[] | null;\n includeWorkflowToolCapabilities?: boolean;\n};\n\nexport function buildAssistantWorkflowSerializedToolSelectionDecisionFromTraceEvent(\n event: AssistantWorkflowTraceEvent,\n): AssistantWorkflowSerializedToolSelectionDecision | null {\n if (event.stage !== ASSISTANT_WORKFLOW_TRACE_STAGE.toolSelectionWorkflowComparison) return null;\n const payload = readRecord(event.payload);\n if (!payload) return null;\n const authority = readRecord(payload[\"authority\"]);\n const inferredWorkflowAuthorityReason = authority\n ? null\n : inferWorkflowAuthorityReason(payload);\n const selectedToolNames = authority\n ? readStringArray(authority[\"selectedToolNames\"])\n : inferredWorkflowAuthorityReason\n ? inferWorkflowAuthoritySelectedToolNames(payload)\n : inferSelectedToolNames(payload);\n const workflowSuggestedToolNames = authority\n ? readStringArray(authority[\"workflowSuggestedToolNames\"])\n : readStringArray(payload[\"workflowSuggestedTools\"]);\n const comparisonPayload = toJsonRecordOrNull(payload);\n if (!comparisonPayload) return null;\n\n return parseAssistantWorkflowSerializedToolSelectionDecision({\n schemaVersion: 1,\n authority: {\n source: authority?.[\"source\"] ?? (inferredWorkflowAuthorityReason ? \"workflow\" : \"legacy-pruner\"),\n reason: authority?.[\"reason\"] ?? inferredWorkflowAuthorityReason ??\n inferLegacyAuthorityReason(payload, selectedToolNames),\n selectedToolNames,\n workflowSuggestedToolNames: workflowSuggestedToolNames.length\n ? workflowSuggestedToolNames\n : readStringArray(payload[\"workflowSuggestedTools\"]),\n workflowStatus: typeof authority?.[\"workflowStatus\"] === \"string\"\n ? authority[\"workflowStatus\"]\n : readWorkflowStatus(payload),\n },\n effectiveToolNames: readStringArray(payload[\"effectiveToolNames\"]).length\n ? readStringArray(payload[\"effectiveToolNames\"])\n : selectedToolNames,\n effectiveReason: typeof payload[\"selectedReason\"] === \"string\" ? payload[\"selectedReason\"] : null,\n comparisonPayload,\n });\n}\n\nexport function buildAssistantWorkflowSerializedToolSelectionDecisionsFromTraceEvents(\n events: readonly AssistantWorkflowTraceEvent[],\n): AssistantWorkflowToolSelectionTraceExportResult {\n const decisions: AssistantWorkflowSerializedToolSelectionDecision[] = [];\n let candidateEventCount = 0;\n let skippedCandidateEventCount = 0;\n\n for (const event of events) {\n if (event.stage !== ASSISTANT_WORKFLOW_TRACE_STAGE.toolSelectionWorkflowComparison) continue;\n candidateEventCount += 1;\n const decision = buildAssistantWorkflowSerializedToolSelectionDecisionFromTraceEvent(event);\n if (decision) {\n decisions.push(decision);\n } else {\n skippedCandidateEventCount += 1;\n }\n }\n\n return {\n traceEventCount: events.length,\n candidateEventCount,\n decisionCount: decisions.length,\n skippedCandidateEventCount,\n decisions,\n };\n}\n\nexport function buildAssistantWorkflowCurrentSerializedToolSelectionDecisionsFromTraceEvents(\n events: readonly AssistantWorkflowTraceEvent[],\n options: AssistantWorkflowToolSelectionTraceCurrentReplayOptions,\n): AssistantWorkflowToolSelectionTraceExportResult {\n const decisions: AssistantWorkflowSerializedToolSelectionDecision[] = [];\n let candidateEventCount = 0;\n let skippedCandidateEventCount = 0;\n let latestClassifierPayload: Record<string, unknown> | null = null;\n\n for (const event of events) {\n if (event.stage === ASSISTANT_WORKFLOW_TRACE_STAGE.plannerClassifierDone) {\n latestClassifierPayload = readRecord(event.payload);\n continue;\n }\n if (event.stage !== ASSISTANT_WORKFLOW_TRACE_STAGE.toolSelectionWorkflowComparison) continue;\n\n candidateEventCount += 1;\n const decision = buildAssistantWorkflowCurrentSerializedToolSelectionDecisionFromTraceEvent(\n event,\n latestClassifierPayload,\n options,\n );\n if (decision) {\n decisions.push(decision);\n } else {\n skippedCandidateEventCount += 1;\n }\n }\n\n return {\n traceEventCount: events.length,\n candidateEventCount,\n decisionCount: decisions.length,\n skippedCandidateEventCount,\n decisions,\n };\n}\n\nexport function buildAssistantWorkflowCurrentSerializedToolSelectionDecisionFromTraceEvent(\n event: AssistantWorkflowTraceEvent,\n classifierPayload: Record<string, unknown> | null,\n options: AssistantWorkflowToolSelectionTraceCurrentReplayOptions,\n): AssistantWorkflowSerializedToolSelectionDecision | null {\n const payload = readRecord(event.payload);\n if (!payload) return null;\n const historicalDecision = buildAssistantWorkflowSerializedToolSelectionDecisionFromTraceEvent(event);\n if (!historicalDecision) return null;\n const selectedToolNames = historicalDecision.authority.selectedToolNames;\n const availableToolNames = buildCurrentReplayAvailableToolNames(\n options,\n selectedToolNames,\n historicalDecision.authority.workflowSuggestedToolNames,\n payload,\n classifierPayload,\n );\n const currentDecision = buildAssistantWorkflowToolSelectionDecision({\n workflow: options.workflow,\n classification: {\n intent: readString(classifierPayload?.[\"intent\"]) ?? readString(payload[\"intent\"]),\n presentation:\n readString(classifierPayload?.[\"presentation\"]) ??\n readString(payload[\"effectivePresentation\"]) ??\n readString(payload[\"defaultPresentation\"]),\n toolsToExpose: firstNonEmptyStringArray(\n classifierPayload?.[\"tools\"],\n classifierPayload?.[\"toolsToExpose\"],\n payload[\"classifierTools\"],\n ),\n ...(typeof classifierPayload?.[\"confidence\"] === \"number\"\n ? { confidence: classifierPayload[\"confidence\"] }\n : {}),\n ...(readString(classifierPayload?.[\"timeWindowHint\"])\n ? { timeWindowHint: readString(classifierPayload?.[\"timeWindowHint\"]) }\n : {}),\n entities: {\n containers: firstNonEmptyStringArray(classifierPayload?.[\"containers\"], payload[\"containers\"]),\n attributes: firstNonEmptyStringArray(classifierPayload?.[\"attributes\"], payload[\"attributes\"]),\n fullTopicPaths: firstNonEmptyStringArray(classifierPayload?.[\"fullTopicPaths\"], payload[\"fullTopicPaths\"]),\n },\n },\n availableToolNames,\n selectedToolNames,\n selectedMode: readString(payload[\"selectedMode\"]),\n selectedReason: readString(payload[\"selectedReason\"]),\n hop: readNumber(payload[\"hop\"]),\n pruningEnabled: readBoolean(payload[\"pruningEnabled\"]),\n availableContext: options.availableContext ?? null,\n workflowAuthorityIntentIds: options.workflowAuthorityIntentIds ?? null,\n workflowAuthoritySegmentKeys: options.workflowAuthoritySegmentKeys ?? null,\n });\n\n return serializeAssistantWorkflowToolSelectionDecision(currentDecision);\n}\n\nexport function buildAssistantWorkflowToolSelectionEvalCasesFromTraceEvents(\n events: readonly AssistantWorkflowTraceEvent[],\n options: AssistantWorkflowToolSelectionTraceEvalCaseOptions = {},\n): AssistantWorkflowToolSelectionTraceEvalCaseExportResult {\n const exportResult = buildAssistantWorkflowSerializedToolSelectionDecisionsFromTraceEvents(events);\n const prompt = normalizeOptionalString(options.prompt) ?? readPromptPreview(events);\n const cases = prompt\n ? exportResult.decisions.map((decision, index) =>\n buildAssistantWorkflowEvalCaseFromSerializedToolSelectionDecision(decision, {\n prompt,\n ...(options.id !== undefined && exportResult.decisions.length === 1 ? { id: options.id } : {}),\n ...(options.required !== undefined ? { required: options.required } : {}),\n ...(options.tags !== undefined ? { tags: options.tags } : {}),\n ...(options.source !== undefined ? { source: options.source } : {}),\n ...(options.notes !== undefined ? { notes: options.notes } : {}),\n metadata: {\n ...(options.metadata ?? {}),\n traceDecisionIndex: index,\n },\n })\n )\n : [];\n\n return {\n ...exportResult,\n prompt,\n evalCaseCount: cases.length,\n missingPromptCount: prompt ? 0 : exportResult.decisionCount,\n cases,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionTraceExportPayload(\n result: AssistantWorkflowToolSelectionTraceExportResult,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n traceEventCount: result.traceEventCount,\n candidateEventCount: result.candidateEventCount,\n decisionCount: result.decisionCount,\n skippedCandidateEventCount: result.skippedCandidateEventCount,\n };\n}\n\nexport function buildAssistantWorkflowToolSelectionTraceEvalCaseExportPayload(\n result: AssistantWorkflowToolSelectionTraceEvalCaseExportResult,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n ...buildAssistantWorkflowToolSelectionTraceExportPayload(result),\n prompt: result.prompt,\n evalCaseCount: result.evalCaseCount,\n missingPromptCount: result.missingPromptCount,\n };\n}\n\nfunction firstNonEmptyStringArray(...values: unknown[]): string[] {\n for (const value of values) {\n const strings = readStringArray(value);\n if (strings.length > 0) return strings;\n }\n return [];\n}\n\nfunction buildCurrentReplayAvailableToolNames(\n options: AssistantWorkflowToolSelectionTraceCurrentReplayOptions,\n selectedToolNames: readonly string[],\n workflowSuggestedToolNames: readonly string[],\n payload: Record<string, unknown>,\n classifierPayload: Record<string, unknown> | null,\n): string[] {\n if (options.availableToolNames !== undefined && options.availableToolNames !== null) {\n return uniqueStrings(readStringArray(options.availableToolNames));\n }\n return uniqueStrings([\n ...selectedToolNames,\n ...workflowSuggestedToolNames,\n ...(options.includeWorkflowToolCapabilities === false\n ? []\n : (options.workflow.tools ?? []).map((tool) => tool.name)),\n ...readStringArray(payload[\"workflowSuggestedTools\"]),\n ...readStringArray(payload[\"toolHints\"]),\n ...readStringArray(payload[\"requiredToolHints\"]),\n ...readStringArray(payload[\"classifierTools\"]),\n ...readStringArray(classifierPayload?.[\"tools\"]),\n ...readStringArray(classifierPayload?.[\"toolsToExpose\"]),\n ]);\n}\n\nfunction readPromptPreview(events: readonly AssistantWorkflowTraceEvent[]): string | null {\n for (const event of events) {\n const payload = readRecord(event.payload);\n if (!payload) continue;\n const candidate = readAssistantWorkflowTraceUserMessagePreview(event.stage, payload);\n if (candidate) return candidate;\n }\n return null;\n}\n\nfunction inferSelectedToolNames(payload: Record<string, unknown>): string[] {\n const explicit = readStringArray(payload[\"effectiveToolNames\"]);\n if (explicit.length) return explicit;\n const selected = readStringArray(payload[\"selectedToolNames\"]);\n if (selected.length) return selected;\n\n const candidateTools = readStringArray(payload[\"workflowSelectionCandidateTools\"]);\n const workflowSuggestedTools = readStringArray(payload[\"workflowSuggestedTools\"]);\n const comparableTools = candidateTools.length ? candidateTools : workflowSuggestedTools;\n const missingTools = candidateTools.length\n ? readStringArray(payload[\"missingWorkflowSelectionCandidateTools\"])\n : readStringArray(payload[\"missingWorkflowSuggestedTools\"]);\n const outsideTools = candidateTools.length\n ? readStringArray(payload[\"selectedOutsideWorkflowSelectionCandidate\"])\n : readStringArray(payload[\"selectedOutsideWorkflowSuggestions\"]);\n const missingSet = new Set(missingTools);\n return uniqueStrings([\n ...comparableTools.filter((toolName) => !missingSet.has(toolName)),\n ...outsideTools,\n ]);\n}\n\nfunction inferWorkflowAuthoritySelectedToolNames(payload: Record<string, unknown>): string[] {\n const explicit = readStringArray(payload[\"effectiveToolNames\"]);\n if (explicit.length) return explicit;\n const selected = readStringArray(payload[\"selectedToolNames\"]);\n if (selected.length) return selected;\n const candidateTools = readStringArray(payload[\"workflowSelectionCandidateTools\"]);\n if (candidateTools.length) return candidateTools;\n return readStringArray(payload[\"workflowSuggestedTools\"]);\n}\n\nfunction inferWorkflowAuthorityReason(payload: Record<string, unknown>): string | null {\n const selectedReason = readString(payload[\"selectedReason\"]);\n return selectedReason === \"workflow_equivalent\" || selectedReason === \"workflow_authority_enabled\"\n ? selectedReason\n : null;\n}\n\nfunction inferLegacyAuthorityReason(\n payload: Record<string, unknown>,\n selectedToolNames: readonly string[],\n): string {\n const workflowStatus = readWorkflowStatus(payload);\n if (workflowStatus === \"blocked\" || workflowStatus === \"needs-clarification\") {\n return \"workflow_blocked\";\n }\n if (payload[\"pruningEnabled\"] === false) {\n return \"workflow_selection_not_exercised\";\n }\n const hasWorkflowTools = readStringArray(payload[\"workflowSelectionCandidateTools\"]).length > 0 ||\n readStringArray(payload[\"workflowSuggestedTools\"]).length > 0;\n const hasDiffSignals = readStringArray(payload[\"missingWorkflowSelectionCandidateTools\"]).length > 0 ||\n readStringArray(payload[\"missingWorkflowSuggestedTools\"]).length > 0 ||\n readStringArray(payload[\"selectedOutsideWorkflowSelectionCandidate\"]).length > 0 ||\n readStringArray(payload[\"selectedOutsideWorkflowSuggestions\"]).length > 0;\n return hasWorkflowTools || selectedToolNames.length > 0 || hasDiffSignals\n ? \"workflow_differs\"\n : \"workflow_unavailable\";\n}\n\nfunction readWorkflowStatus(payload: Record<string, unknown>): string | null {\n const workflowRun = readRecord(payload[\"workflowRun\"]);\n if (typeof workflowRun?.[\"status\"] === \"string\") return workflowRun[\"status\"];\n const executionPlan = readRecord(payload[\"executionPlan\"]);\n if (typeof executionPlan?.[\"status\"] === \"string\") return executionPlan[\"status\"];\n return null;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n const trimmed = value.trim();\n if (!trimmed.length || seen.has(trimmed)) continue;\n seen.add(trimmed);\n out.push(trimmed);\n }\n return out;\n}\n\nfunction normalizeOptionalString(value: string | null | undefined): string | null {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n}\n\nfunction toJsonRecordOrNull(value: unknown): Record<string, AssistantWorkflowJsonValue> | null {\n if (!isJsonRecord(value)) return null;\n return value;\n}\n\nfunction isJsonRecord(value: unknown): value is Record<string, AssistantWorkflowJsonValue> {\n const record = readRecord(value);\n if (!record) return false;\n return Object.values(record).every(isJsonValue);\n}\n\nfunction isJsonValue(value: unknown): value is AssistantWorkflowJsonValue {\n if (value === null) return true;\n if (typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every(isJsonValue);\n return isJsonRecord(value);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uns-kit/assistant-workflow",
3
- "version": "2.0.78",
3
+ "version": "2.0.79",
4
4
  "description": "Typed, provider-neutral workflow definitions, policies, execution plans, and trace helpers for assistants.",
5
5
  "author": "Aljosa Vister",
6
6
  "license": "MIT",