daily-question 1.1.0 → 2.1.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 ADDED
@@ -0,0 +1,32 @@
1
+ # 更新记录
2
+
3
+ ## 2.1.0(2026-11-06)
4
+
5
+ ### 出题与考试依据
6
+
7
+ - 出题采用命题、仅含题干及选项的盲解、答案比对和分歧主裁;答案通过后进行独立范围与难度评审。
8
+ - 自定义科目可根据名称和代码自主检索,独立核对考试身份、大纲正文和至少两个年份的真题;区分专业代码与考试科目代码,信息不清时不猜测院校或考试。
9
+ - 转载大纲保留来源限制,已读新版公告不能因模型漏选而绕过;资料不足或校验未通过时不发布题目。
10
+ - 在线命题增加全历史归一化去重、近期近似检查、近期题型和知识主题频次安排;指定主题还需独立评审确认,发布前再次检查并发历史。
11
+
12
+ ### 作答、列表与追问
13
+
14
+ - 缺少有效选项答案的选择题保持待判定;人工判分绑定具体作答ID,避免多标签页串记录。
15
+ - 今日重复题按当日练习状态展示答案,兼容旧作答时间戳,保留历史记录和当日完成状态。
16
+ - 全部、收藏和错题本默认50道分页,作答统计建立索引,保留跨页全选、批量管理、页码和滚动位置。
17
+ - 防止旧栏目、旧题目及迟到回复覆盖当前页面;跨日生成完成后同步列表和数量。
18
+ - 追问支持并发去重、中断恢复和原消息重试,清空后丢弃旧回复;上下文区分已核验、未核验和缺失答案,不将模型结果称为官方答案。
19
+ - 出题、修订和追问提供超时与取消,释放任务后可重试,迟到结果不再发布。
20
+ - 设置区显示当前版本,自动和手动检查npm的daily-question更新。
21
+
22
+ ### PDF与稳定性
23
+
24
+ - 按实际页树顺序读取文本型PDF,拒绝异常页树。
25
+ - 在线资料与题库PDF使用可终止的受限工作线程,限制解压、对象、页数、文本量、并发、排队与解析时间。
26
+ - 新增对应回归检查;本次发布通过全部离线测试,并核对安装包与源文件一致。
27
+
28
+ ### 已知边界
29
+
30
+ - 本次未重新进行真实浏览器或付费模型完整联网验收。自主检索仍为实验性能力;最近记录的408自主检索因缺少可核对的大纲正文而停止,不能承诺任意自定义科目均能取得资料。
31
+ - 支持独立图片试卷识别及PDF文本层提取,扫描PDF仍不提供OCR;模型校验不等于官方认证,难度为模型对照估计。
32
+ - 仍使用单文件JSON;超大规模有全量保存成本,不支持多个宿主共同写入同一数据文件。文本去重不保证识别全部语义重复,主题安排不等同于官方整卷权重。
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Scienmicroit
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Scienmicroit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,183 +1,320 @@
1
- # 考研每日一题 · DSH 插件
1
+ # 考研每日一题
2
2
 
