[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81329":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":17,"hasPages":17,"topics":19,"createdAt":9,"pushedAt":9,"updatedAt":20,"readmeContent":21,"aiSummary":22,"trendingCount":14,"starSnapshotCount":14,"syncStatus":12,"lastSyncTime":23,"discoverSource":24},81329,"fh_maic","ZYFUP\u002Ffh_maic","ZYFUP","方湖 MAIC 课堂平台 - 基于 Next.js 的 AI 课堂教学系统",null,"TypeScript",42,2,43,0,1.43,"GNU Affero General Public License v3.0",false,"main",[],"2026-06-12 02:04:13","\u003C!--\n  方湖 MAIC — AI Classroom Platform based on OpenMAIC\n\n  ⚠️ AGPL-3.0 Compliance Notice:\n  This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).\n  If you modify and redistribute this software, you MUST:\n    1. Clearly document ALL modifications (新增\u002F修改\u002F删除的代码、配置、依赖等)\n    2. Provide the complete modified source code\n    3. Prominently display this notice and original copyright in all modified versions\n    4. Keep the same open source license (AGPL-3.0)\n\n  Any \"closed-source fork\" that does not disclose modification details violates AGPL-3.0.\n  For commercial licensing, contact: thu_maic@tsinghua.edu.cn\n-->\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"public\u002Flogo-horizontal.png\" alt=\"方湖 MAIC\" width=\"420\"\u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  AI Classroom Platform based on OpenMAIC — One-click immersive multi-agent interactive classroom\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"LICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-AGPL--3.0-blue.svg?style=flat-square\" alt=\"License: AGPL-3.0\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fnextjs.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-16-black?style=flat-square&logo=next.js\" alt=\"Next.js\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Freact.dev\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-19-61DAFB?style=flat-square&logo=react&logoColor=white\" alt=\"React\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.typescriptlang.org\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white\" alt=\"TypeScript\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Flangchain.dev\u002Flanggraph\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLangGraph-1.1-purple?style=flat-square\" alt=\"LangGraph\"\u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Ftailwindcss.com\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTailwind_CSS-4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white\" alt=\"Tailwind CSS\"\u002F>\u003C\u002Fa>\n  \u003Cbr\u002F>\n  \u003Ca href=\".\u002FREADME.md\">English\u003C\u002Fa> · \u003Ca href=\".\u002FREADME-zh.md\">简体中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003C!--\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fstar-history.com\u002F#ZYFUP\u002Ffh_maic&type=Source\">\n    \u003Cimg src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=ZYFUP\u002Ffh_maic&type=Source\" alt=\"Star History\" width=\"500\"\u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n-->\n\n---\n\n## ⚠️ AGPL-3.0 Compliance Requirement — MUST READ\n\nThis project is a derivative work of [OpenMAIC (AGPL-3.0)](https:\u002F\u002Fgithub.com\u002FTHU-MAIC\u002FOpenMAIC), licensed under the **GNU Affero General Public License v3.0**.\n\n> **If you fork, modify, and redistribute this software (whether open-source or not), you are legally required to fully disclose ALL technical details of your modifications. Failure to do so is a violation of AGPL-3.0.**\n\nSee [README-zh.md](.\u002FREADME-zh.md) for the full compliance checklist (in Chinese), or refer to the table below:\n\n| Category | What Must Be Disclosed |\n|----------|----------------------|\n| Code Changes | All added\u002Fmodified\u002Fdeleted source files with change descriptions |\n| Config Changes | All new or modified env vars, config files (with defaults & descriptions) |\n| Dependency Changes | All new or upgraded packages (name, version, purpose) |\n| API Changes | All new\u002Fmodified\u002Fdeleted API endpoints and their parameters |\n| Frontend Changes | All new or modified pages, components, routes with functionality descriptions |\n| Third-Party Integrations | All new third-party services, SDKs, API key configurations |\n| Brand Customization | All visual customizations (Logo, colors, UI, text) and how to replicate them |\n\nFor closed-source commercial use, contact **thu_maic@tsinghua.edu.cn**.\n\n---\n\n## ✨ Features\n\n| | |\n|---|---|\n| **One-click Classroom** | Input a topic or upload materials → AI generates a complete course |\n| **Multi-Agent Collaboration** | AI teacher + AI classmates with lecturing, discussion & real-time interaction |\n| **Deep Interactive Mode** | 3D visualization, simulations, games, mind maps, online coding |\n| **Canvas Slides** | Custom 2D canvas rendering with animations, laser pointer, whiteboard drawing |\n| **Real-time Voice** | Multi-provider TTS + ASR (MiniMax, OpenAI, Ollama, and more) |\n| **Media Generation** | AI-generated images, videos, music, coding plans (MiniMax adapter included) |\n| **Knowledge Q&A** | Free-form questions; AI teacher responds with slides\u002Fwhiteboard |\n| **Roundtable Debate** | Multi-agent debate with whiteboard illustrations |\n| **Export** | PowerPoint \u002F interactive HTML \u002F classroom ZIP |\n| **i18n** | Interface in Chinese · English · Japanese · Russian |\n| **Multi AI Provider** | OpenAI · Anthropic · Google Gemini · DeepSeek · MiniMax · GLM · Ollama · and more |\n| **OpenClaw** | Generate classrooms from Feishu, Slack, Discord, Telegram |\n\n---\n\n## 🚀 Quick Start\n\n**Prerequisites**: Node.js >= 20 · pnpm >= 10\n\n```bash\n# 1. Clone & install\ngit clone https:\u002F\u002Fgithub.com\u002FYOUR_USERNAME\u002Ffh_maic.git\ncd fh_maic\npnpm install\n\n# 2. Configure (at least one LLM provider required)\ncp .env.example .env.local\n# Edit .env.local — see #Configuration below\n\n# 3. Run\npnpm dev\n# Open http:\u002F\u002Flocalhost:3000\n\n# 4. Production\npnpm build && pnpm start\n```\n\n---\n\n## 🔧 Configuration\n\nConfigure at least one LLM provider in `.env.local`:\n\n```env\n# MiniMax proxy (recommended for China users)\nANTHROPIC_API_KEY=sk-xxx\nANTHROPIC_BASE_URL=https:\u002F\u002Fapi.minimaxi.com\u002Fanthropic\u002Fv1\u002Fmessages\nANTHROPIC_MODELS=MiniMax-M2.7-highspeed\n\n# OpenAI-compatible proxy (e.g. MiniMax)\nOPENAI_API_KEY=sk-xxx\nOPENAI_BASE_URL=https:\u002F\u002Fapi.minimaxi.com\u002Fv1\u002Fchat\u002Fcompletions\nOPENAI_MODELS=MiniMax-M2.7-highspeed\n\n# Or direct OpenAI \u002F Anthropic\n# OPENAI_API_KEY=sk-xxx\n# ANTHROPIC_API_KEY=sk-ant-xxx\n\n# Local Ollama\n# OLLAMA_BASE_URL=http:\u002F\u002Flocalhost:11434\n```\n\n**Supported providers**: OpenAI · Anthropic · Google Gemini · DeepSeek · Qwen · Kimi · **MiniMax** · Grok (xAI) · OpenRouter · Doubao · Tencent Hunyuan · Xiaomi MiMo · GLM (Zhipu) · Ollama · Lemonade — and any OpenAI-compatible API.\n\n---\n\n## 🏗️ Architecture\n\n```\nUser Input\n    │\n    ▼\n┌─────────────────────────────────────────────────────┐\n│  Generation Pipeline  (lib\u002Fgeneration\u002F)             │\n│  Stage 1: Outline → Stage 2: Full Scenes           │\n└────────────────────┬────────────────────────────────┘\n                     │ StageStore + StageAPI\n                     ▼\n┌─────────────────────────────────────────────────────┐\n│  Classroom Page  (SSE via \u002Fapi\u002Fchat)                │\n│  Director Graph  (LangGraph, lib\u002Forchestration\u002F)    │\n│  Multi-agent: director → agent_generate → director  │\n└────────────────────┬────────────────────────────────┘\n                     │ action events\n                     ▼\n┌─────────────────────────────────────────────────────┐\n│  ActionEngine  (lib\u002Faction\u002Fengine.ts)               │\n│  28+ action types: speech, whiteboard, spotlight…   │\n└────────────────────┬────────────────────────────────┘\n                     │ state updates\n                     ▼\n┌─────────────────────────────────────────────────────┐\n│  Zustand Stores  (lib\u002Fstore\u002F)                      │\n│  canvas · media-generation · settings · whiteboard  │\n└─────────────────────────────────────────────────────┘\n```\n\n### Key Modules\n\n| Module | Location | Responsibility |\n|--------|----------|---------------|\n| **Generation Pipeline** | `lib\u002Fgeneration\u002F` | Two-stage: outline → scene → media |\n| **Director Graph** | `lib\u002Forchestration\u002Fdirector-graph.ts` | LangGraph state machine for multi-agent |\n| **Action Engine** | `lib\u002Faction\u002Fengine.ts` | Execute speech, whiteboard, spotlight, laser… |\n| **Stage API** | `lib\u002Fapi\u002Fstage-api.ts` | Facade for scene\u002Fcanvas\u002Fwhiteboard ops |\n| **LLM Layer** | `lib\u002Fai\u002Fllm.ts` | Unified callLLM\u002FstreamLLM via Vercel AI SDK |\n| **Slide Renderer** | `components\u002Fslide-renderer\u002F` | Canvas 2D custom engine |\n| **Whiteboard** | `components\u002Fwhiteboard\u002F` | SVG + ProseMirror |\n\n---\n\n## 🛠️ Development\n\n```bash\npnpm dev              # Dev server\npnpm build           # Production build\npnpm start           # Production server\n\n# Code quality\npnpm lint            # ESLint\npnpm format          # Prettier format\npnpm check           # Prettier check\nnpx tsc --noEmit     # TypeScript\n\n# Testing\npnpm test            # Unit tests (vitest)\npnpm test:e2e        # Playwright e2e tests\npnpm test:e2e:ui     # Playwright with UI\n\n# i18n\npnpm check:i18n-keys # Check missing i18n keys\n\n# Evaluation\npnpm eval:whiteboard        # Whiteboard layout eval\npnpm eval:outline-language  # Outline language eval\n```\n\n---\n\n## 📁 Project Structure\n\n```\nfh_maic\u002F\n├── app\u002F                    # Next.js App Router\n│   ├── api\u002F               #   Server routes (generate, chat, pbl, transcription…)\n│   ├── classroom\u002F[id]\u002F    #   Classroom playback page\n│   └── page.tsx          #   Home page\n├── lib\u002F                   # Core business logic\n│   ├── generation\u002F        #   Two-stage lesson generation pipeline\n│   ├── orchestration\u002F     #   LangGraph multi-agent orchestration\n│   ├── action\u002F            #   Action execution engine (28+ action types)\n│   ├── ai\u002F               #   LLM provider abstraction\n│   ├── api\u002F              #   Stage API facade\n│   ├── store\u002F            #   Zustand stores\n│   ├── audio\u002F            #   TTS & ASR providers\n│   ├── media\u002F            #   Image & video generation\n│   ├── export\u002F           #   PPTX & HTML export\n│   └── i18n\u002F             #   zh-CN \u002F en-US \u002F ja-JP \u002F ru-RU\n├── components\u002F            # React UI\n│   ├── slide-renderer\u002F    #   Canvas 2D slide editor & renderer\n│   ├── scene-renderers\u002F  #   Quiz \u002F Interactive \u002F PBL renderers\n│   ├── whiteboard\u002F       #   SVG whiteboard\n│   ├── chat\u002F             #   Chat area & session\n│   └── ui\u002F               #   shadcn\u002Fui + Radix base components\n└── packages\u002F             # Monorepo sub-packages\n    ├── pptxgenjs\u002F        #   PowerPoint generation\n    └── mathml2omml\u002F      #   MathML → Office Math conversion\n```\n\n---\n\n## 💡 Example Inputs\n\n| Input | Generated |\n|-------|-----------|\n| \"Teach me Python from scratch\" | Slides + quiz + online coding |\n| \"Explain blockchain with diagrams\" | AI teacher + whiteboard diagrams |\n| \"Simulate light refraction\" | Interactive physics simulation |\n| \"Debate: AI in education\" | Multi-agent roundtable + data viz |\n| \"Write an electronic song about spring\" | AI-generated music |\n\n---\n\n## 🤝 Contributing\n\nFor contribution guidelines, see [CONTRIBUTING.md](.\u002FCONTRIBUTING.md).\n\n**Forks**: Document all modifications per the AGPL-3.0 compliance table above. Every change (code, config, dependency, API, UI, brand) must be disclosed in your fork's documentation.\n\n---\n\n## 📝 Citation\n\nIf you use this project in research, please cite the original paper:\n\n```bibtex\n@Article{JCST-2509-16000,\n  title = {From MOOC to MAIC: Reimagine Online Teaching and Learning through LLM-driven Agents},\n  journal = {Journal of Computer Science and Technology},\n  year = {2026},\n  doi = {10.1007\u002Fs11390-025-6000-0},\n  url = {https:\u002F\u002Fjcst.ict.ac.cn\u002Fen\u002Farticle\u002Fdoi\u002F10.1007\u002Fs11390-025-6000-0},\n  author = {Ji-Fan Yu et al.}\n}\n```\n\n---\n\n## 📄 License\n\nLicensed under [AGPL-3.0](.\u002FLICENSE). Closed-source commercial licensing: **thu_maic@tsinghua.edu.cn**\n","方湖 MAIC 课堂平台是一个基于 Next.js 的 AI 课堂教学系统。该项目使用 TypeScript 编写，集成了 React、Tailwind CSS 和 LangGraph 等技术，提供了沉浸式多代理交互教室体验，支持一键启动。其核心功能包括智能教学助手、实时互动和个性化学习路径推荐等。适合于教育机构或个人教师在需要增强在线教学互动性和智能化水平的场景中使用。项目遵循 AGPL-3.0 开源许可协议，确保了代码的透明度与可追溯性。","2026-06-11 04:04:39","CREATED_QUERY"]