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