openvibers/openvibe.contracts Commits

0.232.0: codes.task.queued|running|succeeded|failed|cancelled; the Codes manifest names run.job.* and the account events it consumes (#240)

OP OpenVibers committed 16 days ago · 5f04436578 · 68 files, +1045 −78

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 9768db3a..48a23bc1 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,16 @@ 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,
the notes were in the tag and commit messages (`git tag -n1`).
++## 0.232.0 — 2026-10-28
++
++- **codes.task.queued|running|succeeded|failed|cancelled** (new payload contracts, first-party, owner `codes`; plan
++ 2026-10-28 §6, decisions 2 and 3). OpenVibe.Codes announces each state change of a coding task:
++ `{ task_id, state, agent, repo, cost_usd, files_changed, started_at, finished_at, error }`. The envelope's subject
++ is the owner; the prompt is never in a payload.
++- The Codes manifest now names what it produces (the five topics) and consumes: `run.job.*`, which finalize a task
++ without polling, and the two account events. Its notes and startup recovery cover the session lines and the
++ outbox.
++
## 0.231.0 — 2026-10-28
- **OpenVibe.Surf** (`surf`, live at openvibe.surf, port 5110; plan 2026-10-28 §5.6, the Surf room). One room, three
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex bac4c24a..81d2dba5 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -7649,6 +7649,51 @@
"visibility": "first-party",
"compatibility": "backward",
"status": "active"
++ },
++ {
++ "id": "codes.task.queued",
++ "version": "1.0.0",
++ "owner": "codes",
++ "schema": "events/payloads/codes.task.queued.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "codes.task.running",
++ "version": "1.0.0",
++ "owner": "codes",
++ "schema": "events/payloads/codes.task.running.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "codes.task.succeeded",
++ "version": "1.0.0",
++ "owner": "codes",
++ "schema": "events/payloads/codes.task.succeeded.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "codes.task.failed",
++ "version": "1.0.0",
++ "owner": "codes",
++ "schema": "events/payloads/codes.task.failed.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "codes.task.cancelled",
++ "version": "1.0.0",
++ "owner": "codes",
++ "schema": "events/payloads/codes.task.cancelled.v1.json",
++ "visibility": "first-party",
++ "compatibility": "backward",
++ "status": "active"
}
]
}
ddiff --git a/contracts/events/payloads/codes.task.cancelled.v1.json b/contracts/events/payloads/codes.task.cancelled.v1.json
nnew file mode 100644
iindex 00000000..a372a629
---- /dev/null
++++ b/contracts/events/payloads/codes.task.cancelled.v1.json
@@@ -0,0 +1,26 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.cancelled.v1.json",
++ "title": "CodesTaskCancelledPayload",
++ "description": "codes.task.cancelled v1 (OpenVibe.Codes): the task ended cancelled, by its owner or by a service holding codes.task.cancel. Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["task_id", "state", "agent", "repo", "cost_usd", "files_changed", "started_at", "finished_at", "error"],
++ "properties": {
++ "task_id": { "type": "string", "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "state": { "const": "cancelled" },
++ "agent": { "type": ["string", "null"], "maxLength": 80 },
++ "repo": {
++ "anyOf": [
++ { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$", "maxLength": 300 },
++ { "type": "null" }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": { "type": ["number", "null"], "minimum": 0 },
++ "files_changed": { "type": ["integer", "null"], "minimum": 0 },
++ "started_at": { "type": ["string", "null"], "format": "date-time" },
++ "finished_at": { "type": ["string", "null"], "format": "date-time" },
++ "error": { "type": ["string", "null"], "maxLength": 500 }
++ }
++}
ddiff --git a/contracts/events/payloads/codes.task.failed.v1.json b/contracts/events/payloads/codes.task.failed.v1.json
nnew file mode 100644
iindex 00000000..18ab6c5e
---- /dev/null
++++ b/contracts/events/payloads/codes.task.failed.v1.json
@@@ -0,0 +1,26 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.failed.v1.json",
++ "title": "CodesTaskFailedPayload",
++ "description": "codes.task.failed v1 (OpenVibe.Codes): the task ended failed, or expired because no machine took it in time (Run's expired state is announced on the failed topic). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["task_id", "state", "agent", "repo", "cost_usd", "files_changed", "started_at", "finished_at", "error"],
++ "properties": {
++ "task_id": { "type": "string", "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "state": { "enum": ["failed", "expired"] },
++ "agent": { "type": ["string", "null"], "maxLength": 80 },
++ "repo": {
++ "anyOf": [
++ { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$", "maxLength": 300 },
++ { "type": "null" }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": { "type": ["number", "null"], "minimum": 0 },
++ "files_changed": { "type": ["integer", "null"], "minimum": 0 },
++ "started_at": { "type": ["string", "null"], "format": "date-time" },
++ "finished_at": { "type": ["string", "null"], "format": "date-time" },
++ "error": { "type": ["string", "null"], "maxLength": 500 }
++ }
++}
ddiff --git a/contracts/events/payloads/codes.task.queued.v1.json b/contracts/events/payloads/codes.task.queued.v1.json
nnew file mode 100644
iindex 00000000..8470ebd8
---- /dev/null
++++ b/contracts/events/payloads/codes.task.queued.v1.json
@@@ -0,0 +1,26 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.queued.v1.json",
++ "title": "CodesTaskQueuedPayload",
++ "description": "codes.task.queued v1 (OpenVibe.Codes): a coding task was stored and handed to OpenVibe.Run; the person's machine has not started it. Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["task_id", "state", "agent", "repo", "cost_usd", "files_changed", "started_at", "finished_at", "error"],
++ "properties": {
++ "task_id": { "type": "string", "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "state": { "const": "queued" },
++ "agent": { "type": ["string", "null"], "maxLength": 80 },
++ "repo": {
++ "anyOf": [
++ { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$", "maxLength": 300 },
++ { "type": "null" }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": { "type": ["number", "null"], "minimum": 0 },
++ "files_changed": { "type": ["integer", "null"], "minimum": 0 },
++ "started_at": { "type": ["string", "null"], "format": "date-time" },
++ "finished_at": { "type": ["string", "null"], "format": "date-time" },
++ "error": { "type": ["string", "null"], "maxLength": 500 }
++ }
++}
ddiff --git a/contracts/events/payloads/codes.task.running.v1.json b/contracts/events/payloads/codes.task.running.v1.json
nnew file mode 100644
iindex 00000000..814fd1e3
---- /dev/null
++++ b/contracts/events/payloads/codes.task.running.v1.json
@@@ -0,0 +1,26 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.running.v1.json",
++ "title": "CodesTaskRunningPayload",
++ "description": "codes.task.running v1 (OpenVibe.Codes): Run placed or started the task on the person's machine (both task states placed and running announce as running). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["task_id", "state", "agent", "repo", "cost_usd", "files_changed", "started_at", "finished_at", "error"],
++ "properties": {
++ "task_id": { "type": "string", "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "state": { "const": "running" },
++ "agent": { "type": ["string", "null"], "maxLength": 80 },
++ "repo": {
++ "anyOf": [
++ { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$", "maxLength": 300 },
++ { "type": "null" }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": { "type": ["number", "null"], "minimum": 0 },
++ "files_changed": { "type": ["integer", "null"], "minimum": 0 },
++ "started_at": { "type": ["string", "null"], "format": "date-time" },
++ "finished_at": { "type": ["string", "null"], "format": "date-time" },
++ "error": { "type": ["string", "null"], "maxLength": 500 }
++ }
++}
ddiff --git a/contracts/events/payloads/codes.task.succeeded.v1.json b/contracts/events/payloads/codes.task.succeeded.v1.json
nnew file mode 100644
iindex 00000000..cb8411a4
---- /dev/null
++++ b/contracts/events/payloads/codes.task.succeeded.v1.json
@@@ -0,0 +1,26 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.succeeded.v1.json",
++ "title": "CodesTaskSucceededPayload",
++ "description": "codes.task.succeeded v1 (OpenVibe.Codes): the task ended and its result is stored on the task page. cost_usd and files_changed are the machine's result (null when it returned neither). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": ["task_id", "state", "agent", "repo", "cost_usd", "files_changed", "started_at", "finished_at", "error"],
++ "properties": {
++ "task_id": { "type": "string", "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$" },
++ "state": { "const": "succeeded" },
++ "agent": { "type": ["string", "null"], "maxLength": 80 },
++ "repo": {
++ "anyOf": [
++ { "type": "string", "pattern": "^[^/\\s]+/[^/\\s]+$", "maxLength": 300 },
++ { "type": "null" }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": { "type": ["number", "null"], "minimum": 0 },
++ "files_changed": { "type": ["integer", "null"], "minimum": 0 },
++ "started_at": { "type": ["string", "null"], "format": "date-time" },
++ "finished_at": { "type": ["string", "null"], "format": "date-time" },
++ "error": { "type": ["string", "null"], "maxLength": 500 }
++ }
++}
ddiff --git a/fixtures/codes.task.cancelled/invalid/prompt-in-payload.json b/fixtures/codes.task.cancelled/invalid/prompt-in-payload.json
nnew file mode 100644
iindex 00000000..c831b6b4
---- /dev/null
++++ b/fixtures/codes.task.cancelled/invalid/prompt-in-payload.json
@@@ -0,0 +1,12 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "cancelled",
++ "prompt": "fix the login bug"
++}
ddiff --git a/fixtures/codes.task.cancelled/invalid/task-id.json b/fixtures/codes.task.cancelled/invalid/task-id.json
nnew file mode 100644
iindex 00000000..ff8468a7
---- /dev/null
++++ b/fixtures/codes.task.cancelled/invalid/task-id.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "job_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "cancelled"
++}
ddiff --git a/fixtures/codes.task.cancelled/valid/no-repo.json b/fixtures/codes.task.cancelled/valid/no-repo.json
nnew file mode 100644
iindex 00000000..1d429a3e
---- /dev/null
++++ b/fixtures/codes.task.cancelled/valid/no-repo.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": null,
++ "repo": null,
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "cancelled"
++}
ddiff --git a/fixtures/codes.task.cancelled/valid/task.json b/fixtures/codes.task.cancelled/valid/task.json
nnew file mode 100644
iindex 00000000..54a0c8bd
---- /dev/null
++++ b/fixtures/codes.task.cancelled/valid/task.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "cancelled"
++}
ddiff --git a/fixtures/codes.task.failed/invalid/prompt-in-payload.json b/fixtures/codes.task.failed/invalid/prompt-in-payload.json
nnew file mode 100644
iindex 00000000..cfd7550d
---- /dev/null
++++ b/fixtures/codes.task.failed/invalid/prompt-in-payload.json
@@@ -0,0 +1,12 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": "the machine stopped answering",
++ "state": "failed",
++ "prompt": "fix the login bug"
++}
ddiff --git a/fixtures/codes.task.failed/invalid/task-id.json b/fixtures/codes.task.failed/invalid/task-id.json
nnew file mode 100644
iindex 00000000..c3847174
---- /dev/null
++++ b/fixtures/codes.task.failed/invalid/task-id.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "job_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": "the machine stopped answering",
++ "state": "failed"
++}
ddiff --git a/fixtures/codes.task.failed/valid/no-repo.json b/fixtures/codes.task.failed/valid/no-repo.json
nnew file mode 100644
iindex 00000000..c3066dfd
---- /dev/null
++++ b/fixtures/codes.task.failed/valid/no-repo.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": null,
++ "repo": null,
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": "the machine stopped answering",
++ "state": "failed"
++}
ddiff --git a/fixtures/codes.task.failed/valid/task.json b/fixtures/codes.task.failed/valid/task.json
nnew file mode 100644
iindex 00000000..9c76097e
---- /dev/null
++++ b/fixtures/codes.task.failed/valid/task.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": "the machine stopped answering",
++ "state": "failed"
++}
ddiff --git a/fixtures/codes.task.queued/invalid/prompt-in-payload.json b/fixtures/codes.task.queued/invalid/prompt-in-payload.json
nnew file mode 100644
iindex 00000000..9a9805d0
---- /dev/null
++++ b/fixtures/codes.task.queued/invalid/prompt-in-payload.json
@@@ -0,0 +1,12 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": null,
++ "finished_at": null,
++ "error": null,
++ "state": "queued",
++ "prompt": "fix the login bug"
++}
ddiff --git a/fixtures/codes.task.queued/invalid/task-id.json b/fixtures/codes.task.queued/invalid/task-id.json
nnew file mode 100644
iindex 00000000..98a15a97
---- /dev/null
++++ b/fixtures/codes.task.queued/invalid/task-id.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "job_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": null,
++ "finished_at": null,
++ "error": null,
++ "state": "queued"
++}
ddiff --git a/fixtures/codes.task.queued/valid/no-repo.json b/fixtures/codes.task.queued/valid/no-repo.json
nnew file mode 100644
iindex 00000000..3b25c742
---- /dev/null
++++ b/fixtures/codes.task.queued/valid/no-repo.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": null,
++ "repo": null,
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": null,
++ "finished_at": null,
++ "error": null,
++ "state": "queued"
++}
ddiff --git a/fixtures/codes.task.queued/valid/task.json b/fixtures/codes.task.queued/valid/task.json
nnew file mode 100644
iindex 00000000..8fb51f41
---- /dev/null
++++ b/fixtures/codes.task.queued/valid/task.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": null,
++ "finished_at": null,
++ "error": null,
++ "state": "queued"
++}
ddiff --git a/fixtures/codes.task.running/invalid/prompt-in-payload.json b/fixtures/codes.task.running/invalid/prompt-in-payload.json
nnew file mode 100644
iindex 00000000..35a703bb
---- /dev/null
++++ b/fixtures/codes.task.running/invalid/prompt-in-payload.json
@@@ -0,0 +1,12 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": null,
++ "error": null,
++ "state": "running",
++ "prompt": "fix the login bug"
++}
ddiff --git a/fixtures/codes.task.running/invalid/task-id.json b/fixtures/codes.task.running/invalid/task-id.json
nnew file mode 100644
iindex 00000000..1c4e24e0
---- /dev/null
++++ b/fixtures/codes.task.running/invalid/task-id.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "job_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": null,
++ "error": null,
++ "state": "running"
++}
ddiff --git a/fixtures/codes.task.running/valid/no-repo.json b/fixtures/codes.task.running/valid/no-repo.json
nnew file mode 100644
iindex 00000000..807a5f93
---- /dev/null
++++ b/fixtures/codes.task.running/valid/no-repo.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": null,
++ "repo": null,
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": null,
++ "error": null,
++ "state": "running"
++}
ddiff --git a/fixtures/codes.task.running/valid/task.json b/fixtures/codes.task.running/valid/task.json
nnew file mode 100644
iindex 00000000..ef76159b
---- /dev/null
++++ b/fixtures/codes.task.running/valid/task.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": null,
++ "files_changed": null,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": null,
++ "error": null,
++ "state": "running"
++}
ddiff --git a/fixtures/codes.task.succeeded/invalid/prompt-in-payload.json b/fixtures/codes.task.succeeded/invalid/prompt-in-payload.json
nnew file mode 100644
iindex 00000000..55f4a95d
---- /dev/null
++++ b/fixtures/codes.task.succeeded/invalid/prompt-in-payload.json
@@@ -0,0 +1,12 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": 0.42,
++ "files_changed": 3,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "succeeded",
++ "prompt": "fix the login bug"
++}
ddiff --git a/fixtures/codes.task.succeeded/invalid/task-id.json b/fixtures/codes.task.succeeded/invalid/task-id.json
nnew file mode 100644
iindex 00000000..1ee02ac8
---- /dev/null
++++ b/fixtures/codes.task.succeeded/invalid/task-id.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "job_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": 0.42,
++ "files_changed": 3,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "succeeded"
++}
ddiff --git a/fixtures/codes.task.succeeded/valid/no-repo.json b/fixtures/codes.task.succeeded/valid/no-repo.json
nnew file mode 100644
iindex 00000000..5cb33c86
---- /dev/null
++++ b/fixtures/codes.task.succeeded/valid/no-repo.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": null,
++ "repo": null,
++ "cost_usd": 0.42,
++ "files_changed": 3,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "succeeded"
++}
ddiff --git a/fixtures/codes.task.succeeded/valid/task.json b/fixtures/codes.task.succeeded/valid/task.json
nnew file mode 100644
iindex 00000000..2a1877fd
---- /dev/null
++++ b/fixtures/codes.task.succeeded/valid/task.json
@@@ -0,0 +1,11 @@
++{
++ "task_id": "tsk_01J8Z3Q4R5S6T7V8W9X0Y1Z2A3",
++ "agent": "claude",
++ "repo": "OpenVibers/OpenVibe.Codes",
++ "cost_usd": 0.42,
++ "files_changed": 3,
++ "started_at": "2026-10-28T16:00:00.000Z",
++ "finished_at": "2026-10-28T16:04:12.000Z",
++ "error": null,
++ "state": "succeeded"
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 1909149e..0b79d7c9 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -85874,6 +85874,449 @@
}
}
}
++ },
++ "codes.task.queued": {
++ "version": "1.0.0",
++ "owner": "codes",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.queued.v1.json",
++ "title": "CodesTaskQueuedPayload",
++ "description": "codes.task.queued v1 (OpenVibe.Codes): a coding task was stored and handed to OpenVibe.Run; the person's machine has not started it. Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "task_id",
++ "state",
++ "agent",
++ "repo",
++ "cost_usd",
++ "files_changed",
++ "started_at",
++ "finished_at",
++ "error"
++ ],
++ "properties": {
++ "task_id": {
++ "type": "string",
++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "state": {
++ "const": "queued"
++ },
++ "agent": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 80
++ },
++ "repo": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^[^/\\s]+/[^/\\s]+$",
++ "maxLength": 300
++ },
++ {
++ "type": "null"
++ }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": {
++ "type": [
++ "number",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "files_changed": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "started_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "finished_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "error": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 500
++ }
++ }
++ }
++ },
++ "codes.task.running": {
++ "version": "1.0.0",
++ "owner": "codes",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.running.v1.json",
++ "title": "CodesTaskRunningPayload",
++ "description": "codes.task.running v1 (OpenVibe.Codes): Run placed or started the task on the person's machine (both task states placed and running announce as running). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "task_id",
++ "state",
++ "agent",
++ "repo",
++ "cost_usd",
++ "files_changed",
++ "started_at",
++ "finished_at",
++ "error"
++ ],
++ "properties": {
++ "task_id": {
++ "type": "string",
++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "state": {
++ "const": "running"
++ },
++ "agent": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 80
++ },
++ "repo": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^[^/\\s]+/[^/\\s]+$",
++ "maxLength": 300
++ },
++ {
++ "type": "null"
++ }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": {
++ "type": [
++ "number",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "files_changed": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "started_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "finished_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "error": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 500
++ }
++ }
++ }
++ },
++ "codes.task.succeeded": {
++ "version": "1.0.0",
++ "owner": "codes",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.succeeded.v1.json",
++ "title": "CodesTaskSucceededPayload",
++ "description": "codes.task.succeeded v1 (OpenVibe.Codes): the task ended and its result is stored on the task page. cost_usd and files_changed are the machine's result (null when it returned neither). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "task_id",
++ "state",
++ "agent",
++ "repo",
++ "cost_usd",
++ "files_changed",
++ "started_at",
++ "finished_at",
++ "error"
++ ],
++ "properties": {
++ "task_id": {
++ "type": "string",
++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "state": {
++ "const": "succeeded"
++ },
++ "agent": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 80
++ },
++ "repo": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^[^/\\s]+/[^/\\s]+$",
++ "maxLength": 300
++ },
++ {
++ "type": "null"
++ }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": {
++ "type": [
++ "number",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "files_changed": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "started_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "finished_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "error": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 500
++ }
++ }
++ }
++ },
++ "codes.task.failed": {
++ "version": "1.0.0",
++ "owner": "codes",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.failed.v1.json",
++ "title": "CodesTaskFailedPayload",
++ "description": "codes.task.failed v1 (OpenVibe.Codes): the task ended failed, or expired because no machine took it in time (Run's expired state is announced on the failed topic). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "task_id",
++ "state",
++ "agent",
++ "repo",
++ "cost_usd",
++ "files_changed",
++ "started_at",
++ "finished_at",
++ "error"
++ ],
++ "properties": {
++ "task_id": {
++ "type": "string",
++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "state": {
++ "enum": [
++ "failed",
++ "expired"
++ ]
++ },
++ "agent": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 80
++ },
++ "repo": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^[^/\\s]+/[^/\\s]+$",
++ "maxLength": 300
++ },
++ {
++ "type": "null"
++ }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": {
++ "type": [
++ "number",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "files_changed": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "started_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "finished_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "error": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 500
++ }
++ }
++ }
++ },
++ "codes.task.cancelled": {
++ "version": "1.0.0",
++ "owner": "codes",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/events/payloads/codes.task.cancelled.v1.json",
++ "title": "CodesTaskCancelledPayload",
++ "description": "codes.task.cancelled v1 (OpenVibe.Codes): the task ended cancelled, by its owner or by a service holding codes.task.cancel. Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "task_id",
++ "state",
++ "agent",
++ "repo",
++ "cost_usd",
++ "files_changed",
++ "started_at",
++ "finished_at",
++ "error"
++ ],
++ "properties": {
++ "task_id": {
++ "type": "string",
++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "state": {
++ "const": "cancelled"
++ },
++ "agent": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 80
++ },
++ "repo": {
++ "anyOf": [
++ {
++ "type": "string",
++ "pattern": "^[^/\\s]+/[^/\\s]+$",
++ "maxLength": 300
++ },
++ {
++ "type": "null"
++ }
++ ],
++ "description": "owner/name from the task's repository URL, or null when it is not a repository path."
++ },
++ "cost_usd": {
++ "type": [
++ "number",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "files_changed": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0
++ },
++ "started_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "finished_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "format": "date-time"
++ },
++ "error": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 500
++ }
++ }
++ }
}
}
}
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex a216a46e..69441224 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex bd95724e..7382c70e 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 75949da6..aee89454 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 23c1d86f..14b1c877 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex dfed146f..7799f2d1 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex 4faec78e..8fa4808f 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/codes.json b/generated/openapi/codes.json
iindex 36af0775..5b06fa59 100644
---- a/generated/openapi/codes.json
++++ b/generated/openapi/codes.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Codes API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex 82894170..2588b9dd 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex 917ae624..d2696290 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex 20aed41d..2a82891c 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex 60d1b40e..d10eb3c6 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 7e251136..4174ccfe 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 50395f1f..65d78db7 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 66d318fb..113e08a3 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 8b221ca9..d240f5ef 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex 11d29abf..77ed8d36 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/media-hub.json b/generated/openapi/media-hub.json
iindex f249126f..3847ddd6 100644
---- a/generated/openapi/media-hub.json
++++ b/generated/openapi/media-hub.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.MediaHub API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex d3f5ccb5..ec5ade57 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex f62d2e94..bb34b765 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex 9209394b..ad6e38d2 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex fe3122bc..af463d97 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenRestream API",
-- "version": "0.231.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/play.json b/generated/openapi/play.json
iindex 9275af50..1d4fd63c 100644
---- a/generated/openapi/play.json
++++ b/generated/openapi/play.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Play API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/quest.json b/generated/openapi/quest.json
iindex 4bd933a9..1cc0dbfe 100644
---- a/generated/openapi/quest.json
++++ b/generated/openapi/quest.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Quest API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex 776a64a7..6ae21512 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex a3bd14c1..4931f2ad 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex 8112a2c4..4b6ee630 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 7933ad19..531be267 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex 622bdf37..b85bac81 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/space.json b/generated/openapi/space.json
iindex 19c26036..172fb270 100644
---- a/generated/openapi/space.json
++++ b/generated/openapi/space.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Space API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 777af664..8ba565b6 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 817a3301..f3cfd8d5 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 244489ad..f23899f9 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex 04f7d0ba..a4b120aa 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 2b5cfef7..54b18e45 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex 59eda047..2a8b7eaf 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/work.json b/generated/openapi/work.json
iindex b2fbdd18..68e76837 100644
---- a/generated/openapi/work.json
++++ b/generated/openapi/work.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Work API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/openapi/zone.json b/generated/openapi/zone.json
iindex cbf6d6e3..6a0447f1 100644
---- a/generated/openapi/zone.json
++++ b/generated/openapi/zone.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Zone API",
-- "version": "0.231.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.231.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.232.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.232.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"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex cd16eb19..072d70d7 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -212633,3 +212633,98 @@ export interface TodayEventCancelledPayload {
*/
seq: number;
}
++
++/** [email protected] (owner: codes) */
++/**
++ * codes.task.queued v1 (OpenVibe.Codes): a coding task was stored and handed to OpenVibe.Run; the person's machine has not started it. Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.
++ */
++export interface CodesTaskQueuedPayload {
++ task_id: string;
++ state: "queued";
++ agent: string | null;
++ /**
++ * owner/name from the task's repository URL, or null when it is not a repository path.
++ */
++ repo: string | null;
++ cost_usd: number | null;
++ files_changed: number | null;
++ started_at: string | null;
++ finished_at: string | null;
++ error: string | null;
++}
++
++/** [email protected] (owner: codes) */
++/**
++ * codes.task.running v1 (OpenVibe.Codes): Run placed or started the task on the person's machine (both task states placed and running announce as running). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.
++ */
++export interface CodesTaskRunningPayload {
++ task_id: string;
++ state: "running";
++ agent: string | null;
++ /**
++ * owner/name from the task's repository URL, or null when it is not a repository path.
++ */
++ repo: string | null;
++ cost_usd: number | null;
++ files_changed: number | null;
++ started_at: string | null;
++ finished_at: string | null;
++ error: string | null;
++}
++
++/** [email protected] (owner: codes) */
++/**
++ * codes.task.succeeded v1 (OpenVibe.Codes): the task ended and its result is stored on the task page. cost_usd and files_changed are the machine's result (null when it returned neither). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.
++ */
++export interface CodesTaskSucceededPayload {
++ task_id: string;
++ state: "succeeded";
++ agent: string | null;
++ /**
++ * owner/name from the task's repository URL, or null when it is not a repository path.
++ */
++ repo: string | null;
++ cost_usd: number | null;
++ files_changed: number | null;
++ started_at: string | null;
++ finished_at: string | null;
++ error: string | null;
++}
++
++/** [email protected] (owner: codes) */
++/**
++ * codes.task.failed v1 (OpenVibe.Codes): the task ended failed, or expired because no machine took it in time (Run's expired state is announced on the failed topic). Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.
++ */
++export interface CodesTaskFailedPayload {
++ task_id: string;
++ state: "failed" | "expired";
++ agent: string | null;
++ /**
++ * owner/name from the task's repository URL, or null when it is not a repository path.
++ */
++ repo: string | null;
++ cost_usd: number | null;
++ files_changed: number | null;
++ started_at: string | null;
++ finished_at: string | null;
++ error: string | null;
++}
++
++/** [email protected] (owner: codes) */
++/**
++ * codes.task.cancelled v1 (OpenVibe.Codes): the task ended cancelled, by its owner or by a service holding codes.task.cancel. Envelope: source codes, subject { type: user, id: <owner usr_> }, visibility internal.
++ */
++export interface CodesTaskCancelledPayload {
++ task_id: string;
++ state: "cancelled";
++ agent: string | null;
++ /**
++ * owner/name from the task's repository URL, or null when it is not a repository path.
++ */
++ repo: string | null;
++ cost_usd: number | null;
++ files_changed: number | null;
++ started_at: string | null;
++ finished_at: string | null;
++ error: string | null;
++}
ddiff --git a/manifests/services/codes.json b/manifests/services/codes.json
iindex 057ceaf3..3103e7c6 100644
---- a/manifests/services/codes.json
++++ b/manifests/services/codes.json
@@@ -46,8 +46,23 @@
"codes.task.cancel",
"codes.actions.read"
],
-- "eventsProduced": [],
-- "eventsConsumed": [],
++ "eventsProduced": [
++ "codes.task.queued",
++ "codes.task.running",
++ "codes.task.succeeded",
++ "codes.task.failed",
++ "codes.task.cancelled"
++ ],
++ "eventsConsumed": [
++ "run.job.queued",
++ "run.job.started",
++ "run.job.succeeded",
++ "run.job.failed",
++ "run.job.cancelled",
++ "run.job.expired",
++ "network.account.export_requested",
++ "network.account.deleted"
++ ],
"namespacesOwned": [
"codes.*"
],
@@@ -69,6 +84,10 @@
{
"kind": "sessions",
"what": "signed-in visitors keep their session cookies (verified offline against Network's JWKS); nothing else is pending: the harness catalog is read from the release at boot"
++ },
++ {
++ "kind": "outbox",
++ "what": "codes.task.* rows not yet published are sent by the relay after a restart under their fixed evt_ ids; run.job.* deliveries missed while down are redelivered by OpenVibe.Events and claimed once in codes_events_inbox"
}
]
},
@@@ -89,5 +108,5 @@
"none": "no claims: one process owns the ov_codes PostgreSQL database; writes are transactions there"
}
},
-- "notes": "Port 4900, unit openvibe-codes.service. The open coding-agent harness (owner 2026-10-08): the harness catalog and router (GET /api/v1/harnesses, POST /api/v1/harnesses/route), the way to improve OpenVibe (contributing, code of conduct, the contributor ladder) and permanent redirects from the former developer-portal paths to openvibe.services, where the portal moved (manifests, releases, trust, playgrounds, docs, OAuth and webhook tools)."
++ "notes": "Port 4900, unit openvibe-codes.service. The open coding-agent harness (owner 2026-10-08): the harness catalog and router (GET /api/v1/harnesses, POST /api/v1/harnesses/route), the way to improve OpenVibe (contributing, code of conduct, the contributor ladder) and permanent redirects from the former developer-portal paths to openvibe.services, where the portal moved (manifests, releases, trust, playgrounds, docs, OAuth and webhook tools). Coding tasks on the person's own machine (plan T16) are Run jobs: their sessions are kept line by line in codes_session_lines as the stream arrives (back-filled from the machine's final log; GET /run/tasks/:id/session.json replays them), run.job.* events from OpenVibe.Run finalize a task without polling, and every state change is published as codes.task.queued|running|succeeded|failed|cancelled from a transactional outbox."
}
ddiff --git a/package.json b/package.json
iindex 07c0ae35..762b03a8 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.231.0",
++ "version": "0.232.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",