docs+fix: 铸渊开发日志 20260808 + 签名/生产模式修复
开发日志(DEV-LOG-20260808): - 完整思维逻辑链:从妈妈指令到技术决策的推理过程 - 每个模块的开发详情、Bug 修复历程、架构映射 - 签名安装全过程(AppleDouble/asar/codesign/entitlements) - 已知问题和待修复项(给后续人格体排查) - 提交链完整记录(070b11a→dcf8f7d) 代码修复: - electron/main.ts: 生产模式改为 require(server-bundle.js) 内嵌 - package.json: 签名 identity 配置 + asar:false - server/index.ts: Agent import 补全
This commit is contained in:
parent
dcf8f7d7e9
commit
84a631d886
4 changed files with 508 additions and 43 deletions
|
|
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue