Skip to content

Latest commit

 

History

History
332 lines (261 loc) · 53.7 KB

File metadata and controls

332 lines (261 loc) · 53.7 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog.

[1.0.0] - 2026-08-27

Features

  • Agent workbench (Pro mode) — chat-first course building from the home page: the collapsible workspace shell #1206, the agent chat surface #1205, and the client data layer #1204, with Pro entry points that preserve mode-transition semantics #1208; owner-scoped folder routes, stage-metadata viewer surfaces, and the material upload contract #1215, plus stage and material HTTP routes #1203; the Pro workbench flag now implies the MAIC Editor gate #1223
  • Durable agent runtime — server-backed course-building sessions: the driver model contract and stage route dialect #1165, the runtime foundations on the agent-session store #1167, a background session runner #1169, agent session and owner event streams #1170, and session lifecycle routes #1171 — sessions survive restarts, accept follow-up steering and cancellation, and stream a replayable event transcript; the runtime configuration surface is documented #1176
  • Agent tools and skills — validated, provider-neutral course tools: neutral tool foundation libraries #1184, a web_search tool on the session runner #1185, session materials with a fetch_url tool behind the URL trust gate #1190, material read/search #1192, stage read/patch #1194, page generation and deck editing #1198, roster and voice registration #1201, folder organisation #1202, image/video/PPTX import #1211, and the material extraction lifecycle #1212; a skills system #1189 with Feynman and spiral curriculum methods #1240, reference tools and skills ported in a parity audit #1241, and real skill management in Settings — list, download, delete, and upload #1244
  • Provider-neutral server capabilities — image, video, and ASR models resolved from server config #1175, uniform capability force-off with a consistent missing-key contract #1181, startup validation of model routing config #1182, silent-behavior fixes from the provider audit #1196, and provider force-off enforced in agent tools with vendor identity scrubbed from tool results #1231
  • Pluggable persistence — an agent-session store with a PostgreSQL backend over layered contracts #1163, an ownership scope on stage documents #1191, a per-session URL trust gate #1186, per-scene monotonic revisions via database triggers #1214, owner materials migrated to oss_key with the legacy asset_id dropped #1250, and per-owner quota reservations serialized with crashed uploads reclaimable #1232
  • Materials and the asset byte model — uploaded sources ingested into the asset pool and extracted by id #1154, derived assets with lineage and an extraction cache #1164, a material library manifest with id-addressed generation images #1168, inline base64 images converted to pool assets on load #1172, legacy references converted to allocated asset ids #1101, media and materials moved onto the reference byte model with the asset-registry wiring retired #1242, a standardized asset manifest with converged export paths #1117 over one shared stored-bytes resolver #1116, opt-in indirect asset byte egress #1100, and an optional local ffmpeg/ffprobe media extractor #1213
  • Editor: float the insert toolbar in the outer frame with collapse #1246; port the timeline TTS preview single-flight and voice-all state latching #1235
  • Whiteboard and Pi Native Child: destructive whiteboard runtime operations #1173; Native Child whiteboard tools #1152 and additive whiteboard tools #1156, web search #1133, and a native child runtime with scoped Spotlight #1111
  • Qwen TTS voice cloning #1160
  • Download the narration script as Markdown or DOCX on export #1144
  • A document lexical retrieval foundation for RAG #1078
  • Video export: a bounded local chunk executor #1115
  • German (de-DE) localization #1128
  • OpenClaw skill: a secondary-development flow #1119

