feat(reading-mode): 在当前会话中打开阅读模式,添加退出按钮#21681
Closed
shellmind112 wants to merge 400 commits intoanomalyco:devfrom
Closed
feat(reading-mode): 在当前会话中打开阅读模式,添加退出按钮#21681shellmind112 wants to merge 400 commits intoanomalyco:devfrom
shellmind112 wants to merge 400 commits intoanomalyco:devfrom
Conversation
…ry/Aether into wechat-agent-sdk
* add proxy setting and automatic packaging (with standard yml file) * update uv manage * fix bug in packaging
feat: imporve file-tree ui performance
refactor: simplify directory selection dialog and improve list filter UX
- Move wechat connection state to persistent context module that survives dialog close/focus loss - Remove SSE disconnect -> auto stop bridge logic on server side - Add POST /wechat/ping heartbeat route for lease renewal - Add lockHolder to /status response; skip locked UI when self-held - Add reconnecting/stolen states with auto-retry and preemption detection - Simplify dialog-wechat to pure presentation layer
Change output format to: <项目> · <会话> · <mode> · <model> Remove redundant status lines from /session, /project, /model outputs
fix(wechat): decouple connection lifecycle from dialog visibility
When the web page is closed without disconnecting WeChat, the file-based
lock persists with a stale clientId. A new page generates a fresh clientId
that doesn't match, causing a deadlock ("微信已被其他客户端连接").
Three-pronged fix:
- Auto-expire locks older than 30s (ping interval is 10s, so 3 missed
pings means the client is dead)
- Add forceLock API and /wechat/start?force=true for manual takeover
- Release lock on beforeunload via navigator.sendBeacon
Time-only format (e.g. 12:53) was ambiguous across sessions. Now displays YYYY-MM-DD-HH:mm (e.g. 2026-04-08-12:53) for both the chat message header and the fork dialog.
fix(wechat): allow lock recovery when page is closed without disconnect
…tory When AETHER_WORK_DIR is not set, the WeChat bridge previously fell back to Path.cwd(), which resolves to the Aether installation directory. Now it queries /project/recent and picks the most recently active project, falling back to the user's home directory if no projects exist.
fix: harden legacy database migration flow
fix(wechat-bridge): use most recently active project as default directory
Replace the multi-database merge path with a conservative latest-db copy so missing targets can be recovered without risking existing user data.
Clarify how users start Aether after web installs and keep the devtest Windows installer in sync with the generated launcher flow.
…eplies fix: ensure session for slash replies
…d-controls feat(wechat-bridge): add WeChat slash command controls
fix: rollback risky legacy db merge flow
…dance feat: add devtest installers and launch guidance
…conversation - Clicking "Open in Reading Mode" now navigates to the current session's reading route (?pdf=<path>) instead of creating a new dedicated session - Add exit button (✕) at the far right of the PDF viewer toolbar; clicking it navigates back to the regular session view and restores the previous review panel / file tree state - ReadingModePanel accepts overridePdfUrl prop to serve PDF directly from file path, bypassing the reading-mode session API - ReadingFirstReadGate is skipped when using override URL Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
|
This PR doesn't fully meet our contributing guidelines and PR template. What needs to be fixed:
Please edit this PR description to address the above within 2 hours, or it will be automatically closed. If you believe this was flagged incorrectly, please let a maintainer know. |
Author
|
误提,关闭。 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
关联 Issue
Closes #21679
变更说明
问题 1:点击阅读模式不再新开会话
修改
file-tabs.tsx中的openPdfInReadingMode:移除 API 调用(不再创建新 reading mode session),直接导航到当前 session 的阅读路由并携带文件路径参数:问题 2:添加退出按钮(工具栏最右侧)
pdf-viewer.html+pdf-viewer-aether.js:在toolbarViewerRight末尾添加aetherCloseReadingMode按钮,full 模式下显示pdf-viewer-aether.css+aether-close-reading-mode.svg:为退出按钮添加样式和 ✕ 图标pdf-viewer-shell-official.tsx:处理closereadingmodepostMessage,触发onCloseReadingMode回调reading-pdf-viewer-official.tsx/reading-mode-panel.tsx:透传onCloseReadingModepropreading-session.tsx:点击退出时导航回/:dir/session/:id,reading-session 的 cleanup 逻辑会自动恢复之前的审阅面板和文件树状态overridePdfUrl机制reading-session.tsx读取?pdf参数并构造文件 URL 传给ReadingModePanel:ReadingFirstReadGate(AI 预读)在 override 模式下跳过Test Plan
🤖 Generated with Claude Code