[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-96711":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":17,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":10,"trendingCount":16,"starSnapshotCount":16,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},96711,"Study-Mate","Miaotofu01\u002FStudy-Mate","Miaotofu01","你的AI学习搭档：定路线、讲知识、做项目，边学边做，学透一门科目","",null,"Python",235,10,108,4,0,127,381,93.12,"MIT License",false,"main",true,[25,26,27,28,29,30,31,32,33],"ai-tutor","deepseek","education","learning-agents","self-directed-learning","self-study","self-study-learning","self-study-tools","spaced-repetition","2026-09-25 04:01:33","\u003Cp align=\"center\">\u003Cimg src=\"docs\u002Fimages\u002Flogo.png\" width=\"120\" alt=\"StudyMate\">\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">StudyMate\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\u003Cb>你的AI学习搭档：定计划、讲知识、做项目，学透一门科目\u003C\u002Fb>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDSH-%E5%AD%A6%E4%B9%A0%E6%A8%A1%E5%BC%8F%E9%A2%84%E8%AE%BE-1c5a40\" alt=\"DSH 学习模式预设\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.9%2B-3776ab\" alt=\"Python\">\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002FMiaotofu01\u002FStudy-Mate\" alt=\"MIT License\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Csub> StudyMate 是面向数学与计算机科目学习的助手，原则是「learn with doing」\u003C\u002Fsub>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Ca href=\"#快速开始\">快速开始\u003C\u002Fa> · \u003Ca href=\"#它是什么\">它是什么\u003C\u002Fa> · \u003Ca href=\"#核心功能\">核心功能\u003C\u002Fa> · \u003Ca href=\"#常见问题\">常见问题\u003C\u002Fa> · \u003Ca href=\"docs\u002F使用说明.md\">使用说明\u003C\u002Fa>\u003C\u002Fp>\n\n\u003Cp align=\"center\">\u003Cimg src=\"docs\u002Fimages\u002Ftaitou.png\" width=\"860\" alt=\"StudyMate：看板娘 + 手写体品牌字 + 覆盖科目（线代／微积分／概率论／C++／Python／机器学习／深度学习）+「任何科目，一站式搞定 \u002F Learn With Doing」\">\u003C\u002Fp>\n\n## 前言\n\n本项目原先是vibe出来给自己用的一个小项目，没想到有这么多人喜欢。但是vibe出来的东西有很多的问题，包括但不限于「文档过于臃肿且充满AI味、可读性极差」、「海量且无用的防御性代码」、「混乱的功能模块」。\n\n虽然现在跑起来的效果也不差，但是跟我理想中的效果还是有很大差距\n\n我觉得这样的东西对不起这么多的信任与star，我会直视这些问题，并且人工修改审查每一个文件，在未来的更新维护中给大家带来更好的体验，感谢大家的使用与支持，有任何建议都可以提个issue，本项目将长期维护。\n\n## 快速开始\n\n### DeepSeek Harness\n\n**DSH 依赖**：DSH 0.1.5-rc.2+、Node.js 22 系列或 24+、Python 3.9+、PyYAML。\n\n```bash\nnpx -y @yunmiao\u002Fstudymate@latest install\ndsh web\n```\n\n**更新**：再次运行上述 `npx` 命令，然后重启 DSH。\n\n- **第一次学习**：新建会话时选「学习模式」，说一句「我想学 [某个科目]」。\n- **还没想好学什么**：在学习对话里说「我不知道学什么，帮我选方向」，可选探索后再决定是否开课；已有明确科目或恢复学习直接走原流程。\n- **学习工作区默认在 `~\u002FStudyMate`，所有课件与记忆均存放在工作区**；已有配置会沿用。\n- 第一次生成课程后，课程主页在工作区目录 `\u003Cworkspace>\u002Findex.html`，是未来所有课件的入口\n\n指定工作区、依赖安装和换机器续学见 [安装说明](docs\u002F安装.md)。\n\n### Codex 和 ChatGPT Work\n\n从 [最新 Release](https:\u002F\u002Fgithub.com\u002FMiaotofu01\u002FStudy-Mate\u002Freleases\u002Flatest) 下载 **studymate-openai.zip**，通过 Codex\u002FChatGPT 提供的插件导入入口导入（详见 [导入说明](docs\u002FCodex与ChatGPT.md)）。\n\n**更新时下载最新版 ZIP，找到已有的插件链接，在浏览器中打开，选择上传新版本**\n\n## 它是什么\n\nStudyMate 是一套**数学\u002F计算机学习工作流、SKILL 与 HTML 课件引擎**，支持 DSH（DeepSeek Harness）的「学习模式」预设，也可打包为 Codex 和 ChatGPT Work 插件。它按需组织收集资料、采图、课程设计、讲解、练习评估五个角色；宿主支持时可委派给子代理，否则依次完成各角色工作。\n\n- **课程组成：讲解|练习|项目实操**：每门课一份大纲——知识点按前置依赖排成路线图，每个知识点标课的类型「概念课 | 实操课 | 实验课」（大纲里写 `概念`／`实操`／`实验`）。学习进度落在文件里，每次新对话可继承已有进度。\n- **跨科目共享记忆**：记住你的现有水平、哪种讲法有效、常见卡点，下一门课不用重新自我介绍。\n\n## 为什么用它\n\n| 常见做法         | 卡在哪                                           | StudyMate 的做法                                                                     |\n| ---------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------ |\n| 直接跟 AI 聊天学 | 会话一长上下文就吃不下；聊完不留痕，下次从零开始 | 信息与偏好由记忆文件保存；每次会话只带相关记忆、上下文短；课件是教科书式的讲解与配图 |\n| 看视频课 \u002F 网课  | 质量参差不齐；付费；无法跟随前沿发展的节奏       | 讲解方式定制化；收集最新的资料与标准；完全开源                                       |\n\n\n## 核心功能\n\n**课程总览与大纲路线图**：总览页列全部科目与当前节点，点进去是那门课的知识点路线图，按依赖分层排开、按状态着色，点节点原地展开课件子卡片。\n\n\u003Cimg src=\"docs\u002Fimages\u002Fpreview-index.png\" width=\"640\" alt=\"路线图示例\">\n\n**课件是学习的主载体**：经典教材的讲解风格，丰富的配图，定制化的题目与项目目标。\n\n\u003Cimg src=\"docs\u002Fimages\u002Fpreview-lesson.png\" width=\"640\" alt=\"课件示例\">\n\n想翻一遍真实产出：仓库里的 [`examples\u002F`](examples\u002F) 是一份完整示例工作区（**线性代数** + **计算机网络**），页面已经渲染入库——clone 下来用浏览器打开 `examples\u002Findex.html`，就能一路点到科目主页与课件。\n\n\n## 用法示例\n\n- **「我不知道学什么，帮我选方向」** → 一次聊一个问题，可跳过或先看建议；选定方向后补齐开课信息，确认后接回建课与首课流程（见 [可选方向探索](docs\u002F使用说明.md#可选先探索学习方向)）。\n- **「我想学 C++ 打竞赛」** → 先盘问目的\u002F程度\u002F项目\u002F实验方式，再产出大纲路线图与科目主页，开第一课。\n- **贴一段看不懂的课文 + 「这里没懂」** → 主教练当场答一小段，记一条档案，送你回原位接着读。\n- **「考考我」** → 现场出题 + 按可运行证据核验，给一份评估记录并更新进度。\n- **「太简单了 \u002F 没听懂」** → 换讲法（加边界与反例，或降一层抽象），并把这条偏好记进共享记忆。\n  \n\u003Cimg src=\"docs\u002Fimages\u002Fpreview-chat.png\" width=\"640\" alt=\"对话示例\">\n\n## 配置与维护\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>脚本：主页生成 + 课件渲染 + 四道校验\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\npython3 scripts\u002Fgen_home.py                    # 生成根主页 + 全部科目主页（默认读配置里的 workspace）\npython3 scripts\u002Fpreview_templates.py --open    # 用假数据渲染主页模板到 .preview\u002F，只看样式与交互\npython3 scripts\u002Frender_lesson.py \u003Csubject_path> \u003C节点id>   # 内容文件 + 题库 → 课件 HTML（--check 只校验不写盘）\npython3 scripts\u002Fcheck_curriculum.py examples\u002F.learning\u002Fsubjects\u002Fcomputer-networks\u002Fcurriculum.yaml\npython3 scripts\u002Fcheck_lesson.py examples\u002F.learning\u002Fsubjects\u002Flinear-algebra\u002Flessons\u002F0001-vector.space.html --subject examples\u002F.learning\u002Fsubjects\u002Flinear-algebra --node vector.space\npython3 scripts\u002Fcheck_pool.py \u003C你的科目目录>    # 图片池：索引 pool.md 与 assets\u002Fimg\u002Fpool\u002F 对不对得上\npython3 scripts\u002Fcheck_skill.py .dsh\u002Fskills\u002F*    # 技能 frontmatter（改过技能就跑一次）\nnpm test                                     # 与 Actions 共用的功能回归\n\n# 换成你自己的科目：--subject 给科目目录，--node 给该课件对应的节点 id；大纲校验可一次传多个 curriculum.yaml\n```\n\n`check_lesson.py` 只阻断工程与结构缺项（文件名与编号、课件归属、共享层引用、**本地引用可达**、题目结构与属性写法、题目位置标记残留、主题开关；`kind` 为 `实操\u002F实验` 时还要求 lab 与产物齐全），内容风格类问题只提示；其中「题目位置标记残留」只可能来自手写时代的老课件——渲染产物里不会有标记。`check_pool.py` 校验图片池：索引表头七列、文件名合规、来源 URL 与许可非空、单张 ≤500 KB——还没建过图片池的科目没有 `assets\u002Fimg\u002Fpool.md`，它会报一行「索引不存在」并退出 1，那是图片库还没建，不是命令坏了。退出码：`check_lesson.py` \u002F `check_curriculum.py` \u002F `check_pool.py` 有阻断项即 1，`gen_home.py` 占位符缺失或产物断链即 1。\n\n`npm test` 不需要真实 DSH 或浏览器；测试自己造临时科目，不碰学习工作区。提示词与模板静态约束、真实 DSH 和浏览器检查按需单独运行，见 [测试说明](scripts\u002Ftests\u002FREADME.md)。\n\n\u003C\u002Fdetails>\n\n## 项目结构\n\n```text\nStudyMate\u002F                     ← 本仓库：系统源码（引擎），学习时只读\n├── bin\u002Fstudymate.mjs          # npx 安装入口 + OpenAI 插件构建入口\n├── .dsh\u002Fskills\u002F               # 12 个技能：总控 learning-system + 5 个角色 + 6 个协议\n│   ├── learning-system\u002F       #   总控（主教练）：开场、盘问、调度、档案\n│   ├── resource-scout\u002F        #   角色：收集资料（权威教材与官方文档 → 资源清单）\n│   ├── image-scout\u002F           #   角色：采图（抓网页现成的图 → 科目图片库与索引）\n│   ├── curriculum-designer\u002F   #   角色：课程设计（大纲 \u002F 实验课节点）\n│   ├── learning-coach\u002F        #   角色：讲解（写课件内容）\n│   ├── practice-evaluator\u002F    #   角色：出题与评估（题目唯一 owner）\n│   ├── learning-discovery\u002F    #   协议：可选方向探索，由总控按需加载\n│   ├── lesson-design\u002F         #   规范：课件唯一约束来源\n│   ├── layered-practice\u002F      #   规范：四层练习与题型\n│   ├── evidence-check\u002F        #   规范：完成证据核验\n│   ├── local-qa\u002F              #   规范：局部提问怎么答\n│   └── record-keeping\u002F        #   规范：学习状态读写规则\n├── preset\u002Flearning\u002F           # 「学习模式」预设源（npx 安装到 ~\u002F.dsh\u002F）\n├── schemas\u002F                   # 5 份数据结构：大纲 \u002F 进度 \u002F 评估 \u002F 会话摘要 \u002F 科目\n├── templates\u002F                 # 页面骨架（主页、科目页、课件壳）与前端资源 assets\u002F\n├── scripts\u002F                   # 主页生成 + 课件渲染器 + 四道校验检查（用法见上）+ tests\u002F 回归测试\n├── dist\u002Fstudymate\u002F            # build:plugin 生成的 OpenAI 插件，含适配后的 12 个技能（不入库）\n├── examples\u002F                  # 示例学习工作区：线性代数 + 计算机网络，页面已生成，clone 即可点开\n├── docs\u002F                      # 使用说明、课件内容格式、设计方案、工程约束、文件归属、方向探索指南与验收、docs\u002Fimages\u002F 截图\n└── workspace\u002F                 # 可选的本地学习工作区（已被 .gitignore 忽略）\n```\n\nDSH 安装到 `~\u002F.dsh\u002Fstudymate\u002Fengine\u002F`，预设与工作区配置也由安装器管理。学习数据默认位于独立的 `~\u002FStudyMate`，无需保留源码仓库；详见 [安装说明](docs\u002F安装.md)。\n\n学习工作区里面长什么样（科目文件夹、课件、lab、档案、课型与题型、模板与生成器的契约），见 [使用说明 §六](docs\u002F使用说明.md#六学习数据存在哪)。\n\n## 常见问题\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>装完没有主页 \u002F 直接打开 \u003Ccode>templates\u002F\u003C\u002Fcode> 里的 HTML 没样式\u003C\u002Fb>\u003C\u002Fsummary>\n\n主页要从学习数据生成：跑 `python3 scripts\u002Fgen_home.py` 再看 `\u003Cworkspace>\u002Findex.html`（还没科目时是空状态页）。`templates\u002F*.html` 引用的是生成后的工作区相对路径，单独打开只有裸 HTML，这是设计如此。\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>已装 Python，但提示缺少 PyYAML\u003C\u002Fb>\u003C\u002Fsummary>\n\nPython 不自带 PyYAML。请在系统终端复制安装器给出的依赖安装命令，使用它检测到的同一个解释器，完成后重试原 `npx` 命令并保留参数。看到 `>>>` 或提示缺少 `pip` 时，按 [依赖安装说明](docs\u002F安装.md#dsh) 处理。\n\n完整课件校验还需要 `jsonschema`；缺少它时，大纲检查会跳过 schema 校验。\n\u003C\u002Fdetails>\n\n更多问题（手改 YAML 的坑、大纲改节点后指针为什么会错、能不能离线）见 [使用说明 §八 常见问题](docs\u002F使用说明.md#八常见问题)。\n\n## 贡献 \u002F License\n\n- **项目交流群**(QQ)：161914370\n- **参与开发**：[CONTRIBUTING.md](CONTRIBUTING.md)（改哪块先读哪份、本地怎么验、提交信息规范）\n- **变更日志**：[CHANGELOG.md](CHANGELOG.md)\n- **文档**：[使用说明](docs\u002F使用说明.md)（日常怎么用、课型与题型、检查与档案规则）· [Codex 与 ChatGPT](docs\u002FCodex与ChatGPT.md)（OpenAI 插件构建、安装与工作区）· [课件内容格式](docs\u002F课件内容格式.md)（内容文件与题目位置的语法）· [文件归属](docs\u002F文件归属.md)（代称 ↔ 路径 ↔ 维护者）· [设计方案](docs\u002F设计方案.md)（产品视角）· [工程约束](docs\u002F工程约束.md)（目录约定、占位符契约、脚本一览、技术选型）· [模板说明](templates\u002FREADME.md) · [前端资源契约](templates\u002Fassets\u002FREADME.md)\n\n### 提改动前先跑这几条\n\n运行 `npm test`，再按修改范围补充 [配置与维护](#配置与维护) 中的校验。其他测试入口见 [测试说明](scripts\u002Ftests\u002FREADME.md)。\n\n### License\n\nMIT（见 [LICENSE](LICENSE)，版权 Cattofu）。\n\n## Star 趋势\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#miaotofu01\u002Fstudy-mate&Date\">\n    \u003Cpicture>\n      \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=miaotofu01\u002Fstudy-mate&type=date&theme=dark\" \u002F>\n      \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=miaotofu01\u002Fstudy-mate&type=date\" \u002F>\n      \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=miaotofu01\u002Fstudy-mate&type=date\" \u002F>\n    \u003C\u002Fpicture>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\n\n",2,"2026-09-24 02:30:07","CREATED_QUERY"]