UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

68 lines (67 loc) 3.09 kB
/** * Bootstrap 基础维度定义 + 维度条件化过滤 * * **v2: 从统一维度注册表 (DimensionRegistry) 派生** * * 此模块现在是 DimensionRegistry 的瘦适配层: * - `baseDimensions` 从 DIMENSION_REGISTRY 转换为旧格式,保持下游 API 兼容 * - `resolveActiveDimensions()` 委托给 DimensionRegistry.resolveActiveDimensions() * - `BaseDimension` 接口保留给 MissionBriefingBuilder 等消费者使用 * * 调用方: * - bootstrap.js (内部 Agent) — Phase 4 构建响应骨架 + Phase 5 维度填充 * - bootstrap-external.js (外部 Agent) — Mission Briefing 中的维度清单 */ import { resolveActiveDimensions as _resolveActive, DIMENSION_REGISTRY, } from '#domain/dimension/index.js'; /** * 将 UnifiedDimension 转换为旧 BaseDimension 格式 * 保持下游 MissionBriefingBuilder / dimension-configs 兼容 */ function toBaseDimension(dim) { return { id: dim.id, label: dim.label, guide: dim.extractionGuide, knowledgeTypes: [...dim.allowedKnowledgeTypes], skillWorthy: false, dualOutput: false, conditions: dim.conditions ? { languages: dim.conditions.languages ? [...dim.conditions.languages] : undefined, frameworks: dim.conditions.frameworks ? [...dim.conditions.frameworks] : undefined, } : undefined, tierHint: dim.tierHint, }; } /** * 从统一注册表派生的维度列表 * 保持数组结构与旧 baseDimensions 兼容 */ export const baseDimensions = DIMENSION_REGISTRY.map(toBaseDimension); // ═══════════════════════════════════════════════════════════ // 维度条件化过滤 // ═══════════════════════════════════════════════════════════ /** * 根据项目主语言和检测到的框架过滤条件维度 * @param allDimensions 所有维度定义(含 conditions 字段) * @param primaryLang 主语言 * @param detectedFrameworks 检测到的框架 * @returns 适用的维度列表 */ export function resolveActiveDimensions(allDimensions, primaryLang, detectedFrameworks = []) { // 若传入的是完整 baseDimensions,直接委托给注册表 if (allDimensions === baseDimensions) { return _resolveActive(primaryLang, detectedFrameworks).map(toBaseDimension); } // 若传入自定义维度列表(如 Enhancement Pack 追加),使用原有逻辑 return allDimensions.filter((dim) => { if (!dim.conditions) { return true; } const langMatch = !dim.conditions.languages || dim.conditions.languages.includes(primaryLang); const fwMatch = !dim.conditions.frameworks || dim.conditions.frameworks.some((f) => detectedFrameworks.includes(f)); return langMatch && (dim.conditions.frameworks ? fwMatch : true); }); }