THU-MAIC/OpenMAIC
Open Multi-Agent Interactive Classroom — Get an immersive, multi-agent learning experience in just one click
The code number leaves out tests, fixtures, docs, examples, data files, styles, translations and vendored code, and 6 generated files: lib/video-export/emit-hyperframes/katex-assets.ts, lib/video-export/emit-hyperframes/noto-cjk-assets.ts, lib/video-export/emit-hyperframes/noto-script-font-assets.ts, packages/@openmaic/renderer/scripts/generate-fonts-css.mjs, packages/@openmaic/renderer/scripts/generate-katex-fonts.mjs, packages/@openmaic/renderer/src/snapshot/katex-fonts-embed.ts.
Largest clones in the code
- 1029 lines in 2 placestypescript5,440 tokens
3import { ShapePathFormulasKeys } from '@openmaic/dsl'; 4 5export interface ShapePoolItem { 6 viewBox: [number, number]; 7 path: string; 8 special?: boolean; 9 pathFormula?: ShapePathFormulasKeys; 10 outlined?: boolean; 11 pptxShapeType?: string; 12 title?: string;First 10 of 1029 lines.
- 247 lines in 2 placestypescript2,432 tokens
30export const SHAPE_PATH_FORMULAS: Record<string, ShapePathFormula> = { 31 [ShapePathFormulasKeys.ROUND_RECT]: { 32 editable: true, 33 defaultValue: [0.125], 34 range: [[0, 0.5]], 35 relative: ['left'], 36 getBaseSize: [(width, height) => Math.min(width, height)], 37 formula: (width, height, values) => { 38 const radius = Math.min(width, height) * values![0]; 39 return `M ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height - radius} Q ${width} ${height} ${width - radius} ${height…First 10 of 247 lines.
- 684 lines in 2 placestypescript1,797 tokens
16import type { SceneOutline } from '@/lib/types/generation'; 17 18export type { 19 PBLProject, 20 PBLRole, 21 PBLDocument, 22 PBLScenarioConfig, 23 PBLScenarioCharacter, 24 PBLSceneVisual, 25 PBLThreadSeat,First 10 of 684 lines.
7 more
- 168 lines in 2 placestypescript1,042 tokens
- 183 lines in 2 placestsx897 tokens
- 55 lines in 3 placesjavascript364 tokens
- 112 lines in 2 placestsx719 tokens
- 52 lines in 2 placesjavascript689 tokens
- 118 lines in 2 placestsx647 tokens
- 97 lines in 2 placestypescript642 tokens
Largest clones over all files, tests and data included
- 1029 lines in 2 placestypescript5,440 tokens
3import { ShapePathFormulasKeys } from '@openmaic/dsl'; 4 5export interface ShapePoolItem { 6 viewBox: [number, number]; 7 path: string; 8 special?: boolean; 9 pathFormula?: ShapePathFormulasKeys; 10 outlined?: boolean; 11 pptxShapeType?: string; 12 title?: string;First 10 of 1029 lines.
- 110 lines in 9 placesjsontranslations435 tokenslib/i18n/locales/de-DE.json:1565–1674lib/i18n/locales/en-US.json:1565–1674lib/i18n/locales/es-MX.json:1565–1674lib/i18n/locales/fr-FR.json:1565–1674lib/i18n/locales/ko-KR.json:1565–1674and 4 more
1565"lang_auto": "Automatisch erkennen", 1566"lang_zh": "中文", 1567"lang_yue": "粤語", 1568"lang_en": "English", 1569"lang_ja": "日本語", 1570"lang_ko": "한국어", 1571"lang_es": "Español", 1572"lang_fr": "Français", 1573"lang_de": "Deutsch", 1574"lang_ru": "Русский",First 10 of 110 lines.
- 247 lines in 2 placestypescript2,432 tokens
30export const SHAPE_PATH_FORMULAS: Record<string, ShapePathFormula> = { 31 [ShapePathFormulasKeys.ROUND_RECT]: { 32 editable: true, 33 defaultValue: [0.125], 34 range: [[0, 0.5]], 35 relative: ['left'], 36 getBaseSize: [(width, height) => Math.min(width, height)], 37 formula: (width, height, values) => { 38 const radius = Math.min(width, height) * values![0]; 39 return `M ${radius} 0 L ${width - radius} 0 Q ${width} 0 ${width} ${radius} L ${width} ${height - radius} Q ${width} ${height} ${width - radius} ${height…First 10 of 247 lines.
- 101 lines in 10 placesjsondata files217 tokens
- 684 lines in 2 placestypescript1,797 tokens
By format, code only
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 990 | 231,022 | 560 | 10,255 | 4.44% |
| tsx | 374 | 84,101 | 232 | 4,100 | 4.88% |
| javascript | 73 | 15,281 | 143 | 2,053 | 13.43% |
| bash | 13 | 874 | 0 | 0 | 0% |
| perl | 1 | 174 | 0 | 0 | 0% |
By format, all files
| Format | Files | Lines | Clones | Duplicated lines | Duplication |
|---|---|---|---|---|---|
| typescript | 1,874 | 435,070 | 2,052 | 32,704 | 7.52% |
| tsx | 425 | 92,503 | 357 | 5,505 | 5.95% |
| json | 82 | 49,197 | 202 | 10,058 | 20.44% |
| javascript | 85 | 16,070 | 148 | 2,184 | 13.59% |
| markdown | 132 | 20,885 | 28 | 379 | 1.81% |
| txt | 7 | 789 | 9 | 199 | 25.22% |
| css | 8 | 3,563 | 7 | 51 | 1.43% |
| yaml | 27 | 1,676 | 4 | 66 | 3.94% |
| text | 23 | 650 | 4 | 55 | 8.46% |
| markup | 12 | 1,065 | 2 | 21 | 1.97% |
Trending appearances
| Day | Rank | Stars | Files | Lines | Clones | All files | Code | Health | Commit |
|---|---|---|---|---|---|---|---|---|---|
| Sep 11, 2026 | #10 | 35,504 (+837) | 2,696 | 622,631 | 2,814 | 8.23% | 4.95% | — | d5be393 |
| Sep 2, 2026 | #3 | 29,790 (+3,128) | 2,643 | 610,050 | 2,734 | 8.25% | 5.01% | — | d4ef5fa |
| Sep 1, 2026 | #3 | 28,806 (+2,824) | 2,643 | 610,050 | 2,734 | 8.25% | 5.01% | — | 32bfd19 |
Want this for your own project? Install jscpd and run jscpd ., or measure it the way the baselines were measured.