Files
BaiLongma/install-3d.cjs

152 lines
5.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const fs = require('fs');
const path = require('path');
const projectDir = 'D:\\q\\BaiLongma-main';
const srcDir = path.join(projectDir, 'src');
const electronDir = path.join(projectDir, 'electron');
console.log('========================================');
console.log(' 白龙马 3D意识空间 - 自动安装脚本');
console.log('========================================\n');
// 1. 复制 HTML 文件
console.log('[1/6] 复制 3D可视化页面...');
const htmlSource = 'C:\\Users\\cheng\\AppData\\Roaming\\TRAE SOLO CN\\ModularData\\ai-agent\\work-mode-projects\\6a22b05351f365868d71d458\\bailongma-enhanced\\consciousness-3d-integrated.html';
const htmlTarget = path.join(projectDir, 'consciousness-3d.html');
fs.copyFileSync(htmlSource, htmlTarget);
console.log(' OK 已复制');
// 2. 修改 src/paths.js
console.log('[2/6] 修改 src/paths.js...');
const pathsFile = path.join(srcDir, 'paths.js');
let content = fs.readFileSync(pathsFile, 'utf8');
if (!content.includes('consciousness3dHtml')) {
content = content.replace(
"activationHtml: path.join(RESOURCES_DIR, 'activation.html'),",
"activationHtml: path.join(RESOURCES_DIR, 'activation.html'),\n consciousness3dHtml: path.join(RESOURCES_DIR, 'consciousness-3d.html'),"
);
fs.writeFileSync(pathsFile, content, 'utf8');
console.log(' OK 已添加路径');
} else {
console.log(' SKIP 已存在');
}
// 3. 修改 src/api.js
console.log('[3/6] 修改 src/api.js...');
const apiFile = path.join(srcDir, 'api.js');
content = fs.readFileSync(apiFile, 'utf8');
// 3a. 添加 CONSCIOUSNESS_3D_PATH
if (!content.includes('CONSCIOUSNESS_3D_PATH')) {
content = content.replace(
'const ACTIVATION_PATH = paths.activationHtml',
'const ACTIVATION_PATH = paths.activationHtml\nconst CONSCIOUSNESS_3D_PATH = paths.consciousness3dHtml'
);
console.log(' OK 已添加导入');
}
// 3b. 添加辅助函数
if (!content.includes('emotionEmojiMap')) {
const helper = fs.readFileSync(path.join(projectDir, 'helper-code.js'), 'utf8');
const idx = content.indexOf('const ACTIVATION_PATH');
if (idx > 0) {
const insertPos = content.indexOf('\n', idx) + 1;
content = content.slice(0, insertPos) + '\n' + helper + '\n' + content.slice(insertPos);
}
console.log(' OK 已添加辅助函数');
}
// 3c. 添加路由
if (!content.includes("'/consciousness-3d'")) {
const route = fs.readFileSync(path.join(projectDir, 'route-code.js'), 'utf8');
const marker = "res.end('brain-ui.html not found')";
const idx = content.indexOf(marker);
if (idx > 0) {
let insertPos = content.indexOf('\n', idx) + 1;
const returnIdx = content.indexOf('return', insertPos);
if (returnIdx > 0) {
insertPos = content.indexOf('\n', returnIdx) + 1;
content = content.slice(0, insertPos) + '\n' + route + '\n' + content.slice(insertPos);
}
}
console.log(' OK 已添加路由');
}
// 3d. 添加API
if (!content.includes('/api/consciousness-data')) {
const api = fs.readFileSync(path.join(projectDir, 'api-code.js'), 'utf8');
const marker = "if (req.method === 'GET' && url.pathname.startsWith('/api/'))";
const idx = content.indexOf(marker);
if (idx > 0) {
content = content.slice(0, idx) + api + '\n' + content.slice(idx);
}
console.log(' OK 已添加API');
}
fs.writeFileSync(apiFile, content, 'utf8');
console.log(' OK api.js 完成');
// 4. 修改 electron/main.cjs
console.log('[4/6] 修改 electron/main.cjs...');
const mainFile = path.join(electronDir, 'main.cjs');
content = fs.readFileSync(mainFile, 'utf8');
if (!content.includes('3D 意识空间')) {
const menu = fs.readFileSync(path.join(projectDir, 'menu-code.js'), 'utf8');
content = content.replace("label: '退出'", menu + " label: '退出'");
console.log(' OK 已添加菜单');
}
if (!content.includes('open-consciousness-3d')) {
const ipc = fs.readFileSync(path.join(projectDir, 'ipc-code.js'), 'utf8');
const marker = 'app.whenReady().then(async () => {';
const idx = content.indexOf(marker);
if (idx > 0) {
const insertPos = content.indexOf('\n', idx) + 1;
content = content.slice(0, insertPos) + '\n' + ipc + '\n' + content.slice(insertPos);
}
console.log(' OK 已添加IPC');
}
fs.writeFileSync(mainFile, content, 'utf8');
console.log(' OK main.cjs 完成');
// 5. 修改 package.json
console.log('[5/6] 修改 package.json...');
const pkgFile = path.join(projectDir, 'package.json');
content = fs.readFileSync(pkgFile, 'utf8');
if (!content.includes('consciousness-3d.html')) {
content = content.replace('"activation.html",', '"activation.html",\n "consciousness-3d.html",');
fs.writeFileSync(pkgFile, content, 'utf8');
console.log(' OK 已添加打包文件');
} else {
console.log(' SKIP 已存在');
}
// 6. 修改 brain-ui.html
console.log('[6/6] 检查 brain-ui.html...');
const brainFile = path.join(projectDir, 'brain-ui.html');
if (fs.existsSync(brainFile)) {
content = fs.readFileSync(brainFile, 'utf8');
if (!content.includes('consciousness-3d')) {
const nav = '<a href="/consciousness-3d" style="padding:8px 16px;background:rgba(0,212,255,0.15);border:1px solid rgba(0,212,255,0.4);color:#00d4ff;border-radius:15px;text-decoration:none;font-size:0.85rem;margin-left:10px;">3D意识空间</a>';
content = content.replace('</body>', nav + '\n </body>');
fs.writeFileSync(brainFile, content, 'utf8');
console.log(' OK 已添加导航');
} else {
console.log(' SKIP 已存在');
}
} else {
console.log(' SKIP 文件不存在');
}
console.log('\n========================================');
console.log(' 安装完成!');
console.log('========================================\n');
console.log('请执行以下步骤:');
console.log('1. 重启后端服务: npm run dev');
console.log('2. 访问 http://127.0.0.1:3721/consciousness-3d');
console.log('3. 或右键托盘图标 -> 3D 意识空间\n');
console.log('注意如果构建EXE需要重新运行:');
console.log(' npx electron-builder --win --dir\n');