Skip to content

Changelog

Tom Caswell edited this page Apr 12, 2026 · 19 revisions

Changelog

v3.4.5 (2026-04-11)

Runtime UI Translation (CDN deliverable)

  • Widget static labels now retranslate when a student switches language inside the drawer. Previously, every mustache {{#str}} lookup in chat_widget.mustache rendered once at page load in the Moodle user's language and stayed frozen. Switching language from the settings panel only updated the input placeholder and conversation starters; bottom tabs (Chat/Voice/Notes), voice panel title and copy, history panel, header tooltips, footer buttons, and LLM picker labels all stayed English.
  • Added amd/src/i18n_strings.js: a bundled 46 language translation table for every static widget string. Missing keys fall back to English.
  • chat.js now tags the widget DOM with data-i18n-* attributes at init time and applies the current language immediately. The same pass fires on every language switch in both the compact language picker and the in drawer settings panel.
  • The fix ships via the CDN bundle (sola.min.js), so Saylor production running v3.4.4 picks up runtime translation on the next cdn_version bump without a plugin reinstall.
  • Covers: bottom tab labels, voice mode card (title, copy, ready status, start/end labels), Notes/History panel (title, subtitle, Saved/Recent views, empty states), header action tooltips (change avatar, settings, clear, reset, close), language suggestion banner, starters container aria label, footer Usability Testing and Feedback buttons, LLM picker labels, mic and send buttons, input placeholder.

Admin Rebranding for Upstream Usability

  • Removed the "SOLA:" prefix from every admin page display name so other institutions can use the plugin without Saylor-specific branding in the admin tree. The 7 settings pages now show as General, AI Provider & Models, Content & RAG, Safety & Moderation, Engagement, Branding & UI, Integrations & Delivery. The 4 external tool pages show as Survey Editor, Usability Testing Editor, Rubric Editor, WhatsApp Integration Test.
  • The top level admin category is now titled "AI Course Assistant" (from get_string('pluginname', ...)) instead of "SOLA (AI Course Assistant)". Student facing branding in the widget header still respects the short_name admin setting, which defaults to "SOLA" for Saylor and can be overridden per install.
  • Stable section identifiers (local_ai_course_assistant_general, etc.) are unchanged. URLs, bookmarks, and the self-updater all keep working.

Bug Fixes

  • Section error when clicking Global AI Settings from the wrench icon or Back to Settings links. The v3.4.4 settings restructure replaced the single local_ai_course_assistant admin settings page with a category of the same name containing 7 admin_settingpage children. 9 PHP admin pages still linked to the old /admin/settings.php?section=local_ai_course_assistant URL, which no longer resolves to an admin node and throws error/admin/sectionerror. Updated every link to /admin/category.php?category=local_ai_course_assistant instead, which lands on the plugin category page showing all 7 sub pages. Affected files: course_settings.php, rag_admin.php, update_admin.php, analytics.php, usertesting_admin.php, rubric_admin.php, survey_admin.php, integrity_admin.php, starter_settings.php.
  • Defensive registration of Catalyst's WhatsApp Integration Test admin page. Catalyst's fork adds whatsapp_test.php which calls admin_externalpage_setup('local_ai_course_assistant_whatsapptest'). The v3.4.4 settings restructure wiped that registration when Catalyst merged it, causing error/admin/sectionerror on their staging. settings.php now registers the page conditional on file_exists(whatsapp_test.php), so upstream installs without the file build a valid admin menu while Catalyst's fork works without a local patch.

Claude API: Adaptive Thinking

  • Adaptive thinking support for Claude models. When enabled via the new "Extended Thinking (Claude only)" admin toggle (AI Provider & Models page), SOLA sends thinking: {type: "adaptive"} to the Anthropic API. Claude decides when and how much to reason through a problem before answering. Thinking content is filtered out of the student facing response (streaming and non streaming). Temperature is forced to 1 when thinking is active (API requirement). Other providers ignore the setting.
  • Minimum max_tokens raised to 8192 when thinking is on to provide headroom for reasoning tokens.

Claude API: Prompt Caching

  • System prompt now uses Anthropic prompt caching. The system prompt is sent as a structured array with cache_control: {type: "ephemeral"} instead of a plain string. This enables server side prefix caching across all requests in the same course. Previously, every SSE chat request paid full input token cost for the system prompt even though the text was identical across users.
  • Token usage now captures cache_creation_input_tokens and cache_read_input_tokens from both streaming and non streaming responses, surfaced in get_last_token_usage().
  • Beta header prompt-caching-2024-07-31 included automatically.

Structured Outputs for Quiz Generation

  • Quiz generation now uses provider native structured output instead of relying solely on <quiz>JSON</quiz> delimiter prompting. For Claude, this uses the tool_use pattern with a forced tool_choice. For OpenAI compatible providers (OpenAI, Gemini, DeepSeek), this uses response_format: {type: "json_schema"}.
  • Response parsing cascades: structured JSON first, then <quiz> regex fallback, then raw JSON. Backward compatible with providers that do not support structured output (Ollama, Groq, etc.).
  • New get_quiz_json_schema() method defines the canonical quiz schema with additionalProperties: false for strict validation.

Provider Fixes

  • Ollama endpoint changed from /api/chat to /v1/chat/completions (the OpenAI compatibility layer). The native /api/chat uses NDJSON streaming, which is incompatible with the SSE parser in openai_compatible_provider. This was a latent streaming bug: Ollama chat would silently fail or produce no output.

Tooling

  • deploy_dev.py now accepts --target {dev,405,500,501,all}. Default stays dev (dev.sylr.org). --target all deploys to dev, dev405, dev500, and dev501 in sequence with a single tarball and S3 upload. The tarball is extracted into a per target scratch dir so parallel rsync does not collide.

CI

  • Both ci.yml and cdn-deploy.yml now set FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true to suppress the Node.js 20 deprecation warning and opt in early before the June 2 enforcement date.

v3.4.4 (2026-04-10)

Admin Settings Restructure

  • Admin settings split into 7 focused pages under a SOLA category (Site admin: Plugins: Local plugins: SOLA). Replaces the previous single scrolling page plus experimental JS tab hack.
    • General: enabled toggle, version banner, remote config URL
    • AI Provider & Models: provider, API key, model, temperature, system prompt, max tokens, history, starter editor link, token analytics link
    • Content & RAG: RAG toggle, embedding provider settings, chunk and top-k tuning, RAG admin link, performance content caps
    • Safety & Moderation: quiz hide, off-topic detection, wellbeing, integrity checks
    • Engagement: study plans, email and WhatsApp reminders, voice mode and realtime settings, surveys, usability testing, practice scoring rubrics
    • Branding & UI: institution name, display name, welcome message, chat greeting, display mode, position, avatar and colors
    • Integrations & Delivery: FAQ and Zendesk, Redash export, CDN delivery, plugin self-update
  • All 7 editor pages (Starter Editor, Survey Editor, Usability Testing Editor, Rubric Editor, RAG Index, Plugin Updates, Integrity Checks) now live under the same SOLA category in the admin tree.
  • Direct links to legacy /admin/settings.php?section=local_ai_course_assistant 404. Admins should use the SOLA category or any of the new local_ai_course_assistant_* section names.
  • All 92 existing setting fields and their saved values are preserved. No DB migration.

Bug Fixes

  • Fatal curl class not found on update_admin.php and rag_admin.php reindex path. \curl is not auto-loaded by Moodle. Added require_once($CFG->libdir . '/filelib.php') inside every class method that creates a \curl instance (plugin_updater, reminder_manager, zendesk_client, embedding_provider\base_embedding_provider, provider\base_provider). Previously these silently failed on cold includes.
  • Removed the obsolete JS tab navigation hack and duplicated top save button script from the single settings page, now redundant with the native multi page layout.

QA

  • Smoke tested all 9 admin pages (7 settings pages and analytics, token analytics, rubric editor, survey editor, usability testing editor, RAG admin, update admin, integrity admin, starter settings) via authenticated HTTP: all return 200 with zero errors and zero warnings.
  • Verified every analytics method, every manager class (survey, usertesting, rubric, token cost) runs without argument or signature errors.

v3.4.3 (2026-04-10)

Internationalization Cleanup

  • Replaced 17 hardcoded English strings in the widget template with Moodle string lookups: language suggestion banner aria labels, debug panel buttons (Refresh, Copy all, Close), voice panel title, Notes tab saved subtitle and empty state, history Saved and History tabs, LLM provider and model picker labels, and footer Usability Testing and Feedback links.
  • Added 17 new chat:* string keys to the English language file and translated all of them into the other 45 supported languages.
  • Backfilled chat:starter_help_page, chat:starter_ask_anything, and chat:starter_review_practice in 41 language files that previously fell back to English.
  • Approximately 925 new or backfilled translation strings across the full 46 language set.

Starter Translation Fix

  • Fixed a bug where conversation starter buttons did not re-translate when the student picked a different language at runtime. The client side gate was checking data-translatable, which the server template never emitted. Switched the gate to data-builtin, which the template already emits correctly. Also added data-builtin="1" to the fallback starter buttons rendered when starter_manager returns no data.

Voice Feature Click Fix

  • Fixed Conversation Practice and Pronunciation Practice clicks appearing to do nothing on non secure contexts (plain HTTP served over a LAN IP). The preconditions check ran after the UI already switched to voice mode, and the error message was routed through the chat message area which is hidden in voice mode. Reordered the checks to run before the mode switch and routed errors through the visible notification toast.

v3.4.2 (2026-04-09)

Quiz and Starters

  • Renamed "Help With This" to "Explain This Page" and "Quiz Me On This" to "Quiz Me"
  • Quiz topic picker filters out non-content sections (enrollment, certificate, feedback, survey, etc.)
  • Learning Objectives picker now extracts real objectives from "Unit X Learning Outcomes" pages (supports GENERICO tags, HTML lists, and plain text)
  • Updated starter label translations in all 46 languages to match new concise button style

Voice Tab Improvements

  • Voice mode SSE calls now include page context (pageid, pagetitle) so AI responses are relevant to the current lesson
  • Fixed voice transcript ordering: user and assistant messages now appear in correct chronological order
  • Voice tab toggle is now per-course (Inherit global / Force On / Force Off in course settings)

Performance

  • New admin settings: Max Content Per Resource and Max Total Content (Performance tab) for tuning response speed vs context
  • Defaults: 1,500 chars/resource, 15,000 total (previously hardcoded at 3,000/40,000)
  • RAG retriever caches decoded embedding vectors in memory (avoids repeated JSON decoding)

Language and Localization

  • Input placeholder translates when language is switched (15 languages supported)
  • Notification confirms language change
  • English Lock fixed: when enabled per course, frontend forces English, disables language picker, shows "(Locked)" label, and blocks language changes in settings panel

White Label

  • Chat widget title now uses the configured short name instead of hardcoded "SOLA" lang string
  • All chat:title references in the template replaced with dynamic {{shortname_label}}
  • New admin setting "Enable Voice Tab" (off by default) controls visibility of the Voice tab in bottom navigation
  • Voice starters (Conversation Practice, Pronunciation Practice) remain separately controlled via Starter Settings

Admin Settings Tabs

  • Settings page now has tabbed navigation (General, AI Provider, RAG, Quiz, Safety, Study Plans, Branding, FAQ & Support, Voice, Updates, CDN, Analytics Export, Integrity, Surveys, Practice Scoring, Usability Testing)
  • Default avatar border color updated to #152233

New LLM Providers

  • Added Mistral AI (default model: mistral-large-latest)
  • Added Groq — ultra-fast inference for open-source models (default: llama-3.3-70b-versatile)
  • Added OpenRouter — unified API for 500+ models from 60+ providers (default: openai/gpt-4o)
  • Added xAI (Grok) (default model: grok-3)
  • SOLA now supports 11 LLM providers total

Model Resilience

  • Model field now defaults to blank — each provider's built-in default is used automatically and stays current as models update
  • 404 errors now show which model failed and what the correct default is
  • Automatic fallback: misspelled or deprecated models retry with the provider's default so students are never blocked
  • Fallback events logged in audit trail

Cost Tracking

  • Rate card expanded to 40+ model prefixes across all 11 providers
  • TTS calls (tts-1) now log approximate token usage for cost tracking
  • Whisper transcription calls now log usage
  • Embedding API calls now log actual token counts from the OpenAI response
  • Rate card includes: OpenAI Realtime voice, TTS, embeddings, Whisper, Gemini, Mistral, Groq, xAI, MiniMax

WCAG 2.1 AA Accessibility Compliance

  • prefers-reduced-motion support: all animations/transitions disabled for vestibular disorder users
  • prefers-contrast: more support: increased borders for high contrast mode
  • All font sizes converted from px to rem for proper text scaling
  • Minimum font sizes raised to meet WCAG readable thresholds
  • Focus-visible indicators (3px blue outline) on all interactive elements
  • Tab focus trapping in drawer modal
  • aria-live on typing indicator for screen reader announcements
  • aria-invalid on input during error states
  • aria-labels on language banner buttons
  • contentEditable mode announced to screen readers
  • Color contrast improvements across all UI elements

Brand Update

  • Default brand color changed from #173140 to #023e8a (matches learn.saylor.org)

UX Improvements

  • Fixed drawer flash on page load (CSS visibility guard)
  • Removed "Ask Anything" starter (redundant with typing)
  • Removed "Review & Practice" starter (confusing overlap with Quiz)
  • Conversation Practice and Pronunciation Practice disabled by default (admin enables per-course)
  • Starters simplified to 4: Help With This, Quiz Me, Study Plan, AI Project Coach
  • Analytics dashboard tabs moved to top of analytics page (above course list)

v3.4.0 (2026-03-30)

Analytics Dashboard Expansion

  • 7 tabbed analytics sections: Overall Usage, By Course, AI vs Non-Users, By Unit, Usage Types, Themes, AI Feedback
  • Chart.js visualizations (line, bar, doughnut, pie, grouped bar charts)
  • Per-message thumbs up/down ratings with hallucination flagging
  • AI vs non-users comparison (completion rates, grades, time to completion from Moodle core)
  • Usage by unit/section with progression tracking
  • Interaction type tracking (chat, voice, quiz, practice)
  • Keyword/concept extraction with category tagging (concept vs navigation/UX)
  • Messages-to-resolution analytics
  • CSV export for all tabs
  • 9 new web service endpoints for lazy-loaded AJAX data
  • 2 new database tables (msg_ratings, keywords) + 2 new columns on msgs (interaction_type, cmid)

Avatar Updates

  • New character illustrations for avatars 02-10

New LLM Providers

  • Added Mistral AI (default model: mistral-large-latest)
  • Added Groq — ultra-fast inference for open-source models (default: llama-3.3-70b-versatile)
  • Added OpenRouter — unified API for 500+ models from 60+ providers (default: openai/gpt-4o)
  • Added xAI (Grok) (default model: grok-3)
  • SOLA now supports 11 LLM providers total
  • Model 404 fallback: misspelled or deprecated models automatically retry with the provider's default

v3.3.0 (2026-03-26)

CDN Frontend Delivery

  • New: Optional CDN mode serves JS and CSS from an external CDN (e.g. GitHub Pages) instead of Moodle's filesystem, enabling frontend updates without a plugin upgrade or hosting provider involvement
  • Mini AMD loader bundles all 10 JS modules + shims for core/ajax and core/str into a single sola.min.js (224KB)
  • CSS minified to sola.min.css (73KB)
  • Two new admin settings: CDN Base URL and CDN Asset Version (cache busting)
  • i18n strings pre-loaded as JSON in the template for CDN mode
  • GitHub Actions workflow (cdn-deploy.yml) auto-deploys to gh-pages on push
  • Clearing the CDN URL instantly reverts to local AMD files (zero-risk fallback)

Avatar Updates

  • Replaced avatar SVGs (02-10) with optimized 120x120 PNGs (13-22KB each, down from 150-423KB)
  • Removed unused pix assets (icon.svg, saylor_logo.svg, old avatar_01 files)

v3.2.3 (2026-03-20)

UI Simplification

  • Removed Expand chat button from the header — the chat window is now fixed at its default or user-resized size; expand/collapse state is no longer persisted to localStorage
  • Cleaned up associated CSS (.local-ai-course-assistant__drawer--expanded styles, icon toggle rules) and all 46 language string files (chat:expand, chat:collapse)

v3.2.2 (2026-03-16)

Security Review Fixes (Catalyst WR-483440)

Critical: Installation Blocker

  • Fixed install.xml embedding field: TYPE="longtext"TYPE="text" — plugin can now install on fresh Moodle instances

GDPR Compliance

  • Privacy provider now declares all 9 personal data tables (was 4)
  • delete_data_for_user() now covers _feedback, _survey_resp, _ut_resp, _audit, _practice_scores
  • Fixed delete_data_for_users() asymmetry — now mirrors single-user deletion
  • export_user_data() exports study plans, reminders, feedback, and survey responses

Code Standards

  • All camelCase PHP variables renamed to snake_case (Moodle standard)
  • PHPDoc blocks added to all classes/external/ public methods
  • Hardcoded English strings replaced with get_string() in sse.php, tts.php, reminder_manager.php

Race Condition Fix

  • userid_courseid index on _convs table set to UNIQUE
  • get_or_create_conversation() wrapped in try/catch for concurrent requests
  • Upgrade deduplicates existing conversations and migrates orphaned messages

Other

  • course_settings.php uses course context instead of system context (fixes breadcrumbs)
  • Removed create_demo_course.php from production package

v3.2.1 (2026-03-16)

White-Label Support

  • Fully white-labeled: all hard-coded "Saylor" references replaced with {INSTITUTION} placeholder
  • Institution name flows from admin setting → PHP → mustache → JS runtime substitution
  • Default remains "Saylor University" via the institution_name admin setting
  • Plugin name changed to "Online Learning Assistant (SOLA)"
  • Removed duplicate (dead) chat:greeting entries from all non-EN lang files

New: Conversation Starters Refresh

  • Reordered default starters: Help With This, Quiz Me On This, Ask Anything, Review & Practice, Study Plan, AI Project Coach, Conversation Practice, Pronunciation Practice
  • New AI Project Coach starter with rocket icon — guides students through AI-assisted project work
  • Renamed starters: "Help With This Page" → "Help With This", "Quiz Me" → "Quiz Me On This", "Practice Speaking" → "Conversation Practice"
  • All 46 language translations updated for renamed and new starters

Message Footer Layout

  • Source attribution link on bottom-left, action buttons (copy/bookmark/TTS) on bottom-right of each AI response
  • Bookmarks now include source attribution links; displayed in History > Saved panel with same left/right layout

TTS Improvements

  • "Stop reading" button appears below messages during TTS playback so users can interrupt audio
  • Word highlighting sync fixed: word-weighted timing model replaces linear character interpolation for accurate tracking
  • HTMLAudio fallback now uses requestAnimationFrame (~60fps) instead of timeupdate (~4fps) for smoother highlighting

Mobile

  • Swipe right on the drawer to close the SOLA widget on mobile devices (single-finger, ≥80px horizontal)

Streaming & Chat UX

  • SOLA_NEXT tags stripped during streaming so they never appear in the typewriter animation
  • Welcome-back message suppressed for short absences (requires 1+ hour away)
  • Always-visible stop button in a fixed slot outside the scrollable area — visible before and during streaming
  • SOLA_NEXT suggestion chips auto-scroll into view
  • Scroll-to-bottom button click handler fixed for reliable scrolling

Notes Tab (formerly History)

  • History tab renamed to Notes with bookmark icon
  • Title changed to "Notes and Conversation History"
  • Saved is now the default view (was Recent)
  • Saved items are editable: double-click or Edit button to modify text, Enter to save, Esc to cancel
  • Recent items now show Copy and Save buttons plus source attribution links
  • All 46 language translations updated

New: Practice Scoring

  • AI-generated score cards after conversation and pronunciation practice sessions
  • Per-criterion scores (1–5) with progress bars and individualized feedback
  • Overall score with encouraging summary message
  • "Practice Again" / "Done" action buttons on score cards
  • Customizable scoring rubrics via admin editor (rubric_admin.php)
    • Global default rubrics for conversation (5 criteria) and pronunciation (4 criteria)
    • Per-course rubric overrides with scope selector
    • Draggable criterion cards, add/remove/reorder, live preview
    • Reset to defaults or remove course overrides
  • Scores saved to database for future analytics
  • Scoring prompt instructions added to system prompt (context_builder.php)
  • [SOLA_SCORE] tag pattern (stripped during streaming, parsed on completion)
  • New web services: get_rubric, save_practice_score
  • New DB tables: rubrics, practice_scores
  • Enable/disable via admin setting practice_scoring_enabled

Voice Tab Improvements

  • Voice tab labeled "(Experimental)" to set user expectations
  • Removed small End button from voice overlay — only the main Stop button remains
  • ELL voice exchanges shortened to 1–2 sentences max for natural turn-taking
  • AI finishes speaking before expecting a response (no overlapping speech)

White-Label Short Name

  • All hardcoded "SOLA" references replaced with configurable shortname from admin settings
  • Short name flows through data-shortname attribute from PHP → mustache → JS
  • Voice overlay, intro modal, greeting, and email export all use the configurable name
  • Default remains "SOLA"

Intro Modal Update

  • Updated intro modal with white-labeled display name
  • CTA button changed from "Let's get started →" to "Continue →"

Deployment

  • deploy_dev.py: added upgrade safety net (re-checks for pending upgrades after main loop)
  • deploy_dev.py: version verification step confirms deployed version matches expected

UX Improvements

  • Welcome screen restored: first-time intro modal was broken by a callback that permanently hid starters
  • Toggle button pulse restored: fixed CSS transition/animation conflict that suppressed idle and first-visit pulse
  • Re-clicking the Chat tab shows conversation starters for quick topic selection
  • Header icon spacing fixed (gap between wrench and analytics buttons)

v3.2.0 (2026-03-13)

Analytics Dashboard

  • Bulk actions with checkboxes: enable/disable SOLA and Usability Testing for selected courses
  • Sortable columns, status filters, and course search on the main course list
  • "Back to All Courses" navigation link on per-course analytics view

Naming

  • Renamed "User Testing" to "Usability Testing" throughout the plugin and documentation

UI Polish

  • Compact input field height (reduced composer padding and gap)
  • Removed duplicate thumbs-up feedback button from header

v3.1.0 (2026-03-12)

Usability Testing

  • In widget testing panel with 8 default tasks (concept explanation, follow ups, quiz, off topic handling, overall value, feature wishlist, recommendation, settings usability)
  • Step through flow with progress bar, "Go to SOLA" pause button, and completion screen
  • Each response auto captures message count and session duration
  • Results displayed in analytics dashboard with per task breakdowns
  • Fully customizable via admin task editor (drag reorder, type switching, per course overrides)
  • External form link option with {{userid}}, {{courseid}}, {{messages}}, {{session_minutes}} placeholders

AI Insights

  • New "AI Insights" section on per course analytics page
  • One click AI analysis of feedback, survey, and usability testing data
  • Returns structured report: key issues, feature requests, positive highlights, and prioritized recommendations

Institution Name

  • New institution_name admin setting under Branding (default: "Saylor University")
  • System prompt uses {{institution}} placeholder
  • Avatar label uses the setting across all 46 language files

UX Improvements

  • Toggle button acts as Home when drawer is already open (shows starters instead of closing)
  • Stop button appears during SSE streaming so users can interrupt long responses
  • Voice VAD threshold increased (0.012 to 0.02) and silence duration extended (1.7s to 2.1s) to reduce false triggers
  • Email address field in settings panel now editable (was read only)
  • Source attribution prompt strengthened to prefer specific activity links over generic course links

Admin Dashboard

  • Disable All / Enable All bulk toggle buttons on analytics course list
  • Course search/filter input to quickly find specific courses

Language Support

  • All translation layers at 46 languages (added Hebrew starter prompts)

Database

  • New tables: _ut_tasks, _ut_resp

Web Services

  • New: get_usertesting, submit_usertesting_response, generate_insights

v3.0.3 (2026-03-12)

Survey Enhancements

  • Rating question now shows "1 is worst, 5 is best" labels (min_label/max_label support)
  • New survey question editor admin page: drag reorder, live preview, per course overrides, reset to defaults
  • Survey frequency control respects admin setting (once/monthly/quarterly/unlimited) instead of one time only

Source Attribution

  • Source pills now link to the specific course activity page instead of the generic course page
  • New [SOURCE:activity:CMID] tag format with module lookup from SSE metadata
  • SSE meta event includes modules map (cmid to URL/title) for activity level attribution

AI Feature Awareness

  • System prompt now describes all settings panel features (reminders, language, coaching style, avatar)
  • AI correctly directs students to the gear icon for setting up phone numbers, email reminders, etc.

v3.0.2 (2026-03-12)

Bug Fixes

  • Fixed survey question editor POST handling and admin page registration

v3.0.1 (2026-03-12)

New Features

  • Student survey tool: configurable in chat survey with multiple choice, rating, and long text questions
  • Survey results displayed in analytics dashboard with per question breakdowns
  • get_survey and submit_survey_response web service endpoints
  • Survey trigger after configurable number of chat messages

Database

  • New tables: _surveys (survey definitions) and _survey_resp (individual responses)

v2.3.0 (2026-03-11)

New Features

  • SOC2 audit logging: action audit trail with IP, user agent, and details
  • New _audit database table for compliance tracking

v2.2.0 (2026-03-11)

My Saved Content Panel

  • Renamed "Saved Responses" to "My Saved Content"
  • Bookmark badge changed to dot indicator (no counter)
  • Each saved item shows date, source link, and expanded text preview
  • Action buttons: Copy, TTS (read aloud), Edit (send to chat), Remove
  • Source URLs from course content saved with bookmarks

Starter Prompt Translations

  • Added translated AI prompts for 19 additional languages (bg, cs, da, nl, fi, de, el, hu, it, ja, ko, nb, pl, ro, sk, sv, th, tr, uk)
  • Total starter prompt translations: 45 languages (was 26)
  • Clicking a starter chip now sends the prompt in the selected language when UI is non-English

New Language: Bulgarian

  • Full support: SUPPORTED_LANGS, STARTER_LABELS, STARTER_PROMPTS

Realtime API

  • Model updated from deprecated gpt-4o-mini-realtime-preview to gpt-realtime-mini
  • Fixed GitHub Actions smoke test workflow permissions

v2.1.0 (2026-03-10)

New Features

  • Bookmarks header button with dedicated dropdown panel (moved out of user settings)
  • TTS audio caching: repeat plays are instant (no repeat API call, 20 entry cache)
  • Clickable source attribution pills: "From: Current Page" and "From: Course Materials" link to actual content
  • Redash analytics export endpoint (redash_export.php) with API key authentication
  • Translated conversation starter prompts (26 languages)
  • Language selector clarified as "SOLA Language" with explanatory description

Bug Fixes

  • SOURCE tag regex handles whitespace variations, preventing bracket leaks
  • More permissive SOLA_NEXT tag stripping

Technical

  • SSE metadata event emits page/course URLs for source link resolution
  • New redash_api_key admin setting under Analytics Export section

v2.0.0 (2026-03-10)

New Features

  • Self update mechanism: check for and install updates directly from the plugin admin interface
  • Automated integrity monitoring: 10 daily health checks with email reporting
  • Enhanced admin settings with descriptive help text and top save button
  • Starter settings help documentation with collapsible guide
  • Course settings info box explaining override behavior

Admin Pages

  • Plugin Updates page with version comparison, release notes, and one click install
  • Integrity Monitoring page with on demand checks and results table

v1.6.0

New Features

  • Moodle mobile app support via db/mobile.php
  • Four web services flagged for MOODLE_OFFICIAL_MOBILE_SERVICE
  • Ionic template with message list, quick chips, and typing indicator

Fixes

  • Fixed db/messages.php: replaced removed MESSAGE_DEFAULT_LOGGEDIN/MESSAGE_DEFAULT_LOGGEDOFF constants with MESSAGE_DEFAULT_ENABLED (Moodle 4.5+ compatibility)

v1.5.3

  • Drawer pushes page content aside on desktop instead of overlapping

v1.5.2

  • Fix mic activation
  • Fix SOLA_NEXT tag leak
  • Fix eraser icon

v1.5.1

  • Custom welcome/greeting messages
  • Drawer CSS fixes
  • Voice chip fix

v1.3.0

New Features

  • "I only have N minutes" quick mode with time constrained responses
  • Extended re engagement (5+ day absence) with warmer welcome and refresher chips
  • Progress awareness via Moodle completion API
  • Struggle detection with automatic tone shift
  • First generation student support toggle
  • Spaced repetition nudges for topics studied 3 to 14 days ago

v1.2.0

New Features

  • Coaching style preference (settings panel dropdown)
  • Crisis/distress detection with wellbeing resources
  • Study break reminders after 30 messages
  • Quiz encouragement messages based on score

v1.0.0

Initial Release

  • Multi provider AI backend with SSE streaming
  • Practice quizzes with score tracking
  • 26 language UI, 43 language STT/TTS
  • OpenAI Realtime voice mode
  • SVG avatar system
  • Study plans and reminders
  • RAG semantic search
  • Analytics dashboard
  • Draggable, resizable widget
  • Conversation starters
  • Copy, bookmark, and read aloud on messages
  • Study streaks
  • Message timestamps
  • Typewriter animation

Clone this wiki locally