From ba526ea09ea04cf4e34e6ade03fbb5b5365b10fa Mon Sep 17 00:00:00 2001 From: catlog22 Date: Thu, 15 Jan 2026 18:58:42 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Dashboard=20?= =?UTF-8?q?=E6=A6=82=E5=86=B5=E9=A1=B5=E9=9D=A2=E6=97=A0=E6=B3=95=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=A1=B9=E7=9B=AE=E4=BF=A1=E6=81=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加 extractStringArray 辅助函数来处理混合数组类型(字符串数组和对象数组), 使 loadProjectOverview 函数能够正确处理 project-tech.json 中的数据结构。 修复的字段包括: - languages: 对象数组 [{name, file_count, primary}] → 字符串数组 - frameworks: 保持兼容字符串数组 - key_components: 对象数组 [{name, description, path}] → 字符串数组 - layers/patterns: 保持兼容混合类型 Closes #79 --- ccw/src/core/data-aggregator.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/ccw/src/core/data-aggregator.ts b/ccw/src/core/data-aggregator.ts index 6b4d49ed..3d7d654e 100644 --- a/ccw/src/core/data-aggregator.ts +++ b/ccw/src/core/data-aggregator.ts @@ -589,6 +589,18 @@ function loadProjectOverview(workflowDir: string): ProjectOverview | null { const statistics = (projectData.statistics || developmentStatus?.statistics) as Record | undefined; const metadata = projectData._metadata as Record | undefined; + // Helper to extract string array from mixed array (handles both string[] and {name: string}[]) + const extractStringArray = (arr: unknown[] | undefined): string[] => { + if (!arr) return []; + return arr.map(item => { + if (typeof item === 'string') return item; + if (typeof item === 'object' && item !== null && 'name' in item) { + return String((item as { name: unknown }).name); + } + return String(item); + }); + }; + // Load guidelines from separate file if exists let guidelines: ProjectGuidelines | null = null; if (existsSync(guidelinesFile)) { @@ -633,17 +645,17 @@ function loadProjectOverview(workflowDir: string): ProjectOverview | null { description: (overview?.description as string) || '', initializedAt: (projectData.initialized_at as string) || null, technologyStack: { - languages: (technologyStack?.languages as string[]) || [], - frameworks: (technologyStack?.frameworks as string[]) || [], - build_tools: (technologyStack?.build_tools as string[]) || [], - test_frameworks: (technologyStack?.test_frameworks as string[]) || [] + languages: extractStringArray(technologyStack?.languages), + frameworks: extractStringArray(technologyStack?.frameworks), + build_tools: extractStringArray(technologyStack?.build_tools), + test_frameworks: extractStringArray(technologyStack?.test_frameworks) }, architecture: { style: (architecture?.style as string) || 'Unknown', - layers: (architecture?.layers as string[]) || [], - patterns: (architecture?.patterns as string[]) || [] + layers: extractStringArray(architecture?.layers as unknown[] | undefined), + patterns: extractStringArray(architecture?.patterns as unknown[] | undefined) }, - keyComponents: (overview?.key_components as string[]) || [], + keyComponents: extractStringArray(overview?.key_components as unknown[] | undefined), features: (projectData.features as unknown[]) || [], developmentIndex: { feature: (developmentIndex?.feature as unknown[]) || [],