LiveAgentStreamControl live.agent-stream-control@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- live
- Visibility
- first-party
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/live/agent-stream-control.v1.json
live.agent-stream-control@1 (the Agent Streams plan, S5): one of the controls the owner and the channel's moderators have over a live agent stream, with who pressed it. PAUSE tells the task's service (Codes or Actor) to pause at the next safe point; the overlay then says 'Paused by @mod'. CURTAIN is the S1 curtain, raised from the viewer side. MUTE is the S4 mute: the agent voice stops. END ends the stream and the room's Co-pilot reading, while the task itself keeps running off camera unless it was paused. WIPE is the chat plays control of S6: it stops the run and resets the sandbox desk. A moderator may press every control, but may not resume a pause the owner set and may not change the mode or the task. Every press is logged: who, which control, when.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
control | enum | yes | Which control was pressed. |
|
by | object | yes | Who pressed it: the handle and the role they hold. Never an id, never anything else about them. |
|
by.handle | string | yes | The handle of the person who pressed the control. |
|
by.role | enum | yes | What they are on this stream: the owner, or one of the channel's moderators. |
|
at | string | yes | When the control was pressed. |
|
stream | string | The agent stream the control was pressed on. |
| |
paused_by | string | null | The handle of the person whose pause is in force, or null when the stream is not paused. A moderator cannot resume the owner's pause: this says whose it is. |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: end-by-the-owner
{
"control": "end",
"by": {
"handle": "owner",
"role": "owner"
},
"at": "2026-11-06T10:00:00.000Z",
"stream": "ags_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"paused_by": null
}Valid: pause
{
"control": "pause",
"by": {
"handle": "mod",
"role": "moderator"
},
"at": "2026-11-06T10:00:00.000Z",
"stream": "ags_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"paused_by": "mod"
}Valid: wipe
{
"control": "wipe",
"by": {
"handle": "owner",
"role": "owner"
},
"at": "2026-11-06T20:30:00.000Z",
"stream": "ags_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"paused_by": null
}Rejected: no-one
{
"control": "pause",
"at": "2026-11-06T10:00:00.000Z"
}Rejected: role-is-not-one-of-the-two
{
"control": "pause",
"by": {
"handle": "mod",
"role": "viewer"
},
"at": "2026-11-06T10:00:00.000Z"
}Rejected: unknown-control
{
"control": "nuke",
"by": {
"handle": "mod",
"role": "moderator"
},
"at": "2026-11-06T10:00:00.000Z"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('live.agent-stream-control@1', value); // { valid, errors: [{ path, message }] }