const assert = require('assert/strict'); const service = require('../mcp/src/dashboard/workspace-library-service'); function flatten(nodes = []) { return nodes.flatMap(node => [node, ...(node.children ? flatten(node.children) : [])]); } function main() { const registry = service.listSkillRegistry(); assert.equal(registry.status, 'ok'); assert.ok(registry.data.summary.packageCount >= 2); assert.ok(registry.data.summary.skillCount >= 18); assert.ok(registry.data.summary.uniqueCapabilityCount >= 16); const tree = service.listKnowledgeTree(); assert.equal(tree.status, 'ok'); assert.ok(tree.data.summary.libraryCount >= 6); assert.ok(tree.data.summary.fileCount >= 20); assert.equal(tree.data.summary.propertyCount, 30); const nodes = flatten(tree.data.roots); const rules = nodes.find(node => node.name === 'rules.md'); assert.ok(rules, 'rules.md should exist'); const rulesFile = service.readKnowledgeFile(rules.id); assert.equal(rulesFile.data.kind, 'markdown'); assert.match(rulesFile.data.content, /不编造房源/); const properties = service.listProperties({ district: '新北区', maxPrice: 150, pageSize: 60 }); assert.ok(properties.data.items.length > 0); assert.ok(properties.data.items.every(item => item.district.includes('新北区') && item.totalPrice <= 150)); const detail = service.getProperty(properties.data.items[0].id); assert.ok(detail.data.property.community); const firstSkill = registry.data.packages[0].skills[0]; const skill = service.getSkillDetail(firstSkill.id); assert.equal(skill.data.id, firstSkill.id); assert.ok(skill.data.content.includes('#')); assert.throws( () => service.readKnowledgeFile(`agent-knowledge~${Buffer.from('../.env.local').toString('base64url')}`), /禁止访问/, ); process.stdout.write(`${JSON.stringify({ status: 'ok', packageCount: registry.data.summary.packageCount, skillCount: registry.data.summary.skillCount, libraryCount: tree.data.summary.libraryCount, fileCount: tree.data.summary.fileCount, propertyCount: tree.data.summary.propertyCount, pathTraversalBlocked: true, }, null, 2)}\n`); } main();