{"record":{"id":"bc6643e179b9e276","repo":"hcengineering/platform","slug":"no-video-track-found","errorCode":null,"errorMessage":"No video track found","messagePattern":"No video track found","errorType":"exception","errorClass":"TrackInvalidError","httpStatus":null,"severity":"warning","filePath":"desktop/src/ui/screenShare.ts","lineNumber":140,"sourceCode":"\n            if (constraints.video === undefined) {\n              log.error('Wrong video options specified')\n              throw new Error('Wrong video options specified')\n            }\n\n            constraints.video = {\n              mandatory: {\n                ...(typeof constraints.video === 'boolean' ? {} : constraints.video),\n                chromeMediaSource: 'desktop',\n                chromeMediaSourceId: val\n              }\n            } as any\n\n            void window.navigator.mediaDevices.getUserMedia(constraints).then((stream) => {\n              const tracks = stream.getVideoTracks()\n              if (tracks.length === 0) {\n                log.error('No video track found')\n                throw new TrackInvalidError('No video track found')\n              }\n              const screenVideo = new LocalVideoTrack(tracks[0], undefined, false, {\n                loggerName: this.roomOptions.loggerName,\n                loggerContextCb: () => this.logContext\n              })\n              screenVideo.source = Track.Source.ScreenShare\n              if (options?.contentHint !== undefined) {\n                screenVideo.mediaStreamTrack.contentHint = options.contentHint\n              }\n\n              const localTracks: Array<LocalTrack> = [screenVideo]\n              if (stream.getAudioTracks().length > 0) {\n                this.emit(ParticipantEvent.AudioStreamAcquired)\n                const screenAudio = new LocalAudioTrack(\n                  stream.getAudioTracks()[0],\n                  undefined,\n                  false,\n                  this.audioContext,","sourceCodeStart":122,"sourceCodeEnd":158,"githubUrl":"https://github.com/hcengineering/platform/blob/63e28dc96483967b2fc21c881b3f1023c1de7718/desktop/src/ui/screenShare.ts#L122-L158","documentation":"The network service in foundations/net/packages/core/src/network.ts runs a checkAlive sweep that compares each registered agent's lastSeen time against timeouts.aliveTimeout. When an agent has been silent longer than the timeout it is logged with this warning, added to deadAgents, and then removed along with its containers. This is an liveness-expiry event, not an internal error.","triggerScenarios":"An agent registered with the network service has not reported in within timeouts.aliveTimeout seconds when the periodic checkAlive (started from the constructor) runs.","commonSituations":"Agent container crashed or OOM-killed; agent host network interruption; agent process stalled (deadlock, CPU starvation); heartbeat interval configured longer than aliveTimeout; agents running on machines entering sleep.","solutions":["Check the agent's container/process logs — it likely crashed, was OOM-killed, or hung.","Make the agent send heartbeats well inside timeouts.aliveTimeout (e.g. interval <= aliveTimeout/3).","Add agent-side supervision/restart (systemd, k8s liveness) so dead agents come back and re-register.","If agents are legitimately slow, raise timeouts.aliveTimeout in the network service configuration."],"exampleFix":"// before\nsetInterval(() => reportAlive(), 90_000) // exceeds 60s aliveTimeout\n// after\nsetInterval(() => reportAlive(), 15_000)","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"agent.on('removed', async (agentId) => {\n  if (await isHealthy(agentId)) {\n    await backoffRegister(agentId) // re-register with the network service\n  }\n})","preventionTips":["Run agents under a supervisor (systemd, Kubernetes) that restarts crashed agents automatically.","Send agent heartbeats at an interval comfortably below timeouts.aliveTimeout.","Watch agent memory/CPU to prevent OOM kills and stalls that trigger liveness expiry.","Alert on this warning to catch hosts with recurring network instability."],"tags":["agents","timeout","liveness","network-service"],"backgroundTag":"client-timeout-marked-dead","analyzedSha":"63e28dc96483967b2fc21c881b3f1023c1de7718","analyzedAt":"2026-08-29T15:21:27.377Z","schemaVersion":2},"datasetVersion":"2026-08-29T17:17:51.833Z"}