[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82851":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":14,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":15,"rankGlobal":8,"rankLanguage":8,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":13,"starSnapshotCount":13,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},82851,"course-learning-workspace","vannyben7\u002Fcourse-learning-workspace","vannyben7",null,"Python",244,3,1,0,150,1.81,"MIT License",false,"main",true,[],"2026-06-12 02:04:28","# Course Learning Workspace\n\nEnglish version follows the Chinese version.\n\n## 中文说明\n\nCourse Learning Workspace 是一个本地优先的课程学习空间。它面向学生和教学团队，把课程资料、阅读、笔记、批注、复习和基于来源的学习辅助放在同一个工作区里。\n\n这个项目不是写作代工工具，也不是论文生成器。它的核心目标是帮助学生围绕已经导入的课程资料进行理解、整理、追问和复习。\n\n### 项目适合什么场景\n\n- 学生把一门课的讲义、PPT、论文、阅读材料放进一个本地课程空间。\n- 阅读 PDF、PPT、Word、Markdown、纯文本、CSV 等课程文件。\n- 在阅读时写笔记、做批注，并把 AI 回答保存为阅读笔记。\n- 让学习辅助概括当前文件，说明当前文件在整门课程中的位置，或回答课程相关问题。\n- 在需要时启用互联网搜索，把外部信息作为背景资料，而不是当成课程要求。\n- 教学团队或开发者基于一个干净的本地原型继续扩展课程学习系统。\n\n### 当前能力\n\n- 本地课程仪表盘和课程创建流程。\n- 浏览器上传课程文件，不需要学生手动粘贴本机路径。\n- 学习单元管理，可以把资料移动到不同单元。\n- 课程阅读器，支持文本提取和 PDF\u002FOffice 预览。\n- 阅读笔记、文字批注、定位批注。\n- 当前文件概括。\n- 当前文件与整门课程的关系说明。\n- 课程资料问答和可选互联网搜索问答。\n- 来源引用展示。\n- 将 AI 的问题和回答保存为笔记。\n- Docker 部署和本机 Python 直接运行。\n\n### 仓库结构\n\n```text\ndocs\u002F\n  migration\u002F         迁移说明\n  redesign\u002F          产品与界面设计文档\n  school-facing\u002F     面向教学团队的定位说明\n\nnext\u002F\n  course-learning-workspace\u002F\n    主应用、Docker 配置、浏览器界面、测试\n\nscripts\u002F\n  docker-start.sh         使用 Docker 构建并启动应用\n  docker-stop.sh          停止 Docker 服务\n  docker-status.sh        查看 Docker 服务状态\n  local-start.sh          在本机 Python 环境直接启动\n  clean-local-data.sh     删除本地生成数据和缓存\n  check.sh                运行语法检查和测试\n```\n\n本仓库不会提交本地课程文件、提取文本、预览图、内部交接文档、虚拟环境、浏览器自动化缓存、`.env` 文件或 API key。\n\n### 使用 Docker 启动\n\n前置条件：\n\n- Docker Desktop，或 Docker Engine + Compose v2。\n\n从仓库根目录运行：\n\n```bash\nscripts\u002Fdocker-start.sh\n```\n\n然后打开：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8780\n```\n\n停止服务：\n\n```bash\nscripts\u002Fdocker-stop.sh\n```\n\n查看状态：\n\n```bash\nscripts\u002Fdocker-status.sh\n```\n\n默认端口是 `8780`。如果要换成本机其他端口：\n\n```bash\nCLW_HOST_PORT=8888 scripts\u002Fdocker-start.sh\n```\n\n默认只绑定 `127.0.0.1`。如果要在可信局域网中访问：\n\n```bash\nCLW_BIND_IP=0.0.0.0 CLW_ALLOW_NETWORK=1 scripts\u002Fdocker-start.sh\n```\n\n请只在可信网络中这样做，因为课程文件和笔记属于个人学习数据。\n\n### 本机直接运行\n\n如果你不想使用 Docker，可以直接运行：\n\n```bash\nscripts\u002Flocal-start.sh\n```\n\n然后打开：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8780\n```\n\n该脚本会创建 `.venv\u002F`，安装 `next\u002Fcourse-learning-workspace\u002Frequirements.txt`，并启动 Python 服务。\n\n本机直接运行时，如需完整 PDF 和 Office 预览，请在系统中安装：\n\n- Poppler：提供 `pdftotext`、`pdftoppm`、`pdfinfo`\n- LibreOffice：提供 `soffice`\n\nDocker 镜像已经包含这些预览工具。\n\n### 配置 AI Provider\n\n应用默认可以在本地引用模式下运行，不需要 API key。\n\n如需启用云端模型，可以复制示例配置：\n\n```bash\ncp next\u002Fcourse-learning-workspace\u002F.env.example next\u002Fcourse-learning-workspace\u002F.env\n```\n\n然后只填写你需要的项目。`.env` 已被 Git 忽略，不要提交。\n\n也可以在网页右上角的设置中选择 Provider。当前界面支持：\n\n- DeepSeek\n- OpenAI\n- Google Gemini\n- OpenRouter\n- Kimi \u002F Moonshot\n- 自定义 OpenAI-compatible endpoint\n\n网页设置中的 API key 只保存在当前浏览器的 local storage。后端的课程工作区状态不会保存 API key。\n\n### 互联网搜索\n\n互联网搜索默认关闭：\n\n```text\nCLW_WEB_SEARCH_ENABLED=0\n```\n\n如果你确实需要让学习辅助检索外部背景资料，可以启动时显式开启：\n\n```bash\nCLW_WEB_SEARCH_ENABLED=1 scripts\u002Fdocker-start.sh\n```\n\n外部搜索结果只应被理解为背景资料，不代表课程资料、教师要求或作业标准。\n\n### 本地数据与隐私\n\n本地生成数据默认位于：\n\n```text\nnext\u002Fcourse-learning-workspace\u002Fdata\u002F\n```\n\n这里可能包含：\n\n- 上传的课程资料副本\n- 提取后的文本\n- 预览图或转换结果\n- 阅读笔记\n- 批注\n- NotebookLM 相关授权状态或缓存\n- 运行时索引和工作区状态\n\n该目录被 Git 忽略，不会进入公开仓库。\n\n删除本地生成数据和仓库内缓存：\n\n```bash\nscripts\u002Fclean-local-data.sh --yes\n```\n\n这是一个破坏性操作，只处理仓库内约定的本地生成数据和缓存路径。\n\n### 开发与检查\n\n运行检查：\n\n```bash\nscripts\u002Fcheck.sh\n```\n\n当前检查包括：\n\n- Python 代码编译检查\n- 浏览器 JavaScript 语法检查\n- 课程资料工作流测试\n\n### 常见问题\n\n**打开哪个地址？**\n\n默认统一使用：\n\n```text\nhttp:\u002F\u002F127.0.0.1:8780\n```\n\n**课程文件会被上传到 GitHub 吗？**\n\n不会。课程数据目录、缓存和 `.env` 文件都被 `.gitignore` 和 `.dockerignore` 排除。\n\n**没有 API key 可以用吗？**\n\n可以。系统可以在本地引用模式下运行；云端 AI provider 是可选能力。\n\n**Docker 和本机运行有什么区别？**\n\nDocker 更容易复现，并且内置 PDF\u002FOffice 预览依赖。本机运行更方便调试，但你需要自己安装部分系统工具。\n\n**可以部署到服务器吗？**\n\n可以，但默认配置是本机学习空间。对外部署前，请先确认网络访问控制、数据目录权限、API key 管理和备份策略。\n\n### License\n\nThis project is released under the MIT License. See [LICENSE](LICENSE).\n\n---\n\n## English\n\nCourse Learning Workspace is a local-first study workspace for students and teaching teams. It brings course materials, reading, notes, annotations, review, and source-grounded learning assistance into one place.\n\nThis project is not an essay-writing service or an assignment generator. Its purpose is to help students understand, organize, question, and review the course materials they have imported.\n\n### What It Is For\n\n- Students can put lecture slides, PDFs, readings, handouts, and notes for one course into a local workspace.\n- Course files can be read in a browser-based reader.\n- Students can write notes and annotations while reading.\n- AI answers can be saved directly as reading notes.\n- The assistant can summarize the current file, explain how it fits into the course, or answer course-related questions.\n- Optional Internet search can be enabled for external background context.\n- Teaching teams and developers can extend the project as a clean local prototype.\n\n### Current Features\n\n- Local course dashboard and course creation flow.\n- Browser-based file upload.\n- Learning unit management.\n- Reader for extracted course text and rendered previews.\n- Reading notes, text annotations, and location annotations.\n- Current-file summaries.\n- Course-position summaries.\n- Course-material Q&A and optional Internet-search Q&A.\n- Citation display.\n- Save AI questions and answers as notes.\n- Docker deployment and direct local Python runtime.\n\n### Repository Layout\n\n```text\ndocs\u002F\n  migration\u002F         Migration notes\n  redesign\u002F          Product and interface design notes\n  school-facing\u002F     Teaching-team positioning notes\n\nnext\u002F\n  course-learning-workspace\u002F\n    Main application, Docker config, browser UI, and tests\n\nscripts\u002F\n  docker-start.sh         Build and run the app with Docker\n  docker-stop.sh          Stop the Docker service\n  docker-status.sh        Show Docker service status\n  local-start.sh          Run directly with a local Python environment\n  clean-local-data.sh     Remove local generated data and caches\n  check.sh                Run syntax checks and tests\n```\n\nThe public repository intentionally excludes local course files, extracted text, rendered previews, internal handoff notes, virtual environments, browser automation caches, `.env` files, and API keys.\n\n### Run With Docker\n\nPrerequisites:\n\n- Docker Desktop, or Docker Engine with Compose v2.\n\nFrom the repository root:\n\n```bash\nscripts\u002Fdocker-start.sh\n```\n\nThen open:\n\n```text\nhttp:\u002F\u002F127.0.0.1:8780\n```\n\nStop the service:\n\n```bash\nscripts\u002Fdocker-stop.sh\n```\n\nCheck status:\n\n```bash\nscripts\u002Fdocker-status.sh\n```\n\nThe default host port is `8780`. To use another local port:\n\n```bash\nCLW_HOST_PORT=8888 scripts\u002Fdocker-start.sh\n```\n\nThe default binding is local-only. To expose the app on a trusted local network:\n\n```bash\nCLW_BIND_IP=0.0.0.0 CLW_ALLOW_NETWORK=1 scripts\u002Fdocker-start.sh\n```\n\nOnly do this on a trusted network because course files and notes are personal study data.\n\n### Run Directly On Your Computer\n\nIf you do not want Docker, run:\n\n```bash\nscripts\u002Flocal-start.sh\n```\n\nThen open:\n\n```text\nhttp:\u002F\u002F127.0.0.1:8780\n```\n\nThe script creates `.venv\u002F`, installs `next\u002Fcourse-learning-workspace\u002Frequirements.txt`, and starts the Python server.\n\nFor full PDF and Office previews outside Docker, install:\n\n- Poppler: `pdftotext`, `pdftoppm`, `pdfinfo`\n- LibreOffice: `soffice`\n\nThe Docker image already includes these preview dependencies.\n\n### Configure AI Providers\n\nThe app runs without an API key in local citation mode.\n\nTo enable a cloud model, copy the example environment file:\n\n```bash\ncp next\u002Fcourse-learning-workspace\u002F.env.example next\u002Fcourse-learning-workspace\u002F.env\n```\n\nFill only the values you need. `.env` files are ignored by Git and should not be committed.\n\nYou can also choose a provider in the browser Settings page. The current interface supports:\n\n- DeepSeek\n- OpenAI\n- Google Gemini\n- OpenRouter\n- Kimi \u002F Moonshot\n- Custom OpenAI-compatible endpoint\n\nAPI keys entered in the Settings page are stored only in the current browser's local storage. They are not persisted in the backend workspace state.\n\n### Internet Search\n\nInternet search is disabled by default:\n\n```text\nCLW_WEB_SEARCH_ENABLED=0\n```\n\nEnable it explicitly when you want the assistant to fetch external background sources:\n\n```bash\nCLW_WEB_SEARCH_ENABLED=1 scripts\u002Fdocker-start.sh\n```\n\nExternal search results should be treated as background context only. They do not represent course materials, teacher instructions, or assignment requirements.\n\n### Local Data And Privacy\n\nGenerated local data is stored under:\n\n```text\nnext\u002Fcourse-learning-workspace\u002Fdata\u002F\n```\n\nIt may contain:\n\n- Uploaded course-material copies\n- Extracted text\n- Rendered previews or conversion outputs\n- Reading notes\n- Annotations\n- NotebookLM-related auth state or caches\n- Runtime indexes and workspace state\n\nThis directory is ignored by Git and is not part of the public repository.\n\nTo remove generated data and repository-local caches:\n\n```bash\nscripts\u002Fclean-local-data.sh --yes\n```\n\nThis is destructive and only targets the repository-local generated data and cache paths.\n\n### Development And Checks\n\nRun:\n\n```bash\nscripts\u002Fcheck.sh\n```\n\nThe current check covers:\n\n- Python compilation checks\n- Browser JavaScript syntax checks\n- Course-material workflow tests\n\n### FAQ\n\n**Which URL should I open?**\n\nUse the canonical local URL:\n\n```text\nhttp:\u002F\u002F127.0.0.1:8780\n```\n\n**Will course files be pushed to GitHub?**\n\nNo. The course data directory, generated caches, and `.env` files are ignored.\n\n**Can I use it without an API key?**\n\nYes. The app can run in local citation mode. Cloud AI providers are optional.\n\n**What is the difference between Docker and local runtime?**\n\nDocker is easier to reproduce and includes PDF\u002FOffice preview dependencies. The direct local runtime is convenient for development but requires some system tools to be installed separately.\n\n**Can this be deployed on a server?**\n\nYes, but the default configuration is designed for a local study workspace. Before exposing it publicly, review network access control, data directory permissions, API-key handling, and backups.\n\n### License\n\nThis project is released under the MIT License. See [LICENSE](LICENSE).\n","Course Learning Workspace 是一个面向学生和教学团队的本地优先课程学习空间，旨在帮助用户在一个统一的工作区内管理课程资料、阅读材料、笔记批注以及复习。其核心功能包括支持多种格式文件（如PDF、PPT等）的上传与阅读、在文档中做笔记及批注，并能够利用AI技术生成文件摘要或回答课程相关问题。此外，它还允许根据需要启用互联网搜索以获取额外背景信息。该项目适用于希望集中管理和深入理解特定课程所有相关材料的学习者，同时也为教学团队提供了一个可扩展的基础平台用于开发更复杂的教育工具。基于Python开发，可通过Docker轻松部署或直接在本地运行，确保了灵活性与易用性。",2,"2026-06-11 04:09:25","CREATED_QUERY"]