openvibers/openvibe.contracts Commits

actor.model.manage: a person chooses the model their OpenVibe.Actor tasks run on (plan L55 C3) (#278)

OP OpenVibers committed 12 days ago · 72fd2b820c · 60 files, +677 −87

GET /api/v1/me/model reads the choice, PUT /api/v1/me/model sets it: OpenVibe's own keys, or the person's own provider key (which stays sealed in OpenVibe.AI and never reaches Actor). actor.model-manage-request@1 and actor.model-manage-result@1, with fixtures.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex ab02a49d..a81a0f30 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -1,5 +1,12 @@
# Changelog
++## 0.269.0 — 2026-11-01
++
++- **`actor.model.manage`** (active, first-party, sensitive; plan L55 C3): a person chooses the model their OpenVibe.Actor
++ tasks run on — OpenVibe's own keys, or their own provider key (which stays sealed in OpenVibe.AI and never reaches
++ Actor). `GET /api/v1/me/model` reads the choice, `PUT /api/v1/me/model` sets it (`actor.model-manage-request@1`,
++ answered by `actor.model-manage-result@1`). The person's choice alone: another person's is 404.
++
## 0.268.0 — 2026-11-01
- **`bot.machine.watch_link`** (active, first-party, sensitive; plan L55): the owner's agent (OpenVibe.Actor) asks Bot
ddiff --git a/contracts/actor/model-manage-request.v1.json b/contracts/actor/model-manage-request.v1.json
nnew file mode 100644
iindex 00000000..66d1ece3
---- /dev/null
++++ b/contracts/actor/model-manage-request.v1.json
@@@ -0,0 +1,33 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/model-manage-request.v1.json",
++ "title": "ActorModelManageRequest",
++ "description": "actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "choice": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ],
++ "default": "auto",
++ "description": "Which model your tasks run on."
++ },
++ "model": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120,
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,119}$",
++ "description": "The model id you picked, or nothing: OpenVibe.AI routes the call."
++ }
++ }
++}
ddiff --git a/contracts/actor/model-manage-result.v1.json b/contracts/actor/model-manage-result.v1.json
nnew file mode 100644
iindex 00000000..d74cdbdf
---- /dev/null
++++ b/contracts/actor/model-manage-result.v1.json
@@@ -0,0 +1,69 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/model-manage-result.v1.json",
++ "title": "ActorModelManageResult",
++ "description": "actor.model-manage-result@1: what GET /api/v1/me/model answers, and what PUT /api/v1/me/model answers: { choice, provider, model, updated_at, keys }. choice is what you chose; provider is the provider your own key is for (or nothing); model is the model id you picked (or nothing); updated_at is when you last changed it; keys are the providers you hold a key for in OpenVibe.AI (names only, never key material), or null when OpenVibe.AI does not tell a service.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "choice",
++ "provider",
++ "model",
++ "updated_at",
++ "keys"
++ ],
++ "properties": {
++ "choice": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ]
++ },
++ "provider": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "enum": [
++ "openai",
++ "anthropic",
++ "deepseek",
++ "google",
++ "openrouter",
++ "mistral",
++ null
++ ]
++ },
++ "model": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120
++ },
++ "updated_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "description": "ISO 8601, or nothing when you never changed it."
++ },
++ "keys": {
++ "type": [
++ "array",
++ "null"
++ ],
++ "items": {
++ "type": "string",
++ "maxLength": 40
++ },
++ "description": "The providers you hold a key for, names only. Null when OpenVibe.AI does not tell a service."
++ }
++ }
++}
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex c5e3e8f5..d04e8eb5 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -6878,6 +6878,24 @@
"compatibility": "backward",
"status": "active"
},
++ {
++ "id": "actor.model-manage-request",
++ "version": "1.0.0",
++ "owner": "actor",
++ "schema": "actor/model-manage-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "actor.model-manage-result",
++ "version": "1.0.0",
++ "owner": "actor",
++ "schema": "actor/model-manage-result.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
{
"id": "actor.agent-run-request",
"version": "1.0.0",
ddiff --git a/fixtures/actor.model-manage-request/invalid/unknown-provider.json b/fixtures/actor.model-manage-request/invalid/unknown-provider.json
nnew file mode 100644
iindex 00000000..65c4d256
---- /dev/null
++++ b/fixtures/actor.model-manage-request/invalid/unknown-provider.json
@@@ -0,0 +1,3 @@
++{
++ "choice": "own:not-a-provider"
++}
ddiff --git a/fixtures/actor.model-manage-request/invalid/with-a-key.json b/fixtures/actor.model-manage-request/invalid/with-a-key.json
nnew file mode 100644
iindex 00000000..59901b53
---- /dev/null
++++ b/fixtures/actor.model-manage-request/invalid/with-a-key.json
@@@ -0,0 +1,4 @@
++{
++ "choice": "own:openai",
++ "api_key": "sk-never-here"
++}
ddiff --git a/fixtures/actor.model-manage-request/valid/auto.json b/fixtures/actor.model-manage-request/valid/auto.json
nnew file mode 100644
iindex 00000000..5951345a
---- /dev/null
++++ b/fixtures/actor.model-manage-request/valid/auto.json
@@@ -0,0 +1,3 @@
++{
++ "choice": "auto"
++}
ddiff --git a/fixtures/actor.model-manage-request/valid/openvibe.json b/fixtures/actor.model-manage-request/valid/openvibe.json
nnew file mode 100644
iindex 00000000..3759bc7b
---- /dev/null
++++ b/fixtures/actor.model-manage-request/valid/openvibe.json
@@@ -0,0 +1,3 @@
++{
++ "choice": "openvibe"
++}
ddiff --git a/fixtures/actor.model-manage-request/valid/own.json b/fixtures/actor.model-manage-request/valid/own.json
nnew file mode 100644
iindex 00000000..0edfcfe7
---- /dev/null
++++ b/fixtures/actor.model-manage-request/valid/own.json
@@@ -0,0 +1,4 @@
++{
++ "choice": "own:openai",
++ "model": "gpt-5.1"
++}
ddiff --git a/fixtures/actor.model-manage-result/invalid/without-keys.json b/fixtures/actor.model-manage-result/invalid/without-keys.json
nnew file mode 100644
iindex 00000000..09b25ef3
---- /dev/null
++++ b/fixtures/actor.model-manage-result/invalid/without-keys.json
@@@ -0,0 +1,6 @@
++{
++ "choice": "auto",
++ "provider": null,
++ "model": null,
++ "updated_at": null
++}
ddiff --git a/fixtures/actor.model-manage-result/valid/default.json b/fixtures/actor.model-manage-result/valid/default.json
nnew file mode 100644
iindex 00000000..7a7d6600
---- /dev/null
++++ b/fixtures/actor.model-manage-result/valid/default.json
@@@ -0,0 +1,7 @@
++{
++ "choice": "auto",
++ "provider": null,
++ "model": null,
++ "updated_at": null,
++ "keys": null
++}
ddiff --git a/fixtures/actor.model-manage-result/valid/own.json b/fixtures/actor.model-manage-result/valid/own.json
nnew file mode 100644
iindex 00000000..6a57e2d1
---- /dev/null
++++ b/fixtures/actor.model-manage-result/valid/own.json
@@@ -0,0 +1,10 @@
++{
++ "choice": "own:openai",
++ "provider": "openai",
++ "model": "gpt-5.1",
++ "updated_at": "2026-11-01T00:00:00.000Z",
++ "keys": [
++ "openai",
++ "anthropic"
++ ]
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 25a8d61b..bb5dfe6f 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -80249,6 +80249,118 @@
]
}
},
++ "actor.model-manage-request": {
++ "version": "1.0.0",
++ "owner": "actor",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/model-manage-request.v1.json",
++ "title": "ActorModelManageRequest",
++ "description": "actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "choice": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ],
++ "default": "auto",
++ "description": "Which model your tasks run on."
++ },
++ "model": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120,
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,119}$",
++ "description": "The model id you picked, or nothing: OpenVibe.AI routes the call."
++ }
++ }
++ }
++ },
++ "actor.model-manage-result": {
++ "version": "1.0.0",
++ "owner": "actor",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/model-manage-result.v1.json",
++ "title": "ActorModelManageResult",
++ "description": "actor.model-manage-result@1: what GET /api/v1/me/model answers, and what PUT /api/v1/me/model answers: { choice, provider, model, updated_at, keys }. choice is what you chose; provider is the provider your own key is for (or nothing); model is the model id you picked (or nothing); updated_at is when you last changed it; keys are the providers you hold a key for in OpenVibe.AI (names only, never key material), or null when OpenVibe.AI does not tell a service.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "choice",
++ "provider",
++ "model",
++ "updated_at",
++ "keys"
++ ],
++ "properties": {
++ "choice": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ]
++ },
++ "provider": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "enum": [
++ "openai",
++ "anthropic",
++ "deepseek",
++ "google",
++ "openrouter",
++ "mistral",
++ null
++ ]
++ },
++ "model": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120
++ },
++ "updated_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "description": "ISO 8601, or nothing when you never changed it."
++ },
++ "keys": {
++ "type": [
++ "array",
++ "null"
++ ],
++ "items": {
++ "type": "string",
++ "maxLength": 40
++ },
++ "description": "The providers you hold a key for, names only. Null when OpenVibe.AI does not tell a service."
++ }
++ }
++ }
++ },
"actor.agent-run-request": {
"version": "1.0.0",
"owner": "actor",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex e99baae5..e9bbddfd 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.268.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.269.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"
@@@ -1218,6 +1218,146 @@
}
}
},
++ "/api/v1/me/model": {
++ "get": {
++ "operationId": "get_api_v1_me_model",
++ "summary": "Choose the model your OpenVibe.Actor tasks run on: OpenVibe's own keys, or your own provider key (which stays sealed in OpenVibe.AI and never reaches Actor).",
++ "description": "**actor.model.manage** (public): Choose the model your OpenVibe.Actor tasks run on: OpenVibe's own keys, or your own provider key (which stays sealed in OpenVibe.AI and never reaches Actor). Your choice is yours alone; another person's is 404.",
++ "tags": [
++ "actor.model"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.model.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.model.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.model-manage-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "choice",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ],
++ "default": "auto",
++ "description": "Which model your tasks run on."
++ },
++ "description": "Which model your tasks run on."
++ },
++ {
++ "name": "model",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120,
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,119}$",
++ "description": "The model id you picked, or nothing: OpenVibe.AI routes the call."
++ },
++ "description": "The model id you picked, or nothing: OpenVibe.AI routes the call."
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.model-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "put": {
++ "operationId": "put_api_v1_me_model",
++ "summary": "Choose the model your OpenVibe.Actor tasks run on: OpenVibe's own keys, or your own provider key (which stays sealed in OpenVibe.AI and never reaches Actor).",
++ "description": "**actor.model.manage** (public): Choose the model your OpenVibe.Actor tasks run on: OpenVibe's own keys, or your own provider key (which stays sealed in OpenVibe.AI and never reaches Actor). Your choice is yours alone; another person's is 404.",
++ "tags": [
++ "actor.model"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.model.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.model.manage"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.model-manage-request.v1"
++ }
++ }
++ }
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.model-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
"/api/v1/resources": {
"get": {
"operationId": "get_api_v1_resources",
@@@ -2539,6 +2679,104 @@
}
}
},
++ "actor.model-manage-request.v1": {
++ "title": "ActorModelManageRequest",
++ "description": "actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "choice": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ],
++ "default": "auto",
++ "description": "Which model your tasks run on."
++ },
++ "model": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120,
++ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:/-]{0,119}$",
++ "description": "The model id you picked, or nothing: OpenVibe.AI routes the call."
++ }
++ }
++ },
++ "actor.model-manage-result.v1": {
++ "title": "ActorModelManageResult",
++ "description": "actor.model-manage-result@1: what GET /api/v1/me/model answers, and what PUT /api/v1/me/model answers: { choice, provider, model, updated_at, keys }. choice is what you chose; provider is the provider your own key is for (or nothing); model is the model id you picked (or nothing); updated_at is when you last changed it; keys are the providers you hold a key for in OpenVibe.AI (names only, never key material), or null when OpenVibe.AI does not tell a service.",
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "choice",
++ "provider",
++ "model",
++ "updated_at",
++ "keys"
++ ],
++ "properties": {
++ "choice": {
++ "enum": [
++ "auto",
++ "openvibe",
++ "own:openai",
++ "own:anthropic",
++ "own:deepseek",
++ "own:google",
++ "own:openrouter",
++ "own:mistral"
++ ]
++ },
++ "provider": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "enum": [
++ "openai",
++ "anthropic",
++ "deepseek",
++ "google",
++ "openrouter",
++ "mistral",
++ null
++ ]
++ },
++ "model": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "maxLength": 120
++ },
++ "updated_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "description": "ISO 8601, or nothing when you never changed it."
++ },
++ "keys": {
++ "type": [
++ "array",
++ "null"
++ ],
++ "items": {
++ "type": "string",
++ "maxLength": 40
++ },
++ "description": "The providers you hold a key for, names only. Null when OpenVibe.AI does not tell a service."
++ }
++ }
++ },
"actor.task-create-request.v1": {
"title": "ActorTaskCreateRequest",
"description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A webhook may instead name a project secret (`secret_ref`, ADR-056): its deliveries are then signed by OpenVibe.Network with that secret, in the same headers, and no webhook_secret is minted when every webhook names one. A secret_ref on a task outside a project is refused 422 actor.webhook.secret_unavailable.",
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex 7359b148..6afe366a 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.268.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.269.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/bench.json b/generated/openapi/bench.json
iindex b362ef75..f3dc1f57 100644
---- a/generated/openapi/bench.json
++++ b/generated/openapi/bench.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bench API",
-- "version": "0.268.0",
-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 cdc9fe31..7faba2da 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.268.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 31856759..c54007bc 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.268.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 b91b2ab6..880763c6 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.268.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 98ebd26e..b2fc74f1 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.268.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 77d313c3..9ae702d9 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.268.0",
-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 8d8d3fd7..de349eb4 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.268.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 2e141ced..2901c563 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.268.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 44811b04..e201e4e5 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.268.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.269.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/domains.json b/generated/openapi/domains.json
iindex 4d74a808..57501e1e 100644
---- a/generated/openapi/domains.json
++++ b/generated/openapi/domains.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Domains API",
-- "version": "0.268.0",
-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 fa57c9c6..42beb9bb 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.268.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 8ec51b39..faa86475 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.268.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 3a449dbe..1c8bd39c 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.268.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 1b87c672..d2c9960d 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.268.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.269.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/index.json b/generated/openapi/index.json
iindex 6a25ffa6..08cb3d3f 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -5,8 +5,8 @@
"service": "actor",
"name": "OpenVibe.Actor",
"origin": "https://openvibe.actor",
-- "operations": 29,
-- "capabilities": 11
++ "operations": 31,
++ "capabilities": 12
},
{
"service": "ai",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 81047c8b..b5d9c4bd 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.268.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 677c0691..d055e37b 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.268.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 ea3f97fc..dd033ea0 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.268.0",
-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 e1682460..a73a37cc 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.268.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 0253017f..7c2f3d00 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.268.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 e2275dcd..a242612f 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.268.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 31173135..7f342a8e 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.268.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 0084f176..89e1312a 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.268.0",
-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 9ead4bb2..58c382ce 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.268.0",
-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.269.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/report.json b/generated/openapi/report.json
iindex 06378eac..ef55a5fa 100644
---- a/generated/openapi/report.json
++++ b/generated/openapi/report.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Report API",
-- "version": "0.268.0",
-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 1c5b0f65..86c99902 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.268.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 dc19ffb1..28fade10 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.268.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 f83e8018..842a803a 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.268.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 bc356cc7..ce48043c 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.268.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 8ae56483..4cd81548 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.268.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 1a0fc8b6..25212fa2 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.268.0",
-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 6e0970b9..1bdea52c 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.268.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.269.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/today.json b/generated/openapi/today.json
iindex 36c34fbf..f7d4d0d6 100644
---- a/generated/openapi/today.json
++++ b/generated/openapi/today.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Today API",
-- "version": "0.268.0",
-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 9e8613bf..0b184440 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.268.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 30e6d5b3..c887dcfd 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.268.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 8a479192..0e636ca2 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.268.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.269.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/vision.json b/generated/openapi/vision.json
iindex e2648b70..58750964 100644
---- a/generated/openapi/vision.json
++++ b/generated/openapi/vision.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Vision API",
-- "version": "0.268.0",
-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 caca2cd1..837b7897 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.268.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 46f18d75..e66023af 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.268.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 27e237c8..25cf9acf 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.268.0",
-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 02f01180..07a8c108 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.268.0",
-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.268.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.269.0",
++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.269.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 e219c25d..879d942b 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -257046,6 +257046,55 @@ export type ActorAgentManageResult =
updated_at?: string;
};
++/** [email protected] (owner: actor) */
++/**
++ * actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.
++ */
++export interface ActorModelManageRequest {
++ /**
++ * Which model your tasks run on.
++ */
++ choice?:
++ | "auto"
++ | "openvibe"
++ | "own:openai"
++ | "own:anthropic"
++ | "own:deepseek"
++ | "own:google"
++ | "own:openrouter"
++ | "own:mistral";
++ /**
++ * The model id you picked, or nothing: OpenVibe.AI routes the call.
++ */
++ model?: string | null;
++}
++
++/** [email protected] (owner: actor) */
++/**
++ * actor.model-manage-result@1: what GET /api/v1/me/model answers, and what PUT /api/v1/me/model answers: { choice, provider, model, updated_at, keys }. choice is what you chose; provider is the provider your own key is for (or nothing); model is the model id you picked (or nothing); updated_at is when you last changed it; keys are the providers you hold a key for in OpenVibe.AI (names only, never key material), or null when OpenVibe.AI does not tell a service.
++ */
++export interface ActorModelManageResult {
++ choice:
++ | "auto"
++ | "openvibe"
++ | "own:openai"
++ | "own:anthropic"
++ | "own:deepseek"
++ | "own:google"
++ | "own:openrouter"
++ | "own:mistral";
++ provider: "openai" | "anthropic" | "deepseek" | "google" | "openrouter" | "mistral" | null;
++ model: string | null;
++ /**
++ * ISO 8601, or nothing when you never changed it.
++ */
++ updated_at: string | null;
++ /**
++ * The providers you hold a key for, names only. Null when OpenVibe.AI does not tell a service.
++ */
++ keys: string[] | null;
++}
++
/** [email protected] (owner: actor) */
/**
* actor.agent-run-request@1: POST /api/v1/me/agents/:id/run { input? } runs the agent now as an ordinary Actor task (its instructions, then its memory, then the input), under the same free tier, budget and daily limits as the person's own tasks, plus the agent's daily_runs_max (429 actor.agent.limit). Answered 201 with the task (platform.task@1). GET /api/v1/me/agents/:id/runs lists its tasks, newest first.
ddiff --git a/manifests/capabilities/actor.model.manage.json b/manifests/capabilities/actor.model.manage.json
nnew file mode 100644
iindex 00000000..6e1f6f70
---- /dev/null
++++ b/manifests/capabilities/actor.model.manage.json
@@@ -0,0 +1,23 @@
++{
++ "id": "actor.model.manage",
++ "version": "1.0",
++ "owner": "actor",
++ "status": "active",
++ "visibility": "public",
++ "sensitive": true,
++ "description": "Choose the model your OpenVibe.Actor tasks run on: OpenVibe's own keys, or your own provider key (which stays sealed in OpenVibe.AI and never reaches Actor). Your choice is yours alone; another person's is 404.",
++ "inputSchema": "actor.model-manage-request@1",
++ "outputSchema": "actor.model-manage-result@1",
++ "permissions": [
++ "actor:model:manage"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "actor-task",
++ "events": [],
++ "implementedBy": [
++ "GET /api/v1/me/model",
++ "PUT /api/v1/me/model"
++ ]
++}
ddiff --git a/manifests/services/actor.json b/manifests/services/actor.json
iindex f99c97ad..85c1dd71 100644
---- a/manifests/services/actor.json
++++ b/manifests/services/actor.json
@@@ -26,6 +26,7 @@
"actor.agent.run",
"actor.actions.read",
"actor.approval.decide",
++ "actor.model.manage",
"actor.a2a.task"
],
"eventsProduced": [],
ddiff --git a/package.json b/package.json
iindex 405e95dd..3b6829a3 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.268.0",
++ "version": "0.269.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",