Bug Fixes

  • Workbench: restore editor chrome, mode transition, streaming, materials, mentions, and folders #1229; restore the attach entry and add the rail settings entry, pinning all three entry points #1221; list PG-mode home courses via owner stages while keeping the interrupted terminal course card #1218; send the opening session message exactly once with references intact #1234; show newly created folders in the sidebar without a reload #1254; single-source the chat gutter so the timeline and composer share a left edge #1255 #1247; lock the pane-embedded classroom to edit mode #1256; label the extraction lifecycle tools on the timeline
  • Agent runtime: control-plane routes answer 404, not 500, without a database, and the runtime reports itself unusable without one #1207; abort in-flight TTS on cancel and bound every provider request with a timeout #1217; bound every tool call with a timeout and never resurrect a cancelled session #1226; fence durable tool writes and consume cancel requests atomically #1230; fence session claims while an ask_user question is outstanding #1248; settle-time rescue tracks real delivery instead of a count offset #1249; repair orphaned and late tool results across interruption boundaries #1180; wake SSE tails and the runner on durable deltas for streaming fidelity #1222; carry reasoning through the completions dialect so the thinking strip renders #1239; revoke deleted-session URL authority and reject private ISATAP endpoints #1199
  • Editor: complete element referencing with the renderer DOM contract and GenUI picking aligned to the reference #1238; resolve dock-bar i18n keys, remove the dock height drag, and wire element referencing #1233; allow dragging selected lines #1166; allow multi-tab edit mode by dropping the cross-tab edit lock #1161; align editable shape labels with text #1137; keep class roster cards from shrinking #1135
  • Media: restore the reference classic media chain #1236; persist origin-independent classroom-media references from the agent runtime #1245
  • Storage: asset writes no longer self-deadlock against pooled PostgreSQL #1225 #1227
  • Importer: adapt the imported PPTX canvas size so decks render without overflow #1237
  • Classroom: center adapted canvases in the stage and send navigation home during generation #1243
  • Renderer: preserve literal text line breaks #1132
  • Whiteboard: correct the inverted viewportRatio so boards render 16:9 landscape #1257
  • Video export: make Cyrillic and Arabic Quiz fonts deterministic #1114; constrain GenUI iframe visibility #1125
  • i18n: fix the Traditional Chinese translations in the importer #1127

Other Changes

  • Docs: add the release version prefix to the README and drop the opt-in framing, surface the 1.0.0 user-guide badges at the top #1253, and a takeaway-style 1.0.0 announcement with bilingual guide links; announce 1.0.0 and refresh the feature overview #1216; document the agent runtime configuration surface #1176
  • Tests: reconcile vendor-token debt counts with the integration line and after the main merge, mock both runtime gate exports in the control-plane route suites, and give material fixtures the extraction lifecycle fields; keep the PG contract suite order-independent #1200; cover indirect-egress CORS in Chromium #1138; wait for project cleanup instead of racing it in the render suite #1193; stop loading .env.local into unit tests by default #1162; guard the provider-neutral layers against vendor leakage #1197
  • CI and build: cut wall-clock time and bound Playwright browser installs #1146; scope the Next typecheck to production sources #1179; add optional Docker mirrors and a pnpm cache #1139
  • Workbench cleanup: retire the bookmark concept and the saved-courses drawer #1219; remove the in-editor agent panel #1210
  • Storage: drop the unused active-stage API from the agent-session contract #1174
  • Pi: simplify agent tool ownership and completion #1148

[0.3.2] - 2026-08-14

