LiveAgentStreamStep live.agent-stream-step@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-step.v1.json
live.agent-stream-step@1 (the Agent Streams plan, S2): one step of the work an agent is doing on an agent stream, as the agent posts it while it works. AT is when the step began, TITLE says what the step is (at most 120 characters), STATUS says how it stands (started, passed, failed or skipped), DETAIL is the optional longer line (at most 500 characters), TESTS says how many tests passed and failed when the agent reports them, and COST_USD is what the step cost so far when the agent reports it. The step is plain text: the house text filters have already run over it. Live keeps the steps with the stream and with its recording, and the player's overlay draws them (the current step, a timeline of the last twelve, the tests and the cost).
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
at | string | yes | When the step began. |
|
title | string | yes | What the step is. |
|
status | enum | yes | How the step stands. |
|
detail | string | The optional longer line under the title. |
| |
tests | object | How many tests passed and failed, when the agent reports them. |
| |
tests.passed | integer | yes |
| |
tests.failed | integer | yes |
| |
cost_usd | number | What the step cost so far, when the agent reports it. |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: failed
{
"at": "2026-11-06T10:01:30.000Z",
"title": "Run the checkout tests",
"status": "failed",
"detail": "expected 1 charge, received 2",
"tests": {
"passed": 1,
"failed": 1
},
"cost_usd": 0.42
}Valid: passed
{
"at": "2026-11-06T10:02:00.000Z",
"title": "Run the checkout tests",
"status": "passed",
"tests": {
"passed": 2,
"failed": 0
}
}Valid: skipped
{
"at": "2026-11-06T10:03:00.000Z",
"title": "Run the browser tests",
"status": "skipped"
}Valid: started
{
"at": "2026-11-06T10:00:00.000Z",
"title": "Run the checkout tests",
"status": "started"
}Rejected: detail-too-long
{
"at": "2026-11-06T10:00:00.000Z",
"title": "Run the checkout tests",
"status": "failed",
"detail": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
}Rejected: no-title
{
"at": "2026-11-06T10:00:00.000Z",
"status": "started"
}Rejected: title-too-long
{
"at": "2026-11-06T10:00:00.000Z",
"title": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"status": "started"
}Rejected: unknown-status
{
"at": "2026-11-06T10:00:00.000Z",
"title": "Run the checkout tests",
"status": "running"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('live.agent-stream-step@1', value); // { valid, errors: [{ path, message }] }