32 Commits

Author SHA1 Message Date
self 3e288a7e95 feat: prefix Sender plugin slug
Rename Sender plugin identity to tribe-one-sender across manifest, runtime API routes, metrics, e2e fixtures, and tests.
2026-06-17 22:33:33 +02:00
self 73dcc48a9b fix: make HLS edge start idempotent
Treat an already-started HLS edge media session as a successful stream.start response so the edge reconciler can race safely with explicit cluster starts.
2026-06-02 00:01:42 +02:00
self 1fb848b8cb feat: namespace plugin identity
Adopt canonical plugin id/slug manifest fields, vendor-prefixed OTP app naming, and fully-qualified capability ids for Sender.
2026-05-27 19:05:39 +02:00
self f8e2bfaada refactor: use chat capability surfaces
Move Sender modules under TribeOne.TribesPlugin.Sender and replace the Aether-specific chat integration with the public chat@1 surface contract.
2026-05-26 01:13:38 +02:00
self e771ab3c35 refactor: embed chat as live component
Resolve the optional Aether chat component dynamically and forward chat PubSub messages into it, removing the iframe integration.
2026-05-25 12:51:59 +02:00
self 38ff2fa2b2 feat: embed optional stream chat
Declare chat@1 as an optional enhancement and show an Aether chat iframe beside the Sender player when a chat provider is installed.
2026-05-25 05:44:06 +02:00
self 7dd5c525f5 feat: add local stream control API
Add Sender.LocalStreams for IEx and no-Legion local stream operation. The helper composes existing management handlers and can optionally launch a MuonTrap-supervised ffmpeg test-video publisher. Document the public API surface in docs/API.md and cover the helper with tests.
2026-05-24 17:32:10 +02:00
self 006f352cac refactor: mark sender topology sync as control
Declare control lanes on Sender topology/state-machine resources now that AshNostrSync defaults new resources to bulk.

Keep endpoint history and snapshots on bulk and add coverage for the Sender lane split.
2026-05-23 18:48:54 +02:00
self 3df6e5c091 feat: assign sender telemetry to bulk sync
Mark endpoint history and endpoint snapshots as bulk AshNostrSync resources so topology stays on the default control lane.
2026-05-23 18:23:47 +02:00
self 28ad5359d2 feat: allow ffmpeg executable env override
Keep Sender's default as ffmpeg on PATH, while allowing Guix deployments to inject an exact store ffmpeg path via SENDER_FFMPEG_EXECUTABLE. Remove per-stream executable selection so the runtime has one simple executable resolution model.
2026-05-19 16:56:37 +02:00
self 07eb4e01c4 fix: align sender startup with current node info
Use the current node_info node_pubkey field in the Docker e2e runner and refresh the Nix Mix dependency hash after the muontrap dependency update. Keep edge session reconciliation alive when it runs before the host repo is ready during startup.
2026-05-18 18:30:57 +02:00
self c727ee04de feat: prune sender hls spools
Share HLS timing and retention config across origin and edge sessions, pass live-window settings through to ffmpeg, prune edge pull-through segments, and schedule stopped generation spool cleanup. Include the dependency lock refresh present in this worktree.
2026-05-18 11:14:33 +02:00
self 42a6ed22ca fix: recover Sender edge sessions after reboot
Persist edge start options that affect source fetching and add a periodic reconciler that restarts missing local HLS edge sessions from synced endpoint and generation state. This lets an edge node resume pull-through service after a reboot without Legion re-pushing the stream setup.
2026-05-17 18:52:32 +02:00
self 64f0ce1396 fix: allow self-signed HLS edge sources
Pass the source TLS verification option from stream lifecycle into the HLS pull-through worker so Legion can disable origin certificate verification during self-signed supertest runs. Cover the default and explicit disabled paths in sender tests.
2026-05-17 17:05:33 +02:00
self b11089adb6 feat: declare vinyl sender rollups
Move stream-specific Vinyl metrics into the sender plugin contract. Sender now declares viewer, playlist request, and HLS log parse error rollups while keeping host Vinyl rollups operational-only.
2026-05-16 16:42:39 +02:00
self b4e806e90d feat: count sender viewers by request sessions
Use Tribes.RequestInfo for HLS and player event attribution so trusted proxy traffic is served without feeding Sender's internal viewer metric.