Features

  • Video export hardening — fidelity polish for spotlight geometry, video clips, formulas, and subtitles #952, deterministic Quiz/PBL cover cards #995, self-contained static interactive HTML capture #1086, deterministic Quiz question-list scrolling #1102, a stable RenderExecutor seam #1104, explicit CPU resource profiles #1105, and effective parallel capture in the render service #1042
  • Server-backed persistence completion — learner-data cutover: quiz + playback onto RuntimeStore #955; document-persistence cutover: stage/scene/outline onto DocumentStore #965; server-backed documents over an HTTP contract with a Postgres backend and one reference server #979; a one-command server-backed stack (compose profile + embedded API + docs) #982; dirty-set incremental saves with operation-level flush #983; settings/user-profile persistence through KVStore #1001; the KV HTTP contract and clients promoted to main #1020; learner whiteboard RuntimeStore foundation #1075
  • Asset registry — allocated asset ids over the content-addressed blob layer #1024, unified media asset reference types #1038, generated assets allocated through the registry #1039, a server asset registry over a pluggable byte layer #1077, and the asset backend wired into the app #1089
  • @openmaic/generation package — scaffolding with pipeline types and packaged prompt assets #1063; outline generation #1065 and scene generation + PBL single-call planning #1087 moved into the package; the app consumes the package everywhere and lib/generation is deleted #1090
  • SDK contract ownership — interactive and PBL content kinds promoted into @openmaic/dsl #1070, app consumes the contract's interactive/widget types #1073 and PBL project types #1079, and the renderer decouples its editing UI from the app #1072
  • Course folder grouping #1005 (by @CXuPercy)
  • Local FunASR ASR provider #1044
  • Claude (claude search) as a web-search provider #393 (by @joseph-mpo-yeti)
  • Per-stage routing for generate-classroom instead of one model #1048; evidence-aware Pi Director context runtime #971; optional playback canvas renderer #958
  • Amazon Bedrock LLM provider #538 (by @littlebullGit), Atlas Cloud LLM provider #948 (by @binyangzhu000-sudo), latest Claude/Gemini/Kimi/Grok models #993, and Grok 4.6 #1113
  • French (fr-FR) locale #1068 (by @momo2lajoie), Spanish (Mexico) locale #942 (by @davidmedel), Vietnamese (vi-VN) locale #1025 (by @niitbeo), and 432 reviewed zh-TW translations #526 (by @alvinets)

Bug Fixes

  • Persistence: stop corrupting binary response bodies in the route adapter #1088; omit undefined object fields at persistence boundaries #992; bind default fetch to globalThis in both HTTP store clients #984
  • Chat: harden runtime sync, legacy migration, and record validation #1050; add opt-in streaming chat compatibility #990
  • Access code: refetch server providers after the code is accepted #1081
  • Render service: make parallel capture effective #1042; keep the entrypoint LF so the image starts on Windows #1027
  • i18n: load every Inter subset so non-Latin text keeps the UI font #1026; translate ASR provider names in the generation toolbar #1028; localize Pro mode right rail labels #1023
  • Render whiteboard math via KaTeX instead of raw LaTeX text #938; keep arrowheads visible when toggling thumbnails #1045
  • AI: omit zero SiliconFlow thinking budget #1035; harden shared Pi transport contracts #1108
  • Importer: handle custom shapes without paths #1015
  • Vocational mode: keep the toggle thumb within the track #1032
  • Editor packages: add npm provenance metadata #1098
  • Release: dedupe the published dsl and close two release-path blind spots #1019; hand published versions to the marker job #1076

Other Changes

  • PBL: retire the v1 write path and dead UI, converge on v2 #1060; split the planner core from the loop with an injectable LLM call path #1069; pin single-call prompt goldens #1071; route runtime agents through the shared LLM entry point #1006
  • Document transform pipeline foundation #920; choreography overlays driven from descriptors #947; single-source the generated agent roster on the stage document #994
  • Publish validated package tarballs #1040; publish storage and enforce version bumps #998; publish the OpenMAIC skill to ClawHub #1056
  • Docs refresh and synchronization #996; align the environment variable template #1107; stabilize the Hyperframes lint command #1097

[0.3.1] - 2026-07-21

