BotRobotManifest bot.robot-manifest@1

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

Version
1.0.0
Owner
bot
Visibility
public
Status
active
Compatibility
backward
Decision
ADR-043
Schema
https://openvibe.network/contracts/bot/robot-manifest.v1.json

bot.robot-manifest@1: what a robot's driver says the robot can do, written and versioned by the driver's maker (a Link plugin's author), so a new control is a version bump of the manifest instead of an OpenVibe release. Each command names its kind, its class (motion moves something and is held to a lifetime and a release; state sets something that stays, like a light; action happens once), its value's fields and ranges, how long it lives, the delivery window Bot gives it, the time it must still have left when the robot reads it, how often it may be sent, what the robot does when no fresh command comes (release), and which control draws it. Each telemetry entry names a reading the driver reports, its fields, its unit and range, where it comes from, and the control that shows it. Bot derives the panel and the ui.surface@1 parts from it, Link forwards only the kinds it declares, and OpenVibe AI reads the same facts when it suggests a layout or writes a control. The manifest is data: no code and no addresses.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyesThe robot model this manifest describes, e.g. looi. The same id as its Bot profile.
  • pattern ^[a-z][a-z0-9_-]{0,39}$
namestringyesWhat people call the robot.
  • minLength 1
  • maxLength 80
bystringThe maker of the driver that publishes this manifest (an OpenVibe username).
  • pattern ^[A-Za-z0-9_.-]{1,40}$
versionstringyesThe manifest's own version (semver). A new or changed command is a new version; a frozen version is never edited.
  • pattern ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$
frozenbooleanTrue once the maker and OpenVibe have checked this version against the driver's real command list: it is the contract both sides hold to.
descriptionstring
  • maxLength 500
commandshttps://openvibe.network/contracts/bot/robot-manifest.v1.json#/$defs/commandyes
  • minItems 1
  • maxItems 32
telemetryhttps://openvibe.network/contracts/bot/robot-manifest.v1.json#/$defs/reading
  • maxItems 32

Examples

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

Valid: looi
{
  "id": "looi",
  "name": "LOOI",
  "by": "maticus",
  "version": "1.0.0",
  "frozen": false,
  "description": "LOOI through the P7 tray (Maticus's driver), from the tray's command list of 2026-11-12; frozen once he has checked it.",
  "commands": [
    {
      "kind": "drive",
      "class": "motion",
      "label": "Drive",
      "value": {
        "throttle": [
          -1,
          1
        ],
        "steer": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "stop",
      "control": "stick"
    },
    {
      "kind": "actuator",
      "name": "head",
      "class": "motion",
      "label": "Head",
      "value": {
        "head": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "hold",
      "control": "slider"
    },
    {
      "kind": "headlight",
      "class": "state",
      "label": "Headlights",
      "value": {
        "on": "boolean"
      },
      "delivery_ms": {
        "min": 1,
        "max": 250
      },
      "min_left_ms": 50,
      "rate_per_s": 2,
      "release": "none",
      "latched": true,
      "confirm": "p7_headlight",
      "control": "toggle"
    }
  ],
  "telemetry": [
    {
      "key": "battery",
      "label": "Battery",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "source": "poll",
      "control": "meter"
    },
    {
      "key": "p7_battery",
      "label": "Battery details",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "fields": {
        "pct": [
          0,
          100
        ],
        "usb": "boolean",
        "raw": "integer",
        "at": "ms",
        "unverified": "boolean"
      },
      "source": "poll",
      "control": "readout",
      "optional": [
        "unverified"
      ]
    },
    {
      "key": "p7_commander",
      "label": "Who is driving",
      "fields": {
        "subject": "string",
        "role": [
          "owner",
          "mod",
          "operator"
        ],
        "channel": [
          "drive",
          "head",
          "headlight"
        ],
        "at": "ms"
      },
      "source": "push",
      "control": "badge"
    },
    {
      "key": "p7_headlight",
      "label": "Headlights",
      "fields": {
        "commanded": "boolean",
        "pending": "boolean",
        "physical_state_verified": "boolean"
      },
      "source": "push",
      "control": "badge"
    }
  ]
}
Rejected: actuator-without-name
{
  "id": "looi",
  "name": "LOOI",
  "by": "maticus",
  "version": "1.0.0",
  "frozen": false,
  "description": "LOOI through the P7 tray (Maticus's driver), from the tray's command list of 2026-11-12; frozen once he has checked it.",
  "commands": [
    {
      "kind": "drive",
      "class": "motion",
      "label": "Drive",
      "value": {
        "throttle": [
          -1,
          1
        ],
        "steer": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "stop",
      "control": "stick"
    },
    {
      "kind": "actuator",
      "class": "motion",
      "label": "Head",
      "value": {
        "head": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "hold",
      "control": "slider"
    },
    {
      "kind": "headlight",
      "class": "state",
      "label": "Headlights",
      "value": {
        "on": "boolean"
      },
      "delivery_ms": {
        "min": 1,
        "max": 250
      },
      "min_left_ms": 50,
      "rate_per_s": 2,
      "release": "none",
      "latched": true,
      "confirm": "p7_headlight",
      "control": "toggle"
    }
  ],
  "telemetry": [
    {
      "key": "battery",
      "label": "Battery",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "source": "poll",
      "control": "meter"
    },
    {
      "key": "p7_battery",
      "label": "Battery details",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "fields": {
        "pct": [
          0,
          100
        ],
        "usb": "boolean",
        "raw": "integer",
        "at": "ms",
        "unverified": "boolean"
      },
      "source": "poll",
      "control": "readout",
      "optional": [
        "unverified"
      ]
    },
    {
      "key": "p7_commander",
      "label": "Who is driving",
      "fields": {
        "subject": "string",
        "role": [
          "owner",
          "mod",
          "operator"
        ],
        "channel": [
          "drive",
          "head",
          "headlight"
        ],
        "at": "ms"
      },
      "source": "push",
      "control": "badge"
    },
    {
      "key": "p7_headlight",
      "label": "Headlights",
      "fields": {
        "commanded": "boolean",
        "pending": "boolean",
        "physical_state_verified": "boolean"
      },
      "source": "push",
      "control": "badge"
    }
  ]
}
Rejected: motion-released-never
{
  "id": "looi",
  "name": "LOOI",
  "by": "maticus",
  "version": "1.0.0",
  "frozen": false,
  "description": "LOOI through the P7 tray (Maticus's driver), from the tray's command list of 2026-11-12; frozen once he has checked it.",
  "commands": [
    {
      "kind": "drive",
      "class": "motion",
      "label": "Drive",
      "value": {
        "throttle": [
          -1,
          1
        ],
        "steer": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "none",
      "control": "stick"
    },
    {
      "kind": "actuator",
      "name": "head",
      "class": "motion",
      "label": "Head",
      "value": {
        "head": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "hold",
      "control": "slider"
    },
    {
      "kind": "headlight",
      "class": "state",
      "label": "Headlights",
      "value": {
        "on": "boolean"
      },
      "delivery_ms": {
        "min": 1,
        "max": 250
      },
      "min_left_ms": 50,
      "rate_per_s": 2,
      "release": "none",
      "latched": true,
      "confirm": "p7_headlight",
      "control": "toggle"
    }
  ],
  "telemetry": [
    {
      "key": "battery",
      "label": "Battery",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "source": "poll",
      "control": "meter"
    },
    {
      "key": "p7_battery",
      "label": "Battery details",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "fields": {
        "pct": [
          0,
          100
        ],
        "usb": "boolean",
        "raw": "integer",
        "at": "ms",
        "unverified": "boolean"
      },
      "source": "poll",
      "control": "readout",
      "optional": [
        "unverified"
      ]
    },
    {
      "key": "p7_commander",
      "label": "Who is driving",
      "fields": {
        "subject": "string",
        "role": [
          "owner",
          "mod",
          "operator"
        ],
        "channel": [
          "drive",
          "head",
          "headlight"
        ],
        "at": "ms"
      },
      "source": "push",
      "control": "badge"
    },
    {
      "key": "p7_headlight",
      "label": "Headlights",
      "fields": {
        "commanded": "boolean",
        "pending": "boolean",
        "physical_state_verified": "boolean"
      },
      "source": "push",
      "control": "badge"
    }
  ]
}
Rejected: motion-without-release
{
  "id": "looi",
  "name": "LOOI",
  "by": "maticus",
  "version": "1.0.0",
  "frozen": false,
  "description": "LOOI through the P7 tray (Maticus's driver), from the tray's command list of 2026-11-12; frozen once he has checked it.",
  "commands": [
    {
      "kind": "drive",
      "class": "motion",
      "label": "Drive",
      "value": {
        "throttle": [
          -1,
          1
        ],
        "steer": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "control": "stick"
    },
    {
      "kind": "actuator",
      "name": "head",
      "class": "motion",
      "label": "Head",
      "value": {
        "head": [
          -1,
          1
        ]
      },
      "lifetime_ms": 500,
      "delivery_ms": {
        "min": 1,
        "max": 300
      },
      "release": "hold",
      "control": "slider"
    },
    {
      "kind": "headlight",
      "class": "state",
      "label": "Headlights",
      "value": {
        "on": "boolean"
      },
      "delivery_ms": {
        "min": 1,
        "max": 250
      },
      "min_left_ms": 50,
      "rate_per_s": 2,
      "release": "none",
      "latched": true,
      "confirm": "p7_headlight",
      "control": "toggle"
    }
  ],
  "telemetry": [
    {
      "key": "battery",
      "label": "Battery",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "source": "poll",
      "control": "meter"
    },
    {
      "key": "p7_battery",
      "label": "Battery details",
      "unit": "%",
      "range": [
        0,
        100
      ],
      "fields": {
        "pct": [
          0,
          100
        ],
        "usb": "boolean",
        "raw": "integer",
        "at": "ms",
        "unverified": "boolean"
      },
      "source": "poll",
      "control": "readout",
      "optional": [
        "unverified"
      ]
    },
    {
      "key": "p7_commander",
      "label": "Who is driving",
      "fields": {
        "subject": "string",
        "role": [
          "owner",
          "mod",
          "operator"
        ],
        "channel": [
          "drive",
          "head",
          "headlight"
        ],
        "at": "ms"
      },
      "source": "push",
      "control": "badge"
    },
    {
      "key": "p7_headlight",
      "label": "Headlights",
      "fields": {
        "commanded": "boolean",
        "pending": "boolean",
        "physical_state_verified": "boolean"
      },
      "source": "push",
      "control": "badge"
    }
  ]
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('bot.robot-manifest@1', value);   // { valid, errors: [{ path, message }] }