From 1a7ae1dc27de3c59a17419d86ce14be4a12ab932 Mon Sep 17 00:00:00 2001 From: QLHazyCoder <2825305047@qq.com> Date: Fri, 17 Apr 2026 10:07:53 +0800 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- content/signup-page.js | 27 +++ tests/signup-entry-diagnostics.test.js | 137 +++++++++++++ 项目文件结构说明.md | 263 +++++++++++++------------ 3 files changed, 296 insertions(+), 131 deletions(-) create mode 100644 tests/signup-entry-diagnostics.test.js diff --git a/content/signup-page.js b/content/signup-page.js index d55903a..9b6975e 100644 --- a/content/signup-page.js +++ b/content/signup-page.js @@ -365,6 +365,32 @@ function inspectSignupEntryState() { }; } +function getSignupEntryDiagnostics() { + const actionCandidates = document.querySelectorAll( + 'a, button, [role="button"], [role="link"], input[type="button"], input[type="submit"]' + ); + const visibleActions = Array.from(actionCandidates) + .filter(isVisibleElement) + .slice(0, 12) + .map((el) => ({ + tag: (el.tagName || '').toLowerCase(), + type: el.getAttribute?.('type') || '', + text: getActionText(el).slice(0, 80), + enabled: isActionEnabled(el), + })) + .filter((item) => item.text); + + return { + url: location.href, + title: document.title || '', + readyState: document.readyState || '', + hasEmailInput: Boolean(getSignupEmailInput()), + hasPasswordInput: Boolean(getSignupPasswordInput()), + visibleActions, + bodyTextPreview: getPageTextSnapshot().slice(0, 240), + }; +} + async function waitForSignupEntryState(options = {}) { const { timeout = 15000, @@ -410,6 +436,7 @@ async function ensureSignupEntryReady(timeout = 15000) { }; } + log(`注册入口识别失败,诊断快照:${JSON.stringify(getSignupEntryDiagnostics())}`, 'warn'); throw new Error('当前页面没有可用的注册入口,也不在邮箱/密码页。URL: ' + location.href); } diff --git a/tests/signup-entry-diagnostics.test.js b/tests/signup-entry-diagnostics.test.js new file mode 100644 index 0000000..d1795bd --- /dev/null +++ b/tests/signup-entry-diagnostics.test.js @@ -0,0 +1,137 @@ +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); + +const source = fs.readFileSync('content/signup-page.js', 'utf8'); + +function extractFunction(name) { + const markers = [`async function ${name}(`, `function ${name}(`]; + const start = markers + .map((marker) => source.indexOf(marker)) + .find((index) => index >= 0); + if (start < 0) { + throw new Error(`missing function ${name}`); + } + + let parenDepth = 0; + let signatureEnded = false; + let braceStart = -1; + for (let i = start; i < source.length; i += 1) { + const ch = source[i]; + if (ch === '(') { + parenDepth += 1; + } else if (ch === ')') { + parenDepth -= 1; + if (parenDepth === 0) { + signatureEnded = true; + } + } else if (ch === '{' && signatureEnded) { + braceStart = i; + break; + } + } + if (braceStart < 0) { + throw new Error(`missing body for function ${name}`); + } + + let depth = 0; + let end = braceStart; + for (; end < source.length; end += 1) { + const ch = source[end]; + if (ch === '{') depth += 1; + if (ch === '}') { + depth -= 1; + if (depth === 0) { + end += 1; + break; + } + } + } + + return source.slice(start, end); +} + +test('signup entry diagnostics summarizes current page inputs and visible actions', () => { + const api = new Function(` +const location = { href: 'https://chatgpt.com/' }; +const document = { + title: 'ChatGPT', + readyState: 'complete', + querySelector() { + return null; + }, + querySelectorAll(selector) { + if (selector === 'a, button, [role="button"], [role="link"], input[type="button"], input[type="submit"]') { + return [ + { + tagName: 'BUTTON', + textContent: 'Get started', + disabled: false, + getAttribute(name) { + return name === 'type' ? 'button' : ''; + }, + }, + { + tagName: 'A', + textContent: 'Log in', + disabled: false, + getAttribute() { + return ''; + }, + }, + ]; + } + return []; + }, +}; + +function isVisibleElement() { + return true; +} + +function getActionText(el) { + return [el?.textContent, el?.value, el?.getAttribute?.('aria-label'), el?.getAttribute?.('title')] + .filter(Boolean) + .join(' ') + .replace(/\\s+/g, ' ') + .trim(); +} + +function isActionEnabled(el) { + return Boolean(el) && !el.disabled && el.getAttribute('aria-disabled') !== 'true'; +} + +function getSignupEmailInput() { + return null; +} + +function getSignupPasswordInput() { + return null; +} + +function getPageTextSnapshot() { + return 'Welcome to ChatGPT. Try our latest models.'; +} + +${extractFunction('getSignupEntryDiagnostics')} + +return { + run() { + return getSignupEntryDiagnostics(); + }, +}; +`)(); + + const result = api.run(); + + assert.equal(result.url, 'https://chatgpt.com/'); + assert.equal(result.title, 'ChatGPT'); + assert.equal(result.readyState, 'complete'); + assert.equal(result.hasEmailInput, false); + assert.equal(result.hasPasswordInput, false); + assert.deepStrictEqual(result.visibleActions, [ + { tag: 'button', type: 'button', text: 'Get started', enabled: true }, + { tag: 'a', type: '', text: 'Log in', enabled: true }, + ]); + assert.match(result.bodyTextPreview, /Welcome to ChatGPT/); +}); diff --git a/项目文件结构说明.md b/项目文件结构说明.md index 90a1a24..2526d24 100644 --- a/项目文件结构说明.md +++ b/项目文件结构说明.md @@ -1,8 +1,8 @@ -# 椤圭洰鏂囦欢缁撴瀯璇存槑 +# 妞ゅ湱娲伴弬鍥︽缂佹挻鐎拠瀛樻 -鏈枃妗e垪鍑哄綋鍓嶄粨搴撲腑鎵€鏈夆€滈潪蹇界暐鏂囦欢鈥濓紝骞惰鏄庢瘡涓枃浠剁殑浣滅敤銆? +閺堫剚鏋冨锝呭灙閸戝搫缍嬮崜宥勭波鎼存挷鑵戦幍鈧張澶嗏偓婊堟姜韫囩晫鏆愰弬鍥︽閳ユ繐绱濋獮鎯邦嚛閺勫孩鐦℃稉顏呮瀮娴犲墎娈戞担婊呮暏閵? -涓嶇撼鍏ユ湰娓呭崟鐨勫拷鐣ョ洰褰曪細 +娑撳秶鎾奸崗銉︽拱濞撳懎宕熼惃鍕嫹閻c儳娲拌ぐ鏇窗 - `.github/` - `_metadata/` @@ -10,161 +10,162 @@ - `.vscode/` - `.git/` -鏇存柊瑙勫垯锛? +閺囧瓨鏌婄憴鍕灟閿? -- 鏂板銆佸垹闄ゃ€侀噸鍛藉悕闈炲拷鐣ユ枃浠跺悗锛屽繀椤诲悓姝ユ洿鏂版湰鏂囦欢銆? -- 濡傛灉鏂囦欢鑱岃矗鍙戠敓鏄庢樉鍙樺寲锛屼篃蹇呴』鍚屾鏇存柊鏈枃浠朵腑鐨勮鏄庛€? +- 閺傛澘顤冮妴浣稿灩闂勩們鈧線鍣搁崨钘夋倳闂堢偛鎷烽悾銉︽瀮娴犺泛鎮楅敍灞界箑妞よ鎮撳銉︽纯閺傜増婀伴弬鍥︽閵? +- 婵″倹鐏夐弬鍥︽閼卞矁鐭楅崣鎴犳晸閺勫孩妯夐崣妯哄閿涘奔绡冭箛鍛淬€忛崥灞绢劄閺囧瓨鏌婇張顒佹瀮娴犳湹鑵戦惃鍕嚛閺勫簺鈧? -## 鏍圭洰褰? +## 閺嶅湱娲拌ぐ? -- `.gitignore`锛氬畾涔変粨搴撳拷鐣ヨ鍒欙紝褰撳墠蹇界暐 `docs/md/`銆乣.github/`銆乣_metadata/`銆乣.vscode/` 绛夌洰褰曘€? -- `LICENSE`锛氶」鐩鍙瘉鏂囦欢銆? -- `README.md`锛氶潰鍚戜娇鐢ㄨ€呯殑椤圭洰浠嬬粛銆佸畨瑁呰鏄庛€佽兘鍔涙竻鍗曚笌鎿嶄綔鎸囧紩銆? -- `background.js`锛氭墿灞曞悗鍙?Service Worker 鍏ュ彛澹筹紝璐熻矗妯″潡瑁呴厤銆佸垵濮嬪寲銆佸叏灞€甯搁噺銆佸皯閲忎繚鐣欑殑棰嗗煙鍑芥暟涓庤繍琛屽叆鍙c€? -- `cloudflare-temp-email-utils.js`锛欳loudflare Temp Email 鐩稿叧鐨勭函宸ュ叿鍑芥暟锛岃礋璐?URL銆佸煙鍚嶃€侀偖浠跺唴瀹逛笌 MIME 鏁版嵁褰掍竴鍖栥€? -- `hotmail-utils.js`锛欻otmail 璐﹀彿涓庨獙璇佺爜鎻愬彇鐩稿叧鐨勭函宸ュ叿鍑芥暟锛岃礋璐h处鍙风瓫閫夈€侀獙璇佺爜鍖归厤銆佺涓夋柟鎺ュ彛鏁版嵁褰掍竴鍖栥€? -- `icloud-utils.js`锛歩Cloud 闅愮閭鐩稿叧鐨勭函宸ュ叿鍑芥暟锛岃礋璐?host銆佸埆鍚嶅垪琛ㄣ€佷繚鐣欑姸鎬併€佸凡鐢ㄧ姸鎬佺瓑褰掍竴鍖栥€? -- `luckmail-utils.js`锛歀uckMail 鐩稿叧鐨勭函宸ュ叿鍑芥暟锛岃礋璐i偖绠辫喘涔拌褰曘€佹爣绛俱€侀偖浠?cursor銆侀獙璇佺爜鍖归厤绛夊綊涓€鍖栥€? -- `manifest.json`锛欳hrome 鎵╁睍娓呭崟锛屽0鏄庢潈闄愩€佽儗鏅剼鏈€佷晶杈规爮銆佸唴瀹硅剼鏈笌瑙勫垯闆嗐€? -- `microsoft-email.js`锛歁icrosoft Graph / Outlook 閭欢璇诲彇杈呭姪妯″潡锛岃礋璐e埛鏂颁护鐗屾崲 token銆侀偖绠卞す杞鍜岄獙璇佺爜鎻愬彇銆? -- `package.json`锛氫粨搴撴渶灏?Node 鍖呴厤缃紝鐩墠涓昏鎻愪緵娴嬭瘯鑴氭湰瀹氫箟銆? -- `rules.json`锛氶潤鎬?DNR 瑙勫垯锛屼富瑕佸鐞?iCloud 鐩稿叧璇锋眰澶淬€? -- `start-hotmail-helper.bat`锛歐indows 涓嬪惎鍔ㄦ湰鍦?helper 鐨勮剼鏈紱褰撳墠鏃㈡湇鍔′簬 Hotmail 鏈湴鏀朵俊锛屼篃鏈嶅姟浜庤处鍙疯繍琛屽巻鍙叉枃鏈暀妗c€? -- `start-hotmail-helper.command`锛歮acOS 涓嬪惎鍔ㄦ湰鍦?helper 鐨勮剼鏈紱褰撳墠鏃㈡湇鍔′簬 Hotmail 鏈湴鏀朵俊锛屼篃鏈嶅姟浜庤处鍙疯繍琛屽巻鍙叉枃鏈暀妗c€? -- `寮€鍙戣€匒I寮€鍙戜笌PR鎻愪氦娴佺▼.md`锛氫粨搴撶幇鏈夌殑 AI 寮€鍙戜笌 PR 鎻愪氦娴佺▼璇存槑銆? -- `椤圭洰鏂囦欢缁撴瀯璇存槑.md`锛氬綋鍓嶆枃浠讹紝缁存姢鏁翠釜浠撳簱闈炲拷鐣ユ枃浠剁殑缁撴瀯涓庤亴璐g储寮曘€? -- `椤圭洰瀹屾暣閾捐矾璇存槑.md`锛氶潰鍚?AI/寮€鍙戣€呯殑瀹屾暣鍔熻兘閾捐矾璇存槑锛岀敤浜庡揩閫熺悊瑙g郴缁熸暣浣撹繍琛岃繃绋嬨€? -- `椤圭洰寮€鍙戣鑼冿紙AI鍗忎綔锛?md`锛氶潰鍚?AI/寮€鍙戣€呯殑椤圭洰寮€鍙戣鑼冦€佺害鏉熶笌鍙樻洿妫€鏌ユ竻鍗曘€? +- `.gitignore`閿涙艾鐣炬稊澶夌波鎼存挸鎷烽悾銉潐閸掓瑱绱濊ぐ鎾冲韫囩晫鏆?`docs/md/`閵嗕梗.github/`閵嗕梗_metadata/`閵嗕梗.vscode/` 缁涘娲拌ぐ鏇樷偓? +- `LICENSE`閿涙岸銆嶉惄顔款啅閸欘垵鐦夐弬鍥︽閵? +- `README.md`閿涙岸娼伴崥鎴滃▏閻劏鈧懐娈戞い鍦窗娴犲绮涢妴浣哥暔鐟佸懓顕╅弰搴涒偓浣藉厴閸旀稒绔婚崡鏇氱瑢閹垮秳缍旈幐鍥х穿閵? +- `background.js`閿涙碍澧跨仦鏇炴倵閸?Service Worker 閸忋儱褰涙竟绛圭礉鐠愮喕鐭楀Ο鈥虫健鐟佸懘鍘ら妴浣稿灥婵瀵查妴浣稿弿鐏炩偓鐢悂鍣洪妴浣哥毌闁插繋绻氶悾娆戞畱妫板棗鐓欓崙鑺ユ殶娑撳氦绻嶇悰灞藉弳閸欙絻鈧? +- `cloudflare-temp-email-utils.js`閿涙loudflare Temp Email 閻╃鍙ч惃鍕嚱瀹搞儱鍙块崙鑺ユ殶閿涘矁绀嬬拹?URL閵嗕礁鐓欓崥宥冣偓渚€鍋栨禒璺哄敶鐎归€涚瑢 MIME 閺佺増宓佽ぐ鎺嶇閸栨牓鈧? +- `hotmail-utils.js`閿涙otmail 鐠愶箑褰挎稉搴ㄧ崣鐠囦胶鐖滈幓鎰絿閻╃鍙ч惃鍕嚱瀹搞儱鍙块崙鑺ユ殶閿涘矁绀嬬拹锝堝閸欓鐡柅澶堚偓渚€鐛欑拠浣虹垳閸栧綊鍘ら妴浣侯儑娑撳鏌熼幒銉ュ經閺佺増宓佽ぐ鎺嶇閸栨牓鈧? +- `icloud-utils.js`閿涙Cloud 闂呮劗顫嗛柇顔绢唸閻╃鍙ч惃鍕嚱瀹搞儱鍙块崙鑺ユ殶閿涘矁绀嬬拹?host閵嗕礁鍩嗛崥宥呭灙鐞涖劊鈧椒绻氶悾娆戝Ц閹降鈧礁鍑¢悽銊уЦ閹胶鐡戣ぐ鎺嶇閸栨牓鈧? +- `luckmail-utils.js`閿涙瓈uckMail 閻╃鍙ч惃鍕嚱瀹搞儱鍙块崙鑺ユ殶閿涘矁绀嬬拹锝夊仏缁犺精鍠樻稊鎷岊唶瑜版洏鈧焦鐖g粵淇扁偓渚€鍋栨禒?cursor閵嗕線鐛欑拠浣虹垳閸栧綊鍘ょ粵澶婄秺娑撯偓閸栨牓鈧? +- `manifest.json`閿涙hrome 閹碘晛鐫嶅〒鍛礋閿涘苯锛愰弰搴㈡綀闂勬劑鈧浇鍎楅弲顖濆壖閺堫兙鈧椒鏅舵潏瑙勭埉閵嗕礁鍞寸€圭鍓奸張顑跨瑢鐟欏嫬鍨梿鍡愨偓? +- `microsoft-email.js`閿涙瓉icrosoft Graph / Outlook 闁喕娆㈢拠璇插絿鏉堝懎濮Ο鈥虫健閿涘矁绀嬬拹锝呭煕閺傞鎶ら悧灞惧床 token閵嗕線鍋栫粻鍗炪仚鏉烆喛顕楅崪宀勭崣鐠囦胶鐖滈幓鎰絿閵? +- `package.json`閿涙矮绮ㄦ惔鎾存付鐏?Node 閸栧懘鍘ょ純顕嗙礉閻╊喖澧犳稉鏄忣洣閹绘劒绶靛ù瀣槸閼存碍婀扮€规矮绠熼妴? +- `rules.json`閿涙岸娼ら幀?DNR 鐟欏嫬鍨敍灞煎瘜鐟曚礁顦╅悶?iCloud 閻╃鍙х拠閿嬬湴婢舵番鈧? +- `start-hotmail-helper.bat`閿涙瓙indows 娑撳鎯庨崝銊︽拱閸?helper 閻ㄥ嫯鍓奸張顒婄幢瑜版挸澧犻弮銏℃箛閸斺€茬艾 Hotmail 閺堫剙婀撮弨鏈典繆閿涘奔绡冮張宥呭娴滃氦澶勯崣鐤箥鐞涘苯宸婚崣鍙夋瀮閺堫剛鏆€濡楋絻鈧? +- `start-hotmail-helper.command`閿涙acOS 娑撳鎯庨崝銊︽拱閸?helper 閻ㄥ嫯鍓奸張顒婄幢瑜版挸澧犻弮銏℃箛閸斺€茬艾 Hotmail 閺堫剙婀撮弨鏈典繆閿涘奔绡冮張宥呭娴滃氦澶勯崣鐤箥鐞涘苯宸婚崣鍙夋瀮閺堫剛鏆€濡楋絻鈧? +- `瀵偓閸欐垼鈧寬I瀵偓閸欐垳绗孭R閹绘劒姘﹀ù浣衡柤.md`閿涙矮绮ㄦ惔鎾跺箛閺堝娈?AI 瀵偓閸欐垳绗?PR 閹绘劒姘﹀ù浣衡柤鐠囧瓨妲戦妴? +- `妞ゅ湱娲伴弬鍥︽缂佹挻鐎拠瀛樻.md`閿涙艾缍嬮崜宥嗘瀮娴犺绱濈紒瀛樺Б閺佺繝閲滄禒鎾崇氨闂堢偛鎷烽悾銉︽瀮娴犲墎娈戠紒鎾寸€稉搴や捍鐠愶絿鍌ㄥ鏇樷偓? +- `妞ゅ湱娲扮€瑰本鏆i柧鎹愮熅鐠囧瓨妲?md`閿涙岸娼伴崥?AI/瀵偓閸欐垼鈧懐娈戠€瑰本鏆i崝鐔诲厴闁炬崘鐭剧拠瀛樻閿涘瞼鏁ゆ禍搴℃彥闁喓鎮婄憴锝囬兇缂佺喐鏆f担鎾圭箥鐞涘矁绻冪粙瀣ㄢ偓? +- `妞ゅ湱娲板鈧崣鎴n潐閼煎喛绱橝I閸楀繋缍旈敍?md`閿涙岸娼伴崥?AI/瀵偓閸欐垼鈧懐娈戞い鍦窗瀵偓閸欐垼顫夐懠鍐︹偓浣哄閺夌喍绗岄崣妯绘纯濡偓閺屻儲绔婚崡鏇樷偓? ## `background/` -- `background/account-run-history.js`锛氳处鍙疯繍琛屽巻鍙叉ā鍧楋紝璐熻矗灏嗘垚鍔?澶辫触/鍋滄缁撴灉鎸佷箙鍖栧埌 `chrome.storage.local`锛屽苟鍦ㄥ惎鐢ㄧ嫭绔嬬殑鏈湴 txt 鐣欐。閰嶇疆鍚庤拷鍔犲啓鍏ユ枃鏈棩蹇椼€? -- `background/auto-run-controller.js`锛氳嚜鍔ㄨ繍琛屼富鎺у埗鍣紝灏佽澶氳疆鎵ц銆侀噸璇曘€佽疆娆℃憳瑕併€佺嚎绋嬮棿闅斾笌鍊掕鏃舵仮澶嶉€昏緫銆? -- `background/generated-email-helpers.js`锛氱敓鎴愰偖绠辫緟鍔╁眰锛屽皝瑁?Duck銆丆loudflare銆丆loudflare Temp Email銆乮Cloud 闅愮閭鐨勮幏鍙栭€昏緫銆? -- `background/logging-status.js`锛氬悗鍙版棩蹇椼€佹楠ょ姸鎬併€侀敊璇俊鎭拰鑻ュ共鐘舵€佸垽鏂殑鍏叡宸ュ叿灞傘€? -- `background/message-router.js`锛氬悗鍙版秷鎭矾鐢卞眰锛岃礋璐e鐞?`chrome.runtime.onMessage` 杩涘叆鐨勬墍鏈変笟鍔℃秷鎭€? -- `background/navigation-utils.js`锛氬鑸笌 URL 鍒ゆ柇宸ュ叿灞傦紝璐熻矗 callback銆佸叆鍙i〉銆丆PA/SUB2API 鍦板潃銆佹楠よ烦杞浉鍏冲垽鏂€? -- `background/panel-bridge.js`锛欳PA / SUB2API 闈㈡澘妗ユ帴灞傦紝灏佽 OAuth 鍦板潃鑾峰彇鎵€闇€鐨勯〉闈㈡墦寮€銆佽剼鏈敞鍏ュ拰閫氫俊銆? -- `background/signup-flow-helpers.js`锛氭敞鍐岄〉杈呭姪灞傦紝璐熻矗鎵撳紑娉ㄥ唽鍏ュ彛銆佺瓑寰呭瘑鐮侀〉浠ュ強瑙f瀽褰撳墠娴佺▼鎵€鐢ㄩ偖绠便€? -- `background/tab-runtime.js`锛氭爣绛鹃〉涓庡唴瀹硅剼鏈繍琛屾椂鍩虹璁炬柦锛屽皝瑁呮爣绛炬敞鍐屻€佸啿绐佹竻鐞嗐€佹秷鎭秴鏃躲€佹敞鍏ラ噸璇曚笌闃熷垪銆? -- `background/verification-flow.js`锛氭敞鍐?鐧诲綍楠岃瘉鐮佸叡浜祦绋嬪眰锛屽皝瑁呴噸鍙戙€佽疆璇€佹彁浜ゃ€佸け璐ュ洖閫€銆佽嚜瀹氫箟閭璺宠繃浠ュ強 2925 闀胯疆璇㈠弬鏁般€? +- `background/account-run-history.js`閿涙俺澶勯崣鐤箥鐞涘苯宸婚崣鍙壞侀崸妤嬬礉鐠愮喕鐭楃亸鍡樺灇閸?婢惰精瑙?閸嬫粍顒涚紒鎾寸亯閹镐椒绠欓崠鏍у煂 `chrome.storage.local`閿涘苯鑻熼崷銊ユ儙閻劎瀚粩瀣畱閺堫剙婀?txt 閻f瑦銆傞柊宥囩枂閸氬氦鎷烽崝鐘插晸閸忋儲鏋冮張顒佹)韫囨ぜ鈧? +- `background/auto-run-controller.js`閿涙俺鍤滈崝銊ㄧ箥鐞涘奔瀵岄幒褍鍩楅崳顭掔礉鐏忎浇顥婃径姘崇枂閹笛嗩攽閵嗕線鍣哥拠鏇樷偓浣界枂濞嗏剝鎲崇憰浣碘偓浣哄殠缁嬪妫块梾鏂剧瑢閸婃帟顓搁弮鑸典划婢跺秹鈧槒绶妴? +- `background/generated-email-helpers.js`閿涙氨鏁撻幋鎰板仏缁犺精绶熼崝鈺佺湴閿涘苯鐨濈憗?Duck閵嗕竼loudflare閵嗕竼loudflare Temp Email閵嗕巩Cloud 闂呮劗顫嗛柇顔绢唸閻ㄥ嫯骞忛崣鏍偓鏄忕帆閵? +- `background/logging-status.js`閿涙艾鎮楅崣鐗堟)韫囨ぜ鈧焦顒炴銈囧Ц閹降鈧線鏁婄拠顖欎繆閹垰鎷伴懟銉ュ叡閻樿埖鈧礁鍨介弬顓犳畱閸忣剙鍙″銉ュ徔鐏炲倶鈧? +- `background/message-router.js`閿涙艾鎮楅崣鐗堢Х閹垵鐭鹃悽鍗炵湴閿涘矁绀嬬拹锝咁槱閻?`chrome.runtime.onMessage` 鏉╂稑鍙嗛惃鍕閺堝绗熼崝鈩冪Х閹垬鈧? +- `background/navigation-utils.js`閿涙艾顕遍懜顏冪瑢 URL 閸掋倖鏌囧銉ュ徔鐏炲偊绱濈拹鐔荤煑 callback閵嗕礁鍙嗛崣锝夈€夐妴涓哖A/SUB2API 閸︽澘娼冮妴浣诡劄妤犮倛鐑︽潪顒傛祲閸忓啿鍨介弬顓溾偓? +- `background/panel-bridge.js`閿涙PA / SUB2API 闂堛垺婢樺銉﹀复鐏炲偊绱濈亸浣筋棅 OAuth 閸︽澘娼冮懢宄板絿閹碘偓闂団偓閻ㄥ嫰銆夐棃銏″ⅵ瀵偓閵嗕浇鍓奸張顒佹暈閸忋儱鎷伴柅姘繆閵? +- `background/signup-flow-helpers.js`閿涙碍鏁為崘宀勩€夋潏鍛И鐏炲偊绱濈拹鐔荤煑閹垫挸绱戝▔銊ュ斀閸忋儱褰涢妴浣虹搼瀵板懎鐦戦惍渚€銆夋禒銉ュ挤鐟欙絾鐎借ぐ鎾冲濞翠胶鈻奸幍鈧悽銊╁仏缁犱究鈧? +- `background/tab-runtime.js`閿涙碍鐖g粵楣冦€夋稉搴″敶鐎圭鍓奸張顒冪箥鐞涘本妞傞崺铏诡攨鐠佺偓鏌﹂敍灞界殱鐟佸懏鐖g粵鐐暈閸愬被鈧礁鍟跨粣浣圭閻炲棎鈧焦绉烽幁顖濈Т閺冭翰鈧焦鏁為崗銉╁櫢鐠囨洑绗岄梼鐔峰灙閵? +- `background/verification-flow.js`閿涙碍鏁為崘?閻ц缍嶆宀冪槈閻礁鍙℃禍顐gウ缁嬪鐪伴敍灞界殱鐟佸懘鍣搁崣鎴欌偓浣界枂鐠囶潿鈧焦褰佹禍銈冣偓浣搞亼鐠愩儱娲栭柅鈧妴浣藉殰鐎规矮绠熼柇顔绢唸鐠哄疇绻冩禒銉ュ挤 2925 闂€鑳枂鐠囥垹寮弫鑸偓? ## `background/steps/` -- `background/steps/confirm-oauth.js`锛氭楠?8 瀹炵幇锛岃礋璐?OAuth 鍚屾剰椤垫寜閽畾浣嶃€佺偣鍑汇€乴ocalhost 鍥炶皟鐩戝惉涓庡洖璋冨畬鎴愩€? -- `background/steps/fetch-login-code.js`锛氭楠?7 瀹炵幇锛岃礋璐g櫥褰曢獙璇佺爜闃舵鐨勯偖绠辫疆璇笌鍥為€€鎺у埗銆? -- `background/steps/fetch-signup-code.js`锛氭楠?4 瀹炵幇锛岃礋璐f敞鍐岄獙璇佺爜闃舵鐨勯〉闈㈠噯澶囦笌楠岃瘉鐮佹祦绋嬪叆鍙c€? -- `background/steps/fill-password.js`锛氭楠?3 瀹炵幇锛岃礋璐e瘑鐮佺敓鎴愩€佷繚瀛樸€佸洖濉笌鎻愪氦銆? -- `background/steps/fill-profile.js`锛氭楠?5 瀹炵幇锛岃礋璐e鍚嶃€佺敓鏃ュ~鍐欏苟鎶婅祫鏂欐彁浜ょ粰娉ㄥ唽椤靛唴瀹硅剼鏈€? -- `background/steps/oauth-login.js`锛氭楠?6 瀹炵幇锛岃礋璐e埛鏂?OAuth 閾炬帴銆佺櫥褰曞拰纭繚杩涘叆楠岃瘉鐮侀〉銆? -- `background/steps/open-chatgpt.js`锛氭楠?1 瀹炵幇锛岃礋璐f墦寮€ ChatGPT 瀹樼綉骞剁‘璁ゅ叆鍙e氨缁€? -- `background/steps/platform-verify.js`锛氭楠?9 瀹炵幇锛岃礋璐?CPA / SUB2API 鍥炶皟楠岃瘉銆? -- `background/steps/registry.js`锛氭楠ゆ敞鍐岃〃宸ュ巶锛岃礋璐g敤绋冲畾鐨勬楠ゅ厓鏁版嵁鏄犲皠鍒版墽琛屽櫒銆? -- `background/steps/submit-signup-email.js`锛氭楠?2 瀹炵幇锛岃礋璐f敞鍐屽叆鍙g偣鍑汇€侀偖绠辨彁浜や笌鎻愪氦鍚庤惤鍦伴〉鍒嗘敮鍒ゆ柇銆? +- `background/steps/confirm-oauth.js`閿涙碍顒炴?8 鐎圭偟骞囬敍宀冪鐠?OAuth 閸氬本鍓版い鍨瘻闁筋喖鐣炬担宥冣偓浣哄仯閸戞眹鈧勾ocalhost 閸ョ偠鐨熼惄鎴濇儔娑撳骸娲栫拫鍐ㄧ暚閹存劑鈧? +- `background/steps/fetch-login-code.js`閿涙碍顒炴?7 鐎圭偟骞囬敍宀冪鐠愶絿娅ヨぐ鏇㈢崣鐠囦胶鐖滈梼鑸殿唽閻ㄥ嫰鍋栫粻杈枂鐠囶澀绗岄崶鐐衡偓鈧幒褍鍩楅妴? +- `background/steps/fetch-signup-code.js`閿涙碍顒炴?4 鐎圭偟骞囬敍宀冪鐠愶絾鏁為崘宀勭崣鐠囦胶鐖滈梼鑸殿唽閻ㄥ嫰銆夐棃銏犲櫙婢跺洣绗屾宀冪槈閻焦绁︾粙瀣弳閸欙絻鈧? +- `background/steps/fill-password.js`閿涙碍顒炴?3 鐎圭偟骞囬敍宀冪鐠愶絽鐦戦惍浣烘晸閹存劑鈧椒绻氱€涙ǜ鈧礁娲栨繅顐$瑢閹绘劒姘﹂妴? +- `background/steps/fill-profile.js`閿涙碍顒炴?5 鐎圭偟骞囬敍宀冪鐠愶絽顫橀崥宥冣偓浣烘晸閺冦儱锝為崘娆忚嫙閹跺﹨绁弬娆愬絹娴溿倗绮板▔銊ュ斀妞ら潧鍞寸€圭鍓奸張顑锯偓? +- `background/steps/oauth-login.js`閿涙碍顒炴?6 鐎圭偟骞囬敍宀冪鐠愶絽鍩涢弬?OAuth 闁剧偓甯撮妴浣烘瑜版洖鎷扮涵顔荤箽鏉╂稑鍙嗘宀冪槈閻線銆夐妴? +- `background/steps/open-chatgpt.js`閿涙碍顒炴?1 鐎圭偟骞囬敍宀冪鐠愶絾澧﹀鈧?ChatGPT 鐎规缍夐獮鍓佲€樼拋銈呭弳閸欙絽姘ㄧ紒顏傗偓? +- `background/steps/platform-verify.js`閿涙碍顒炴?9 鐎圭偟骞囬敍宀冪鐠?CPA / SUB2API 閸ョ偠鐨熸宀冪槈閵? +- `background/steps/registry.js`閿涙碍顒炴銈嗘暈閸愬矁銆冨銉ュ范閿涘矁绀嬬拹锝囨暏缁嬪啿鐣鹃惃鍕劄妤犮倕鍘撻弫鐗堝祦閺勭姴鐨犻崚鐗堝⒔鐞涘苯娅掗妴? +- `background/steps/submit-signup-email.js`閿涙碍顒炴?2 鐎圭偟骞囬敍宀冪鐠愶絾鏁為崘灞藉弳閸欙絿鍋i崙姹団偓渚€鍋栫粻杈ㄥ絹娴溿倓绗岄幓鎰唉閸氬氦鎯ら崷浼淬€夐崚鍡樻暜閸掋倖鏌囬妴? ## `content/` -- `content/activation-utils.js`锛氬唴瀹硅剼鏈€氱敤婵€娲荤瓥鐣ュ伐鍏凤紝璐熻矗鎸夐挳鐐瑰嚮鏂瑰紡鍒ゆ柇涓?Step 9 鍙仮澶嶅け璐ユ枃妗堝垽鏂€? -- `content/duck-mail.js`锛欴uckDuckGo Email Protection 椤甸潰鑴氭湰锛岃礋璐g敓鎴愭垨璇诲彇 `@duck.com` 鍦板潃銆? -- `content/gmail-mail.js`锛欸mail 閭杞鑴氭湰锛岃礋璐e湪 Gmail 椤甸潰涓尮閰嶉獙璇佺爜閭欢銆? -- `content/icloud-mail.js`锛歩Cloud 閭椤甸潰鑴氭湰锛岃礋璐e湪 iCloud Mail 椤甸潰涓鍙栭偖浠惰鎯呭拰楠岃瘉鐮併€? -- `content/inbucket-mail.js`锛欼nbucket 閭杞鑴氭湰锛岃礋璐e湪 Inbucket 椤甸潰涓鍙?鍒犻櫎楠岃瘉鐮侀偖浠躲€? -- `content/mail-163.js`锛?63 / 163 VIP 閭杞鑴氭湰锛岃礋璐g綉椤甸偖绠遍獙璇佺爜璇诲彇鍜岄偖浠舵竻鐞嗐€? -- `content/mail-2925.js`锛?925 閭椤甸潰鑴氭湰锛岃礋璐?2925 閭鏀朵欢杞涓庨獙璇佺爜鍖归厤銆? -- `content/qq-mail.js`锛歈Q 閭杞鑴氭湰锛岃礋璐g綉椤甸偖绠遍獙璇佺爜璇诲彇銆? -- `content/signup-page.js`锛氭敞鍐?鐧诲綍/鎺堟潈涓诲唴瀹硅剼鏈紝璐熻矗 OpenAI / ChatGPT 椤甸潰涓婄殑姝ラ鎵ц銆? -- `content/sub2api-panel.js`锛歋UB2API 鍚庡彴鍐呭鑴氭湰锛岃礋璐h幏鍙?OAuth 鍦板潃鍜屾彁浜?localhost 鍥炶皟銆? -- `content/utils.js`锛氬唴瀹硅剼鏈叕鍏卞伐鍏峰眰锛岃礋璐f棩蹇椼€丷EADY/COMPLETE/ERROR 涓婃姤銆佸厓绱犵瓑寰呫€佽緭鍏ヤ笌鐐瑰嚮銆? -- `content/vps-panel.js`锛欳PA 闈㈡澘鍐呭鑴氭湰锛岃礋璐h幏鍙?OAuth 鍦板潃銆佹彁浜ゅ洖璋?URL锛屽苟鍩轰簬绮剧‘鎴愬姛寰芥爣涓庨敊璇€佸仛 Step 9 鍒ゅ畾銆? +- `content/activation-utils.js`閿涙艾鍞寸€圭鍓奸張顒勨偓姘辨暏濠碘偓濞茶崵鐡ラ悾銉ヤ紣閸忓嚖绱濈拹鐔荤煑閹稿鎸抽悙鐟板毊閺傜懓绱¢崚銈嗘焽娑?Step 9 閸欘垱浠径宥呫亼鐠愩儲鏋冨鍫濆灲閺傤厹鈧? +- `content/duck-mail.js`閿涙uckDuckGo Email Protection 妞ょ敻娼伴懘姘拱閿涘矁绀嬬拹锝囨晸閹存劖鍨ㄧ拠璇插絿 `@duck.com` 閸︽澘娼冮妴? +- `content/gmail-mail.js`閿涙mail 闁喚顔堟潪顔款嚄閼存碍婀伴敍宀冪鐠愶絽婀?Gmail 妞ょ敻娼版稉顓炲爱闁板秹鐛欑拠浣虹垳闁喕娆㈤妴? +- `content/icloud-mail.js`閿涙Cloud 闁喚顔堟い鐢告桨閼存碍婀伴敍宀冪鐠愶絽婀?iCloud Mail 妞ょ敻娼版稉顓☆嚢閸欐牠鍋栨禒鎯邦嚊閹懎鎷版宀冪槈閻降鈧? +- `content/inbucket-mail.js`閿涙nbucket 闁喚顔堟潪顔款嚄閼存碍婀伴敍宀冪鐠愶絽婀?Inbucket 妞ょ敻娼版稉顓☆嚢閸?閸掔娀娅庢宀冪槈閻線鍋栨禒韬测偓? +- `content/mail-163.js`閿?63 / 163 VIP 闁喚顔堟潪顔款嚄閼存碍婀伴敍宀冪鐠愶絿缍夋い鐢稿仏缁犻亶鐛欑拠浣虹垳鐠囪褰囬崪宀勫仏娴犺埖绔婚悶鍡愨偓? +- `content/mail-2925.js`閿?925 闁喚顔堟い鐢告桨閼存碍婀伴敍宀冪鐠?2925 闁喚顔堥弨鏈垫鏉烆喛顕楁稉搴ㄧ崣鐠囦胶鐖滈崠褰掑帳閵? +- `content/qq-mail.js`閿涙瓐Q 闁喚顔堟潪顔款嚄閼存碍婀伴敍宀冪鐠愶絿缍夋い鐢稿仏缁犻亶鐛欑拠浣虹垳鐠囪褰囬妴? +- `content/signup-page.js`閿涙碍鏁為崘?閻ц缍?閹哄牊娼堟稉璇插敶鐎圭鍓奸張顒婄礉鐠愮喕鐭?OpenAI / ChatGPT 妞ょ敻娼版稉濠勬畱濮濄儵顎冮幍褑顢戦妴? +- `content/sub2api-panel.js`閿涙瓔UB2API 閸氬骸褰撮崘鍛啇閼存碍婀伴敍宀冪鐠愶綀骞忛崣?OAuth 閸︽澘娼冮崪灞惧絹娴?localhost 閸ョ偠鐨熼妴? +- `content/utils.js`閿涙艾鍞寸€圭鍓奸張顒€鍙曢崗鍗炰紣閸忓嘲鐪伴敍宀冪鐠愶絾妫╄箛妞尖偓涓稥ADY/COMPLETE/ERROR 娑撳﹥濮ら妴浣稿帗缁辩姷鐡戝鍛偓浣界翻閸忋儰绗岄悙鐟板毊閵? +- `content/vps-panel.js`閿涙PA 闂堛垺婢橀崘鍛啇閼存碍婀伴敍宀冪鐠愶綀骞忛崣?OAuth 閸︽澘娼冮妴浣瑰絹娴溿倕娲栫拫?URL閿涘苯鑻熼崺杞扮艾缁墽鈥橀幋鎰瀵拌姤鐖f稉搴ㄦ晩鐠囶垱鈧礁浠?Step 9 閸掋倕鐣鹃妴? ## `data/` -- `data/names.js`锛氶殢鏈哄鍚嶃€佺敓鏃ョ瓑娴嬭瘯鏁版嵁婧愩€? -- `data/step-definitions.js`锛氬叡浜楠ゅ厓鏁版嵁锛屽墠鍚庡彴鍏卞悓浣跨敤锛岀敤浜庡姩鎬佹覆鏌撳拰姝ラ娉ㄥ唽銆? +- `data/names.js`閿涙岸娈㈤張鍝勵潣閸氬秲鈧胶鏁撻弮銉х搼濞村鐦弫鐗堝祦濠ф劑鈧? +- `data/step-definitions.js`閿涙艾鍙℃禍顐n劄妤犮倕鍘撻弫鐗堝祦閿涘苯澧犻崥搴″酱閸忓崬鎮撴担璺ㄦ暏閿涘瞼鏁ゆ禍搴″З閹焦瑕嗛弻鎾虫嫲濮濄儵顎冨▔銊ュ斀閵? ## `docs/` -- `docs/Hotmail鍙屾ā寮忛€傞厤寮€鍙戞柟妗堝強寮€鍙戣褰?md`锛欻otmail 鍙屾ā寮忔帴鍏ョ殑鍘嗗彶鏂规鍜屽紑鍙戣褰曘€? -- `docs/浠撳簱鍗忎綔鑰匒I鍒嗘瀽PR涓庡悎骞舵爣鍑嗘祦绋?md`锛氫粨搴撳崗浣滆€呰繘琛?AI 鍒嗘瀽 PR 涓庡悎骞舵椂鐨勬祦绋嬭鏄庛€? -- `docs/images/浜ゆ祦缇?jpg`锛歊EADME 涓睍绀虹殑浜ゆ祦缇ゅ浘鐗囪祫婧愩€? -- `docs/images/鍗佽疆鑷姩.png`锛歊EADME 涓睍绀虹殑鑷姩杩愯鏁堟灉鍥俱€? -- `docs/images/寰俊.png`锛歊EADME 涓睍绀虹殑寰俊鏀舵鐮佸浘鐗囥€? -- `docs/images/鏀粯瀹?jpg`锛歊EADME 涓睍绀虹殑鏀粯瀹濇敹娆剧爜鍥剧墖銆? -- `docs/refactor/2026-04-16-architecture-refactor-plan.md`锛氭湰杞噸鏋勯樁娈电殑缁撴瀯璁捐涓庤縼绉昏鍒掕褰曘€? -- `docs/superpowers/plans/2026-04-10-hotmail-oauth-mail-pool.md`锛欻otmail OAuth 閭姹犲疄鐜拌鍒掓枃妗c€? -- `docs/superpowers/specs/2026-04-10-hotmail-oauth-design.md`锛欻otmail OAuth + Graph Mail 鐨勮璁¤鏍兼枃妗c€? +- `docs/Hotmail閸欏本膩瀵繘鈧倿鍘ゅ鈧崣鎴炴煙濡楀牆寮峰鈧崣鎴n唶瑜?md`閿涙otmail 閸欏本膩瀵繑甯撮崗銉ф畱閸樺棗褰堕弬瑙勵攳閸滃苯绱戦崣鎴n唶瑜版洏鈧? +- `docs/娴犳挸绨遍崡蹇庣稊閼板寬I閸掑棙鐎絇R娑撳骸鎮庨獮鑸电垼閸戝棙绁︾粙?md`閿涙矮绮ㄦ惔鎾冲礂娴f粏鈧懓绻樼悰?AI 閸掑棙鐎?PR 娑撳骸鎮庨獮鑸垫閻ㄥ嫭绁︾粙瀣嚛閺勫簺鈧? +- `docs/images/娴溿倖绁︾紘?jpg`閿涙瓓EADME 娑擃厼鐫嶇粈铏规畱娴溿倖绁︾紘銈呮禈閻楀洩绁┃鎰┾偓? +- `docs/images/閸椾浇鐤嗛懛顏勫З.png`閿涙瓓EADME 娑擃厼鐫嶇粈铏规畱閼奉亜濮╂潻鎰攽閺佸牊鐏夐崶淇扁偓? +- `docs/images/瀵邦喕淇?png`閿涙瓓EADME 娑擃厼鐫嶇粈铏规畱瀵邦喕淇婇弨鑸殿儥閻礁娴橀悧鍥モ偓? +- `docs/images/閺€顖欑帛鐎?jpg`閿涙瓓EADME 娑擃厼鐫嶇粈铏规畱閺€顖欑帛鐎规繃鏁瑰▎鍓х垳閸ュ墽澧栭妴? +- `docs/refactor/2026-04-16-architecture-refactor-plan.md`閿涙碍婀版潪顕€鍣搁弸鍕▉濞堢數娈戠紒鎾寸€拋鎹愵吀娑撳氦绺肩粔鏄忣吀閸掓帟顔囪ぐ鏇樷偓? +- `docs/superpowers/plans/2026-04-10-hotmail-oauth-mail-pool.md`閿涙otmail OAuth 闁喚顔堝Ч鐘茬杽閻滄媽顓搁崚鎺撴瀮濡楋絻鈧? +- `docs/superpowers/specs/2026-04-10-hotmail-oauth-design.md`閿涙otmail OAuth + Graph Mail 閻ㄥ嫯顔曠拋陇顫夐弽鍏兼瀮濡楋絻鈧? ## `icons/` -- `icons/icon128.png`锛氭墿灞?128 鍍忕礌鍥炬爣銆? -- `icons/icon16.png`锛氭墿灞?16 鍍忕礌鍥炬爣銆? -- `icons/icon48.png`锛氭墿灞?48 鍍忕礌鍥炬爣銆? +- `icons/icon128.png`閿涙碍澧跨仦?128 閸嶅繒绀岄崶鐐垼閵? +- `icons/icon16.png`閿涙碍澧跨仦?16 閸嶅繒绀岄崶鐐垼閵? +- `icons/icon48.png`閿涙碍澧跨仦?48 閸嶅繒绀岄崶鐐垼閵? ## `scripts/` -- `scripts/hotmail_helper.py`锛氭湰鍦?helper 鏈嶅姟锛岃礋璐i€氳繃鏈湴鎺ュ彛鍗忓姪 Hotmail 鑾峰彇閭欢鍜岄獙璇佺爜锛屽苟鎻愪緵璐﹀彿杩愯鍘嗗彶鏂囨湰杩藉姞鎺ュ彛銆? +- `scripts/hotmail_helper.py`閿涙碍婀伴崷?helper 閺堝秴濮熼敍宀冪鐠愶綁鈧俺绻冮張顒€婀撮幒銉ュ經閸楀繐濮?Hotmail 閼惧嘲褰囬柇顔绘閸滃矂鐛欑拠浣虹垳閿涘苯鑻熼幓鎰返鐠愶箑褰挎潻鎰攽閸樺棗褰堕弬鍥ㄦ拱鏉╄棄濮為幒銉ュ經閵? ## `sidepanel/` -- `sidepanel/hotmail-manager.js`锛氫晶杈规爮 Hotmail 璐﹀彿姹犵鐞嗗櫒锛岃礋璐e垪琛ㄣ€佸鍏ャ€侀獙璇併€佹祴璇曟敹淇″拰鎵归噺鎿嶄綔銆? -- `sidepanel/icloud-manager.js`锛氫晶杈规爮 iCloud 闅愮閭绠$悊鍣紝璐熻矗鍒楄〃銆佺瓫閫夈€佷繚鐣欍€佸垹闄ゅ拰鎵归噺鎿嶄綔銆? -- `sidepanel/luckmail-manager.js`锛氫晶杈规爮 LuckMail 绠$悊鍣紝璐熻矗閭鍒楄〃銆佺瓫閫夈€佸惎鍋溿€佷繚鐣欎笌鎵归噺鎿嶄綔銆? -- `sidepanel/sidepanel.css`锛氫晶杈规爮鏍峰紡鏂囦欢銆? -- `sidepanel/sidepanel.html`锛氫晶杈规爮椤甸潰缁撴瀯锛屽綋鍓嶆楠ゅ垪琛ㄥ凡鏀逛负鍔ㄦ€佸鍣紝骞跺湪鏃ュ織鍖烘爣棰樹笅鏂归鐣欒处鍙疯繍琛屽巻鍙叉憳瑕佹潯甯︺€? -- `sidepanel/sidepanel.js`锛氫晶杈规爮涓诲叆鍙h剼鏈紝璐熻矗 UI 鐘舵€佸悓姝ャ€佸姩鎬佹楠ゆ覆鏌撱€佹寜閽氦浜掋€佽处鍙疯繍琛屽巻鍙叉憳瑕佹覆鏌撱€佺嫭绔?txt 鐣欐。閰嶇疆涓庡箍鎾帴鏀躲€? -- `sidepanel/update-service.js`锛氫晶杈规爮鏇存柊妫€鏌ユ湇鍔★紝璐熻矗 GitHub Releases 鏌ヨ涓庣増鏈睍绀恒€? +- `sidepanel/hotmail-manager.js`閿涙矮鏅舵潏瑙勭埉 Hotmail 鐠愶箑褰垮Ч鐘殿吀閻炲棗娅掗敍宀冪鐠愶絽鍨悰銊b偓浣割嚤閸忋儯鈧線鐛欑拠浣碘偓浣圭ゴ鐠囨洘鏁规穱鈥虫嫲閹靛綊鍣洪幙宥勭稊閵? +- `sidepanel/icloud-manager.js`閿涙矮鏅舵潏瑙勭埉 iCloud 闂呮劗顫嗛柇顔绢唸缁狅紕鎮婇崳顭掔礉鐠愮喕鐭楅崚妤勩€冮妴浣虹摣闁鈧椒绻氶悾娆嶁偓浣稿灩闂勩倕鎷伴幍褰掑櫤閹垮秳缍旈妴? +- `sidepanel/luckmail-manager.js`閿涙矮鏅舵潏瑙勭埉 LuckMail 缁狅紕鎮婇崳顭掔礉鐠愮喕鐭楅柇顔绢唸閸掓銆冮妴浣虹摣闁鈧礁鎯庨崑婧库偓浣风箽閻f瑤绗岄幍褰掑櫤閹垮秳缍旈妴? +- `sidepanel/sidepanel.css`閿涙矮鏅舵潏瑙勭埉閺嶅嘲绱¢弬鍥︽閵? +- `sidepanel/sidepanel.html`閿涙矮鏅舵潏瑙勭埉妞ょ敻娼扮紒鎾寸€敍灞界秼閸撳秵顒炴銈呭灙鐞涖劌鍑¢弨閫涜礋閸斻劍鈧礁顔愰崳顭掔礉楠炶泛婀弮銉ョ箶閸栫儤鐖f0妯圭瑓閺傚綊顣╅悾娆掑閸欑柉绻嶇悰灞藉坊閸欏弶鎲崇憰浣规蒋鐢负鈧? +- `sidepanel/sidepanel.js`閿涙矮鏅舵潏瑙勭埉娑撹鍙嗛崣锝堝壖閺堫剨绱濈拹鐔荤煑 UI 閻樿埖鈧礁鎮撳銉b偓浣稿З閹焦顒炴銈嗚閺屾挶鈧焦瀵滈柦顔绘唉娴滄帇鈧浇澶勯崣鐤箥鐞涘苯宸婚崣鍙夋喅鐟曚焦瑕嗛弻鎾扁偓浣哄缁?txt 閻f瑦銆傞柊宥囩枂娑撳骸绠嶉幘顓熷复閺€韬测偓? +- `sidepanel/update-service.js`閿涙矮鏅舵潏瑙勭埉閺囧瓨鏌婂Λ鈧弻銉︽箛閸斺槄绱濈拹鐔荤煑 GitHub Releases 閺屻儴顕楁稉搴e閺堫剙鐫嶇粈鎭掆偓? ## `tests/` -- `tests/activation-utils.test.js`锛氭祴璇曞唴瀹硅剼鏈縺娲荤瓥鐣ヤ笌 Step 9 鍙仮澶嶉敊璇垽鏂€? -- `tests/auto-run-fresh-attempt-reset.test.js`锛氭祴璇曡嚜鍔ㄨ繍琛屽湪鏂颁竴杞紑濮嬪墠浼氶噸缃棫杩愯鏃朵笂涓嬫枃銆? -- `tests/auto-run-step6-restart.test.js`锛氭祴璇曡嚜鍔ㄨ繍琛屽湪姝ラ 6 涔嬪悗閬囬敊鏃朵細鍥炲埌姝ラ 6 閲嶅紑锛屽苟鍦ㄥ懡涓?add-phone 鏃跺仠姝㈤噸寮€銆? -- `tests/auto-step-random-delay.test.js`锛氭祴璇曡嚜鍔ㄨ繍琛屾闂村欢杩熶笌鏃ч厤缃敭鍏煎瑙f瀽銆? -- `tests/background-auto-run-module.test.js`锛氭祴璇曡嚜鍔ㄨ繍琛屾帶鍒跺櫒妯″潡宸叉帴鍏ヤ笖瀵煎嚭宸ュ巶銆? -- `tests/background-account-run-history-module.test.js`锛氭祴璇曡处鍙疯繍琛屽巻鍙叉ā鍧楀凡鎺ュ叆銆佸鍑哄伐鍘傦紝骞惰兘鍦ㄤ笉鍚敤鏈湴 helper 鏃舵纭寔涔呭寲璁板綍銆? -- `tests/background-account-history-settings.test.js`锛氭祴璇曡处鍙疯繍琛屽巻鍙茬殑鐙珛閰嶇疆椤瑰綊涓€鍖栵紝涓嶅啀澶嶇敤 Hotmail 妯″紡浣滀负鍚仠鏉′欢銆? -- `tests/background-generated-email-module.test.js`锛氭祴璇曠敓鎴愰偖绠辫緟鍔╂ā鍧楀凡鎺ュ叆涓斿鍑哄伐鍘傘€? -- `tests/background-icloud.test.js`锛氭祴璇?iCloud 鐩稿叧鍚庡彴绾嚱鏁颁笌鍒悕鏀跺熬閫昏緫銆? -- `tests/background-icloud-mail-provider.test.js`锛氭祴璇?iCloud 閭 provider 閰嶇疆瑙f瀽銆? -- `tests/background-logging-status-module.test.js`锛氭祴璇曟棩蹇?鐘舵€佹ā鍧楀凡鎺ュ叆涓斿鍑哄伐鍘傘€? -- `tests/background-luckmail.test.js`锛氭祴璇?LuckMail 鐩稿叧鍚庡彴閫昏緫锛屽璐拱銆佸鐢ㄣ€佹爣璁板凡鐢ㄤ笌閲嶇疆銆? -- `tests/background-message-router-module.test.js`锛氭祴璇曟秷鎭矾鐢辨ā鍧楀凡鎺ュ叆涓斿鍑哄伐鍘傘€? -- `tests/background-message-router-step2-skip.test.js`锛氭祴璇曟楠?2 鐩存帴钀藉埌楠岃瘉鐮侀〉鏃剁殑璺虫涓庣姸鎬佷繚鎶ら€昏緫銆? -- `tests/background-navigation-utils-module.test.js`锛氭祴璇曞鑸伐鍏锋ā鍧楀凡鎺ュ叆涓斿鍑哄伐鍘傘€? -- `tests/background-panel-bridge-module.test.js`锛氭祴璇曢潰鏉挎ˉ鎺ユā鍧楀凡鎺ュ叆涓斿鍑哄伐鍘傘€? -- `tests/background-signup-flow-module.test.js`锛氭祴璇曟敞鍐岄〉杈呭姪妯″潡宸叉帴鍏ヤ笖瀵煎嚭宸ュ巶銆? -- `tests/background-step-modules.test.js`锛氭祴璇曟楠ゆā鍧楁枃浠堕兘宸茬敱鍚庡彴鍏ュ彛鍔犺浇銆? -- `tests/background-step5-submit-short-circuit.test.js`锛氭祴璇?Step 5 浼氭妸鐢熸垚濂界殑璧勬枡鐩存帴杞彂缁欏唴瀹硅剼鏈紝骞朵緷璧栧畬鎴愪俊鍙锋敹灏俱€? -- `tests/step3-direct-complete.test.js`:测试 Step 3 会先回传完成载荷,再异步触发表单提交,避免页面跳转卡住主流程。 -- `tests/background-step6-retry-limit.test.js`锛氭祴璇?Step 6 鐨勬湁闄愰噸璇曚笂闄愶紝浠ュ強 Step 7 鍥炴斁鏃跺彲璺宠繃鐧诲綍鍓?Cookie 娓呯悊銆? -- `tests/background-step7-recovery.test.js`锛氭祴璇?Step 7 鍦?CPA 妯″紡涓嬩細鍏堝洖鏀?Step 6 鍐嶆彁浜ょ櫥褰曢獙璇佺爜锛屽苟涓?2925 鍏抽棴閲嶅彂闂撮殧銆? -- `tests/background-step-registry.test.js`锛氭祴璇曞悗鍙版楠ゆ敞鍐岃〃鍜屽叡浜楠ゅ畾涔夊凡鎺ュ叆銆? -- `tests/background-tab-runtime-module.test.js`锛氭祴璇曟爣绛捐繍琛屾椂妯″潡宸叉帴鍏ヤ笖瀵煎嚭宸ュ巶銆? -- `tests/background-verification-flow-module.test.js`锛氭祴璇曢獙璇佺爜娴佺▼妯″潡宸叉帴鍏ヤ笖瀵煎嚭宸ュ巶銆? -- `tests/cloudflare-temp-email-provider.test.js`锛氭祴璇?Cloudflare Temp Email provider 鐨勮疆璇笌鐩爣閭閫夋嫨閫昏緫銆? -- `tests/cloudflare-temp-email-utils.test.js`锛氭祴璇?Cloudflare Temp Email 宸ュ叿灞傜殑 URL銆佸煙鍚嶃€侀偖浠惰В鏋愰€昏緫銆? -- `tests/hotmail-api-mode.test.js`锛氭祴璇?Hotmail API 妯″紡鐩稿叧鏂囨鍜岄泦鎴愭柟寮忋€? -- `tests/hotmail-cors-headers.test.js`锛氭祴璇?Microsoft token 璇锋眰鐩稿叧 DNR 閰嶇疆銆? -- `tests/hotmail-utils.test.js`锛氭祴璇?Hotmail 宸ュ叿灞傜殑璐﹀彿绛涢€夈€侀獙璇佺爜鎻愬彇鍜屾秷鎭尮閰嶉€昏緫銆? -- `tests/icloud-mail-content.test.js`锛氭祴璇?iCloud Mail 鍐呭鑴氭湰璇诲彇閭欢姝f枃鍜岄€変腑鐘舵€侀€昏緫銆? -- `tests/icloud-utils.test.js`锛氭祴璇?iCloud 宸ュ叿灞傜殑 host銆佸埆鍚嶅垪琛ㄣ€佷繚鐣欑姸鎬佷笌绛涢€夐€昏緫銆? -- `tests/luckmail-utils.test.js`锛氭祴璇?LuckMail 宸ュ叿灞傜殑璐拱璁板綍銆侀偖浠躲€佹父鏍囧拰楠岃瘉鐮佸尮閰嶉€昏緫銆? -- `tests/microsoft-email.test.js`锛氭祴璇?Microsoft 閭欢鎷夊彇涓庨獙璇佺爜鎻愬彇閫昏緫銆? -- `tests/sidepanel-hotmail-manager.test.js`锛氭祴璇曚晶杈规爮 Hotmail 绠$悊鍣ㄦā鍧楁帴绾夸笌绌烘€佹覆鏌撱€? -- `tests/sidepanel-account-run-history.test.js`锛氭祴璇曚晶杈规爮鏃ュ織鍖轰笅鏂圭殑璐﹀彿杩愯鍘嗗彶鏉″甫缁撴瀯銆佺嫭绔嬬暀妗i厤缃帶浠朵笌鐘舵€佸垎绫绘憳瑕侀€昏緫銆? -- `tests/sidepanel-icloud-manager.test.js`锛氭祴璇曚晶杈规爮 iCloud 绠$悊鍣ㄦā鍧楁帴绾夸笌绌烘€佹覆鏌撱€? -- `tests/sidepanel-icloud-provider.test.js`锛氭祴璇曚晶杈规爮 iCloud 鐧诲綍鍦板潃瑙f瀽閫昏緫銆? -- `tests/sidepanel-luckmail-manager.test.js`锛氭祴璇曚晶杈规爮 LuckMail 绠$悊鍣ㄦā鍧楁帴绾夸笌绌烘€佹覆鏌撱€? -- `tests/signup-page-tab-cleanup.test.js`锛氭祴璇曟敞鍐岄〉鏉ユ簮鏍囩鐨勫啿绐佹竻鐞嗛€昏緫銆? -- `tests/step-definitions-module.test.js`锛氭祴璇曞叡浜楠ゅ畾涔夋ā鍧楀強渚ц竟鏍忚剼鏈姞杞介『搴忋€? -- `tests/step5-direct-complete.test.js`锛氭祴璇?Step 5 鍦ㄨ祫鏂欓〉鐐瑰嚮鎻愪氦鍚庣珛鍗冲畬鎴愬綋鍓嶆楠ゃ€? -- `tests/step6-login-state.test.js`锛氭祴璇?Step 6 鐧诲綍鐘舵€佸垽鏂€昏緫銆? -- `tests/step8-callback-handling.test.js`锛氭祴璇?Step 8 鍥炶皟鍦板潃鎹曡幏閫昏緫銆? -- `tests/step8-debugger-stop.test.js`锛氭祴璇?Step 8 璋冭瘯鍣ㄧ偣鍑诲湪 Stop 鍦烘櫙涓嬬殑涓琛屼负銆? -- `tests/step8-state-timeout-retry.test.js`锛氭祴璇?Step 8 閫氫俊閿欒鏄惁鍙垽瀹氫负鍙噸璇曘€? -- `tests/step8-stop-cleanup.test.js`锛氭祴璇?Step 8 鍦?Stop 鍚庤兘姝g‘娓呯悊鐩戝惉鍣ㄤ笌鎸傝捣鐘舵€併€? -- `tests/step9-cpa-mode.test.js`锛氭祴璇曟湰鍦?CPA Step 9 绛栫暐鍒ゆ柇銆? -- `tests/step9-localhost-cleanup-scope.test.js`锛氭祴璇?Step 9 浠呮竻鐞嗙簿纭懡涓殑 localhost callback 鍜岃矾寰勫墠缂€娈嬬暀椤点€? -- `tests/step9-status-diagnostics.test.js`锛氭祴璇?Step 9 绮剧‘鎴愬姛鍒ゅ畾銆佺孩鑹查敊璇€佽繃婊わ紝浠ュ強鎴愬姛寰芥爣涓庡け璐ユ彁绀哄苟瀛樻椂鐨勪紭鍏堢骇銆? -- `tests/verification-stop-propagation.test.js`锛氭祴璇曢獙璇佺爜娴佺▼鍦?Stop 鍦烘櫙涓嬬殑閿欒浼犳挱涓庝笉涓€旈檷绾с€? -- `tests/verification-flow-polling.test.js`锛氭祴璇?2925 闀胯疆璇㈠弬鏁帮紝浠ュ強楠岃瘉鐮佹彁浜ゆ祦绋嬩腑鐨?`beforeSubmit` 閽╁瓙鎵ц椤哄簭銆? +- `tests/activation-utils.test.js`閿涙碍绁寸拠鏇炲敶鐎圭鍓奸張顒佺负濞茶崵鐡ラ悾銉ょ瑢 Step 9 閸欘垱浠径宥夋晩鐠囶垰鍨介弬顓溾偓? +- `tests/auto-run-fresh-attempt-reset.test.js`閿涙碍绁寸拠鏇″殰閸斻劏绻嶇悰灞芥躬閺傞绔存潪顔肩磻婵澧犳导姘跺櫢缂冾喗妫潻鎰攽閺冩湹绗傛稉瀣瀮閵? +- `tests/auto-run-step6-restart.test.js`閿涙碍绁寸拠鏇″殰閸斻劏绻嶇悰灞芥躬濮濄儵顎?6 娑斿鎮楅柆鍥晩閺冩湹绱伴崶鐐插煂濮濄儵顎?6 闁插秴绱戦敍灞借嫙閸︺劌鎳℃稉?add-phone 閺冭泛浠犲銏ゅ櫢瀵偓閵? +- `tests/auto-step-random-delay.test.js`閿涙碍绁寸拠鏇″殰閸斻劏绻嶇悰灞绢劄闂傛潙娆㈡潻鐔剁瑢閺冄囧帳缂冾噣鏁崗鐓庮啇鐟欙絾鐎介妴? +- `tests/background-auto-run-module.test.js`閿涙碍绁寸拠鏇″殰閸斻劏绻嶇悰灞惧付閸掕泛娅掑Ο鈥虫健瀹稿弶甯撮崗銉ょ瑬鐎电厧鍤銉ュ范閵? +- `tests/background-account-run-history-module.test.js`閿涙碍绁寸拠鏇″閸欑柉绻嶇悰灞藉坊閸欏弶膩閸ф鍑¢幒銉ュ弳閵嗕礁顕遍崙鍝勪紣閸樺偊绱濋獮鎯板厴閸︺劋绗夐崥顖滄暏閺堫剙婀?helper 閺冭埖顒滅涵顔藉瘮娑斿懎瀵茬拋鏉跨秿閵? +- `tests/background-account-history-settings.test.js`閿涙碍绁寸拠鏇″閸欑柉绻嶇悰灞藉坊閸欒尙娈戦悪顒傜彌闁板秶鐤嗘い鐟扮秺娑撯偓閸栨牭绱濇稉宥呭晙婢跺秶鏁?Hotmail 濡€崇础娴f粈璐熼崥顖氫粻閺夆€叉閵? +- `tests/background-generated-email-module.test.js`閿涙碍绁寸拠鏇犳晸閹存劙鍋栫粻杈窡閸斺晜膩閸ф鍑¢幒銉ュ弳娑撴柨顕遍崙鍝勪紣閸樺倶鈧? +- `tests/background-icloud.test.js`閿涙碍绁寸拠?iCloud 閻╃鍙ч崥搴″酱缁绢垰鍤遍弫棰佺瑢閸掝偄鎮曢弨璺虹啲闁槒绶妴? +- `tests/background-icloud-mail-provider.test.js`閿涙碍绁寸拠?iCloud 闁喚顔?provider 闁板秶鐤嗙憴锝嗙€介妴? +- `tests/background-logging-status-module.test.js`閿涙碍绁寸拠鏇熸)韫?閻樿埖鈧焦膩閸ф鍑¢幒銉ュ弳娑撴柨顕遍崙鍝勪紣閸樺倶鈧? +- `tests/background-luckmail.test.js`閿涙碍绁寸拠?LuckMail 閻╃鍙ч崥搴″酱闁槒绶敍灞筋洤鐠愵厺鎷遍妴浣割槻閻劊鈧焦鐖g拋鏉垮嚒閻劋绗岄柌宥囩枂閵? +- `tests/background-message-router-module.test.js`閿涙碍绁寸拠鏇熺Х閹垵鐭鹃悽杈侀崸妤€鍑¢幒銉ュ弳娑撴柨顕遍崙鍝勪紣閸樺倶鈧? +- `tests/background-message-router-step2-skip.test.js`閿涙碍绁寸拠鏇燁劄妤?2 閻╁瓨甯撮拃钘夊煂妤犲矁鐦夐惍渚€銆夐弮鍓佹畱鐠鸿櫕顒炴稉搴eЦ閹椒绻氶幎銈夆偓鏄忕帆閵? +- `tests/background-navigation-utils-module.test.js`閿涙碍绁寸拠鏇烆嚤閼割亜浼愰崗閿嬆侀崸妤€鍑¢幒銉ュ弳娑撴柨顕遍崙鍝勪紣閸樺倶鈧? +- `tests/background-panel-bridge-module.test.js`閿涙碍绁寸拠鏇㈡桨閺夋寧藟閹恒儲膩閸ф鍑¢幒銉ュ弳娑撴柨顕遍崙鍝勪紣閸樺倶鈧? +- `tests/background-signup-flow-module.test.js`閿涙碍绁寸拠鏇熸暈閸愬矂銆夋潏鍛И濡€虫健瀹稿弶甯撮崗銉ょ瑬鐎电厧鍤銉ュ范閵? +- `tests/background-step-modules.test.js`閿涙碍绁寸拠鏇燁劄妤犮倖膩閸ф鏋冩禒鍫曞厴瀹歌尙鏁遍崥搴″酱閸忋儱褰涢崝鐘烘祰閵? +- `tests/background-step5-submit-short-circuit.test.js`閿涙碍绁寸拠?Step 5 娴兼碍濡搁悽鐔稿灇婵傜晫娈戠挧鍕灐閻╁瓨甯存潪顒€褰傜紒娆忓敶鐎圭鍓奸張顒婄礉楠炴湹绶风挧鏍х暚閹存劒淇婇崣閿嬫暪鐏忎勘鈧? +- `tests/signup-entry-diagnostics.test.js`:测试 Step 1 / Step 2 注册入口识别失败时的诊断快照摘要。 +- `tests/step3-direct-complete.test.js`锛氭祴璇?Step 3 浼氬厛鍥炰紶瀹屾垚杞借嵎锛屽啀寮傛瑙﹀彂琛ㄥ崟鎻愪氦锛岄伩鍏嶉〉闈㈣烦杞崱浣忎富娴佺▼銆? +- `tests/background-step6-retry-limit.test.js`閿涙碍绁寸拠?Step 6 閻ㄥ嫭婀侀梽鎰板櫢鐠囨洑绗傞梽鎰剁礉娴犮儱寮?Step 7 閸ョ偞鏂侀弮璺哄讲鐠哄疇绻冮惂璇茬秿閸?Cookie 濞撳懐鎮婇妴? +- `tests/background-step7-recovery.test.js`閿涙碍绁寸拠?Step 7 閸?CPA 濡€崇础娑撳绱伴崗鍫濇礀閺€?Step 6 閸愬秵褰佹禍銈囨瑜版洟鐛欑拠浣虹垳閿涘苯鑻熸稉?2925 閸忔娊妫撮柌宥呭絺闂傛挳娈ч妴? +- `tests/background-step-registry.test.js`閿涙碍绁寸拠鏇炴倵閸欑増顒炴銈嗘暈閸愬矁銆冮崪灞藉彙娴滎偅顒炴銈呯暰娑斿鍑¢幒銉ュ弳閵? +- `tests/background-tab-runtime-module.test.js`閿涙碍绁寸拠鏇熺垼缁涙崘绻嶇悰灞炬濡€虫健瀹稿弶甯撮崗銉ょ瑬鐎电厧鍤銉ュ范閵? +- `tests/background-verification-flow-module.test.js`閿涙碍绁寸拠鏇㈢崣鐠囦胶鐖滃ù浣衡柤濡€虫健瀹稿弶甯撮崗銉ょ瑬鐎电厧鍤銉ュ范閵? +- `tests/cloudflare-temp-email-provider.test.js`閿涙碍绁寸拠?Cloudflare Temp Email provider 閻ㄥ嫯鐤嗙拠顫瑢閻╊喗鐖i柇顔绢唸闁瀚ㄩ柅鏄忕帆閵? +- `tests/cloudflare-temp-email-utils.test.js`閿涙碍绁寸拠?Cloudflare Temp Email 瀹搞儱鍙跨仦鍌滄畱 URL閵嗕礁鐓欓崥宥冣偓渚€鍋栨禒鎯靶掗弸鎰扳偓鏄忕帆閵? +- `tests/hotmail-api-mode.test.js`閿涙碍绁寸拠?Hotmail API 濡€崇础閻╃鍙ч弬鍥攳閸滃矂娉﹂幋鎰煙瀵繈鈧? +- `tests/hotmail-cors-headers.test.js`閿涙碍绁寸拠?Microsoft token 鐠囬攱鐪伴惄绋垮彠 DNR 闁板秶鐤嗛妴? +- `tests/hotmail-utils.test.js`閿涙碍绁寸拠?Hotmail 瀹搞儱鍙跨仦鍌滄畱鐠愶箑褰跨粵娑⑩偓澶堚偓渚€鐛欑拠浣虹垳閹绘劕褰囬崪灞剧Х閹垰灏柊宥夆偓鏄忕帆閵? +- `tests/icloud-mail-content.test.js`閿涙碍绁寸拠?iCloud Mail 閸愬懎顔愰懘姘拱鐠囪褰囬柇顔绘濮濓絾鏋冮崪宀勨偓澶夎厬閻樿埖鈧線鈧槒绶妴? +- `tests/icloud-utils.test.js`閿涙碍绁寸拠?iCloud 瀹搞儱鍙跨仦鍌滄畱 host閵嗕礁鍩嗛崥宥呭灙鐞涖劊鈧椒绻氶悾娆戝Ц閹椒绗岀粵娑⑩偓澶愨偓鏄忕帆閵? +- `tests/luckmail-utils.test.js`閿涙碍绁寸拠?LuckMail 瀹搞儱鍙跨仦鍌滄畱鐠愵厺鎷辩拋鏉跨秿閵嗕線鍋栨禒韬测偓浣圭埗閺嶅洤鎷版宀冪槈閻礁灏柊宥夆偓鏄忕帆閵? +- `tests/microsoft-email.test.js`閿涙碍绁寸拠?Microsoft 闁喕娆㈤幏澶婂絿娑撳酣鐛欑拠浣虹垳閹绘劕褰囬柅鏄忕帆閵? +- `tests/sidepanel-hotmail-manager.test.js`閿涙碍绁寸拠鏇氭櫠鏉堣鐖?Hotmail 缁狅紕鎮婇崳銊δ侀崸妤佸复缁惧じ绗岀粚鐑樷偓浣硅閺屾挶鈧? +- `tests/sidepanel-account-run-history.test.js`閿涙碍绁寸拠鏇氭櫠鏉堣鐖弮銉ョ箶閸栬桨绗呴弬鍦畱鐠愶箑褰挎潻鎰攽閸樺棗褰堕弶鈥崇敨缂佹挻鐎妴浣哄缁斿鏆€濡楋綁鍘ょ純顔藉付娴犳湹绗岄悩鑸碘偓浣稿瀻缁粯鎲崇憰渚€鈧槒绶妴? +- `tests/sidepanel-icloud-manager.test.js`閿涙碍绁寸拠鏇氭櫠鏉堣鐖?iCloud 缁狅紕鎮婇崳銊δ侀崸妤佸复缁惧じ绗岀粚鐑樷偓浣硅閺屾挶鈧? +- `tests/sidepanel-icloud-provider.test.js`閿涙碍绁寸拠鏇氭櫠鏉堣鐖?iCloud 閻ц缍嶉崷鏉挎絻鐟欙絾鐎介柅鏄忕帆閵? +- `tests/sidepanel-luckmail-manager.test.js`閿涙碍绁寸拠鏇氭櫠鏉堣鐖?LuckMail 缁狅紕鎮婇崳銊δ侀崸妤佸复缁惧じ绗岀粚鐑樷偓浣硅閺屾挶鈧? +- `tests/signup-page-tab-cleanup.test.js`閿涙碍绁寸拠鏇熸暈閸愬矂銆夐弶銉︾爱閺嶅洨顒烽惃鍕暱缁愪焦绔婚悶鍡涒偓鏄忕帆閵? +- `tests/step-definitions-module.test.js`閿涙碍绁寸拠鏇炲彙娴滎偅顒炴銈呯暰娑斿膩閸ф寮锋笟褑绔熼弽蹇氬壖閺堫剙濮炴潪浠嬨€庢惔蹇嬧偓? +- `tests/step5-direct-complete.test.js`閿涙碍绁寸拠?Step 5 閸︺劏绁弬娆撱€夐悙鐟板毊閹绘劒姘﹂崥搴g彌閸楀啿鐣幋鎰秼閸撳秵顒炴銈冣偓? +- `tests/step6-login-state.test.js`閿涙碍绁寸拠?Step 6 閻ц缍嶉悩鑸碘偓浣稿灲閺傤參鈧槒绶妴? +- `tests/step8-callback-handling.test.js`閿涙碍绁寸拠?Step 8 閸ョ偠鐨熼崷鏉挎絻閹规洝骞忛柅鏄忕帆閵? +- `tests/step8-debugger-stop.test.js`閿涙碍绁寸拠?Step 8 鐠嬪啳鐦崳銊у仯閸戣婀?Stop 閸︾儤娅欐稉瀣畱娑擃厽顒涚悰灞艰礋閵? +- `tests/step8-state-timeout-retry.test.js`閿涙碍绁寸拠?Step 8 闁矮淇婇柨娆掝嚖閺勵垰鎯侀崣顖氬灲鐎规矮璐熼崣顖炲櫢鐠囨洏鈧? +- `tests/step8-stop-cleanup.test.js`閿涙碍绁寸拠?Step 8 閸?Stop 閸氬氦鍏樺锝団€樺〒鍛倞閻╂垵鎯夐崳銊ょ瑢閹稿倽鎹i悩鑸碘偓浣碘偓? +- `tests/step9-cpa-mode.test.js`閿涙碍绁寸拠鏇熸拱閸?CPA Step 9 缁涙牜鏆愰崚銈嗘焽閵? +- `tests/step9-localhost-cleanup-scope.test.js`閿涙碍绁寸拠?Step 9 娴犲懏绔婚悶鍡欑翱绾喖鎳℃稉顓犳畱 localhost callback 閸滃矁鐭惧鍕缂傗偓濞堝鏆€妞ょ偣鈧? +- `tests/step9-status-diagnostics.test.js`閿涙碍绁寸拠?Step 9 缁墽鈥橀幋鎰閸掋倕鐣鹃妴浣哄閼规煡鏁婄拠顖涒偓浣界箖濠娿倧绱濇禒銉ュ挤閹存劕濮涘鑺ョ垼娑撳骸銇戠拹銉﹀絹缁€鍝勮嫙鐎涙ɑ妞傞惃鍕喘閸忓牏楠囬妴? +- `tests/verification-stop-propagation.test.js`閿涙碍绁寸拠鏇㈢崣鐠囦胶鐖滃ù浣衡柤閸?Stop 閸︾儤娅欐稉瀣畱闁挎瑨顕ゆ导鐘虫尡娑撳簼绗夋稉顓⑩偓鏃堟缁狙佲偓? +- `tests/verification-flow-polling.test.js`閿涙碍绁寸拠?2925 闂€鑳枂鐠囥垹寮弫甯礉娴犮儱寮锋宀冪槈閻焦褰佹禍銈嗙ウ缁嬪鑵戦惃?`beforeSubmit` 闁解晛鐡欓幍褑顢戞い鍝勭碍閵?