Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
185 commits
Select commit Hold shift + click to select a range
45f2f90
feat(frontend): bootstrap Ant Design Pro migration (P0)
ZeroPointSix Jul 10, 2026
1d0dfff
feat(frontend): migrate overview dashboard to Ant Design Pro (P1)
ZeroPointSix Jul 10, 2026
68a71e6
feat(frontend): migrate accounts and groups pages (P2)
ZeroPointSix Jul 10, 2026
48eca53
feat(frontend): migrate mailbox emails page (P3)
ZeroPointSix Jul 10, 2026
4c14dcb
feat(frontend): migrate temp-emails and plugins pages (P4)
ZeroPointSix Jul 10, 2026
076cc00
feat(frontend): migrate settings audit pool token-tool (P5)
ZeroPointSix Jul 10, 2026
badec4b
fix(frontend): align pool-admin contract and proxy after P5 review
ZeroPointSix Jul 10, 2026
b29d9de
feat(frontend): add settings secrets UX and migration residual notes
ZeroPointSix Jul 10, 2026
8a9ee09
merge: origin/main into frontend migration branch
ZeroPointSix Jul 10, 2026
b94fbfa
fix(frontend): import Link for ProLayout menuItemRender
Jul 10, 2026
07aca2b
fix(frontend): align SPA API contracts
Jul 10, 2026
1ab0b37
style(tests): satisfy black formatting
Jul 10, 2026
d2711ce
feat(frontend): close PR #109 SPA parity gaps for P0-P2
ZeroPointSix Jul 10, 2026
17c5417
fix(frontend): polish SPA UX to remove scaffold/AI feel
cursoragent Jul 10, 2026
2b70f1c
fix(frontend): handle refresh SSE stream and export blob response
cursoragent Jul 11, 2026
ec18c94
refactor(frontend): slim SPA to accounts/mailbox core scope
ZeroPointSix Jul 11, 2026
a2f9fc5
Merge remote-tracking branch 'origin/main' into feat/ant-design-pro-f…
CodeKing Aug 3, 2026
ef28d91
fix(frontend): restore SPA parity and validation
CodeKing Aug 3, 2026
cac11cf
fix(frontend): align refresh log API routes
CodeKing Aug 3, 2026
dda7404
fix(frontend): make settings changes explicit and persistent
ZeroPointSix Aug 3, 2026
c85c211
fix(frontend): guard polling settings navigation
ZeroPointSix Aug 3, 2026
d8efa8b
fix(frontend): preserve unlimited polling setting
ZeroPointSix Aug 3, 2026
9969f98
fix(frontend): polish SPA UX for ZER-381
cursoragent Aug 4, 2026
f5e71fd
fix(mailbox): use Ant Design Menu for sidebar navigation
cursoragent Aug 4, 2026
c298363
fix(zer-381): align UAT email and frontend fixes
ZeroPointSix Aug 5, 2026
d84abb4
style(emails): apply Black formatting
ZeroPointSix Aug 5, 2026
1cf9c75
fix(zer-381): complete proxy misclassification guards on SPA branch
Aug 5, 2026
0696133
feat(deploy): build and serve Ant Design Pro SPA on Railway
cursoragent Aug 7, 2026
8815323
fix(deploy): use npm install for SPA Docker build
cursoragent Aug 7, 2026
05c0157
fix(deploy): copy full ant-design-pro before npm install in Docker
cursoragent Aug 7, 2026
16c9bd8
fix(deploy): install devDependencies for Umi Max Docker build
cursoragent Aug 7, 2026
d1b1da9
fix(deploy): install devDependencies for Umi Max Docker build
cursoragent Aug 7, 2026
c7de70c
fix(zer-381): restore logo/favicon fallback to SPA dist assets
ZeroPointSix Aug 7, 2026
373ed97
test
ZeroPointSix Aug 7, 2026
ab3f673
fix(zer-381): restore global.less content (correct font-face weights,…
ZeroPointSix Aug 7, 2026
915bf36
fix(zer-381): account copy cards, compact horizontal table, legacy de…
ZeroPointSix Aug 7, 2026
69eeaf2
fix(zer-381): correct AlibabaSans-Heavy font-face URL in global.less
ZeroPointSix Aug 7, 2026
2869999
feat(zer-381): auto-poll parity, persistent poll state, header GitHub…
hzerodotfive Aug 8, 2026
1653b2b
chore(zer-381): bump backend 2.9.7 / frontend 6.0.4 + CHANGELOG
hzerodotfive Aug 8, 2026
c869761
fix(spa): copyText 增加 execCommand 兜底并更新轮询设置文案
factory-droid[bot] Aug 8, 2026
df8faba
fix(frontend): reject removed login redirect routes (ZER-534)
ZeroPointSix Aug 8, 2026
3d4e0c4
fix(zer-535): distinguish inbox and junk mail
ZeroPointSix Aug 8, 2026
1b43322
fix(zer-535): add explicit folder switch
ZeroPointSix Aug 8, 2026
ec3eac4
test(zer-535): cover explicit folder switch
ZeroPointSix Aug 8, 2026
08df556
test(zer-535): cover folder request contracts
ZeroPointSix Aug 8, 2026
a5176a1
chore(release): bump backend version to 2.9.6
ZeroPointSix Aug 8, 2026
850648c
docs(changelog): record zer-535
ZeroPointSix Aug 8, 2026
41fe2e4
chore(release): bump frontend version to 6.0.3
ZeroPointSix Aug 8, 2026
b3f9b51
chore(release): sync frontend lockfile version
ZeroPointSix Aug 8, 2026
132b8cd
feat(frontend): show temp-mail provider status
ZeroPointSix Aug 8, 2026
65fb21e
feat(frontend): type temp-mail provider capabilities
ZeroPointSix Aug 8, 2026
e419baa
feat(temp-mail): expose provider status catalog
ZeroPointSix Aug 8, 2026
37934fb
feat(temp-mail): expose safe mailbox compatibility metadata
ZeroPointSix Aug 8, 2026
69cf95f
feat(temp-mail): define provider capability contract
ZeroPointSix Aug 8, 2026
8149025
feat(temp-mail): declare GPTMail bridge capabilities
ZeroPointSix Aug 8, 2026
37e5606
chore: bump version to 2.9.6
ZeroPointSix Aug 8, 2026
b873c30
docs: record ZER-538 compatibility display
ZeroPointSix Aug 8, 2026
1a01e81
feat(frontend): normalize temp-mail presentation
ZeroPointSix Aug 8, 2026
c68feaf
test(frontend): cover temp-mail provider presentation
ZeroPointSix Aug 8, 2026
9ebac92
test(temp-mail): cover frontend provider contract
ZeroPointSix Aug 8, 2026
2f69e84
feat: align API key creation flow
ZeroPointSix Aug 8, 2026
43eb507
ci: add temporary ZER-538 frontend validation
ZeroPointSix Aug 8, 2026
0534387
ci: run temporary frontend gate on PR updates
ZeroPointSix Aug 8, 2026
254fb75
feat(performance): add end-to-end observability for ZER-539
ZeroPointSix Aug 8, 2026
50836c7
ci: remove temporary ZER-538 validation workflow
ZeroPointSix Aug 8, 2026
a6147d6
ci(frontend): add quality and build gate
ZeroPointSix Aug 8, 2026
8229301
style: apply Python formatting
ZeroPointSix Aug 8, 2026
15767f0
style(python): apply Black formatting
ZeroPointSix Aug 8, 2026
57afabe
fix(frontend): generate Umi types in CI
ZeroPointSix Aug 8, 2026
72e18b7
test: add temporary ZER-538 browser validation
ZeroPointSix Aug 8, 2026
b9e618a
test(frontend): add performance dashboard visual smoke
ZeroPointSix Aug 8, 2026
5264adc
test: fix ZER-538 browser button locator
ZeroPointSix Aug 8, 2026
90b15da
test(performance): cover API contract and mobile layout
ZeroPointSix Aug 8, 2026
83e2c86
perf(telemetry): back off failed metric uploads
ZeroPointSix Aug 8, 2026
0d39e1c
style(tests): apply Black formatting
ZeroPointSix Aug 8, 2026
1e3aae6
fix: stack temporary mail status on mobile
ZeroPointSix Aug 8, 2026
b7e04f6
fix(ui): keep dashboard clear of theme trigger
ZeroPointSix Aug 8, 2026
4868753
test: cover responsive temporary mail status
ZeroPointSix Aug 8, 2026
2741bbd
docs(changelog): record ZER-539 verification
ZeroPointSix Aug 8, 2026
4793c05
chore: remove temporary ZER-538 browser workflow
ZeroPointSix Aug 8, 2026
c6a895d
fix: enforce API key name uniqueness
ZeroPointSix Aug 8, 2026
117ba2b
style: format API key migration tests
ZeroPointSix Aug 8, 2026
c8aba32
fix(temp-mail): require complete Cloudflare configuration
ZeroPointSix Aug 9, 2026
a64c50e
test(temp-mail): cover incomplete Cloudflare configuration
ZeroPointSix Aug 9, 2026
eb2fab4
fix(frontend): normalize mailbox capability checks
ZeroPointSix Aug 9, 2026
102e6c1
test(frontend): cover mailbox capability defaults
ZeroPointSix Aug 9, 2026
bd95436
fix(frontend): disable unsupported mailbox actions
ZeroPointSix Aug 9, 2026
a1988f1
docs: record ZER-538 review fixes
ZeroPointSix Aug 9, 2026
5afa485
docs: keep ZER-538 review fixes unreleased
ZeroPointSix Aug 9, 2026
9204b54
style(temp-mail): apply Black formatting
ZeroPointSix Aug 9, 2026
862688e
ci: validate ZER-538 review fixes
ZeroPointSix Aug 9, 2026
cdd74a0
fix(performance): repair trace pairing and metric privacy
ZeroPointSix Aug 9, 2026
855f44b
ci: remove temporary ZER-538 review workflow
ZeroPointSix Aug 9, 2026
670692a
style: apply Black formatting
ZeroPointSix Aug 9, 2026
01c8e78
fix: preserve complete temp mail capabilities
ZeroPointSix Aug 9, 2026
8d8a88d
fix: require custom temp mail API credentials
ZeroPointSix Aug 9, 2026
10383c0
test: cover custom temp mail configuration
ZeroPointSix Aug 9, 2026
574b943
test: retain mailbox read capabilities
ZeroPointSix Aug 9, 2026
287b025
feat: extract capability-aware mailbox actions
ZeroPointSix Aug 9, 2026
17364b1
test: assert mailbox action disabled states
ZeroPointSix Aug 9, 2026
d326fe2
refactor: use tested mailbox actions
ZeroPointSix Aug 9, 2026
90770cf
chore: prepare v2.9.7 changelog
ZeroPointSix Aug 9, 2026
6e4b034
docs: keep ZER-538 fixes unreleased
ZeroPointSix Aug 9, 2026
790fc3b
style: format capability normalization
ZeroPointSix Aug 9, 2026
f1777b4
fix(mailbox): classify dual-folder pull results
ZeroPointSix Aug 9, 2026
7b674d1
test(mailbox): cover dual-folder pull outcomes
ZeroPointSix Aug 9, 2026
5c58eb8
ci(frontend): run tests types and build
ZeroPointSix Aug 9, 2026
5b0e232
ci: validate ZER-538 frontend review fix
ZeroPointSix Aug 9, 2026
e40c1fd
fix: default absent mailbox capabilities
ZeroPointSix Aug 9, 2026
35e5e17
ci: generate Umi types before frontend checks
ZeroPointSix Aug 9, 2026
1228df5
ci: remove temporary ZER-538 validation
ZeroPointSix Aug 9, 2026
566f8a4
fix(mailbox): report partial dual-folder results
ZeroPointSix Aug 9, 2026
4bfcab6
fix(mailbox): report partial dual-folder results
ZeroPointSix Aug 9, 2026
1e7d9ed
fix(mailbox): report partial dual-folder results
ZeroPointSix Aug 9, 2026
b57d961
fix(mailbox): report partial dual-folder results
ZeroPointSix Aug 9, 2026
4732675
fix(mailbox): report partial dual-folder results
ZeroPointSix Aug 9, 2026
8b9ef19
fix(mailbox): report partial dual-folder results
ZeroPointSix Aug 9, 2026
988951d
feat: improve AI connectivity configuration
ZeroPointSix Aug 9, 2026
26ebb0b
fix: address AI model list review feedback
ZeroPointSix Aug 9, 2026
5bd2b88
Merge pull request #132 from ZeroPointSix/delivery/zer-538-temp-email-ui
ZeroPointSix Aug 9, 2026
ee0a61c
Merge pull request #130 from ZeroPointSix/fix/zer-534-login-redirect
ZeroPointSix Aug 9, 2026
1994619
Merge pull request #133 from ZeroPointSix/codex/zer-537-api-key-flow
ZeroPointSix Aug 9, 2026
a25ddc9
merge: resolve conflicts with frontend base after #132/#130/#133
Aug 9, 2026
58899cc
fix: finish PR #131 conflict resolution artifacts
Aug 9, 2026
1cbcba5
Merge pull request #131 from ZeroPointSix/codex/zer-535-mail-folder-mode
ZeroPointSix Aug 9, 2026
7306ca0
merge: resolve conflicts with frontend base after #131 stack
Aug 9, 2026
f1cd425
fix(changelog): restore full notes after conflict corruption
Aug 9, 2026
b6c0b3a
Merge pull request #134 from ZeroPointSix/codex/zer-539-performance-o…
ZeroPointSix Aug 9, 2026
233625c
merge: resolve conflicts with frontend base for ZER-536
Aug 9, 2026
760f1c3
Merge pull request #137 from ZeroPointSix/delivery/zer-536-ai-connect…
ZeroPointSix Aug 9, 2026
995ab68
chore(#109): integrate polish stack into new frontend main PR
Aug 9, 2026
99fa01e
fix(#109): expose build identity on healthz for Railway verify
Aug 9, 2026
fe888fe
chore(#109): stamp build-info with 99fa01e
Aug 9, 2026
060175a
fix(#109): make healthz build identity reliable on Railway
Aug 9, 2026
2147898
chore(#109): stamp build-info 060175a
Aug 9, 2026
fc5844b
merge(#109): bring ZER-381 SPA fixes from PR #128/#129
Aug 9, 2026
89a2524
chore(#109): stamp build-info after merging PR #128/#129
Aug 9, 2026
3c0ef24
fix(frontend): compact temporary mail status
ZeroPointSix Aug 9, 2026
06f59fb
Unify frontend theme and harden diagnostics
Aug 10, 2026
6eab615
Revert "Unify frontend theme and harden diagnostics"
Aug 10, 2026
84afa66
Unify frontend theme and harden diagnostics
Aug 10, 2026
6ce2f1e
chore(zer-582): bump version to 2.9.8
Aug 10, 2026
da2d603
style(python): apply Black 26 formatting for CI lint gate
Aug 10, 2026
4b1c436
Merge pull request #140 from ZeroPointSix/delivery/zer-582-frontend-t…
ZeroPointSix Aug 10, 2026
1f3b845
style(zer-582): 视觉细节打磨(#140 后续)
Aug 10, 2026
0f4d628
Merge pull request #141 from ZeroPointSix/delivery/zer-582-visual-polish
ZeroPointSix Aug 10, 2026
063e1ea
revert(zer-582): 撤销 #141 视觉细节打磨(回退纯白前端)
Aug 10, 2026
ad4f088
revert(zer-582): 撤销 #140 主题统一与诊断增强(回退纯白前端)
Aug 10, 2026
28e1be1
Merge pull request #142 from ZeroPointSix/delivery/zer-582-frontend-r…
ZeroPointSix Aug 10, 2026
cd4b886
fix(zer-582): restore ant-design-pro/src/pages/settings/index.tsx
ZeroPointSix Aug 10, 2026
1f13ce9
fix(zer-582): restore ant-design-pro/src/services/outlook/settings.ts
ZeroPointSix Aug 10, 2026
da7ae8d
fix(zer-582): restore outlook_web/controllers/settings.py
ZeroPointSix Aug 10, 2026
41dff7b
fix(zer-582): restore outlook_web/services/webhook_push.py
ZeroPointSix Aug 10, 2026
9d5ee21
fix(zer-582): restore outlook_web/controllers/system.py
ZeroPointSix Aug 10, 2026
d13021a
chore(zer-582): bump version to 2.9.9
ZeroPointSix Aug 10, 2026
4184007
docs(zer-582): record white service display fix
ZeroPointSix Aug 10, 2026
68a4a59
test(zer-582): add temporary settings visual fixtures
ZeroPointSix Aug 10, 2026
3b98af6
test(zer-582): add temporary settings screenshot runner
ZeroPointSix Aug 10, 2026
af1103d
ci(zer-582): capture temporary service settings evidence
ZeroPointSix Aug 10, 2026
ddf8b38
test(zer-582): wait for loaded settings fixture
ZeroPointSix Aug 10, 2026
5357063
test(zer-582): make settings tab activation reliable
ZeroPointSix Aug 10, 2026
05ee38d
chore(zer-582): remove temporary visual workflow
ZeroPointSix Aug 10, 2026
9f262c7
chore(zer-582): restore performance preview server
ZeroPointSix Aug 10, 2026
c499cf9
chore(zer-582): remove temporary settings smoke script
ZeroPointSix Aug 10, 2026
4d375d8
Merge pull request #143 from ZeroPointSix/fix/zer-582-white-service-d…
cursor[bot] Aug 11, 2026
78153dd
feat(accounts): add full token refresh entry
Aug 13, 2026
ce0bb83
fix(zer-657): add temporary mail settings helpers
ZeroPointSix Aug 13, 2026
6338f4b
test(zer-657): cover temporary mail settings parsing
ZeroPointSix Aug 13, 2026
20286ca
fix(zer-657): restore complete temporary mail settings form
ZeroPointSix Aug 13, 2026
0770b41
fix(zer-657): route temp mail settings entry to its tab
ZeroPointSix Aug 13, 2026
ca7b9ac
chore(zer-657): bump version to 2.9.10
ZeroPointSix Aug 13, 2026
c36bf94
docs(zer-657): record temp mail settings migration fix
ZeroPointSix Aug 13, 2026
d8c3cca
fix(zer-657): use Ant Design 6 divider orientation
ZeroPointSix Aug 13, 2026
0fd4250
style(zer-657): remove non-null assertion
ZeroPointSix Aug 13, 2026
c4f5e0d
fix(zer-657): use default divider layout
ZeroPointSix Aug 13, 2026
6f8c348
fix(zer-658): 仅开发环境渲染 SettingDrawer 并新增正式主题切换入口
Aug 14, 2026
f96fc6a
feat(zer-653): 新前端账号标签能力——展示/筛选/打标/标签管理
Aug 14, 2026
0493aba
fix(zer-658): 头像菜单「主题设置」生产环境改为直接切换主题
Aug 14, 2026
b6c75f0
Merge pull request #147 from ZeroPointSix/fix/zer-658-theme-drawer
ZeroPointSix Aug 14, 2026
e235aff
Merge pull request #148 from ZeroPointSix/feat/zer-653-account-tags
ZeroPointSix Aug 14, 2026
01327f2
fix(zer-660): 账号行内补齐旧站简洁模式高频操作
Aug 14, 2026
65cde86
Merge pull request #149 from ZeroPointSix/fix/zer-660-account-inline-…
ZeroPointSix Aug 14, 2026
41770c3
chore(docker): .dockerignore 排除嵌套 node_modules/dist,快照构建上下文从 1GB 降至源码体积
Aug 14, 2026
a77cb12
Merge pull request #150 from ZeroPointSix/fix/dockerignore-nested-dirs
ZeroPointSix Aug 14, 2026
6347d72
Merge pull request #146 from ZeroPointSix/fix/zer-657-temp-mail-settings
ZeroPointSix Aug 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .build-info
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
branch=feat/ant-design-pro-frontend-migration
sha=fc5844bccd0028882a151617236b31c1a1f1bc63
time=2026-08-09T09:44:14Z
note=include-pr-128-129-zer381-fixes
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ ENV/

# Node / Jest
node_modules/
**/node_modules/
**/dist/
tests/

# 数据库文件(使用 volume 挂载)
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/docker-build-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,17 @@ on:
- main
- master
- dev # dev 分支自动构建 :dev 标签
- feat/ant-design-pro-frontend-migration
- cursor/zer-381-frontend-polish-b985
- cursor/railway-spa-deploy-e902
paths:
- '**.py'
- 'pyproject.toml'
- 'requirements.txt'
- 'Dockerfile'
- 'templates/**'
- 'static/**'
- 'ant-design-pro/**'
- '.github/workflows/docker-build-push.yml'
workflow_dispatch:

Expand Down
67 changes: 67 additions & 0 deletions .github/workflows/frontend-quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Frontend Quality

on:
pull_request:
paths:
- "ant-design-pro/**"
- ".github/workflows/frontend-quality.yml"
workflow_dispatch:

permissions:
contents: read

jobs:
frontend-quality:
runs-on: ubuntu-latest
timeout-minutes: 20
defaults:
run:
working-directory: ant-design-pro
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: ant-design-pro/package-lock.json
- name: Install dependencies
run: npm ci --ignore-scripts --no-audit --no-fund
- name: Generate Umi runtime types
run: npx max setup
- name: Lint
run: npm run biome:lint
- name: Type check
run: npm run tsc
- name: Test
run: npm test
- name: Build
run: npm run build
- name: Start performance visual smoke server
run: |
nohup node scripts/performance-preview-server.mjs > /tmp/performance-preview.log 2>&1 &
for attempt in {1..30}; do
if curl --fail --silent http://127.0.0.1:4173/overview?tab=performance > /dev/null; then
exit 0
fi
sleep 1
done
cat /tmp/performance-preview.log
exit 1
- name: Capture performance dashboard
run: |
google-chrome --headless --no-sandbox --disable-gpu \
--window-size=1440,1200 --virtual-time-budget=5000 \
--screenshot=performance-dashboard.png \
"http://127.0.0.1:4173/overview?tab=performance"
google-chrome --headless --no-sandbox --disable-gpu \
--window-size=390,844 --virtual-time-budget=5000 \
--screenshot=performance-dashboard-mobile.png \
"http://127.0.0.1:4173/overview?tab=performance"
test -s performance-dashboard.png
test -s performance-dashboard-mobile.png
- name: Upload visual smoke artifact
uses: actions/upload-artifact@v4
with:
name: performance-dashboard
path: ant-design-pro/performance-dashboard*.png
if-no-files-found: error
49 changes: 49 additions & 0 deletions .github/workflows/frontend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Frontend Checks

on:
pull_request:
paths:
- "ant-design-pro/**"
- ".github/workflows/frontend.yml"
push:
branches:
- main
- dev
paths:
- "ant-design-pro/**"
- ".github/workflows/frontend.yml"

permissions:
contents: read

jobs:
test:
name: Vitest, TypeScript, and build
runs-on: ubuntu-latest
timeout-minutes: 20
defaults:
run:
working-directory: ant-design-pro

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
cache: npm
cache-dependency-path: ant-design-pro/package-lock.json

- name: Install dependencies
run: npm ci

- name: Run unit tests
run: npm test

- name: Run TypeScript checks
run: npm run tsc

- name: Build production bundle
run: npm run build
2 changes: 1 addition & 1 deletion .github/workflows/sonar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
coverage xml

- name: SonarQube Scan
uses: sonarsource/sonarqube-scan-action@v5
uses: sonarsource/sonarqube-scan-action@v6
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
10 changes: 8 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,14 @@ TODO.md

# Node.js
node_modules/
package.json
package-lock.json
# 根目录 Jest 本地工具链(不入库);ant-design-pro 前端工程单独跟踪
/package.json
/package-lock.json
ant-design-pro/node_modules/
ant-design-pro/dist/
ant-design-pro/src/.umi/
ant-design-pro/src/.umi-production/
ant-design-pro/.swc/

# 临时文件
*.log
Expand Down
47 changes: 47 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,53 @@ All notable changes to OutlookMail Plus are documented in this file.

## [Unreleased]

### 优化 / Improvements

- **ZER-657 新前端临时邮箱设置迁移补齐**:临时邮箱页的设置入口直达独立设置页签;恢复 Provider、API、域名、默认域名、前缀规则和 Cloudflare Worker 配置,并补充 JSON 结构校验、脱敏密钥保护与域名对象展示兼容。
- **ZER-582 纯白前端服务展示优化**:保持现有纯白主题、导航与全局色板不变;API Key 改为名称 / 状态 / 脱敏 Token / 操作的简洁列表,权限和邮箱范围固定在创建时选择并通过详情查看;Webhook 测试展示已保存配置的真实投递 URL、上游 HTTP 状态、耗时和尝试次数,Token 留空表示清空;AI 测试区分连通性与契约状态,并在请求失败时保留端点、模型和 HTTP 诊断。
- **版本号更新为 2.9.10**。

### 集成 / Integration

- **#109 新前端主线回收**:将 polish 分支与功能 PR(#130/#131/#132/#133/#134/#137)统一回收到 `feat/ant-design-pro-frontend-migration`(PR #109)。Railway 测试环境源分支改绑本分支。
- **/healthz 构建标识**:返回 `git_sha` / `git_branch` / `build_time`,便于确认 Railway 实际运行提交。

### 新增功能 / New Features

- **ZER-381 新前端自动轮询对齐旧前端**:开启「自动轮询」设置后,标准模式选中账号即自动开始监听新邮件(对齐旧前端 `accounts.js` 选中即监听);复制邮箱地址成功后立即开始监听该账号(对齐旧前端 `email-copied` 事件),覆盖注册收验证码主流程,不再只能手动拉取。
- **ZER-381 顶栏 GitHub 链接**:头部操作区新增 GitHub 仓库入口(对齐旧前端抬头 `btn-github`),仓库地址逻辑抽取为 `utils/repoUrl.ts` 供顶栏与页脚复用。
- **

### 修复 / Bug Fixes

- **ZER-381 监听完成后状态丢失**:轮询引擎停止/发现后不再删除条目,改为保留最终快照(`active=false`),「检测到验证码」「监听超时」等结果持续展示在账号卡片与简洁表格中。
- **ZER-381 验证码提取后摘要不更新**:监听发现新邮件/验证码后自动刷新账号摘要与当前邮件列表;手动提取验证码成功后同步刷新,最新邮件摘要与摘要验证码即时更新。
- **ZER-381 页面整页滚动与底部空白**:改为固定视口布局(对齐旧前端 `body{overflow:hidden}`),页面本身不再滚动,仅内容区内部滚动,顶栏与侧边栏保持固定。
- **ZER-381 账号管理删除项字体不一致**:antd 主题 `fontFamily` 与全局 body 字体栈统一为同一 AlibabaSans 回退链,消除 AlibabaSans 加载失败时组件回退到不同默认字体造成的同页字体不一致。
- **ZER-381 部署环境 logo/favicon 404**:Docker 镜像按 `.dockerignore` 排除了仓库 `img/` 目录,而 Flask `/img/<path>` 与 `/favicon.ico` 路由只从该目录取文件,导致新前端 logo、头像与 favicon 在部署环境全部 404。现在仓库文件缺失时回退到 SPA 构建产物(`ant-design-pro/public/img/`),两种运行环境均可加载。
- **ZER-381 邮箱页账号栏信息不全且无法复制**:账号从截断的 Menu 项改为对齐旧前端的账号卡片——完整邮箱地址(截断改为完整展示,点击文本或复制图标即复制)、provider/状态/标签、备注、最近刷新时间,并恢复每账号快捷操作(验证码 / 复制 / 监听)。
- **ZER-381 简洁模式竖排错乱**:简洁模式账号列表从竖排 List 改为横向长条表格(选择 / 邮箱(点击复制) / 验证码 / 最新邮件 / 分组标签 / 操作),对齐旧前端 `mail-row` 六列栅格;验证码按钮优先复用账号摘要码,无摘要码时兜底实时提取。
- **ZER-381 邮件详情验证码区布局**:工具栏顺序对齐旧前端(提取并复制验证码主按钮 → 再次复制 → 信任原始 HTML),不再把信任开关放在最前。

## [v2.9.7] - 2026-08-09

### 修复 / Bug Fixes

- **

## [v2.9.6] - 2026-08-08

### 优化 / Improvements

- **

## [v2.9.5] - 2026-08-05

### 修复 / Bug Fixes

- **ZER-381 无代理场景错误误分类**:仅在分组明确配置 `proxy_url` 时,才将 Graph 的 `ProxyError`/`ConnectionError` 判定为 `EMAIL_PROXY_CONNECTION_FAILED` / `PROXY_ERROR` 并跳过 IMAP 回退;无代理时继续 Graph → IMAP 回退。覆盖 `/api/emails`、external messages 与删除邮件回退路径。
- **主题抽屉开关语义**:修正 Ant Design Pro `SettingDrawer` 的 `collapse` 开合状态接线。

## [v2.8.0] - 2026-07-26

旧前端紧急版本(Issue #115)。在 SPA 新前端迁移(#109)之前,先发布一个范围受控、可回滚的稳定旧前端版本,合入近期关键缺陷修复与验证码能力增强。
Expand Down
30 changes: 16 additions & 14 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,37 +1,39 @@
# 使用 Python 3.11 作为基础镜像
# syntax=docker/dockerfile:1

FROM node:22-bookworm-slim AS frontend
WORKDIR /frontend

COPY ant-design-pro/ ./
ENV HUSKY=0 CI=true
RUN npm install --no-audit --no-fund --include=dev
ENV NODE_ENV=production
RUN npm run build

FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
GUNICORN_WORKERS=1 \
GUNICORN_THREADS=8 \
GUNICORN_TIMEOUT=120
GUNICORN_TIMEOUT=120 \
SPA_ENABLED=true

# 复制依赖文件
COPY requirements.txt .

# 安装依赖(pip 走国内镜像加速)
RUN pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple && \
pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple

# 复制应用代码
COPY . .
COPY --from=frontend /frontend/dist /app/ant-design-pro/dist

# 创建数据目录
RUN mkdir -p /app/data && chmod +x /app/scripts/start-gunicorn.sh
RUN mkdir -p /app/data && chmod +x /app/scripts/start-gunicorn.sh && \
if [ -f /app/.build-info ]; then cp /app/.build-info /app/.build_info_copy; fi

# 暴露端口
EXPOSE 5000

# 健康检查
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s CMD ["python","-c","import urllib.request as u; u.urlopen('http://localhost:5000/healthz', timeout=4).read()"]

# 启动应用:默认单 worker + 多线程,避免同步长轮询阻塞整站
# 注意:禁用 --preload,避免在 master 进程中启动后台调度线程
CMD ["scripts/start-gunicorn.sh"]
1 change: 1 addition & 0 deletions ant-design-pro/.commitlintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = { extends: ['@commitlint/config-conventional'] };
16 changes: 16 additions & 0 deletions ant-design-pro/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# http://editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

[Makefile]
indent_style = tab
54 changes: 54 additions & 0 deletions ant-design-pro/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
**/node_modules
# roadhog-api-doc ignore
/src/utils/request-temp.js
_roadhog-api-doc

# production
/dist

# misc
.DS_Store
npm-debug.log*
yarn-error.log

/coverage
.idea
yarn.lock
*bak
.vscode


# visual studio code
.history
*.log
functions/*
.temp/**

# claude code local settings
.claude/settings.local.json

# umi
.umi
.umi-production
.umi-test
.umi-undefined
.turbopack

# screenshot
screenshot
.firebase

build

# worktrees
.worktrees

# superpowers docs
docs/superpowers

# cloudflare wrangler
.wrangler
requestRecord.mock.js
1 change: 1 addition & 0 deletions ant-design-pro/.husky/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
npx --no -- commitlint --edit $1
1 change: 1 addition & 0 deletions ant-design-pro/.husky/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lint-staged
8 changes: 8 additions & 0 deletions ant-design-pro/.lintstagedrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"**/*.{js,jsx,tsx,ts,css,less}": [
"npx @biomejs/biome check --write"
],
"src/**/*.md": [
"npx @biomejs/biome check --write"
]
}
1 change: 1 addition & 0 deletions ant-design-pro/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
legacy-peer-deps=true
Loading
Loading