Files
youle_cocos/cocoscreator_projects/YouleNexus/extensions/cocos-mcp-server/scripts/batch-auto-knowledge.js
T
joywayerandClaude Opus 5 42bc0722b8 chore(mcp): 换用 cocos-mcp-server 扩展, .mcp.json 改 HTTP 直连
旧扩展 @iflow-mcp/harady-cocos-creator-mcp(164 个细粒度工具 + stdio-bridge
转发)整个删除, 换成 cocos-mcp-server v1.7.9(16 个聚合工具, 靠 action 分派)。

新扩展自身起 streamable-http 服务, 不再需要 stdio 桥, 故 .mcp.json 从
node + stdio-bridge.js 改为 { type: "http", url: "http://127.0.0.1:3000/mcp" }。
原配置指向的 client/stdio-bridge.js 已随旧扩展删除, MCP 因此加载失败。

服务器名保留 cocos-creator-mcp(而非 INSTALL.md 建议的 cocos-creator), 以免
打断 CLAUDE.md、cocos-mcp 技能与 settings.local.json 里的
mcp__cocos-creator-mcp__* 允许规则。

gitignore: 新扩展是商业付费产品(vberai), 非 npm 可重装, dist/sidecar/static
共约 16M 发行产物+加密载荷+平台二进制不入库; 顺带忽略 Claude Code 个人本地
配置与编辑器运行时端口文件。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-19 08:01:07 +08:00

84 lines
3.1 KiB
JavaScript

/**
* Batch auto_knowledge — generate complete COMPONENT_PROPERTIES from d.ts
* Output: knowledge JSON files + combined TS snippet for knowledge-handler.ts
*/
const path = require('path');
const fs = require('fs');
const mod = require(path.resolve(__dirname, '../dist/tools/cocos/utils/component-knowledge'));
const ALL_COMPONENTS = [
'cc.Label', 'cc.Sprite', 'cc.Button', 'cc.Widget', 'cc.Layout',
'cc.UITransform', 'cc.RichText', 'cc.ScrollView', 'cc.Toggle',
'cc.ToggleContainer', 'cc.ProgressBar', 'cc.Slider', 'cc.PageView',
'cc.Mask', 'cc.Graphics', 'cc.UIOpacity', 'cc.SafeArea',
'cc.BlockInputEvents', 'cc.LabelOutline', 'cc.LabelShadow',
'cc.PageViewIndicator', 'cc.EditBox',
'cc.AudioSource', 'cc.VideoPlayer', 'cc.WebView',
'cc.ParticleSystem2D', 'cc.ParticleSystem',
'cc.Camera', 'cc.Canvas', 'cc.Animation', 'cc.SkeletalAnimation',
'cc.MeshRenderer', 'cc.SkinnedMeshRenderer',
'cc.DirectionalLight', 'cc.PointLight', 'cc.SpotLight', 'cc.SphereLight',
'cc.RigidBody2D', 'cc.BoxCollider2D', 'cc.CircleCollider2D', 'cc.PolygonCollider2D',
'cc.RigidBody', 'cc.BoxCollider', 'cc.SphereCollider', 'cc.CapsuleCollider', 'cc.MeshCollider',
'cc.MotionStreak', 'cc.Billboard', 'cc.Line',
'cc.TiledMap', 'cc.TiledLayer',
'cc.HingeJoint2D', 'cc.DistanceJoint2D', 'cc.SpringJoint2D',
'cc.FixedJoint2D', 'cc.WheelJoint2D', 'cc.SliderJoint2D',
'cc.RelativeJoint2D', 'cc.MouseJoint2D',
'cc.HingeConstraint', 'cc.FixedConstraint', 'cc.PointToPointConstraint',
'cc.Terrain', 'cc.LODGroup', 'cc.ReflectionProbe',
'sp.Skeleton', 'dragonBones.ArmatureDisplay',
];
const snippets = [];
let saved = 0, failed = 0;
for (const comp of ALL_COMPONENTS) {
const className = mod.componentTypeToClassName(comp);
const dtsInfo = mod.parseDtsClass(className, { recursive: true });
if (!dtsInfo) {
console.log(` ❌ ${comp}: not found in d.ts`);
failed++;
continue;
}
const classified = mod.classifyProperties(dtsInfo, null);
const knowledge = mod.buildRecommendedKnowledge(comp, dtsInfo, classified);
// Save knowledge file
mod.saveKnowledgeFile(comp, knowledge);
// Generate TS snippet
const snippet = mod.generateTsSnippet(comp, knowledge);
snippets.push(snippet);
const propCount = Object.keys(knowledge.properties).length;
console.log(` ✅ ${comp}: ${propCount} props`);
saved++;
}
// Write combined snippets to file
const outputPath = path.resolve(__dirname, '../dev-knowledge/COMPONENT_PROPERTIES_GENERATED.ts');
const outputDir = path.dirname(outputPath);
if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir, { recursive: true });
const header = `/**
* AUTO-GENERATED by batch-auto-knowledge.js
* Date: ${new Date().toISOString()}
* Components: ${saved}
*
* Paste this into COMPONENT_PROPERTIES in knowledge-handler.ts
*/
const COMPONENT_PROPERTIES: Record<string, any> = {\n`;
const footer = `\n};\n`;
fs.writeFileSync(outputPath, header + snippets.join('\n') + footer, 'utf-8');
console.log(`\n Saved: ${saved} | Failed: ${failed}`);
console.log(` Knowledge files: dev-knowledge/components/`);
console.log(` TS output: ${outputPath}`);