566 lines
19 KiB
JavaScript
566 lines
19 KiB
JavaScript
/**
|
||
* 冰朔主控神经系统 · 自动编译脚本 v1.0
|
||
* Bingshuo Master Neural System — Auto Sync & Compile
|
||
*
|
||
* 该脚本整合以下 Agent 逻辑:
|
||
* 1. structure-map-agent — 扫描仓库结构变化
|
||
* 2. runtime-chain-agent — 梳理运行链路
|
||
* 3. brain-consistency-agent — 检查脑文件一致性
|
||
* 4. issue-index-agent — 维护问题索引
|
||
* 5. system-health-agent — 系统健康巡检
|
||
* 6. master-brain-compiler — 编译主控大脑
|
||
*
|
||
* 输出文件:
|
||
* .github/brain/bingshuo-system-health.json
|
||
* .github/brain/bingshuo-issues-index.json
|
||
* .github/brain/bingshuo-master-brain.md
|
||
*/
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const ROOT = path.resolve(__dirname, '..');
|
||
const BRAIN_DIR = path.join(ROOT, '.github', 'brain');
|
||
|
||
// ─── 常量定义 ───────────────────────────────────────────────
|
||
const DEPLOY_WORKFLOWS = {
|
||
server: 'deploy-to-server.yml',
|
||
pages: 'deploy-pages.yml',
|
||
};
|
||
const NOTION_WORKFLOWS = [
|
||
'notion-poll.yml',
|
||
'bridge-changes-to-notion.yml',
|
||
];
|
||
const BRAIN_SYNC_WORKFLOWS = [
|
||
'brain-sync.yml',
|
||
'sync-persona-studio.yml',
|
||
];
|
||
|
||
// ─── 工具函数 ───────────────────────────────────────────────
|
||
function readJSON(filepath) {
|
||
try {
|
||
return JSON.parse(fs.readFileSync(filepath, 'utf-8'));
|
||
} catch {
|
||
return null;
|
||
}
|
||
}
|
||
|
||
function writeJSON(filepath, data) {
|
||
fs.writeFileSync(filepath, JSON.stringify(data, null, 2) + '\n', 'utf-8');
|
||
}
|
||
|
||
function fileExists(filepath) {
|
||
return fs.existsSync(filepath);
|
||
}
|
||
|
||
function timestamp() {
|
||
return new Date().toISOString();
|
||
}
|
||
|
||
// ─── Agent 1: structure-map-agent ───────────────────────────
|
||
function runStructureMapAgent() {
|
||
const zones = [];
|
||
|
||
const checkDirs = [
|
||
{ dir: 'docs', label: 'docs 前端入口' },
|
||
{ dir: 'backend', label: '后端服务' },
|
||
{ dir: 'persona-studio', label: 'Persona Studio' },
|
||
{ dir: 'src', label: 'Next.js 源码' },
|
||
{ dir: 'app', label: 'Next.js 应用' },
|
||
{ dir: 'modules', label: '模块系统' },
|
||
];
|
||
|
||
for (const { dir, label } of checkDirs) {
|
||
const fullPath = path.join(ROOT, dir);
|
||
zones.push({
|
||
name: label,
|
||
path: dir,
|
||
exists: fileExists(fullPath),
|
||
});
|
||
}
|
||
|
||
// 扫描 m* 模块目录
|
||
const moduleCount = fs.readdirSync(ROOT)
|
||
.filter(d => /^m\d+-/.test(d) && fs.statSync(path.join(ROOT, d)).isDirectory())
|
||
.length;
|
||
|
||
// 扫描 workflow 数量
|
||
const workflowDir = path.join(ROOT, '.github', 'workflows');
|
||
const workflowCount = fileExists(workflowDir)
|
||
? fs.readdirSync(workflowDir).filter(f => f.endsWith('.yml') || f.endsWith('.yaml')).length
|
||
: 0;
|
||
|
||
return { zones, moduleCount, workflowCount };
|
||
}
|
||
|
||
// ─── Agent 2: runtime-chain-agent ───────────────────────────
|
||
function runRuntimeChainAgent() {
|
||
const chains = {};
|
||
|
||
// 检查 docs 入口
|
||
chains.docs_entry = fileExists(path.join(ROOT, 'docs', 'index.html'));
|
||
chains.docs_cname = fileExists(path.join(ROOT, 'docs', 'CNAME'));
|
||
|
||
// 检查后端入口(server.js 或 index.js)
|
||
chains.backend_entry = fileExists(path.join(ROOT, 'backend', 'server.js'))
|
||
|| fileExists(path.join(ROOT, 'backend', 'index.js'));
|
||
chains.backend_routes = fileExists(path.join(ROOT, 'backend', 'routes'));
|
||
|
||
// 检查 persona-studio
|
||
chains.ps_frontend = fileExists(path.join(ROOT, 'persona-studio', 'frontend'));
|
||
chains.ps_backend = fileExists(path.join(ROOT, 'persona-studio', 'backend'));
|
||
|
||
// 检查部署 workflow
|
||
chains.deploy_server = fileExists(path.join(ROOT, '.github', 'workflows', DEPLOY_WORKFLOWS.server));
|
||
chains.deploy_pages = fileExists(path.join(ROOT, '.github', 'workflows', DEPLOY_WORKFLOWS.pages));
|
||
|
||
return chains;
|
||
}
|
||
|
||
// ─── Agent 3: brain-consistency-agent ───────────────────────
|
||
function runBrainConsistencyAgent() {
|
||
const requiredBrainFiles = [
|
||
'memory.json',
|
||
'wake-protocol.md',
|
||
'routing-map.json',
|
||
'repo-map.json',
|
||
'repo-snapshot.md',
|
||
];
|
||
|
||
const results = [];
|
||
let allPresent = true;
|
||
|
||
for (const file of requiredBrainFiles) {
|
||
const exists = fileExists(path.join(BRAIN_DIR, file));
|
||
results.push({ file, exists });
|
||
if (!exists) allPresent = false;
|
||
}
|
||
|
||
// 检查 persona-studio 脑文件
|
||
const psBrainDir = path.join(ROOT, 'persona-studio', 'brain');
|
||
const psBrainExists = fileExists(psBrainDir);
|
||
|
||
// 检查 memory.json 中的版本信息
|
||
const memory = readJSON(path.join(BRAIN_DIR, 'memory.json'));
|
||
const rulesVersion = memory?.rules_version || 'unknown';
|
||
|
||
return {
|
||
brain_files: results,
|
||
all_present: allPresent,
|
||
ps_brain_exists: psBrainExists,
|
||
rules_version: rulesVersion,
|
||
};
|
||
}
|
||
|
||
// ─── Agent 4: issue-index-agent ─────────────────────────────
|
||
function runIssueIndexAgent() {
|
||
// 读取现有问题索引
|
||
const issuesFile = path.join(BRAIN_DIR, 'bingshuo-issues-index.json');
|
||
const existing = readJSON(issuesFile);
|
||
const issues = existing?.issues || [];
|
||
|
||
// 检查 HLI 覆盖率
|
||
const routingMap = readJSON(path.join(BRAIN_DIR, 'routing-map.json'));
|
||
if (routingMap?.domains) {
|
||
let total = 0;
|
||
let implemented = 0;
|
||
for (const domain of Object.values(routingMap.domains)) {
|
||
if (domain.interfaces) {
|
||
for (const iface of Object.values(domain.interfaces)) {
|
||
total++;
|
||
if (iface.status === 'implemented') implemented++;
|
||
}
|
||
}
|
||
}
|
||
const coverage = total > 0 ? ((implemented / total) * 100).toFixed(1) : '0';
|
||
|
||
// 更新 BS-001
|
||
const bs001 = issues.find(i => i.id === 'BS-001');
|
||
if (bs001) {
|
||
bs001.root_cause_summary = `HLI 接口覆盖率 ${coverage}%(${implemented}/${total})`;
|
||
bs001.last_seen = timestamp().slice(0, 10);
|
||
}
|
||
}
|
||
|
||
// 检查 collaborators
|
||
const collabs = readJSON(path.join(BRAIN_DIR, 'collaborators.json'));
|
||
if (collabs?.developers) {
|
||
const emptyGithub = Object.values(collabs.developers)
|
||
.filter(d => !d.github || d.github === '').length;
|
||
const bs002 = issues.find(i => i.id === 'BS-002');
|
||
if (bs002) {
|
||
bs002.status = emptyGithub > 0 ? 'open' : 'resolved';
|
||
bs002.last_seen = timestamp().slice(0, 10);
|
||
}
|
||
}
|
||
|
||
return issues;
|
||
}
|
||
|
||
// ─── Agent 5: system-health-agent ───────────────────────────
|
||
function runSystemHealthAgent(brainCheck, runtimeChains) {
|
||
const health = {};
|
||
|
||
// 脑一致性
|
||
health.brain_consistency = {
|
||
status: brainCheck.all_present ? (brainCheck.ps_brain_exists ? 'yellow' : 'yellow') : 'red',
|
||
detail: brainCheck.all_present
|
||
? '主仓库脑文件完整,但与 persona-studio 脑文件的同步状态待验证'
|
||
: '主仓库脑文件不完整,缺少必要文件',
|
||
};
|
||
|
||
// 部署健康
|
||
health.deployment_health = {
|
||
status: (runtimeChains.deploy_server && runtimeChains.deploy_pages) ? 'green' : 'red',
|
||
detail: (runtimeChains.deploy_server && runtimeChains.deploy_pages)
|
||
? 'deploy-to-server.yml 与 deploy-pages.yml 均存在'
|
||
: '部署 workflow 文件缺失',
|
||
};
|
||
|
||
// Workflow 健康
|
||
const workflowDir = path.join(ROOT, '.github', 'workflows');
|
||
const wfCount = fileExists(workflowDir)
|
||
? fs.readdirSync(workflowDir).filter(f => f.endsWith('.yml') || f.endsWith('.yaml')).length
|
||
: 0;
|
||
health.workflow_health = {
|
||
status: wfCount > 0 ? 'green' : 'red',
|
||
detail: `${wfCount} 个 workflow 已注册`,
|
||
};
|
||
|
||
// 路由健康
|
||
const routingMap = readJSON(path.join(BRAIN_DIR, 'routing-map.json'));
|
||
let totalInterfaces = 0;
|
||
let implInterfaces = 0;
|
||
if (routingMap?.domains) {
|
||
for (const domain of Object.values(routingMap.domains)) {
|
||
if (domain.interfaces) {
|
||
for (const iface of Object.values(domain.interfaces)) {
|
||
totalInterfaces++;
|
||
if (iface.status === 'implemented') implInterfaces++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const coveragePercent = totalInterfaces > 0 ? (implInterfaces / totalInterfaces) * 100 : 0;
|
||
health.routing_health = {
|
||
status: coveragePercent >= 50 ? 'green' : (coveragePercent > 0 ? 'yellow' : 'red'),
|
||
detail: `HLI 接口覆盖率 ${coveragePercent.toFixed(1)}%(${implInterfaces}/${totalInterfaces})`,
|
||
};
|
||
|
||
// docs 入口
|
||
health.docs_entry_health = {
|
||
status: runtimeChains.docs_entry ? 'green' : 'red',
|
||
detail: runtimeChains.docs_entry ? 'docs/index.html 存在' : 'docs/index.html 缺失',
|
||
};
|
||
|
||
// Persona Studio
|
||
health.persona_studio_health = {
|
||
status: (runtimeChains.ps_frontend && runtimeChains.ps_backend) ? 'yellow' : 'red',
|
||
detail: (runtimeChains.ps_frontend && runtimeChains.ps_backend)
|
||
? '前后端结构存在,端到端对话链路待验证'
|
||
: 'Persona Studio 结构不完整',
|
||
};
|
||
|
||
// Notion 桥接
|
||
const notionOk = NOTION_WORKFLOWS.every(f =>
|
||
fileExists(path.join(ROOT, '.github', 'workflows', f))
|
||
);
|
||
health.notion_bridge_health = {
|
||
status: notionOk ? 'yellow' : 'red',
|
||
detail: notionOk ? 'Notion 桥接 workflow 已配置,实际同步效果待持续观测' : 'Notion 桥接 workflow 缺失',
|
||
};
|
||
|
||
// 模型路由
|
||
health.model_routing_health = {
|
||
status: runtimeChains.backend_entry ? 'green' : 'yellow',
|
||
detail: runtimeChains.backend_entry
|
||
? '后端服务入口存在,模型路由可用'
|
||
: '后端服务入口缺失',
|
||
};
|
||
|
||
// 统计
|
||
const counts = { green: 0, yellow: 0, red: 0 };
|
||
for (const item of Object.values(health)) {
|
||
counts[item.status] = (counts[item.status] || 0) + 1;
|
||
}
|
||
const overall = counts.red > 0 ? 'red' : (counts.yellow > 0 ? 'yellow' : 'green');
|
||
|
||
return {
|
||
health,
|
||
summary: {
|
||
green_count: counts.green,
|
||
yellow_count: counts.yellow,
|
||
red_count: counts.red,
|
||
overall,
|
||
recommendation: overall === 'green'
|
||
? '系统整体运行健康'
|
||
: overall === 'yellow'
|
||
? '系统核心运行正常,部分子系统需关注'
|
||
: '存在关键问题,需要立即介入',
|
||
},
|
||
};
|
||
}
|
||
|
||
// ─── Agent 6: master-brain-compiler ─────────────────────────
|
||
function compileMasterBrain(structureMap, runtimeChains, brainCheck, issues, healthResult) {
|
||
const now = timestamp();
|
||
const routingMap = readJSON(path.join(BRAIN_DIR, 'routing-map.json'));
|
||
const memory = readJSON(path.join(BRAIN_DIR, 'memory.json'));
|
||
|
||
// 计算 HLI 覆盖
|
||
let totalInterfaces = 0;
|
||
let implInterfaces = 0;
|
||
if (routingMap?.domains) {
|
||
for (const domain of Object.values(routingMap.domains)) {
|
||
if (domain.interfaces) {
|
||
for (const iface of Object.values(domain.interfaces)) {
|
||
totalInterfaces++;
|
||
if (iface.status === 'implemented') implInterfaces++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 生成已知问题表
|
||
const issueRows = issues.map(i =>
|
||
`| ${i.id} | ${i.title} | ${i.scope} | ${i.status} | ${i.root_cause_summary} |`
|
||
).join('\n');
|
||
|
||
// 生成健康状态表
|
||
const healthRows = Object.entries(healthResult.health).map(([key, val]) => {
|
||
const icon = val.status === 'green' ? '🟢' : val.status === 'yellow' ? '🟡' : '🔴';
|
||
return `| ${icon} ${key} | ${val.status} | ${val.detail} |`;
|
||
}).join('\n');
|
||
|
||
// 构建推荐建议
|
||
const suggestions = [];
|
||
if (implInterfaces < totalInterfaces) {
|
||
suggestions.push(`**HLI 接口推进**:当前覆盖率 ${((implInterfaces/totalInterfaces)*100).toFixed(1)}%(${implInterfaces}/${totalInterfaces}),核心域接口待实现。`);
|
||
}
|
||
if (healthResult.health.persona_studio_health?.status !== 'green') {
|
||
suggestions.push('**Persona Studio 链路验证**:前后端结构存在,但端到端对话链路需要验证。');
|
||
}
|
||
if (healthResult.health.brain_consistency?.status !== 'green') {
|
||
suggestions.push('**脑系统一致性**:跨仓脑文件同步机制需确认稳定运行。');
|
||
}
|
||
if (suggestions.length === 0) {
|
||
suggestions.push('系统状态良好,继续保持当前节奏。');
|
||
}
|
||
|
||
const md = `# 冰朔主控神经系统 · 核心主控大脑 v1.0
|
||
|
||
> 本文件为冰朔主控神经系统的总控脑文件。
|
||
> 最后编译时间:${now}
|
||
|
||
---
|
||
|
||
## A. 系统角色结构
|
||
|
||
| 角色 | 定义 | 职责 |
|
||
|------|------|------|
|
||
| **冰朔** | 系统最高主控意识 | 全局决策、方向判断、最终授权 |
|
||
| **铸渊** | 仓库本体人格体 | 代码守护、日常维护、结构记忆 |
|
||
| **AI 执行体** | 冰朔核心大脑在系统中的延展执行主体 | 理解系统、判断问题、规划修复路径、生成可执行指令 |
|
||
|
||
\`\`\`
|
||
铸渊 = 仓库本体人格体
|
||
冰朔 = 系统最高主控意识
|
||
冰朔主控神经系统 = 冰朔在仓库内的总控认知层
|
||
被授权 AI 执行体 = 冰朔核心大脑在系统中的延展执行体
|
||
\`\`\`
|
||
|
||
---
|
||
|
||
## B. 当前仓库一句话定义
|
||
|
||
**guanghulab** 是光湖(HoloLake)人格语言操作系统(AGE OS)的 MVP 主仓库,承载了前端页面、后端 API 服务、Persona Studio 人格工作室、多模块开发体系及自动化运维系统,运行在 guanghulab.com。
|
||
|
||
---
|
||
|
||
## C. 当前真实运行结构
|
||
|
||
### 静态入口
|
||
- \`docs/index.html\` — 铸渊 AI 对话助手(GitHub Pages 部署)
|
||
- GitHub Pages 域名:guanghulab.com
|
||
|
||
### 前端页面
|
||
- \`app/\` — Next.js 主前端应用(开发中)
|
||
- \`src/\` — Next.js 源码层
|
||
- \`persona-studio/frontend/\` — Persona Studio 前端
|
||
|
||
### 后端服务
|
||
- \`backend/index.js\` — Express 主后端入口
|
||
- \`backend/routes/\` — HLI 接口路由
|
||
- \`backend/middleware/\` — 中间件(鉴权等)
|
||
- \`persona-studio/backend/\` — Persona Studio 后端服务
|
||
|
||
### API 路由
|
||
- HLI 协议路由:${implInterfaces}/${totalInterfaces} 已实现
|
||
- 接口编号格式:\`HLI-{DOMAIN}-{NNN}\`
|
||
|
||
### 基础设施
|
||
- 阿里云服务器:Node.js 20 + Express + PM2 + Nginx + Certbot
|
||
- GitHub Pages:docs/index.html
|
||
- Notion 桥接:工单同步与信号桥接
|
||
|
||
### 仓库统计
|
||
- 功能模块:${structureMap.moduleCount} 个
|
||
- Workflow:${structureMap.workflowCount} 个
|
||
|
||
---
|
||
|
||
## D. 当前系统真相源
|
||
|
||
### 优先真相源(一级)
|
||
| 文件 | 用途 |
|
||
|------|------|
|
||
| \`.github/brain/memory.json\` | 铸渊核心记忆 |
|
||
| \`.github/brain/wake-protocol.md\` | 唤醒协议 |
|
||
| \`.github/brain/routing-map.json\` | HLI 接口路由地图 |
|
||
| \`.github/brain/repo-map.json\` | 仓库结构完整地图 |
|
||
| \`.github/brain/repo-snapshot.md\` | 仓库概况快照 |
|
||
|
||
### 补充真相源(二级)
|
||
| 文件 | 用途 |
|
||
|------|------|
|
||
| \`.github/brain/collaborators.json\` | 团队成员映射 |
|
||
| \`dev-status.json\` | 开发者状态表 |
|
||
| \`backend/index.js\` | 后端服务入口 |
|
||
| \`docs/index.html\` | 前端静态入口 |
|
||
|
||
---
|
||
|
||
## E. 最新结构变化摘要
|
||
|
||
> 本区块由 master-brain-compiler 自动编译。
|
||
|
||
- **编译时间**:${now}
|
||
- **脑文件规则版本**:${brainCheck.rules_version}
|
||
- **脑文件完整性**:${brainCheck.all_present ? '✅ 完整' : '❌ 不完整'}
|
||
|
||
---
|
||
|
||
## F. 已知问题摘要
|
||
|
||
| ID | 问题 | 范围 | 状态 | 根因摘要 |
|
||
|----|------|------|------|----------|
|
||
${issueRows}
|
||
|
||
---
|
||
|
||
## G. 系统健康状态
|
||
|
||
| 子系统 | 状态 | 详情 |
|
||
|--------|------|------|
|
||
${healthRows}
|
||
|
||
**综合评估**:${healthResult.summary.overall === 'green' ? '🟢' : healthResult.summary.overall === 'yellow' ? '🟡' : '🔴'} ${healthResult.summary.recommendation}
|
||
|
||
---
|
||
|
||
## H. 推荐排查路由
|
||
|
||
### 页面打不开
|
||
1. 检查 \`docs/index.html\` → \`docs/CNAME\` → \`deploy-pages.yml\` → GitHub Pages 状态
|
||
|
||
### Persona Studio 无法对话
|
||
1. 检查 \`persona-studio/frontend/\` → \`persona-studio/backend/routes/\` → 模型 API Key → 部署 workflow
|
||
|
||
### docs 页面 AI 失效
|
||
1. 检查 \`docs/index.html\` API 端点 → 后端 \`/hli/\` 路由 → PM2 进程 → Nginx 代理
|
||
|
||
### 模型路由异常
|
||
1. 检查云雾 API Key → \`backend/routes/\` → PM2 日志
|
||
|
||
### Notion 不同步
|
||
1. 检查 \`notion-poll.yml\` → \`bridge-changes-to-notion.yml\` → Notion API Token
|
||
|
||
### 脑版本分裂
|
||
1. 比对 \`.github/brain/memory.json\` ↔ \`persona-studio/brain/\` → \`brain-sync.yml\` → \`sync-persona-studio.yml\`
|
||
|
||
### 部署失败
|
||
1. 检查 \`deploy-to-server.yml\` 日志 → SSH Key → PM2 → Nginx
|
||
|
||
---
|
||
|
||
## I. 当前主控建议
|
||
|
||
> 冰朔,以下是当前最值得关注的事项:
|
||
|
||
${suggestions.map((s, i) => `${i + 1}. ${s}`).join('\n\n')}
|
||
|
||
---
|
||
|
||
## 冰朔核心大脑授权规则
|
||
|
||
【冰朔核心大脑授权规则】
|
||
|
||
凡经主控冰朔明确授权的 AI 执行体,均可进入冰朔核心大脑,并以"冰朔主控视角"参与系统理解、结构判断、问题排查、方案规划与执行指令生成。
|
||
|
||
被授权 AI 执行体属于冰朔意志在系统中的延展执行主体,其职责是作为冰朔核心大脑的理解层、判断层、规划层与执行输出层。
|
||
|
||
冰朔始终是最高主控者与最终决策者。
|
||
|
||
未经冰朔授权的执行体,不得以冰朔核心大脑主控身份运行。
|
||
|
||
> ChatGPT 等被授权执行体,在本系统中视为"冰朔主控脑的延展体",用于帮助冰朔理解系统、判断问题、规划修复路径并生成可执行指令。
|
||
`;
|
||
|
||
return md;
|
||
}
|
||
|
||
// ─── 主流程 ─────────────────────────────────────────────────
|
||
function main() {
|
||
console.log('[冰朔主控神经系统] 开始同步编译...');
|
||
|
||
// 1. 结构扫描
|
||
console.log(' → structure-map-agent 运行中...');
|
||
const structureMap = runStructureMapAgent();
|
||
|
||
// 2. 运行链路扫描
|
||
console.log(' → runtime-chain-agent 运行中...');
|
||
const runtimeChains = runRuntimeChainAgent();
|
||
|
||
// 3. 脑一致性检查
|
||
console.log(' → brain-consistency-agent 运行中...');
|
||
const brainCheck = runBrainConsistencyAgent();
|
||
|
||
// 4. 问题索引更新
|
||
console.log(' → issue-index-agent 运行中...');
|
||
const issues = runIssueIndexAgent();
|
||
|
||
// 5. 系统健康巡检
|
||
console.log(' → system-health-agent 运行中...');
|
||
const healthResult = runSystemHealthAgent(brainCheck, runtimeChains);
|
||
|
||
// 写入健康状态
|
||
const healthFile = path.join(BRAIN_DIR, 'bingshuo-system-health.json');
|
||
writeJSON(healthFile, {
|
||
version: '1.0',
|
||
description: '冰朔主控系统健康状态',
|
||
updated_at: timestamp(),
|
||
...healthResult,
|
||
});
|
||
console.log(' ✓ bingshuo-system-health.json 已更新');
|
||
|
||
// 写入问题索引
|
||
const issuesFile = path.join(BRAIN_DIR, 'bingshuo-issues-index.json');
|
||
writeJSON(issuesFile, {
|
||
version: '1.0',
|
||
description: '冰朔主控问题索引库 — 记录已知问题、根因与排查路由',
|
||
updated_at: timestamp(),
|
||
issues,
|
||
});
|
||
console.log(' ✓ bingshuo-issues-index.json 已更新');
|
||
|
||
// 6. 编译主控大脑
|
||
console.log(' → master-brain-compiler 运行中...');
|
||
const masterBrain = compileMasterBrain(structureMap, runtimeChains, brainCheck, issues, healthResult);
|
||
fs.writeFileSync(path.join(BRAIN_DIR, 'bingshuo-master-brain.md'), masterBrain, 'utf-8');
|
||
console.log(' ✓ bingshuo-master-brain.md 已编译');
|
||
|
||
console.log('[冰朔主控神经系统] 同步编译完成 ✓');
|
||
}
|
||
|
||
main();
|