dsh-aha-tutor 1.0.0 → 1.2.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/AGENTS.md +5 -3
- package/CHANGELOG.md +28 -0
- package/README.en.md +6 -5
- package/README.md +7 -6
- package/THIRD_PARTY_NOTICES.md +9 -0
- package/assets/fonts/OFL-Caveat.txt +93 -0
- package/assets/fonts/OFL-LXGWWenKaiGB.txt +94 -0
- package/assets/fonts/caveat-latin-d0b7b931.woff2 +0 -0
- package/assets/fonts/wenkai-gb-0-88f1a875.woff2 +0 -0
- package/assets/fonts/wenkai-gb-1-78a38e72.woff2 +0 -0
- package/assets/fonts/wenkai-gb-2-2a649892.woff2 +0 -0
- package/assets/fonts/wenkai-gb-3-6949c050.woff2 +0 -0
- package/assets/fonts/wenkai-gb-4-375dc3b3.woff2 +0 -0
- package/assets/fonts/wenkai-gb-5-d0359bbc.woff2 +0 -0
- package/assets/fonts/wenkai-gb-6-a238b41c.woff2 +0 -0
- package/docs/guide.zh-CN.md +16 -6
- package/lib/agent.js +1 -1
- package/lib/client.js +73 -32
- package/lib/index.js +611 -118
- package/lib/{runtime-CiA2I7-X.js → runtime-ywaTyu56.js} +96 -9
- package/package.json +2 -1
- package/samples/bayes-thinking.aha-course.json +51 -51
- package/samples/harmonic-motion.aha-course.json +56 -56
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": "aha-tutor.coursepack",
|
|
3
3
|
"version": 1,
|
|
4
|
-
"exportedAt": "2026-10-
|
|
4
|
+
"exportedAt": "2026-10-19T05:41:04.603Z",
|
|
5
5
|
"app": {
|
|
6
6
|
"name": "dsh-aha-tutor",
|
|
7
7
|
"version": "sample"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"goal": "适合高中到大一的学习者。从“为什么会来回振动”出发,建立回复力、周期、相位的直觉,再推出单摆公式,最后用自己测的数据验证它。",
|
|
17
17
|
"units": [
|
|
18
18
|
{
|
|
19
|
-
"id": "
|
|
19
|
+
"id": "unt_mvettal5m4joeu",
|
|
20
20
|
"title": "振动从哪里来",
|
|
21
21
|
"summary": "回复力让物体来回运动;一个旋转的圆告诉我们它的样子。",
|
|
22
22
|
"objectives": [
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
],
|
|
26
26
|
"lectures": [
|
|
27
27
|
{
|
|
28
|
-
"id": "
|
|
28
|
+
"id": "lec_mvettal5s3ucmy",
|
|
29
29
|
"title": "回复力",
|
|
30
30
|
"summary": "",
|
|
31
31
|
"lessons": [
|
|
32
32
|
{
|
|
33
|
-
"id": "
|
|
33
|
+
"id": "les_mvettal2rezjk4",
|
|
34
34
|
"title": "回复力:为什么会来回振动",
|
|
35
35
|
"summary": "从弹簧振子出发认识回复力与胡克定律。",
|
|
36
36
|
"objectives": [
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
],
|
|
40
40
|
"concepts": [
|
|
41
41
|
{
|
|
42
|
-
"id": "
|
|
42
|
+
"id": "cpt_mvettal5cvykpp",
|
|
43
43
|
"name": "回复力"
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
"id": "
|
|
46
|
+
"id": "cpt_mvettal51kykz6",
|
|
47
47
|
"name": "胡克定律"
|
|
48
48
|
}
|
|
49
49
|
],
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"kind": "lesson"
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
|
-
"id": "
|
|
54
|
+
"id": "les_mvettal5oktisl",
|
|
55
55
|
"title": "振幅、周期与频率",
|
|
56
56
|
"summary": "描述振动的三个基本量。",
|
|
57
57
|
"objectives": [
|
|
@@ -60,11 +60,11 @@
|
|
|
60
60
|
],
|
|
61
61
|
"concepts": [
|
|
62
62
|
{
|
|
63
|
-
"id": "
|
|
63
|
+
"id": "cpt_mvettal5qw906v",
|
|
64
64
|
"name": "振幅"
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
|
-
"id": "
|
|
67
|
+
"id": "cpt_mvettal5jvn19z",
|
|
68
68
|
"name": "周期与频率"
|
|
69
69
|
}
|
|
70
70
|
],
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
]
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
|
-
"id": "
|
|
77
|
+
"id": "lec_mvettal5gtpjx0",
|
|
78
78
|
"title": "运动的样子",
|
|
79
79
|
"summary": "",
|
|
80
80
|
"lessons": [
|
|
81
81
|
{
|
|
82
|
-
"id": "
|
|
82
|
+
"id": "les_mvettal5568qh8",
|
|
83
83
|
"title": "从圆周运动看简谐运动",
|
|
84
84
|
"summary": "简谐运动是匀速圆周运动的“影子”。",
|
|
85
85
|
"objectives": [
|
|
@@ -88,11 +88,11 @@
|
|
|
88
88
|
],
|
|
89
89
|
"concepts": [
|
|
90
90
|
{
|
|
91
|
-
"id": "
|
|
91
|
+
"id": "cpt_mvettal5mwjl3b",
|
|
92
92
|
"name": "参考圆"
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
|
-
"id": "
|
|
95
|
+
"id": "cpt_mvettal5w76r1s",
|
|
96
96
|
"name": "角频率"
|
|
97
97
|
}
|
|
98
98
|
],
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"kind": "lesson"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
|
-
"id": "
|
|
103
|
+
"id": "les_mvettal5w9z6xb",
|
|
104
104
|
"title": "位移、速度与加速度的相位关系",
|
|
105
105
|
"summary": "三个量依次相差四分之一个周期。",
|
|
106
106
|
"objectives": [
|
|
@@ -109,11 +109,11 @@
|
|
|
109
109
|
],
|
|
110
110
|
"concepts": [
|
|
111
111
|
{
|
|
112
|
-
"id": "
|
|
112
|
+
"id": "cpt_mvettal5fop0pr",
|
|
113
113
|
"name": "相位"
|
|
114
114
|
},
|
|
115
115
|
{
|
|
116
|
-
"id": "
|
|
116
|
+
"id": "cpt_mvettal5fq9dny",
|
|
117
117
|
"name": "速度与加速度"
|
|
118
118
|
}
|
|
119
119
|
],
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
]
|
|
126
126
|
},
|
|
127
127
|
{
|
|
128
|
-
"id": "
|
|
128
|
+
"id": "unt_mvettal5rdw1wu",
|
|
129
129
|
"title": "单摆与能量",
|
|
130
130
|
"summary": "把方法用到单摆上,并从能量的角度再看一次振动。",
|
|
131
131
|
"objectives": [
|
|
@@ -134,12 +134,12 @@
|
|
|
134
134
|
],
|
|
135
135
|
"lectures": [
|
|
136
136
|
{
|
|
137
|
-
"id": "
|
|
137
|
+
"id": "lec_mvettal5sstiaz",
|
|
138
138
|
"title": "单摆",
|
|
139
139
|
"summary": "",
|
|
140
140
|
"lessons": [
|
|
141
141
|
{
|
|
142
|
-
"id": "
|
|
142
|
+
"id": "les_mvettal5r65d1t",
|
|
143
143
|
"title": "小角度近似:单摆为什么是简谐运动",
|
|
144
144
|
"summary": "sin θ ≈ θ 让单摆满足回复力的形式。",
|
|
145
145
|
"objectives": [
|
|
@@ -148,11 +148,11 @@
|
|
|
148
148
|
],
|
|
149
149
|
"concepts": [
|
|
150
150
|
{
|
|
151
|
-
"id": "
|
|
151
|
+
"id": "cpt_mvettal5ijeu9c",
|
|
152
152
|
"name": "小角度近似"
|
|
153
153
|
},
|
|
154
154
|
{
|
|
155
|
-
"id": "
|
|
155
|
+
"id": "cpt_mvettal5i4m5ya",
|
|
156
156
|
"name": "单摆的回复力"
|
|
157
157
|
}
|
|
158
158
|
],
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"kind": "lesson"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
|
-
"id": "
|
|
163
|
+
"id": "les_mvettal5biagfk",
|
|
164
164
|
"title": "周期公式与测量重力加速度",
|
|
165
165
|
"summary": "T = 2π√(L/g),以及如何用它测出 g。",
|
|
166
166
|
"objectives": [
|
|
@@ -169,11 +169,11 @@
|
|
|
169
169
|
],
|
|
170
170
|
"concepts": [
|
|
171
171
|
{
|
|
172
|
-
"id": "
|
|
172
|
+
"id": "cpt_mvettal5z1uk3i",
|
|
173
173
|
"name": "单摆周期"
|
|
174
174
|
},
|
|
175
175
|
{
|
|
176
|
-
"id": "
|
|
176
|
+
"id": "cpt_mvettal5ajaefg",
|
|
177
177
|
"name": "重力加速度"
|
|
178
178
|
}
|
|
179
179
|
],
|
|
@@ -183,12 +183,12 @@
|
|
|
183
183
|
]
|
|
184
184
|
},
|
|
185
185
|
{
|
|
186
|
-
"id": "
|
|
186
|
+
"id": "lec_mvettal5aaj4q4",
|
|
187
187
|
"title": "能量视角",
|
|
188
188
|
"summary": "",
|
|
189
189
|
"lessons": [
|
|
190
190
|
{
|
|
191
|
-
"id": "
|
|
191
|
+
"id": "les_mvettal5zfvt5l",
|
|
192
192
|
"title": "动能与势能的来回交换",
|
|
193
193
|
"summary": "振动的过程就是能量在两种形式之间流动。",
|
|
194
194
|
"objectives": [
|
|
@@ -197,11 +197,11 @@
|
|
|
197
197
|
],
|
|
198
198
|
"concepts": [
|
|
199
199
|
{
|
|
200
|
-
"id": "
|
|
200
|
+
"id": "cpt_mvettal5acrjft",
|
|
201
201
|
"name": "机械能守恒"
|
|
202
202
|
},
|
|
203
203
|
{
|
|
204
|
-
"id": "
|
|
204
|
+
"id": "cpt_mvettal5d4e1e0",
|
|
205
205
|
"name": "振动的能量"
|
|
206
206
|
}
|
|
207
207
|
],
|
|
@@ -215,7 +215,7 @@
|
|
|
215
215
|
],
|
|
216
216
|
"projects": [
|
|
217
217
|
{
|
|
218
|
-
"id": "
|
|
218
|
+
"id": "prj_mvettal6bgi5j6",
|
|
219
219
|
"title": "用一根绳子测出重力加速度",
|
|
220
220
|
"kind": "code",
|
|
221
221
|
"brief": "用手机秒表和一根绳子做一个单摆,测出不同摆长下的周期,再用 Python 画出 T² 与 L 的关系,从直线斜率求出你所在地的重力加速度 g,并和 9.8 m/s² 比较、分析误差来源。",
|
|
@@ -286,12 +286,12 @@
|
|
|
286
286
|
"content": "import csv\nimport math\n\n# 读取数据\nrows = list(csv.DictReader(open(\"data.csv\", encoding=\"utf-8\")))\nL = [float(r[\"length_m\"]) for r in rows]\nT = [float(r[\"time_10_s\"]) / 10 for r in rows]\n\n# TODO 1:计算每个摆长对应的 T 的平方\nT2 = []\n\n# TODO 2:对 T2 关于 L 做最小二乘线性拟合,求斜率 k\n# 提示:k = Σ(L - L̄)(T2 - T̄2) / Σ(L - L̄)²\nk = None\n\n# TODO 3:由 T² = (4π²/g)·L 求 g\ng = None\n\nprint(\"g =\", g)\n"
|
|
287
287
|
}
|
|
288
288
|
],
|
|
289
|
-
"unitId": "
|
|
289
|
+
"unitId": "unt_mvettal5rdw1wu"
|
|
290
290
|
}
|
|
291
291
|
]
|
|
292
292
|
},
|
|
293
293
|
"boards": {
|
|
294
|
-
"
|
|
294
|
+
"les_mvettal2rezjk4": {
|
|
295
295
|
"title": "回复力:为什么会来回振动",
|
|
296
296
|
"steps": [
|
|
297
297
|
{
|
|
@@ -402,7 +402,7 @@
|
|
|
402
402
|
"hints": [],
|
|
403
403
|
"difficulty": 2,
|
|
404
404
|
"conceptIds": [
|
|
405
|
-
"
|
|
405
|
+
"cpt_mvettal5cvykpp"
|
|
406
406
|
],
|
|
407
407
|
"options": [
|
|
408
408
|
{
|
|
@@ -826,7 +826,7 @@
|
|
|
826
826
|
"hints": [],
|
|
827
827
|
"difficulty": 2,
|
|
828
828
|
"conceptIds": [
|
|
829
|
-
"
|
|
829
|
+
"cpt_mvettal51kykz6"
|
|
830
830
|
],
|
|
831
831
|
"answer": 4,
|
|
832
832
|
"tolerance": 0.01,
|
|
@@ -856,8 +856,8 @@
|
|
|
856
856
|
"hints": [],
|
|
857
857
|
"difficulty": 2,
|
|
858
858
|
"conceptIds": [
|
|
859
|
-
"
|
|
860
|
-
"
|
|
859
|
+
"cpt_mvettal5cvykpp",
|
|
860
|
+
"cpt_mvettal51kykz6"
|
|
861
861
|
],
|
|
862
862
|
"options": [
|
|
863
863
|
{
|
|
@@ -881,9 +881,9 @@
|
|
|
881
881
|
}
|
|
882
882
|
}
|
|
883
883
|
],
|
|
884
|
-
"lessonId": "
|
|
884
|
+
"lessonId": "les_mvettal2rezjk4"
|
|
885
885
|
},
|
|
886
|
-
"
|
|
886
|
+
"les_mvettal5568qh8": {
|
|
887
887
|
"title": "从圆周运动看简谐运动",
|
|
888
888
|
"steps": [
|
|
889
889
|
{
|
|
@@ -950,7 +950,7 @@
|
|
|
950
950
|
"hints": [],
|
|
951
951
|
"difficulty": 2,
|
|
952
952
|
"conceptIds": [
|
|
953
|
-
"
|
|
953
|
+
"cpt_mvettal5mwjl3b"
|
|
954
954
|
],
|
|
955
955
|
"options": [
|
|
956
956
|
{
|
|
@@ -1024,7 +1024,7 @@
|
|
|
1024
1024
|
"hints": [],
|
|
1025
1025
|
"difficulty": 2,
|
|
1026
1026
|
"conceptIds": [
|
|
1027
|
-
"
|
|
1027
|
+
"cpt_mvettal5w76r1s"
|
|
1028
1028
|
],
|
|
1029
1029
|
"answer": 10,
|
|
1030
1030
|
"tolerance": 0.01,
|
|
@@ -1730,8 +1730,8 @@
|
|
|
1730
1730
|
"hints": [],
|
|
1731
1731
|
"difficulty": 2,
|
|
1732
1732
|
"conceptIds": [
|
|
1733
|
-
"
|
|
1734
|
-
"
|
|
1733
|
+
"cpt_mvettal5w76r1s",
|
|
1734
|
+
"cpt_mvettal5mwjl3b"
|
|
1735
1735
|
],
|
|
1736
1736
|
"options": [
|
|
1737
1737
|
{
|
|
@@ -1755,12 +1755,12 @@
|
|
|
1755
1755
|
}
|
|
1756
1756
|
}
|
|
1757
1757
|
],
|
|
1758
|
-
"lessonId": "
|
|
1758
|
+
"lessonId": "les_mvettal5568qh8"
|
|
1759
1759
|
}
|
|
1760
1760
|
},
|
|
1761
1761
|
"practice": {
|
|
1762
|
-
"
|
|
1763
|
-
"lessonId": "
|
|
1762
|
+
"les_mvettal2rezjk4": {
|
|
1763
|
+
"lessonId": "les_mvettal2rezjk4",
|
|
1764
1764
|
"items": [
|
|
1765
1765
|
{
|
|
1766
1766
|
"id": "i1",
|
|
@@ -1772,7 +1772,7 @@
|
|
|
1772
1772
|
],
|
|
1773
1773
|
"difficulty": 1,
|
|
1774
1774
|
"conceptIds": [
|
|
1775
|
-
"
|
|
1775
|
+
"cpt_mvettal5cvykpp"
|
|
1776
1776
|
],
|
|
1777
1777
|
"options": [
|
|
1778
1778
|
{
|
|
@@ -1804,7 +1804,7 @@
|
|
|
1804
1804
|
],
|
|
1805
1805
|
"difficulty": 1,
|
|
1806
1806
|
"conceptIds": [
|
|
1807
|
-
"
|
|
1807
|
+
"cpt_mvettal51kykz6"
|
|
1808
1808
|
],
|
|
1809
1809
|
"answer": 5,
|
|
1810
1810
|
"tolerance": 0.01,
|
|
@@ -1820,7 +1820,7 @@
|
|
|
1820
1820
|
],
|
|
1821
1821
|
"difficulty": 1,
|
|
1822
1822
|
"conceptIds": [
|
|
1823
|
-
"
|
|
1823
|
+
"cpt_mvettal51kykz6"
|
|
1824
1824
|
],
|
|
1825
1825
|
"answer": [
|
|
1826
1826
|
"-kx",
|
|
@@ -1840,7 +1840,7 @@
|
|
|
1840
1840
|
],
|
|
1841
1841
|
"difficulty": 2,
|
|
1842
1842
|
"conceptIds": [
|
|
1843
|
-
"
|
|
1843
|
+
"cpt_mvettal5cvykpp"
|
|
1844
1844
|
],
|
|
1845
1845
|
"options": [
|
|
1846
1846
|
{
|
|
@@ -1870,7 +1870,7 @@
|
|
|
1870
1870
|
"hints": [],
|
|
1871
1871
|
"difficulty": 2,
|
|
1872
1872
|
"conceptIds": [
|
|
1873
|
-
"
|
|
1873
|
+
"cpt_mvettal5cvykpp"
|
|
1874
1874
|
],
|
|
1875
1875
|
"answer": "到达平衡位置时回复力为零但速度最大,由于惯性会冲过平衡位置;冲过之后回复力反向,使它减速并被拉回,如此往复。",
|
|
1876
1876
|
"rubric": [
|
|
@@ -1881,8 +1881,8 @@
|
|
|
1881
1881
|
}
|
|
1882
1882
|
]
|
|
1883
1883
|
},
|
|
1884
|
-
"
|
|
1885
|
-
"lessonId": "
|
|
1884
|
+
"les_mvettal5568qh8": {
|
|
1885
|
+
"lessonId": "les_mvettal5568qh8",
|
|
1886
1886
|
"items": [
|
|
1887
1887
|
{
|
|
1888
1888
|
"id": "i1",
|
|
@@ -1892,7 +1892,7 @@
|
|
|
1892
1892
|
"hints": [],
|
|
1893
1893
|
"difficulty": 1,
|
|
1894
1894
|
"conceptIds": [
|
|
1895
|
-
"
|
|
1895
|
+
"cpt_mvettal5mwjl3b"
|
|
1896
1896
|
],
|
|
1897
1897
|
"options": [
|
|
1898
1898
|
{
|
|
@@ -1924,7 +1924,7 @@
|
|
|
1924
1924
|
],
|
|
1925
1925
|
"difficulty": 1,
|
|
1926
1926
|
"conceptIds": [
|
|
1927
|
-
"
|
|
1927
|
+
"cpt_mvettal5w76r1s"
|
|
1928
1928
|
],
|
|
1929
1929
|
"answer": 12.566,
|
|
1930
1930
|
"tolerance": 0.06,
|
|
@@ -1938,7 +1938,7 @@
|
|
|
1938
1938
|
"hints": [],
|
|
1939
1939
|
"difficulty": 1,
|
|
1940
1940
|
"conceptIds": [
|
|
1941
|
-
"
|
|
1941
|
+
"cpt_mvettal5mwjl3b"
|
|
1942
1942
|
],
|
|
1943
1943
|
"options": [
|
|
1944
1944
|
{
|
|
@@ -1970,7 +1970,7 @@
|
|
|
1970
1970
|
],
|
|
1971
1971
|
"difficulty": 2,
|
|
1972
1972
|
"conceptIds": [
|
|
1973
|
-
"
|
|
1973
|
+
"cpt_mvettal5w76r1s"
|
|
1974
1974
|
],
|
|
1975
1975
|
"answer": 1.2566,
|
|
1976
1976
|
"tolerance": 0.01,
|
|
@@ -1984,7 +1984,7 @@
|
|
|
1984
1984
|
"hints": [],
|
|
1985
1985
|
"difficulty": 2,
|
|
1986
1986
|
"conceptIds": [
|
|
1987
|
-
"
|
|
1987
|
+
"cpt_mvettal5w76r1s"
|
|
1988
1988
|
],
|
|
1989
1989
|
"options": [
|
|
1990
1990
|
{
|