Commit Graph

256 Commits

Author SHA1 Message Date
leo 74b791e207 🐛(makefile) fix passing args to tests in makefile
When using Makefile to launch tests, passing flags as well as specific
classes (using "::") was broken. This PR fixes this issue, by adding
an `ARGS` argument allowing to do
`make test ARGS="core/tests/foo.py::Test::x -vv"`.
2026-07-06 15:17:05 +02:00
Bastien Ogier df1495c97b 🚀(paas) fix scalingo frontend build failure
(paas) fix scalingo frontend build failure
2026-07-03 19:40:15 +02:00
Florent Chehab c95e1c67bd ⬆️(summary) update ffmpeg to 8.1.2
Update ffmpeg to 8.1.2 inside summary docker image.
Maintenance task.
2026-07-03 18:51:11 +02:00
lebaudantoine dd6b4512c8 🔖(minor) bump release to 1.22.0 2026-07-03 17:32:46 +02:00
lebaudantoine edab18d94a 🩹(helm) fix Helm ingress rendering when passing multiple hosts
Passing a list of hosts in the ingress was broken: the template
helpers were called with the current loop context (`.`) instead of
the root context (`$`), so the service name was rendered incorrectly
inside the hosts loop.
2026-07-03 14:34:39 +02:00
Cyril d54e9c2ad0 ♻️(frontend) autofocus stop button in fullscreen share warning
Replace the focus effect and ref with autoFocus on the stop button.
2026-07-03 11:31:36 +02:00
ilias 924fe95d94 📝(docs) update changelog for S3 notification key compatibility 2026-07-02 12:23:31 +02:00
lebaudantoine e42b083f20 🛂(backend) reject user access tokens on the API
The original implementation, introduced two years ago, was incorrect
and exposed the API to an undesired authentication mode: any user
access token obtained for a given user was being accepted as valid
credentials on the external API.

Restrict authentication to the intended mode so that user access
tokens are no longer accepted on this API.

Thanks @lunika spotting this.
2026-07-01 11:24:59 +02:00
Cyril e9bdf173de 🩹(frontend) enable screen share button in PiP
Enable screen share button in PiP by passing showScreenShare to PipControlBar
2026-06-30 16:18:05 +02:00
Cyril f98e884067 (frontend) cap and paginate tiles in picture-in-picture
Cap PiP grid at 5 tiles per page with active-speaker priority and pagination.
2026-06-29 16:55:15 +02:00
lebaudantoine 3d4dc2d631 🚸(frontend) use "Advanced" instead of "Premium" in the sidepanel
Following internal feedback, rename the "Premium" wording to
"Advanced" across the transcription and recording sidepanels, so the
label no longer implies a paid tier.
2026-06-29 16:38:54 +02:00
leo 526e96797e ♻️(env) refactor env variables handling
Add missing variables and homogenize env settings between agents.
Create missing dist file for metadata collector.
2026-06-29 13:28:54 +02:00
Maarten Draijer 8903a55008 📝(docs) document rebranding the favicon via a volume mount
The favicon is bundled into the frontend image as static files served from
/usr/share/nginx/html. Rather than add a runtime config knob, document how to
overlay custom icons with a volume (ConfigMap + frontend.extraVolumes/
extraVolumeMounts). This serves the right icon from the first byte — no
rebuild, no favicon flash — and covers every variant, including the iOS
home-screen and Android/PWA icons.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 03:12:31 +02:00
leo aee1847303 (backend) add LiveKit egress_ended fallback for saving recordings
Recording lifecycle previously relied exclusively on the MinIO storage-hook
endpoint to transition from STOPPED to SAVED, which made the system dependent
on MinIO bucket notifications and lifecycle configuration. Introduce support
for LiveKit egress_ended webhook (EGRESS_COMPLETE, EGRESS_LIMIT_REACHED) as
 an alternative finalization mechanism for self-hosted deployments that do
 not use MinIO / S3 hooks.

