Commit Graph
7028 Commits
Author SHA1 Message Date
Lotus CIandClaude Opus 4.8 22be058108 lotus(#5): native transparent-background + Lotus theme hooks
CI / Build embedded bundle (push) Successful in 45s
CI / Publish to Gitea npm registry (push) Has been skipped
Adds body.lotus-transparent (lotusTransparent=1) so the host wallpaper
shows through the call natively, retiring cinny's injected
`html,body{background:none!important}` hack; and body.lotus-theme
(lotusTheme=1) as a source-level Compound-token override hook for the
Lotus/TDS palette (driven by the existing setTheme channel / URL flags).
Additive: no-op without the flags.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:30:57 -04:00
Lotus CIandClaude Opus 4.8 10e6ba46e2 lotus(#3): harden audio-inject per review
CI / Build embedded bundle (push) Successful in 3m22s
CI / Publish to Gitea npm registry (push) Has been skipped
- resume() the AudioContext (host postMessage isn't a gesture) so the clip
  isn't silent; warn if it stays suspended (HIGH).
- Close the AudioContext on decode failure (no context leak) (MED).
- Abort in-flight clips on teardown (unmount/vm-change/leave) so audio
  doesn't keep blasting to peers (MED).
- Stop the cloned MediaStreamTrack when a room publish fails (MED).
- Validate url is https/blob and fetch with credentials:omit, mode:cors
  (MED security).
- Guard against NaN clip duration; fix stale enum doc comment.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:26:45 -04:00
Lotus CIandClaude Opus 4.8 6d739db8b8 lotus(#7): audio/screenshare quality controls via widget action
Adds io.lotus.set_quality (toWidget): caps mic audio bitrate and
screenshare bitrate/framerate via RTCRtpSender.setParameters (no
republish). Settings are sticky and re-applied on LocalTrackPublished so
they survive mute/unmute and reconnects. These encoding controls lived in
EC's module scope, unreachable from the host against the prebuilt bundle.
Additive: no-op unless the host sends the action.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:24:57 -04:00
Lotus CIandClaude Opus 4.8 2ab9427c09 lotus(#4): pin camera into spotlight during screenshare (A5)
CI / Build embedded bundle (push) Successful in 51s
CI / Publish to Gitea npm registry (push) Has been skipped
Review found the manual pin only chose among cameras when no screenshare
was active; during a screenshare the screenshare won the spotlight and the
pinned camera was demoted to an ignored PiP. Apply the override at the
spotlightAndPip$ level: when a pin is explicitly set, surface that camera
in the spotlight alongside the shared screen. No manual pin = unchanged.

Note: a pin persists if the pinned user briefly leaves and rejoins; the
host clears it via focus_participant{userId:null} (by design).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:21:14 -04:00
Lotus CIandClaude Opus 4.8 c73eec0781 lotus(#3): soundboard audio injection via widget action
CI / Build embedded bundle (push) Successful in 43s
CI / Publish to Gitea npm registry (push) Has been skipped
Adds io.lotus.inject_audio (toWidget): mixes a soundboard clip into the
call so other participants hear it. Publishes the clip as a separate
Unknown-source LiveKit track (rendered by MatrixAudioRenderer) rather than
splicing into the mic track, so the denoise pipeline is untouched; the
track is unpublished when the clip ends (with a 30s safety cap). This is
the real call-audio injection that was impossible against the prebuilt EC
bundle. Additive: no-op unless the host sends the action.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:18:43 -04:00
Lotus CIandClaude Opus 4.8 0f90600a59 lotus(#2): address review — ack contract, rate, param precedence
CI / Build embedded bundle (push) Successful in 1m18s
CI / Publish to Gitea npm registry (push) Has been skipped
- Document that io.lotus.call_state is request/response and the host must
  ack it (cinny listenAction replies {}) to avoid 10s-timeout churn (H1).
- Throttle 150ms -> 250ms to reduce widget traffic (M1).
- lotusParam: hash fragment wins over query, matching EC's ParamParser (L1).
- Fix the misleading "opaque" id comment; id is userId:deviceId (L2).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:14:42 -04:00
Lotus CIandClaude Opus 4.8 9d7784b9bc lotus(#4): focus-participant spotlight via widget action
Adds io.lotus.focus_participant (toWidget): the host can pin a participant
to the spotlight by Matrix user id (or clear with userId:null), via a
manual override injected into CallViewModel.spotlightSpeaker$. Replaces
cinny's fragile DOM .click() tile-selector focus hack. Extracts the action
enum into lotusActions.ts (no circular import) and allow-lists Lotus
toWidget actions in initializeWidget. Additive: no-op unless the host
sends the action.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:10:16 -04:00
Lotus CIandClaude Opus 4.8 444af5f7ac lotus(#2): stream per-participant call state over widget API
CI / Build embedded bundle (push) Successful in 1m45s
CI / Publish to Gitea npm registry (push) Has been skipped
Opt-in (lotusCallState=1) bridge that emits io.lotus.call_state with each
participant's speaking/audio/video state, so the Lotus host can drive
speaking rings / mute badges / PiP from real events instead of scraping
EC's rendered DOM. Exposes vm.userMedia$ on the public CallViewModel.
Additive: no-op without the flag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 23:05:20 -04:00
Lotus CIandClaude Opus 4.8 39377fb6e1 ci: drop actions/upload-artifact@v4 (incompatible with Gitea runner)
CI / Build embedded bundle (push) Successful in 1m20s
CI / Publish to Gitea npm registry (push) Has been skipped
upload-artifact@v4 needs GitHub's artifact backend, which the Gitea
act_runner doesn't implement — it failed the build job with exit 1 even
though build:embedded + smoke-check passed. The publish job rebuilds from
source, so the artifact was only a convenience.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 22:49:15 -04:00
Lotus CIandClaude Opus 4.8 b1fed78283 ci: stage embedded dist into embedded/web/dist before publish
CI / Build embedded bundle (push) Failing after 46s
CI / Publish to Gitea npm registry (push) Has been skipped
build:embedded outputs to repo-root dist/; the publish job and smoke-check
expected embedded/web/dist (the publish template's files entry), which was
never created in CI — so a tagged publish would fail its smoke-check or ship
an empty tarball. Copy dist -> embedded/web/dist in both jobs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 22:45:20 -04:00
Lotus CIandClaude Opus 4.8 229b54b3b7 Lotus fork: rename embedded package + add Gitea CI
CI / Build embedded bundle (push) Failing after 1m9s
CI / Publish to Gitea npm registry (push) Has been skipped
- embedded/web/package.json: publish as @lotusguild/element-call-embedded
  from our Gitea fork (repository URL updated).
- .gitea/workflows/ci.yml: build the embedded bundle on PR/push to lotus;
  publish to the Gitea npm registry on a v* tag. Linux-only (web bundle).

Based on upstream element-call v0.20.1 (2d74c48).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 22:16:45 -04:00
Valere FedronicandGitHub 2d74c48151 Merge pull request #4016 from element-hq/valere/backport/several_click_to_unmute_bug
[backport] - Fix several click to unmute bug (feat(mute): add syncing state and disable toggle during async mute)
v0.20.1
2026-06-08 09:50:58 +02:00
Valere FedronicandValere 1bf2a0917b Merge pull request #4013 from element-hq/valere/fix_repeated_click_to_unmute
feat(mute): add syncing state and disable toggle during async mute
2026-06-05 13:32:48 +02:00
RobinandGitHub c021fc1548 Merge pull request #3995 from element-hq/toger5/fix-double-leave-sound
Fix play of second leave sound
2026-06-02 14:46:43 +02:00
Timo K 692a55c84c fix race 2026-06-02 14:06:28 +02:00
Timo K c5ffdea370 lint 2026-06-02 13:56:16 +02:00
Timo K 9117b40e7b fix tests 2026-06-02 13:52:43 +02:00
TimoandGitHub 25a6cefa34 Merge pull request #3905 from manfrommedan/fix/promise-withresolvers-polyfill
Add Promise.withResolvers polyfill for older WebViews (Chrome < 119)
2026-06-02 19:43:12 +08:00
RobinandGitHub 399b7d83da Merge pull request #3988 from element-hq/renovate/livekit-client
Update dependency livekit-client to v2.19.0
2026-06-02 11:50:10 +02:00
TimoandGitHub e2128776b3 Merge pull request #3935 from element-hq/toger5/contribut-issue-first
Contributing.md explain "issue first" contribution approach
2026-06-02 17:35:56 +08:00
TimoandGitHub 327a0ad9b0 Merge pull request #3951 from element-hq/valere/improve_error_message
Improve error messages for sfu auth problems
2026-06-02 17:33:56 +08:00
Robin 47326c28d3 Fix type error 2026-06-02 11:33:17 +02:00
RobinandGitHub 084fa20b3d Merge pull request #4003 from element-hq/device-switch-fixes
Show the right labels in device switcher menus
2026-06-02 11:29:28 +02:00
Timo K e05af09c28 Add test 2026-06-02 11:27:59 +02:00
Robin cec78a383d Fix footer stories 2026-06-02 11:14:53 +02:00
RobinandGitHub faa34aeaaa Merge pull request #3987 from element-hq/renovate/compound
Update dependency @vector-im/compound-design-tokens to v10.2.0
2026-06-02 10:48:44 +02:00
Robin 5fed562db2 Request full device names when device switchers are open 2026-06-02 10:36:57 +02:00
Robin 164765cd27 Show the right fallback labels in device switcher menus 2026-06-02 10:15:40 +02:00
renovate[bot]andGitHub 489492d9b9 Update dependency livekit-client to v2.19.0 2026-06-02 06:50:03 +00:00
renovate[bot]andGitHub bec34ee360 Update dependency @vector-im/compound-design-tokens to v10.2.0 2026-06-02 06:49:28 +00:00
Johannes MarbachandGitHub 79298a6620 Merge pull request #3998 from element-hq/renovate/all-minor-patch
Update all non-major dependencies
2026-06-02 08:47:58 +02:00
RobinandGitHub af8a876adc Merge pull request #3999 from element-hq/renovate/embedded-package-dependencies
Update Gradle to v8.14.5
2026-06-02 08:42:39 +02:00
Johannes Marbach f4d6517bbb Switch from global to globalThis to fix import issues 2026-06-02 08:29:03 +02:00
renovate[bot]andGitHub 576119663f Update all non-major dependencies 2026-06-02 01:16:51 +00:00
renovate[bot]andGitHub e67d2f2f2b Update Gradle to v8.14.5 2026-06-01 03:52:15 +00:00
Valere 3799ea2b4e fixup: Missing translation 2026-05-28 14:43:42 +02:00
Valere 2bd16beccf Merge branch 'livekit' into valere/improve_error_message 2026-05-28 14:27:17 +02:00
Valere FedronicandGitHub 72b0d12d7c Merge pull request #3973 from element-hq/valere/devx/run_dev_on_phone
devx: Allow to run local dev EC on mobile in same wifi
2026-05-28 14:26:07 +02:00
Valere 6777adac54 Merge branch 'livekit' into valere/devx/run_dev_on_phone 2026-05-28 13:17:22 +02:00
Valere FedronicandGitHub 083f86b19d Merge pull request #3924 from element-hq/valere/devx/livekit_logs
dev-tool: Add option to enable extended livekit logs
2026-05-28 13:16:57 +02:00
Valere 1fafc3b1ba Merge branch 'livekit' into valere/devx/livekit_logs 2026-05-28 12:45:39 +02:00
Valere FedronicandGitHub cdbb2c92ca Merge pull request #3994 from element-hq/valere/devx/bump_playwright
bump playwright to 1.60
2026-05-28 12:45:19 +02:00
Timo K ea4144ccc7 Fix play of second leave sound 2026-05-28 12:04:42 +02:00
Valere 2928e34ee2 test: use toHaveCount instead of count()).toBe 2026-05-28 11:56:29 +02:00
Valere d98e800077 bump playwright
update playwright container image
2026-05-28 11:32:18 +02:00
Valere 8b86c1914d bump playwright
update playwright container image
2026-05-28 11:31:38 +02:00
Valere e815277fa2 touch commit to unbock gh 2026-05-28 08:59:05 +02:00
Valere 810e263cbe review: better doc 2026-05-28 08:51:00 +02:00
Valere 70a0914017 eslint 2026-05-27 14:18:34 +02:00
Valere 8011f2579c test: Add test for new option
review: Remove uneeed {" "}
2026-05-27 14:03:31 +02:00