dsh-nerd-mode 0.5.0 → 0.5.2

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.
Files changed (34) hide show
  1. package/README.md +1 -1
  2. package/README.zh.md +1 -1
  3. package/assets/calibration.svg +69 -69
  4. package/assets/nerd.svg +22 -22
  5. package/assets/section.md +15 -15
  6. package/client.js +2170 -2225
  7. package/cordis.patch.yml +24 -24
  8. package/lib/index.js +838 -286
  9. package/lib/study-sessions.js +283 -283
  10. package/package.json +70 -70
  11. package/skills/convert-documents-to-markdown/SKILL.md +26 -26
  12. package/skills/diagram/SKILL.md +43 -19
  13. package/skills/diagram/scripts/check-svg.mjs +184 -0
  14. package/skills/humanizer/.claude-plugin/marketplace.json +18 -18
  15. package/skills/humanizer/.claude-plugin/plugin.json +15 -15
  16. package/skills/humanizer/.cursor-plugin/plugin.json +12 -12
  17. package/skills/humanizer/.github/ISSUE_TEMPLATE/config.yml +8 -8
  18. package/skills/humanizer/.github/ISSUE_TEMPLATE/new-pattern.yml +24 -24
  19. package/skills/humanizer/.github/ISSUE_TEMPLATE/rewrite-problem.yml +44 -44
  20. package/skills/humanizer/.github/workflows/validate.yml +29 -29
  21. package/skills/humanizer/AGENTS.md +54 -54
  22. package/skills/humanizer/CHANGELOG.md +116 -116
  23. package/skills/humanizer/LICENSE +21 -21
  24. package/skills/humanizer/README.md +206 -206
  25. package/skills/humanizer/SKILL.md +397 -397
  26. package/skills/humanizer/agents/openai.yaml +4 -4
  27. package/skills/humanizer/scripts/validate-package.py +146 -146
  28. package/skills/study/SKILL.md +81 -78
  29. package/skills/study-plus/SKILL.md +246 -246
  30. package/skills/study-plus/scripts/book-client.js +284 -284
  31. package/skills/study-plus/scripts/book-data.mjs +289 -289
  32. package/skills/study-plus/scripts/build-book.mjs +155 -155
  33. package/skills/writing-beats/SKILL.md +66 -66
  34. package/skills/writing-beats/agents/openai.yaml +5 -5
package/README.md CHANGED
@@ -214,7 +214,7 @@ Change the defaults under Settings → Nerd Mode.
214
214
 
215
215
  A four-option question appears as a card with one correct choice. The guide asks a short-answer question in the conversation. Save applies to the next session, Cancel discards a draft, and Restore defaults returns to recall off, 3 questions, short answer. A preference stated inside one `/study-plus` request wins for that session only and does not update the profile.
216
216
 
217
- The About group at the bottom shows the installed and the newest npm version. Its button installs an update through DSH Market and offers a restart when the host allows one. The whole page follows the DSH interface language.
217
+ The About group at the bottom shows the installed version and the newer of the npm and official GitHub versions. Its button installs that version from its channel by running pnpm in the profile, then asks you to restart DSH. A pinned GitHub ref and a fork are not checked. A `link:` install is updated with git. The whole page follows the DSH interface language.
218
218
 
219
219
  ## How it fits into dsh
220
220
 
package/README.zh.md CHANGED
@@ -214,7 +214,7 @@ HTML 书页会在每次批量写稿和每节课后刷新,每节一页,还没
214
214
 
215
215
  四选一以卡片出现,四个选项里只有一个对;简答直接在对话里问。保存从下一节课开始生效,取消只丢草稿,恢复默认回到关闭、3 题、简答。在一次 `/study-plus` 请求里明确说出的偏好,只对那一次会话生效,不会改 profile。
216
216
 
217
- 底部的「关于」显示已安装版本和 npm 上的最新版本。点按钮会通过 DSH Market 安装更新;宿主允许时还会给出重启按钮。整页文案跟随 DSH 界面语言。
217
+ 底部的「关于」显示已安装版本,以及 npm 和官方 GitHub 中较高的版本。点按钮会从那个渠道运行 pnpm 安装,然后提示重启 DSH。固定的 GitHub ref 和 fork 不检查。`link:` 安装用 git 更新。整页文案跟随 DSH 界面语言。
218
218
 
219
219
  ## 它怎么接进 dsh
220
220
 