Change behavior of existing configuation RECORDING_STORAGE_EVENT_ENABLE.
When the LiveKit mechanism is enabled (RECORDING_STORAGE_EVENT_ENABLE=False),
RecordingEventsService.handle_complete is triggered from
LiveKitEventsService._handle_egress_ended.
2026-06-24 20:51:58 +02:00
Florent Chehab 9b7c449ca5 🐛(summary) explicit transcription response format
We should be able to use other transcription services,
those usually relie on response_format="diarized_json"
to produce what we need.

Note that as part of this change, we stop using
openai library for making this call to avoid
casting the result to a payload that doesn't
contain the elements we used to rely on.
(setting this specific format auto cast the
results in openai lib). We keep the old
result class used.
2026-06-18 18:10:50 +02:00
Florent Chehab 5c15140783 (backend) add command to clean pending and deleted files
Since we have added custom backgrounds, they could be
soft deleted but were never really deleted.
This commits introduces a command to actually delete
this files.
In introduces also a command to purge pending upload
.
2026-06-18 18:07:43 +02:00
lebaudantoine 898bc9a0f8 🔖(minor) bump release to 1.21.0 2026-06-15 18:29:52 +02:00
Florent Chehab fd1715bacf ️(frontend) proper aria labels on custom backgrounds
* Set the aria-label to something meaningful,
* Set the delete btn aria label
2026-06-15 17:49:50 +02:00
lebaudantoine c0feb1ee82 🐛(frontend) fix metadata agent collector enabled check
Fix an incorrect check that caused issues in production when
determining whether the metadata agent collector is enabled.
2026-06-15 17:48:50 +02:00
leo 135b99aee7 (summary) add optional satisfaction survey footer
Add a footer to transcription outputs linking to an external satisfaction
survey. The survey URL is built from TRANSCRIPTION_SATISFACTION_FORM_BASE_URL.
When TRANSCRIPTION_SATISFACTION_FORM_BASE_URL is unset or None, the
footer is omitted.
2026-06-15 17:33:24 +02:00
lebaudantoine 040df0e15a 🚸(frontend) mute participants by default when joining a large meeting
When joining a meeting that already has many participants, new
participants are now muted by default.

This is an empirical change, not directly requested by users but
informed by user experience: a lot of people joining large meetings
arrive with their microphone and/or camera open, which can be
painful for the host, who otherwise has to mute everyone or ask
everyone to mute. Many of these participants are inattentive but
still noisy.

If you are joining a room that is already at a certain size, you are
probably not the one expected to speak; presenters typically join
among the very first participants.
2026-06-15 17:02:00 +02:00
lebaudantoine 00e197b216 🚸(frontend) mute join notification sound in larger rooms
In particularly large rooms, with more than 5 or 10 participants,
the entry notification sound can quickly feel spammy.

A configuration to disable it exists, but new users do not discover
it easily. The sound notification is most useful while waiting for
the first few participants to arrive; once a few people are in, the
meeting usually starts and the sound becomes more disruptive than
helpful.

The visual notification remains in place, so users are still aware
when newcomers join. Roll this out and check whether users find the
change helpful.
2026-06-15 17:02:00 +02:00
lebaudantoine d4a7cf279c (frontend) allow hiding the login button via a URL parameter
Required by some self-hosters who want to present a link to
participants that are guests only, without access to their SSO. For
example, a meeting between a citizen and a public servant where the
guest is known not to have an account.

Also useful when rendering the join page inside an iframe.
2026-06-14 00:49:42 +02:00
lebaudantoine 70a296eea6 (frontend) allow disabling silent login via a URL parameter
Several clients ran into issues with the silent login, leading to
redirections that were not appropriate for their use case.