Append a stable vsid query parameter to browser HLS playlist URLs, count playlist reloads as viewer sessions in standalone mode, keep IP fallback for plain HLS clients, and update docs plus e2e coverage.
2026-05-15 13:40:46 +02:00
self bdaa292278 feat: add sender viewer metrics
Track active Sender viewers from browser heartbeats and HLS IP fallback, filtering localhost access and exporting a low-cardinality plugin metric for Tribes rollups.

Extend the Docker origin/edge E2E harness with VictoriaMetrics/vmagent scraping and assertions for live /metrics export plus compact rollup storage. Update docs for the host metrics path.
2026-05-14 19:00:12 +02:00
self c2ea5ea290 feat: add edge HLS repeater flow
Add the edge-side pull-through startup path and make stream startup tolerant of sources that are not live yet. Keep ffmpeg managed through MuonTrap while adding the options needed by the multi-node flow.

Add a docker-oriented origin/edge E2E scenario that starts both nodes before RTMP ingest and verifies HLS playback from the edge node.
2026-05-11 13:09:25 +02:00
self e933e5858d feat: add sender hls edge repeater
Expose standalone /sender/hls file serving for local spool playback and add the hls_edge media-session mode for tribes_edge endpoints.\n\nThe edge backend mirrors an upstream generation playlist and referenced segments into the local spool, while management lifecycle methods can start, stop, and report hls_edge sessions separately from origin ingest.\n\nVerified with scripts/plugin test, scripts/plugin validate, scripts/plugin precommit, and scripts/plugin smoke.
2026-05-10 20:04:39 +02:00
self 799800b66d refactor: simplify sender topology model
Collapse endpoint routing around endpoint types and source links, remove the StreamRoute resource and HLS fallback plug, and move generated HLS paths to /sender/hls for Vinyl-backed serving.\n\nUpdate the initial schema, management payloads, docs, and tests to match generation-level renditions and stream generation delivery modes.
2026-05-10 19:22:22 +02:00
self 61d9477840 fix: expose sender runtime children
Register Sender supervision children through the Tribes plugin spec so the host PluginManager starts the media session, backend, readiness, stats, and snapshot processes in packaged deployments.

Reuse the same child list from Sender.Application and cover the plugin spec with a management test.
2026-05-09 22:27:49 +02:00
self 6d6f821102 feat: track sender HLS readiness 2026-05-09 20:24:13 +02:00
self 9e6024d196 improve: Keep media sessions alive for reconnects 2026-05-09 12:16:58 +02:00
self b4a6ba55d1 feat: Add Sender management API 2026-05-09 12:16:53 +02:00
self 45918235d2 feat: Add origin media session runtime 2026-05-09 12:16:48 +02:00
self 4b8df8b495 feat: Expose Sender config schema 2026-05-07 16:50:08 +02:00
self 86dbb61a27 feat: publish local endpoint stats
Add local streaming counters, telemetry emissions, snapshot publishing into EndpointSnapshot rows, and an optional periodic snapshot worker with tests.
2026-05-01 22:33:43 +02:00
self ca86a31b25 feat: add playback API and player shell
Expose plugin API routes for playback metadata, HLS file serving, and player events. Add a typed Video.js v10 HTML player bootstrap and host-backed API tests.
2026-05-01 22:31:29 +02:00
self 225f27a7d2 feat: scaffold ffmpeg media backend
Add a media backend behaviour, supervised ffmpeg worker, RTMP-to-HLS command builder, stream key helpers, and tests for command construction and worker lifecycle.
2026-05-01 22:23:41 +02:00
self 35f0778acf feat: add streaming metadata schema
Add the Sender.Streaming Ash domain, synced resource declarations, plugin migration, and host-backed schema tests for stream topology and endpoint stats metadata.
2026-05-01 22:21:36 +02:00
self d38b28c780 build: set up streaming plugin foundation
Enable the plugin supervision tree, update manifest metadata, switch the planned web player to Video.js v10 beta, and document the streaming architecture/progress plan.
2026-05-01 22:14:31 +02:00
self 6c853786c8 build: Rename 2026-05-01 19:40:30 +02:00