dsh-nerd-mode 0.4.6 → 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.
- package/README.md +11 -6
- package/README.zh.md +11 -6
- package/assets/calibration.svg +69 -69
- package/assets/nerd.svg +22 -22
- package/assets/section.md +15 -15
- package/client.js +2170 -1806
- package/cordis.patch.yml +24 -24
- package/lib/index.js +838 -223
- package/lib/study-sessions.js +283 -0
- package/package.json +2 -2
- package/skills/convert-documents-to-markdown/SKILL.md +26 -26
- package/skills/diagram/SKILL.md +43 -19
- package/skills/diagram/scripts/check-svg.mjs +184 -0
- package/skills/humanizer/.claude-plugin/marketplace.json +18 -18
- package/skills/humanizer/.claude-plugin/plugin.json +15 -15
- package/skills/humanizer/.cursor-plugin/plugin.json +12 -12
- package/skills/humanizer/.github/ISSUE_TEMPLATE/config.yml +8 -8
- package/skills/humanizer/.github/ISSUE_TEMPLATE/new-pattern.yml +24 -24
- package/skills/humanizer/.github/ISSUE_TEMPLATE/rewrite-problem.yml +44 -44
- package/skills/humanizer/.github/workflows/validate.yml +29 -29
- package/skills/humanizer/AGENTS.md +54 -54
- package/skills/humanizer/CHANGELOG.md +116 -116
- package/skills/humanizer/LICENSE +21 -21
- package/skills/humanizer/README.md +206 -206
- package/skills/humanizer/SKILL.md +397 -397
- package/skills/humanizer/agents/openai.yaml +4 -4
- package/skills/humanizer/scripts/validate-package.py +146 -146
- package/skills/study/SKILL.md +81 -78
- package/skills/study-plus/SKILL.md +246 -246
- package/skills/study-plus/scripts/book-client.js +284 -284
- package/skills/study-plus/scripts/book-data.mjs +289 -289
- package/skills/study-plus/scripts/build-book.mjs +155 -155
- package/skills/writing-beats/SKILL.md +66 -66
- package/skills/writing-beats/agents/openai.yaml +5 -5
package/README.md
CHANGED
|
@@ -48,7 +48,8 @@ A chat lesson ends when the answer arrives. Nothing checks that you understood i
|
|
|
48
48
|
- **Graded checks.** Unseen questions and a graded teach-back, with the rubric written before the question. Only an answer you produced changes the record.
|
|
49
49
|
- **A record that outlives the chat.** Graph, states, and dated log survive restarts, and the HTML Book has full-text search.
|
|
50
50
|
- **Progress without opening a file.** The Study tab reads the Tracker for this conversation and shows one progress percentage, the previous, current, and next Section, the shaky Concepts, and the three most recent Concept cycles. It never writes.
|
|
51
|
-
- **Lectures you can find again.** The Lectures tab
|
|
51
|
+
- **Lectures you can find again.** The Lectures tab keeps the course picker in the page header, lists only the courses that exist, and marks each lecture as a draft, a dated lecture, or an archived one. The archived lectures fold behind a count.
|
|
52
|
+
- **Your study conversations in one place.** The Study Sessions panel in the left sidebar lists every conversation where Nerd Mode was switched on at least once, in three groups: In-depth, Quick, and Past. Each group folds from its heading, In-depth and Quick start open, Past starts closed, and a click opens that conversation.
|
|
52
53
|
|
|
53
54
|
## Install
|
|
54
55
|
|
|
@@ -213,7 +214,7 @@ Change the defaults under Settings → Nerd Mode.
|
|
|
213
214
|
|
|
214
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.
|
|
215
216
|
|
|
216
|
-
The About group at the bottom shows the installed and the
|
|
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.
|
|
217
218
|
|
|
218
219
|
## How it fits into dsh
|
|
219
220
|
|
|
@@ -225,10 +226,11 @@ package.json
|
|
|
225
226
|
│ ├── dsh-nerd-mode → lib/index.js
|
|
226
227
|
│ │ ├── session projection — on/off state, folded from the session log
|
|
227
228
|
│ │ ├── prompt section — assets/section.md at order 550, while on
|
|
228
|
-
│ │
|
|
229
|
+
│ │ ├── /nerd-mode — the switch
|
|
230
|
+
│ │ └── GET /api/study-sessions — the read-only session index
|
|
229
231
|
│ ├── study-plus-skills — skills/ as a filesystem skill provider
|
|
230
232
|
│ └── goal packages — disabled
|
|
231
|
-
└── dsh.client → client.js: pill, Study tab, Lectures tab, Settings section
|
|
233
|
+
└── dsh.client → client.js: pill, Study tab, Lectures tab, Study Sessions panel, Settings section
|
|
232
234
|
```
|
|
233
235
|
|
|
234
236
|
**State** lives in a session projection. It folds from the session log, so compaction, resume, and fork keep it. The prompt section has text only while that state is on.
|
|
@@ -237,6 +239,8 @@ package.json
|
|
|
237
239
|
|
|
238
240
|
**Settings** reach the model as a short defaults block appended to that section, only during a tracked session. They never change the tool set.
|
|
239
241
|
|
|
242
|
+
**Session history** is a second, read-only store. `lib/study-sessions.js` scans the conversation logs in chunks, keys each file by its size and modification time, and writes `~/.dsh/study-sessions-index.json`, which sits outside every workspace. The panel reads it through one route that answers only GET, refuses a request with no session cookie (401) and a foreign host or origin (403).
|
|
243
|
+
|
|
240
244
|
**Patch scope** covers the whole profile. It loads `skills/` with a `!!js` expression, so review patch changes as host-process code. It also disables the three goal packages, because the built-in goal tool turns one study answer into an auto-continuing run.
|
|
241
245
|
|
|
242
246
|
## What the switch changes
|
|
@@ -277,9 +281,10 @@ npm run check
|
|
|
277
281
|
|
|
278
282
|
| Path | Holds |
|
|
279
283
|
|---|---|
|
|
280
|
-
| `lib/index.js` | plugin entry: projection, prompt section, command, session defaults |
|
|
284
|
+
| `lib/index.js` | plugin entry: projection, prompt section, command, session defaults, session index route |
|
|
281
285
|
| `lib/fold.js` | the state fold and its constants |
|
|
282
|
-
| `
|
|
286
|
+
| `lib/study-sessions.js` | the session history scan and its index |
|
|
287
|
+
| `client.js` | composer pill, Study and Lectures tabs, Study Sessions panel, Settings section |
|
|
283
288
|
| `assets/section.md` | the teaching policy prompt |
|
|
284
289
|
| `skills/` | bundled skills |
|
|
285
290
|
| `test/` | one file per surface, run by `node --test` |
|
package/README.zh.md
CHANGED
|
@@ -48,7 +48,8 @@
|
|
|
48
48
|
- **有评分的检查。** 没见过的题加上要评分的复述,评分标准在出题之前就写好。只有你自己答出来的内容才会改写记录。
|
|
49
49
|
- **记录比对话活得久。** 概念图、状态和带日期的日志能跨重启保留,HTML 书支持全文搜索。
|
|
50
50
|
- **不用翻文件就能看进度。** Study 标签页读当前对话的记录文件,显示进度百分比,上一节、当前节、下一节三格,状态是 shaky 的概念,以及最近三轮概念循环。它只读,不写。
|
|
51
|
-
- **讲义找得回来。** Lectures
|
|
51
|
+
- **讲义找得回来。** Lectures 标签页把课程下拉放在页头,只列出真实存在的 Course,并把每份讲义标成草稿、带日期或已归档。已归档的讲义收在一个折叠区里,标题旁显示数量。
|
|
52
|
+
- **学习会话都在一处。** 左侧边栏的 Study Sessions 面板列出所有至少打开过一次 Nerd Mode 的会话,分「深入」「快速」「过去」三组。每组都能点标题折叠,深入和快速默认展开,过去默认收起,点一行就打开那个会话。
|
|
52
53
|
|
|
53
54
|
## 安装
|
|
54
55
|
|
|
@@ -213,7 +214,7 @@ HTML 书页会在每次批量写稿和每节课后刷新,每节一页,还没
|
|
|
213
214
|
|
|
214
215
|
四选一以卡片出现,四个选项里只有一个对;简答直接在对话里问。保存从下一节课开始生效,取消只丢草稿,恢复默认回到关闭、3 题、简答。在一次 `/study-plus` 请求里明确说出的偏好,只对那一次会话生效,不会改 profile。
|
|
215
216
|
|
|
216
|
-
|
|
217
|
+
底部的「关于」显示已安装版本,以及 npm 和官方 GitHub 中较高的版本。点按钮会从那个渠道运行 pnpm 安装,然后提示重启 DSH。固定的 GitHub ref 和 fork 不检查。`link:` 安装用 git 更新。整页文案跟随 DSH 界面语言。
|
|
217
218
|
|
|
218
219
|
## 它怎么接进 dsh
|
|
219
220
|
|
|
@@ -225,10 +226,11 @@ package.json
|
|
|
225
226
|
│ ├── dsh-nerd-mode → lib/index.js
|
|
226
227
|
│ │ ├── session projection — 开关状态,从会话日志折叠出来
|
|
227
228
|
│ │ ├── prompt section — assets/section.md,顺序 550,只在开着时注入
|
|
228
|
-
│ │
|
|
229
|
+
│ │ ├── /nerd-mode — 开关
|
|
230
|
+
│ │ └── GET /api/study-sessions — 只读的学习会话索引
|
|
229
231
|
│ ├── study-plus-skills — skills/ 作为文件系统技能来源
|
|
230
232
|
│ └── goal packages — 已禁用
|
|
231
|
-
└── dsh.client → client.js:胶囊、Study 标签页、Lectures
|
|
233
|
+
└── dsh.client → client.js:胶囊、Study 标签页、Lectures 标签页、Study Sessions 面板、设置页
|
|
232
234
|
```
|
|
233
235
|
|
|
234
236
|
**状态**存在一个 session projection 里,从会话日志折叠出来,所以压缩上下文、恢复会话、分叉都不丢。只有那个状态是「开着」时,提示段落才有内容。
|
|
@@ -237,6 +239,8 @@ package.json
|
|
|
237
239
|
|
|
238
240
|
**设置**只在带记录的会话里,以一小段默认值附在那段提示后面。它们从不改变工具目录。
|
|
239
241
|
|
|
242
|
+
**会话历史**是第二份只读记录。`lib/study-sessions.js` 分块扫描会话日志,按文件大小和修改时间记账,写到 `~/.dsh/study-sessions-index.json`,这个文件在每个工作区之外。面板通过一条路由读它:只接受 GET,没有会话 cookie 的请求返回 401,主机名或来源不对返回 403。
|
|
243
|
+
|
|
240
244
|
**补丁范围**覆盖整个 profile。补丁用 `!!js` 表达式加载 `skills/`,改之前要按宿主进程代码来审。补丁还禁用了三个 goal 包,因为内置的 goal 工具会把一次讲解变成自动续跑的循环。
|
|
241
245
|
|
|
242
246
|
## 开关改了什么
|
|
@@ -277,9 +281,10 @@ npm run check
|
|
|
277
281
|
|
|
278
282
|
| 路径 | 内容 |
|
|
279
283
|
|---|---|
|
|
280
|
-
| `lib/index.js` |
|
|
284
|
+
| `lib/index.js` | 插件入口:投影、提示段落、命令、会话默认值、会话索引路由 |
|
|
281
285
|
| `lib/fold.js` | 状态折叠与常量 |
|
|
282
|
-
| `
|
|
286
|
+
| `lib/study-sessions.js` | 会话历史扫描与索引 |
|
|
287
|
+
| `client.js` | 输入框胶囊、Study 与 Lectures 标签页、Study Sessions 面板、设置页 |
|
|
283
288
|
| `assets/section.md` | 教学策略提示词 |
|
|
284
289
|
| `skills/` | 随包的技能 |
|
|
285
290
|
| `test/` | 每个界面一个文件,由 `node --test` 运行 |
|
package/assets/calibration.svg
CHANGED
|
@@ -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`.
|