Offer a URL parameter to control this behavior and disable silent
login when needed.
2026-06-14 00:49:42 +02:00
falkTX 13036f6ab7 (frontend) enhance noise reduction with BBBA audio processing pipeline
Replace the basic RNN noise processor with a more advanced audio
pipeline powered by Big Blue Better Audio (BBBA), a project
supported by the Prototype Fund.

The new WASM-based pipeline introduced by @falkTX and
@trummerschlunk adds:
- voice isolation
- high-pass filtering
- spectral balancing
- multiband compression
- low-pass filtering

This significantly improves overall audio quality and speech
clarity.

More information about the pipeline is available on the
trummerschlunk/BigBlueBetterAudio repo.

Voice isolation still relies on RNNNoise, a widely used deep
learning-based denoising model. Audio quality could be further
improved in the future if DeepFilterNet becomes usable directly
in the browser.

Their code has been released in an NPM package under GPL license.
2026-06-13 13:30:20 +02:00
lebaudantoine 64819b3696 🔖(minor) bump release to 1.20.0 2026-06-12 17:25:56 +02:00
snyk-bot 16f465432d fix: upgrade react-i18next from 15.1.1 to 17.0.8
Snyk has created this PR to upgrade react-i18next from 15.1.1 to 17.0.8.

See this package in npm:
react-i18next

See this project in Snyk:
https://app.eu.snyk.io/org/lasuite-dinum-default/project/96ea03d8-8d09-493d-86bf-363f274e129e?utm_source=github&utm_medium=referral&page=upgrade-pr
2026-06-12 09:11:07 +02:00
leo 61f7ad05e9 🐛(frontend) fix noise reduction left-channel-only audio
Fix bug with RNNoise noise reduction which interprets mono input
as left channel with some browsers.
2026-06-11 16:26:13 +02:00
lebaudantoine 6d06aee92d 📝(addon) update the changelog
please refer the previous commits where I enhanced the whole
addin features.
2026-06-11 15:16:52 +02:00
lebaudantoine e5184695bb 🔖(minor) bump release to 1.19.0 2026-06-04 19:13:32 +02:00
leo 3537fdf648 ♻️(agents) replace deprecated room options API
The LiveKit integration was still using RoomInputOptions and
RoomOutputOptions, which emit deprecation warnings.
Update the implementation to use the unified RoomOptions API.
2026-06-04 18:37:48 +02:00
lebaudantoine aca3261a9a ⬆️(backend) upgrade idna to >=3.15 to address CVE-2026-45409
Pin idna to >=3.15 via uv constraint-dependencies to fix a moderate
severity (CVSS 5.3) information disclosure vulnerability. The flaw is
network-exploitable with no authentication required.
2026-06-04 17:53:40 +02:00
renovate[bot] 553df5070e ⬆️(frontend) update js dependencies 2026-06-04 17:18:33 +02:00
Florent Chehab c79984a883 🔒️(backend) prevent accessing files if they are not ready
With the addition of the ANALYSING state
files could be accessed in the short time they
were in that state.
We now require files to be in ready.

Also adds missing frontend types (no impact).
2026-06-04 17:03:42 +02:00
leo be35c1d6e0 ⬆️(dependencies) update python dependencies
Update python dependencies.

Co-Authored-By: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-06-04 15:34:39 +02:00
Florent Chehab 5602d256d8 (backend) add file specific admin
Adds a file (background image) specific django admin.
Files can be previewed, and deletion is properly managed.
2026-06-04 11:41:05 +02:00
Florent Chehab d9804172e7 🔇(summary) make ffmpeg quiet
In the refactoring of the prepare pipeline, ffmpeg
was added in non quiet mode.
2026-06-04 10:22:27 +02:00
leo 61d0043790 🐛(agents) fix shutdown exception in metadata extractor
Remove a redundant drain operation causing an exception during the
metadata extractor shutdown.
2026-06-03 19:07:16 +02:00
lebaudantoine 73a7841b96 🔖(minor) bump release to 1.18.0 2026-06-03 14:46:26 +02:00
Florent Chehab a82d7f885a 🔒️(backend) prevnt file change post checks
Before this commit, post a file check, the policy could be
reused to change the verified file.
Now, files are uplaoded to a temporary location, then inside
a transaction that prevents concurrent calls, the file is
copied to its final destination and the checks are run on that one.
A new file can still be updated with the policy but it will never be read, etc.

