daily-question 1.0.6 → 2.0.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/README.md CHANGED
@@ -1,181 +1,242 @@
1
- # 考研每日一题 · DSH 插件
1
+ # 考研每日一题
2
2
 
3
- 给 [DeepSeek Harness](https://github.com/deepseek-ai) 用的每日一题插件:左侧栏一个入口,每个启用科目每天一道题,答案先经过**独立视角校验**才发布,配倒计时、错题本、收藏和按题隔离的追问侧栏。
3
+ 面向 **DeepSeek Harness(DSH)** 的考研练习插件。按科目每天分配一道题,把作答、答案解析、收藏、错题整理和针对本题的追问放在同一个页面中。
4
4
 
5
- 面向中国大陆硕士研究生招生考试(考研)。内置科目只有这几个:思想政治理论(单项选择、多项选择)、数学一 / 数学二 / 数学三(单项选择、填空、解答)、英语一 / 英语二(英语知识运用(完形填空)、阅读理解、翻译)。其他科目可以自己添加为自定义科目。
5
+ 当前版本:**2.0.0**。本插件需要 DSH 宿主,不是独立运行的网站或命令行应用。
6
6
 
7
- ## 功能
7
+ ## 2.0.0 更新
8
8
 
9
- **每日出题**
10
- - 每个启用科目每天一道固定题目,同一天反复进入、刷新、切换科目都返回同一道;跨自然日自动换题。
11
- - 两道题目来源:**在线出题**(宿主默认模型生成)与**题库出题**(导入 Markdown / 文本型 PDF),可按科目选择,也可设为“自动(优先题库)”。
12
- - 出题与校验是两个独立步骤:先出题,再由另一个视角**先自己解题再看答案**,检查题干条件、可解性、答案唯一性、解析严谨性和判分规则。校验不通过会带反馈重出一次,仍不通过就**不发布**并如实报错。
9
+ - 采用蓝色主题,正确与错误分别使用绿色、红色;统一科目管理、题库管理和确认弹窗的样式。
10
+ - 科目管理支持草稿:勾选科目、切换来源、添加自定义科目和题型后,点击右下角「完成」统一保存;取消或关闭不生效。
11
+ - 全部、收藏、错题本支持批量收藏、取消收藏、加入或移出错题本、删除,以及全选和全不选。
12
+ - 题目卡片最多预览两行,支持公式和代码;截断时在最后一行实际可见内容末端渐隐,不添加省略号。
13
+ - 点击整张卡片进入详情;独立的方形「‹」按钮返回原列表与滚动位置。
14
+ - 栏目栏固定在内容区左上方;重复点击当前栏目不重复请求。
15
+ - 追问默认收起,查看本次答案后才显示入口;宽屏支持拖动分隔线调整比例,收起后题目填满可用宽度。
16
+ - Enter 发送追问,Shift+Enter 换行;中文输入法确认候选词不会误发送。
17
+ - 修复保存失败后内存状态不回退、并发作答重复计数、自定义题型在线生成失效、题库过早重复出题,以及考试结束前提前切换年份等问题。
13
18
 
14
- **答题**
15
- - 选择题:选 → 提交 → 判定 → 公布标准答案与完整解析。
16
- - 主观题:只提供「作答完毕」与「未能作答」;「作答完毕」不会自动算答对,答案区域下方再由你自己判定「作答正确 / 作答错误」,未判定时是「待判定」,不进错题本。
17
- - 每次「看过标准答案」才算一次作答,打开题目不算;重复提交同一 `attemptId`、刷新页面都不会重复计数,主动重新作答才会 +1。
18
- - 作答历史逐条保留(时间、结果、选择),并区分「历史上答错过」与「当前已掌握」。
19
-
20
- **四类列表**(每个科目互相隔离)
21
- 今日题目 / 全部 / 收藏 / 错题本。四者共享同一题目 ID,收藏或答错后立即同步;删除科目或删除题库都不会删掉历史题目、作答、收藏与追问。
22
-
23
- **答案详解固定版本**
24
- 首次生成并通过校验后即固定(版本 ID + 首次展示时间),之后无论刷新、切科目、从其他列表进入都复用同一版本,不会重新生成;只有点「修订答案详解」才会产出候选新版本,候选必须重新通过独立校验、再由你确认替换,旧版本进版本历史。
25
-
26
- **追问侧栏**
27
- 线程按题目 ID 隔离,只喂当前题目的题干、选项、正式答案与该线程历史;生成失败会保留原文并可重试,清空只影响当前题目。
28
-
29
- **考研日期**
30
- 区分报名年份与实际考试日期:2028 考研 = 2027 年 12 月初试。已公布的用官方日期(不带「约」);未公布的以上一年同一考试的官方日期推后一年估算,并在三行倒计时里都标「约」;查不到依据就明确写「尚未核实」,不编日期。页面上的「核验日期」会联网只采信 `moe.gov.cn` / `chsi.com.cn` / `neea.edu.cn`。
19
+ ## 安装
31
20
 
32
- **渲染**
33
- 题干、选项、答案、解析均支持 Markdown:标题、列表、引用、表格、代码块(保留缩进与换行)、图片、行内与独立 LaTeX 公式。公式字体为 **Latin Modern Math**(随包附带)。排版细节按 LaTeX 数学模式处理:变量使用真正的数学斜体码位、数字与 `\sin` 等函数名保持直立、减号用 U+2212(不是连字符)、导数撇号用 U+2032 起的 prime(`'`→′、`''`→″,中文输入法的 `’` 也会归一);`\text{…}` 里保持普通文本,连字符不会被当成减号。无法渲染的内容会以原文 + 提示保留,不会静默丢弃。
21
+ ### 环境要求
34
22
 
35
- ## 安装
23
+ - 已安装并能运行的 DSH。
24
+ - Node.js **20.3.0 或更新版本**(由运行宿主的环境提供)。
25
+ - 在线出题、答案修订和追问需要宿主配置可用的默认模型。
26
+ - 公式引擎随包提供,无需单独下载字体或公式依赖。
36
27
 
37
- 需要可用的 DeepSeek Harness,以及一个能用的默认模型(在线出题要用)。
28
+ ### 安装本地安装包
38
29
 
39
- > 装插件需要 git 或 npm 其中一条通路。**没有 git 的机器**请用下面第 1 种(仓库自带的
40
- > `dist/daily-question-1.0.6.tgz`)或发到 npm 之后的包名,这两种都不调用 git。
30
+ 仓库的 `dist/` 目录提供:
41
31
 
42
- ### 1. 用仓库自带的 tgz(不需要 git、不需要联网装依赖)
32
+ ```text
33
+ dist/daily-question-2.0.0.tgz
34
+ ```
43
35
 
44
- 仓库里带了一个已打包好的插件:`dist/daily-question-1.0.6.tgz`。
36
+ 在 DSH Desktop 的插件安装入口填写该文件的绝对路径。命令行使用与你运行宿主一致的 profile,例如:
45
37
 
46
38
  ```bash
47
- # 下载仓库后(ZIP 或 git clone 都行),用本地文件安装
48
- dsh plugin --profile web add ./dist/daily-question-1.0.6.tgz
39
+ dsh plugin --profile web add ./dist/daily-question-2.0.0.tgz
49
40
  ```
50
41
 
51
- DSH Desktop 上:插件页的安装输入框填**这个 tgz 的绝对路径**,或把路径交给 Agent 用
52
- `plugin_manager install_bundle` 安装。
42
+ Desktop 管理的 `desktop` profile 请通过 Desktop 插件界面操作。安装完成后重启相应宿主或刷新客户端,左侧栏出现「考研每日一题」入口。
53
43
 
54
- ### 2. DSH Desktop(图形界面)
44
+ ### 从 npm 安装
55
45
 
56
- 插件面板 → 添加 → 填 npm 包名 `daily-question`(发布后可用),或本地目录 / tgz 路径。
57
- 装好后**刷新一次页面**,左侧栏会出现「考研每日一题」的图标(在「插件」「日程」旁边)。
46
+ **维护者发布 2.0.0 后**,可以安装指定版本:
58
47
 
59
- ### 3. 命令行(`dsh web` 这类 CLI 用法)
48
+ ```bash
49
+ dsh plugin --profile web add daily-question@2.0.0
50
+ ```
60
51
 
61
- profile 名就是你启动 DSH 时用的那个:跑 `dsh web` 就是 `--profile web`,跑 `dsh --profile headless …` 就是 `--profile headless`。
52
+ DSH Desktop 可在插件安装入口填写 `daily-question@2.0.0`。命令行安装还需满足宿主对包管理器的要求;若提示缺少 pnpm,先安装或启用 pnpm。
62
53
 
63
- `dsh plugin` 会把参数原样转发给 pnpm,所以本机需要先有 pnpm(`corepack enable pnpm`,或 `npm i -g pnpm`)。
54
+ ### 从 GitHub 或源码安装
64
55
 
65
- **从 npm 装**(最省事,不需要 git):
56
+ 发布 `v2.0.0` 标签后,可锁定该标签安装;此方式需要 Git:
66
57
 
67
58
  ```bash
68
- dsh plugin --profile web add daily-question@1.0.6
69
- dsh plugin --profile web add daily-question # 跟随最新版
59
+ dsh plugin --profile web add github:Scienmicroit/Daily-Question#v2.0.0
70
60
  ```
71
61
 
72
- **从 GitHub 装**(需要本机有 git):
62
+ 本地开发也可以直接安装源码目录:
73
63
 
74
64
  ```bash
75
- dsh plugin --profile web add github:Scienmicroit/Daily-Question#v1.0.6
76
- dsh plugin --profile web add github:Scienmicroit/Daily-Question # 不写 #tag 取默认分支最新提交
65
+ dsh plugin --profile web add ./Daily-Question
77
66
  ```
78
67
 
79
- **从本地目录装**:
68
+ 升级时重新安装目标版本即可。卸载命令为:
80
69
 
81
70
  ```bash
82
- git clone https://github.com/Scienmicroit/Daily-Question
83
- dsh plugin --profile web add ./Daily-Question
71
+ dsh plugin --profile web remove daily-question
84
72
  ```
85
73
 
86
- 装完这条命令会把包里 `dsh.bundle.patch` 声明的那一行自动叠加进 profile(`package.json` 的 `dsh.profile.bundles` 里会出现 `daily-question`),下次启动该 profile 即生效。
74
+ 卸载插件不会自动删除保存在数据目录中的学习记录。
87
75
 
88
- > **注意**:DSH Desktop 内置的 `desktop` profile 由应用独占管理,命令行会拒绝(`profile "desktop" is managed exclusively by the Electron application`),请走图形界面方式。
76
+ ## 开始练习
89
77
 
90
- ### 4. 让 Agent 装
78
+ 1. 打开「科目管理」,选择需要练习的科目并设置出题来源,点击「完成」。关闭或取消弹窗会放弃尚未保存的修改。
79
+ 2. 选择目标考研年份,核对倒计时与日期来源。
80
+ 3. 在「今日题目」开始作答。在线出题包括生成和独立校验,首次加载可能需要几十秒。
81
+ 4. 需要题库时,在「题库管理」导入文件,检查预览和解析提示,再确认入库。
82
+ 5. 查看答案后,可收藏题目、整理错题,或打开「本题追问」继续讨论。
91
83
 
92
- 已经装好 DSH 的话,把下面任一 target 交给 Agent,让它调用 `plugin_manager` 的 `install_bundle`:
84
+ 内置科目包括思想政治理论、英语一、英语二、数学一、数学二、数学三。自定义科目支持内置题型和自行命名的题型。
93
85
 
94
- - 本地目录或 tgz 的绝对路径(不需要 git)
95
- - `daily-question@1.0.6`(发布到 npm 之后)
96
- - `github:Scienmicroit/Daily-Question#v1.0.6`(本机有 git 时)
86
+ ## 出题与作答规则
97
87
 
98
- ### 升级与卸载
88
+ ### 每日分配
99
89
 
100
- ```bash
101
- dsh plugin --profile web add daily-question@latest # 重新装一次即为升级
102
- dsh plugin --profile web remove daily-question # 卸载
103
- ```
90
+ 每个启用科目每天分配一道固定题目。再次进入同一科目的今日题目会复用该日的分配;新的自然日按宿主本地日期计算。
104
91
 
105
- 卸载不会删除学习数据(`~/.dsh/daily-question/data.json`)。
92
+ | 来源 | 行为 |
93
+ | --- | --- |
94
+ | 在线出题 | 使用宿主默认模型生成,再进行独立视角校验 |
95
+ | 题库出题 | 从已导入且符合科目题型的题库中抽题 |
96
+ | 自动 | 优先题库,没有可用题目时尝试在线出题 |
106
97
 
107
- ### 发新版本(维护者)
98
+ 题库优先使用未出过的题,新题用完后选择最久未出的题;只有少量可用题目时允许重复。删除已出题目不等于删除原题库,未来仍可能重新抽到该题。
108
99
 
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
100
+ 在线出题与校验分两次模型调用完成。校验不通过时会带反馈重出,最多尝试两轮;仍不通过则不发布。独立校验仍由模型执行,不等同于官方审定。
101
+
102
+ ### 判分与历史
103
+
104
+ - 选择题提交后按参考选项判分,并展示答案与解析。
105
+ - 主观题可选择「作答完毕」或「未能作答」。前者先记为待判定,查看答案后由用户判断正确或错误;后者记为错误。
106
+ - 打开题目不增加作答次数,提交并查看答案才记一次;同一作答 ID 的重复请求不会重复计数。
107
+ - 手动加入错题本不会生成一条虚假的错误作答记录;移出错题本也不会删除历史作答。
108
+
109
+ 从列表打开历史题时,默认进入新一轮作答并隐藏答案。属于本科目今日题且已经查看答案时,默认保留已完成状态。主动点击「重新作答」会隐藏答案、解析和追问入口,直到本轮再次查看答案;同一页面会话内切换栏目再返回,也会保留这轮重新作答状态。
110
+
111
+ ### 答案版本与追问
112
+
113
+ 正式答案与解析保存为固定版本,重新打开不会再次生成。用户请求修订时,候选答案必须通过校验并经用户确认,才会替换正式版本;旧版保留在版本历史中。
114
+
115
+ 追问按题目 ID 隔离,使用本题资料和该线程近期历史。生成失败会保留输入并支持重试;清空对话只影响当前题目。查看答案后才显示追问按钮,默认不自动展开面板。
116
+
117
+ 宽屏下可拖动题目和追问之间的分隔线,或聚焦分隔线后用方向键调整;窄屏使用侧边浮层,不提供比例拖动。发送方式为 Enter,换行为 Shift+Enter。
118
+
119
+ ## 列表与批量管理
120
+
121
+ 今日题目、全部、收藏和错题本使用同一题目记录,各科目分别管理。
122
+
123
+ 在「全部 / 收藏 / 错题本」点击「批量管理」后,可以逐题选择、全选或全不选,并执行:
124
+
125
+ - 收藏、取消收藏。
126
+ - 加入错题本、移出错题本。
127
+ - 永久删除所选题目。
128
+
129
+ 删除题目会同时清理该题的作答、追问和今日分配引用。包含收藏或错题时,会在普通删除确认之后再要求一次确认。删除不可恢复。
114
130
 
115
- # 2. 发布到 npm(可选,但装了 npm 的用户最省事)
116
- npm publish # package.json 里 private 已是 false
131
+ 停用科目或删除题库只会停止相应的后续分配,不会删除已出题目及其作答、收藏和追问;需要永久删除题目时使用列表的删除功能。
132
+
133
+ ## 导入题库
134
+
135
+ 支持 `.md`、`.txt` 和文本型 `.pdf`。扫描件或图片型 PDF 不提供 OCR;提取效果受 PDF 的字体、编码与排版影响,导入前必须核对预览。
136
+
137
+ 建议按下面的结构组织 Markdown,以题号或分隔线区分题目:
138
+
139
+ ```markdown
140
+ ## 第 1 题
141
+ 设函数 $f(x)=x^2$,求 $f'(1)$。
142
+
143
+ A. 1
144
+ B. 2
145
+ C. 3
146
+ D. 4
147
+
148
+ 答案:B
149
+ 解析:由 $f'(x)=2x$,得 $f'(1)=2$。
150
+ 知识点:导数计算
151
+ 难度:2
152
+
153
+ ---
154
+
155
+ ## 第 2 题
156
+ 证明闭区间上连续函数的最值性质。
157
+
158
+ 答案:闭区间上的连续函数能取得最大值和最小值。
159
+ 解析:结合闭区间紧致性与连续函数的性质说明结论。
117
160
  ```
118
161
 
119
- 打了 tag 之后,别人就能用 `github:Scienmicroit/Daily-Question#v<版本>` 锁定版本;
120
- 发布 npm 之后,`daily-question@<版本>` 也可以直接装。
162
+ 导入答案标记为「待核验」,缺少答案的题目标记为「缺少答案」。导入成功只表示解析完成,不代表参考答案已经验证。
163
+
164
+ ## 公式、代码与日期
121
165
 
122
- ## 首次使用
166
+ 题干、选项、答案、解析和追问支持 Markdown,包括代码围栏、表格、图片、行内公式和独立公式。MathJax 3.2.2 使用 SVG 输出,随包提供;题目列表只预览前两行,完整内容进入详情查看。
123
167
 
124
- 1. 点左侧栏图标进入,先「科目管理」勾选要考的科目(例如数学一、英语一)。
125
- 2. 在右上角年份下拉里选择你参加的考研年份,倒计时与目标日期随之更新。
126
- 3. 「今日题目」会为该科目出今天的题;首次在线出题需要几十秒(生成 + 独立校验)。
127
- 4. 想用题库:科目管理里把该科目来源切成「题库出题」或「自动」,再到「题库管理」导入 `.md` / `.txt` / 文本型 PDF,先在预览里核对识别结果,再确认入库。
168
+ 公式基准字号固定,长公式可横向滚动,保留上下标和分式的正常排版比例。代码块保留缩进与换行。界面包含轻量动效,并尊重系统的「减少动态效果」设置。
169
+
170
+ 考研年份使用入学年份口径,例如 **2028 考研对应 2027 年末的初试**。日期区分官方公布、估算和尚未核实;估算日期标注「约」。联网核验只采信教育部、研招网与教育考试院的指定官方域名。
171
+
172
+ 倒计时第一行显示剩余总天数,中间一行按 **365 天为一年、30 天为一个月**拆分,并省略数值为零的单位,例如「1年23天」「3个月」「2年」;剩余不超过 30 天时隐藏中间一行。这一拆分是显示换算,不是自然月的日历差。
128
173
 
129
174
  ## 数据与隐私
130
175
 
131
- - 学习数据保存在本机:`~/.dsh/daily-question/data.json`(可用环境变量 `DSH_DAILY_QUESTION_DATA_DIR` 改路径)。单文件 JSON,原子写 + 串行队列,写失败会把错误抛给界面而不是静默丢弃。
132
- - 在线出题与追问只走宿主自己配置的模型服务,不额外接入第三方;联网核验考试日期只访问教育部 / 教育考试院 / 研招网域名。
133
- - 导入的题库文件只在本机解析,不上传。
176
+ 学习数据使用本机单文件 JSON 保存。默认路径按以下顺序解析:
134
177
 
135
- ## 目录结构
178
+ 1. 设置了 `DSH_DAILY_QUESTION_DATA_DIR`:直接使用该目录。
179
+ 2. 否则设置了 `DSH_PROFILE_DIR`:使用其下的 `daily-question/`。
180
+ 3. 否则使用 `DSH_HOME/daily-question/`;未设置 `DSH_HOME` 时为用户主目录下的 `.dsh/daily-question/`。
136
181
 
182
+ 数据文件名为 `data.json`。单个服务实例内串行更新,通过临时文件写入后替换正式文件;保存失败不会把未保存的修改提交到内存状态。不要让多个宿主进程同时写入同一份数据文件。升级前建议备份数据目录。
183
+
184
+ 题库文件在本机解析;在线出题、答案修订和追问使用宿主配置的模型服务。题目或题库内容参与修订、追问时,相关资料会发送给该模型服务。Markdown 中的远程图片和用户主动打开的链接可能访问外部网站。公式渲染本身无需联网。
185
+
186
+ ## 开发与验证
187
+
188
+ 本项目使用原生 JavaScript ES Modules,没有独立的前端构建步骤。
189
+
190
+ ```bash
191
+ npm test
192
+ node --check client.js
137
193
  ```
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
- assets/ Latin Modern Math 字体及其许可文件
151
- test/ 离线单元/集成测试(不需要模型与网络)
152
- ```
153
194
 
154
- ## 开发与测试
195
+ 离线测试覆盖日期换算、题库解析、持久化、业务状态、并发作答、批量管理、科目草稿和渲染组件。不需要真实模型或联网;这些测试不能替代实际 DSH 宿主中的安装与模型联调。
196
+
197
+ 可以额外使用自己的文本型 PDF 检查提取效果:
155
198
 
156
199
  ```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 提取与题库识别(可选)
200
+ node test/pdf-check.mjs <PDF文件路径>
161
201
  ```
162
202
 
163
- 这些测试不联网、不调用模型、不需要 DSH,直接在 Node 20+ 跑。
203
+ 主要文件:
204
+
205
+ | 路径 | 用途 |
206
+ | --- | --- |
207
+ | `index.js` | 宿主入口与服务注册 |
208
+ | `client.js` | 页面、交互、Markdown 与公式渲染 |
209
+ | `lib/service.js` | 出题、作答、列表、题库与追问业务 |
210
+ | `lib/store.js` | 数据目录与原子持久化 |
211
+ | `lib/generate.js` | 模型出题、答案校验和修订 |
212
+ | `lib/bank.js`、`lib/pdf.js` | 题库解析与 PDF 文本提取 |
213
+ | `lib/exam-dates.js` | 日期来源、核验和倒计时 |
214
+ | `lib/routes.js` | 同源接口与 MathJax 静态资源 |
215
+ | `test/` | 离线回归检查 |
216
+ | `vendor/mathjax/` | 随包公式引擎及许可 |
164
217
 
165
- ## 已知限制
218
+ ## 维护者发布
166
219
 
167
- - **PDF 只支持文本型**:纯 JS 实现,不 OCR;扫描件、图片型 PDF 与带权限加密的 PDF 会明确拒绝并提示改用 Markdown,不会伪装成导入成功。
168
- - **公式渲染是自写的 LaTeX 子集**:覆盖分式、根式、上下标、求和/积分/极限、矩阵、分段函数、希腊字母等常见结构;生僻宏会以原文保留并高亮提示。
169
- - **导入题库的答案一律标「待核验」**,系统不会自动核验;只有「修订」流程会做独立校验。
170
- - 主观题不做自动判分(按考试要求由你自己判定)。
171
- - 暂未实现按知识点/难度筛选、学习统计与连续天数、题目质量反馈。
220
+ 修改版本号后先验证,再生成安装包:
172
221
 
173
- ## 字体许可
222
+ ```bash
223
+ npm test
224
+ npm pack --pack-destination dist
225
+ ```
226
+
227
+ 2.0.0 对应产物为 `dist/daily-question-2.0.0.tgz`。建议将确认过的安装包同时作为 GitHub Release 附件,并直接发布同一份文件到 npm:
228
+
229
+ ```bash
230
+ npm login --registry=https://registry.npmjs.org/
231
+ npm whoami --registry=https://registry.npmjs.org/
232
+ npm publish ./dist/daily-question-2.0.0.tgz --access public --registry=https://registry.npmjs.org/
233
+ npm view daily-question@2.0.0 version --registry=https://registry.npmjs.org/
234
+ ```
174
235
 
175
- `assets/latinmodern-math.otf` 是 Latin Modern Math 1.959,版权归 B. Jackowski、P. Strzelczyk、P. Pianowski(代表 TeX Users Groups),按 **GUST Font License**(LPPL 的一个实例)发布,允许自由使用与再分发。许可原文见 `assets/LICENSE-latin-modern-math.txt`。
236
+ 按 npm 提示完成浏览器登录与发布验证。发布账号需要拥有 `daily-question` 包的发布权限;若该版本已经发布,不可用相同版本号覆盖。GitHub 标签、npm 版本和安装包版本应保持一致。
176
237
 
177
- ## License
238
+ ## 许可与反馈
178
239
 
179
- 本插件代码以 **MIT** 许可发布,见仓库根目录的 [LICENSE](LICENSE)。
240
+ 插件代码采用 [MIT License](LICENSE)。随包 MathJax 采用 Apache License 2.0,详见 [vendor/mathjax/LICENSE](vendor/mathjax/LICENSE)。
180
241
 
181
- `assets/latinmodern-math.otf` 不适用 MIT:它按 GUST Font License(LPPL 的一个实例)发布,许可原文见 `assets/LICENSE-latin-modern-math.txt`。
242
+ 问题反馈与建议:[GitHub Issues](https://github.com/Scienmicroit/Daily-Question/issues)。