@@ -1,69 +1,69 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 640" role="img" aria-labelledby="title desc">
2
- <title id="title">Calibration sets one teaching level for every lecture</title>
3
- <desc id="desc">You approve the concept graph, then answer one question round, once per Course: what you want to do with it, what you have read or used, and which concepts you can skip. The answers fan out to three teaching levels. Beginner uses numbered steps, explains every term, and shows an example per step. Standard gives intuition first, then the formal detail, with examples where useful. Advanced takes one pass with no steps, gives the formal statement first, and uses at most one example. The level is written to graph.md, and every lecture follows it. The questions, the teach-back, and the record stay the same.</desc>
4
-
5
- <rect x="8" y="8" width="944" height="624" rx="20" fill="#FFFFFF" stroke="#D8D2C6" stroke-width="2"/>
6
-
7
- <g font-family="system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" fill="#141414">
8
- <text x="480" y="62" text-anchor="middle" font-size="26" font-weight="600">One-time, before the first lecture</text>
9
- </g>
10
-
11
- <g fill="#FFFFFF" stroke="#141414" stroke-width="3.4" stroke-linejoin="round">
12
- <path d="M81 231 C 138 229, 206 234, 249 230 C 255 230, 265 235, 264 242 L264 341 C 264 347, 260 351, 253 350 C 192 352, 132 348, 81 351 C 74 351, 71 347, 72 340 L72 241 C 71 235, 75 231, 81 231 Z"/>
13
- <path d="M309 197 C 372 195, 462 200, 547 196 C 554 196, 559 201, 558 209 L558 373 C 558 380, 554 385, 546 384 C 484 386, 394 382, 309 385 C 301 385, 297 380, 298 372 L298 209 C 297 202, 301 197, 309 197 Z"/>
14
- <path d="M603 84 C 664 82, 794 86, 859 83 C 866 83, 871 88, 870 95 L870 196 C 870 202, 866 206, 859 205 C 794 207, 664 203, 603 206 C 596 206, 591 202, 592 195 L592 94 C 591 88, 595 84, 603 84 Z"/>
15
- <path d="M603 230 C 669 228, 789 232, 859 229 C 866 229, 871 234, 870 241 L870 342 C 870 348, 866 352, 859 351 C 794 353, 664 349, 603 352 C 596 352, 591 348, 592 341 L592 240 C 591 234, 595 230, 603 230 Z"/>
16
- <path d="M603 376 C 664 374, 794 378, 859 375 C 866 375, 871 380, 870 387 L870 488 C 870 494, 866 498, 859 497 C 794 499, 664 495, 603 498 C 596 498, 591 494, 592 487 L592 386 C 591 380, 595 376, 603 376 Z"/>
17
- </g>
18
-
19
- <g fill="none" stroke="#141414" stroke-linecap="round" stroke-linejoin="round">
20
- <path d="M265 291 C 274 290, 284 292, 292 291" stroke-width="2.6"/>
21
- <path d="M297 291 L288 286 M297 291 L288 296" stroke-width="2.4"/>
22
-
23
- <path d="M559 291 C 565 290, 570 292, 575 291" stroke-width="2.6"/>
24
- <path d="M575 145 C 574 220, 576 370, 575 437" stroke-width="2.6"/>
25
- <path d="M575 145 C 581 144, 585 146, 591 145" stroke-width="2.6"/>
26
- <path d="M575 291 C 581 290, 585 292, 591 291" stroke-width="2.6"/>
27
- <path d="M575 437 C 581 436, 585 438, 591 437" stroke-width="2.6"/>
28
- <path d="M591 145 L582 140 M591 145 L582 150" stroke-width="2.4"/>
29
- <path d="M591 291 L582 286 M591 291 L582 296" stroke-width="2.4"/>
30
- <path d="M591 437 L582 432 M591 437 L582 442" stroke-width="2.4"/>
31
- </g>
32
- <circle cx="575" cy="291" r="3" fill="#141414"/>
33
-
34
- <g font-family="system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" text-anchor="middle" fill="#141414">
35
- <text x="168" y="277" font-size="21" font-weight="700" letter-spacing="0.2">You approve</text>
36
- <text x="168" y="301" font-size="18">15-30 concepts</text>
37
- <text x="168" y="322" font-size="18">grouped by chapter</text>
38
-
39
- <text x="428" y="244" font-size="21" font-weight="700" letter-spacing="0.2">One question round</text>
40
- <text x="428" y="266" font-size="17">once per Course</text>
41
- <text x="428" y="296" font-size="18">what you want to do with it</text>
42
- <text x="428" y="326" font-size="18">what you have read or used</text>
43
- <text x="428" y="356" font-size="18">which concepts you can skip</text>
44
-
45
- <text x="731" y="119" font-size="21" font-weight="700" letter-spacing="0.2">beginner</text>
46
- <text x="731" y="143" font-size="18">numbered steps</text>
47
- <text x="731" y="166" font-size="18">every term explained</text>
48
- <text x="731" y="189" font-size="18">an example per step</text>
49
-
50
- <text x="731" y="265" font-size="21" font-weight="700" letter-spacing="0.2">standard</text>
51
- <text x="731" y="289" font-size="18">intuition first</text>
52
- <text x="731" y="312" font-size="18">then the formal detail</text>
53
- <text x="731" y="335" font-size="18">examples where useful</text>
54
-
55
- <text x="731" y="411" font-size="21" font-weight="700" letter-spacing="0.2">advanced</text>
56
- <text x="731" y="435" font-size="18">one pass, no steps</text>
57
- <text x="731" y="458" font-size="18">formal statement first</text>
58
- <text x="731" y="481" font-size="18">at most one example</text>
59
- </g>
60
-
61
- <path d="M644 530 C 704 528, 764 532, 818 529" fill="none" stroke="#D8D2C6" stroke-width="2" stroke-linecap="round"/>
62
-
63
- <g font-family="system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" text-anchor="middle" fill="#141414">
64
- <text x="731" y="554" font-size="18">Written to <tspan font-weight="600">graph.md</tspan>.</text>
65
- <text x="731" y="576" font-size="18">Every lecture follows it.</text>
66
-
67
- <text x="480" y="604" font-size="18">The questions, the teach-back, and the record stay the same.</text>
68
- </g>
69
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 640" role="img" aria-labelledby="title desc">
2
+ <title id="title">Calibration sets one teaching level for every lecture</title>
3
+ <desc id="desc">You approve the concept graph, then answer one question round, once per Course: what you want to do with it, what you have read or used, and which concepts you can skip. The answers fan out to three teaching levels. Beginner uses numbered steps, explains every term, and shows an example per step. Standard gives intuition first, then the formal detail, with examples where useful. Advanced takes one pass with no steps, gives the formal statement first, and uses at most one example. The level is written to graph.md, and every lecture follows it. The questions, the teach-back, and the record stay the same.</desc>
4
+
5
+ <rect x="8" y="8" width="944" height="624" rx="20" fill="#FFFFFF" stroke="#D8D2C6" stroke-width="2"/>
6
+
7
+ <g font-family="system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" fill="#141414">
8
+ <text x="480" y="62" text-anchor="middle" font-size="26" font-weight="600">One-time, before the first lecture</text>
9
+ </g>
10
+
11
+ <g fill="#FFFFFF" stroke="#141414" stroke-width="3.4" stroke-linejoin="round">
12
+ <path d="M81 231 C 138 229, 206 234, 249 230 C 255 230, 265 235, 264 242 L264 341 C 264 347, 260 351, 253 350 C 192 352, 132 348, 81 351 C 74 351, 71 347, 72 340 L72 241 C 71 235, 75 231, 81 231 Z"/>
13
+ <path d="M309 197 C 372 195, 462 200, 547 196 C 554 196, 559 201, 558 209 L558 373 C 558 380, 554 385, 546 384 C 484 386, 394 382, 309 385 C 301 385, 297 380, 298 372 L298 209 C 297 202, 301 197, 309 197 Z"/>
14
+ <path d="M603 84 C 664 82, 794 86, 859 83 C 866 83, 871 88, 870 95 L870 196 C 870 202, 866 206, 859 205 C 794 207, 664 203, 603 206 C 596 206, 591 202, 592 195 L592 94 C 591 88, 595 84, 603 84 Z"/>
15
+ <path d="M603 230 C 669 228, 789 232, 859 229 C 866 229, 871 234, 870 241 L870 342 C 870 348, 866 352, 859 351 C 794 353, 664 349, 603 352 C 596 352, 591 348, 592 341 L592 240 C 591 234, 595 230, 603 230 Z"/>
16
+ <path d="M603 376 C 664 374, 794 378, 859 375 C 866 375, 871 380, 870 387 L870 488 C 870 494, 866 498, 859 497 C 794 499, 664 495, 603 498 C 596 498, 591 494, 592 487 L592 386 C 591 380, 595 376, 603 376 Z"/>
17
+ </g>
18
+
19
+ <g fill="none" stroke="#141414" stroke-linecap="round" stroke-linejoin="round">
20
+ <path d="M265 291 C 274 290, 284 292, 292 291" stroke-width="2.6"/>
21
+ <path d="M297 291 L288 286 M297 291 L288 296" stroke-width="2.4"/>
22
+
23
+ <path d="M559 291 C 565 290, 570 292, 575 291" stroke-width="2.6"/>
24
+ <path d="M575 145 C 574 220, 576 370, 575 437" stroke-width="2.6"/>
25
+ <path d="M575 145 C 581 144, 585 146, 591 145" stroke-width="2.6"/>
26
+ <path d="M575 291 C 581 290, 585 292, 591 291" stroke-width="2.6"/>
27
+ <path d="M575 437 C 581 436, 585 438, 591 437" stroke-width="2.6"/>
28
+ <path d="M591 145 L582 140 M591 145 L582 150" stroke-width="2.4"/>
29
+ <path d="M591 291 L582 286 M591 291 L582 296" stroke-width="2.4"/>
30
+ <path d="M591 437 L582 432 M591 437 L582 442" stroke-width="2.4"/>
31
+ </g>
32
+ <circle cx="575" cy="291" r="3" fill="#141414"/>
33
+
34
+ <g font-family="system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" text-anchor="middle" fill="#141414">
35
+ <text x="168" y="277" font-size="21" font-weight="700" letter-spacing="0.2">You approve</text>
36
+ <text x="168" y="301" font-size="18">15-30 concepts</text>
37
+ <text x="168" y="322" font-size="18">grouped by chapter</text>
38
+
39
+ <text x="428" y="244" font-size="21" font-weight="700" letter-spacing="0.2">One question round</text>
40
+ <text x="428" y="266" font-size="17">once per Course</text>
41
+ <text x="428" y="296" font-size="18">what you want to do with it</text>
42
+ <text x="428" y="326" font-size="18">what you have read or used</text>
43
+ <text x="428" y="356" font-size="18">which concepts you can skip</text>
44
+
45
+ <text x="731" y="119" font-size="21" font-weight="700" letter-spacing="0.2">beginner</text>
46
+ <text x="731" y="143" font-size="18">numbered steps</text>
47
+ <text x="731" y="166" font-size="18">every term explained</text>
48
+ <text x="731" y="189" font-size="18">an example per step</text>
49
+
50
+ <text x="731" y="265" font-size="21" font-weight="700" letter-spacing="0.2">standard</text>
51
+ <text x="731" y="289" font-size="18">intuition first</text>
52
+ <text x="731" y="312" font-size="18">then the formal detail</text>
53
+ <text x="731" y="335" font-size="18">examples where useful</text>
54
+
55
+ <text x="731" y="411" font-size="21" font-weight="700" letter-spacing="0.2">advanced</text>
56
+ <text x="731" y="435" font-size="18">one pass, no steps</text>
57
+ <text x="731" y="458" font-size="18">formal statement first</text>
58
+ <text x="731" y="481" font-size="18">at most one example</text>
59
+ </g>
60
+
61
+ <path d="M644 530 C 704 528, 764 532, 818 529" fill="none" stroke="#D8D2C6" stroke-width="2" stroke-linecap="round"/>
62
+
63
+ <g font-family="system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif" text-anchor="middle" fill="#141414">
64
+ <text x="731" y="554" font-size="18">Written to <tspan font-weight="600">graph.md</tspan>.</text>
65
+ <text x="731" y="576" font-size="18">Every lecture follows it.</text>
66
+
67
+ <text x="480" y="604" font-size="18">The questions, the teach-back, and the record stay the same.</text>
68
+ </g>
69
+ </svg>
package/assets/nerd.svg CHANGED
@@ -1,22 +1,22 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 600" role="img" aria-labelledby="title">
2
- <title id="title">Rough ink nerd portrait with a strong turn and raised chin</title>
3
- <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="20" stroke-linecap="round" stroke-linejoin="round" d="M96 198 C84 180 91 158 105 145 C97 124 109 102 133 94 C135 72 159 57 184 65 C202 42 230 47 245 69 C266 44 296 51 311 74 C335 61 359 75 364 99 C386 106 393 129 382 149 C391 168 381 189 366 204 C380 222 388 241 397 258 C407 269 426 269 433 279 C436 288 420 295 406 297 C414 307 408 318 396 325 C391 354 380 379 364 401 C342 429 310 448 273 452 C237 454 204 441 178 418 C153 396 138 368 127 339 C119 322 113 308 111 294 C101 284 100 273 106 262 C98 244 94 219 96 198 Z"/>
4
- <path fill="#141414" d="M96 198 C84 180 91 158 105 145 C97 124 109 102 133 94 C135 72 159 57 184 65 C202 42 230 47 245 69 C266 44 296 51 311 74 C335 61 359 75 364 99 C386 106 393 129 382 149 C391 168 381 189 366 204 C380 222 388 241 397 258 C407 269 426 269 433 279 C436 288 420 295 406 297 C414 307 408 318 396 325 C391 354 380 379 364 401 C342 429 310 448 273 452 C237 454 204 441 178 418 C153 396 138 368 127 339 C119 322 113 308 111 294 C101 284 100 273 106 262 C98 244 94 219 96 198 Z"/>
5
- <path fill="#FFFFFF" d="M119 192 C111 218 111 243 118 266 C110 277 113 289 124 299 C130 329 142 357 161 383 C183 411 213 432 249 438 C282 442 311 430 336 408 C359 388 376 359 383 328 C392 316 391 307 384 299 C391 289 382 281 393 278 C386 271 378 266 370 262 C362 240 356 216 345 198 C335 182 320 176 306 175 C290 184 273 179 258 170 C239 185 220 178 205 169 C185 183 165 178 149 170 C136 179 126 184 119 192 Z"/>
6
- <path fill="#141414" d="M94 199 C88 180 99 156 121 139 C113 117 135 99 164 99 C176 66 214 64 240 92 C260 61 299 66 316 98 C339 82 364 98 362 124 C380 143 370 172 347 188 L334 199 C318 205 302 195 288 181 C272 198 253 191 237 176 C219 193 199 185 182 170 C165 188 145 181 130 167 C115 185 104 194 94 199 Z"/>
7
- <path fill="#141414" d="M204 171 C229 170 255 182 278 202 C256 197 237 188 222 183 C213 181 207 178 201 176 Z"/>
8
- <path fill="#141414" fill-rule="evenodd" transform="translate(0 3)" d="M113 219 C133 206 162 202 192 207 C206 209 212 217 209 231 L204 265 C201 279 192 285 176 286 C153 288 134 280 126 271 C120 263 115 239 113 219 Z M130 232 C148 224 172 223 188 227 C194 229 196 233 195 240 L190 264 C188 271 182 275 174 276 C158 277 143 271 137 265 C133 259 130 242 130 232 Z"/>
9
- <path fill="#141414" fill-rule="evenodd" d="M225 211 C252 198 294 196 330 204 C344 207 350 215 347 229 L340 264 C337 279 327 285 310 284 C282 282 256 270 242 259 C231 250 225 231 223 218 Z M242 224 C263 213 296 212 324 218 C331 219 334 223 332 231 L326 260 C324 268 317 272 307 271 C285 269 263 258 252 250 C244 244 240 230 239 226 Z"/>
10
- <path fill="#141414" d="M201 215 C213 210 228 211 241 218 L247 231 C232 224 218 224 204 230 Z"/>
11
- <path fill="#141414" transform="translate(0 3)" d="M145 243 C155 238 171 238 181 241 L180 247 C170 250 156 249 146 247 Z"/>
12
- <path fill="#141414" d="M267 237 C278 232 294 232 303 235 L302 241 C292 244 278 243 268 241 Z"/>
13
- <path fill="#141414" d="M331 254 C349 265 368 276 389 282 C398 284 403 286 408 289 C397 294 382 291 368 287 C352 283 339 276 326 269 Z"/>
14
- <path fill="#141414" d="M185 351 C208 356 231 358 254 353 C282 347 308 330 331 316 C329 330 320 342 307 350 C284 365 257 372 233 369 C212 367 197 361 185 351 Z"/>
15
- <path fill="#FFFFFF" stroke="#141414" stroke-width="3" stroke-linejoin="round" d="M224 354 L249 354 L249 382 L224 382 Z"/>
16
- <path fill="#FFFFFF" stroke="#141414" stroke-width="3" stroke-linejoin="round" d="M254 352 L282 349 L282 381 L254 384 Z"/>
17
- <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="20" stroke-linejoin="round" d="M207 429 C183 438 157 448 132 463 C100 480 73 502 53 529 C44 542 46 553 55 560 C111 569 175 572 242 570 C310 573 380 567 435 555 C442 552 444 548 439 539 C426 517 407 496 382 480 C356 462 329 448 300 438 L267 424 Z"/>
18
- <path fill="#141414" d="M207 429 C183 438 157 448 132 463 C100 480 73 502 53 529 C44 542 46 553 55 560 C111 569 175 572 242 570 C310 573 380 567 435 555 C442 552 444 548 439 539 C426 517 407 496 382 480 C356 462 329 448 300 438 L267 424 Z"/>
19
- <path fill="#FFFFFF" d="M204 447 C183 455 160 466 139 477 C110 493 85 513 67 535 C63 541 65 547 73 551 C120 558 178 560 242 558 C308 561 372 555 422 544 C412 526 395 508 374 492 C351 475 327 461 297 450 L269 440 Z"/>
20
- <path fill="#141414" d="M186 445 C208 457 229 476 254 497 L225 525 C207 503 193 477 181 453 Z M318 444 C295 456 275 476 252 498 L280 525 C301 503 314 477 326 455 Z"/>
21
- <path fill="#FFFFFF" d="M224 479 L253 502 L282 479 L254 518 Z"/>
22
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 600" role="img" aria-labelledby="title">
2
+ <title id="title">Rough ink nerd portrait with a strong turn and raised chin</title>
3
+ <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="20" stroke-linecap="round" stroke-linejoin="round" d="M96 198 C84 180 91 158 105 145 C97 124 109 102 133 94 C135 72 159 57 184 65 C202 42 230 47 245 69 C266 44 296 51 311 74 C335 61 359 75 364 99 C386 106 393 129 382 149 C391 168 381 189 366 204 C380 222 388 241 397 258 C407 269 426 269 433 279 C436 288 420 295 406 297 C414 307 408 318 396 325 C391 354 380 379 364 401 C342 429 310 448 273 452 C237 454 204 441 178 418 C153 396 138 368 127 339 C119 322 113 308 111 294 C101 284 100 273 106 262 C98 244 94 219 96 198 Z"/>
4
+ <path fill="#141414" d="M96 198 C84 180 91 158 105 145 C97 124 109 102 133 94 C135 72 159 57 184 65 C202 42 230 47 245 69 C266 44 296 51 311 74 C335 61 359 75 364 99 C386 106 393 129 382 149 C391 168 381 189 366 204 C380 222 388 241 397 258 C407 269 426 269 433 279 C436 288 420 295 406 297 C414 307 408 318 396 325 C391 354 380 379 364 401 C342 429 310 448 273 452 C237 454 204 441 178 418 C153 396 138 368 127 339 C119 322 113 308 111 294 C101 284 100 273 106 262 C98 244 94 219 96 198 Z"/>
5
+ <path fill="#FFFFFF" d="M119 192 C111 218 111 243 118 266 C110 277 113 289 124 299 C130 329 142 357 161 383 C183 411 213 432 249 438 C282 442 311 430 336 408 C359 388 376 359 383 328 C392 316 391 307 384 299 C391 289 382 281 393 278 C386 271 378 266 370 262 C362 240 356 216 345 198 C335 182 320 176 306 175 C290 184 273 179 258 170 C239 185 220 178 205 169 C185 183 165 178 149 170 C136 179 126 184 119 192 Z"/>
6
+ <path fill="#141414" d="M94 199 C88 180 99 156 121 139 C113 117 135 99 164 99 C176 66 214 64 240 92 C260 61 299 66 316 98 C339 82 364 98 362 124 C380 143 370 172 347 188 L334 199 C318 205 302 195 288 181 C272 198 253 191 237 176 C219 193 199 185 182 170 C165 188 145 181 130 167 C115 185 104 194 94 199 Z"/>
7
+ <path fill="#141414" d="M204 171 C229 170 255 182 278 202 C256 197 237 188 222 183 C213 181 207 178 201 176 Z"/>
8
+ <path fill="#141414" fill-rule="evenodd" transform="translate(0 3)" d="M113 219 C133 206 162 202 192 207 C206 209 212 217 209 231 L204 265 C201 279 192 285 176 286 C153 288 134 280 126 271 C120 263 115 239 113 219 Z M130 232 C148 224 172 223 188 227 C194 229 196 233 195 240 L190 264 C188 271 182 275 174 276 C158 277 143 271 137 265 C133 259 130 242 130 232 Z"/>
9
+ <path fill="#141414" fill-rule="evenodd" d="M225 211 C252 198 294 196 330 204 C344 207 350 215 347 229 L340 264 C337 279 327 285 310 284 C282 282 256 270 242 259 C231 250 225 231 223 218 Z M242 224 C263 213 296 212 324 218 C331 219 334 223 332 231 L326 260 C324 268 317 272 307 271 C285 269 263 258 252 250 C244 244 240 230 239 226 Z"/>
10
+ <path fill="#141414" d="M201 215 C213 210 228 211 241 218 L247 231 C232 224 218 224 204 230 Z"/>
11
+ <path fill="#141414" transform="translate(0 3)" d="M145 243 C155 238 171 238 181 241 L180 247 C170 250 156 249 146 247 Z"/>
12
+ <path fill="#141414" d="M267 237 C278 232 294 232 303 235 L302 241 C292 244 278 243 268 241 Z"/>
13
+ <path fill="#141414" d="M331 254 C349 265 368 276 389 282 C398 284 403 286 408 289 C397 294 382 291 368 287 C352 283 339 276 326 269 Z"/>
14
+ <path fill="#141414" d="M185 351 C208 356 231 358 254 353 C282 347 308 330 331 316 C329 330 320 342 307 350 C284 365 257 372 233 369 C212 367 197 361 185 351 Z"/>
15
+ <path fill="#FFFFFF" stroke="#141414" stroke-width="3" stroke-linejoin="round" d="M224 354 L249 354 L249 382 L224 382 Z"/>
16
+ <path fill="#FFFFFF" stroke="#141414" stroke-width="3" stroke-linejoin="round" d="M254 352 L282 349 L282 381 L254 384 Z"/>
17
+ <path fill="#FFFFFF" stroke="#FFFFFF" stroke-width="20" stroke-linejoin="round" d="M207 429 C183 438 157 448 132 463 C100 480 73 502 53 529 C44 542 46 553 55 560 C111 569 175 572 242 570 C310 573 380 567 435 555 C442 552 444 548 439 539 C426 517 407 496 382 480 C356 462 329 448 300 438 L267 424 Z"/>
18
+ <path fill="#141414" d="M207 429 C183 438 157 448 132 463 C100 480 73 502 53 529 C44 542 46 553 55 560 C111 569 175 572 242 570 C310 573 380 567 435 555 C442 552 444 548 439 539 C426 517 407 496 382 480 C356 462 329 448 300 438 L267 424 Z"/>
19
+ <path fill="#FFFFFF" d="M204 447 C183 455 160 466 139 477 C110 493 85 513 67 535 C63 541 65 547 73 551 C120 558 178 560 242 558 C308 561 372 555 422 544 C412 526 395 508 374 492 C351 475 327 461 297 450 L269 440 Z"/>
20
+ <path fill="#141414" d="M186 445 C208 457 229 476 254 497 L225 525 C207 503 193 477 181 453 Z M318 444 C295 456 275 476 252 498 L280 525 C301 503 314 477 326 455 Z"/>
21
+ <path fill="#FFFFFF" d="M224 479 L253 502 L282 479 L254 518 Z"/>
22
+ </svg>
package/assets/section.md CHANGED
@@ -1,15 +1,15 @@
1
- Nerd Mode is on for this conversation. These rules take precedence over any earlier persona, style, or answer-shape text in this prompt, including text that asks for brevity, for a direct answer, or for no follow-up question.
2
-
3
- The `study` and `study-plus` skills are available through the skill tool. An explicit `/study-plus` means the user chose tracked study: load `study-plus` directly with the Course and supplied material, without a route question. An explicit `/study` means the user chose one-off teaching: load `study` directly. Otherwise, a learning request gets one opening question before either skill loads, and the answer chooses one-off `study` or tracked `study-plus`. Follow `study` for lecture-writing standards. Save other artifacts only when the user asks for a path. Do not let `study` read or write tracker files in `study/<course>/`. Do not grade, score, or log in `study`.
4
-
5
- Every request that is not a learning request keeps the base mode's behavior: produce the artifact, run the command, make the edit. Answer in plain prose, without a teaching detour and without a closing question the learner did not ask for.
6
-
7
- Study-plus loads `study` before Teach. It owns tracker updates, automatic lecture files for tracked sessions, and book assembly. Direct `study` may save a user-requested lecture or other artifact to the requested path. The four tracker files remain study-plus-only. Do not grade in `study`.
8
-
9
- Teaching level: run calibration once per new Course, after graph approval and before any tracker file is written. Ask it as one question-tool call with three items: the goal, the prior exposure, and a multi-select skip list. Ask the goal and background items only when nothing already answers them: not the current request, not the opening question, not the supplied material. Derive `beginner`, `standard`, or `advanced`. Answer `beginner` when most prerequisites are unknown, or when the goal is to learn the topic from zero. Answer `standard` when some prerequisites are known and the goal is to understand the principles or pass an exam. Answer `advanced` when most prerequisites are known and the goal is review, reference, or use in a project. When the two answers clearly conflict, you may choose an adjacent level and state the reason in one line. Write `Goal`, `Background`, and `Teaching level` in `graph.md`. When the learner declines or gives no usable answer, write `Teaching level: standard` and omit the other two lines. Pass the lines that exist verbatim to `study`, without compressing or rewriting them. A missing `Teaching level` line means `standard`. Never ask for calibration on a Course that already has a `graph.md`. A mid-Course change of depth lasts for this session only. Only an explicit "from now on" rewrites the `Teaching level` line.
10
-
11
- Routing order: an explicit `/study-plus` loads `study-plus` directly, even for several concepts, and never asks a path question. An explicit `/study` loads `study` directly. Otherwise, a learning request gets exactly one opening question-tool call before either skill loads. The call carries up to three single-choice items, in this order. Goal: pass an exam, understand the principles, use it in a project or at work, get a rough overview. Background: never studied it, read introductory material, took a course or systematic training, used it at work. The four background options run from least to most exposure, so the learner picks the highest one that applies. Path: one complete answer in this conversation with no Course record, one continue choice for each existing Course, start a new Course. Show a continue choice only for a Course that exists under `study/`. Call the only existing Course the current Course; with several, use each name. The path question text says that tracked study learns one concept per session. Write each label in the learner's language. Ask only the items that the request and the supplied material leave open. A bare topic, or "I want to learn X", states no goal and no background. When the host has no choice tool, ask the same items as a numbered text list. Pass the selected labels verbatim with the request as the brief. When the learner declines, or says to just teach, load `study` with `standard` and no goal or background. Never repeat an answered item.
12
-
13
- Course: after an explicit `/study-plus`, settle the Course before the first tracked study and never ask again in that conversation. No Course asks for a name. Exactly one Course is used and named in one line, with no question. Several Courses get one question that lists them and offers a new Course. A named `/study-plus <course>` settles the Course with no question; when that Course does not exist, ask once whether to create it. The opening question, when it runs, carries the Course in its path item.
14
-
15
- `study` defaults to chat output. Do not apply a blanket ban on files under `study/`: study-plus owns its tracker files and automatic tracked-session lectures. Direct `study` may save user-requested lectures, diagrams, and other artifacts. Only study-plus may read or write `graph.md`, `state.md`, `log.md`, and `plan.md`.
1
+ Nerd Mode is on for this conversation. These rules take precedence over any earlier persona, style, or answer-shape text in this prompt, including text that asks for brevity, for a direct answer, or for no follow-up question.
2
+
3
+ The `study` and `study-plus` skills are available through the skill tool. An explicit `/study-plus` means the user chose tracked study: load `study-plus` directly with the Course and supplied material, without a route question. An explicit `/study` means the user chose one-off teaching: load `study` directly. Otherwise, a learning request gets one opening question before either skill loads, and the answer chooses one-off `study` or tracked `study-plus`. Follow `study` for lecture-writing standards. Save other artifacts only when the user asks for a path. Do not let `study` read or write tracker files in `study/<course>/`. Do not grade, score, or log in `study`.
4
+
5
+ Every request that is not a learning request keeps the base mode's behavior: produce the artifact, run the command, make the edit. Answer in plain prose, without a teaching detour and without a closing question the learner did not ask for.
6
+
7
+ Study-plus loads `study` before Teach. It owns tracker updates, automatic lecture files for tracked sessions, and book assembly. Direct `study` may save a user-requested lecture or other artifact to the requested path. The four tracker files remain study-plus-only. Do not grade in `study`.
8
+
9
+ Teaching level: run calibration once per new Course, after graph approval and before any tracker file is written. Ask it as one question-tool call with three items: the goal, the prior exposure, and a multi-select skip list. Ask the goal and background items only when nothing already answers them: not the current request, not the opening question, not the supplied material. Derive `beginner`, `standard`, or `advanced`. Answer `beginner` when most prerequisites are unknown, or when the goal is to learn the topic from zero. Answer `standard` when some prerequisites are known and the goal is to understand the principles or pass an exam. Answer `advanced` when most prerequisites are known and the goal is review, reference, or use in a project. When the two answers clearly conflict, you may choose an adjacent level and state the reason in one line. Write `Goal`, `Background`, and `Teaching level` in `graph.md`. When the learner declines or gives no usable answer, write `Teaching level: standard` and omit the other two lines. Pass the lines that exist verbatim to `study`, without compressing or rewriting them. A missing `Teaching level` line means `standard`. Never ask for calibration on a Course that already has a `graph.md`. A mid-Course change of depth lasts for this session only. Only an explicit "from now on" rewrites the `Teaching level` line.
10
+
11
+ Routing order: an explicit `/study-plus` loads `study-plus` directly, even for several concepts, and never asks a path question. An explicit `/study` loads `study` directly. Otherwise, a learning request gets exactly one opening question-tool call before either skill loads. The call carries up to three single-choice items, in this order. Goal: pass an exam (description: 偏全:按考点讲全,不逐句铺开), understand the principles (description: 偏推导:讲清概念之间的关系), use it in a project or at work (description: 偏快:一段讲完,例子从简), get a rough overview (description: 偏慢:分步讲,术语逐个解释). Background: never studied it (description: 偏慢:术语首次出现就解释), read introductory material (description: 标准:基础名词不再逐个解释), took a course or systematic training (description: 偏快:重复内容略过), used it at work (description: 偏快:跳过直觉,从定义起讲). The four background options run from least to most exposure, so the learner picks the highest one that applies. Path: one complete answer in this conversation with no Course record, one continue choice for each existing Course, start a new Course. Show a continue choice only for a Course that exists under `study/`. Call the only existing Course the current Course; with several, use each name. The path question text says that tracked study learns one concept per session. Write each label in the learner's language, and write each description in the learner's language too: keep the Chinese text verbatim for a Chinese learner and translate it to about 6 words otherwise. The description sits in the option's description field, and in the numbered text list it follows the label in parentheses. Path options carry no description. Ask only the items that the request and the supplied material leave open. A bare topic, or "I want to learn X", states no goal and no background. When the host has no choice tool, ask the same items as a numbered text list. Pass the selected labels verbatim with the request as the brief. When the learner declines, or says to just teach, load `study` with `standard` and no goal or background. Never repeat an answered item.
12
+
13
+ Course: after an explicit `/study-plus`, settle the Course before the first tracked study and never ask again in that conversation. No Course asks for a name. Exactly one Course is used and named in one line, with no question. Several Courses get one question that lists them and offers a new Course. A named `/study-plus <course>` settles the Course with no question; when that Course does not exist, ask once whether to create it. The opening question, when it runs, carries the Course in its path item.
14
+
15
+ `study` defaults to chat output. Do not apply a blanket ban on files under `study/`: study-plus owns its tracker files and automatic tracked-session lectures. Direct `study` may save user-requested lectures, diagrams, and other artifacts. Only study-plus may read or write `graph.md`, `state.md`, `log.md`, and `plan.md`.