import { buildCanonicalIndex, type CanonicalIndex, type CanonicalModeOverrides, evaluateSubBlockCondition, getCanonicalValues, isCanonicalPair, reindexToolCanonicalModes, resolveCanonicalMode, resolveDependencyValue, type SubBlockCondition, scopeCanonicalModesForTool, } from '@/lib/workflows/subblocks/visibility' import type { SubBlockConfig as BlockSubBlockConfig } from '@/blocks/types' export { buildCanonicalIndex, type CanonicalIndex, type CanonicalModeOverrides, evaluateSubBlockCondition, isCanonicalPair, reindexToolCanonicalModes, resolveCanonicalMode, resolveDependencyValue, scopeCanonicalModesForTool, type SubBlockCondition, } export interface ToolParamContext { blockType: string subBlocks: BlockSubBlockConfig[] canonicalIndex: CanonicalIndex values: Record /** * Canonical-id-keyed mode overrides (the tool-scoped `canonicalModes`) so the preview honors an * explicit basic/advanced toggle, matching execution. Omitted -> the value heuristic. */ overrides?: CanonicalModeOverrides } /** * Build preview context values for selectors that need dependency resolution. * Resolves canonical values so selectors get the correct credential/dependency values. */ export function buildPreviewContextValues( params: Record, context: ToolParamContext ): Record { const result: Record = { ...params } for (const [canonicalId, group] of Object.entries(context.canonicalIndex.groupsById)) { if (isCanonicalPair(group)) { const mode = resolveCanonicalMode(group, context.values, context.overrides) const { basicValue, advancedValue } = getCanonicalValues(group, context.values) result[canonicalId] = mode === 'advanced' ? (advancedValue ?? basicValue) : (basicValue ?? advancedValue) } } return result }