3
- 给 [DeepSeek Harness](https://github.com/deepseek-ai) 用的每日一题插件:左侧栏一个入口,每个启用科目每天一道题,答案先经过**独立视角校验**才发布,配倒计时、错题本、收藏和按题隔离的追问侧栏。
3
+ 面向 **DeepSeek Harness(DSH)** 的考研练习插件。按科目每天分配一道题,把作答、答案解析、收藏、错题整理和针对本题的追问放在同一个页面中。
4
4
 
5
- 面向中国大陆硕士研究生招生考试(考研)。内置科目只有这几个:思想政治理论(单项选择、多项选择)、数学一 / 数学二 / 数学三(单项选择、填空、解答)、英语一 / 英语二(英语知识运用(完形填空)、阅读理解、翻译)。其他科目可以自己添加为自定义科目。
5
+ 当前版本:**2.1.0**。本插件需要 DSH 宿主,不是独立运行的网站或命令行应用。
6
6
 
7
- ## 功能
7
+ ## 2.1.0 更新
8
8
 
9
- **每日出题**
10
- - 每个启用科目每天一道固定题目,同一天反复进入、刷新、切换科目都返回同一道;跨自然日自动换题。
11
- - 两道题目来源:**在线出题**(宿主默认模型生成)与**题库出题**(导入 Markdown / 文本型 PDF),可按科目选择,也可设为“自动(优先题库)”。
12
- - 出题与校验是两个独立步骤:先出题,再由另一个视角**先自己解题再看答案**,检查题干条件、可解性、答案唯一性、解析严谨性和判分规则。校验不通过会带反馈重出一次,仍不通过就**不发布**并如实报错。
9
+ - 在线出题增加真正盲解、分歧主裁和独立范围与难度评审;加入历史去重、近期题型及知识主题覆盖安排。
10
+ - 自定义科目支持按名称与代码自主检索,独立核对考试身份、大纲和两年真题;资料不足时阻止发布。区分专业代码与考试科目代码。
11
+ - 修复无答案选择题误判、多标签页判分串记录及旧请求覆盖新页面;今日重复题按当天练习状态展示答案。
12
+ - 全部、收藏和错题本分页读取,使用作答索引;保留跨页全选、批量管理和返回原页功能。
13
+ - 出题、修订和追问支持超时与取消;追问支持重启恢复、并发去重和失败重试,清空后不再恢复迟到回复。
14
+ - PDF按实际页序提取,采用受限工作线程与资源上限;支持图片试卷识别,扫描PDF仍不提供OCR。
15
+ - 设置区新增当前版本与npm检查更新,打开页面自动检查,支持手动重查。
13
16
 
14
- **答题**
15
- - 选择题:选 → 提交 → 判定 → 公布标准答案与完整解析。
16
- - 主观题:只提供「作答完毕」与「未能作答」;「作答完毕」不会自动算答对,答案区域下方再由你自己判定「作答正确 / 作答错误」,未判定时是「待判定」,不进错题本。
17
- - 每次「看过标准答案」才算一次作答,打开题目不算;重复提交同一 `attemptId`、刷新页面都不会重复计数,主动重新作答才会 +1。
18
- - 作答历史逐条保留(时间、结果、选择),并区分「历史上答错过」与「当前已掌握」。
17
+ **验收边界:** 本次发布通过完整离线回归及安装包内容检查,未重新执行真实浏览器和付费模型联网验收。自主检索为实验性能力:最近记录的408自主检索未取得足够的大纲正文,因此停止发布;不能保证任意科目都能取得可靠公开资料。更多限制见下文及[更新记录](CHANGELOG.md)。
19
18
 
20
- **四类列表**(每个科目互相隔离)
21
- 今日题目 / 全部 / 收藏 / 错题本。四者共享同一题目 ID,收藏或答错后立即同步;删除科目或删除题库都不会删掉历史题目、作答、收藏与追问。
19
+ ## 2.0.0 界面与练习功能
22
20
 
23
- **答案详解固定版本**
24
- 首次生成并通过校验后即固定(版本 ID + 首次展示时间),之后无论刷新、切科目、从其他列表进入都复用同一版本,不会重新生成;只有点「修订答案详解」才会产出候选新版本,候选必须重新通过独立校验、再由你确认替换,旧版本进版本历史。
21
+ - 采用蓝色主题,正确与错误分别使用绿色、红色;统一科目管理、题库管理和确认弹窗的样式。
22
+ - 科目管理支持草稿:勾选科目、切换来源、添加自定义科目和题型后,点击右下角「完成」统一保存;取消或关闭不生效。
23
+ - 全部、收藏、错题本支持批量收藏、取消收藏、加入或移出错题本、删除,以及全选和全不选。
24
+ - 题目卡片最多预览两行,支持公式和代码;截断时在最后一行实际可见内容末端渐隐,不添加省略号。
25
+ - 点击整张卡片进入详情;独立的方形「‹」按钮返回原列表与滚动位置。
26
+ - 栏目栏固定在内容区左上方;重复点击当前栏目不重复请求。
27
+ - 追问默认收起,查看本次答案后才显示入口;宽屏支持拖动分隔线调整比例,收起后题目填满可用宽度。
28
+ - Enter 发送追问,Shift+Enter 换行;中文输入法确认候选词不会误发送。
29
+ - 修复保存失败后内存状态不回退、并发作答重复计数、自定义题型在线生成失效、题库过早重复出题,以及考试结束前提前切换年份等问题。
25
30
 
26
- **追问侧栏**
27
- 线程按题目 ID 隔离,只喂当前题目的题干、选项、正式答案与该线程历史;生成失败会保留原文并可重试,清空只影响当前题目。
28
-
29
- **考研日期**
30
- 区分报名年份与实际考试日期:2028 考研 = 2027 年 12 月初试。已公布的用官方日期(不带「约」);未公布的以上一年同一考试的官方日期推后一年估算,并在三行倒计时里都标「约」;查不到依据就明确写「尚未核实」,不编日期。页面上的「核验日期」会联网只采信 `moe.gov.cn` / `chsi.com.cn` / `neea.edu.cn`。
31
+ ## 安装
31
32
 
32
- **渲染**
33
- 题干、选项、答案、解析均支持 Markdown:标题、列表、引用、表格、代码块(保留缩进与换行)、图片、行内与独立 LaTeX 公式。公式由 **MathJax 3** 渲染(SVG 输出、随包分发、完全离线):可拉伸根号、矩阵定界符、`\boxed`、`\begin{aligned}`、`\ce{}` 化学式都原生支持,覆盖范围跟随 MathJax 的宏列表。公式块里的裸 `\\` 换行会自动包一层 `\displaylines`(MathJax 3 的要求,与 Typora 的处理一致)。引擎加载完成前先显示 TeX 原文,渲染失败时降级为红字提示,不会让整块内容静默消失。
33
+ ### 环境要求
34
34
 
35
- ## 安装
35
+ - 已安装并能运行的 DSH。
36
+ - Node.js **20.3.0 或更新版本**(由运行宿主的环境提供)。
37
+ - 在线出题、答案修订和追问需要宿主配置可用的默认模型。在线出题还需要可用的 `web.search` 与 `web.fetch` 服务,用于读取考试依据。
38
+ - 公式引擎随包提供,无需单独下载字体或公式依赖。
36
39
 
37
- 需要可用的 DeepSeek Harness,以及一个能用的默认模型(在线出题要用)。
40
+ ### 安装本地安装包
38
41
 
39
- > 装插件需要 git 或 npm 其中一条通路。**没有 git 的机器**请用下面第 1 种(仓库自带的
40
- > `dist/daily-question-1.1.0.tgz`)或发到 npm 之后的包名,这两种都不调用 git。
42
+ 仓库的 `dist/` 目录提供:
41
43
 
42
- ### 1. 用仓库自带的 tgz(不需要 git、不需要联网装依赖)
44
+ ```text
45
+ dist/daily-question-2.1.0.tgz
46
+ ```
43
47
 
44
- 仓库里带了一个已打包好的插件:`dist/daily-question-1.1.0.tgz`。
48
+ 在 DSH Desktop 的插件安装入口填写该文件的绝对路径。命令行使用与你运行宿主一致的 profile,例如:
45
49
 
46
50
  ```bash
47
- # 下载仓库后(ZIP 或 git clone 都行),用本地文件安装
48
- dsh plugin --profile web add ./dist/daily-question-1.1.0.tgz
51
+ dsh plugin --profile web add ./dist/daily-question-2.1.0.tgz
49
52
  ```
50
53
 
51
- DSH Desktop 上:插件页的安装输入框填**这个 tgz 的绝对路径**,或把路径交给 Agent 用
52
- `plugin_manager install_bundle` 安装。
54
+ Desktop 管理的 `desktop` profile 请通过 Desktop 插件界面操作。安装完成后重启相应宿主或刷新客户端,左侧栏出现「考研每日一题」入口。
53
55
 
54
- ### 2. DSH Desktop(图形界面)
56
+ ### 从 npm 安装
55
57
 
56
- 插件面板 → 添加 → 填 npm 包名 `daily-question`(发布后可用),或本地目录 / tgz 路径。
57
- 装好后**刷新一次页面**,左侧栏会出现「考研每日一题」的图标(在「插件」「日程」旁边)。
58
+ **维护者发布 2.1.0 后**,可以安装指定版本:
58
59
 
59
- ### 3. 命令行(`dsh web` 这类 CLI 用法)
60
+ ```bash
61
+ dsh plugin --profile web add daily-question@2.1.0
62
+ ```
60
63
 
61
- profile 名就是你启动 DSH 时用的那个:跑 `dsh web` 就是 `--profile web`,跑 `dsh --profile headless …` 就是 `--profile headless`。
64
+ DSH Desktop 可在插件安装入口填写 `daily-question@2.1.0`。命令行安装还需满足宿主对包管理器的要求;若提示缺少 pnpm,先安装或启用 pnpm。
62
65
 
63
- `dsh plugin` 会把参数原样转发给 pnpm,所以本机需要先有 pnpm(`corepack enable pnpm`,或 `npm i -g pnpm`)。
66
+ ### 从 GitHub 或源码安装
64
67
 
65
- **从 npm 装**(最省事,不需要 git):
68
+ 发布 `v2.1.0` 标签后,可锁定该标签安装;此方式需要 Git:
66
69
 
67
70
  ```bash
68
- dsh plugin --profile web add daily-question@1.1.0
69
- dsh plugin --profile web add daily-question # 跟随最新版
71
+ dsh plugin --profile web add github:Scienmicroit/Daily-Question#v2.1.0
70
72
  ```
71
73
 
72
- **从 GitHub 装**(需要本机有 git):
74
+ 本地开发也可以直接安装源码目录:
73
75
 
74
76
  ```bash
75
- dsh plugin --profile web add github:Scienmicroit/Daily-Question#v1.1.0
76
- dsh plugin --profile web add github:Scienmicroit/Daily-Question # 不写 #tag 取默认分支最新提交
77
+ dsh plugin --profile web add ./Daily-Question
77
78
  ```
78
79
 
79
- **从本地目录装**:
80
+ 升级时重新安装目标版本即可。卸载命令为:
80
81
 
81
82
  ```bash
82
- git clone https://github.com/Scienmicroit/Daily-Question
83
- dsh plugin --profile web add ./Daily-Question
83
+ dsh plugin --profile web remove daily-question
84
84
  ```
85
85
 
86
- 装完这条命令会把包里 `dsh.bundle.patch` 声明的那一行自动叠加进 profile(`package.json` 的 `dsh.profile.bundles` 里会出现 `daily-question`),下次启动该 profile 即生效。
86
+ 卸载插件不会自动删除保存在数据目录中的学习记录。
87
87
 
88
- > **注意**:DSH Desktop 内置的 `desktop` profile 由应用独占管理,命令行会拒绝(`profile "desktop" is managed exclusively by the Electron application`),请走图形界面方式。
88
+ ## 开始练习
89
89
 
90
- ### 4. 让 Agent 装
90
+ 1. 打开「科目管理」,选择需要练习的科目并设置出题来源,点击「完成」。关闭或取消弹窗会放弃尚未保存的修改。
91
+ 2. 选择目标考研年份,核对倒计时与日期来源。
92
+ 3. 在「今日题目」开始作答。在线出题包括生成和独立校验,首次加载可能需要几十秒。
93
+ 4. 需要题库时,在「题库管理」导入文件,检查预览和解析提示,再确认入库。
94
+ 5. 查看答案后,可收藏题目、整理错题,或打开「本题追问」继续讨论。
91
95
 
92
- 已经装好 DSH 的话,把下面任一 target 交给 Agent,让它调用 `plugin_manager` 的 `install_bundle`:
96
+ 内置学习科目包括思想政治理论、英语一、英语二、数学一、数学二、数学三。自定义科目支持内置题型和自行命名的题型。**参考考试目录与内置学习科目独立**:除上述考试外,还可选择「计算机学科专业基础(408)」,不必为了参考408而修改默认学习科目列表。
93
97
 
94
- - 本地目录或 tgz 的绝对路径(不需要 git)
95
- - `daily-question@1.1.0`(发布到 npm 之后)
96
- - `github:Scienmicroit/Daily-Question#v1.1.0`(本机有 git 时)
98
+ 自定义科目默认选择「自动检索与核验」,由模型根据名称和可选代码自行搜索资料,不要求开发者逐科适配。仍可选择已有参考考试,或「另行指定参考考试名称…」填写与学习科目显示名称不同的准确考试名称及代码。院校自命题应在名称中包含院校,例如「某大学数据结构」,避免不同学校的801等同代码考试混用资料。所有修改在点击「完成」后统一保存,取消或关闭会放弃草稿。
97
99
 
98
- ### 升级与卸载
100
+ 自动检索及另行指定的考试使用自主流程:默认模型规划搜索,程序读取实际检索结果与正文附件链接,再由独立调用审查考试身份、大纲正文及至少两年真题。三位考试科目代码(如408)与六位专业代码(如081200)分别处理;专业代码或重号的自命题代码无法唯一确定考试时,必须补充院校及准确考试名称,不会自动套用数学、英语或408。资料不足、身份冲突或无法核对时停止在线出题,题库出题仍可使用。
99
101
 
100
- ```bash
101
- dsh plugin --profile web add daily-question@latest # 重新装一次即为升级
102
- dsh plugin --profile web remove daily-question # 卸载
103
- ```
102
+ ## 出题与作答规则
104
103
 
105
- 卸载不会删除学习数据(`~/.dsh/daily-question/data.json`)。
104
+ 左侧「题库管理」下方显示当前插件版本和「检查更新」。打开插件页面时自动查询 npm 官方仓库的 `daily-question` 包,页面持续打开时每6小时复查;回到页面也会检查,成功结果缓存6小时。点击按钮可跳过缓存立即重查。发现 `latest` 版本更新时显示版本号与 npm 链接,网络失败可重试,不影响学习数据。此功能仅提示更新,不自动安装,也不上传题目或学习记录。
106
105
 
107
- ### 发新版本(维护者)
106
+ 缺少有效参考选项的选择题提交后保持「待判定」,可自行判断,不会仅因没有参考答案就自动加入错题本。出题、答案修订和追问支持取消;总等待上限分别为15、10、5分钟,单次模型阶段最多5分钟。超时或取消后可重试,迟到结果不会继续发布。重启中断的追问显示为失败,可使用原消息重试;清空后不会恢复旧回复。
108
107
 
109
- ```bash
110
- # 1. 改 package.json 的 version,然后重新打包并提交
111
- npm pack --pack-destination dist # 产出 dist/daily-question-<版本>.tgz
112
- git add -A && git commit -m "release: v<版本>"
113
- git tag v<版本> && git push --follow-tags
108
+ ### 每日分配
109
+
110
+ 每个启用科目每天分配一道固定题目。再次进入同一科目的今日题目会复用该日的分配;新的自然日按宿主本地日期计算。
111
+
112
+ 页面保持打开时,会按宿主的下一次零点自动检查日期并为当前科目请求当天题目;切到其他栏目时不强制跳走,列表和数量会同步更新。今日题生成成功后,「全部」等计数和「今日已出」状态自动更新。从后台或休眠恢复时会补查日期;宿主未运行或页面已关闭时不会执行后台出题,重新打开后再加载当天题目。
113
+
114
+ | 来源 | 行为 |
115
+ | --- | --- |
116
+ | 在线出题 | 命题后进行真正盲解,再比对答案与解析,分歧交主裁 |
117
+ | 题库出题 | 从已导入且符合科目题型的题库中抽题 |
118
+ | 自动 | 优先题库,没有可用题目时尝试在线出题 |
119
+
120
+ 题库优先使用未出过的题,新题用完后选择最久未出的题;只有少量可用题目时允许重复。删除已出题目不等于删除原题库,未来仍可能重新抽到该题。
121
+
122
+ 在线出题分为以下独立调用,均沿用宿主默认模型:
123
+
124
+ 1. **命题**:生成题干、选项、答案与解析,先通过程序结构检查。
125
+ 2. **盲解**:另起请求,只传题干与选项,不传命题答案、解析、科目大纲或上一题反馈。
126
+ 3. **比对**:盲解完成后,检查双方答案是否一致、解析是否成立。选择题的正确选项不一致时,程序会强制进入主裁。
127
+ 4. **分歧主裁**:检查双方解答,最多裁决两轮。必须明确选择命题方或盲解方、确认题目有效并给出理由,才采用胜方原有的答案与解析;不允许用模糊结论或第三种答案发布。
128
+
129
+ 主裁两轮仍无法判断时,带反馈重新命题一次,新题重新盲解、比对和裁决。新题仍无法通过则终止,不保存为正式题目。答案校验后还要进行独立范围与难度评审。正常一致且评审通过时,命题与校验需要四次模型调用;两轮命题均走满主裁及评审时最多十二次逻辑调用。搜索服务、图片转录另外产生调用,空回复还可能重试。宿主使用最高推理强度时,每次命题、校验调用至少预留 24000 tokens 的输出上限,避免预算全部耗在推理而没有正文;这是上限而非固定消耗。图片转录关闭推理。答案修订同样经过盲解、比对与主裁,但胜方答案只生成候选版本,仍需用户确认替换。模型校验不等同于官方审定,不能保证绝对正确。
130
+
131
+ ### 判分与历史
132
+
133
+ - 选择题提交后按参考选项判分,并展示答案与解析。
134
+ - 主观题可选择「作答完毕」或「未能作答」。前者先记为待判定,查看答案后由用户判断正确或错误;后者记为错误。
135
+ - 打开题目不增加作答次数,提交并查看答案才记一次;同一作答 ID 的重复请求不会重复计数。
136
+ - 人工判分必须对应具体的作答 ID。多标签页分别作答时,各自只更新自己的记录;相同判定可安全重试,已完成的记录不能被迟到请求覆盖或改判。
137
+ - 手动加入错题本不会生成一条虚假的错误作答记录;移出错题本也不会删除历史作答。
138
+
139
+ 从列表打开历史题时,默认进入新一轮作答并隐藏答案。属于本科目今日题且在当天已经查看答案时,默认保留已完成状态。题库旧题在新一天再次分配时,不会沿用以往的已完成状态;历史记录和累计作答次数保留。当天查看答案后,刷新或重启仍保留已完成状态。主动点击「重新作答」会隐藏答案、解析和追问入口,直到本轮再次查看答案;同一页面会话内切换栏目再返回,也会保留这轮重新作答状态。
140
+
141
+ ### 答案版本与追问
142
+
143
+ 正式答案与解析保存为固定版本,重新打开不会再次生成。用户请求修订时,候选答案必须通过校验并经用户确认,才会替换正式版本;旧版保留在版本历史中。
144
+
145
+ 追问按题目 ID 隔离,使用本题资料和该线程近期历史。生成失败会保留输入并支持重试;清空对话只影响当前题目。查看答案后才显示追问按钮,默认不自动展开面板。
146
+
147
+ 宽屏下可拖动题目和追问之间的分隔线,或聚焦分隔线后用方向键调整;窄屏使用侧边浮层,不提供比例拖动。发送方式为 Enter,换行为 Shift+Enter。
148
+
149
+ ## 列表与批量管理
150
+
151
+ 全部、收藏和错题本默认每页50道,显示栏目总量并支持上一页、下一页;查看详情后返回保留页码和滚动位置。批量「全选」作用于当前栏目的全部题目,包含其他页;翻页保留选择,「全不选」清空跨页选择。统计使用按题目建立的作答索引,避免每道题重复扫描所有作答。学习数据仍采用单文件JSON原子保存,超大规模数据仍有全量复制和写入成本。
152
+
153
+ 今日题目、全部、收藏和错题本使用同一题目记录,各科目分别管理。
154
+
155
+ 在「全部 / 收藏 / 错题本」点击「批量管理」后,可以逐题选择、全选或全不选,并执行:
156
+
157
+ - 收藏、取消收藏。
158
+ - 加入错题本、移出错题本。
159
+ - 永久删除所选题目。
160
+
161
+ 删除题目会同时清理该题的作答、追问和今日分配引用。包含收藏或错题时,会在普通删除确认之后再要求一次确认。删除不可恢复。
162
+
163
+ 停用科目或删除题库只会停止相应的后续分配,不会删除已出题目及其作答、收藏和追问;需要永久删除题目时使用列表的删除功能。
164
+
165
+ ## 在线出题的范围与难度依据
166
+
167
+ 在线命题会参考当前科目的近期30道题,优先安排较少出现的题型和可从已读大纲辨认的知识主题,记录主题与知识点频次。无法确定主题时,由命题模型依据实际大纲和近期频次选择;指定主题时,还须由独立评审确认题干和解法实质覆盖该主题。历史题目只向命题阶段提供题干、选项与知识标签,不向盲解提供,也不提供历史答案。
168
+
169
+ 发布前检查全部已保存历史中的归一化重复题、相同长题干,以及近期高度相似题;拒绝仅调整排版、选项顺序或少量参数的重复练习,反馈重新命题。保存时还会复检最新历史,阻止并发发布重复题。文本相似度检查不能保证发现所有语义重复,覆盖安排也不等同于官方整卷权重或完整考试蓝图。
170
+
171
+ 内置科目和明确选择目录内参考考试时,在线命题前会检索目标年份附近的大纲,以及近三个年份的真题。优先读取教育考试院、教育部、研招网或高等教育出版社的正文;真题允许教育在线的转载。出版通知、搜索摘要和只有目录的页面不能替代大纲正文。
172
+
173
+ 自主检索不依赖逐科固定网址:允许跟进实际发现的公共 HTTPS 页面、网页附件和 Markdown 文件链接,支持文本型 PDF 和图片转录;无法提取的扫描 PDF 不会冒充已读。下载仍检查公网地址、重定向、文件大小与超时,拒绝内网地址和模型编造的网址。每次最多6轮规划、6次搜索、8次正文读取、2次独立资料审查,8分钟超时;通过的资料按科目名称、代码及目标年份在同一宿主实例中缓存6小时。独立审查须提供实际正文中的逐字证据;转载大纲还需另一来源机构的同年正文交叉依据。这是模型审查,不等于官方原书逐字认证,也不能保证发现全部最新公告。
114
174
 
115
- # 2. 发布到 npm(可选,但装了 npm 的用户最省事)
116
- npm publish # package.json 里 private 已是 false
175
+ 数学一另有经过原书核对的 2027 版大纲转录后备来源:运行时读取高教社公开图书接口,核对作者、书名和 ISBN `978-7-04-068404-9`,再读取 [DzmingLi/kaoyan-math-official-resources](https://github.com/DzmingLi/kaoyan-math-official-resources) 固定提交中的高等数学、线性代数、概率论与数理统计三份转录,逐一核验 SHA-256。已对照该版原书数学一第 6~24 页审校;版本、校验值及原书扫描件摘要记录于 `lib/reference-sources.js`。这属于第三方转录,**不是官方托管**,页面会显示其身份及出版社版本链接。不会随第三方仓库的 main 分支自动更新。
176
+
177
+ 408 的后备来源是[四〇八档案室标注2027的四模块正文](https://zhenti.beokayy.club/outline)。已用独立2027转载PDF的14页逐条比对,并用高校公开的2025版11页正文核对差异,四模块知识点均有支持,未发现实质知识范围冲突。两份2027转载存在标题措辞及转写差异;**这属于多源交叉核对,不是2027官方原书逐字审定,也不能证明“年度无变化”**。运行时核对高教社2027版书目(ISBN `978-7-04-068451-3`),同时核验已检查的网页正文与独立PDF的 SHA-256;正文、PDF或出版社记录不符合固定版本时停止。来源记录和界面明确显示上述限制,不标为官方原文,不发布或打包原书及转载PDF。其他科目目前没有已核对的后备正文来源。
178
+
179
+ 页面显示实际参考年份、链接、读取方式及检索时间,不把尚未核实的目标年份标成已确认。发现更新年份的官方大纲公告但无法读取正文时停止,不拿旧版替代。至少需要两个不同年份的匹配真题;数学一内置2024、2025年、408内置2024、2023年教育在线试卷地址,避免搜索排名变化导致完全找不到试卷。固定来源不受近三个年份的搜索窗口限制,但仍受年份、科目、正文和独立评审检查。
180
+
181
+ 读取网页时先提取正文,再截取长度。图片真题经宿主附件服务传入默认视觉模型,转录题干、选项和公式;408读取来源的全部试卷图片(当前两年各9张,上限12张),覆盖后续组成原理、操作系统与网络,避免只用开头的数据结构题校准其他模块。自主检索的图片试卷同样读取全部图片(上限12张);其余固定渠道每个来源读取前两张图片。至少两道清晰完整题目才使用,裁切、图表缺失或无法辨认的题目跳过;不抄入参考答案。来源保留图片链接、识别告警及覆盖范围;这些是难度对照材料,不代表按考生表现统计的整卷难度。默认模型必须经宿主能力接口确认为支持图片。在线 PDF 使用受域名、公网地址、跳转次数和大小限制的下载通道,复用项目的文本层提取器,不依赖宿主 web.fetch 支持 PDF,也不将文件路径说明误当作 PDF 正文。
182
+
183
+ 命题模型拿到这些资料后出题;盲解仍只接收题干与选项。答案核验完成后,独立评审调用检查范围、题型、知识点数量、推导步骤、计算量、条件隐含程度和技巧要求;不会收到命题人的难度分或范围自评。评审必须逐字引用已读取的大纲条目和至少两年真题片段,程序会检查引用是否真实存在。
184
+
185
+ 最终难度采用独立评审的 1~5 整数评分:基础直接题、典型常规题、中等综合题、较难综合题、高难压轴题。它是对照所检索真题的模型估计,不是按考生正确率标定的统计难度。范围或难度评审失败会反馈重出,仍不通过则不发布;命题人的自评分不会作为最终评分。
186
+
187
+ 评审输出需保持一致:有阻止通过的问题必须拒绝,`issues` 非空始终不会发布。经核对且不影响本题判断的一般来源限制放入 `warnings`,保留供查看答案后查阅;无法核实资料、缺少有效引用、范围或难度失真不能改成一般提示放行。
188
+
189
+ 无法读取大纲或真题、宿主没有联网服务、图片识别失败、PDF 没有可提取的文本层或超过 16 MiB 时,会停止在线出题,不降级为凭模型印象生成。图片真题另需宿主附件服务。扫描版 PDF 尚不支持自动逐页渲染;PDF 字体和编码仍可能影响文本提取。可以继续使用题库模式。新机制只影响之后在线生成的题目,不会重新标注已有题目的难度;答案修订仍核验正确性,不重估既有题干难度。
190
+
191
+ ## 导入题库
192
+
193
+ 支持 `.md`、`.txt` 和文本型 `.pdf`。扫描件或图片型 PDF 不提供 OCR;提取效果受 PDF 的字体、编码与排版影响,导入前必须核对预览。
194
+
195
+ 在线 PDF 和题库 PDF 均按实际页树顺序提取,在受限工作线程中解析,单份解析含排队最多20秒;限制单流展开8MiB、累计展开32MiB、1000页及400万量级字符。最多同时解析2份,排队最多8份且总大小不超过64MiB;达到限制会明确报错,可缩小文件或稍后重试。
196
+
197
+ 建议按下面的结构组织 Markdown,以题号或分隔线区分题目:
198
+
199
+ ```markdown
200
+ ## 第 1 题
201
+ 设函数 $f(x)=x^2$,求 $f'(1)$。
202
+
203
+ A. 1
204
+ B. 2
205
+ C. 3
206
+ D. 4
207
+
208
+ 答案:B
209
+ 解析:由 $f'(x)=2x$,得 $f'(1)=2$。
210
+ 知识点:导数计算
211
+ 难度:2
212
+
213
+ ---
214
+
215
+ ## 第 2 题
216
+ 证明闭区间上连续函数的最值性质。
217
+
218
+ 答案:闭区间上的连续函数能取得最大值和最小值。
219
+ 解析:结合闭区间紧致性与连续函数的性质说明结论。
117
220
  ```
118
221
 
119
- 打了 tag 之后,别人就能用 `github:Scienmicroit/Daily-Question#v<版本>` 锁定版本;
120
- 发布 npm 之后,`daily-question@<版本>` 也可以直接装。
222
+ 导入答案标记为「待核验」,缺少答案的题目标记为「缺少答案」。导入成功只表示解析完成,不代表参考答案已经验证。
223
+
224
+ ## 公式、代码与日期
121
225
 
122
- ## 首次使用
226
+ 题干、选项、答案、解析和追问支持 Markdown,包括代码围栏、表格、图片、行内公式和独立公式。MathJax 3.2.2 使用 SVG 输出,随包提供;题目列表只预览前两行,完整内容进入详情查看。
123
227
 
124
- 1. 点左侧栏图标进入,先「科目管理」勾选要考的科目(例如数学一、英语一)。
125
- 2. 在右上角年份下拉里选择你参加的考研年份,倒计时与目标日期随之更新。
126
- 3. 「今日题目」会为该科目出今天的题;首次在线出题需要几十秒(生成 + 独立校验)。
127
- 4. 想用题库:科目管理里把该科目来源切成「题库出题」或「自动」,再到「题库管理」导入 `.md` / `.txt` / 文本型 PDF,先在预览里核对识别结果,再确认入库。
228
+ 公式基准字号固定,长公式可横向滚动,保留上下标和分式的正常排版比例。代码块保留缩进与换行。界面包含轻量动效,并尊重系统的「减少动态效果」设置。
229
+
230
+ 考研年份使用入学年份口径,例如 **2028 考研对应 2027 年末的初试**。日期区分官方公布、估算和尚未核实;估算日期标注「约」。联网核验只采信教育部、研招网与教育考试院的指定官方域名。
231
+
232
+ 倒计时第一行显示剩余总天数,中间一行按 **365 天为一年、30 天为一个月**拆分,并省略数值为零的单位,例如「1年23天」「3个月」「2年」;剩余不超过 30 天时隐藏中间一行。这一拆分是显示换算,不是自然月的日历差。
128
233
 
129
234
  ## 数据与隐私
130
235
 
131
- - 学习数据保存在本机:`~/.dsh/daily-question/data.json`(可用环境变量 `DSH_DAILY_QUESTION_DATA_DIR` 改路径)。单文件 JSON,原子写 + 串行队列,写失败会把错误抛给界面而不是静默丢弃。
132
- - 在线出题与追问只走宿主自己配置的模型服务,不额外接入第三方;联网核验考试日期只访问教育部 / 教育考试院 / 研招网域名。
133
- - 导入的题库文件只在本机解析,不上传。
236
+ 追问上下文区分已核验、未核验和缺失的参考答案。模型生成或修订的答案即使通过独立校验,也不标为官方认证;导入的未核验答案会提示可能有误。
134
237
 
135
- ## 目录结构
238
+ 学习数据使用本机单文件 JSON 保存。默认路径按以下顺序解析:
136
239
 
137
- ```
138
- index.js 宿主入口(注册接口、加载数据文件)
139
- client.js 浏览器端:侧栏入口 + 主面板 + Markdown/LaTeX 渲染 + 追问侧栏
140
- lib/service.js 业务逻辑(设置、出题、作答、收藏、错题本、修订、追问、题库)
141
- lib/store.js JSON 持久化(原子写、事务式更新)
142
- lib/generate.js 在线出题 + 独立答案校验 + 答案修订
143
- lib/tutor.js 追问回复(严格限定当前题目)
144
- lib/bank.js 题库解析(题干 / 选项 / 答案 / 解析 / 知识点 / 难度)
145
- lib/pdf.js 纯 JS 的 PDF 文本提取(文本型 PDF,含 ToUnicode CMap)
146
- lib/exam-dates.js 考研日期口径、估算规则、倒计时、官方日期联网核验
147
- lib/routes.js 同源 HTTP 接口 + 公式引擎静态资源
148
- lib/subjects.js 科目目录、题型、大纲提示
149
- lib/llm-json.js 模型调用与 JSON 容错解析
150
- vendor/mathjax/ MathJax 3 单文件 bundle 及其许可(Apache-2.0)
151
- test/ 离线单元/集成测试(不需要模型与网络)
240
+ 1. 设置了 `DSH_DAILY_QUESTION_DATA_DIR`:直接使用该目录。
241
+ 2. 否则设置了 `DSH_PROFILE_DIR`:使用其下的 `daily-question/`。
242
+ 3. 否则使用 `DSH_HOME/daily-question/`;未设置 `DSH_HOME` 时为用户主目录下的 `.dsh/daily-question/`。
243
+
244
+ 数据文件名为 `data.json`。单个服务实例内串行更新,通过临时文件写入后替换正式文件;保存失败不会把未保存的修改提交到内存状态。不要让多个宿主进程同时写入同一份数据文件。升级前建议备份数据目录。
245
+
246
+ 题库文件在本机解析;在线出题、答案修订和追问使用宿主配置的模型服务。题目或题库内容参与修订、追问时,相关资料会发送给该模型服务。Markdown 中的远程图片和用户主动打开的链接可能访问外部网站。公式渲染本身无需联网。
247
+
248
+ ## 开发与验证
249
+
250
+ 本项目使用原生 JavaScript ES Modules,没有独立的前端构建步骤。
251
+
252
+ ```bash
253
+ npm test
254
+ node --check client.js
152
255
  ```
153
256
 
154
- ## 开发与测试
257
+ 离线测试覆盖日期换算、题库解析、持久化、业务状态、并发作答、批量管理、科目草稿和渲染组件。不需要真实模型或联网;这些测试不能替代实际 DSH 宿主中的安装与模型联调。
258
+
259
+ 本机已安装并配置 DSH 时,可手动执行会消耗真实 API 调用的验收:
155
260
 
156
261
  ```bash
157
- node test/check.mjs # 日期口径、倒计时、题库解析、存储(32 项)
158
- node test/service-check.mjs # 业务状态机:出题/作答/错题/收藏/秒重/题库删除(32 项)
159
- node test/render-check.mjs # Markdown + LaTeX 解析(28 项)
160
- node test/pdf-check.mjs <某个文本型 PDF 的路径> # PDF 提取与题库识别(可选)
262
+ npm run test:live
263
+ # 408:按自定义科目选择408参考考试的路径验收
264
+ npm run test:live -- cs408
265
+ # 自主检索:不给模型预置408来源,单独验收发现与审查流程
266
+ npm run test:live -- auto408
161
267
  ```
162
268
 
163
- 这些测试不联网、不调用模型、不需要 DSH,直接在 Node 20+ 跑。
269
+ 脚本读取本机 DSH web profile 的默认模型与凭据,使用已安装的 DSH 检索、读取、附件和模型适配器。它检查真实 PDF、数学一命题、盲解、范围与难度评审,并注入错误候选答案验证主裁是否采纳正确的盲解方。调用记录、题目与报告写入打印出的独立临时目录,不使用正式学习数据;不会自动发布或打包。非默认目录可设置 `DSH_HOME`、`DQ_DSH_PROFILE`。通过脚本验收也不代表已验证所有科目或安装后的界面。
164
270
 
165
- ## 已知限制
271
+ 可以额外使用自己的文本型 PDF 检查提取效果:
166
272
 
167
- - **PDF 只支持文本型**:纯 JS 实现,不 OCR;扫描件、图片型 PDF 与带权限加密的 PDF 会明确拒绝并提示改用 Markdown,不会伪装成导入成功。
168
- - **公式用的是 MathJax 3**:不支持的命令会显示成红色错误标记(MathJax 的标准行为),不会再退化成原文;TikZ 之类的绘图命令不在支持范围。
169
- - **导入题库的答案一律标「待核验」**,系统不会自动核验;只有「修订」流程会做独立校验。
170
- - 主观题不做自动判分(按考试要求由你自己判定)。
171
- - 暂未实现按知识点/难度筛选、学习统计与连续天数、题目质量反馈。
273
+ ```bash
274
+ node test/pdf-check.mjs <PDF文件路径>
275
+ ```
172
276
 
173
- ## 公式引擎许可
277
+ 主要文件:
278
+
279
+ | 路径 | 用途 |
280
+ | --- | --- |
281
+ | `index.js` | 宿主入口与服务注册 |
282
+ | `client.js` | 页面、交互、Markdown 与公式渲染 |
283
+ | `lib/service.js` | 出题、作答、列表、题库与追问业务 |
284
+ | `lib/store.js` | 数据目录与原子持久化 |
285
+ | `lib/generate.js` | 模型出题、盲解、比对、主裁和修订 |
286
+ | `lib/research.js` | 自定义考试自主搜索、身份核验、独立资料审查与缓存 |
287
+ | `lib/references.js` | 大纲与真题检索、来源限制、独立范围与难度评审 |
288
+ | `lib/reference-reader.js` | 受限资料下载、正文定位、PDF 文本层与图片真题转录 |
289
+ | `lib/reference-sources.js` | 已核对的大纲转录版本、摘要及稳定真题来源 |
290
+ | `lib/bank.js`、`lib/pdf.js` | 题库解析与 PDF 文本提取 |
291
+ | `lib/exam-dates.js` | 日期来源、核验和倒计时 |
292
+ | `lib/routes.js` | 同源接口与 MathJax 静态资源 |
293
+ | `test/` | 离线回归检查、手动联网验收 |
294
+ | `vendor/mathjax/` | 随包公式引擎及许可 |
295
+
296
+ ## 维护者发布
297
+
298
+ 修改版本号后先验证,再生成安装包:
174
299
 
175
- `vendor/mathjax/tex-svg.js` 是 MathJax 3.2.2 的官方单文件 bundle(TeX 输入 + SVG 输出,含全部 TeX 扩展),版权归 MathJax Consortium,按 **Apache License 2.0** 发布,允许自由使用与再分发。许可原文见 `vendor/mathjax/LICENSE`。
300
+ ```bash
301
+ npm test
302
+ npm pack --pack-destination dist
303
+ ```
304
+
305
+ 2.1.0 对应产物为 `dist/daily-question-2.1.0.tgz`。建议将确认过的安装包同时作为 GitHub Release 附件,并直接发布同一份文件到 npm:
306
+
307
+ ```bash
308
+ npm login --registry=https://registry.npmjs.org/
309
+ npm whoami --registry=https://registry.npmjs.org/
310
+ npm publish ./dist/daily-question-2.1.0.tgz --access public --registry=https://registry.npmjs.org/
311
+ npm view daily-question@2.1.0 version --registry=https://registry.npmjs.org/
312
+ ```
176
313
 
177
- SVG 输出自带字形路径,所以不再需要单独分发数学字体文件(1.0.x 里的 Latin Modern Math OTF 已移除)。
314
+ 按 npm 提示完成浏览器登录与发布验证。发布账号需要拥有 `daily-question` 包的发布权限;若该版本已经发布,不可用相同版本号覆盖。GitHub 标签、npm 版本和安装包版本应保持一致。
178
315
 
179
- ## License
316
+ ## 许可与反馈
180
317
 
181
- 本插件代码以 **MIT** 许可发布,见仓库根目录的 [LICENSE](LICENSE)。
318
+ 插件代码采用 [MIT License](LICENSE)。随包 MathJax 采用 Apache License 2.0,详见 [vendor/mathjax/LICENSE](vendor/mathjax/LICENSE)。
182
319
 
183
- `vendor/mathjax/` 不适用 MIT:MathJax 按 Apache License 2.0 发布,许可原文见 `vendor/mathjax/LICENSE`。
320
+ 问题反馈与建议:[GitHub Issues](https://github.com/Scienmicroit/Daily-Question/issues)。