As part of this change, all files in the new tmp directory
on s3 should have an expiration policy.
2026-06-03 13:45:31 +02:00
lebaudantoine 913d4f91ae 👷(helm) add Kubernetes job for duplicate user merge command
Introduce a Kubernetes job to run the `merge_duplicate_users`
management command on the backend, as suggested by @rouja.

This provides a standard and reproducible way to execute the user merge
process in deployed environments without requiring manual access to
application containers.

The job can be used alongside the command's dry-run mode to validate
the impact of a merge operation before applying changes.
2026-06-03 13:19:26 +02:00
lebaudantoine 29b0a6fcb4 🧑‍💻(backend) add management command to merge duplicate users
Add a management command to merge duplicate users and reassign all
granted resources to the most recent user account in the database.

Support a dry-run mode to estimate the impact of the operation before
applying any changes. This helps validate the command and identify
potential issues in environments where realistic testing is difficult.

Add unit tests to verify the command behavior and ensure database
integrity is preserved during the merge process.
2026-06-02 21:55:46 +02:00
lebaudantoine a8b79740e9 🐛(backend) prevent duplicate pending users on concurrent requests
Fix a race condition in the external viewset where concurrent requests
could create multiple pending users with the same email address.

No database constraint enforced email uniqueness for pending users,
allowing duplicates to be created under load.

This caused issues during user reconciliation, which expects a single
matching pending user and raises a warning when multiple records are
found.

Add a narrowly scoped migration to enforce the uniqueness constraint
and address the identified issue.
2026-06-02 20:13:16 +02:00
lebaudantoine 28f652e035 🔧(backend) backport logging configuration from docs
Backport the logging configuration from docs to LaSuite Meet after
discussion with @lunika.

Add a proper base logging setup to restore usable logs in production.
The initial repository bootstrap lacked a complete logging
configuration, resulting in limited operational visibility.
2026-06-02 14:27:58 +02:00
lebaudantoine a4997e7431 🔖(minor) bump release to 1.17.0 2026-05-31 18:18:00 +02:00
Florent Chehab ec688e728d (summary) extended support for all video/audio files
* Removed constraint on file extension
* Infer audio/video streams from the media with ffmpeg
* Infer the correct processed audio file extension based on actual
  codec to avoid ffmpeg errors

We need to support more extensions and make audio extraction dynamic,
as we shipped transcript in production and it led to user complaints
requesting more formats.
2026-05-31 00:01:49 +02:00
lebaudantoine 4d27f217fc ♻️(backend) prefix Swagger routes with /api
Inspired by commit eb23aef in suitenumerique/docs. The same base
route path is used everywhere, which helps when the backend sits
behind an ingress serving it with a regex like `api/*`.
2026-05-30 19:33:48 +02:00
Rahulchourasiya 5ea5460b17 🩹(backend) fix swagger and redoc documentation urls
Use canonical documentation routes and add a regression test.
2026-05-30 19:33:48 +02:00
rahul f490b095d8 (backend) support config and access level in external API room creation
Allow passing configuration and access level when creating a room
through the external API.

Also add a few guardrails:
* control whether public rooms are accepted on the external API
* set the default access level when creating a new room

Ensure the new room configuration and access level are returned by
the serializer when listing rooms.
2026-05-29 20:15:59 +02:00
ilias 04dfb9922f (backend) add core.recording.event.parsers.S3Parser
Implementation was validated against Ceph Object Store by @agasurfer.
Event payload matches the one from AWS S3 docs.
2026-05-28 19:54:23 +02:00