feat: 平台标记单一源 PLATFORM_GROUPS + catalog 重生成 platformTag 生效

迁移前置项(指南五件小事 #1 + 第 0 步作业 #2):
- register-all.ts 新增 PLATFORM_GROUPS 单一权威表(33 域全标 win32,darwin/linux 仅类型占位)
- registerAll 逐域加载时把平台默认值落进 meta.platforms(能力显式声明优先);
  新增 buildDomainPlatformMap 供构建脚本与运行时共用同一张表
- build-catalog.mjs 删除 WIN32_GROUPS 硬编码,platformTag 从包内分组表派生(改 tsx 运行)
- 守卫测试 platform-groups.test.ts:域无缺行 / 不偷填非 win32 数据 / meta 派生一致
- catalog.json 重生成:687 个组件获得 platformTag=win32(此前从未生效)
- 源数据恢复:对面重构删了 shizai-catalog-data.js,从其历史 commit 7bc627c8 恢复到
  temp/catalog-source/(不入库)并作为回退路径
- catalog-overrides 增强 addFields 支持;把此前直接改 catalog.json 的 96 处假必填修正、
  label 修正、Screenlock 字段清理、12 个实现读取但源数据缺失的字段全部沉淀进 overrides,
  重生成后参数审计 A/B 类保持 0/0
This commit is contained in:
yu committed 2026-11-05 17:53:07 +08:00
1 parent a7709aefbb
commit 8414c4f355
9 files changed
+1002 -125520

No files matched your search

+22 -1
View File
@@ -13,6 +13,9 @@ export interface CapabilityParamMeta {
description?: string;
}
/** 平台类型;现阶段只有 win32 有实现,darwin/linux 仅类型占位(dev-conventions 规则 4) */
export type CapabilityPlatform = "win32" | "darwin" | "linux";
export interface CapabilityMeta {
/** 一句话能力摘要(中文) */
summary?: string;
@@ -27,7 +30,7 @@ export interface CapabilityMeta {
/** 执行中是否需要回传截图(Agent 侧视觉判断用) */
needsScreenshot?: boolean;
/** 平台限制;省略表示跨平台 */
platforms?: Array<"win32">;
platforms?: CapabilityPlatform[];
}
const handlers = new Map<string, CapabilityHandler>();
@@ -60,3 +63,21 @@ export function capabilityIds(): string[] {
export function capabilityCount(): number {
return handlers.size;
}
/**
* 给一批能力落平台默认值(来自 register-all.ts 的 PLATFORM_GROUPS 单一权威表)。
* - 空数组 = 平台无限制,不落 meta;
* - 已有 meta 且已声明 platforms 的不覆盖(能力可显式声明更窄的平台限制);
* - 无 meta 的补一个只含 platforms 的 meta。
*/
export function applyPlatformDefaults(ids: string[], platforms: CapabilityPlatform[]): void {
if (!platforms.length) return;
for (const id of ids) {
const meta = metas.get(id);
if (meta) {
if (!meta.platforms) metas.set(id, { ...meta, platforms: [...platforms] });
} else {
metas.set(id, { platforms: [...platforms] });
}
}
}