@dongfangw/study-kit 0.0.0-stage → 0.1.1
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/LICENSE +671 -0
- package/README.md +28 -2
- package/cordis.patch.yml +3 -0
- package/ext/adoc-convert/index.mjs +62 -0
- package/lib/client.js +5917 -0
- package/lib/client.js.map +1 -0
- package/lib/docsplit.d.ts +73 -0
- package/lib/docsplit.d.ts.map +1 -0
- package/lib/docsplit.js +241 -0
- package/lib/docsplit.js.map +1 -0
- package/lib/git.d.ts +29 -0
- package/lib/git.d.ts.map +1 -0
- package/lib/git.js +305 -0
- package/lib/git.js.map +1 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +324 -0
- package/lib/index.js.map +1 -0
- package/lib/isolation.d.ts +33 -0
- package/lib/isolation.d.ts.map +1 -0
- package/lib/isolation.js +30 -0
- package/lib/isolation.js.map +1 -0
- package/lib/libraries.d.ts +36 -0
- package/lib/libraries.d.ts.map +1 -0
- package/lib/libraries.js +118 -0
- package/lib/libraries.js.map +1 -0
- package/lib/render.d.ts +22 -0
- package/lib/render.d.ts.map +1 -0
- package/lib/render.js +568 -0
- package/lib/render.js.map +1 -0
- package/lib/session.d.ts +23 -0
- package/lib/session.d.ts.map +1 -0
- package/lib/session.js +35 -0
- package/lib/session.js.map +1 -0
- package/lib/skills.d.ts +24 -0
- package/lib/skills.d.ts.map +1 -0
- package/lib/skills.js +111 -0
- package/lib/skills.js.map +1 -0
- package/lib/slidev.d.ts +13 -0
- package/lib/slidev.d.ts.map +1 -0
- package/lib/slidev.js +755 -0
- package/lib/slidev.js.map +1 -0
- package/lib/slidevBin.d.ts +7 -0
- package/lib/slidevBin.d.ts.map +1 -0
- package/lib/slidevBin.js +130 -0
- package/lib/slidevBin.js.map +1 -0
- package/lib/slidevEnv.d.ts +56 -0
- package/lib/slidevEnv.d.ts.map +1 -0
- package/lib/slidevEnv.js +702 -0
- package/lib/slidevEnv.js.map +1 -0
- package/lib/static.d.ts +8 -0
- package/lib/static.d.ts.map +1 -0
- package/lib/static.js +79 -0
- package/lib/static.js.map +1 -0
- package/lib/tools.d.ts +4 -0
- package/lib/tools.d.ts.map +1 -0
- package/lib/tools.js +160 -0
- package/lib/tools.js.map +1 -0
- package/lib/types/client/DocMarks.d.ts +76 -0
- package/lib/types/client/DocMarks.d.ts.map +1 -0
- package/lib/types/client/DocViewer.d.ts +21 -0
- package/lib/types/client/DocViewer.d.ts.map +1 -0
- package/lib/types/client/GitPanel.d.ts +20 -0
- package/lib/types/client/GitPanel.d.ts.map +1 -0
- package/lib/types/client/LibraryWorkspace.d.ts +5 -0
- package/lib/types/client/LibraryWorkspace.d.ts.map +1 -0
- package/lib/types/client/MyLibraries.d.ts +5 -0
- package/lib/types/client/MyLibraries.d.ts.map +1 -0
- package/lib/types/client/SlidevDeckViewer.d.ts +25 -0
- package/lib/types/client/SlidevDeckViewer.d.ts.map +1 -0
- package/lib/types/client/SlidevEnvPanel.d.ts +11 -0
- package/lib/types/client/SlidevEnvPanel.d.ts.map +1 -0
- package/lib/types/client/annotations.d.ts +161 -0
- package/lib/types/client/annotations.d.ts.map +1 -0
- package/lib/types/client/docEnhance.d.ts +55 -0
- package/lib/types/client/docEnhance.d.ts.map +1 -0
- package/lib/types/client/docKey.d.ts +22 -0
- package/lib/types/client/docKey.d.ts.map +1 -0
- package/lib/types/client/git.module.css.gen.d.ts +3 -0
- package/lib/types/client/git.module.css.gen.d.ts.map +1 -0
- package/lib/types/client/icons.d.ts +50 -0
- package/lib/types/client/icons.d.ts.map +1 -0
- package/lib/types/client/index.d.ts +12 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/prose.d.ts +19 -0
- package/lib/types/client/prose.d.ts.map +1 -0
- package/lib/types/client/readerControls.d.ts +55 -0
- package/lib/types/client/readerControls.d.ts.map +1 -0
- package/lib/types/client/readerPrefs.d.ts +73 -0
- package/lib/types/client/readerPrefs.d.ts.map +1 -0
- package/lib/types/client/readingPos.d.ts +82 -0
- package/lib/types/client/readingPos.d.ts.map +1 -0
- package/lib/types/client/styles.module.css.gen.d.ts +3 -0
- package/lib/types/client/styles.module.css.gen.d.ts.map +1 -0
- package/lib/types/client/submitDraft.d.ts +29 -0
- package/lib/types/client/submitDraft.d.ts.map +1 -0
- package/lib/types/client/viewActive.d.ts +55 -0
- package/lib/types/client/viewActive.d.ts.map +1 -0
- package/lib/types/types.d.ts +351 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types.d.ts +351 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +6 -0
- package/lib/types.js.map +1 -0
- package/package.json +101 -6
- package/skills/aero-concept-qa/SKILL.md +65 -0
- package/skills/aero-learning-path/SKILL.md +61 -0
- package/skills/aero-study-guide/SKILL.md +47 -0
- package/skills/aero-think/SKILL.md +59 -0
- package/skills/kb-organize/SKILL.md +73 -0
package/README.md
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @dongfangw/study-kit · AI 学伴
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
把任意"带清单的内容库"变成一个可读、可搜、可标注、可问的学习台。可同时挂多个库:
|
|
4
|
+
自己的课程、自学的另一门课、私人笔记,互不干扰。
|
|
5
|
+
|
|
6
|
+
> **你的阅读位置、标注、提问和 AI 对话都只存在这台电脑上。** 没有账号、没有云同步、没有遥测。
|
|
7
|
+
|
|
8
|
+
## 安装(计划)
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
dsh plugin install @dongfangw/study-kit
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## 能力
|
|
15
|
+
|
|
16
|
+
- 书籍版式读 adoc / md,公式走 KaTeX;超长文档自动分段
|
|
17
|
+
- 荧光笔 / 重点线 / 便签提问(标注只落本机)
|
|
18
|
+
- 阅读位置记住(按文档、按段)
|
|
19
|
+
- 「我的库」:加库向导、库隔离(`visibility: private` 三出口全隐)、每库 Git 状态
|
|
20
|
+
- 4 个工具:`kb_libraries` / `kb_catalog` / `kb_read` / `kb_search`
|
|
21
|
+
- 5 个技能:学习导航、学习路径、概念答疑、物理直觉、建库向导
|
|
22
|
+
|
|
23
|
+
## 状态
|
|
24
|
+
|
|
25
|
+
施工中(阶段 2)。本仓从 `student-pack` 的阅读器部分拆出并去课程化。
|
|
26
|
+
|
|
27
|
+
## 许可
|
|
28
|
+
|
|
29
|
+
MIT。
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AsciiDoc → HTML 转换的**隔离执行器**(供 src/render.ts 以子进程方式调用)。
|
|
4
|
+
*
|
|
5
|
+
* 为什么必须隔离(血泪教训,勿改回进程内 require):
|
|
6
|
+
* `@asciidoctor/core` 内含 Opal(Ruby 的 JS 实现)运行时,加载后会把内建原型链改写掉
|
|
7
|
+
* (实测:`Object.getPrototypeOf(Array.prototype) !== Object.prototype`)。而 DSH 宿主用
|
|
8
|
+
* `@deepseek-ai/dsh-util-values` 的「无损 JSON」校验(snapshotJsonValue/isJsonValue)来把关
|
|
9
|
+
* 会话事件落盘,该校验会逐层核对内建原型(hasPlainArrayPrototype/hasIntrinsicObjectPrototype)。
|
|
10
|
+
* 原型链一旦被 Opal 改写,**宿主进程里所有数组都不再算合法 JSON**:
|
|
11
|
+
* · 任何 prompt 都无法写入会话日志 → 上层把错误包装成 session/agent-busy "prompt rejected"
|
|
12
|
+
* → 学生端看到的就是「提问报错 agent busy」;
|
|
13
|
+
* · 新会话的 api-session/added 事件也无法转发 → 新建会话失败。
|
|
14
|
+
* 触发时机:学生首次打开任意 `.adoc` 教案(本插件的渲染库是惰性加载的)之后,进程即"中毒"。
|
|
15
|
+
*
|
|
16
|
+
* 注意:事后恢复原型链(Object.setPrototypeOf 回退)虽然能让 DSH 校验恢复正常,但会让
|
|
17
|
+
* Opal 自身的后续调用崩溃(Ruby 方法沿被改写后的原型链查找)。所以唯一稳妥的做法是
|
|
18
|
+
* 把整个 asciidoctor 运行时挡在宿主进程之外——本文件的子进程就是这层隔离。
|
|
19
|
+
*
|
|
20
|
+
* 协议:stdin 收 JSON `{ text, options }`,stdout 回 JSON `{ ok: true, html }` 或
|
|
21
|
+
* `{ ok: false, error }`;退出码 0/1 仅作辅助,调用方以 JSON 为准。
|
|
22
|
+
*/
|
|
23
|
+
import { readFileSync } from 'node:fs';
|
|
24
|
+
import { createRequire } from 'node:module';
|
|
25
|
+
|
|
26
|
+
const require = createRequire(import.meta.url);
|
|
27
|
+
|
|
28
|
+
function readStdin() {
|
|
29
|
+
try {
|
|
30
|
+
return readFileSync(0, 'utf8');
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function main() {
|
|
38
|
+
// 容忍 UTF-8 BOM(手工用 `< file` / Get-Content 喂请求时会带上)。
|
|
39
|
+
const raw = readStdin().replace(/^\uFEFF/u, '');
|
|
40
|
+
if (raw.trim() === '')
|
|
41
|
+
return { ok: false, error: 'asciidoctor 隔离执行器:stdin 为空' };
|
|
42
|
+
let request;
|
|
43
|
+
try {
|
|
44
|
+
request = JSON.parse(raw);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return { ok: false, error: `请求不是合法 JSON:${error instanceof Error ? error.message : String(error)}` };
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const factory = require('@asciidoctor/core');
|
|
51
|
+
const api = factory();
|
|
52
|
+
const doc = api.load(String(request.text ?? ''), request.options ?? {});
|
|
53
|
+
return { ok: true, html: String(doc.convert()) };
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return { ok: false, error: error instanceof Error ? error.message : String(error) };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const result = main();
|
|
61
|
+
process.stdout.write(JSON.stringify(result));
|
|
62
|
+
process.exitCode = result.ok ? 0 : 1;
|