openvibers/openvibe.contracts Commits
0.238.0: OpenVibe.Bench (schemas, capabilities, events); Codes actor_ref (#246)
Changes
@@@ -4,6 +4,22 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,the notes were in the tag and commit messages (`git tag -n1`).++## 0.238.0 — 2026-10-28++++- **OpenVibe.Bench** (`bench`, live at bench.openvibe.services, port 5230, database `ov_bench`): the shared AI++ benchmark and comparison engine for every room (plan §4.12). It owns kinds, pinned rounds, entries, blind++ judgements, ratings, boards, the open dataset per kind and private evals; AI stays the run authority and Report++ the analytics authority. New `bench.kind@1`, `bench.task@1`, `bench.round@1`, `bench.entry@1`,++ `bench.judgement@1` and `bench.rating@1` schemas, the `bench.round.finished`, `bench.judgement.recorded` and++ `bench.rating.changed` event payloads, and nine first-party `bench.*` capabilities. The manifest is modeled on++ OpenVibe.AI (`bench.openvibe.services`, not `openvibe.bench`) and its site block (Bench, icon `bench`, position 47,++ legal profile `tools`) sits in For developers. Bench calls `ai.run.create` (namespace `ai.generate`) and subscribes++ to the account events; Design moves its Arena onto Bench with `bench.task.create`, `bench.round.create`,++ `bench.round.read`, `bench.judgement.cast` and `bench.board.read`.++- **Codes** (`codes.task-start-request@1` 1.1.0, `codes.task@1` 1.1.0): optional `actor_task_id`/`actor_step_id`++ request fields and the `actor_ref` back-reference, so a task started from OpenVibe.Actor can carry its Actor task++ and step. Both are optional, so existing producers and consumers are unaffected.++## 0.237.0 — 2026-10-28- **OpenVibe.Cam** (`cam`, live at openvibe.cam, port 5160, database `ov_cam`): the camera app (preview, timer,nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/entry.v1.json",++ "title": "BenchEntry",++ "description": "bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "round_id", "provider", "model", "route", "payload", "cost_usd", "ms", "tokens"],++ "properties": {++ "id": { "type": "string" },++ "round_id": { "type": "string" },++ "provider": { "type": "string" },++ "model": { "type": "string" },++ "route": { "type": "object" },++ "payload": { "type": "object" },++ "cost_usd": { "type": "number" },++ "ms": { "type": "number" },++ "tokens": { "type": "number" },++ "error": { "type": ["string", "null"] },++ "ui_check": { "type": ["object", "null"] },++ "run_id": { "type": ["string", "null"] }++ }++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/judgement.v1.json",++ "title": "BenchJudgement",++ "description": "bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "round_id", "kind_id", "judge", "method", "pair", "outcome", "score", "at"],++ "properties": {++ "id": { "type": "string" },++ "round_id": { "type": "string" },++ "kind_id": { "type": "string" },++ "judge": { "type": "string" },++ "judge_name": { "type": ["string", "null"] },++ "judge_version": { "type": ["string", "null"] },++ "method": { "type": "string" },++ "pair": { "type": ["object", "null"] },++ "outcome": { "type": ["string", "null"] },++ "score": { "type": ["number", "null"] },++ "at": { "type": "string", "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,19 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/kind.v1.json",++ "title": "BenchKind",++ "description": "bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "room", "entry", "judge", "name", "schema", "metrics", "created_at"],++ "properties": {++ "id": { "type": "string" },++ "room": { "type": "string" },++ "entry": { "type": "string" },++ "judge": { "type": "string" },++ "name": { "type": "string" },++ "schema": { "type": "object" },++ "metrics": { "type": "array", "items": { "type": "string" } },++ "created_at": { "type": "string", "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/rating.v1.json",++ "title": "BenchRating",++ "description": "bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.",++ "type": "object",++ "additionalProperties": false,++ "required": ["kind_id", "category", "subject", "elo", "games", "wins", "losses", "ties", "win_rate", "ci_lower", "ci_upper"],++ "properties": {++ "kind_id": { "type": "string" },++ "category": { "type": "string" },++ "subject": { "type": "string" },++ "elo": { "type": "number" },++ "games": { "type": "number" },++ "wins": { "type": "number" },++ "losses": { "type": "number" },++ "ties": { "type": "number" },++ "win_rate": { "type": "number" },++ "ci_lower": { "type": "number" },++ "ci_upper": { "type": "number" },++ "median_cost_usd": { "type": ["number", "null"] },++ "median_ms": { "type": ["number", "null"] },++ "provisional": { "type": "boolean" }++ }++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/round.v1.json",++ "title": "BenchRound",++ "description": "bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "task_id", "kind_id", "offers", "status", "seed", "created_by", "created_at"],++ "properties": {++ "id": { "type": "string" },++ "task_id": { "type": "string" },++ "kind_id": { "type": "string" },++ "offers": { "type": "array", "items": { "type": "object" } },++ "status": { "type": "string", "enum": ["queued", "running", "ready", "finished", "failed"] },++ "seed": { "type": "integer" },++ "pool_fallback": { "type": "boolean" },++ "receipt": { "type": ["string", "null"] },++ "created_by": { "type": "string" },++ "created_at": { "type": "string", "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,18 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/task.v1.json",++ "title": "BenchTask",++ "description": "bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.",++ "type": "object",++ "additionalProperties": false,++ "required": ["id", "kind_id", "prompt", "public", "created_by", "created_at"],++ "properties": {++ "id": { "type": "string" },++ "kind_id": { "type": "string" },++ "prompt": { "type": "string" },++ "task_class": { "type": ["string", "null"] },++ "public": { "type": "boolean" },++ "created_by": { "type": "string" },++ "created_at": { "type": "string", "format": "date-time" }++ }++}@@@ -7344,7 +7344,7 @@},{"id": "codes.task-start-request",-- "version": "1.0.0",++ "version": "1.1.0","owner": "codes","schema": "codes/task-start-request.v1.json","visibility": "first-party",@@@ -7362,7 +7362,7 @@},{"id": "codes.task",-- "version": "1.0.0",++ "version": "1.1.0","owner": "codes","schema": "codes/task.v1.json","visibility": "first-party",@@@ -7721,6 +7721,87 @@"visibility": "first-party","compatibility": "backward","status": "active"++ },++ {++ "id": "bench.kind",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "bench/kind.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.task",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "bench/task.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.round",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "bench/round.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.entry",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "bench/entry.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.judgement",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "bench/judgement.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.rating",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "bench/rating.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.round.finished",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "events/payloads/bench.round.finished.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.judgement.recorded",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "events/payloads/bench.judgement.recorded.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "bench.rating.changed",++ "version": "1.0.0",++ "owner": "bench",++ "schema": "events/payloads/bench.rating.changed.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"}]}@@@ -48,6 +48,18 @@"minLength": 8,"maxLength": 128,"pattern": "^[A-Za-z0-9_.:-]+$"++ },++ "actor_task_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256,++ "description": "The OpenVibe.Actor task id when this coding task was started from Actor."++ },++ "actor_step_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256,++ "description": "The OpenVibe.Actor step id when this coding task was started from Actor."}}}@@@ -174,6 +174,15 @@"maxLength": 1000}}++ },++ "actor_ref": {++ "type": ["object", "null"],++ "additionalProperties": false,++ "properties": {++ "task_id": { "type": "string", "minLength": 1, "maxLength": 256 },++ "step_id": { "type": "string", "minLength": 1, "maxLength": 256 }++ },++ "description": "The OpenVibe.Actor task and step that started this coding task, when it came from Actor."}}}nnew file mode 100644@@@ -0,0 +1,19 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/bench.judgement.recorded.v1.json",++ "title": "BenchJudgementRecordedPayload",++ "description": "bench.judgement.recorded v1 (OpenVibe.Bench): a judgement was cast on a round. Envelope: source bench, subject { type: user, id: <judge> } or { type: service, id: <judge> }, visibility first-party.",++ "type": "object",++ "additionalProperties": false,++ "required": ["round_id", "kind_id", "judge", "method", "at"],++ "properties": {++ "round_id": { "type": "string" },++ "kind_id": { "type": "string" },++ "judge": { "type": "string" },++ "judge_name": { "type": ["string", "null"] },++ "method": { "type": "string" },++ "outcome": { "type": ["string", "null"] },++ "score": { "type": ["number", "null"] },++ "at": { "type": "string", "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,26 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/bench.rating.changed.v1.json",++ "title": "BenchRatingChangedPayload",++ "description": "bench.rating.changed v1 (OpenVibe.Bench): a rating moved on a benchmark board. Envelope: source bench, subject { type: service, id: bench }, visibility first-party.",++ "type": "object",++ "additionalProperties": false,++ "required": ["kind_id", "category", "subject", "elo", "games", "win_rate", "at"],++ "properties": {++ "kind_id": { "type": "string" },++ "category": { "type": "string" },++ "subject": { "type": "string" },++ "elo": { "type": "number" },++ "games": { "type": "number" },++ "wins": { "type": "number" },++ "losses": { "type": "number" },++ "ties": { "type": "number" },++ "win_rate": { "type": "number" },++ "ci_lower": { "type": "number" },++ "ci_upper": { "type": "number" },++ "median_cost_usd": { "type": ["number", "null"] },++ "median_ms": { "type": ["number", "null"] },++ "provisional": { "type": "boolean" },++ "at": { "type": "string", "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/bench.round.finished.v1.json",++ "title": "BenchRoundFinishedPayload",++ "description": "bench.round.finished v1 (OpenVibe.Bench): a pinned round reached finished with at least two usable entries and is ready for judgements. Envelope: source bench, subject { type: user, id: <created_by> }, visibility first-party.",++ "type": "object",++ "additionalProperties": false,++ "required": ["round_id", "task_id", "kind_id", "status", "entries", "finished_at"],++ "properties": {++ "round_id": { "type": "string" },++ "task_id": { "type": "string" },++ "kind_id": { "type": "string" },++ "status": { "const": "finished" },++ "entries": { "type": "integer", "minimum": 0 },++ "finished_at": { "type": "string", "format": "date-time" }++ }++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7",++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "provider": "openai",++ "model": "gpt-4o",++ "route": { "provider": "openai", "model": "gpt-4o" },++ "payload": { "text": "It is a page about benchmarks." },++ "cost_usd": 0.01,++ "ms": 1200++}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "id": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7",++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "provider": "openai",++ "model": "gpt-4o",++ "route": { "provider": "openai", "model": "gpt-4o" },++ "payload": { "text": "It is a page about benchmarks." },++ "cost_usd": 0.01,++ "ms": 1200,++ "tokens": 42,++ "error": null,++ "ui_check": null,++ "run_id": null++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "judge": "pair",++ "method": "human_vote",++ "outcome": "a",++ "score": null++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "judge": "pair",++ "judge_name": null,++ "method": "human_vote",++ "outcome": "a",++ "score": null,++ "at": "2026-10-28T18:05:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "jdg_01J8Z3Q4R5S6T7V8W9X0Y1Z2A8",++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "judge": "pair",++ "pair": { "a": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7", "b": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A9" },++ "outcome": "a",++ "score": null,++ "at": "2026-10-28T18:05:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "id": "jdg_01J8Z3Q4R5S6T7V8W9X0Y1Z2A8",++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "judge": "pair",++ "judge_name": null,++ "judge_version": null,++ "method": "human_vote",++ "pair": { "a": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7", "b": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A9" },++ "outcome": "a",++ "score": null,++ "at": "2026-10-28T18:05:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "room": "design",++ "entry": "prompt",++ "judge": "pair",++ "schema": { "type": "object" },++ "metrics": ["elo"],++ "created_at": "2026-10-28T18:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "room": "design",++ "entry": "prompt",++ "judge": "pair",++ "name": "UI copy",++ "schema": { "type": "object" },++ "metrics": ["elo", "cost"],++ "created_at": "2026-10-28T18:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "category": "model",++ "subject": "gpt-4o",++ "games": 11,++ "win_rate": 0.63,++ "at": "2026-10-28T18:05:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "category": "model",++ "subject": "gpt-4o",++ "elo": 1502,++ "games": 11,++ "win_rate": 0.63,++ "at": "2026-10-28T18:05:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "category": "model",++ "subject": "gpt-4o",++ "elo": 1500,++ "games": 10,++ "wins": 6,++ "losses": 3,++ "ties": 1,++ "win_rate": 0.6,++ "ci_lower": 1400++}nnew file mode 100644@@@ -0,0 +1,16 @@++{++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "category": "model",++ "subject": "gpt-4o",++ "elo": 1500,++ "games": 10,++ "wins": 6,++ "losses": 3,++ "ties": 1,++ "win_rate": 0.6,++ "ci_lower": 1400,++ "ci_upper": 1600,++ "median_cost_usd": null,++ "median_ms": null,++ "provisional": false++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "status": "queued",++ "entries": 1,++ "finished_at": "2026-10-28T18:10:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "status": "finished",++ "entries": 2,++ "finished_at": "2026-10-28T18:10:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "offers": [{ "provider": "openai", "model": "gpt-4o" }],++ "status": "bogus",++ "seed": 1,++ "pool_fallback": false,++ "receipt": null,++ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",++ "created_at": "2026-10-28T18:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "offers": [{ "provider": "openai", "model": "gpt-4o" }],++ "status": "queued",++ "seed": 1,++ "pool_fallback": false,++ "receipt": null,++ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",++ "created_at": "2026-10-28T18:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,8 @@++{++ "id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "prompt": "Summarize this page.",++ "task_class": null,++ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",++ "created_at": "2026-10-28T18:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,9 @@++{++ "id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",++ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",++ "prompt": "Summarize this page in one sentence.",++ "task_class": null,++ "public": true,++ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",++ "created_at": "2026-10-28T18:00:00.000Z"++}@@@ -83027,7 +83027,7 @@}},"codes.task-start-request": {-- "version": "1.0.0",++ "version": "1.1.0","owner": "codes","status": "active","schema": {@@@ -83080,6 +83080,18 @@"minLength": 8,"maxLength": 128,"pattern": "^[A-Za-z0-9_.:-]+$"++ },++ "actor_task_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256,++ "description": "The OpenVibe.Actor task id when this coding task was started from Actor."++ },++ "actor_step_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256,++ "description": "The OpenVibe.Actor step id when this coding task was started from Actor."}}}@@@ -83110,7 +83122,7 @@}},"codes.task": {-- "version": "1.0.0",++ "version": "1.1.0","owner": "codes","status": "active","schema": {@@@ -83289,6 +83301,26 @@"maxLength": 1000}}++ },++ "actor_ref": {++ "type": [++ "object",++ "null"++ ],++ "additionalProperties": false,++ "properties": {++ "task_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256++ },++ "step_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256++ }++ },++ "description": "The OpenVibe.Actor task and step that started this coding task, when it came from Actor."}}}@@@ -86962,6 +86994,573 @@}}}++ },++ "bench.kind": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/kind.v1.json",++ "title": "BenchKind",++ "description": "bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "room",++ "entry",++ "judge",++ "name",++ "schema",++ "metrics",++ "created_at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "room": {++ "type": "string"++ },++ "entry": {++ "type": "string"++ },++ "judge": {++ "type": "string"++ },++ "name": {++ "type": "string"++ },++ "schema": {++ "type": "object"++ },++ "metrics": {++ "type": "array",++ "items": {++ "type": "string"++ }++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "bench.task": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/task.v1.json",++ "title": "BenchTask",++ "description": "bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "kind_id",++ "prompt",++ "public",++ "created_by",++ "created_at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "prompt": {++ "type": "string"++ },++ "task_class": {++ "type": [++ "string",++ "null"++ ]++ },++ "public": {++ "type": "boolean"++ },++ "created_by": {++ "type": "string"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "bench.round": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/round.v1.json",++ "title": "BenchRound",++ "description": "bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "task_id",++ "kind_id",++ "offers",++ "status",++ "seed",++ "created_by",++ "created_at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "task_id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "offers": {++ "type": "array",++ "items": {++ "type": "object"++ }++ },++ "status": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "ready",++ "finished",++ "failed"++ ]++ },++ "seed": {++ "type": "integer"++ },++ "pool_fallback": {++ "type": "boolean"++ },++ "receipt": {++ "type": [++ "string",++ "null"++ ]++ },++ "created_by": {++ "type": "string"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "bench.entry": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/entry.v1.json",++ "title": "BenchEntry",++ "description": "bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "round_id",++ "provider",++ "model",++ "route",++ "payload",++ "cost_usd",++ "ms",++ "tokens"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "round_id": {++ "type": "string"++ },++ "provider": {++ "type": "string"++ },++ "model": {++ "type": "string"++ },++ "route": {++ "type": "object"++ },++ "payload": {++ "type": "object"++ },++ "cost_usd": {++ "type": "number"++ },++ "ms": {++ "type": "number"++ },++ "tokens": {++ "type": "number"++ },++ "error": {++ "type": [++ "string",++ "null"++ ]++ },++ "ui_check": {++ "type": [++ "object",++ "null"++ ]++ },++ "run_id": {++ "type": [++ "string",++ "null"++ ]++ }++ }++ }++ },++ "bench.judgement": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/judgement.v1.json",++ "title": "BenchJudgement",++ "description": "bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "round_id",++ "kind_id",++ "judge",++ "method",++ "pair",++ "outcome",++ "score",++ "at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "round_id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "judge": {++ "type": "string"++ },++ "judge_name": {++ "type": [++ "string",++ "null"++ ]++ },++ "judge_version": {++ "type": [++ "string",++ "null"++ ]++ },++ "method": {++ "type": "string"++ },++ "pair": {++ "type": [++ "object",++ "null"++ ]++ },++ "outcome": {++ "type": [++ "string",++ "null"++ ]++ },++ "score": {++ "type": [++ "number",++ "null"++ ]++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "bench.rating": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/bench/rating.v1.json",++ "title": "BenchRating",++ "description": "bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "kind_id",++ "category",++ "subject",++ "elo",++ "games",++ "wins",++ "losses",++ "ties",++ "win_rate",++ "ci_lower",++ "ci_upper"++ ],++ "properties": {++ "kind_id": {++ "type": "string"++ },++ "category": {++ "type": "string"++ },++ "subject": {++ "type": "string"++ },++ "elo": {++ "type": "number"++ },++ "games": {++ "type": "number"++ },++ "wins": {++ "type": "number"++ },++ "losses": {++ "type": "number"++ },++ "ties": {++ "type": "number"++ },++ "win_rate": {++ "type": "number"++ },++ "ci_lower": {++ "type": "number"++ },++ "ci_upper": {++ "type": "number"++ },++ "median_cost_usd": {++ "type": [++ "number",++ "null"++ ]++ },++ "median_ms": {++ "type": [++ "number",++ "null"++ ]++ },++ "provisional": {++ "type": "boolean"++ }++ }++ }++ },++ "bench.round.finished": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/bench.round.finished.v1.json",++ "title": "BenchRoundFinishedPayload",++ "description": "bench.round.finished v1 (OpenVibe.Bench): a pinned round reached finished with at least two usable entries and is ready for judgements. Envelope: source bench, subject { type: user, id: <created_by> }, visibility first-party.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "round_id",++ "task_id",++ "kind_id",++ "status",++ "entries",++ "finished_at"++ ],++ "properties": {++ "round_id": {++ "type": "string"++ },++ "task_id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "status": {++ "const": "finished"++ },++ "entries": {++ "type": "integer",++ "minimum": 0++ },++ "finished_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "bench.judgement.recorded": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/bench.judgement.recorded.v1.json",++ "title": "BenchJudgementRecordedPayload",++ "description": "bench.judgement.recorded v1 (OpenVibe.Bench): a judgement was cast on a round. Envelope: source bench, subject { type: user, id: <judge> } or { type: service, id: <judge> }, visibility first-party.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "round_id",++ "kind_id",++ "judge",++ "method",++ "at"++ ],++ "properties": {++ "round_id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "judge": {++ "type": "string"++ },++ "judge_name": {++ "type": [++ "string",++ "null"++ ]++ },++ "method": {++ "type": "string"++ },++ "outcome": {++ "type": [++ "string",++ "null"++ ]++ },++ "score": {++ "type": [++ "number",++ "null"++ ]++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "bench.rating.changed": {++ "version": "1.0.0",++ "owner": "bench",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/bench.rating.changed.v1.json",++ "title": "BenchRatingChangedPayload",++ "description": "bench.rating.changed v1 (OpenVibe.Bench): a rating moved on a benchmark board. Envelope: source bench, subject { type: service, id: bench }, visibility first-party.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "kind_id",++ "category",++ "subject",++ "elo",++ "games",++ "win_rate",++ "at"++ ],++ "properties": {++ "kind_id": {++ "type": "string"++ },++ "category": {++ "type": "string"++ },++ "subject": {++ "type": "string"++ },++ "elo": {++ "type": "number"++ },++ "games": {++ "type": "number"++ },++ "wins": {++ "type": "number"++ },++ "losses": {++ "type": "number"++ },++ "ties": {++ "type": "number"++ },++ "win_rate": {++ "type": "number"++ },++ "ci_lower": {++ "type": "number"++ },++ "ci_upper": {++ "type": "number"++ },++ "median_cost_usd": {++ "type": [++ "number",++ "null"++ ]++ },++ "median_ms": {++ "type": [++ "number",++ "null"++ ]++ },++ "provisional": {++ "type": "boolean"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"nnew file mode 100644@@@ -0,0 +1,1101 @@++{++ "openapi": "3.1.0",++ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",++ "info": {++ "title": "OpenVibe.Bench API",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "license": {++ "name": "MIT",++ "identifier": "MIT"++ }++ },++ "servers": [++ {++ "url": "https://bench.openvibe.services"++ }++ ],++ "paths": {++ "/api/v1/boards/{kindId}": {++ "get": {++ "operationId": "get_api_v1_boards_kindId",++ "summary": "Read a benchmark board on OpenVibe.Bench: GET /api/v1/boards/:kindId?type=elo|pareto|cost returns the rendered board for a kind.",++ "description": "**bench.board.read** (first-party): Read a benchmark board on OpenVibe.Bench: GET /api/v1/boards/:kindId?type=elo|pareto|cost returns the rendered board for a kind.",++ "tags": [++ "bench.board"++ ],++ "x-openvibe-capabilities": [++ "bench.board.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.board.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "kindId",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.rating.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/datasets/{kindId}.jsonl": {++ "get": {++ "operationId": "get_api_v1_datasets_kindId_jsonl",++ "summary": "Read the open dataset for a benchmark kind on OpenVibe.Bench: GET /api/v1/datasets/:kindId.jsonl returns prompts, entries, judgements without voter ids and ratings as JSON lines.",++ "description": "**bench.dataset.read** (first-party): Read the open dataset for a benchmark kind on OpenVibe.Bench: GET /api/v1/datasets/:kindId.jsonl returns prompts, entries, judgements without voter ids and ratings as JSON lines.",++ "tags": [++ "bench.dataset"++ ],++ "x-openvibe-capabilities": [++ "bench.dataset.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.dataset.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "kindId",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/octet-stream": {++ "schema": {++ "type": "string",++ "contentEncoding": "binary"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/evals": {++ "post": {++ "operationId": "post_api_v1_evals",++ "summary": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eva",++ "description": "**bench.eval.manage** (first-party): Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",++ "tags": [++ "bench.eval"++ ],++ "x-openvibe-capabilities": [++ "bench.eval.manage"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.eval.manage"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.task.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/evals/{id}/results": {++ "get": {++ "operationId": "get_api_v1_evals_id_results",++ "summary": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eva",++ "description": "**bench.eval.manage** (first-party): Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",++ "tags": [++ "bench.eval"++ ],++ "x-openvibe-capabilities": [++ "bench.eval.manage"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.eval.manage"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.task.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/evals/{id}/run": {++ "post": {++ "operationId": "post_api_v1_evals_id_run",++ "summary": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eva",++ "description": "**bench.eval.manage** (first-party): Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",++ "tags": [++ "bench.eval"++ ],++ "x-openvibe-capabilities": [++ "bench.eval.manage"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.eval.manage"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.task.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/kinds": {++ "get": {++ "operationId": "get_api_v1_kinds",++ "summary": "Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics.",++ "description": "**bench.kind.read** (first-party): Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics. Granted to rooms and developer services that render a kind or its board.",++ "tags": [++ "bench.kind"++ ],++ "x-openvibe-capabilities": [++ "bench.kind.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.kind.read"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.kind.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/kinds/{kindId}": {++ "get": {++ "operationId": "get_api_v1_kinds_kindId",++ "summary": "Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics.",++ "description": "**bench.kind.read** (first-party): Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics. Granted to rooms and developer services that render a kind or its board.",++ "tags": [++ "bench.kind"++ ],++ "x-openvibe-capabilities": [++ "bench.kind.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.kind.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "kindId",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.kind.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/kinds/{kindId}/tasks": {++ "post": {++ "operationId": "post_api_v1_kinds_kindId_tasks",++ "summary": "Create a benchmark task in a kind on OpenVibe.Bench: POST /api/v1/kinds/:kindId/tasks with { prompt, task_class?, public?",++ "description": "**bench.task.create** (first-party): Create a benchmark task in a kind on OpenVibe.Bench: POST /api/v1/kinds/:kindId/tasks with { prompt, task_class?, public? }. A room or a person's own token may create a task.",++ "tags": [++ "bench.task"++ ],++ "x-openvibe-capabilities": [++ "bench.task.create"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.task.create"++ ]++ }++ ],++ "parameters": [++ {++ "name": "kindId",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.task.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/rounds/{id}": {++ "get": {++ "operationId": "get_api_v1_rounds_id",++ "summary": "Read a benchmark round on OpenVibe.Bench: GET /api/v1/rounds/:id returns the round with entries; entries stay blind until the caller has judged or started the round.",++ "description": "**bench.round.read** (first-party): Read a benchmark round on OpenVibe.Bench: GET /api/v1/rounds/:id returns the round with entries; entries stay blind until the caller has judged or started the round.",++ "tags": [++ "bench.round"++ ],++ "x-openvibe-capabilities": [++ "bench.round.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.round.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.round.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/rounds/{id}/entries": {++ "post": {++ "operationId": "post_api_v1_rounds_id_entries",++ "summary": "Submit an outside entry to a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/entries with a service token.",++ "description": "**bench.entry.create** (first-party): Submit an outside entry to a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/entries with a service token. A room submits a game match, a test-suite run or another room's result.",++ "tags": [++ "bench.entry"++ ],++ "x-openvibe-capabilities": [++ "bench.entry.create"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.entry.create"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.entry.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/rounds/{id}/judgements": {++ "post": {++ "operationId": "post_api_v1_rounds_id_judgements",++ "summary": "Cast a blind judgement on a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/judgements with { judge?, pair?, outcome?, score?",++ "description": "**bench.judgement.cast** (first-party): Cast a blind judgement on a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/judgements with { judge?, pair?, outcome?, score? }. Human judges are people; automatic, test-suite and game-outcome judges are services.",++ "tags": [++ "bench.judgement"++ ],++ "x-openvibe-capabilities": [++ "bench.judgement.cast"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.judgement.cast"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.judgement.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/tasks/{id}/rounds": {++ "post": {++ "operationId": "post_api_v1_tasks_id_rounds",++ "summary": "Pin a reproducible benchmark round on OpenVibe.Bench: POST /api/v1/tasks/:id/rounds with { offers?, seed?",++ "description": "**bench.round.create** (first-party): Pin a reproducible benchmark round on OpenVibe.Bench: POST /api/v1/tasks/:id/rounds with { offers?, seed? }. The round's job generates entries from the exact offers and seed.",++ "tags": [++ "bench.round"++ ],++ "x-openvibe-capabilities": [++ "bench.round.create"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "bench.round.create"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/bench.round.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ }++ },++ "components": {++ "schemas": {++ "bench.entry.v1": {++ "title": "BenchEntry",++ "description": "bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "round_id",++ "provider",++ "model",++ "route",++ "payload",++ "cost_usd",++ "ms",++ "tokens"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "round_id": {++ "type": "string"++ },++ "provider": {++ "type": "string"++ },++ "model": {++ "type": "string"++ },++ "route": {++ "type": "object"++ },++ "payload": {++ "type": "object"++ },++ "cost_usd": {++ "type": "number"++ },++ "ms": {++ "type": "number"++ },++ "tokens": {++ "type": "number"++ },++ "error": {++ "type": [++ "string",++ "null"++ ]++ },++ "ui_check": {++ "type": [++ "object",++ "null"++ ]++ },++ "run_id": {++ "type": [++ "string",++ "null"++ ]++ }++ }++ },++ "bench.judgement.v1": {++ "title": "BenchJudgement",++ "description": "bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "round_id",++ "kind_id",++ "judge",++ "method",++ "pair",++ "outcome",++ "score",++ "at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "round_id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "judge": {++ "type": "string"++ },++ "judge_name": {++ "type": [++ "string",++ "null"++ ]++ },++ "judge_version": {++ "type": [++ "string",++ "null"++ ]++ },++ "method": {++ "type": "string"++ },++ "pair": {++ "type": [++ "object",++ "null"++ ]++ },++ "outcome": {++ "type": [++ "string",++ "null"++ ]++ },++ "score": {++ "type": [++ "number",++ "null"++ ]++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },++ "bench.kind.v1": {++ "title": "BenchKind",++ "description": "bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "room",++ "entry",++ "judge",++ "name",++ "schema",++ "metrics",++ "created_at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "room": {++ "type": "string"++ },++ "entry": {++ "type": "string"++ },++ "judge": {++ "type": "string"++ },++ "name": {++ "type": "string"++ },++ "schema": {++ "type": "object"++ },++ "metrics": {++ "type": "array",++ "items": {++ "type": "string"++ }++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },++ "bench.rating.v1": {++ "title": "BenchRating",++ "description": "bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "kind_id",++ "category",++ "subject",++ "elo",++ "games",++ "wins",++ "losses",++ "ties",++ "win_rate",++ "ci_lower",++ "ci_upper"++ ],++ "properties": {++ "kind_id": {++ "type": "string"++ },++ "category": {++ "type": "string"++ },++ "subject": {++ "type": "string"++ },++ "elo": {++ "type": "number"++ },++ "games": {++ "type": "number"++ },++ "wins": {++ "type": "number"++ },++ "losses": {++ "type": "number"++ },++ "ties": {++ "type": "number"++ },++ "win_rate": {++ "type": "number"++ },++ "ci_lower": {++ "type": "number"++ },++ "ci_upper": {++ "type": "number"++ },++ "median_cost_usd": {++ "type": [++ "number",++ "null"++ ]++ },++ "median_ms": {++ "type": [++ "number",++ "null"++ ]++ },++ "provisional": {++ "type": "boolean"++ }++ }++ },++ "bench.round.v1": {++ "title": "BenchRound",++ "description": "bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "task_id",++ "kind_id",++ "offers",++ "status",++ "seed",++ "created_by",++ "created_at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "task_id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "offers": {++ "type": "array",++ "items": {++ "type": "object"++ }++ },++ "status": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "ready",++ "finished",++ "failed"++ ]++ },++ "seed": {++ "type": "integer"++ },++ "pool_fallback": {++ "type": "boolean"++ },++ "receipt": {++ "type": [++ "string",++ "null"++ ]++ },++ "created_by": {++ "type": "string"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },++ "bench.task.v1": {++ "title": "BenchTask",++ "description": "bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "kind_id",++ "prompt",++ "public",++ "created_by",++ "created_at"++ ],++ "properties": {++ "id": {++ "type": "string"++ },++ "kind_id": {++ "type": "string"++ },++ "prompt": {++ "type": "string"++ },++ "task_class": {++ "type": [++ "string",++ "null"++ ]++ },++ "public": {++ "type": "boolean"++ },++ "created_by": {++ "type": "string"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },++ "errors.problem.v1": {++ "title": "Problem",++ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",++ "type": "object",++ "required": [++ "type",++ "title",++ "status",++ "code"++ ],++ "additionalProperties": true,++ "properties": {++ "type": {++ "type": "string",++ "format": "uri-reference"++ },++ "title": {++ "type": "string",++ "minLength": 1++ },++ "status": {++ "type": "integer",++ "minimum": 400,++ "maximum": 599++ },++ "detail": {++ "type": "string"++ },++ "instance": {++ "type": "string",++ "format": "uri-reference"++ },++ "code": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"++ },++ "request_id": {++ "type": "string"++ },++ "trace_id": {++ "type": "string",++ "pattern": "^[0-9a-f]{32}$"++ },++ "errors": {++ "type": "array",++ "items": {++ "type": "object",++ "required": [++ "message"++ ],++ "properties": {++ "path": {++ "type": "string"++ },++ "message": {++ "type": "string"++ }++ }++ }++ },++ "error": {++ "type": "string",++ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."++ }++ }++ }++ },++ "securitySchemes": {++ "openvibeToken": {++ "type": "http",++ "scheme": "bearer",++ "bearerFormat": "JWT",++ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."++ }++ }++ }++}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -281,6 +281,18 @@"minLength": 8,"maxLength": 128,"pattern": "^[A-Za-z0-9_.:-]+$"++ },++ "actor_task_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256,++ "description": "The OpenVibe.Actor task id when this coding task was started from Actor."++ },++ "actor_step_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256,++ "description": "The OpenVibe.Actor step id when this coding task was started from Actor."}}},@@@ -476,6 +488,26 @@"maxLength": 1000}}++ },++ "actor_ref": {++ "type": [++ "object",++ "null"++ ],++ "additionalProperties": false,++ "properties": {++ "task_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256++ },++ "step_id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 256++ }++ },++ "description": "The OpenVibe.Actor task and step that started this coding task, when it came from Actor."}}},@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -15,6 +15,13 @@"operations": 44,"capabilities": 9},++ {++ "service": "bench",++ "name": "OpenVibe.Bench",++ "origin": "https://bench.openvibe.services",++ "operations": 12,++ "capabilities": 9++ },{"service": "billing","name": "OpenVibe.Billing",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.237.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.237.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.238.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -211214,7 +211214,7 @@ export type VideoPlaylistManageResult =}[];};--/** [email protected] (owner: codes) */++/** [email protected] (owner: codes) *//*** codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).*/@@@ -211227,6 +211227,14 @@ export interface CodesTaskStartRequest {push?: boolean;pull_request?: boolean;idempotency_key?: string;++ /**++ * The OpenVibe.Actor task id when this coding task was started from Actor.++ */++ actor_task_id?: string;++ /**++ * The OpenVibe.Actor step id when this coding task was started from Actor.++ */++ actor_step_id?: string;}/** [email protected] (owner: codes) */@@@ -211238,7 +211246,7 @@ export interface CodesTaskStartResult {created: boolean;}--/** [email protected] (owner: codes) */++/** [email protected] (owner: codes) *//*** codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).*/@@@ -211416,6 +211424,13 @@ export interface CodesTask {duration_ms?: number;error?: string;};++ /**++ * The OpenVibe.Actor task and step that started this coding task, when it came from Actor.++ */++ actor_ref?: {++ task_id?: string;++ step_id?: string;++ } | null;}/** [email protected] (owner: play) */@@@ -213411,3 +213426,157 @@ export interface VisionUiCheckResult {created_at: string;};}++++/** [email protected] (owner: bench) */++/**++ * bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).++ */++export interface BenchKind {++ id: string;++ room: string;++ entry: string;++ judge: string;++ name: string;++ schema: {};++ metrics: string[];++ created_at: string;++}++++/** [email protected] (owner: bench) */++/**++ * bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.++ */++export interface BenchTask {++ id: string;++ kind_id: string;++ prompt: string;++ task_class?: string | null;++ public: boolean;++ created_by: string;++ created_at: string;++}++++/** [email protected] (owner: bench) */++/**++ * bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.++ */++export interface BenchRound {++ id: string;++ task_id: string;++ kind_id: string;++ offers: {}[];++ status: "queued" | "running" | "ready" | "finished" | "failed";++ seed: number;++ pool_fallback?: boolean;++ receipt?: string | null;++ created_by: string;++ created_at: string;++}++++/** [email protected] (owner: bench) */++/**++ * bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.++ */++export interface BenchEntry {++ id: string;++ round_id: string;++ provider: string;++ model: string;++ route: {};++ payload: {};++ cost_usd: number;++ ms: number;++ tokens: number;++ error?: string | null;++ ui_check?: {} | null;++ run_id?: string | null;++}++++/** [email protected] (owner: bench) */++/**++ * bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.++ */++export interface BenchJudgement {++ id: string;++ round_id: string;++ kind_id: string;++ judge: string;++ judge_name?: string | null;++ judge_version?: string | null;++ method: string;++ pair: {} | null;++ outcome: string | null;++ score: number | null;++ at: string;++}++++/** [email protected] (owner: bench) */++/**++ * bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.++ */++export interface BenchRating {++ kind_id: string;++ category: string;++ subject: string;++ elo: number;++ games: number;++ wins: number;++ losses: number;++ ties: number;++ win_rate: number;++ ci_lower: number;++ ci_upper: number;++ median_cost_usd?: number | null;++ median_ms?: number | null;++ provisional?: boolean;++}++++/** [email protected] (owner: bench) */++/**++ * bench.round.finished v1 (OpenVibe.Bench): a pinned round reached finished with at least two usable entries and is ready for judgements. Envelope: source bench, subject { type: user, id: <created_by> }, visibility first-party.++ */++export interface BenchRoundFinishedPayload {++ round_id: string;++ task_id: string;++ kind_id: string;++ status: "finished";++ entries: number;++ finished_at: string;++}++++/** [email protected] (owner: bench) */++/**++ * bench.judgement.recorded v1 (OpenVibe.Bench): a judgement was cast on a round. Envelope: source bench, subject { type: user, id: <judge> } or { type: service, id: <judge> }, visibility first-party.++ */++export interface BenchJudgementRecordedPayload {++ round_id: string;++ kind_id: string;++ judge: string;++ judge_name?: string | null;++ method: string;++ outcome?: string | null;++ score?: number | null;++ at: string;++}++++/** [email protected] (owner: bench) */++/**++ * bench.rating.changed v1 (OpenVibe.Bench): a rating moved on a benchmark board. Envelope: source bench, subject { type: service, id: bench }, visibility first-party.++ */++export interface BenchRatingChangedPayload {++ kind_id: string;++ category: string;++ subject: string;++ elo: number;++ games: number;++ wins?: number;++ losses?: number;++ ties?: number;++ win_rate: number;++ ci_lower?: number;++ ci_upper?: number;++ median_cost_usd?: number | null;++ median_ms?: number | null;++ provisional?: boolean;++ at: string;++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.board.read",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Read a benchmark board on OpenVibe.Bench: GET /api/v1/boards/:kindId?type=elo|pareto|cost returns the rendered board for a kind.",++ "permissions": [++ "bench:boards:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/boards/:kindId"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.rating@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.dataset.read",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Read the open dataset for a benchmark kind on OpenVibe.Bench: GET /api/v1/datasets/:kindId.jsonl returns prompts, entries, judgements without voter ids and ratings as JSON lines.",++ "permissions": [++ "bench:datasets:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/datasets/:kindId.jsonl"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "common.binary@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.entry.create",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Submit an outside entry to a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/entries with a service token. A room submits a game match, a test-suite run or another room's result.",++ "permissions": [++ "bench:entries:create"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/rounds/:id/entries"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.entry@1"++}nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "id": "bench.eval.manage",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",++ "permissions": [++ "bench:evals:manage"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/evals",++ "POST /api/v1/evals/:id/run",++ "GET /api/v1/evals/:id/results"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.task@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.judgement.cast",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Cast a blind judgement on a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/judgements with { judge?, pair?, outcome?, score? }. Human judges are people; automatic, test-suite and game-outcome judges are services.",++ "permissions": [++ "bench:judgements:cast"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/rounds/:id/judgements"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.judgement@1"++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "bench.kind.read",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics. Granted to rooms and developer services that render a kind or its board.",++ "permissions": [++ "bench:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/kinds",++ "GET /api/v1/kinds/:kindId"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.kind@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.round.create",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Pin a reproducible benchmark round on OpenVibe.Bench: POST /api/v1/tasks/:id/rounds with { offers?, seed? }. The round's job generates entries from the exact offers and seed.",++ "permissions": [++ "bench:rounds:create"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/tasks/:id/rounds"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.round@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.round.read",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Read a benchmark round on OpenVibe.Bench: GET /api/v1/rounds/:id returns the round with entries; entries stay blind until the caller has judged or started the round.",++ "permissions": [++ "bench:rounds:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/rounds/:id"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.round@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "bench.task.create",++ "version": "1.0",++ "owner": "bench",++ "status": "active",++ "visibility": "first-party",++ "description": "Create a benchmark task in a kind on OpenVibe.Bench: POST /api/v1/kinds/:kindId/tasks with { prompt, task_class?, public? }. A room or a person's own token may create a task.",++ "permissions": [++ "bench:tasks:create"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/kinds/:kindId/tasks"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "bench.task@1"++}nnew file mode 100644@@@ -0,0 +1,105 @@++{++ "version": "0.1.0",++ "contractRanges": {++ "openvibe-contracts": ">=0.238.0 <1.0.0"++ },++ "id": "bench",++ "name": "OpenVibe.Bench",++ "status": "alpha",++ "repository": "OpenVibers/OpenVibe.Bench",++ "domains": [++ "bench.openvibe.services"++ ],++ "publicOrigin": "https://bench.openvibe.services",++ "health": "/api/health",++ "ready": "/api/ready",++ "internalOrigin": "http://127.0.0.1:5230",++ "exposure": {++ "state": "live",++ "publicSite": "service",++ "note": "the public home, /docs and the bench.* API at bench.openvibe.services since 2026-10-28; services on the host call 127.0.0.1:5230"++ },++ "capabilities": [++ "bench.kind.read",++ "bench.task.create",++ "bench.round.create",++ "bench.round.read",++ "bench.entry.create",++ "bench.judgement.cast",++ "bench.board.read",++ "bench.dataset.read",++ "bench.eval.manage"++ ],++ "eventsProduced": [++ "bench.round.finished",++ "bench.judgement.recorded",++ "bench.rating.changed"++ ],++ "eventsConsumed": [++ "network.account.export_requested",++ "network.account.deleted"++ ],++ "namespacesOwned": [++ "bench.*"++ ],++ "lifecycle": {++ "liveness": {++ "endpoint": "/api/health",++ "means": "the process is up and answers HTTP; it checks nothing else (the database and dependencies are what ready checks)"++ },++ "shutdown": {++ "signal": "SIGTERM",++ "deadlineSeconds": 10,++ "drains": [++ "timers cleared",++ "JWKS key refresher stopped",++ "round and private-eval jobs stopped",++ "outbox publisher stopped (its send in progress awaited; unsent rows stay for the next start)",++ "telemetry buffer flushed and its retention timer stopped",++ "open HTTP connections closed, then the server",++ "database pool closed"++ ]++ },++ "startupRecovery": {++ "resumes": [++ {++ "kind": "jobs",++ "what": "rounds and private eval runs left queued or running are marked failed at boot; the caller retries them"++ },++ {++ "kind": "outbox",++ "what": "unsent bench.round.finished, bench.judgement.recorded and bench.rating.changed events in the outbox go to OpenVibe.Events once the publisher starts"++ },++ {++ "kind": "consumer",++ "what": "OpenVibe.Events redelivers network.account.export_requested and network.account.deleted that were pending during the stop; account_data_events applies each once"++ }++ ]++ },++ "rollback": {++ "conditions": [++ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",++ "manual: ovhost rollback <service> --to <sha>"++ ],++ "window": "automatic only while ovhost waits for readiness after the restart (30 s in host.example.json); manual afterwards, as long as no blocker applies",++ "blockers": {++ "none": "the schema code only adds (CREATE … IF NOT EXISTS, ADD COLUMN; no DROP, RENAME or table rebuild), which an older release ignores"++ }++ },++ "contracts": {++ "range": ">=0.238.0 <1.0.0"++ },++ "leases": {++ "none": "no claims: one process owns its PostgreSQL database (ov_bench); a round is taken with a compare-and-set on its status (queued → running)"++ }++ },++ "notes": "Port 5230, unit openvibe-bench.service, database ov_bench. The shared AI benchmark and comparison engine (plan 2026-10-28 §4.12): kinds, pinned rounds, entries, blind judgements, ratings, boards, the open dataset and private evals. AI stays the run authority, Report the analytics authority. Bench answers account export and deletion (ADR-033) and subscribes to the two account Events topics. It calls AI's run API (ai.run.create, namespace ai.generate) for generation and publishes bench.* events through its outbox.",++ "site": {++ "name": "Bench",++ "icon": "bench",++ "tagline": "One AI benchmark and comparison engine for every room.",++ "what": "The shared AI benchmark and comparison engine: kinds, pinned rounds, blind judgements, elo/pareto/cost boards, an open dataset per kind and private evals.",++ "legalProfile": "tools",++ "position": 47++ }++}@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.237.0",++ "version": "0.238.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -4,6 +4,22 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,22 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
the notes were in the tag and commit messages (`git tag -n1`).
+## 0.238.0 — 2026-10-28
+
+- **OpenVibe.Bench** (`bench`, live at bench.openvibe.services, port 5230, database `ov_bench`): the shared AI
+ benchmark and comparison engine for every room (plan §4.12). It owns kinds, pinned rounds, entries, blind
+ judgements, ratings, boards, the open dataset per kind and private evals; AI stays the run authority and Report
+ the analytics authority. New `bench.kind@1`, `bench.task@1`, `bench.round@1`, `bench.entry@1`,
+ `bench.judgement@1` and `bench.rating@1` schemas, the `bench.round.finished`, `bench.judgement.recorded` and
+ `bench.rating.changed` event payloads, and nine first-party `bench.*` capabilities. The manifest is modeled on
+ OpenVibe.AI (`bench.openvibe.services`, not `openvibe.bench`) and its site block (Bench, icon `bench`, position 47,
+ legal profile `tools`) sits in For developers. Bench calls `ai.run.create` (namespace `ai.generate`) and subscribes
+ to the account events; Design moves its Arena onto Bench with `bench.task.create`, `bench.round.create`,
+ `bench.round.read`, `bench.judgement.cast` and `bench.board.read`.
+- **Codes** (`codes.task-start-request@1` 1.1.0, `codes.task@1` 1.1.0): optional `actor_task_id`/`actor_step_id`
+ request fields and the `actor_ref` back-reference, so a task started from OpenVibe.Actor can carry its Actor task
+ and step. Both are optional, so existing producers and consumers are unaffected.
+
## 0.237.0 — 2026-10-28
## 0.237.0 — 2026-10-28
- **OpenVibe.Cam** (`cam`, live at openvibe.cam, port 5160, database `ov_cam`): the camera app (preview, timer,
- **OpenVibe.Cam** (`cam`, live at openvibe.cam, port 5160, database `ov_cam`): the camera app (preview, timer,
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/entry.v1.json",
+ "title": "BenchEntry",
+ "description": "bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "round_id", "provider", "model", "route", "payload", "cost_usd", "ms", "tokens"],
+ "properties": {
+ "id": { "type": "string" },
+ "round_id": { "type": "string" },
+ "provider": { "type": "string" },
+ "model": { "type": "string" },
+ "route": { "type": "object" },
+ "payload": { "type": "object" },
+ "cost_usd": { "type": "number" },
+ "ms": { "type": "number" },
+ "tokens": { "type": "number" },
+ "error": { "type": ["string", "null"] },
+ "ui_check": { "type": ["object", "null"] },
+ "run_id": { "type": ["string", "null"] }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/judgement.v1.json",
+ "title": "BenchJudgement",
+ "description": "bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "round_id", "kind_id", "judge", "method", "pair", "outcome", "score", "at"],
+ "properties": {
+ "id": { "type": "string" },
+ "round_id": { "type": "string" },
+ "kind_id": { "type": "string" },
+ "judge": { "type": "string" },
+ "judge_name": { "type": ["string", "null"] },
+ "judge_version": { "type": ["string", "null"] },
+ "method": { "type": "string" },
+ "pair": { "type": ["object", "null"] },
+ "outcome": { "type": ["string", "null"] },
+ "score": { "type": ["number", "null"] },
+ "at": { "type": "string", "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/kind.v1.json",
+ "title": "BenchKind",
+ "description": "bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "room", "entry", "judge", "name", "schema", "metrics", "created_at"],
+ "properties": {
+ "id": { "type": "string" },
+ "room": { "type": "string" },
+ "entry": { "type": "string" },
+ "judge": { "type": "string" },
+ "name": { "type": "string" },
+ "schema": { "type": "object" },
+ "metrics": { "type": "array", "items": { "type": "string" } },
+ "created_at": { "type": "string", "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/rating.v1.json",
+ "title": "BenchRating",
+ "description": "bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["kind_id", "category", "subject", "elo", "games", "wins", "losses", "ties", "win_rate", "ci_lower", "ci_upper"],
+ "properties": {
+ "kind_id": { "type": "string" },
+ "category": { "type": "string" },
+ "subject": { "type": "string" },
+ "elo": { "type": "number" },
+ "games": { "type": "number" },
+ "wins": { "type": "number" },
+ "losses": { "type": "number" },
+ "ties": { "type": "number" },
+ "win_rate": { "type": "number" },
+ "ci_lower": { "type": "number" },
+ "ci_upper": { "type": "number" },
+ "median_cost_usd": { "type": ["number", "null"] },
+ "median_ms": { "type": ["number", "null"] },
+ "provisional": { "type": "boolean" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/round.v1.json",
+ "title": "BenchRound",
+ "description": "bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "task_id", "kind_id", "offers", "status", "seed", "created_by", "created_at"],
+ "properties": {
+ "id": { "type": "string" },
+ "task_id": { "type": "string" },
+ "kind_id": { "type": "string" },
+ "offers": { "type": "array", "items": { "type": "object" } },
+ "status": { "type": "string", "enum": ["queued", "running", "ready", "finished", "failed"] },
+ "seed": { "type": "integer" },
+ "pool_fallback": { "type": "boolean" },
+ "receipt": { "type": ["string", "null"] },
+ "created_by": { "type": "string" },
+ "created_at": { "type": "string", "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/task.v1.json",
+ "title": "BenchTask",
+ "description": "bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["id", "kind_id", "prompt", "public", "created_by", "created_at"],
+ "properties": {
+ "id": { "type": "string" },
+ "kind_id": { "type": "string" },
+ "prompt": { "type": "string" },
+ "task_class": { "type": ["string", "null"] },
+ "public": { "type": "boolean" },
+ "created_by": { "type": "string" },
+ "created_at": { "type": "string", "format": "date-time" }
+ }
+}
@@ -7344,7 +7344,7 @@
@@ -7344,7 +7344,7 @@
},
},
{
{
"id": "codes.task-start-request",
"id": "codes.task-start-request",
- "version": "1.0.0",
+ "version": "1.1.0",
"owner": "codes",
"owner": "codes",
"schema": "codes/task-start-request.v1.json",
"schema": "codes/task-start-request.v1.json",
"visibility": "first-party",
"visibility": "first-party",
@@ -7362,7 +7362,7 @@
@@ -7362,7 +7362,7 @@
},
},
{
{
"id": "codes.task",
"id": "codes.task",
- "version": "1.0.0",
+ "version": "1.1.0",
"owner": "codes",
"owner": "codes",
"schema": "codes/task.v1.json",
"schema": "codes/task.v1.json",
"visibility": "first-party",
"visibility": "first-party",
@@ -7721,6 +7721,87 @@
@@ -7721,6 +7721,87 @@
"visibility": "first-party",
"visibility": "first-party",
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
+ },
+ {
+ "id": "bench.kind",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "bench/kind.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.task",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "bench/task.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.round",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "bench/round.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.entry",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "bench/entry.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.judgement",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "bench/judgement.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.rating",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "bench/rating.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.round.finished",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "events/payloads/bench.round.finished.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.judgement.recorded",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "events/payloads/bench.judgement.recorded.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "bench.rating.changed",
+ "version": "1.0.0",
+ "owner": "bench",
+ "schema": "events/payloads/bench.rating.changed.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
@@ -48,6 +48,18 @@
@@ -48,6 +48,18 @@
"minLength": 8,
"minLength": 8,
"maxLength": 128,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_.:-]+$"
"pattern": "^[A-Za-z0-9_.:-]+$"
+ },
+ "actor_task_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "description": "The OpenVibe.Actor task id when this coding task was started from Actor."
+ },
+ "actor_step_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "description": "The OpenVibe.Actor step id when this coding task was started from Actor."
}
}
}
}
}
}
@@ -174,6 +174,15 @@
@@ -174,6 +174,15 @@
"maxLength": 1000
"maxLength": 1000
}
}
}
}
+ },
+ "actor_ref": {
+ "type": ["object", "null"],
+ "additionalProperties": false,
+ "properties": {
+ "task_id": { "type": "string", "minLength": 1, "maxLength": 256 },
+ "step_id": { "type": "string", "minLength": 1, "maxLength": 256 }
+ },
+ "description": "The OpenVibe.Actor task and step that started this coding task, when it came from Actor."
}
}
}
}
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/bench.judgement.recorded.v1.json",
+ "title": "BenchJudgementRecordedPayload",
+ "description": "bench.judgement.recorded v1 (OpenVibe.Bench): a judgement was cast on a round. Envelope: source bench, subject { type: user, id: <judge> } or { type: service, id: <judge> }, visibility first-party.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["round_id", "kind_id", "judge", "method", "at"],
+ "properties": {
+ "round_id": { "type": "string" },
+ "kind_id": { "type": "string" },
+ "judge": { "type": "string" },
+ "judge_name": { "type": ["string", "null"] },
+ "method": { "type": "string" },
+ "outcome": { "type": ["string", "null"] },
+ "score": { "type": ["number", "null"] },
+ "at": { "type": "string", "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/bench.rating.changed.v1.json",
+ "title": "BenchRatingChangedPayload",
+ "description": "bench.rating.changed v1 (OpenVibe.Bench): a rating moved on a benchmark board. Envelope: source bench, subject { type: service, id: bench }, visibility first-party.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["kind_id", "category", "subject", "elo", "games", "win_rate", "at"],
+ "properties": {
+ "kind_id": { "type": "string" },
+ "category": { "type": "string" },
+ "subject": { "type": "string" },
+ "elo": { "type": "number" },
+ "games": { "type": "number" },
+ "wins": { "type": "number" },
+ "losses": { "type": "number" },
+ "ties": { "type": "number" },
+ "win_rate": { "type": "number" },
+ "ci_lower": { "type": "number" },
+ "ci_upper": { "type": "number" },
+ "median_cost_usd": { "type": ["number", "null"] },
+ "median_ms": { "type": ["number", "null"] },
+ "provisional": { "type": "boolean" },
+ "at": { "type": "string", "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/bench.round.finished.v1.json",
+ "title": "BenchRoundFinishedPayload",
+ "description": "bench.round.finished v1 (OpenVibe.Bench): a pinned round reached finished with at least two usable entries and is ready for judgements. Envelope: source bench, subject { type: user, id: <created_by> }, visibility first-party.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": ["round_id", "task_id", "kind_id", "status", "entries", "finished_at"],
+ "properties": {
+ "round_id": { "type": "string" },
+ "task_id": { "type": "string" },
+ "kind_id": { "type": "string" },
+ "status": { "const": "finished" },
+ "entries": { "type": "integer", "minimum": 0 },
+ "finished_at": { "type": "string", "format": "date-time" }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7",
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "provider": "openai",
+ "model": "gpt-4o",
+ "route": { "provider": "openai", "model": "gpt-4o" },
+ "payload": { "text": "It is a page about benchmarks." },
+ "cost_usd": 0.01,
+ "ms": 1200
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "id": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7",
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "provider": "openai",
+ "model": "gpt-4o",
+ "route": { "provider": "openai", "model": "gpt-4o" },
+ "payload": { "text": "It is a page about benchmarks." },
+ "cost_usd": 0.01,
+ "ms": 1200,
+ "tokens": 42,
+ "error": null,
+ "ui_check": null,
+ "run_id": null
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "judge": "pair",
+ "method": "human_vote",
+ "outcome": "a",
+ "score": null
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "judge": "pair",
+ "judge_name": null,
+ "method": "human_vote",
+ "outcome": "a",
+ "score": null,
+ "at": "2026-10-28T18:05:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "jdg_01J8Z3Q4R5S6T7V8W9X0Y1Z2A8",
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "judge": "pair",
+ "pair": { "a": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7", "b": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A9" },
+ "outcome": "a",
+ "score": null,
+ "at": "2026-10-28T18:05:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "id": "jdg_01J8Z3Q4R5S6T7V8W9X0Y1Z2A8",
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "judge": "pair",
+ "judge_name": null,
+ "judge_version": null,
+ "method": "human_vote",
+ "pair": { "a": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A7", "b": "ent_01J8Z3Q4R5S6T7V8W9X0Y1Z2A9" },
+ "outcome": "a",
+ "score": null,
+ "at": "2026-10-28T18:05:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "room": "design",
+ "entry": "prompt",
+ "judge": "pair",
+ "schema": { "type": "object" },
+ "metrics": ["elo"],
+ "created_at": "2026-10-28T18:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "room": "design",
+ "entry": "prompt",
+ "judge": "pair",
+ "name": "UI copy",
+ "schema": { "type": "object" },
+ "metrics": ["elo", "cost"],
+ "created_at": "2026-10-28T18:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "category": "model",
+ "subject": "gpt-4o",
+ "games": 11,
+ "win_rate": 0.63,
+ "at": "2026-10-28T18:05:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "category": "model",
+ "subject": "gpt-4o",
+ "elo": 1502,
+ "games": 11,
+ "win_rate": 0.63,
+ "at": "2026-10-28T18:05:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "category": "model",
+ "subject": "gpt-4o",
+ "elo": 1500,
+ "games": 10,
+ "wins": 6,
+ "losses": 3,
+ "ties": 1,
+ "win_rate": 0.6,
+ "ci_lower": 1400
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
+{
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "category": "model",
+ "subject": "gpt-4o",
+ "elo": 1500,
+ "games": 10,
+ "wins": 6,
+ "losses": 3,
+ "ties": 1,
+ "win_rate": 0.6,
+ "ci_lower": 1400,
+ "ci_upper": 1600,
+ "median_cost_usd": null,
+ "median_ms": null,
+ "provisional": false
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "status": "queued",
+ "entries": 1,
+ "finished_at": "2026-10-28T18:10:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "round_id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "status": "finished",
+ "entries": 2,
+ "finished_at": "2026-10-28T18:10:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "offers": [{ "provider": "openai", "model": "gpt-4o" }],
+ "status": "bogus",
+ "seed": 1,
+ "pool_fallback": false,
+ "receipt": null,
+ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",
+ "created_at": "2026-10-28T18:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "id": "rnd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A6",
+ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "offers": [{ "provider": "openai", "model": "gpt-4o" }],
+ "status": "queued",
+ "seed": 1,
+ "pool_fallback": false,
+ "receipt": null,
+ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",
+ "created_at": "2026-10-28T18:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
+{
+ "id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "prompt": "Summarize this page.",
+ "task_class": null,
+ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",
+ "created_at": "2026-10-28T18:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
+{
+ "id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A4",
+ "kind_id": "knd_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
+ "prompt": "Summarize this page in one sentence.",
+ "task_class": null,
+ "public": true,
+ "created_by": "user:usr_01J8Z3Q4R5S6T7V8W9X0Y1Z2A5",
+ "created_at": "2026-10-28T18:00:00.000Z"
+}
@@ -83027,7 +83027,7 @@
@@ -83027,7 +83027,7 @@
}
}
},
},
"codes.task-start-request": {
"codes.task-start-request": {
- "version": "1.0.0",
+ "version": "1.1.0",
"owner": "codes",
"owner": "codes",
"status": "active",
"status": "active",
"schema": {
"schema": {
@@ -83080,6 +83080,18 @@
@@ -83080,6 +83080,18 @@
"minLength": 8,
"minLength": 8,
"maxLength": 128,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_.:-]+$"
"pattern": "^[A-Za-z0-9_.:-]+$"
+ },
+ "actor_task_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "description": "The OpenVibe.Actor task id when this coding task was started from Actor."
+ },
+ "actor_step_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "description": "The OpenVibe.Actor step id when this coding task was started from Actor."
}
}
}
}
}
}
@@ -83110,7 +83122,7 @@
@@ -83110,7 +83122,7 @@
}
}
},
},
"codes.task": {
"codes.task": {
- "version": "1.0.0",
+ "version": "1.1.0",
"owner": "codes",
"owner": "codes",
"status": "active",
"status": "active",
"schema": {
"schema": {
@@ -83289,6 +83301,26 @@
@@ -83289,6 +83301,26 @@
"maxLength": 1000
"maxLength": 1000
}
}
}
}
+ },
+ "actor_ref": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "step_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "description": "The OpenVibe.Actor task and step that started this coding task, when it came from Actor."
}
}
}
}
}
}
@@ -86962,6 +86994,573 @@
@@ -86962,6 +86994,573 @@
}
}
}
}
}
}
+ },
+ "bench.kind": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/kind.v1.json",
+ "title": "BenchKind",
+ "description": "bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "room",
+ "entry",
+ "judge",
+ "name",
+ "schema",
+ "metrics",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "room": {
+ "type": "string"
+ },
+ "entry": {
+ "type": "string"
+ },
+ "judge": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "schema": {
+ "type": "object"
+ },
+ "metrics": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "bench.task": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/task.v1.json",
+ "title": "BenchTask",
+ "description": "bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "kind_id",
+ "prompt",
+ "public",
+ "created_by",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "task_class": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "created_by": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "bench.round": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/round.v1.json",
+ "title": "BenchRound",
+ "description": "bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "task_id",
+ "kind_id",
+ "offers",
+ "status",
+ "seed",
+ "created_by",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "task_id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "offers": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "ready",
+ "finished",
+ "failed"
+ ]
+ },
+ "seed": {
+ "type": "integer"
+ },
+ "pool_fallback": {
+ "type": "boolean"
+ },
+ "receipt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "created_by": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "bench.entry": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/entry.v1.json",
+ "title": "BenchEntry",
+ "description": "bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "round_id",
+ "provider",
+ "model",
+ "route",
+ "payload",
+ "cost_usd",
+ "ms",
+ "tokens"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "round_id": {
+ "type": "string"
+ },
+ "provider": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "route": {
+ "type": "object"
+ },
+ "payload": {
+ "type": "object"
+ },
+ "cost_usd": {
+ "type": "number"
+ },
+ "ms": {
+ "type": "number"
+ },
+ "tokens": {
+ "type": "number"
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "ui_check": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "run_id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ }
+ },
+ "bench.judgement": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/judgement.v1.json",
+ "title": "BenchJudgement",
+ "description": "bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "round_id",
+ "kind_id",
+ "judge",
+ "method",
+ "pair",
+ "outcome",
+ "score",
+ "at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "round_id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "judge": {
+ "type": "string"
+ },
+ "judge_name": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "judge_version": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "method": {
+ "type": "string"
+ },
+ "pair": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "outcome": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "score": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "bench.rating": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/bench/rating.v1.json",
+ "title": "BenchRating",
+ "description": "bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind_id",
+ "category",
+ "subject",
+ "elo",
+ "games",
+ "wins",
+ "losses",
+ "ties",
+ "win_rate",
+ "ci_lower",
+ "ci_upper"
+ ],
+ "properties": {
+ "kind_id": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "subject": {
+ "type": "string"
+ },
+ "elo": {
+ "type": "number"
+ },
+ "games": {
+ "type": "number"
+ },
+ "wins": {
+ "type": "number"
+ },
+ "losses": {
+ "type": "number"
+ },
+ "ties": {
+ "type": "number"
+ },
+ "win_rate": {
+ "type": "number"
+ },
+ "ci_lower": {
+ "type": "number"
+ },
+ "ci_upper": {
+ "type": "number"
+ },
+ "median_cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "median_ms": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "provisional": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "bench.round.finished": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/bench.round.finished.v1.json",
+ "title": "BenchRoundFinishedPayload",
+ "description": "bench.round.finished v1 (OpenVibe.Bench): a pinned round reached finished with at least two usable entries and is ready for judgements. Envelope: source bench, subject { type: user, id: <created_by> }, visibility first-party.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "round_id",
+ "task_id",
+ "kind_id",
+ "status",
+ "entries",
+ "finished_at"
+ ],
+ "properties": {
+ "round_id": {
+ "type": "string"
+ },
+ "task_id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "status": {
+ "const": "finished"
+ },
+ "entries": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "finished_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "bench.judgement.recorded": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/bench.judgement.recorded.v1.json",
+ "title": "BenchJudgementRecordedPayload",
+ "description": "bench.judgement.recorded v1 (OpenVibe.Bench): a judgement was cast on a round. Envelope: source bench, subject { type: user, id: <judge> } or { type: service, id: <judge> }, visibility first-party.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "round_id",
+ "kind_id",
+ "judge",
+ "method",
+ "at"
+ ],
+ "properties": {
+ "round_id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "judge": {
+ "type": "string"
+ },
+ "judge_name": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "method": {
+ "type": "string"
+ },
+ "outcome": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "score": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "bench.rating.changed": {
+ "version": "1.0.0",
+ "owner": "bench",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/bench.rating.changed.v1.json",
+ "title": "BenchRatingChangedPayload",
+ "description": "bench.rating.changed v1 (OpenVibe.Bench): a rating moved on a benchmark board. Envelope: source bench, subject { type: service, id: bench }, visibility first-party.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind_id",
+ "category",
+ "subject",
+ "elo",
+ "games",
+ "win_rate",
+ "at"
+ ],
+ "properties": {
+ "kind_id": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "subject": {
+ "type": "string"
+ },
+ "elo": {
+ "type": "number"
+ },
+ "games": {
+ "type": "number"
+ },
+ "wins": {
+ "type": "number"
+ },
+ "losses": {
+ "type": "number"
+ },
+ "ties": {
+ "type": "number"
+ },
+ "win_rate": {
+ "type": "number"
+ },
+ "ci_lower": {
+ "type": "number"
+ },
+ "ci_upper": {
+ "type": "number"
+ },
+ "median_cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "median_ms": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "provisional": {
+ "type": "boolean"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
new file mode 100644
new file mode 100644
@@ -0,0 +1,1101 @@
@@ -0,0 +1,1101 @@
+{
+ "openapi": "3.1.0",
+ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
+ "info": {
+ "title": "OpenVibe.Bench API",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "license": {
+ "name": "MIT",
+ "identifier": "MIT"
+ }
+ },
+ "servers": [
+ {
+ "url": "https://bench.openvibe.services"
+ }
+ ],
+ "paths": {
+ "/api/v1/boards/{kindId}": {
+ "get": {
+ "operationId": "get_api_v1_boards_kindId",
+ "summary": "Read a benchmark board on OpenVibe.Bench: GET /api/v1/boards/:kindId?type=elo|pareto|cost returns the rendered board for a kind.",
+ "description": "**bench.board.read** (first-party): Read a benchmark board on OpenVibe.Bench: GET /api/v1/boards/:kindId?type=elo|pareto|cost returns the rendered board for a kind.",
+ "tags": [
+ "bench.board"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.board.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.board.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "kindId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.rating.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/datasets/{kindId}.jsonl": {
+ "get": {
+ "operationId": "get_api_v1_datasets_kindId_jsonl",
+ "summary": "Read the open dataset for a benchmark kind on OpenVibe.Bench: GET /api/v1/datasets/:kindId.jsonl returns prompts, entries, judgements without voter ids and ratings as JSON lines.",
+ "description": "**bench.dataset.read** (first-party): Read the open dataset for a benchmark kind on OpenVibe.Bench: GET /api/v1/datasets/:kindId.jsonl returns prompts, entries, judgements without voter ids and ratings as JSON lines.",
+ "tags": [
+ "bench.dataset"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.dataset.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.dataset.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "kindId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/octet-stream": {
+ "schema": {
+ "type": "string",
+ "contentEncoding": "binary"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/evals": {
+ "post": {
+ "operationId": "post_api_v1_evals",
+ "summary": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eva",
+ "description": "**bench.eval.manage** (first-party): Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",
+ "tags": [
+ "bench.eval"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.eval.manage"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.eval.manage"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.task.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/evals/{id}/results": {
+ "get": {
+ "operationId": "get_api_v1_evals_id_results",
+ "summary": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eva",
+ "description": "**bench.eval.manage** (first-party): Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",
+ "tags": [
+ "bench.eval"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.eval.manage"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.eval.manage"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.task.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/evals/{id}/run": {
+ "post": {
+ "operationId": "post_api_v1_evals_id_run",
+ "summary": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eva",
+ "description": "**bench.eval.manage** (first-party): Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",
+ "tags": [
+ "bench.eval"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.eval.manage"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.eval.manage"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.task.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/kinds": {
+ "get": {
+ "operationId": "get_api_v1_kinds",
+ "summary": "Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics.",
+ "description": "**bench.kind.read** (first-party): Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics. Granted to rooms and developer services that render a kind or its board.",
+ "tags": [
+ "bench.kind"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.kind.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.kind.read"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.kind.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/kinds/{kindId}": {
+ "get": {
+ "operationId": "get_api_v1_kinds_kindId",
+ "summary": "Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics.",
+ "description": "**bench.kind.read** (first-party): Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics. Granted to rooms and developer services that render a kind or its board.",
+ "tags": [
+ "bench.kind"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.kind.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.kind.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "kindId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.kind.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/kinds/{kindId}/tasks": {
+ "post": {
+ "operationId": "post_api_v1_kinds_kindId_tasks",
+ "summary": "Create a benchmark task in a kind on OpenVibe.Bench: POST /api/v1/kinds/:kindId/tasks with { prompt, task_class?, public?",
+ "description": "**bench.task.create** (first-party): Create a benchmark task in a kind on OpenVibe.Bench: POST /api/v1/kinds/:kindId/tasks with { prompt, task_class?, public? }. A room or a person's own token may create a task.",
+ "tags": [
+ "bench.task"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.task.create"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.task.create"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "kindId",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.task.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/rounds/{id}": {
+ "get": {
+ "operationId": "get_api_v1_rounds_id",
+ "summary": "Read a benchmark round on OpenVibe.Bench: GET /api/v1/rounds/:id returns the round with entries; entries stay blind until the caller has judged or started the round.",
+ "description": "**bench.round.read** (first-party): Read a benchmark round on OpenVibe.Bench: GET /api/v1/rounds/:id returns the round with entries; entries stay blind until the caller has judged or started the round.",
+ "tags": [
+ "bench.round"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.round.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.round.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.round.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/rounds/{id}/entries": {
+ "post": {
+ "operationId": "post_api_v1_rounds_id_entries",
+ "summary": "Submit an outside entry to a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/entries with a service token.",
+ "description": "**bench.entry.create** (first-party): Submit an outside entry to a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/entries with a service token. A room submits a game match, a test-suite run or another room's result.",
+ "tags": [
+ "bench.entry"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.entry.create"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.entry.create"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.entry.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/rounds/{id}/judgements": {
+ "post": {
+ "operationId": "post_api_v1_rounds_id_judgements",
+ "summary": "Cast a blind judgement on a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/judgements with { judge?, pair?, outcome?, score?",
+ "description": "**bench.judgement.cast** (first-party): Cast a blind judgement on a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/judgements with { judge?, pair?, outcome?, score? }. Human judges are people; automatic, test-suite and game-outcome judges are services.",
+ "tags": [
+ "bench.judgement"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.judgement.cast"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.judgement.cast"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.judgement.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tasks/{id}/rounds": {
+ "post": {
+ "operationId": "post_api_v1_tasks_id_rounds",
+ "summary": "Pin a reproducible benchmark round on OpenVibe.Bench: POST /api/v1/tasks/:id/rounds with { offers?, seed?",
+ "description": "**bench.round.create** (first-party): Pin a reproducible benchmark round on OpenVibe.Bench: POST /api/v1/tasks/:id/rounds with { offers?, seed? }. The round's job generates entries from the exact offers and seed.",
+ "tags": [
+ "bench.round"
+ ],
+ "x-openvibe-capabilities": [
+ "bench.round.create"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "bench.round.create"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/bench.round.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "bench.entry.v1": {
+ "title": "BenchEntry",
+ "description": "bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "round_id",
+ "provider",
+ "model",
+ "route",
+ "payload",
+ "cost_usd",
+ "ms",
+ "tokens"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "round_id": {
+ "type": "string"
+ },
+ "provider": {
+ "type": "string"
+ },
+ "model": {
+ "type": "string"
+ },
+ "route": {
+ "type": "object"
+ },
+ "payload": {
+ "type": "object"
+ },
+ "cost_usd": {
+ "type": "number"
+ },
+ "ms": {
+ "type": "number"
+ },
+ "tokens": {
+ "type": "number"
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "ui_check": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "run_id": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ }
+ },
+ "bench.judgement.v1": {
+ "title": "BenchJudgement",
+ "description": "bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "round_id",
+ "kind_id",
+ "judge",
+ "method",
+ "pair",
+ "outcome",
+ "score",
+ "at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "round_id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "judge": {
+ "type": "string"
+ },
+ "judge_name": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "judge_version": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "method": {
+ "type": "string"
+ },
+ "pair": {
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "outcome": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "score": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "bench.kind.v1": {
+ "title": "BenchKind",
+ "description": "bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "room",
+ "entry",
+ "judge",
+ "name",
+ "schema",
+ "metrics",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "room": {
+ "type": "string"
+ },
+ "entry": {
+ "type": "string"
+ },
+ "judge": {
+ "type": "string"
+ },
+ "name": {
+ "type": "string"
+ },
+ "schema": {
+ "type": "object"
+ },
+ "metrics": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "bench.rating.v1": {
+ "title": "BenchRating",
+ "description": "bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "kind_id",
+ "category",
+ "subject",
+ "elo",
+ "games",
+ "wins",
+ "losses",
+ "ties",
+ "win_rate",
+ "ci_lower",
+ "ci_upper"
+ ],
+ "properties": {
+ "kind_id": {
+ "type": "string"
+ },
+ "category": {
+ "type": "string"
+ },
+ "subject": {
+ "type": "string"
+ },
+ "elo": {
+ "type": "number"
+ },
+ "games": {
+ "type": "number"
+ },
+ "wins": {
+ "type": "number"
+ },
+ "losses": {
+ "type": "number"
+ },
+ "ties": {
+ "type": "number"
+ },
+ "win_rate": {
+ "type": "number"
+ },
+ "ci_lower": {
+ "type": "number"
+ },
+ "ci_upper": {
+ "type": "number"
+ },
+ "median_cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "median_ms": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "provisional": {
+ "type": "boolean"
+ }
+ }
+ },
+ "bench.round.v1": {
+ "title": "BenchRound",
+ "description": "bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "task_id",
+ "kind_id",
+ "offers",
+ "status",
+ "seed",
+ "created_by",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "task_id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "offers": {
+ "type": "array",
+ "items": {
+ "type": "object"
+ }
+ },
+ "status": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "ready",
+ "finished",
+ "failed"
+ ]
+ },
+ "seed": {
+ "type": "integer"
+ },
+ "pool_fallback": {
+ "type": "boolean"
+ },
+ "receipt": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "created_by": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "bench.task.v1": {
+ "title": "BenchTask",
+ "description": "bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "kind_id",
+ "prompt",
+ "public",
+ "created_by",
+ "created_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "kind_id": {
+ "type": "string"
+ },
+ "prompt": {
+ "type": "string"
+ },
+ "task_class": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "public": {
+ "type": "boolean"
+ },
+ "created_by": {
+ "type": "string"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "errors.problem.v1": {
+ "title": "Problem",
+ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",
+ "type": "object",
+ "required": [
+ "type",
+ "title",
+ "status",
+ "code"
+ ],
+ "additionalProperties": true,
+ "properties": {
+ "type": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1
+ },
+ "status": {
+ "type": "integer",
+ "minimum": 400,
+ "maximum": 599
+ },
+ "detail": {
+ "type": "string"
+ },
+ "instance": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "code": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"
+ },
+ "request_id": {
+ "type": "string"
+ },
+ "trace_id": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{32}$"
+ },
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "error": {
+ "type": "string",
+ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."
+ }
+ }
+ }
+ },
+ "securitySchemes": {
+ "openvibeToken": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "JWT",
+ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."
+ }
+ }
+ }
+}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -281,6 +281,18 @@
@@ -281,6 +281,18 @@
"minLength": 8,
"minLength": 8,
"maxLength": 128,
"maxLength": 128,
"pattern": "^[A-Za-z0-9_.:-]+$"
"pattern": "^[A-Za-z0-9_.:-]+$"
+ },
+ "actor_task_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "description": "The OpenVibe.Actor task id when this coding task was started from Actor."
+ },
+ "actor_step_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256,
+ "description": "The OpenVibe.Actor step id when this coding task was started from Actor."
}
}
}
}
},
},
@@ -476,6 +488,26 @@
@@ -476,6 +488,26 @@
"maxLength": 1000
"maxLength": 1000
}
}
}
}
+ },
+ "actor_ref": {
+ "type": [
+ "object",
+ "null"
+ ],
+ "additionalProperties": false,
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ },
+ "step_id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 256
+ }
+ },
+ "description": "The OpenVibe.Actor task and step that started this coding task, when it came from Actor."
}
}
}
}
},
},
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -15,6 +15,13 @@
@@ -15,6 +15,13 @@
"operations": 44,
"operations": 44,
"capabilities": 9
"capabilities": 9
},
},
+ {
+ "service": "bench",
+ "name": "OpenVibe.Bench",
+ "origin": "https://bench.openvibe.services",
+ "operations": 12,
+ "capabilities": 9
+ },
{
{
"service": "billing",
"service": "billing",
"name": "OpenVibe.Billing",
"name": "OpenVibe.Billing",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.237.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.237.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.237.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.238.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.238.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -211214,7 +211214,7 @@ export type VideoPlaylistManageResult =
@@ -211214,7 +211214,7 @@ export type VideoPlaylistManageResult =
}[];
}[];
};
};
-/** [email protected] (owner: codes) */
+/** [email protected] (owner: codes) */
/**
/**
* codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).
* codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).
*/
*/
@@ -211227,6 +211227,14 @@ export interface CodesTaskStartRequest {
@@ -211227,6 +211227,14 @@ export interface CodesTaskStartRequest {
push?: boolean;
push?: boolean;
pull_request?: boolean;
pull_request?: boolean;
idempotency_key?: string;
idempotency_key?: string;
+ /**
+ * The OpenVibe.Actor task id when this coding task was started from Actor.
+ */
+ actor_task_id?: string;
+ /**
+ * The OpenVibe.Actor step id when this coding task was started from Actor.
+ */
+ actor_step_id?: string;
}
}
/** [email protected] (owner: codes) */
/** [email protected] (owner: codes) */
@@ -211238,7 +211246,7 @@ export interface CodesTaskStartResult {
@@ -211238,7 +211246,7 @@ export interface CodesTaskStartResult {
created: boolean;
created: boolean;
}
}
-/** [email protected] (owner: codes) */
+/** [email protected] (owner: codes) */
/**
/**
* codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).
* codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).
*/
*/
@@ -211416,6 +211424,13 @@ export interface CodesTask {
@@ -211416,6 +211424,13 @@ export interface CodesTask {
duration_ms?: number;
duration_ms?: number;
error?: string;
error?: string;
};
};
+ /**
+ * The OpenVibe.Actor task and step that started this coding task, when it came from Actor.
+ */
+ actor_ref?: {
+ task_id?: string;
+ step_id?: string;
+ } | null;
}
}
/** [email protected] (owner: play) */
/** [email protected] (owner: play) */
@@ -213411,3 +213426,157 @@ export interface VisionUiCheckResult {
@@ -213411,3 +213426,157 @@ export interface VisionUiCheckResult {
created_at: string;
created_at: string;
};
};
}
}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.kind@1: a benchmark kind on OpenVibe.Bench. ROOM is the room that owns the kind, ENTRY the shape a submitted entry takes, JUDGE the default judge (pair, rubric, automatic_grader, test_suite or game_outcome), NAME the display name, SCHEMA the entry JSON Schema, and METRICS the board metrics (elo, pareto, cost, or a room's own).
+ */
+export interface BenchKind {
+ id: string;
+ room: string;
+ entry: string;
+ judge: string;
+ name: string;
+ schema: {};
+ metrics: string[];
+ created_at: string;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.task@1: a benchmark task on OpenVibe.Bench. KIND_ID names the kind; PROMPT is the task; TASK_CLASS is an optional classifier for grouping; PUBLIC says whether the task may appear in the open dataset.
+ */
+export interface BenchTask {
+ id: string;
+ kind_id: string;
+ prompt: string;
+ task_class?: string | null;
+ public: boolean;
+ created_by: string;
+ created_at: string;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.round@1: a pinned, reproducible benchmark round on OpenVibe.Bench. TASK_ID names the task; OFFERS are the exact offers (provider, model, route) the round runs; STATUS follows queued, running, ready, finished or failed; SEED and RECEIPT make the round reproducible.
+ */
+export interface BenchRound {
+ id: string;
+ task_id: string;
+ kind_id: string;
+ offers: {}[];
+ status: "queued" | "running" | "ready" | "finished" | "failed";
+ seed: number;
+ pool_fallback?: boolean;
+ receipt?: string | null;
+ created_by: string;
+ created_at: string;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.entry@1: one submitted entry in a benchmark round on OpenVibe.Bench. PROVIDER and MODEL name the offer; ROUTE is the exact route taken; PAYLOAD is the entry's output; COST_USD, MS and TOKENS are the measured use.
+ */
+export interface BenchEntry {
+ id: string;
+ round_id: string;
+ provider: string;
+ model: string;
+ route: {};
+ payload: {};
+ cost_usd: number;
+ ms: number;
+ tokens: number;
+ error?: string | null;
+ ui_check?: {} | null;
+ run_id?: string | null;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.judgement@1: a blind judgement cast on a benchmark round on OpenVibe.Bench. JUDGE names the judge (pair, rubric, automatic_grader, test_suite, game_outcome); METHOD is how the pair was decided; PAIR is the two entry ids; OUTCOME and SCORE are the result.
+ */
+export interface BenchJudgement {
+ id: string;
+ round_id: string;
+ kind_id: string;
+ judge: string;
+ judge_name?: string | null;
+ judge_version?: string | null;
+ method: string;
+ pair: {} | null;
+ outcome: string | null;
+ score: number | null;
+ at: string;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.rating@1: a rating on a benchmark board on OpenVibe.Bench. CATEGORY and SUBJECT identify what is rated (a model, a route or a room's own subject); ELO, GAMES, WINS, LOSSES, TIES and WIN_RATE are the score; CI_LOWER and CI_UPPER bound the estimate.
+ */
+export interface BenchRating {
+ kind_id: string;
+ category: string;
+ subject: string;
+ elo: number;
+ games: number;
+ wins: number;
+ losses: number;
+ ties: number;
+ win_rate: number;
+ ci_lower: number;
+ ci_upper: number;
+ median_cost_usd?: number | null;
+ median_ms?: number | null;
+ provisional?: boolean;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.round.finished v1 (OpenVibe.Bench): a pinned round reached finished with at least two usable entries and is ready for judgements. Envelope: source bench, subject { type: user, id: <created_by> }, visibility first-party.
+ */
+export interface BenchRoundFinishedPayload {
+ round_id: string;
+ task_id: string;
+ kind_id: string;
+ status: "finished";
+ entries: number;
+ finished_at: string;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.judgement.recorded v1 (OpenVibe.Bench): a judgement was cast on a round. Envelope: source bench, subject { type: user, id: <judge> } or { type: service, id: <judge> }, visibility first-party.
+ */
+export interface BenchJudgementRecordedPayload {
+ round_id: string;
+ kind_id: string;
+ judge: string;
+ judge_name?: string | null;
+ method: string;
+ outcome?: string | null;
+ score?: number | null;
+ at: string;
+}
+
+/** [email protected] (owner: bench) */
+/**
+ * bench.rating.changed v1 (OpenVibe.Bench): a rating moved on a benchmark board. Envelope: source bench, subject { type: service, id: bench }, visibility first-party.
+ */
+export interface BenchRatingChangedPayload {
+ kind_id: string;
+ category: string;
+ subject: string;
+ elo: number;
+ games: number;
+ wins?: number;
+ losses?: number;
+ ties?: number;
+ win_rate: number;
+ ci_lower?: number;
+ ci_upper?: number;
+ median_cost_usd?: number | null;
+ median_ms?: number | null;
+ provisional?: boolean;
+ at: string;
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.board.read",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read a benchmark board on OpenVibe.Bench: GET /api/v1/boards/:kindId?type=elo|pareto|cost returns the rendered board for a kind.",
+ "permissions": [
+ "bench:boards:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/boards/:kindId"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.rating@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.dataset.read",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read the open dataset for a benchmark kind on OpenVibe.Bench: GET /api/v1/datasets/:kindId.jsonl returns prompts, entries, judgements without voter ids and ratings as JSON lines.",
+ "permissions": [
+ "bench:datasets:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/datasets/:kindId.jsonl"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "common.binary@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.entry.create",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Submit an outside entry to a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/entries with a service token. A room submits a game match, a test-suite run or another room's result.",
+ "permissions": [
+ "bench:entries:create"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/rounds/:id/entries"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.entry@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "id": "bench.eval.manage",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Manage private evals on OpenVibe.Bench: POST /api/v1/evals creates a private task suite, POST /api/v1/evals/:id/run runs it against chosen offers, and GET /api/v1/evals/:id/results reads a private eval and its runs. Never in the public dataset.",
+ "permissions": [
+ "bench:evals:manage"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/evals",
+ "POST /api/v1/evals/:id/run",
+ "GET /api/v1/evals/:id/results"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.task@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.judgement.cast",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Cast a blind judgement on a benchmark round on OpenVibe.Bench: POST /api/v1/rounds/:id/judgements with { judge?, pair?, outcome?, score? }. Human judges are people; automatic, test-suite and game-outcome judges are services.",
+ "permissions": [
+ "bench:judgements:cast"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/rounds/:id/judgements"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.judgement@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "bench.kind.read",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read a benchmark kind on OpenVibe.Bench: GET /api/v1/kinds lists the kinds, GET /api/v1/kinds/:kindId reads one kind and its entry schema and metrics. Granted to rooms and developer services that render a kind or its board.",
+ "permissions": [
+ "bench:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/kinds",
+ "GET /api/v1/kinds/:kindId"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.kind@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.round.create",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Pin a reproducible benchmark round on OpenVibe.Bench: POST /api/v1/tasks/:id/rounds with { offers?, seed? }. The round's job generates entries from the exact offers and seed.",
+ "permissions": [
+ "bench:rounds:create"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/tasks/:id/rounds"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.round@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.round.read",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read a benchmark round on OpenVibe.Bench: GET /api/v1/rounds/:id returns the round with entries; entries stay blind until the caller has judged or started the round.",
+ "permissions": [
+ "bench:rounds:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/rounds/:id"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.round@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "bench.task.create",
+ "version": "1.0",
+ "owner": "bench",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Create a benchmark task in a kind on OpenVibe.Bench: POST /api/v1/kinds/:kindId/tasks with { prompt, task_class?, public? }. A room or a person's own token may create a task.",
+ "permissions": [
+ "bench:tasks:create"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/kinds/:kindId/tasks"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "bench.task@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,105 @@
@@ -0,0 +1,105 @@
+{
+ "version": "0.1.0",
+ "contractRanges": {
+ "openvibe-contracts": ">=0.238.0 <1.0.0"
+ },
+ "id": "bench",
+ "name": "OpenVibe.Bench",
+ "status": "alpha",
+ "repository": "OpenVibers/OpenVibe.Bench",
+ "domains": [
+ "bench.openvibe.services"
+ ],
+ "publicOrigin": "https://bench.openvibe.services",
+ "health": "/api/health",
+ "ready": "/api/ready",
+ "internalOrigin": "http://127.0.0.1:5230",
+ "exposure": {
+ "state": "live",
+ "publicSite": "service",
+ "note": "the public home, /docs and the bench.* API at bench.openvibe.services since 2026-10-28; services on the host call 127.0.0.1:5230"
+ },
+ "capabilities": [
+ "bench.kind.read",
+ "bench.task.create",
+ "bench.round.create",
+ "bench.round.read",
+ "bench.entry.create",
+ "bench.judgement.cast",
+ "bench.board.read",
+ "bench.dataset.read",
+ "bench.eval.manage"
+ ],
+ "eventsProduced": [
+ "bench.round.finished",
+ "bench.judgement.recorded",
+ "bench.rating.changed"
+ ],
+ "eventsConsumed": [
+ "network.account.export_requested",
+ "network.account.deleted"
+ ],
+ "namespacesOwned": [
+ "bench.*"
+ ],
+ "lifecycle": {
+ "liveness": {
+ "endpoint": "/api/health",
+ "means": "the process is up and answers HTTP; it checks nothing else (the database and dependencies are what ready checks)"
+ },
+ "shutdown": {
+ "signal": "SIGTERM",
+ "deadlineSeconds": 10,
+ "drains": [
+ "timers cleared",
+ "JWKS key refresher stopped",
+ "round and private-eval jobs stopped",
+ "outbox publisher stopped (its send in progress awaited; unsent rows stay for the next start)",
+ "telemetry buffer flushed and its retention timer stopped",
+ "open HTTP connections closed, then the server",
+ "database pool closed"
+ ]
+ },
+ "startupRecovery": {
+ "resumes": [
+ {
+ "kind": "jobs",
+ "what": "rounds and private eval runs left queued or running are marked failed at boot; the caller retries them"
+ },
+ {
+ "kind": "outbox",
+ "what": "unsent bench.round.finished, bench.judgement.recorded and bench.rating.changed events in the outbox go to OpenVibe.Events once the publisher starts"
+ },
+ {
+ "kind": "consumer",
+ "what": "OpenVibe.Events redelivers network.account.export_requested and network.account.deleted that were pending during the stop; account_data_events applies each once"
+ }
+ ]
+ },
+ "rollback": {
+ "conditions": [
+ "automatic: ovhost deploy puts the previous sha back and restarts again when the ready URL does not answer 2xx within ready.timeoutSeconds after the restart (exit 3)",
+ "manual: ovhost rollback <service> --to <sha>"
+ ],
+ "window": "automatic only while ovhost waits for readiness after the restart (30 s in host.example.json); manual afterwards, as long as no blocker applies",
+ "blockers": {
+ "none": "the schema code only adds (CREATE … IF NOT EXISTS, ADD COLUMN; no DROP, RENAME or table rebuild), which an older release ignores"
+ }
+ },
+ "contracts": {
+ "range": ">=0.238.0 <1.0.0"
+ },
+ "leases": {
+ "none": "no claims: one process owns its PostgreSQL database (ov_bench); a round is taken with a compare-and-set on its status (queued → running)"
+ }
+ },
+ "notes": "Port 5230, unit openvibe-bench.service, database ov_bench. The shared AI benchmark and comparison engine (plan 2026-10-28 §4.12): kinds, pinned rounds, entries, blind judgements, ratings, boards, the open dataset and private evals. AI stays the run authority, Report the analytics authority. Bench answers account export and deletion (ADR-033) and subscribes to the two account Events topics. It calls AI's run API (ai.run.create, namespace ai.generate) for generation and publishes bench.* events through its outbox.",
+ "site": {
+ "name": "Bench",
+ "icon": "bench",
+ "tagline": "One AI benchmark and comparison engine for every room.",
+ "what": "The shared AI benchmark and comparison engine: kinds, pinned rounds, blind judgements, elo/pareto/cost boards, an open dataset per kind and private evals.",
+ "legalProfile": "tools",
+ "position": 47
+ }
+}
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.237.0",
+ "version": "0.238.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",