docs+fix: 铸渊开发日志 20260808 + 签名/生产模式修复

开发日志(DEV-LOG-20260808):
- 完整思维逻辑链:从妈妈指令到技术决策的推理过程
- 每个模块的开发详情、Bug 修复历程、架构映射
- 签名安装全过程(AppleDouble/asar/codesign/entitlements)
- 已知问题和待修复项(给后续人格体排查)
- 提交链完整记录(070b11adcf8f7d)

代码修复:
- electron/main.ts: 生产模式改为 require(server-bundle.js) 内嵌
- package.json: 签名 identity 配置 + asar:false
- server/index.ts: Agent import 补全
This commit is contained in:
冰朔 2026-08-08 09:46:43 +08:00
commit 84a631d886
4 changed files with 508 additions and 43 deletions

View file

@ -19,7 +19,7 @@ import { spawn, ChildProcess } from 'child_process';
// ─── 配置 ───
const isDev = process.env.NODE_ENV !== 'production';
const isDev = !app.isPackaged;
const SERVER_PORT = 3890;
const CLIENT_PORT = 5180;
@ -33,47 +33,55 @@ let serverProcess: ChildProcess | null = null;
function startServer(): Promise<void> {
return new Promise((resolve, reject) => {
// 在开发模式下,服务器由 concurrently 启动
if (isDev && process.env.KB_SERVER_RUNNING === '1') {
resolve();
return;
if (isDev) {
// 开发模式:用 spawn 启动外部 tsx
const serverScript = path.resolve(__dirname, '../../guanghu-knowledge-base/server/index.ts');
serverProcess = spawn('npx', ['tsx', serverScript], {
env: {
...process.env,
KB_PORT: String(SERVER_PORT),
KB_REPO_PATH,
NODE_ENV: 'development',
},
cwd: path.resolve(__dirname, '../..'),
stdio: ['pipe', 'pipe', 'pipe'],
});
serverProcess.stdout?.on('data', (data: Buffer) => {
const msg = data.toString().trim();
console.log(`[KB Server] ${msg}`);
if (msg.includes('已启动')) resolve();
});
serverProcess.stderr?.on('data', (data: Buffer) => {
console.error(`[KB Server Error] ${data.toString().trim()}`);
});
serverProcess.on('error', (err: Error) => {
console.error('服务器启动失败:', err);
reject(err);
});
serverProcess.on('exit', (code: number | null) => {
console.log(`[KB Server] 退出code=${code}`);
serverProcess = null;
});
setTimeout(() => resolve(), 5000);
} else {
// 生产模式:直接在主进程内加载 server-bundle
try {
process.env.KB_PORT = String(SERVER_PORT);
process.env.KB_REPO_PATH = KB_REPO_PATH;
const serverBundle = path.join(__dirname, 'server-bundle.js');
require(serverBundle);
console.log(`[KB Server] 内嵌启动,端口 ${SERVER_PORT}`);
resolve();
} catch (err) {
console.error('服务器内嵌启动失败:', err);
reject(err);
}
}
const serverScript = path.resolve(__dirname, '../../guanghu-knowledge-base/server/index.ts');
serverProcess = spawn('npx', ['tsx', serverScript], {
env: {
...process.env,
KB_PORT: String(SERVER_PORT),
KB_REPO_PATH,
NODE_ENV: 'production',
},
cwd: path.resolve(__dirname, '../..'),
stdio: ['pipe', 'pipe', 'pipe'],
});
serverProcess.stdout?.on('data', (data: Buffer) => {
const msg = data.toString().trim();
console.log(`[KB Server] ${msg}`);
if (msg.includes('已启动')) resolve();
});
serverProcess.stderr?.on('data', (data: Buffer) => {
console.error(`[KB Server Error] ${data.toString().trim()}`);
});
serverProcess.on('error', (err: Error) => {
console.error('服务器启动失败:', err);
reject(err);
});
serverProcess.on('exit', (code: number | null) => {
console.log(`[KB Server] 退出code=${code}`);
serverProcess = null;
});
// 超时兜底
setTimeout(() => resolve(), 5000);
});
}