autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
68 lines (67 loc) • 3.09 kB
JavaScript
/**
* 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);
});
}