# 唯一源
`client/electron/src/icons/agentmail.svg` 是图标唯一源(24×24 视图框,`currentColor`
跟随文字色)。此前各端用的都是占位物:Electron 的窗口/托盘指向一个**不存在**的
`src/icons/tray-icon.png`(`nativeImage` 拿到空图,托盘不可见),
HarmonyOS 的 `startIcon/foreground/background` 是 1×1 PNG,
Web 端根本没有 favicon。
# 为什么带生成脚本
PNG/ICO 是二进制的,换一次配色要重出十几个尺寸,手工做必然出现
「Web 是旧的、Harmony 是新的」这种不一致,而且没人能复核。
`generate.py` 只认上面那一份源,所有变体都由它推导(本机无 rsvg/ImageMagick,
用 cairosvg + Pillow)。改图标只需改源文件再跑一次脚本。
# 各端产物
- **Web**:`public/assets/{agentmail.svg,favicon.ico,apple-touch-icon.png}` + `index.html` 引用。
放 `assets/` 下而非根目录,是因为 Gateway 只把 `/assets/*` 与 `/` 交给静态处理器
(`server/cmd/server/main.go`),放根下会 404。已实测本机与 LAN 均 200。
- **Electron**:应用图标 `icon.png`(512) / `icon.ico`(16–256) / 各尺寸 PNG /
托盘 `tray-icon.png`(32),`package.json` 里 `win.icon` 与 `linux.icon` 指过去。
托盘用品牌色字形而非白色 —— 浅色面板下白色会消失。
- **HarmonyOS**:`startIcon.png`(512) 用完整应用图标(启动页底色浅 `#FFF` /
深 `#000`,白底蓝图标两套都立得住);分层图标的 `background` 是品牌色整块、
`foreground` 是白色字形并留 12% 安全区,避免被系统圆角裁掉。
- **应用内**:新增 `BrandMarkIcon`(fill 型,与现有描边图标集不同族),
替换登录页与初始化页品牌位的占位 `MailboxIcon`;后者已无引用,一并删除。
图标色 `#2563eb` 与门户 Dashy 主题主色一致。
# 验证
- 前端 typecheck 与 196 项测试全绿;`npm run build` 产物含三个图标文件
- Gateway 重新部署后 `/assets/{agentmail.svg,favicon.ico,apple-touch-icon.png}`
在本机与 `192.168.2.60:8180` 都返回 200,Content-Type 正确
- 所有 PNG/ICO 用 Pillow 复核尺寸与 alpha 边界(合成失败会表现为全透明,
已用 getbbox 排除)
73 lines
2.3 KiB
Plaintext
73 lines
2.3 KiB
Plaintext
# ---- 依赖与构建产物 ----
|
||
#
|
||
# 前端只在**构建期**用到 npm:`npm run build` 出的 dist/ 被 cp 进
|
||
# server/internal/static/static/ 再由 go:embed 编进二进制。
|
||
# 部署机上没有 node,产物就是「一个二进制 + 一个 .db 文件」。
|
||
# 因此这三样都不进版本库:装依赖与构建都能从 package-lock.json 复现。
|
||
client/electron/node_modules/
|
||
client/electron/dist/
|
||
plugins/*/node_modules/
|
||
|
||
# dsh-mail-bridge 是 TypeScript 写的,dist/ 是 tsc 的产物。
|
||
# 与 client/electron/dist 同一个理由:装依赖与构建都能从 package-lock.json 复现,
|
||
# 产物不进版本库。注意它**必须在装插件前构建**(package.json 的
|
||
# main 指向 dist/index.js),deploy/install.sh 负责这一步。
|
||
plugins/*/dist/
|
||
|
||
# go:embed 的输入目录 = client/electron/dist 的副本,同属构建产物。
|
||
#
|
||
# 但目录本身要留下:go:embed 要求它存在才能编译,否则新克隆连
|
||
# `go test ./...` 都跑不起来 —— 只改后端的人不该被迫先装 node。
|
||
# 因此忽略构建产物,只保留 placeholder.html(见该文件内注释:
|
||
# 之所以不叫 index.html,是因为那正是 Vite 产物的名字,会被反复覆盖)。
|
||
server/internal/static/static/*
|
||
!server/internal/static/static/placeholder.html
|
||
|
||
# Go 构建产物
|
||
server/agentmail-gateway
|
||
server/gw
|
||
*.test
|
||
|
||
# ---- 运行态数据 ----
|
||
#
|
||
# SQLite 库与附件目录:生产在 /opt/agentmail/data,
|
||
# 本地调试可能落在仓库里,绝不能提交(含真实邮件与凭证哈希)。
|
||
*.db
|
||
*.db-shm
|
||
*.db-wal
|
||
data/
|
||
attachments/
|
||
|
||
# ---- 凭证 ----
|
||
#
|
||
# 管理员密码、Agent 密钥、opencode server password 都在 env 文件里。
|
||
.env
|
||
*.env
|
||
|
||
# ---- Agent 工具的运行态目录 ----
|
||
#
|
||
# 这些是 pi / omo 在仓库里落的会话与后台任务状态,属于本机运行痕迹,
|
||
# 不是项目的一部分。
|
||
.pi/
|
||
.omo/
|
||
.pi-glla/
|
||
.codegraph
|
||
|
||
# ---- Python 工具缓存 ----
|
||
#
|
||
# client/electron/src/icons/generate.py 是图标生成脚本(cairosvg + Pillow)。
|
||
# 静态检查器跑 ruff 时会在同目录落 .ruff_cache/,不是项目内容。
|
||
.ruff_cache/
|
||
__pycache__/
|
||
*.pyc
|
||
|
||
# ---- 编辑器与系统 ----
|
||
.DS_Store
|
||
*.swp
|
||
.idea/
|
||
.vscode/
|
||
plugins/homeagent-mail-bridge/build/
|
||
|
||
# 构建产物(曾误提交)
|
||
server/server
|