Files
钟明原 d92738be51 feat: 新增智能体记忆面板,优化安装器体验
- 智能体配置新增「记忆」标签页,支持查看/编辑 MEMORY.md 和浏览每日记忆日志
- 智能体侧边信息面板新增记忆摘要展示
- 启动页补偿加载渲染前已输出的 Gateway 日志
- NSIS 安装器改用 ExecToStack,隐藏详情面板,修复中文乱码(UTF-8 BOM)
2026-03-16 09:20:18 +08:00

58 lines
2.6 KiB
JavaScript

#!/usr/bin/env node
/**
* apply-branding.mjs
*
* 从 app.config.mjs 读取品牌配置,同步到:
* 1. src/shared/branding.ts — TypeScript 常量(main + renderer 通用)
* 2. resources/installer.nsh — NSIS 安装脚本(从模板生成)
* 3. package.json — description / build.appId / build.productName
*
* 用法:node scripts/apply-branding.mjs
* pnpm run brand
*/
import { readFileSync, writeFileSync } from 'fs'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
const __dirname = dirname(fileURLToPath(import.meta.url))
const root = resolve(__dirname, '..')
const { default: cfg } = await import(resolve(root, 'app.config.mjs'))
// ── 1. src/shared/branding.ts ────────────────────────────────────────────────
const brandingTs = [
`// ⚠️ Auto-generated by scripts/apply-branding.mjs — do not edit directly.`,
`// To update branding, edit app.config.mjs and run: pnpm run brand`,
``,
`export const APP_NAME = '${cfg.appName}'`,
`export const APP_ID = '${cfg.appId}'`,
`export const FIREWALL_RULE_NAME = '${cfg.firewallRuleName}'`,
``,
].join('\n')
writeFileSync(resolve(root, 'src/shared/branding.ts'), brandingTs)
console.log('✓ src/shared/branding.ts')
// ── 2. resources/installer.nsh(从模板生成)──────────────────────────────────
const tpl = readFileSync(resolve(root, 'resources/installer.nsh.template'), 'utf8')
const nsh = tpl
.replace(/\{\{APP_NAME\}\}/g, cfg.appName)
.replace(/\{\{PRODUCT_NAME\}\}/g, cfg.productName)
// NSIS Unicode 模式需要 UTF-8 BOM 才能正确显示中文 DetailPrint
const UTF8_BOM = '\uFEFF'
const nshWithBom = nsh.startsWith(UTF8_BOM) ? nsh : UTF8_BOM + nsh
writeFileSync(resolve(root, 'resources/installer.nsh'), nshWithBom)
console.log('✓ resources/installer.nsh')
// ── 3. package.json ──────────────────────────────────────────────────────────
const pkgPath = resolve(root, 'package.json')
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'))
pkg.description = cfg.description
pkg.build.appId = cfg.appId
pkg.build.productName = cfg.productName
writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n')
console.log('✓ package.json (description / build.appId / build.productName)')
console.log('\n🎉 Branding applied from app.config.mjs')