workspace-library-smoke-test.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const assert = require('assert/strict');
  2. const service = require('../mcp/src/dashboard/workspace-library-service');
  3. function flatten(nodes = []) {
  4. return nodes.flatMap(node => [node, ...(node.children ? flatten(node.children) : [])]);
  5. }
  6. function main() {
  7. const registry = service.listSkillRegistry();
  8. assert.equal(registry.status, 'ok');
  9. assert.ok(registry.data.summary.packageCount >= 2);
  10. assert.ok(registry.data.summary.skillCount >= 18);
  11. assert.ok(registry.data.summary.uniqueCapabilityCount >= 16);
  12. const tree = service.listKnowledgeTree();
  13. assert.equal(tree.status, 'ok');
  14. assert.ok(tree.data.summary.libraryCount >= 6);
  15. assert.ok(tree.data.summary.fileCount >= 20);
  16. assert.equal(tree.data.summary.propertyCount, 30);
  17. const nodes = flatten(tree.data.roots);
  18. const rules = nodes.find(node => node.name === 'rules.md');
  19. assert.ok(rules, 'rules.md should exist');
  20. const rulesFile = service.readKnowledgeFile(rules.id);
  21. assert.equal(rulesFile.data.kind, 'markdown');
  22. assert.match(rulesFile.data.content, /不编造房源/);
  23. const properties = service.listProperties({ district: '新北区', maxPrice: 150, pageSize: 60 });
  24. assert.ok(properties.data.items.length > 0);
  25. assert.ok(properties.data.items.every(item => item.district.includes('新北区') && item.totalPrice <= 150));
  26. const detail = service.getProperty(properties.data.items[0].id);
  27. assert.ok(detail.data.property.community);
  28. const firstSkill = registry.data.packages[0].skills[0];
  29. const skill = service.getSkillDetail(firstSkill.id);
  30. assert.equal(skill.data.id, firstSkill.id);
  31. assert.ok(skill.data.content.includes('#'));
  32. assert.throws(
  33. () => service.readKnowledgeFile(`agent-knowledge~${Buffer.from('../.env.local').toString('base64url')}`),
  34. /禁止访问/,
  35. );
  36. process.stdout.write(`${JSON.stringify({
  37. status: 'ok',
  38. packageCount: registry.data.summary.packageCount,
  39. skillCount: registry.data.summary.skillCount,
  40. libraryCount: tree.data.summary.libraryCount,
  41. fileCount: tree.data.summary.fileCount,
  42. propertyCount: tree.data.summary.propertyCount,
  43. pathTraversalBlocked: true,
  44. }, null, 2)}\n`);
  45. }
  46. main();