THU-MAIC/dsh-openmaic
OpenMAIC for DeepSeek Harness:教室、幻灯片、交互式小部件和苏格拉底式教学
项目介绍Project Overview
dsh-openmaic 是 DeepSeek Harness 插件,向代理注册四个工具与一个苏格拉底式教学技能。openmaic_generate 向 open.maic.chat 提交需求并轮询,返回可上课的课堂链接;openmaic_slide 用官方渲染器把单张 OpenMAIC 幻灯片(Slide JSON)渲染为文本、形状、图片、表格、图表、公式与代码;openmaic_widget 接收完整 HTML 文档,编写时流式输出,完成后以内嵌沙箱卡片呈现;openmaic_render 把内联 HTML 教学片段渲染为沙箱卡片;openmaic-teach 技能把会话转成苏格拉底式 OpenMAIC 课。适用:做互动课件、课堂、可视化讲解。提示:教学大厅生成较慢,建议把 pollIntervalMs 调高,maxWaitMs 上限为 10 分钟。
dsh-openmaic is a DeepSeek Harness plugin that registers four tools and a Socratic teaching skill. openmaic_generate submits a requirement to open.maic.chat, polls the async job, and returns a playable classroom link. openmaic_slide renders a single OpenMAIC slide (PPTist-style Slide JSON) via the official renderer, supporting text, shapes, images, tables, charts, formulas, and code. openmaic_widget accepts a full HTML document conforming to the bundled contract, streams it while the agent writes, then renders it inline as a sandboxed card. openmaic_render turns an inline HTML teaching fragment into a sandboxed card. openmaic-teach turns a session into a Socratic OpenMAIC lesson. Use it for interactive classrooms, slides, and explainable simulations. Caveat: classroom generation is slow, so raise pollIntervalMs and mind the 10-minute maxWaitMs cap.
请帮我了解并安装插件:【dsh-openmaic】【https://github.com/THU-MAIC/dsh-openmaic】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add git+https://github.com/THU-MAIC/dsh-openmaic.git
把 THU-MAIC/dsh-openmaic 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-openmaic
把 OpenMAIC 带进 DeepSeek Harness。Bring OpenMAIC into DeepSeek Harness.
dsh-openmaic is a DeepSeek Harness plugin that registers four tools and a
Socratic teaching skill:
openmaic_generate: tell your agent "make me a lesson about X", and the plugin submits the requirement to open.maic.chat, waits for the async generation job, and returns a playable classroom link.openmaic_slide: the agent writes one OpenMAIC slide (PPTist-style Slide JSON) and the plugin renders it with OpenMAIC's official renderer (text, shapes, images, tables, charts, formulas, code).openmaic_widget: the agent writes an OpenMAIC-style interactive widget (simulation, game, or code) per the bundled contract; the code streams as it writes, then renders inline as a sandboxed card.openmaic_render: the agent writes an inline HTML teaching fragment (concept card, quiz, walkthrough) and the plugin renders it as a sandboxed card right in the conversation.openmaic-teachskill: turns a session into a Socratic OpenMAIC lesson, teaching by guided questioning and pulling in slides, widgets, and cards as aids.
What it looks like
用户: 帮我做一节量子物理入门课
模型 → openmaic_generate(requirement="量子物理入门课", language="zh-CN")
← "Classroom ID: class-abc123
Classroom URL:
https://open.maic.chat/classroom/class-abc123"
模型: 课堂已经生成好了,点开就能上课:
https://open.maic.chat/classroom/class-abc123
Interactive widget:
用户: 做一个抛体运动模拟器
模型 → 按 openmaic-widget 模板写完整 HTML(流式输出)
→ openmaic_widget(html="<!doctype html>…", widgetType="simulation", title="抛体运动")
← "Rendered the simulation widget …"
对话里就地出现一个可交互的 OpenMAIC 模拟器
Install
dsh plugin --profile web add git+https://github.com/THU-MAIC/dsh-openmaic.git
Then restart dsh web and refresh. The plugin ships its compiled lib/, so a
git install needs no build step.
Config
dsh-openmaic:
baseUrl: https://open.maic.chat
accessCode: "" # invite code; not enforced online yet, leave empty
pollIntervalMs: 5000
maxWaitMs: 600000
| Key | Default | Notes |
|---|---|---|
baseUrl |
https://open.maic.chat |
API base. Point at http://localhost:3000 to develop against a local OpenMAIC. |
accessCode |
"" |
Invite code for open.maic.chat. Not enforced online yet, leave empty; fill it in once enabled. |
pollIntervalMs |
5000 |
Poll interval in ms. Generation is slow, so 60000 is friendlier than the default. |
maxWaitMs |
600000 |
Cap for one job, 10 minutes. |
API flow
- If
accessCodeis set,POST /api/access-code/verifyand replay theopenmaic_accesscookie on later requests. POST /api/generate-classroomwith the requirement, plus only the optional flags you passed. Returns ajobIdandpollUrl.- Poll
GET {pollUrl}until the job issucceededorfailed, ormaxWaitMsruns out. - On success, return
{baseUrl}/classroom/{classroomId}(or the server-providedresult.url).
Scope
openmaic_generate: generate a classroom and return a playable link.openmaic_slide: render one OpenMAIC slide with the official renderer.openmaic_widget: render a simulation / game / code widget the agent writes (a full HTML document). It streams the code while the agent writes it and renders on completion.openmaic_render: render an inline HTML teaching fragment as a sandboxed card.openmaic-teach: Socratic teaching session that uses the tools above as aids.
The slide/widget/render tools do no server-side generation; they render content
the agent authors against the OpenMAIC SDK contracts (@openmaic/dsl,
@openmaic/generation, @openmaic/renderer).
Roadmap
- Wire the remaining widget types (diagram, visualization3d, procedural-skill).
- Action loop back to the model (teaching-agent interactions: highlight/annotate/reveal widget elements).
Development
./scripts/build.sh # links host deps, bundles src/ to lib/ with tsdown
./scripts/test.sh # links host deps, runs the vitest suite
The scripts locate the harness checkout from dsh on PATH; set DSH_CHECKOUT to build against a specific checkout.
License
MIT
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill