UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

46 lines (45 loc) 2.16 kB
/** _shared.js — 多个工具模块共享的常量和辅助函数 */ import path from 'node:path'; import { SKILLS_DIR as _SKILLS_DIR, PACKAGE_ROOT } from '#shared/package-root.js'; export const PROJECT_ROOT = PACKAGE_ROOT; /** skills/ 目录绝对路径 */ export const SKILLS_DIR = _SKILLS_DIR; /** 项目级 skills 目录 */ export const PROJECT_SKILLS_DIR = path.resolve(PACKAGE_ROOT, '.autosnippet', 'skills'); // Bootstrap 维度展示分组 — 从 DimensionRegistry 自动生成 export { DIMENSION_DISPLAY_GROUP } from '#domain/dimension/DimensionRegistry.js'; /** * 基于维度元数据 (dimensionMeta) 检查提交是否合法 * @param dimensionMeta * @param params submit_knowledge 的参数 * @returns | null} 不合法返回 rejected,合法返回 null */ export function checkDimensionType(dimensionMeta, params, logger) { // 1. knowledgeType 校验 — 不在允许列表时自动修正为第一个允许类型 const allowed = dimensionMeta.allowedKnowledgeTypes || []; if (allowed.length > 0 && params.knowledgeType) { if (!allowed.includes(params.knowledgeType)) { const corrected = allowed[0]; logger?.warn(`[submit_knowledge] knowledgeType "${params.knowledgeType}" → "${corrected}" (auto-corrected for dimension "${dimensionMeta.id}")`); params.knowledgeType = corrected; } } return null; } /** * 剥离标题中冗余的项目名前缀(如 "BiliDili 分页控制器" → "分页控制器") * 同一知识库内所有条目都属于同一项目,标题中重复项目名没有信息量。 */ export function stripProjectNamePrefix(title, projectRoot) { if (!title || !projectRoot) { return title; } const projectName = path.basename(projectRoot); if (!projectName || projectName.length < 2) { return title; } // 匹配: "ProjectName 标题" / "ProjectName的标题" / "ProjectName — 标题" const prefix = new RegExp(`^${projectName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*[的—–-]?\\s*`, 'i'); const stripped = title.replace(prefix, ''); return stripped.length > 0 ? stripped : title; }