Commit graph

3215 commits

Author SHA1 Message Date
ggurdin
9aee84f42c
5832 disable start activity button if user hasnt selected a role (#5833)
* fix: disable activity session start button if not selected role

* chore: always show text 'confirm' on activity session confirm role button
2026-02-26 16:05:36 -05:00
ggurdin
33e54d3457
feat: lazy load activities (#5828)
* feat: lazy load activities

* updates
2026-02-26 15:35:34 -05:00
ggurdin
aa2496dfee
feat: add feedback flag to analytics activities (#5829) 2026-02-26 15:27:23 -05:00
ggurdin
774432ef49
5825 remove unreferenced writing assistance code (#5826)
* chore: delete span details

* remove IT

* fix null check error

* more cleanup
2026-02-26 14:09:45 -05:00
ggurdin
097a8f06c3
fix: add back spacing between activity preview page CTA buttons (#5821) 2026-02-26 12:20:42 -05:00
ggurdin
1caa74c668
5759 if session filled redirect from choose role (#5815)
* move activity session page bottom section into its own widget

* activity session full mode

* fix loading of activity session preview on open app via course ping
2026-02-26 10:35:24 -05:00
ggurdin
d983f26dd5
fix: consider construct ID invalid if lemma is empty (#5813) 2026-02-25 13:18:14 -05:00
wcjord
473ffbaf24
docs: writing assistance redesign design spec (#5655) (#5696)
* "docs: writing assistance redesign design spec (#5655)

Add comprehensive design doc for the WA redesign:
- AssistanceRing replaces StartIGCButton (segmented ring around Pangea icon)
- Background highlights with category colors (not red/orange error tones)
- Simplified match lifecycle: open → viewed → accepted (no ignore)
- Persistent span card with smooth transitions between matches
- Send always available, no gate on unresolved matches

Remove superseded design docs (SPAN_CARD_REDESIGN_FINALIZED.md,
SPAN_CARD_REDESIGN_Q_AND_A.md, choreographer.instructions.md)."

* feat: replace ignored status with viewed status, initial updates to span card

* resolve merge conflicts

* rebuild input bar on active match update to fix span hightlighting

* cleanup

* allow opening span cards for closed matches

* no gate on sending, update underline colors

* animate span card transitions

* initial updates to add segmented IGC progress ring

* update segment colors / opacities based on match statuses

* use same widget for igc loading and fetched

* more segment animation changes

* fix scrolling and wrap in span card

* better disabled color

* close span card on assistance state change

* remove print statements

* update design doc

* cleanup

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-25 13:07:53 -05:00
ggurdin
77559b9838
fix: in public course preview, filter non-joined members from participant count (#5812) 2026-02-25 12:19:19 -05:00
ggurdin
2a17b401ee
chore: pause activity timer while loading activities (#5809) 2026-02-24 16:57:24 -05:00
ggurdin
c4d9a2d2b3
fix: don't hide emoji match for constructs with assigned emojis (#5807) 2026-02-24 16:46:50 -05:00
ggurdin
6608876ec6
chore: show banned users list in invite page (#5804) 2026-02-24 16:20:04 -05:00
ggurdin
d9eaf58f05
fix: give default text style to error indicator rich text (#5801) 2026-02-24 15:52:48 -05:00
ggurdin
e4bcda57f6
chore: always show error message on course load error (#5800) 2026-02-24 15:34:59 -05:00
ggurdin
fd319aa105
fix: throw exception if no activities can be loaded in analytics practice session (#5799) 2026-02-24 15:28:17 -05:00
Copilot
a754d16fc3
Use consistent share icon across course share button and invite menu (#5797)
* Initial plan

* Use share_outlined icon instead of upload in ShareRoomButton

Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>
2026-02-24 15:03:43 -05:00
ggurdin
caf6c53a0c
chore: replace default synapse error message on knock banned room (#5798) 2026-02-24 15:01:19 -05:00
wcjord
7f1e8f5ea0
feat: client-side knock auto-accept via KnockTracker (#5794)
* feat: client-side knock auto-accept via KnockTracker

Replace server-side AutoAcceptInviteIfKnocked (removed in
synapse-pangea-chat PR #21) with client-side KnockTracker.

- Record knocked room IDs in Matrix account data (org.pangea.knocked_rooms)
- Auto-join when invite arrives for a previously knocked room
- Migrate storage from GetStorage to Matrix account data for
  cross-device sync and reinstall persistence
- Add joining-courses.instructions.md design doc

* formatting

* centralizes calls to knock-storage related functions

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-24 14:44:36 -05:00
Copilot
54a9a9a500
Fix language dropdown appearing above button on Find A Course page (#5788)
* Initial plan

* Fix Find A Course language dropdown search bar going to top of screen

Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>

* Fix dropdown positioning by adding maxHeight to DropdownStyleData

Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>

* chore: replace autofocus

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com>
Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-24 14:16:15 -05:00
ggurdin
91e03f7212
fix: save correct form for emoji uses, match example message tokens by lemma as fallback (#5787) 2026-02-24 13:24:08 -05:00
Kelrap
22c69df097
Use pulsing animation for activity end button (#5770) 2026-02-23 14:08:11 -05:00
ggurdin
acc8283269
chore: only exclude activity chats from bot options update function if showActivityChatUI (#5773) 2026-02-23 14:04:18 -05:00
ggurdin
c1b88c6dbd
fix: centralize activity constructs type in ActivityTypeEnum, skip over invalid morph uses (#5767) 2026-02-23 11:05:07 -05:00
wcjord
859cb78339
feat: fetch languages directly from CMS (#5764)
* feat: fetch languages directly from CMS

- Switch language_repo.dart to fetch from CMS REST API (public, no auth)
- Parse CMS paginated response format (docs[] envelope)
- Rename getLanguages URL to cmsLanguages in urls.dart
- Add 15 unit tests for CMS response parsing
- Add design docs: course-plans, layout instructions

* formatting

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-23 10:21:10 -05:00
ggurdin
117a03089e
5720 vocab practice should have feedback flag (#5761)
* chore: split up analytics activity page widgets into separate files

* started analytics practice refactor

* refactor how UI updates are triggered in analytics practice page

* some fixes
2026-02-20 13:25:21 -05:00
Kelrap
d4884e6215
Make emoji search view look like other emoji picker tabs (#5756) 2026-02-19 10:53:53 -05:00
ggurdin
e933df7e36
chore: update icon color for error indicator (#5757) 2026-02-19 10:51:22 -05:00
ggurdin
c9d70ab5d8
5719 level up issues (#5750)
* fix: ensure accuracy of XP before level to fix offset issue

* chore: remove level-up summaries
2026-02-18 15:45:32 -05:00
ggurdin
13700d9a9a
chore: skip short audio in audio practice (#5749) 2026-02-18 15:10:56 -05:00
ggurdin
f7539c184f
5721 practice example message improvements (#5748)
* organized analytics practice session repo

* refactor target generation for grammar error activities

* improve grammar error target generation

* more improvements to target generation
2026-02-18 14:55:54 -05:00
ggurdin
5c645904d0
chore: Move module location above module summary (#5746) 2026-02-18 13:18:08 -05:00
ggurdin
06c2047f77
fix: refresh knocking users indicator on space ID change (#5745) 2026-02-18 13:11:38 -05:00
wcjord
f6a048ca3e
feat: embed STT transcription in audio event content (#5731)
* feat: embed STT transcription in audio event content

Before sending the audio event, the client now fetches the STT
transcript first, then embeds it under 'user_stt' in the event
content. This mirrors the 'original_sent' pattern for text messages
and lets the bot read the transcript immediately without downloading
audio or calling choreo.

- Add ModelKey.userStt constant
- Rewrite onVoiceMessageSend to get transcript before sending audio
- Update getSpeechToTextLocal() to check userStt before botTranscription

* chore: replace inaccurate comment with TODO referencing #5730

* formatting

* fix pangea comments

* feat: make stt translations relate to pangea message events instead of stt representation events

* clean up pangea event types

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-18 12:39:38 -05:00
ggurdin
edcc1e9b43
fix: clear last result on start new file search (#5739) 2026-02-18 10:43:06 -05:00
avashilling
03745fff89
5702 audio practice tweaks (#5724)
* feat: add transcription and translation to audio practice

* fix: make sure answer form matches word in audio

and optimize distractor/answer selection with one pass through the list

* feat: audio practice progress bar

* fix: simplify audio logic
2026-02-18 09:52:15 -05:00
ggurdin
af9b9b4e1f
chore: brighten igc underlines (#5736) 2026-02-18 09:45:34 -05:00
ggurdin
ba054a2557
chore: remove duplicate send image button (#5735) 2026-02-18 09:38:37 -05:00
ggurdin
abc4a9630c
chore: fix text overflow in ping participants button on small screen with large text in Spanish (#5734) 2026-02-18 09:33:54 -05:00
ggurdin
9ce7c7b4cb
chore: autofocus email field in login with email page (#5733) 2026-02-18 09:28:37 -05:00
ggurdin
3100b2e4e5
fix: add guard to not update space hierarchy info if space ID changes while fetching (#5723) 2026-02-17 14:34:59 -05:00
ggurdin
33774da076
chore: log badge error to google analytic instead of sentry (#5718) 2026-02-17 09:50:21 -05:00
ggurdin
58513051f7
fix: always pass pos and morph when available on request TTS (#5716) 2026-02-16 16:00:28 -05:00
ggurdin
dea49e3086
chore: on token feedback response, replace all tokens when available (#5715) 2026-02-16 15:37:35 -05:00
ggurdin
55de949924
chore: set max lines for feedback text field (#5714) 2026-02-16 15:12:42 -05:00
ggurdin
a83cef7807
chore: better logging when getting event by construct use (#5708) 2026-02-16 12:25:31 -05:00
wcjord
8a3979c61b
feat: unified use-type-aware practice scoring (#5703)
* feat: unified use-type-aware practice scoring on ConstructUses

- Add practiceScore() and practiceTier to ConstructUses for shared
  scoring across message practice and standalone practice
- Add isChatUse, isAssistedChatUse, isIncorrectPractice getters to
  ConstructUseTypeEnum with exhaustive switches
- Add PracticeTier enum (suppressed/active/maintenance)
- Wire into PracticeSelectionRepo and AnalyticsPracticeSessionRepo
- 28 unit tests covering tier classification, scoring, and ordering

Closes #5700

* formatting, fix linting issue

* move some stuff around

---------

Co-authored-by: ggurdin <ggurdin@gmail.com>
2026-02-16 12:13:46 -05:00
ggurdin
c2472bd2a4
fix: add missing dependency (#5707) 2026-02-16 11:56:39 -05:00
wcjord
b6f368fa1f docs: add instruction docs for analytics, practice, activities, toolbar; adjust content-word scoring ratio (10:7)
- Add analytics-system.instructions.md
- Add practice-exercises.instructions.md (with three-tier design direction)
- Add conversation-activities.instructions.md
- Add toolbar-reading-assistance.instructions.md
- Update copilot-instructions.md header
- Change content-word multiplier from 9 to 7 in practice_selection_repo.dart
2026-02-15 15:49:26 -05:00
wcjord
75a237b90c
fix: prioritize bot DM in updateBotOptions, handle DM outside _targetBotChats (#5698)
Closes #5697

- Extract buildUpdatedBotOptions (pure) and applyBotOptionUpdatesInOrder
  (async orchestration) as top-level @visibleForTesting functions
- Handle bot DM independently of _targetBotChats filter — the DM may
  lack a botOptions state event or have a stale activityPlan, but it's
  the most important room to keep current
- Update remaining rooms sequentially (not Future.wait) to avoid rate-limiting
- DM errors propagate; other room errors are logged and isolated
- Add 17 unit tests covering both extracted functions
- Add profile.instructions.md design doc for profile settings architecture
2026-02-14 14:47:05 -05:00
ggurdin
3537cd5fd4
feat: add language indicators to analytics database entries (#5692)
* feat: add language indicators to analytics database entries

* better handling for database reinit

* don't clear database is last update not set
2026-02-13 15:06:21 -05:00