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

FieldTypeRequiredDescriptionConstraints
atstringyesWhen the step began.
  • format date-time
titlestringyesWhat the step is.
  • minLength 1
  • maxLength 120
statusenumyesHow the step stands.
  • one of "started", "passed", "failed", "skipped"
detailstringThe optional longer line under the title.
  • maxLength 500
testsobjectHow many tests passed and failed, when the agent reports them.
  • no other fields
tests.passedintegeryes
  • minimum 0
tests.failedintegeryes
  • minimum 0
cost_usdnumberWhat the step cost so far, when the agent reports it.
  • minimum 0

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 }] }