From c0dddab5944044bb5ec3d006c982fe31759378cd Mon Sep 17 00:00:00 2001 From: Yun Chan Date: Sat, 27 Jun 2026 16:08:41 +0900 Subject: [PATCH] =?UTF-8?q?=ED=98=84=EC=9E=AC=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../1-Photo-1.jpg | Bin 0 -> 47131 bytes AGENT.md | 22 + AGENTS.md | 53 + CLAUDE.md | 53 + README.md | 2 +- apps/api/app/auth_sessions.py | 35 +- apps/api/app/config.py | 12 + apps/api/app/persona_repository.py | 199 + apps/api/app/routes/admin.py | 240 +- apps/api/app/routes/auth.py | 356 +- apps/api/app/routes/eval.py | 8 +- apps/api/app/routes/personas.py | 155 +- apps/api/app/routes/sessions.py | 500 ++- apps/api/app/routes/teacher.py | 234 +- apps/api/app/routes/voice.py | 90 +- apps/api/app/saml.py | 20 +- apps/api/app/services/dataset_export.py | 400 ++ apps/api/app/services/evaluator.py | 51 +- apps/api/app/services/guardrail.py | 19 + apps/api/app/services/orchestrator.py | 101 +- apps/api/app/services/persona.py | 42 + apps/api/app/session_persistence.py | 294 +- apps/api/app/test_auth_providers.py | 253 +- apps/api/app/test_dataset_export.py | 119 + apps/api/app/test_evaluation_persistence.py | 60 +- apps/api/app/test_orchestrator_masking.py | 47 +- apps/api/app/test_persona_review.py | 256 +- apps/api/app/test_rbac_idor.py | 8 +- apps/api/app/test_runtime_policy.py | 94 + apps/api/app/test_session_turn_persistence.py | 306 +- apps/api/app/test_teacher_dashboard.py | 124 + apps/api/app/turn_runtime.py | 193 + apps/api/scripts/export-openapi.py | 28 + apps/web/README.md | 5 +- apps/web/e2e/admin.spec.ts | 84 +- apps/web/e2e/auth.spec.ts | 19 +- apps/web/package-lock.json | 301 ++ apps/web/package.json | 3 + .../clinical-paper-ambient.png | Bin 0 -> 2342959 bytes .../design-elements/warm-visual-elements.png | Bin 0 -> 2555951 bytes apps/web/scripts/generate-api-types.mjs | 57 + apps/web/src/components/shell/shell.css | 66 + apps/web/src/lib/api.gen.ts | 3723 +++++++++++++++++ apps/web/src/lib/api.ts | 150 +- apps/web/src/pages/Admin.tsx | 356 +- apps/web/src/pages/LearnerHome.tsx | 54 +- apps/web/src/pages/Login.tsx | 122 +- apps/web/src/pages/Professor.tsx | 712 +++- apps/web/src/pages/Session.tsx | 45 +- apps/web/src/pages/SessionReview.tsx | 87 + .../pages/session-review/session-review.css | 185 +- apps/web/src/pages/session/session.css | 206 +- apps/web/src/styles/tokens.css | 3 + apps/web/vite.config.ts | 11 + docs/HANDOFF.md | 36 +- .../generated/01-login-responsive.png | Bin 0 -> 1780153 bytes .../generated/02-learner-home-responsive.png | Bin 0 -> 1637605 bytes .../generated/03-session-responsive.png | Bin 0 -> 1693010 bytes .../04-session-review-responsive.png | Bin 0 -> 1753251 bytes .../generated/05-professor-responsive.png | Bin 0 -> 1199215 bytes .../generated/06-admin-responsive.png | Bin 0 -> 1372923 bytes .../generated/07-settings-responsive.png | Bin 0 -> 1142791 bytes .../generated/08-warm-visual-elements.png | Bin 0 -> 2555951 bytes .../generated/09-avatar-pattern-elements.png | Bin 0 -> 2295250 bytes .../prompts/10-clinical-paper-ambient.txt | 13 + .../prompts/run-imagegen-responsive-set.ps1 | 109 + .../prompts/run-one-imagegen.sh | 9 + .../vignette-design-prompts-2026-06-27.md | 143 + docs/dev_dashboard.html | 235 +- docs/guides/architecture.md | 40 +- docs/guides/local-development.md | 19 +- docs/guides/source-docs-and-gaps.md | 47 +- docs/guides/testing.md | 19 +- docs/ops/backlog-2026-06-26.md | 25 +- docs/ops/public-runtime-watchdog.md | 18 + .../source-docs-gap-analysis-2026-06-26.md | 83 +- docs/ops/tailscale-vnet-runtime-2026-06-27.md | 7 +- docs/phase3/dataset-export-manifest.md | 26 +- infra/db/init/04_audit_eval_rls.sql | 16 + scripts/dev-down.ps1 | 15 +- scripts/dev-up.ps1 | 103 +- scripts/export-recursive-dataset.py | 324 ++ scripts/install-public-runtime-task.ps1 | 8 + scripts/start-public-runtime.ps1 | 1 + scripts/watch-public-runtime.ps1 | 2 +- 85 files changed, 11322 insertions(+), 539 deletions(-) create mode 100644 .codex-remote-attachments/019f06de-a1f7-78f1-90b3-79ff50184333/e8834910-90ec-40b7-82c8-824b158439d3/1-Photo-1.jpg create mode 100644 apps/api/app/services/dataset_export.py create mode 100644 apps/api/app/test_dataset_export.py create mode 100644 apps/api/app/test_teacher_dashboard.py create mode 100644 apps/api/app/turn_runtime.py create mode 100644 apps/api/scripts/export-openapi.py create mode 100644 apps/web/public/design-elements/clinical-paper-ambient.png create mode 100644 apps/web/public/design-elements/warm-visual-elements.png create mode 100644 apps/web/scripts/generate-api-types.mjs create mode 100644 apps/web/src/lib/api.gen.ts create mode 100644 docs/design-concepts/generated/01-login-responsive.png create mode 100644 docs/design-concepts/generated/02-learner-home-responsive.png create mode 100644 docs/design-concepts/generated/03-session-responsive.png create mode 100644 docs/design-concepts/generated/04-session-review-responsive.png create mode 100644 docs/design-concepts/generated/05-professor-responsive.png create mode 100644 docs/design-concepts/generated/06-admin-responsive.png create mode 100644 docs/design-concepts/generated/07-settings-responsive.png create mode 100644 docs/design-concepts/generated/08-warm-visual-elements.png create mode 100644 docs/design-concepts/generated/09-avatar-pattern-elements.png create mode 100644 docs/design-concepts/prompts/10-clinical-paper-ambient.txt create mode 100644 docs/design-concepts/prompts/run-imagegen-responsive-set.ps1 create mode 100644 docs/design-concepts/prompts/run-one-imagegen.sh create mode 100644 docs/design-concepts/prompts/vignette-design-prompts-2026-06-27.md create mode 100644 scripts/export-recursive-dataset.py diff --git a/.codex-remote-attachments/019f06de-a1f7-78f1-90b3-79ff50184333/e8834910-90ec-40b7-82c8-824b158439d3/1-Photo-1.jpg b/.codex-remote-attachments/019f06de-a1f7-78f1-90b3-79ff50184333/e8834910-90ec-40b7-82c8-824b158439d3/1-Photo-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71a0421a5ee7eba2d26e533fb580ac6ef71e35c0 GIT binary patch literal 47131 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