Skip to content

Claude/merge all branches be z0 b#164

Closed
Sid3548 wants to merge 23 commits intoTHU-MAIC:mainfrom
Sid3548:claude/merge-all-branches-beZ0B
Closed

Claude/merge all branches be z0 b#164
Sid3548 wants to merge 23 commits intoTHU-MAIC:mainfrom
Sid3548:claude/merge-all-branches-beZ0B

Conversation

@Sid3548
Copy link

@Sid3548 Sid3548 commented Mar 20, 2026

Summary

Related Issues

Changes

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Refactoring (no functional changes)
  • CI/CD or build changes

Verification

Steps to reproduce / test

What you personally verified

Evidence

  • CI passes (pnpm check && pnpm lint && npx tsc --noEmit)
  • Manually tested locally
  • Screenshots / recordings attached (if UI changes)

Checklist

  • My code follows the project's coding style
  • I have performed a self-review of my code
  • I have added/updated documentation as needed
  • My changes do not introduce new warnings

Sid3548 and others added 23 commits March 20, 2026 10:11
…nd-quiz-features

Add Hindi (hi-IN) locale, quiz & interview features, Google TTS, and language tooling
Implements POST /api/interview/turn using statelessGenerate() instead of
a direct callLLM() call, aligning the interview turn endpoint with the
same orchestration path used by /api/chat.

- Coach agent (turn 1): gives feedback on the candidate's latest answer
- Interviewer agent (turn 2): asks the next follow-up question
- Both agents are defined as inline agentConfigs (no registry required)
- Text deltas accumulated server-side; JSON response shape kept
  compatible with existing frontend: { feedback, nextQuestion,
  coachName, interviewerName }
- Provider config resolution (API key, baseUrl, SSRF guard) mirrors
  the chat route exactly

https://claude.ai/code/session_019MGKMBhcRnwEkGCRdN1m77
The coding track was always scoring full marks (e.g. 3/3) regardless of
solution correctness because:
- score was set to reviews.length (= number of problems, always = total)
- percentage was hardcoded to 100%
- all problem topics were unconditionally added as weakAreas
- the review-code route silently returned {} on parse failure

Changes:
- Add score (0-10) and verdict (pass/fail) fields to CodeReviewResult
- Update buildCodeReviewPrompt to request score + verdict from the LLM
- review-code route: clamp/normalise score, return 502 if fields missing
- quiz-runner: derive real score from passed.length, compute real %, only
  flag weak areas for problems with verdict=fail or score<5
- QuizResults display uses actual pass count instead of reviews.length
- CodeReviewPanel now shows per-problem score badge and missing points

https://claude.ai/code/session_019MGKMBhcRnwEkGCRdN1m77
…en quiz/interview flows, fix coding quiz scoring, refine color palette
…e, fix quiz scoring (pass/fail), refine code review panel
- Add getEffectiveTTSApiKey/getEffectiveASRApiKey helpers that fall back
  to the matching LLM provider key when no provider-specific key is set
  (e.g. openai-tts and openai-whisper both fall back to the openai key)
- Auto-switch TTS/ASR to the matching provider when user enters a main
  API key and hasn't manually configured a different provider
- Show a notice in TTS settings when the main key is being used
- All key-sending call sites updated to use the effective key
Canvas element creation:
- Double-click blank canvas to insert a text box
- Draw-to-create now works for text, shape, and line elements
- Custom polygon shape creation (ShapeCreateCanvas) now inserts the element
- All new elements inherit slide theme colors/fonts

Table cell editing:
- Double-click any table cell to edit inline with a textarea
- Changes saved on blur; history snapshot added for undo support

Link dialog:
- Clicking "Set Link" in element context menu now opens a real dialog
- Supports setting/clearing web URL hyperlinks on any element

Student-friendly UI theme:
- Replace sad purple/violet palette with energetic sky blue + teal + emerald
- Primary color: #1d7be8 (clean accessible blue, both light & dark)
- Background: sky-50 → white gradient instead of slate-50 → slate-100
- Three-color decorative blobs: sky + emerald + amber
- Input card: sky-tinted border + stronger focus ring
- Quick-access buttons (Quiz, Interview) styled with colored backgrounds
- All purple/violet classes swapped to sky-* across components

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
P0 - interview turn route: use UIMessage parts shape instead of legacy content/createdAt
P0 - quiz types: remove duplicate score/verdict fields from CodeReviewResult, keep pass|fail verdict
P1 - quiz-grade route: replace non-existent INVALID_LLM_RESPONSE with INVALID_RESPONSE
P1 - quiz-dashboard: check response.ok before setting session; show recoverable error UI
P1 - quiz-runner: handle debrief and review-code API failures gracefully, no bogus history
P2 - quiz storage: count attempts for all topicsAttempted, not just weakAreas; add topicsAttempted to history items
P3 - LinkDialog: stabilize effect dep to string primitive, add eslint-disable for exhaustive-deps

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
Newer voices (ash, ballad, cedar, coral, marin, sage, verse) only exist
on gpt-4o-mini-tts, not tts-1. Previous hardcoded tts-1 caused these
voices to always fail. Now resolveOpenAITTSModel() picks gpt-4o-mini-tts
for newer voices and tts-1 for legacy ones (alloy, echo, fable, nova, onyx, shimmer).

Also adds a clearer error hint pointing to project Model Access settings
when the API returns a "does not have access" 403.

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
The project's allowed model list includes tts-1 but not gpt-4o-mini-tts.
Remove voices that require gpt-4o-mini-tts (marin, cedar, ash, ballad,
coral, sage, verse) and keep only tts-1-compatible voices:
alloy, echo, fable, nova, onyx, shimmer.

Reverts the dynamic model selector back to hardcoded tts-1.

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
Adds a small "Fetch Voice List" button next to the voice dropdown in
audio settings. When clicked (requires API key), it:
1. Tries GET /audio/voices (OpenAI-compatible proxies may expose this)
2. Falls back to GET /models, filters for TTS models, merges known voices

Button states: idle → spinner while fetching → green "Voices fetched"
on success → red "Failed to fetch voices" on error.
Resets when provider changes. Azure and browser-native providers are
excluded since they already have their own voice sources.

New API route: POST /api/tts/voices

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
- Chat panel auto-expands (uncollapse) when a discussion or QA session
  starts (both roundtable-triggered and user message-triggered paths)
- Chat panel auto-collapses when the session ends via stop button

Panel still supports manual drag-to-resize and the collapse button
for user control outside of discussions.

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
- Add "AI Classroom for Every Student" headline with gradient accent in hero
- Update browser tab title to "OpenMAIC — AI Classroom for Every Student"
- Make slogan line more visible (opacity 60 → 75)
- Enhance footer with tagline alongside project name

https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
@wyuc
Copy link
Contributor

wyuc commented Mar 21, 2026

Same feedback as #151 — this is a superset of that PR (105 files) and bundles multiple unrelated features. Please see the suggestions there: open issues/discussions for each feature first, then submit focused PRs. Thanks!

@wyuc wyuc closed this Mar 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants