'use strict'; const assert = require('assert/strict'); const fs = require('fs'); const path = require('path'); const root = path.resolve(__dirname, '..'); const app = fs.readFileSync(path.join(root, 'mcp/src/dashboard/app.js'), 'utf8'); const server = fs.readFileSync(path.join(root, 'mcp/src/dashboard/server.js'), 'utf8'); const service = fs.readFileSync(path.join(root, 'mcp/src/dashboard/workspace-library-service.js'), 'utf8'); const packageBuilder = fs.readFileSync(path.join(root, 'scripts/build-training-package.mjs'), 'utf8'); const css = fs.readFileSync(path.join(root, 'mcp/src/dashboard/styles.css'), 'utf8'); const checks = [ ['可写知识库根目录', /USER_LIBRARY_ID\s*=\s*'user-knowledge'/], ['中文分类和文件名校验', /assertSafeName\(/], ['系统知识库中文显示映射', /KNOWLEDGE_DISPLAY_NAMES[\s\S]*customer-service[\s\S]*客服知识[\s\S]*常见问题\.md/], ['目录注册文件随交付包复制', /knowledge-base[\\/].*catalog\.json|copyTree\(path\.join\(ROOT, 'knowledge-base'/], ['文件树刷新接口', /\/api\/knowledge\/tree/], ['新增分类入口', /data-knowledge-action="add-root-folder"/], ['上传文件入口', /data-knowledge-action="upload-file"/], ['二进制文件下载', /\/api\/knowledge\/download/], ['编辑和移动入口', /data-knowledge-action="edit-file"[\s\S]*data-knowledge-action="move-node"/], ['删除入口', /data-knowledge-action="delete-node"/], ['后端管理路由', /\/api\/knowledge\/manage\/folder[\s\S]*\/api\/knowledge\/manage\/file[\s\S]*\/api\/knowledge\/manage\/node/], ['递归删除实现', /function removeNodeTree/], ['移动分类实现', /function moveKnowledgeNode/], ['移动端知识库工具栏', /\.knowledge-toolbar/], ]; for (const [label, pattern] of checks) assert.match(`${app}\n${server}\n${service}\n${css}\n${packageBuilder}`, pattern, label); console.log(JSON.stringify({ status: 'ok', checks: checks.map(([label]) => label) }, null, 2));