dsh-plugin-lookatstudy 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/lib/adoc-parser-1UxcYHid.mjs +47 -0
- package/lib/client.js +38 -14
- package/lib/client.js.map +1 -1
- package/lib/code-parser-BOOk9IWV.mjs +0 -2
- package/lib/index.d.mts +12 -5
- package/lib/index.mjs +967 -565
- package/lib/notebook-parser-ChbZBIKJ.mjs +0 -2
- package/lib/org-parser-BT5yvx9h.mjs +53 -0
- package/lib/rmd-parser-EgaMaffn.mjs +17 -0
- package/lib/rst-parser-CV93w3Sq.mjs +99 -0
- package/package.json +7 -2
- package/lib/code-parser-BOOk9IWV.mjs.map +0 -1
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs.map +0 -1
- package/lib/notebook-parser-ChbZBIKJ.mjs.map +0 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
//#region src/vendor/org-parser.ts
|
|
2
|
+
function parseOrg(orgText) {
|
|
3
|
+
const lines = orgText.split("\n");
|
|
4
|
+
const output = [];
|
|
5
|
+
let inSrcBlock = false;
|
|
6
|
+
let srcLang = "";
|
|
7
|
+
let inExampleBlock = false;
|
|
8
|
+
for (const line of lines) {
|
|
9
|
+
const beginSrc = line.match(/^\s*#\+BEGIN_SRC\s*(\w*)/i);
|
|
10
|
+
if (beginSrc) {
|
|
11
|
+
inSrcBlock = true;
|
|
12
|
+
srcLang = beginSrc[1] ?? "";
|
|
13
|
+
output.push(`\`\`\`${srcLang}`);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (/^\s*#\+END_SRC/i.test(line) && inSrcBlock) {
|
|
17
|
+
inSrcBlock = false;
|
|
18
|
+
output.push("```");
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (inSrcBlock) {
|
|
22
|
+
output.push(line);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (/^\s*#\+BEGIN_EXAMPLE/i.test(line)) {
|
|
26
|
+
inExampleBlock = true;
|
|
27
|
+
output.push("```");
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (/^\s*#\+END_EXAMPLE/i.test(line) && inExampleBlock) {
|
|
31
|
+
inExampleBlock = false;
|
|
32
|
+
output.push("```");
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (inExampleBlock) {
|
|
36
|
+
output.push(line);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (/^\s*#\+/.test(line)) continue;
|
|
40
|
+
let processed = line;
|
|
41
|
+
processed = processed.replace(/^(\*+)\s+/, (_match, stars) => {
|
|
42
|
+
return "#".repeat(stars.length) + " ";
|
|
43
|
+
});
|
|
44
|
+
processed = processed.replace(/\[\[([^\]]+)\]\[([^\]]+)\]\]/g, (_m, url, text) => `[${text}](${url})`);
|
|
45
|
+
processed = processed.replace(/\[\[([^\]]+)\]\]/g, (_m, url) => `[${url}](${url})`);
|
|
46
|
+
processed = processed.replace(/(\s|^)\*([^\s*][^*]*?)\*(?=\s|[.,;:!?)])/gm, "$1**$2**");
|
|
47
|
+
processed = processed.replace(/(\s|^)\/([^\s/][^/]*?)\/(?=\s|[.,;:!?)])/gm, "$1*$2*");
|
|
48
|
+
output.push(processed);
|
|
49
|
+
}
|
|
50
|
+
return { markdown: output.join("\n") };
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { parseOrg };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/vendor/rmd-parser.ts
|
|
2
|
+
/**
|
|
3
|
+
* 解析 .Rmd 文本,转成标准 markdown。
|
|
4
|
+
*
|
|
5
|
+
* @param rmdText .Rmd 文件内容
|
|
6
|
+
* @returns { markdown }
|
|
7
|
+
*/
|
|
8
|
+
function parseRmd(rmdText) {
|
|
9
|
+
let result = rmdText;
|
|
10
|
+
result = result.replace(/^---\n[\s\S]*?\n---\n*/, "");
|
|
11
|
+
result = result.replace(/```{(\w+)[^}]*}.*$/gm, (_match, lang) => {
|
|
12
|
+
return "```" + (lang ?? "");
|
|
13
|
+
});
|
|
14
|
+
return { markdown: result.trim() };
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { parseRmd };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//#region src/vendor/rst-parser.ts
|
|
2
|
+
/**
|
|
3
|
+
* 解析 rst 文本,转成 markdown。
|
|
4
|
+
*
|
|
5
|
+
* @param rstText .rst 文件内容
|
|
6
|
+
* @returns { markdown }
|
|
7
|
+
*/
|
|
8
|
+
function parseRst(rstText) {
|
|
9
|
+
const lines = rstText.split("\n");
|
|
10
|
+
const output = [];
|
|
11
|
+
const underlineLevels = /* @__PURE__ */ new Map();
|
|
12
|
+
let nextLevel = 1;
|
|
13
|
+
let i = 0;
|
|
14
|
+
while (i < lines.length) {
|
|
15
|
+
const line = lines[i] ?? "";
|
|
16
|
+
const nextLine = lines[i + 1] ?? "";
|
|
17
|
+
const underlineMatch = nextLine.match(/^([=\-~:*"'^+_-])\1+$/);
|
|
18
|
+
if (line.trim() && underlineMatch && (nextLine.length ?? 0) >= line.trim().length) {
|
|
19
|
+
const symbol = underlineMatch[1];
|
|
20
|
+
if (symbol && !underlineLevels.has(symbol)) {
|
|
21
|
+
underlineLevels.set(symbol, nextLevel++);
|
|
22
|
+
if (nextLevel > 6) nextLevel = 6;
|
|
23
|
+
}
|
|
24
|
+
const level = underlineLevels.get(symbol) ?? 1;
|
|
25
|
+
const hashes = "#".repeat(Math.min(level, 6));
|
|
26
|
+
output.push(`${hashes} ${line.trim()}`);
|
|
27
|
+
i += 2;
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
const codeBlockMatch = line.match(/^\.\.\s+code-block::\s*(\S*)/);
|
|
31
|
+
if (codeBlockMatch) {
|
|
32
|
+
const lang = codeBlockMatch[1] ?? "";
|
|
33
|
+
const codeLines = [];
|
|
34
|
+
i++;
|
|
35
|
+
while (i < lines.length && (lines[i] ?? "").trim() === "") i++;
|
|
36
|
+
while (i < lines.length) {
|
|
37
|
+
const codeLine = lines[i] ?? "";
|
|
38
|
+
if (codeLine.trim() === "" && i + 1 < lines.length && !(lines[i + 1] ?? "").startsWith(" ")) break;
|
|
39
|
+
if (codeLine.startsWith(" ") || codeLine.startsWith(" ") || codeLine.trim() === "") codeLines.push(codeLine.replace(/^ |^\t/, ""));
|
|
40
|
+
else break;
|
|
41
|
+
i++;
|
|
42
|
+
}
|
|
43
|
+
output.push(`\`\`\`${lang}\n${codeLines.join("\n")}\n\`\`\``);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const imageMatch = line.match(/^\.\.\s+image::\s*(\S+)/);
|
|
47
|
+
if (imageMatch) {
|
|
48
|
+
const imgPath = imageMatch[1] ?? "";
|
|
49
|
+
let alt = "";
|
|
50
|
+
let j = i + 1;
|
|
51
|
+
while (j < lines.length && (lines[j] ?? "").startsWith(" :")) {
|
|
52
|
+
const altMatch = (lines[j] ?? "").match(/:alt:\s*(.+)/);
|
|
53
|
+
if (altMatch) alt = altMatch[1]?.trim() ?? "";
|
|
54
|
+
j++;
|
|
55
|
+
}
|
|
56
|
+
output.push(alt ? `` : ``);
|
|
57
|
+
i = j;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const admonitionMatch = line.match(/^\.\.\s+(note|warning|tip|important|caution)::/);
|
|
61
|
+
if (admonitionMatch) {
|
|
62
|
+
const label = {
|
|
63
|
+
note: "📝 **注**",
|
|
64
|
+
warning: "⚠️ **警告**",
|
|
65
|
+
tip: "💡 **提示**",
|
|
66
|
+
important: "❗ **重要**",
|
|
67
|
+
caution: "⚠️ **注意**"
|
|
68
|
+
}[admonitionMatch[1] ?? ""] ?? "📝";
|
|
69
|
+
const contentLines = [];
|
|
70
|
+
i++;
|
|
71
|
+
while (i < lines.length && (lines[i] ?? "").trim() === "") i++;
|
|
72
|
+
while (i < lines.length) {
|
|
73
|
+
const contentLine = lines[i] ?? "";
|
|
74
|
+
if (contentLine.startsWith(" ") || contentLine.startsWith(" ") || contentLine.trim() === "") {
|
|
75
|
+
if (contentLine.trim()) contentLines.push(contentLine.replace(/^ |^\t/, ""));
|
|
76
|
+
} else break;
|
|
77
|
+
i++;
|
|
78
|
+
}
|
|
79
|
+
output.push(`> ${label}`);
|
|
80
|
+
for (const cl of contentLines) output.push(`> ${cl}`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (/^\.\.\s/.test(line) && !line.includes("code-block") && !line.includes("image")) {
|
|
84
|
+
i++;
|
|
85
|
+
while (i < lines.length && ((lines[i] ?? "").startsWith(" ") || (lines[i] ?? "").startsWith(" ") || (lines[i] ?? "").trim() === "")) i++;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
let processed = line.replace(/``([^`]+)``/g, "`$1`");
|
|
89
|
+
processed = processed.replace(/:\w+:`([^`]+)`/g, (_match, content) => {
|
|
90
|
+
return content.includes("`") ? content : "`" + content + "`";
|
|
91
|
+
});
|
|
92
|
+
processed = processed.replace(/:\w+:`([^`]+)`/g, "$1");
|
|
93
|
+
output.push(processed);
|
|
94
|
+
i++;
|
|
95
|
+
}
|
|
96
|
+
return { markdown: output.join("\n") };
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
99
|
+
export { parseRst };
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-lookatstudy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"packageManager": "pnpm@11.7.0",
|
|
4
5
|
"description": "Turn any markdown, local folder, or GitHub learning repo into a guided course inside DeepSeek Harness: gated skill-tree progression, BKT mastery tracking, SM-2 spaced repetition.",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "lib/index.mjs",
|
|
@@ -56,7 +57,11 @@
|
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@types/react": "~18.3.31",
|
|
59
|
-
"react": "^18.3.1"
|
|
60
|
+
"react": "^18.3.1",
|
|
61
|
+
"tsdown": "^0.22.2",
|
|
62
|
+
"tsx": "^4.22.4",
|
|
63
|
+
"@types/node": "^22.20.0",
|
|
64
|
+
"typescript": "^6.0.3"
|
|
60
65
|
},
|
|
61
66
|
"repository": {
|
|
62
67
|
"type": "git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"code-parser-BOOk9IWV.mjs","names":[],"sources":["../src/vendor/code-parser.ts"],"sourcesContent":["// Vendored from LookatStudy src/main/services/pure/code-parser.ts (MIT License, https://github.com/kaiji/LookatStudy).\n// Unmodified except this provenance header. PDF/PPTX branches resolve unavailable optional libs and are skipped per upstream try/catch.\n/**\n * 代码文件解析器 —— 把 .py/.js/.go 等源代码文件转成可学习的 markdown。\n *\n * 设计理念:\n * 代码文件本身就是教学内容(karpathy/nanoGPT、算法题解、\"learn X by building\")。\n * 提取模块级 docstring/注释块作为正文讲解,代码体用 ```lang 围栏包裹。\n * 下游 LLM (classifyFileRoles + designCourseStructure) 会基于此 markdown 判断角色和结构。\n *\n * 纯函数,便于 verify 脚本测。\n */\n\n/** 扩展名 → markdown 围栏语言标签 */\nconst EXT_LANG: Record<string, string> = {\n py: \"python\",\n js: \"javascript\",\n jsx: \"jsx\",\n ts: \"typescript\",\n tsx: \"tsx\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n go: \"go\",\n rs: \"rust\",\n java: \"java\",\n kt: \"kotlin\",\n kts: \"kotlin\",\n scala: \"scala\",\n c: \"c\",\n h: \"c\",\n cpp: \"cpp\",\n cc: \"cpp\",\n cxx: \"cpp\",\n hpp: \"cpp\",\n cs: \"csharp\",\n rb: \"ruby\",\n php: \"php\",\n swift: \"swift\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n ps1: \"powershell\",\n lua: \"lua\",\n r: \"r\",\n jl: \"julia\",\n dart: \"dart\",\n clj: \"clojure\",\n ex: \"elixir\",\n exs: \"elixir\",\n erl: \"erlang\",\n hs: \"haskell\",\n ml: \"ocaml\",\n fs: \"fsharp\",\n sql: \"sql\",\n vim: \"vim\",\n pl: \"perl\",\n elm: \"elm\",\n graphql: \"graphql\",\n proto: \"protobuf\",\n tf: \"hcl\",\n dockerfile: \"dockerfile\",\n};\n\n/** 获取扩展名对应的围栏语言标签 */\nexport function codeFenceLang(ext: string): string {\n return EXT_LANG[ext.toLowerCase()] ?? \"\";\n}\n\n/**\n * 提取文件开头的文档注释/docstring 作为正文讲解。\n *\n * 支持的注释风格:\n * - Python: \"\"\"...\"\"\" 或 '''...'''(模块级 docstring)\n * - JS/TS/Java/Go/Rust/C: /** ... *\\/ 块注释(连续多行)\n * - Ruby: =begin ... =end\n * - 通用: 连续的 // 或 # 注释行(开头至少 3 行才算文档)\n *\n * @returns { doc: 提取的文档文字(已去注释符号,空则 \"\"), code: 完整原始代码 }\n */\nexport function extractLeadingDoc(\n raw: string,\n ext: string,\n): { doc: string; code: string } {\n const lang = EXT_LANG[ext.toLowerCase()] ?? \"\";\n const lines = raw.split(/\\r?\\n/);\n\n // Python: \"\"\"...\"\"\" 或 '''...'''\n if (lang === \"python\") {\n const trimmed = raw.trimStart();\n if (trimmed.startsWith('\"\"\"') || trimmed.startsWith(\"'''\")) {\n const quote = trimmed.slice(0, 3);\n const endIdx = trimmed.indexOf(quote, 3);\n if (endIdx > 3) {\n const docText = trimmed.slice(3, endIdx).trim();\n return { doc: docText, code: raw };\n }\n }\n }\n\n // JS/TS/Java/C/Go/Rust/PHP/Swift/Scala/Kotlin: /** ... */\n if (/\\*\\/\\s*$/.test(raw.slice(0, 2000).trimStart().split(\"\\n\")[0] ?? \"\") === false) {\n // 先检查开头是否有块注释\n const blockMatch = raw.match(/^\\s*\\/\\*[\\s\\S]*?\\*\\//);\n if (blockMatch && blockMatch.index !== undefined && blockMatch.index < 5) {\n const block = blockMatch[0];\n // 只当块注释看起来像文档(含文字,不是许可证)时提取\n const inner = block\n .replace(/^\\/\\*+/, \"\")\n .replace(/\\*+\\/$/, \"\")\n .split(\"\\n\")\n .map((l) => l.replace(/^\\s*\\*\\s?/, \"\").trim())\n .join(\"\\n\")\n .trim();\n // 过滤掉纯许可证/版权块(这些不是教学内容)\n const isLicense = /copyright|licensed|mit license|apache license|license:/i.test(inner);\n if (inner.length > 30 && !isLicense) {\n return { doc: inner, code: raw };\n }\n }\n }\n\n // 通用: 开头连续 # 或 // 注释行(至少 3 行才算文档块)\n const commentChar = lang === \"python\" || lang === \"ruby\" || lang === \"r\" || lang === \"elixir\" || lang === \"bash\"\n ? \"#\"\n : lang === \"lua\"\n ? \"--\"\n : null;\n\n if (commentChar) {\n const commentLines: string[] = [];\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith(commentChar)) {\n commentLines.push(trimmed.slice(commentChar.length).trim());\n } else if (trimmed === \"\" && commentLines.length > 0) {\n continue; // 允许注释块中间的空行\n } else {\n break;\n }\n }\n if (commentLines.length >= 3) {\n const docText = commentLines.join(\"\\n\").trim();\n const isLicense = /copyright|licensed|mit license|apache license|license:/i.test(docText);\n if (docText.length > 20 && !isLicense) {\n return { doc: docText, code: raw };\n }\n }\n }\n\n // 无文档注释\n return { doc: \"\", code: raw };\n}\n\n/**\n * 把代码文件转成 markdown。\n * 有 docstring → 正文 + 代码围栏;无 → 纯代码围栏。\n */\nexport function parseCode(raw: string, ext: string): { markdown: string } {\n const lang = EXT_LANG[ext.toLowerCase()] ?? \"\";\n const { doc, code } = extractLeadingDoc(raw, ext);\n if (doc) {\n return { markdown: `${doc}\\n\\n\\`\\`\\`${lang}\\n${code}\\n\\`\\`\\`` };\n }\n return { markdown: `\\`\\`\\`${lang}\\n${raw}\\n\\`\\`\\`` };\n}\n"],"mappings":"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"}
|
package/lib/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.ts","../src/index.ts"],"mappings":";;;;;KAQY,SAAA;;UAGK,MAAA;EAAA;;;;;;EAOf,IAAA,EAAM,SAAS;EAKN;AAAA;AAIX;;EAJE,SAAA;AAAA;AAI2B;AAAA,cAAhB,MAAA,EAAQ,CAAC,CAAC,MAAA;;;cCTV,IAAA;AAAA,cACA,MAAA;;;;;;ADIF;iBCsGK,KAAA,CAAM,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,MAAM"}
|