dsh-aha-tutor 1.11.1 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,49 @@
2
2
 
3
3
  All notable changes to this plugin are recorded here. Versions follow [SemVer](https://semver.org/); GitHub Release notes for each version live in `docs/releases/`.
4
4
 
5
+ ## 1.13.0 - 2026-11-05
6
+
7
+ ### Added
8
+
9
+ - **Practise one concept**: every concept on a course's **Progress** tab has **Practise this concept**, and so does each concept in a round's results; when the course's next step is a weak concept, it opens that concept instead of its lesson's old practice. It writes five questions on that concept alone, pitched at the learner's mastery of it (two basic ones first when it is weak, edge cases and links when it is mastered), aimed at the misconceptions their answers showed, and asking none of the questions on it they have met (its lesson's practice and class checks, its unit's quiz, earlier sets). Answers count toward mastery and missed ones go to the mistake notebook like any practice; the questions can be checked with **Something wrong with this question?**, and reviews draw on them. A set is offered again until one of its questions is answered; after that the next one is new, and **Another set** writes one at once.
10
+ - **Explain this question**: once a question is graded (lesson practice, unit quizzes, reviews, mistake rounds, concept practice, library quizzes), and on every row of the mistake notebook, **Explain this** opens the teacher's board over the page. It starts from the learner's answer (what they probably thought and where it breaks, or why a right answer works), solves the question step by step, writes the idea to remember and ends with a similar question to try. In a course that question counts toward mastery like a class check and never enters the notebook. Closing the board goes back to the same question, with the round as it was; the explanation is also kept under **Ask anything**, where the learner can ask on. The button is more prominent when the answer was not right.
11
+
12
+ ### Fixed
13
+
14
+ - **The chat teacher sees the answers**: after a quiz in a conversation, the learner sent back only ✔ or ✘ and the first 60 characters of each question, so the teacher could not tell what went wrong. The report now gives each answer, the right answer when it was missed (a short answer's model answer) and the grading, and a skipped question says so instead of shifting the numbers. The teacher is told to correct each mistake.
15
+ - **Answer keys show their formulas**: the right answer shown under a wrong one was plain text, so an option written in math read `$P(A\mid B)$`. It is now set like the options.
16
+
17
+ ## 1.12.0 - 2026-11-05
18
+
19
+ ### Added
20
+
21
+ - **A mistake notebook in every course**: a question the learner did not get fully right in a class check, lesson practice, a unit quiz or a review goes to the course's **Mistake notebook**, with the question as it was asked and every answer to it since, short and worked answers too (library quizzes are not collected). A mistake comes back from the day after its last wrong answer and is resolved by a right answer on a later day; right again the same day, just after seeing the answer, does not count, and a wrong answer opens it again. The top of the practice tab shows the notebook: how many are ready to redo, **Redo mistakes** in rounds of at most ten, each open mistake with its last answer, how often it was missed and the day it comes back, and the resolved ones folded away. **Start review** asks due mistakes first, then for each due concept the question answered longest ago instead of one at random. A check that fixes a question (**Something wrong with this question?**, **Is this step wrong?**) fixes its mistakes too and grades their answers again.
22
+ - **Functions in pieces**: plot formulas can compare and choose: `if(x < 0, -x, x)`, `piecewise(x < 0, 0, x < 1, x, 1)` (the last value covers the rest) and `x < 0 ? -x : x`, with `<`, `<=`, `>`, `>=`, `=`, `!=` (also `≤`, `≥`, `≠` and their LaTeX), `and`, `or` and chained comparisons such as `0 <= x < 2`. They are still read as calculator syntax and evaluated over numbers only. A curve breaks where it jumps, also for `floor`, `round`, `sign` and `mod`, instead of drawing a vertical line, and a continuous joint such as |x| still meets. The formula beside it reads like a textbook: "−x (x < 0); x (x ≥ 0)". The board prompt says how to write one.
23
+ - **Contents and printed page numbers for materials**: a material now keeps its outline. A PDF's comes from its bookmarks; one without bookmarks gets its chapter and section titles from the pages (a title like 第三单元 or Chapter 2 at the top of a page or set larger than the text, or a line set much larger; contents pages and boxes such as 例1 or 练习 are not chapters). Word documents use their headings, Markdown its `#` headings, web pages their article's headings. Each PDF page also keeps the number printed on it, from the PDF's page labels or read off the pages themselves where they agree page after page, so a textbook's 第 12 页 is the page that says 12, not the twelfth page of the file; running heads and page numbers are left out of the text. **Library** shows a material's contents with their pages (the PDF page on hover), and search results give the printed page. Course design sees a material's contents with their pages instead of a list of topics. Materials added before this version keep working as they were; adding them again gives them contents.
24
+ - **Lessons know their pages**: when a course is designed from materials with contents, each lesson names the contents entries it teaches from (some pages of a long one where it covers only those), and the lesson keeps those pages. Its board, a raised hand in it, its practice, and its unit's quiz, flashcards and cheat sheet read those pages first (the parts matching the lesson or the question when they do not all fit), then whatever else matches. The course outline, the blueprint editor and the classroom show them as 📖 第 12–15 页, with the material, the contents entry and the PDF pages on hover. When a material is in another language than the course (a Chinese course on an English textbook), each lesson also gets a few key terms as the material words them, so its passages are found. Revisions keep the pages of the lessons they leave alone; lessons they add, and lessons that materials added later cover, get their own. Split or deepened lessons keep the pages of the lesson they came from. Course packs leave the pages behind, since they belong to the sender's library. Courses without materials are designed exactly as before.
25
+ - **Every page number shown has been checked**: a page the teacher names is kept only when that lesson, answer or note was actually given that page. Narration, board text, checks, raised hands, re-explanations, corrections, handouts, notes, digests, practice, quizzes and flashcards all follow this; a page that was not read is left out ("课本第37页的例2" becomes "课本的例2", a bracketed "(p. 37)" goes). A cheat-sheet item now quotes a few words of the passage it comes from, and its citation is shown only when those words are found in the material, on the page where they are found, which may move it; the quoted words show on hover. Boards, notes, digests and cheat sheets made before this version had no such check, so they no longer show page numbers. Prompts name pages as the book prints them.
26
+
27
+ ### Changed
28
+
29
+ - **A raised hand reads the book**: a question asked in a lesson was answered from the board alone, so "how do I do the example on page 12?" got an answer that had never seen the book. The course's materials now come with the question, about 3,500 characters of them: the pages it names first, then the passages matching the question and the lesson. They are reference material: the teacher works from what the book says, names its page, and says so when the excerpts do not hold what the learner means. Questions on an Instant help board use that thread's materials the same way.
30
+ - **A new set of questions is new**: **New set of questions** wrote a unit quiz as if the last one never existed. It now leaves out the last set's questions, also reworded or with other numbers, and asks two or three questions on each concept the learner is weakest on (tried, below 70% or with a misconception).
31
+
32
+ ### Fixed
33
+
34
+ - **A figure that cannot be drawn no longer vanishes**: a diagram, function plot, chart or animation the model got wrong was left off the board without a word while the teacher went on talking about it. What can be fixed without asking anyone is now fixed where the board is written: in a diagram, a stray `&`, an HTML entity such as `&nbsp;`, a `<` in a label, an undeclared `xlink:` prefix, a name in the wrong case (`viewbox`), an unquoted or repeated attribute, quotes escaped twice, scripts and HTML the board removes anyway, and anything after the closing `</svg>`; in a plot, a letter a formula uses without declaring it becomes a slider from 0 to 2 starting at 1, and values given as `constants` keep their value. Whatever is still wrong once a board is written goes back to the model in one call (at most six figures, the teach model thinking as little as it can), with what is wrong with each and what the teacher says while it is shown. A figure that comes back is checked like any other before it takes the broken one's place, which is shown as being redrawn meanwhile. One that still cannot be drawn says so on the board, with its caption and, for a plot, its formulas, and so do the PDF, PNG, Markdown and video exports. A board with nothing wrong costs no extra call. This covers lessons, prefetched lessons, answers to raised hands, re-explanations, corrections, checked steps, instant answers and shorts.
35
+ - **An animation whose code fails shows its still frame**: an error in an animation's script (a syntax error, a name it never defined) left a blank or frozen frame. The board now shows the animation's still frame instead, or says that it could not play.
36
+ - **Diagrams keep their labels in view**: a label or shape drawn past a diagram's viewBox ran into what came next on the board and was cut off in videos. The viewBox now grows to hold all the diagram draws, on the board and in every export. A lower-case `viewbox` no longer squashes a diagram in videos.
37
+ - **Lessons always see their materials**: when no passage of the materials matched a lesson's words (a Chinese course on an English textbook, or a lesson worded differently from the book), the lesson, its practice, unit quizzes, flashcards and cheat sheets were written without any passages. They now get the stretch of each material where the lesson most likely is, since a course made from a book follows its order, and the prompt says these are excerpts rather than matches. Numbered things match by their number too: 例2 finds 例2, not 例1.
38
+ - **Course outline at phone width**: next to its buttons, a lesson's name was squeezed to one character per line; the buttons now move under the name when there is no room for both.
39
+ - **Word tables and Markdown code**: a Word document was read as plain text, so a table came out one cell per paragraph; each row is now one line with its cells in order. A `#` comment inside a Markdown code block no longer starts a new section.
40
+ - **One review per sitting**: every scored answer moved a concept's review on, so a few right answers minutes apart pushed it out by weeks (three answers: 15 days, seven: a year), and misses in a row sank its ease to the floor. Answers less than six hours apart are now one sitting: its first answer schedules the next review, and only its first miss counts as a lapse. Flashcards follow the same rule.
41
+ - **The right answer is no longer nearly always A**: options were shown in the order the model wrote them, and models put the right one first (15 of the samples' 16 choice questions). A question just written now gets an order of its own, fixed by a hash of its text: lesson practice, unit and library quizzes, quizzes in chat, class checks and the samples. Numbers run from small to large, true/false and yes/no keep that order, "all of the above" and "cannot be determined" keep their place, and a question whose options name other options by letter keeps its order. Letters that name options in the explanation and hints follow them; letters the model put before its options, and a question that lists its options again, are taken out. Questions already written keep their order, since answers are logged by option.
42
+ - **Misconceptions can clear**: a confident wrong answer marked a misconception that stayed for good, in the lesson prompts and in the remedial advice. Two right answers in a row, the second not a guess, now clear it.
43
+ - **The profile keeps what the learner wrote**: the refresh after a lesson replaced the goals, strengths, weak spots and background wholesale, undoing the learner's own edits. Entries the learner adds or changes on **My profile**, and the background and preferred style once edited, are now theirs: the refresh changes only the tutor's own entries, and a tutor's entry the learner deleted does not come back.
44
+ - **Unit quiz answers count**: a unit quiz question that named its concept by name instead of its id, or named none, did not count toward mastery. Names and `id=name` are now read, and a question naming none gets the concepts it mentions.
45
+ - **Video captions follow the voice**: an exported video showed the last two lines of a step's whole narration, so its first sentences never appeared. It now shows the sentence being spoken, two lines at a time.
46
+ - **The grading model's empty choice**: left empty, **Grading & questions** said it followed DSH's default model; it follows the teaching model, and now says so.
47
+
5
48
  ## 1.11.1 - 2026-11-04
6
49
 
7
50
  ### Fixed
package/README.en.md CHANGED
@@ -28,8 +28,8 @@
28
28
  | **Handwriting chalkboard lessons** | Narration (voice + captions) while the board fills up in a handwriting font with points, formulas, diagrams, charts and, when it helps, a small animation; each item is written as its sentence is spoken and highlighted while it is discussed; curves given by a formula are computed point by point, with sliders for their parameters; the lesson's pages sit on one canvas you can drag and zoom while the view follows the teacher, and a side panel shows the lesson's goals and a transcript; pause, rewind and change speed any time |
29
29
  | **Quick checks that adapt** | At key moments the lesson stops for a question and asks how sure you are. Lucky guesses, hesitation and confident mistakes count differently; a lesson with a calculation asks you to write out your working and corrects it on the board. A revisit lesson is added automatically for concepts that did not stick |
30
30
  | **Raise your hand, hear it again** | Ask anything mid-lesson, typed or spoken (recognized on your computer by DSH's Voice input), and the tutor answers on the board, then picks up where it left off; or have a step re-explained with an analogy, a drawing, an example, more simply or in more depth. Think a step is wrong? Ask the teacher to check it: a real mistake is corrected at the board and fixed in the lesson, and a step that is right is explained |
31
- | **Practice, flashcards, reviews** | Every lesson has practice, with figures where they help, open answers graded by the model and keyboard answering; think a question or its grading is wrong, and the teacher checks it, fixes a wrong question, grades your answers to it again (earlier ones too) and corrects your mastery; a round ends with stars, how your mastery moved and a next step. Each unit has a quiz and a flashcard deck, as long as its concepts call for. Flashcards and concepts come back on a spaced-repetition schedule, and the study plan leaves time for them |
32
- | **Your materials become courses** | PDF, Word, PowerPoint, Markdown, web links and images; a model that can see images reads scanned PDFs, documents made of pictures and photos. Lessons and cheat sheets cite pages; long readings can be digested into structure, claims and a glossary |
31
+ | **Practice, flashcards, reviews** | Every lesson has practice, with figures where they help, open answers graded by the model and keyboard answering; think a question or its grading is wrong, and the teacher checks it, fixes a wrong question, grades your answers to it again (earlier ones too) and corrects your mastery; a round ends with stars, how your mastery moved and a next step. Any concept can be practised on its own: five new questions on it alone, pitched at your mastery and never repeating what you have done. Any graded question, and every question in the mistake notebook, has **Explain this**: the teacher starts from your answer at the board, shows where it went wrong and how to do it, and ends with a similar question to try. A question you miss goes to the course's mistake notebook, comes back from the next day, counts as resolved once you get it right on a later day, and comes first in reviews. Each unit has a quiz and a flashcard deck, as long as its concepts call for. Flashcards and concepts come back on a spaced-repetition schedule, and the study plan leaves time for them |
32
+ | **Your materials become courses** | PDF, Word, PowerPoint, Markdown, web links and images; a model that can see images reads scanned PDFs, documents made of pictures and photos. each material keeps its contents and the page numbers printed in it, every lesson is tied to its pages, lessons and raised hands work from the text itself, and every page number shown has been checked; long readings can be digested into structure, claims and a glossary |
33
33
  | **Cheat sheets, notes, quizzes** | Printable cheat sheets organized by theme (columns, font size and highlighting adjustable), plus notes, flashcard decks and quizzes; decks and quizzes read the whole material part by part, size themselves by its length, and can keep to a focus |
34
34
  | **Explainer shorts and exports** | A two-minute whiteboard explainer from a topic or a link; any lesson exports to a video with the handwriting, captions and a watermark, or its board to a PDF (one board page per page, handwriting and formulas included) or a PNG picture per page |
35
35
  | **Hands-on projects** | Code projects get a folder with starter files and a DSH session where a coding agent helps you build; submit it back for a rubric-based review |
@@ -42,7 +42,7 @@ Two sample courses ship with the plugin (harmonic motion and Bayesian thinking,
42
42
 
43
43
  You need the **DeepSeek Harness** desktop app (0.2.x, from 0.2.1) with at least one working model. See the [DSH instructions](https://github.com/deepseek-ai/deepseek-harness#run) if you do not have it yet.
44
44
 
45
- 1. Open **Plugins** in the desktop app, click **Add plugin** and enter `dsh-aha-tutor` as the package, with the official registry as the source. Within 24 hours of a new release DSH's pnpm holds new versions back; enter an exact version such as `dsh-aha-tutor@1.11.1` then.
45
+ 1. Open **Plugins** in the desktop app, click **Add plugin** and enter `dsh-aha-tutor` as the package, with the official registry as the source. Within 24 hours of a new release DSH's pnpm holds new versions back; enter an exact version such as `dsh-aha-tutor@1.13.0` then.
46
46
  2. **Quit and reopen** the desktop app. Refreshing the page does not load the plugin's host side.
47
47
  3. Open **Aha · AI tutor** in the left sidebar (shown as 「开窍 · AI 私人老师」 in Chinese).
48
48
 
package/README.md CHANGED
@@ -28,8 +28,8 @@
28
28
  | **手写黑板课堂** | 老师一边讲(语音 + 字幕),一边用手写体在黑板上逐字写下要点、公式、示意图和图表,讲到哪句写哪句,正在讲的内容用荧光笔划出;由公式画的曲线按公式逐点算出,带参数的还能拖动滑块看它怎么变;整讲的板书排在一张能拖动、缩放的画布上,镜头跟着老师走;侧栏显示课堂要点进度和讲解记录;随时暂停、回放、变速 |
29
29
  | **随堂小测与自适应** | 讲到关键处会停下来考你一题,并问你「有多确定」。猜对、犹豫、自信地答错,会被区别对待;有计算的一讲会请你写出过程,写错了老师就在黑板上订正。学完一讲后,薄弱的知识点会自动加一节巩固课 |
30
30
  | **举手提问、换个讲法** | 没听懂就举手,老师在黑板上专门回答你,讲完回到原来的进度;问题可以打字,也可以直接说出来(用 DSH 的语音输入在本机识别);也可以让它用打比方、画图、举例、讲简单点或讲深一点的方式重讲这一步。觉得讲错了就点「这一步不对?」:老师先仔细核对,真错了就在黑板上更正,并把这一讲改好;没错就讲清为什么 |
31
- | **练习、闪卡与复习** | 每讲都有练习,题目可以带示意图,简答题由 AI 批改,支持键盘作答;觉得题目或判分有问题就点「这题有问题?」,老师先仔细核对,题错了就改好、重新判分(以前答过的也一起重判)并修正掌握度;做完一组给出星级、掌握程度变化和下一步建议。每个单元有单元测验和单元闪卡,题量和张数按这个单元的知识点来定。闪卡和知识点按间隔重复安排复习,学习计划会自动给复习留出时间 |
32
- | **资料变课程** | 支持 PDF、Word、PPT、Markdown、网页链接和图片;扫描版 PDF、全是图片的文档和拍的照片,由能看图的模型识别出文字。讲课和速查表会引用原文页码;长文档可以一键「消化」成结构、论点和术语表 |
31
+ | **练习、闪卡与复习** | 每讲都有练习,题目可以带示意图,简答题由 AI 批改,支持键盘作答;觉得题目或判分有问题就点「这题有问题?」,老师先仔细核对,题错了就改好、重新判分(以前答过的也一起重判)并修正掌握度;做完一组给出星级、掌握程度变化和下一步建议。每个知识点都能单独练:按你的掌握程度出 5 道只考它的新题,不重复做过的。答完的题和错题本里的每道题都能点「讲这题」,老师在白板上从你的答案讲起,讲清错在哪、怎么做,最后留一道同类题当场练。没答对的题自动进错题本,从第二天起再练,隔天答对才算解决,复习时先出错题。每个单元有单元测验和单元闪卡,题量和张数按这个单元的知识点来定。闪卡和知识点按间隔重复安排复习,学习计划会自动给复习留出时间 |
32
+ | **资料变课程** | 支持 PDF、Word、PPT、Markdown、网页链接和图片;扫描版 PDF、全是图片的文档和拍的照片,由能看图的模型识别出文字。会读出资料的目录和书上印的页码,每一讲对应到书里的页,讲课和举手提问都带着原文,显示的页码都经过核验;长文档可以一键「消化」成结构、论点和术语表 |
33
33
  | **速查表、笔记、测验** | 按主题整理的可打印速查表(列数、字号、高亮可调),以及笔记、闪卡组和测验;闪卡和测验会分段读完整份资料,数量按资料长短来定,也可以只出「重点」范围 |
34
34
  | **讲解短片 + 导出** | 输入一个主题或网址,得到一段约两分钟的白板讲解;任何一讲都能导出成带板书动画、字幕和水印的视频,也能把板书导出成 PDF(一页一张板书,带手写字体和公式)或每页一张的 PNG 图片 |
35
35
  | **实战项目** | 代码类项目一键生成项目文件夹和起始文件,并在 DSH 里打开一个会话,让编程 Agent 陪你做;做完回来提交,老师按评分标准逐项点评 |
@@ -48,7 +48,7 @@
48
48
  dsh-aha-tutor
49
49
  ```
50
50
 
51
- 安装源选择**官方源**,点击**安装**。新版本刚发布的 24 小时内,DSH 的 pnpm 会因为发布冷却期暂缓安装,这时请填入精确版本,例如 `dsh-aha-tutor@1.11.1`。
51
+ 安装源选择**官方源**,点击**安装**。新版本刚发布的 24 小时内,DSH 的 pnpm 会因为发布冷却期暂缓安装,这时请填入精确版本,例如 `dsh-aha-tutor@1.13.0`。
52
52
 
53
53
  2. **完全退出并重新打开** DSH 桌面应用。只刷新页面不会加载 Host 端的新插件。
54
54
 
@@ -54,7 +54,7 @@
54
54
 
55
55
  开课以后也能改:在课程页右上角的 **⋯** 里选**编辑课程大纲**,可以加讲、加单元、调整顺序,或点**让老师续写一个单元**。保留下来的讲,学习进度不变。
56
56
 
57
- **补充资料**:后来找到了更好的教材或讲义,在 **⋯** 里选**补充资料**(编辑大纲时也有这个按钮),从资料库里勾选或当场上传,还可以写一句想怎么用,比如「重点补上第 5 章的例题」,再点**请老师看看怎么加**。老师会读这些资料,给出修改建议:新增哪些讲、哪些讲要讲深;点**应用修改**后才生效,资料也会关联到这门课,以后讲课时会引用它们。一门课最多关联 12 份资料。
57
+ **补充资料**:后来找到了更好的教材或讲义,在 **⋯** 里选**补充资料**(编辑大纲时也有这个按钮),从资料库里勾选或当场上传,还可以写一句想怎么用,比如「重点补上第 5 章的例题」,再点**请老师看看怎么加**。老师会读这些资料,给出修改建议:新增哪些讲、哪些讲要讲深;点**应用修改**后才生效,资料也会关联到这门课,以后讲课时会引用它们,新增的讲和讲到新资料的讲也会对应到资料里的页。一门课最多关联 12 份资料。
58
58
 
59
59
  每一讲的板书在你打开它时才生成,同时会预备下一讲,所以不会一次性消耗大量额度。
60
60
 
@@ -75,7 +75,9 @@
75
75
 
76
76
  习惯一次看一页的话,到**设置 → 板书视图**选**分页**,用右上角的页码翻页。
77
77
 
78
- **函数图**:由公式画出的曲线,比如 y = A·sin(ωx)、圆、心形线,都由开窍按公式逐点算出来,不会画歪。坐标轴按课本的样子画:穿过原点、带箭头,三角函数按 π/2 标刻度,曲线旁写着它的公式;需要时还有标出的点、虚线(渐近线、对称轴)、阴影面积和切线。公式里有参数时,图下面有滑块,拖一拖就能看到曲线怎么变。一拖滑块课堂就暂停,看够了再点**播放**。导出的 PDF、PNG 和视频按默认值画成静态图。
78
+ **函数图**:由公式画出的曲线,比如 y = A·sin(ωx)、圆、心形线,都由开窍按公式逐点算出来,不会画歪。坐标轴按课本的样子画:穿过原点、带箭头,三角函数按 π/2 标刻度,曲线旁写着它的公式;需要时还有标出的点、虚线(渐近线、对称轴)、阴影面积和切线。公式里有参数时,图下面有滑块,拖一拖就能看到曲线怎么变。一拖滑块课堂就暂停,看够了再点**播放**。分段函数(比如绝对值、阶梯函数)也照样画,曲线在跳变的地方断开,不连竖线。导出的 PDF、PNG 和视频按默认值画成静态图。
79
+
80
+ **画不出来的图**:模型写的示意图、函数图、图表或动画偶尔有错。能直接改的小毛病,开窍会自动改好,比如图里多出一个 & 符号,或者公式里用了没设成参数的字母(自动变成一个从 0 到 2、初值为 1 的滑块)。改不了的,等这一讲写完,老师会把它们一起重画一次,这期间图的位置显示「正在重画这张图…」。重画后还不行,就显示「这张图没画出来」和图的说明(函数图还附上原来的公式),导出的 PDF、PNG、Markdown 和视频里也一样。动画在课堂里运行出错时,换成它自带的静态画面。
79
81
 
80
82
  **备课中**:一讲第一次打开时,老师要先备课。能关掉推理的模型(比如 DeepSeek)不先构思、直接写板书,一两秒就开讲;关不掉推理的模型会用它最轻的一档先想一想。备课超过 3 秒时,黑板中间会显示备课进度:先是**构思**(只在模型先想的时候出现,显示已构思的字数),然后是**写板书**,写到第几步、这一步讲什么(小标题边写边出现),以及已用的时间。第一步一写好就开讲,后面的内容边讲边写;如果讲得比写得快,黑板上会显示老师正在写的那一步。下一讲会在你上这一讲时提前备好,通常打开就能直接上。
81
83
 
@@ -94,7 +96,7 @@
94
96
 
95
97
  **朗读用不了时**:云端语音没保存密钥、密钥被拒、地址或区域填错、服务拒绝请求、一直没有回应或超时,或者系统音色没法出声,控制栏上方会写明原因,这节课先静音往下讲,不再一步一步地重试。服务 10 秒没有任何回应(一步讲得长时多等一会儿,最多 45 秒),或者音频传到一半停住 10 秒,就算没有回应;还在陆续传音频的慢服务会照常等完。连不上、限流这类可能很快恢复的问题,连续两步失败才停用。点**重试**重新打开语音,并从这一步开头重讲;点**去设置**修改语音设置。停用期间**声音开 / 静音**显示为静音,点它也能重新打开语音。
96
98
 
97
- **举手提问**:没听懂就点**举手提问**(或直接在侧栏的提问框里写)。老师会把回答插在当前这一步之后,边写边讲给你听,讲完接着原来的内容继续。问过的问题和「换个讲法」都会留在这一讲里,下次打开还在原来的位置,也会出现在侧栏的讲解记录里。
99
+ **举手提问**:没听懂就点**举手提问**(或直接在侧栏的提问框里写)。老师会把回答插在当前这一步之后,边写边讲给你听,讲完接着原来的内容继续。课程有资料时,老师会带着资料原文回答:问题里提到的页(如「书上第 12 页的例 2」)、这一讲对应的页、和问题相关的段落,所以可以直接问「书上那道例题怎么做」。问过的问题和「换个讲法」都会留在这一讲里,下次打开还在原来的位置,也会出现在侧栏的讲解记录里。
98
100
 
99
101
  **语音提问**:提问框旁边有个麦克风。点一下开始说,说完再点一下停止,识别出的文字会填进提问框,检查一下再点**提问**;说话时课堂会自动暂停。一次最多录 2 分钟。语音识别用的是 DSH 的实验功能**语音输入**,在本机识别、不上传录音,开窍也不保存录音。第一次用之前:
100
102
  1. 在 DSH 的**插件管理**里启用**语音输入**;
@@ -135,19 +137,20 @@
135
137
 
136
138
  | 标签 | 内容 |
137
139
  | --- | --- |
138
- | **大纲** | 全部单元、章和讲,带学习状态和讲法(直观理解、定义概念等);自动加入的巩固课标有「巩固」。每个单元都有**单元速查表**、**单元测验**和**单元闪卡** |
139
- | **练习、测验与闪卡** | 每讲的练习,每个单元的**单元测验**和**单元闪卡**;顶部的**开始复习**复习这门课该复习的知识点,**闪卡复习**把各单元到期的闪卡放在一起复习 |
140
+ | **大纲** | 全部单元、章和讲,带学习状态和讲法(直观理解、定义概念等);自动加入的巩固课标有「巩固」。用带目录的资料建的课,每讲旁边标着对应的页(📖 第 12–15 页),鼠标停在上面能看到资料、目录条目和 PDF 页码。每个单元都有**单元速查表**、**单元测验**和**单元闪卡** |
141
+ | **练习、测验与闪卡** | 最上面是这门课的**错题本**;下面是每讲的练习,每个单元的**单元测验**和**单元闪卡**;**开始复习**复习这门课到期的错题和该复习的知识点,**闪卡复习**把各单元到期的闪卡放在一起复习 |
140
142
  | **速查表** | 单元速查表,按主题整理公式、定义和要点 |
141
143
  | **项目** | 实战项目,见[实战项目](#实战项目) |
142
- | **进度** | 每个知识点的掌握程度(未开始、薄弱、学习中、熟练、掌握五级),以及老师发现的误解(⚠) |
144
+ | **进度** | 每个知识点的掌握程度(未开始、薄弱、学习中、熟练、掌握五级),以及老师发现的误解(⚠);每个知识点后面都有**练这个知识点** |
143
145
 
144
- 标题旁边是学习进度和剩余时间;下面的**下一步**给出一个建议:有到期的复习就先复习,其次练一练最薄弱的知识点,再往下是下一讲。右上角的 **⋯** 菜单可以**编辑课程大纲**、**导出课程包**、**归档**和**删除课程**。大纲里每一讲的掌握度条在学过之前是空的。所有课程都在左侧的**我的课程**里,可以按学习中、已学完、已归档筛选和搜索。
146
+ 标题旁边是学习进度和剩余时间;下面的**下一步**给出一个建议:有可以再练的错题或到期的复习就先复习,其次专门练一练最薄弱的那个知识点,再往下是下一讲。右上角的 **⋯** 菜单可以**编辑课程大纲**、**导出课程包**、**归档**和**删除课程**。大纲里每一讲的掌握度条在学过之前是空的。所有课程都在左侧的**我的课程**里,可以按学习中、已学完、已归档筛选和搜索。
145
147
 
146
148
  ## 练习、闪卡与复习
147
149
 
148
150
  - **练习**:单选、多选、填空、数值计算和排序题会立即判分;简答题由老师按要点批改,告诉你答到了哪些、漏了哪些。做完可以**看解析**。需要图的题会附一张示意图,或一张按公式算出的函数图。
149
151
  - 可以用键盘作答:1–4 选择,Enter 提交或继续,H 看提示;题号旁边会显示连对了几题。
150
- - 做完一组会看到星级、正确率、最长连对,以及这一轮之后各知识点的掌握程度,最后给出一个下一步建议,比如回到这一讲再听一遍、复习这门课,或者做单元测验。
152
+ - 做完一组会看到星级、正确率、最长连对,以及这一轮之后各知识点的掌握程度,最后给出一个下一步建议,比如回到这一讲再听一遍、复习这门课,或者做单元测验。每个知识点旁边都能点**练这个知识点**接着专项练。
153
+ - **讲这题**:每道题判完分后,结果框里都有**讲这题**(答错时更显眼)。老师会在白板上从你的答案讲起:先说出你可能是怎么想的、错在哪里(答对了就讲清为什么对,不是蒙的),再一步步讲正确做法,写下要记住的要点,最后留一道同类题让你当场做。白板盖在练习页上,可以举手追问,点**关闭讲解**就回到原来那道题,这一轮练习不受影响;同一轮里再点,会打开刚才那段讲解,不会重新写。课程里的这道同类题像课堂小测一样计入掌握度,答错也不进错题本;学习工具测验里的不计。讲解同时存进**即时答疑**,之后还能打开、接着问。每讲的练习、单元测验、复习、练错题、知识点练习和学习工具里的测验都有;错题本里每道题旁边也有,从你上次答错的答案讲起。
151
154
  - **这题有问题?**:判完分后,觉得题目、答案或判分不对(答案标错了、选项有两个对的、单位错了、简答题判得太严),点结果框里的**这题有问题?**。可以写一句(或点麦克风说)哪里不对,也可以不写,然后点**请老师核对**。老师会先自己把题做一遍、仔细核对,要等几秒到半分钟;这期间可以先做下一题,核对完会在页面顶部提示。结果显示在这道题下面的**老师核对**里:
152
155
  - **确实有错**:老师会把存档里的这道题改好(题目、选项、答案、解析、提示里错的地方),题上出现红色的**✎ 已更正**,鼠标停在上面能看到原来写的内容。然后按改好的题重新判你这次的作答。
153
156
  - **题目没说清楚**(比如没说 g 取 9.8 还是 10):老师会把约定写进题目;你按另一种合理理解答对的,这次算对。
@@ -157,9 +160,19 @@
157
160
  重新判分后,掌握度和复习时间会按新的分数重新算,就像当初判对了一样:这次作答留下的「误解」标记也会去掉,这一轮的星级、正确率和连对也按新结果算。每讲的练习、单元测验、学习工具里的测验和复习里的题都可以这样核对。
158
161
 
159
162
  题目改好后,你以前对同一道题的作答(上一轮练习、复习里,或课上的小测)也会按改好的题重新判,结果框里会说重判了几次。题目确实有错时,按改好的答案判,分数可能升也可能降;题目没说清楚时,只会往上调,因为你当时按另一种理解答的可能也对。简答题和写过程的题由 AI 重新批改最近 3 次。只有最近 50 次作答留有记录,更早的不再重判。
163
+ - **练这个知识点**:只练某一个知识点。在课程页的**进度**里每个知识点后面、**下一步**提示某个知识点还比较薄弱时,以及一轮练习结束页的掌握程度里,都能点**练这个知识点**。
164
+ - 每次出 5 道只考这个知识点的新题,按你现在的掌握程度来出:还比较薄弱时先出两道基础题,再慢慢加深;已经掌握的,就出边界情况,以及和前面内容结合起来的题。你答题时暴露出的误解(⚠),会专门出题检验。题目由模型现出,要等半分钟左右,等待时会显示已经出了几题。
165
+ - 不出你做过的题:这一讲的练习和课堂小测、单元测验、之前练过的组都会避开,换个说法、换个数字也不行。
166
+ - 作答和其他练习一样计入掌握度,答错的题进错题本,标着「知识点练习」;也能用**这题有问题?**核对,复习时也会用到这些题。
167
+ - 一组题还没开始做时,再点进来还是这一组;做过以后再进来就出新的一组。做完可以点**再来一组**马上换一组,也可以**重试**同一组。
160
168
  - **单元测验**:题量按这个单元的知识点来定,每个知识点至少一题,重点多出几题,一般 10–30 题;课程有资料时,题目按资料里这个单元的内容和题型来出。题多时要等一两分钟,等待时会显示已经出了几题。做完可以**重试**同一套题,也可以点**换一套新题**重新出一套。
161
169
  - **闪卡**:在课程页的**练习、测验与闪卡**里点某个单元的**单元闪卡**,第一次打开时按这个单元的知识点生成,每个知识点 2–4 张,一个单元最多 60 张。点击翻面,然后按记忆情况选**忘了 / 困难 / 记得 / 简单**。开窍用间隔重复安排下次复习的时间,记得越牢,间隔越长;有到期的卡片时,按钮上会显示张数。顶部的**闪卡复习**把各单元到期的闪卡放在一起复习;1.10.0 之前生成的整门课闪卡也在这里,原来的复习记录照旧保留。
162
- - **复习**:学过的知识点也会按遗忘曲线回来。学习计划会提醒你**有 N 个知识点该复习了**,点**开始复习**即可。
170
+ - **错题本**:课堂小测、每讲的练习、单元测验和复习里没答对的题(答错或只对了一部分)会自动收进这门课的错题本,在课程页**练习、测验与闪卡**的最上面。每道题列出题目、出自哪里、你上次的答案、错了几次和哪天再练。
171
+ - 错题从出错的第二天起可以再练:点**练错题**,一轮最多 10 道,最早到期的先出;还有到期的,做完可以**再来一轮**。当天看完答案马上重做答对不算。
172
+ - 到期后再答对一次,这道题就算解决,移到折叠起来的**已解决**里;之后在哪里又答错,它会重新回来,第二天再练。在课上、练习或复习里遇到同一道题,答的也都算。
173
+ - 用**这题有问题?**改好了题,错题本里的这道题也一起改好;按改好的题你当时其实答对了的,它会从错题本里去掉。课堂上用**这一步不对?**改了小测的答案,也一样。
174
+ - 重新备课后同一个位置换成了新题,原来那道错题照旧留在错题本里,按原来的样子再练。学习工具里的测验不收进错题本。
175
+ - **复习**:学过的知识点也会按遗忘曲线回来。学习计划会提醒你**有 N 个知识点该复习了**,点**开始复习**即可。一次复习最多 8 题:先出到期的错题,再给每个该复习的知识点出一道你最久没做过的题(今天刚做错、还没到期的题不出)。
163
176
 
164
177
  ## 资料库
165
178
 
@@ -167,16 +180,20 @@
167
180
 
168
181
  | 类型 | 说明 |
169
182
  | --- | --- |
170
- | PDF | 读取文字层,讲课和速查表会引用页码。没有文字层的页(扫描页、整页图片)由能看图的模型逐页识别,上传时显示进度、可以取消,一个文件最多识别 200 页 |
171
- | Word(.docx)、PPT(.pptx) | 读取正文;PPT 按幻灯片编号引用。几乎全是图片的文档、只有图片的幻灯片,图里的字也会识别 |
172
- | Markdown、文本 | 自动识别 UTF-8 和 GB18030 编码 |
173
- | 网页 | 点**添加网页**,填入公开网址,开窍会提取正文 |
183
+ | PDF | 读取文字层。书签变成目录;没有书签时,从页面上的章节标题(「第三单元」「Chapter 2」这类、页顶或字号大的标题)识别。每页记下书上印的页码(PDF 自带的页码标签,或从页脚读出),页眉页脚不进正文。没有文字层的页(扫描页、整页图片)由能看图的模型逐页识别,上传时显示进度、可以取消,一个文件最多识别 200 页 |
184
+ | Word(.docx)、PPT(.pptx) | 读取正文;Word 的标题变成目录,表格按行保留;PPT 按幻灯片编号引用。几乎全是图片的文档、只有图片的幻灯片,图里的字也会识别 |
185
+ | Markdown、文本 | 自动识别 UTF-8 和 GB18030 编码;Markdown 的 `#` 标题变成目录(代码块里的 `#` 不算) |
186
+ | 网页 | 点**添加网页**,填入公开网址,开窍会提取正文,文章里的小标题变成目录 |
174
187
  | 图片 | 能看图的模型会识别图里的字,之后和其他资料一样能建课、做速查表和测验;图片本身也会交给能看图的模型 |
175
188
 
176
189
  单个文件最大 200 MB,图片最大 10 MB;更大的文件可以拆成几份上传。
177
190
 
178
191
  每份资料都可以一键**用它建课**,或者生成**速查表、闪卡、笔记、测验**,以及**消化**成概要、结构、核心观点、论点与论据、术语表和值得思考的问题。
179
192
 
193
+ **目录和页码**:资料下面的**目录**列出每一章、每一节和它在书上的页码,鼠标停在页码上能看到它在 PDF 里是第几页。页码一律按书上印的来,和老师说「翻到第 12 页」是同一页。用带目录的资料建课时,每一讲会对应到目录里的条目,讲课、举手提问、练习和单元测验都先读这些页;资料是英文、课程是中文时,老师还会给每讲记下几个英文关键词,用来在书里找到对应的段落。
194
+
195
+ **页码都经过核验**:讲课、举手提问、笔记和消化里提到的页码,只保留这次真正读过的页;速查表的每条引用附一小段原文,在资料里找到才显示(找到在别的页就改成那一页),鼠标停在引用上能看到这段原文。核验不过的页码直接去掉。之前生成的板书、笔记、消化和速查表没有核验信息,打开时不再显示其中的页码。之前上传的资料没有目录和印刷页码,重新上传一次就有了。
196
+
180
197
  闪卡和测验会读完整份资料:长资料按约 2 万字一段来读,每段各出一批再合在一起,等待时显示读完了几段、已经写好多少,可以取消。闪卡每个知识点 2–4 张,一份资料最多 300 张,同一个问题只留一张;复习时每轮最多 40 张,页面上显示一共多少张。测验按资料长短出 5–30 题,短讲义大约 5–10 题,长资料的题目平均分到各段。个别段没读成时,闪卡和测验页面上会写明是哪一部分(页码或章节)。
181
198
 
182
199
  **找资料**:资料多了,在资料列表上方的搜索框里输入,会按标题和主题即时筛选;按回车(或点**搜正文**)会在所有资料的正文里搜,列出最相关的段落,带资料名、页码和高亮的上下文,点一条就跳到那份资料。搜索在本机进行,不调用模型。
@@ -208,7 +225,7 @@
208
225
  新建会话时,在预设里选择 **「开窍 · AI 私人老师」**。在这个会话里,老师可以:
209
226
 
210
227
  - 在白板上讲解:对话中出现一张白板卡片,点**打开白板**会在右侧栏播放;
211
- - 出互动小测:直接在对话里作答;
228
+ - 出互动小测:直接在对话里作答,也可以说「针对某个知识点给我出几道题」。做完点**提交**,每道题的作答会填进输入框:你的答案、答错时的正确答案、简答题的参考答案和批改意见,检查后发出去,老师会逐题纠错;
212
229
  - 帮你建课:把你们聊的内容变成一门课,之后在开窍里继续;
213
230
  - 做速查表,查看你的学习画像。
214
231
 
package/lib/agent.js CHANGED
@@ -1,11 +1,11 @@
1
- import { At as normalizePractice, I as generateJson, Kt as newId, Rt as text, q as readProfile, t as getRuntime, u as detectLanguage, w as quizPrompt } from "./runtime-CvdutoBG.js";
1
+ import { M as quizPrompt, Q as readProfile, a as generateJson, cn as newId, g as detectLanguage, ln as orderOptions, qt as text, t as getRuntime, zt as normalizePractice } from "./runtime-DNazpszU.js";
2
2
  import { defineTool } from "@deepseek-ai/dsh-tools";
3
3
  //#region src/agent.js
4
4
  const name = "aha-tutor-agent";
5
5
  const inject = ["tools", "systemPrompt"];
6
6
  const TOOL_GUIDE = `## Teaching tools (Aha Tutor)
7
7
  - aha_whiteboard: explain a concept, solve a problem step by step, or visualize an idea on a narrated handwriting whiteboard in the side panel. Prefer it over long chat answers whenever a picture, a formula derivation or a worked example would help. After calling it, reply with at most two sentences; never repeat the board in chat.
8
- - aha_quiz: check understanding with a few interactive questions shown to the learner. Use it after explaining something important. The learner's answers arrive in their next message; then give feedback and fill the gaps.
8
+ - aha_quiz: check understanding with a few interactive questions shown to the learner. Use it after explaining something important, or when the learner asks for questions on a topic. The learner's next message reports each question with their answer, the right answer when they missed it and the grading of open answers; then correct each mistake: say what they probably thought, why it fails and how to get it right (on aha_whiteboard when it needs working), and fill the gaps.
9
9
  - aha_course: when the learner wants to learn a whole subject systematically, design a personal course in Aha Tutor instead of teaching everything in chat.
10
10
  - aha_cheatsheet: make a printable cheat sheet before exams or at the end of a topic.
11
11
  - aha_learner: read what Aha remembers about the learner (background, goals, weak spots, active courses) before planning or when personalizing.
@@ -110,7 +110,7 @@ function apply(ctx) {
110
110
  }));
111
111
  ctx.tools.register(defineTool({
112
112
  name: "aha_quiz",
113
- description: "Show the learner a short interactive quiz (multiple choice, fill-in, numeric or short answer). Answers are not revealed to you; the learner reports results in the next message.",
113
+ description: "Show the learner a short interactive quiz (multiple choice, fill-in, numeric or short answer). The answer key is not shown to you now; the learner's next message reports each answer with the key.",
114
114
  parameters: {
115
115
  topic: {
116
116
  type: "string",
@@ -172,7 +172,7 @@ function apply(ctx) {
172
172
  normalize: (raw) => {
173
173
  const set = normalizePractice(raw, []);
174
174
  if (!set.items.length) throw new Error("no questions");
175
- return set;
175
+ return { items: set.items.map(orderOptions) };
176
176
  }
177
177
  });
178
178
  return {