You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
4.2.0 — 2026-11-01
The typeface you pick in Aa now really changes the reading text. 宋体, 楷体, 圆体 and 等宽 (and the reader's 字体 row) used to leave the text in the interface typeface. The rule naming the picked face sat in an earlier style layer than the reader's own default, and a browser compares layers before specificity, so the later layer's plain default won and the choice never reached the page (宋体 only looked a little bolder). The default now lives in the same layer as the choice, so a note and the daily study recap, a review explanation, the review book and an exam report draw the face you picked. Not verified: none of these reading surfaces was opened with a picked face in a real DSH window or in the browser preview; the stylesheet rules and the font registry's unit tests were checked only.
Coming back from practice puts you back on the line you were reading in the review book. After 回到复习全书 the heading returns to the same height on screen (within 2 px at widths of 1280 and 420), with the focus on it, and 备考计划 appearing a moment later above it no longer pushes the text down. Folds you had open, such as 本节的题, stay open. If the point was deleted while you practised, you land on the first point of its chapter instead of the start of the book. Once you scroll or click, the page stops adjusting your position. Not verified: inside the DSH host, on a real phone and with a screen reader; 还有 N 道 and 本节问答 are closed again on the way back, so on a page that gets shorter the heading may not reach its old height.
The study link in the board's new-card form looks like the other chips. When you add a to-do from a course, deck or material, the link (关联:…) is now the same pill with the same remove button as chips elsewhere in StudyHub: a neutral pill with a small link icon, in place of the blue one, and a long name is still cut with an ellipsis. It removes the link as before. Not verified: inside the DSH host, in the light theme and with a screen reader; the pill was checked against the old one in a static page in Chromium, not in the running board.
Guided study's progress, time left and usage are now real. The block at the bottom of the right panel used to say "still estimating" all the time and only listed the check items; it now follows the questions you answered since this session began (older answers on the same questions belong to earlier sessions and do not count): "独立检验 1/3 (33%)", and under it a range of minutes left, for example "About 3–7 minutes left to reach this check goal (rough estimate)". It is called a rough estimate until you have passed 3 questions on your own, and it is always a range, never a false-precise number such as 13.4 minutes. Your pace is how long each question stayed open until you answered it, capped at 8 minutes a question: waiting for a new question to be written is not in it, but stepping away while a question is open is, up to that cap. A session with no check items says a goal is needed instead of "done". "Due for next-day review" counts the questions of this session whose latest answer scheduled them for a later day, each once. "Show evidence" now also shows "Cost this session": teaching, reused questions, writing and reviewing new questions, and Q&A filing as four separate lines, in tokens only (as DSH's usage panel shows them, never a price), plus the average per question you passed on your own. The main chat's own explanation use is not visible to the plugin, so it says "see DSH's usage panel" instead of 0. What the main chat reads (progress, range, usage) is the same as the panel. Not verified: with a real model inside the DSH host (the tests use a fake model, and how many tokens a new question reports depends on the model service), the layout in English and on a narrow panel; a question you cancel reads "usage unknown" (the tokens it had already spent are not visible here), and so does the average per question, rather than 0; handing in a mock exam does not update the range here.
After the outline is organised again, nothing of yours moves until you have seen where it would go, and you can undo it. When a rebuild would move your own text, however you reach the review book it first lists each place: old title, new title, and the first line of the text under the new title, so a title that does not match shows. Notes merged into a point of the same name count too. Put them like this applies it; Give this rebuild up keeps the previous outline and changes nothing in the book. While it waits, an edit you save or an AI block you keep or delete stays in its file and follows when you apply; adding a Q&A to the book, by hand or automatically, says it cannot yet and the question keeps its follow-up, so an automatic add is skipped and you add it later by hand. The main chat cannot write the book until you agree. The notice no longer disappears after Got it: it folds to one line, and See each one lists every moved point, with no short cut. Undo this rebuild takes back that one rebuild; if the book changed since, or while an outline or book task of the course runs, it refuses and changes nothing. A stopped task retried after you gave a rebuild up stops at once and saves nothing, and says to press Update the book again. The list comes after the model has made the new outline, because the moves are not known before. Not verified: a real rebuild with a real model on a large book (tested with made-up outlines and a fake model), and how a list of several hundred rows feels to scroll.
The home says once to copy your library folder, and later releases refuse to update a book written for a newer one. A review book cannot safely go back: a release before 3.5 that presses Update the book writes empty explanations. The home now says once, when the library has a book, to copy the library folder before going back, and its hover says how to back up and restore. From this release on, a book written for a newer StudyHub is refused with both version numbers and nothing written. This does not protect 3.4 or any release up to 4.1: they cannot read the new check, and in a release before 3.5 pressing Update the book still writes empty explanations, so keep the copy. Not verified: going back to 3.4 and looking at the new warning in its materials list, which only inventories written from now on carry; the refusal has never fired for a real learner, because no release has a higher floor yet. The hint shows the first time this version sees a library with a book, so someone new sees it after their first book too.
A half-written answer is no longer lost, and your answer record now tells helped answers from your own. What you have typed, ticked or filled in saves by itself once you pause. It is saved before you go to the previous or next question, jump to a prerequisite, follow a link or move the question to the right sidebar, and it is back when you return to the question after reloading the page or reopening DSH. Something you cleared stays cleared. Words you typed also survive the main chat adding or removing other questions in the round. If it cannot be saved (the connection dropped, or a save hangs for about 8 seconds), that step does not go ahead and the page says so; your words are still there, and you can click again once you are back online. Saving calls no model, costs no quota and does not get in the way of typing. An answer given after opening the hint, asking in 帮我弄懂, or clicking 请教主会话 in guided study is recorded as helped; one you gave alone is recorded as independent. Flipping a flashcard to grade it does not count as help, because the flip is how a flashcard is answered. A question you get right only on the second try in the same round, after a wrong answer showed the right one, also counts as helped, not as independent, and the check item now reads "Done, not on your own" (非独立完成) instead of naming a hint nobody opened. Until now every answer was wrongly recorded as helped; that is fixed, but existing records are not rewritten: answers from v4.0.0 to v4.1.0 all stay marked as helped, so a guided session that began before this update and continues after it may show fewer independent passes than you earned. Whether the hint or explanation was open is not saved, so they come back closed. Not verified: restoring after a restart inside the DSH host (the test reloads the page in the browser preview), what the right sidebar shows when it takes over a question, phones and screen readers. Options picked on the guided-study page are not saved yet, 请教主会话 being recorded is tested on the real guided page with a stand-in for the host, not walked through inside DSH, and nothing on the page says 已保存 when a save succeeds.
接着做 no longer gets stuck on a run that had already written everything. If StudyHub was closed or killed in the short moment after a coverage run saved its last question and before it marked itself finished, the task came back as interrupted and 接着做 refused every press, saying the plan was complete. Pressing it now finishes the run at once, with no model call and no tokens spent. If the run was cut before it wrote all its questions, it says so: the true count against the goal the card showed (say 25 of 30), and 接着做 on the draft adds the rest. Not verified: inside the DSH host or with a real model; this was tested by killing a real process against a fake model.
An assist that runs out of time stops asking the model. When Help me think, the step-by-step path or the weighing of sections pass their 45 seconds, the model call is told to stop instead of going on in the background, so a slow provider no longer spends tokens on an answer nobody reads. Stopping a run while it weighs its sections stops that call too. Not verified: whether a real provider stops billing when the call is stopped; no real provider was called.
A running audio import's card shows how long it has run and the tokens used, and a finished one keeps a way to its task page. The line under the bar of a transcription or proofreading card now ends its stage with the same 已用 time and token count the 任务 console shows (the tokens only when the model calls reported them); and a card whose one button opens the transcript, the audio settings or the recording picker has a quiet 查看详情 link to that job in the console, where the live output, the wait note and the 在 DSH 中打开完整会话 link (drawn only when the host can open it) are. The host cannot list these proofreading calls as visible sub-agents, so the console is where they are seen. Not verified: inside a running DSH host; no audio run with a real model was watched, only the seeded fake-model batch in Chromium.
Unsaved edits in the review book's editor are no longer lost by clicking away. The sidebar, a link to a task, or any other way to another page inside the app now asks first, with the same question as the Done button: keep editing, or discard and leave. Saved text goes at once. When the editor closes with no chance to ask (the course changed from the main chat or another tab, the host switched view), the text waits in this browser and the editor offers it back the next time that file opens. Not verified: inside DSH with a real host; a learning link arriving from the main chat was checked in the code, not clicked.
Send to the main chat takes the picture of the PDF page with it when the model reads pictures. In the Original PDF view, when the host says the conversation's current model takes images, the button puts the page's text and a picture of the page into the main chat's input box, so nobody has to take a screenshot, and you still press send. On any other model, which includes models with no declared image input such as DeepSeek or a self-configured SiliconFlow route, only the text goes in, because a picture would block the whole message; the chat's box says why and how to get the picture. The receipt says how many pictures went in and now has a Go to the main chat button when the box was filled as well. Pasting a screenshot into the reader's own panel is still not possible: the panel's model reads saved text only. Not verified: DSH 0.2.0-rc.2 (not tested, feature detection only), and that a real vision model reads the picture (checked with a local fake model on DSH 0.2.1-rc.2).
The main chat reads a long book in fewer calls.book.toc can give a compact table of contents (only each row's id, number and title, 60 rows a call instead of 30: a 400-point book takes 7 calls instead of 11), and book.read can start a file at a heading, so the chat reaches a section deep in a long point without reading the file 5 500 characters at a time. There is still no "patch" save: book.write already changes one section or a few exact words of a file, and the review book guide now says how to change one place in a big book. Not verified: a real chat on a book of several hundred points; measured on a synthetic book of 120 and 400 points, one file of 1.83 million characters.
Rebuilding the outline now says what it will not keep of your book's structure. Chapters and points you moved go back to the new outline's order, what you deleted comes back when the new outline has it, and names on chapters that went are not kept: the preview lists all of these before anything happens, even when no note has to move, and says that Undo this rebuild puts them back. Your current order cannot yet be kept through a rebuild. Not verified: with a real model's rebuilt outline; checked on seeded outlines.
Ask about several pages, and read on through a long page, from the Original PDF panel.Ask about the next few pages too opens one box for the last page (at most 5 pages and 16000 characters at a time, and the panel says when the limit changed what you typed); the panel then says Asking about: page 3–5, names a page without saved text and still answers from the others. When a page was too long, Read on: the next N characters asks the same question about the next part only; nothing already read is sent again, and it stays in the panel instead of sending you to Read. Asking about a whole section is not offered yet. Not verified: answer quality of a real model over a range or a later part.
You can search the review book, and a big book opens faster. A Find in the book box tops the contents: type a term, see the points that have it with the words around it, click to go there with the words marked on the page. A book with more than 120 headings now lists its chapters with the one being read open, each of the others a click on its caret away; at 400 points that took the longest pause on opening from about 0.4 s to 0.1 s on the test machine. Not verified: on a slow phone or inside DSH; a formula's source is searched as written, so a term inside a formula may not match how it looks.
A converted PDF can wait for your edits before it is imported. Under More settings when you convert a PDF, turn on Let me edit before the import (off by default) and the conversion, with MinerU or Marker, stops once it is done: the task says it is waiting, Edit and import opens the text block by block, you can correct a block or remove it, the editor counts the characters and estimated tokens taken out, and Import saves that text as a document with its page numbers unchanged, so misread text never reaches a model. It survives a restart. Converting the same PDF again while text waits says so and overwrites nothing. A document already imported is never changed: this is not an editor for the library. Going back to an older version while text waits is not safe: it treats the job as failed, and its 接着做 imports the text without your edits and loses them; import or discard waiting text first. Not verified: that downgrade beyond a test copy; a real MinerU or Marker run (stand-in programs were used); a book of thousands of blocks in the real editor.
Exporting the review book as files now gives one zip, and the editor's file picker can search. Download as files (zip) replaces hundreds of separate download buttons with one press, with book.yaml keeping the order. In the editor, type part of a title to find a file instead of scrolling a list of a thousand. Not verified: opening the zip on a phone or on macOS; checked with Python's zipfile on Windows and in Chromium.
Turning the page in Original PDF no longer reloads the file. The page is drawn in place with the same PDF engine as Original page: the zoom (now beside the page number) and the sideways place stay, a new page starts at its top, rapid page turns jump straight to the final page without drawing every page in between, and the page shown is always the page the panel asks about. Text can still be selected and copied. This view has no continuous scrolling and no find in the whole file; Use the browser's viewer beside the page number offers those, with the old reload on each turn. A file that cannot be drawn here, or whose pages draw too slowly on the main thread (such as heavy scanned books), switches to the browser's viewer automatically and says why. Not verified: browsers other than Chromium.
Text in Not placed can be put back with one press. Each section in Not placed has Put back…: choose a point and the text goes to the end of its notes, its headings and footnotes adjusted, and leaves Not placed; Undo takes both back. The main chat can read Not placed and do the same. Not verified: with a real host or a real chat session; checked on seeded books in Chromium.
Only the button you pressed shows that it is working. While StudyHub runs one action, the other buttons on the page are greyed out as before, but now just the one you pressed shows a spinner, keeps its width and is announced as busy to screen readers, on about 250 buttons across the pages (before this, most gave no sign at all). A greyed-out choice in a segmented switch now looks like a greyed-out button instead of a faded copy. Not verified: checked in a browser on the mistakes page (开始重练 and disabled segmented choices in light and dark themes, at 1280 and 420 px) and on icon-less home desk links; the other pages are converted the same way but not opened one by one, and the pages under the book and document reader are not converted yet.
Answering in a mock exam no longer marks a point as learnt. The final-week and whole-period plans keep a point you only met in a mock or oral exam, so the days after it are not squeezed out; practice answers count as before, and all answers still count toward how well you know a question. The mock paper also says how many case questions it leaves out. Not verified: on a real library with old runs; if a run's record is gone its answers still count as practice.
Pages and their parts ask the app for its services themselves instead of being handed them. Nothing changes in how a page looks or works, with one small exception: the key box of the audio setup card now waits while another action is running, like every other control on the page. The settings panes, the review page parts, the study map, the dashboard, the wrong-book page, the sources rows and the update, retrieval and PDF-conversion pages were changed (tracker issue 113). Not verified: inside a running DSH host (the DSH end-to-end check is listed in the pull request), and not every page was opened by hand.
The review book's contents takes one Tab, not hundreds. Tab stops once in the list; the arrow keys, Home and End walk its rows and Enter goes to the heading. Not verified: with a screen reader.
The review book says when it needs upkeep, while you read. When the materials changed, a quiet line on top offers Update the book; a point left short has Fill the gaps under its text; More has Back to the outline for organising it again. Chapters and sections are still renamed and moved through the main chat. Not verified: a real build from these buttons, since the preview has no task runner; the buttons' requests were checked in Chromium.
Opening DSH in the browser no longer waits on StudyHub's interface files or goes blank when a StudyHub script fails to load. Staying in the main chat now starts without downloading StudyHub's pages in the background, and if a network drop interrupts loading when you open StudyHub or a Study HTML preview, your chat stays usable while the StudyHub pane shows a Retry button to finish loading. Not verified: opening DSH over a live remote-access relay tunnel on a mobile network.
Narrow-screen tour steps keep the highlighted button clear of the docked tour card. On narrow panes (such as 420 px), when a highlighted section is tall or grows after its token estimate arrives on Create deck, the page scrolls enough for the action button at the end of the section to stay above the docked tour card instead of slipping behind it. Not verified: embedded host webviews narrower than 420 px or custom OS zoom levels.
The sidebar fits a 900 px window again without scrolling when Settings is opened. After Course book and the Shortcuts / Glossary links joined the sidebar, opening Settings scrolled the rail and shifted every entry vertically; tighter vertical spacing keeps all entries on screen without scrolling at 900 px height. Not verified: windows shorter than 900 px, where the sidebar still scrolls as intended.
Token estimates on narrow screens keep their info button beside the text without jumping in height. On narrow cards (such as 420 px), the details button stays at the end of the estimate text instead of dropping onto a separate row underneath, and the loading placeholder reserves the same height as the resolved estimate. Not verified: custom browser minimum font sizes above 16 px.
4.2.0 — 2026-11-01
Aa 里选的字体现在真的会换掉阅读页的字。 宋体、楷体、圆体和等宽(以及阅读器里的「字体」一行)以前选了等于没选:写「用哪个字体」的那条规则在比阅读器自己的默认值更早的一层样式里,而浏览器先比层、再比特异度,后一层的普通默认值就压过了更具体的规则(宋体只会看起来略粗一点)。现在默认值跟选择放在同一层,笔记与每日学习总结、解析、复习全书、考试报告都会用你选的那个字体。未验证:没有在真实 DSH 窗口或浏览器预览里用选中的字体打开过这些阅读页;只核对了样式表规则和字体注册表的单元测试。