LiveAgentStreamSchedule live.agent-stream-schedule@1

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
1.0.0
Owner
live
Visibility
public
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/live/agent-stream-schedule.v1.json

live.agent-stream-schedule@1 (Agent Streams S7): an owner's schedule for a public agent stream. A schedule names a time, the task template the desk will run and the mode; Live starts it when the owner's desk is online, and when the desk is not it says 'didn't start: the desk was offline' and runs nothing. A chatplays schedule never starts on its own: it waits for the owner's Go (the S6 rule). The schedule shows on the channel's Agents tab and in Today 24 hours before its time. The id is scd_<ULID>; the started stream (if any) is named by agent_stream_id.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyesThe schedule's id (ULID, Crockford base32).
  • pattern ^scd_[0-9A-HJKMNP-TV-Z]{26}$
ownerstringyesThe person whose desk runs the scheduled task.
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
channelstringyesThe owner's Live channel username.
  • minLength 1
  • maxLength 64
titlestringyes
  • minLength 1
  • maxLength 200
taskhttps://openvibe.network/contracts/live/agent-stream.v1.json#/$defs/taskyes
modeenumyesHow the stream is played. Watch, Narrated and Co-pilot may start on schedule; chatplays waits for the owner's Go.
  • one of "watch", "narrated", "copilot", "chatplays"
visibilityenumyesWho may watch the stream the schedule starts. Today shows public schedules only.
  • one of "private", "unlisted", "public"
starts_atstringyes
  • format date-time
stateenumyesWhere the schedule stands: scheduled, live (with agent_stream_id), ended, missed ('didn't start: the desk was offline') or cancelled by its owner.
  • one of "scheduled", "live", "ended", "missed", "cancelled"
agent_stream_idstring | nullThe stream the schedule started, once it did.
  • pattern ^ags_[0-9A-HJKMNP-TV-Z]{26}$
missed_reasonenumWhy a scheduled start did not happen. 'waits_for_go' is a chatplays schedule keeping its time until the owner presses Go; 'desk_offline' is the design's 'didn't start: the desk was offline'.
  • one of "desk_offline", "task_not_ready", "waits_for_go", null
waits_for_gobooleanTrue for a chatplays schedule: the time has come but nothing runs until the owner presses Go.
started_atstring | null
  • format date-time
ended_atstring | null
  • format date-time
remindersintegerHow many followers opted in to a reminder; neighbours never see who they are.
  • minimum 0
remindedbooleanFor the caller's own view: whether this caller opted in to a reminder. Absent when there is no caller.
page_urlstringThe channel's Agents tab, where the schedule shows 24 hours before its time.
  • pattern ^https://openvibe\.live/
  • format uri
created_atstringyes
  • format date-time

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: missed-desk-offline
{
  "id": "scd_01JAB2C3D4E5F6G7H8J9K0MNPX",
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
  "channel": "mira",
  "title": "Nightly dependency update",
  "task": {
    "source": "actor",
    "ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPY",
    "title": "Update the dependencies"
  },
  "mode": "watch",
  "visibility": "public",
  "starts_at": "2026-11-08T03:00:00.000Z",
  "state": "missed",
  "agent_stream_id": null,
  "missed_reason": "desk_offline",
  "waits_for_go": false,
  "started_at": null,
  "ended_at": null,
  "reminders": 0,
  "page_url": "https://openvibe.live/@mira/agents",
  "created_at": "2026-11-07T03:00:00.000Z"
}
Valid: scheduled
{
  "id": "scd_01JAB2C3D4E5F6G7H8J9K0MNPS",
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
  "channel": "mira",
  "title": "Fix the login page, on a schedule",
  "task": {
    "source": "codes",
    "ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPW",
    "title": "Fix the login page",
    "url": "https://openvibe.codes/t/tsk_01JAB2C3D4E5F6G7H8J9K0MNPW"
  },
  "mode": "narrated",
  "visibility": "public",
  "starts_at": "2026-11-08T19:00:00.000Z",
  "state": "scheduled",
  "agent_stream_id": null,
  "missed_reason": null,
  "waits_for_go": false,
  "started_at": null,
  "ended_at": null,
  "reminders": 3,
  "reminded": true,
  "page_url": "https://openvibe.live/@mira/agents",
  "created_at": "2026-11-07T02:00:00.000Z"
}
Valid: waits-for-go
{
  "id": "scd_01JAB2C3D4E5F6G7H8J9K0MNPZ",
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
  "channel": "mira",
  "title": "Chat plays: build a tiny game",
  "task": {
    "source": "codes",
    "ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNQ1",
    "title": "Build a tiny game"
  },
  "mode": "chatplays",
  "visibility": "public",
  "starts_at": "2026-11-08T20:00:00.000Z",
  "state": "scheduled",
  "agent_stream_id": null,
  "missed_reason": "waits_for_go",
  "waits_for_go": true,
  "started_at": null,
  "ended_at": null,
  "reminders": 1,
  "page_url": "https://openvibe.live/@mira/agents",
  "created_at": "2026-11-07T04:00:00.000Z"
}
Rejected: missing-task
{
  "id": "scd_01JAB2C3D4E5F6G7H8J9K0MNP1",
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
  "channel": "mira",
  "title": "No task",
  "mode": "watch",
  "visibility": "public",
  "starts_at": "2026-11-08T19:00:00.000Z",
  "state": "scheduled",
  "created_at": "2026-11-07T02:00:00.000Z"
}
Rejected: unknown-state
{
  "id": "scd_01JAB2C3D4E5F6G7H8J9K0MNP2",
  "owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPT",
  "channel": "mira",
  "title": "Confusing state",
  "task": {
    "source": "codes",
    "ref": "tsk_01JAB2C3D4E5F6G7H8J9K0MNQ2",
    "title": "A task"
  },
  "mode": "watch",
  "visibility": "public",
  "starts_at": "2026-11-08T19:00:00.000Z",
  "state": "postponed",
  "created_at": "2026-11-07T02:00:00.000Z"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('live.agent-stream-schedule@1', value);   // { valid, errors: [{ path, message }] }