Features

  • Video export (MP4) — Export a lesson as a rendered video: a VideoTimeline IR with a pure compile pipeline #913, an L1 Hyperframes emitter with in-browser frame collection and ZIP export #931, and a service-backed MP4 render with in-app one-click export #937 (by @cosarah) — built on a shared orchestration spec in lib/choreography #890 (by @cosarah) and persisted TTS audio durations #862 (by @cosarah)
  • Server-backed runtime storage — A pluggable storage seam for classroom runtime state: @openmaic/storage KV + asset primitives #858, a normalized DocumentStore #860, RuntimeStore sessions with append-only records #880, a DSL runtime envelope #870, device-anonymous learner identity #885, a runtime-event outbox with dual-write #893, cutovers for PBL learner state #902 #922 and chat sessions #926, and an HTTP backend contract with a Postgres backend and reference server #946
  • Editor: direct manipulation — Select and drag slide elements #859, 8-point resize + rotate handles #881, marquee multi-select with multi-element drag #888, and a draggable insert toolbar #912, scaffolded as the @openmaic/renderer v2 editing surface behind a machine-enforced import boundary #853 #855
  • Edit with AI upgrades — Natural-language element edits through a typed EditIntent pipeline #896, validated JSON Patch element edits #927, and multi-session conversation history for the AI editor #801
  • DSL self-ownership@openmaic/dsl now owns the Action playback verbs #787, ships JSON Schema artifacts with pure validators #817, activates the migration registry and runner #825, and owns element-level normalization and defaults wired into the generator #832 and the importer output boundary #845
  • Document Parsing expansion — Multi-format course-material upload #741 and document bundles #844 (by @jackefn), audio/video media extraction with an AliDocMind provider #887 (by @yanpgwang), and a renamed Document Parsing surface with visible supported formats and extended MinerU support (by @yanpgwang)
  • Add Azure OpenAI as an LLM provider #916 (by @hydraxman), SearXNG as a web-search provider #842 (by @PineSongCN), ComfyUI as an image provider #850 (by @PhillLittlewood), the GPT-5.6 model family #907, and an updated Doubao Seed model catalog #827
  • Add one-click token-plan setup and a deployment usage dashboard #784 (by @yanpgwang)
  • Add action-level playback navigation #843 (by @danishsshaikh)
  • Redesign the narration timeline (action picker + inline insert) and enable it for interactive/PBL scenes #834
  • Add in-editor authoring of classroom agents with a Stage-level roster #816
  • Parallelize within-scene TTS generation #696 (by @ly-wang19)
  • Feed the real HTML element inventory into interactive-action prompts #829 and add a postMessage listener contract to diagram/game/code widgets #872 (by @yanpgwang)
  • Add an experimental Pi classroom runtime behind a flag #914

Bug Fixes

  • Security: disable redirects in media connectivity probes #930 and harden provider redirect handling with ISATAP address detection #928 against SSRF (by @YizukiAme)
  • Generation: strip reasoning blocks before JSON parsing #750 (by @yipwingtim), localize scene-generation errors #894 (by @wsun1), tolerate malformed generated slide data (by @yipwingtim), and honor outline node constraints in diagrams #911
  • Editor: keep emptied or zero-action scenes playable, bind the outline by stable id, and surface incomplete content #814; show per-line loading while the batch "regenerate all TTS" runs #830
  • Export: fix the unresponsive resource pack for interactive-only decks #933 (by @2046731121CC), compute SVG path bounding boxes via getBounds() #656, keep sibling attributes when style is empty #683, and convert PPTX shadow offsets from px to pt #679 (by @ly-wang19)
  • Quiz: render formulas in quiz text #833 (by @dpersek); stop leaking questions on entry and pass results to the chat agent #823 (by @yanpgwang)
  • Storage: store image files as array buffers #923 (by @YizukiAme) and accept image storage IDs containing underscores #918
  • Chat: preserve message line breaks #908, and cap the roundtable non-presentation input height #917 (by @YizukiAme)
  • TTS: respect string context when splitting the Doubao stream #677; web search: match Brave's current result-title markup #688 (by @ly-wang19)
  • Stage: centralize the deck completion predicate #883 (by @dpersek)
  • AI: close PROVIDERS/THINKING_CAPABILITIES metadata drift with a guard #809 (by @mvanhorn)
  • Home: clarify the Interactive Mode selected state #901; lecture notes: render interactive-webpage widget actions #810
  • Docker: fix the postinstall script failure in Docker builds #835 (by @Lee-Flier)
  • mathml2omml: call includes() instead of indexing it #681 (by @ly-wang19)

Other Changes

  • Performance: dedupe editor alignment snap-lines in O(n) #692, diff code lines in O(n) via a prev-line map #706, and index assigned images by id in fixElementDefaults #701 (by @ly-wang19)
  • Tests: cover splitLongSpeechText / splitLongSpeechActions #694 (by @ly-wang19); settle dynamic imports #899 and drain debounced saves #897 before store-test teardown
  • Media providers: share the submit-poll task driver #900 and the auth probe across matching adapters #903, and remove the dead legacy pipeline chain #905 (by @YizukiAme)
  • Packages: add repository metadata #813 and set @openmaic/* package versions to 0.0.2 #812 (by @xuyuanwei678)
  • Docs: document the dev-server OOM workaround for large generations #808 (by @mvanhorn)
  • Tighten GitHub issue intake #921

[0.3.0] - 2026-06-28

License

  • Relicense the project from AGPL-3.0 to MIT

Breaking Changes

  • Remove allow-same-origin from the interactive srcDoc iframe sandbox for tighter isolation; interactive widgets that relied on same-origin access may need updates #726 (by @sebastiondev)
  • Restructure the slide DSL and renderer into standalone @openmaic/* packages consumed by the app; the inline DSL shim is removed #707 #738

Features

  • Project-Based Learning (PBL) v2 — Add the PBL v2 core schema and generation path #795 (by @cosarah), runtime APIs with classroom UI #799 (by @cosarah), in-timeline discussion authoring #798, auto-retry for transient scene-generation failures #788 (by @YizukiAme), and a planner eval harness #803 #805 (by @cosarah)
  • Edit with AI — Add a Pro-mode editor agent that edits generated slides from a chat prompt #777
  • @openmaic/* SDK on npm — Publish the DSL, renderer, and importer SDK family to npm #778 #780, introduce the maic-import/maic-renderer workspace packages #668 (by @xuyuanwei678), and promote the Stage/Scene lesson skeleton into @maic/dsl #740
  • Add optional per-stage LLM model routing #745
  • Add GLM-5.2 and Kimi K2.7 Code #774, and Qwen3.7 Plus and Qwen3.7 Max #753, to the model registry
  • Add a vocational-learning task engine with procedural skill widgets #685 (by @jackefn)
  • Add Korean (ko-KR) translation #733 (by @moduvoice)
  • Improve TTS with per-agent auto-voice quality and stable timbre registration #670, and unify the provider-enablement model with browser-native TTS off by default #665
  • Add opt-in parallel scene-content generation #660 (by @ly-wang19)
  • Add a document extractor provider foundation #704 (by @jackefn)
  • Infer concise course titles from outlines for more readable course names #756
  • Refactor widget actions into the unified scene action pipeline #796

Bug Fixes

  • Importer: port PPTX shape-restoration hotfixes #789 (by @xuyuanwei678), fix hanging-indent bullet rendering #727 (by @xuyuanwei678), and guard SVG export against arc-first paths #638 (by @ly-wang19)
  • Generation: make outline type changes take effect so interactive/PBL outlines are no longer downgraded to slides #772, stop regenerating deleted slides on finished decks #769, show full key-point text in the outline editor #782, and linearize outline streaming and interactive post-processing for better performance #732
  • Agent: respond to the user's turn before lecturing #699, and constrain action narration to a single teacher voice #671
  • Editor: stop dumping the raw tool-failure blob in AI edit tool cards #785, persist AgentBar voice and mode selections across reloads #723, and keep the edit runtime alive across read-only scenes #802 (by @cosarah)
  • Audio: gate the speech button on ASR availability #711, revoke blob URLs when playback is rejected #652 (by @ly-wang19), and surface TTS provider rate limits as HTTP 429 #644 (by @ly-wang19)
  • Renderer: make the code entrance animation play line by line #724 (by @tongshu2023)
  • Security: point the SSRF local-network rejection at the ALLOW_LOCAL_NETWORKS escape hatch #667 (by @mvanhorn)
  • Networking: bypass the proxy for loopback hosts and honor NO_PROXY #718 (by @tongshu2023)
  • Fix overlay layout shift on the home and classroom pages #690 (by @cosarah)

Other Changes

  • Drop the dead ThumbnailSlide path and fix @maic/dsl Node ESM resolution #736
  • Docs: correct the stale i18n location and supported-language list #640 (by @ly-wang19)

[0.2.2] - 2026-06-02

Features

  • MAIC Editor (v0) — slide editing surface — A new Pro Mode toggle turns any generated slide into an editable canvas: select and edit text, insert text boxes and images, navigate and reorder slides from a thumbnail rail, with history-aware undo/redo. This is the first surface of the broader MAIC Editor framework (gated behind NEXT_PUBLIC_MAIC_EDITOR_ENABLED) #615
  • Editable outline before generation — The streaming course outline now morphs into an inline editor: review, edit, reorder, and add or delete scenes and bullet points, then confirm to generate the full course — so you catch structure problems before spending a full generation #558
  • Offline-ready classroom export — Exported teaching resource packs and classroom ZIPs now inline external assets so interactive pages open fully offline, even when copied to another machine #613
  • Add Claude Opus 4.8 and MiniMax M3 to the default model registry #635
  • Add Gemini 3.5 Flash #584
  • Add Xiaomi MiMo Token Plan support #578 (by @xuruiray)
  • Add web search providers: Brave and Baidu #42 (by @YizukiAme), Bocha #524, and MiniMax #634
  • Add Azure STT (Fast Transcription) as a speech-to-text provider #175 (by @ismailariyan)
  • Add HappyHorse video adapter #509 (by @xuruiray) and Lemonade as an LLM provider #508
  • Add OpenAI image generation environment-variable fallback #510 (by @xuruiray)
  • Add generated-video manifest references so produced videos survive export/import #540
  • Add Traditional Chinese (zh-TW) #517 (by @alvinets) and Brazilian Portuguese (pt-BR) #602 (by @hemanz) interface languages

Bug Fixes

  • Server-configured providers are now admin-managed — providers set via server environment can no longer be overridden by client settings, preventing base-URL/key tampering on shared deployments #624; fixes server API-key fallback when the client echoes the provider base URL #533 (by @LooThao); auto-selects the server LLM model #577 (by @xuruiray); and enforces a "usable provider ⇒ concrete model" invariant #581
  • Keep interactive scenes alive across remounts with an iframe keep-alive pool, so interactive content no longer reloads when navigating #629
  • Restore the orchestration director's ability to answer the user's question and stop runaway turns (removed maxTurns) #599; restore agent attribution in the director summary #554 (by @ashutoshrana)
  • Skip shapes with malformed SVG paths instead of aborting the whole PPTX export #505; prevent memory leaks and silent export failures #552 (by @arnow117)
  • Add defensive checks in ChartElement to prevent crashes on malformed chart data #588 (by @tongshu2023)
  • Let whiteboard code elements capture internal scroll/drag instead of the canvas #544 (by @cosarah)
  • Preserve discussion triggers when importing classroom ZIPs #557 (by @cosarah)
  • Fix generated video thumbnails #546
  • Gate media snippets in the interactive-outlines prompt template #628
  • Hide the unsupported MiniMax Hailuo fast text-to-video model #632; remove weak Lemonade recommended models #567 (by @cosarah)
  • Fix Haiku 4.5 thinking controls #501
  • Use an ESM import for TypeScript in the pptxgenjs rollup config #616
  • Align zh-TW provider names with the rest of the locale set

Other Changes

  • Add a Fumadocs-based documentation site #622
  • Add a VoxCPM2 setup guide and tighten the README section #500 #502
  • Fix the commercial licensing contact email #604 (by @DHQ1204)

[0.2.1] - 2026-04-26

Features

  • VoxCPM2 TTS provider with voice cloning — OpenMAIC adapts to user-managed VoxCPM backends (vLLM-Omni, Nano-VLLM, official Python API). Clone any voice from a reference audio clip you upload or record in the browser, or let Auto Voice generate a fitting voice from each agent's persona at synthesis time. Voice profiles are stored locally to keep the serverless setup model. The Agent Bar exposes a searchable, previewable voice picker that draws from the global VoxCPM voice pool #496
  • Per-model thinking configuration — First-class metadata for each model's reasoning capability (effort levels, on/off toggle, adjustable budget, or fixed thinking) flows through chat and all generation paths and is mapped to the right provider-specific request fields (Anthropic thinking, OpenAI reasoning, etc.). The model selector becomes a unified provider/model/thinking popover with compact search and a much smaller toolbar footprint #494
  • End-of-course completion page with persistent quiz state — When the outline is fully materialized, students see a course-complete view with quiz score card, scene-type stat cards, and a (motion-respecting) confetti celebration. Quiz answers persist on submit and grading results persist on completion, so navigating away and back restores the reviewing state with AI feedback intact instead of resetting #484
  • Add latest released models including GPT-5.5, DeepSeek-V4 (-pro, -flash), Xiaomi MiMo (mimo-v2.5-pro, mimo-v2.5), Tencent Hy3, and OpenRouter as a multi-provider gateway #481 #487
  • Add OpenAI image generation (GPT-Image-2) as a media provider #481
  • Refresh built-in model registries across Anthropic, DeepSeek, Kimi, Qwen, MiniMax, Grok, OpenAI, GLM, SiliconFlow, and Ollama; persisted local settings now rehydrate in registry order so newly curated lists appear consistent without clearing state #481
  • Add inline search for recent classrooms on the home page with deferred filtering by name and description, keyboard-driven open/clear/collapse #476
  • Add Deep-Interactive badge on classroom thumbnails for sessions generated with Interactive Mode #478
  • Replace always-included media instruction blocks in generation prompts with conditional snippet includes gated on imageEnabled / videoEnabled — disabled capabilities are removed from the prompt entirely instead of relying on negative-override directives the model often ignored #490 (by @YizukiAme)

Bug Fixes

  • Fix language drift between outline and scene generation by unifying the languageDirective across the pipeline so the same target language flows from outline planning through every per-scene call #474

Other Changes

  • Refactor whiteboard role prompts to file-based markdown templates and add a geometry-conflict detector (overlap, line-through-bbox, canvas clipping) that surfaces problems back to the model. Eval (flash, repeat 3, gemini-3.1-pro scorer) shows overall quality 5.4 → 6.1 and overlap 6.3 → 8.1 from prompt + detector alone #485
  • Migrate orchestration prompt builders (buildStructuredPrompt, buildDirectorPrompt, buildPBLSystemPrompt) from inline TS template literals to file-based markdown templates under lib/prompts/, sharing the loader infrastructure with the generation pipeline. prompt-builder.ts 890 → 314 lines; future content tweaks land as markdown edits #459

[0.2.0] - 2026-04-20

Features

  • Deep Interactive Mode — Generate hands-on interactive scenes (3D visualization, simulation, game, mind map/diagram, online programming) with an AI teacher who operates the UI to guide students. Fully responsive across desktop, tablet, and mobile #461
  • Add code element support on the whiteboard — AI agents can write, display, and reference runnable code during lessons #385 (by @cosarah)
  • Add Arabic (ar-SA) interface language #431 (by @YizukiAme)
  • Add MinerU Cloud API as a PDF parsing provider, with a dedicated settings UI #438
  • Add latest OpenAI models to the default config #416 (by @donghch)
  • Add GLM-5.1 and GLM-5V-Turbo to GLM preset models #437
  • Add international base URL shortcuts for GLM, Kimi, and MiniMax in provider settings #449
  • Add anti-framing security headers (X-Frame-Options + CSP frame-ancestors) with an optional ALLOWED_FRAME_ANCESTORS override #430 (by @YizukiAme)
  • Add i18n key alignment check to CI so missing or extra translation keys fail the build #447 (by @KanameMadoka520)
  • Add whiteboard layout quality eval harness and unify it with the outline-language harness #425 #453

Bug Fixes

  • Fix classroom ZIP export to use the latest classroom name from IndexedDB #435
  • Fix spotlight cutout for text elements and add element-content variant for image/video #457

Other Changes

  • Renew the README with Deep Interactive Mode showcase and visual assets #463 (by @Shirokumaaaa)
  • Update Discord invite links across README, CONTRIBUTING, and issue templates

[0.1.1] - 2026-04-14

Features

  • Add inline language inference for outline and PBL generation, replacing manual language selector #412 (by @cosarah)
  • Add ACCESS_CODE site-level authentication for shared deployments #411
  • Add classroom export and import as ZIP #418
  • Add custom OpenAI-compatible TTS/ASR provider support #409
  • Add Ollama as built-in provider with keyless activation #94 (by @f1rep0wr)
  • Add Japanese (ja-JP) locale #365 (by @YizukiAme)
  • Add Russian (ru-RU) locale #261 (by @maximvalerevich)
  • Migrate i18n infrastructure to i18next framework #331 (by @cosarah)
  • Add MiniMax provider support #182 (by @Hi-Jiajun)
  • Add Doubao TTS 2.0 (Volcengine) provider #283
  • Add configurable model selection for TTS and ASR #108 (by @ShaojieLiu)
  • Add context-aware Tavily web search when PDF is uploaded #258 (by @nkmohit)
  • Add course rename #58 (by @YizukiAme)
  • Add end-to-end generation happy path test #405

Bug Fixes

  • Fix DNS rebinding bypass in SSRF validation #386 (by @YizukiAme)
  • Add ALLOW_LOCAL_NETWORKS env var for self-hosted deployments #366
  • Fix custom provider baseUrl not persisting on creation #417 (by @YizukiAme)
  • Hide Ollama from model selector when not configured #420 (by @cosarah)
  • Fix agent configs not persisting in server-generated classrooms #336 (by @YizukiAme)
  • Fix action filtering logic and add safety improvements #163 (by @zky001)
  • Fix modifier-key combos triggering single-key shortcuts #359 (by @YizukiAme)
  • Fix agent mode selection for conditionally set generatedAgentConfigs #373 (by @YizukiAme)
  • Unify TTS model selection to per-provider and fix ElevenLabs model_id #326
  • Allow model-level test connection without client-side API key #309 (by @cosarah)
  • Add structured request context to all API error logs #337 (by @YizukiAme)
  • Fix breathing bar background color in roundtable #307

Other Changes

  • Add missing Ollama and Doubao provider names for ru-RU #389 (by @cosarah)
  • Update Ollama logo to official version #400 (by @cosarah)
  • Remove deprecated Gemini 3 Pro Preview model #142 (by @Orinameh)
  • Update expired Discord invite link
  • Create SECURITY.md #281 (by @fai1424)

New Contributors

@f1rep0wr, @maximvalerevich, @Hi-Jiajun, @cosarah, @zky001, @Orinameh, @fai1424

[0.1.0] - 2026-03-26

The first tagged release of OpenMAIC, including all improvements since the initial open-source launch.

Highlights

  • Discussion TTS — Voice playback during discussion phase with per-agent voice assignment, supporting all TTS providers including browser-native #211
  • Immersive Mode — Full-screen view with speech bubbles, auto-hide controls, and keyboard navigation #195 (by @YizukiAme)
  • Discussion buffer-level pause — Freeze text reveal without aborting the AI stream #129 (by @YizukiAme)
  • Keyboard shortcuts — Comprehensive roundtable controls: T/V/Esc/Space/M/S/C #256 (by @YizukiAme)
  • Whiteboard enhancements — Pan, zoom, auto-fit #31, history and auto-save #40 (by @YizukiAme)
  • New providers — ElevenLabs TTS #134 (by @nkmohit), Grok/xAI for LLM, image, and video #113 (by @KanameMadoka520)
  • Server-side generation — Media and TTS generation on the server #75 (by @cosarah)
  • 1.25x playback speed #131 (by @YizukiAme)
  • OpenClaw integration — Generate classrooms from Feishu, Slack, Telegram, and 20+ messaging apps #4 (by @cosarah)
  • Vercel one-click deploy #2 (by @cosarah)

Security

  • Fix SSRF and credential forwarding via client-supplied baseUrl #30 (by @Wing900)
  • Use resolved API key in chat route instead of client-sent key #221

Testing

  • Add Vitest unit testing infrastructure #144
  • Add Playwright e2e testing framework #229

New Contributors

@YizukiAme, @nkmohit, @KanameMadoka520, @Wing900, @Bortlesboat, @JokerQianwei, @humingfeng, @tsinglua, @mehulmpt, @ShaojieLiu, @Rowtion