openvibers/openvibe.contracts Commits
Define machine access and agent relay contracts (0.409.0) (#454)
Changes
@@@ -1,5 +1,9 @@# Changelog++## 0.409.0 — 2026-11-11++++- Define machine access requests, grants and signed token claims; the agent directory, A2A tasks and results; five Network events and four registration and relay capabilities.++## 0.408.0 — 2026-11-11The rest of the 0.407.0 train. v0.407.0 was tagged at #451's merge, before the train merged, so the tag holds #451nnew file mode 100644@@@ -0,0 +1,76 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/directory-entry.v1.json",++ "title": "AgentDirectoryEntry",++ "description": "One discoverable A2A agent belonging to a person.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "owner",++ "kind",++ "name",++ "skills",++ "status",++ "allow_others",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "kind": {++ "enum": [++ "actor",++ "codes",++ "link-local",++ "chat-bot",++ "service"++ ]++ },++ "name": {++ "type": "string",++ "maxLength": 120++ },++ "machine_id": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "service": {++ "type": "string",++ "maxLength": 60++ },++ "endpoint": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "skills": {++ "type": "array",++ "items": {++ "type": "string",++ "maxLength": 120++ },++ "maxItems": 100++ },++ "status": {++ "enum": [++ "online",++ "busy",++ "offline"++ ]++ },++ "allow_others": {++ "type": "boolean"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,78 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/task-result.v1.json",++ "title": "AgentTaskResult",++ "description": "Asynchronous A2A task status and optional result.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "thread",++ "status",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "pending",++ "running",++ "completed",++ "failed",++ "cancelled"++ ]++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": "string",++ "maxLength": 500++ }++ }++}nnew file mode 100644@@@ -0,0 +1,82 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/task.v1.json",++ "title": "AgentTask",++ "description": "A2A task with agent, person, thread and text parts limited to 8000 characters.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "to",++ "from",++ "on_behalf_of",++ "thread",++ "message"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "to": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "on_behalf_of": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "message": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "skillId": {++ "type": "string",++ "maxLength": 64++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++}@@@ -11474,6 +11474,105 @@"visibility": "public","compatibility": "backward","status": "active"++ },++ {++ "id": "link.access-request",++ "version": "1.0.0",++ "owner": "network",++ "schema": "link/access-request.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "link.access-grant",++ "version": "1.0.0",++ "owner": "network",++ "schema": "link/access-grant.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "link.access-grant-token",++ "version": "1.0.0",++ "owner": "network",++ "schema": "link/access-grant-token.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "agent.directory-entry",++ "version": "1.0.0",++ "owner": "network",++ "schema": "agent/directory-entry.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "agent.task",++ "version": "1.0.0",++ "owner": "network",++ "schema": "agent/task.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "agent.task-result",++ "version": "1.0.0",++ "owner": "network",++ "schema": "agent/task-result.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "network.link.access.requested",++ "version": "1.0.0",++ "owner": "network",++ "schema": "events/payloads/network.link.access.requested.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "network.link.access.answered",++ "version": "1.0.0",++ "owner": "network",++ "schema": "events/payloads/network.link.access.answered.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "network.link.access.revoked",++ "version": "1.0.0",++ "owner": "network",++ "schema": "events/payloads/network.link.access.revoked.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "network.agent.task.created",++ "version": "1.0.0",++ "owner": "network",++ "schema": "events/payloads/network.agent.task.created.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "network.agent.task.updated",++ "version": "1.0.0",++ "owner": "network",++ "schema": "events/payloads/network.agent.task.updated.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,37 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.created.v1.json",++ "title": "NetworkAgentTaskCreatedPayload",++ "description": "Agent task was created.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task_id",++ "thread",++ "from",++ "to",++ "at"++ ],++ "properties": {++ "task_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,37 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.updated.v1.json",++ "title": "NetworkAgentTaskUpdatedPayload",++ "description": "Agent task status changed.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task_id",++ "thread",++ "status",++ "at"++ ],++ "properties": {++ "task_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "pending",++ "running",++ "completed",++ "failed",++ "cancelled"++ ]++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.answered.v1.json",++ "title": "NetworkLinkAccessAnsweredPayload",++ "description": "Machine access request was answered or expired.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "request_id",++ "status",++ "at"++ ],++ "properties": {++ "request_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "approved",++ "denied",++ "expired"++ ]++ },++ "grant_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,32 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.requested.v1.json",++ "title": "NetworkLinkAccessRequestedPayload",++ "description": "Machine access request was created.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "request_id",++ "from_principal",++ "to_principal",++ "at"++ ],++ "properties": {++ "request_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,32 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.revoked.v1.json",++ "title": "NetworkLinkAccessRevokedPayload",++ "description": "Machine access grant was revoked.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "grant_id",++ "from_principal",++ "to_principal",++ "at"++ ],++ "properties": {++ "grant_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,60 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/link/access-grant-token.v1.json",++ "title": "LinkAccessGrantToken",++ "description": "Claims of the signed grant JWT; target is audience, requester is subject.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "iss",++ "aud",++ "sub",++ "jti",++ "grant_id",++ "scopes",++ "iat",++ "exp"++ ],++ "properties": {++ "iss": {++ "type": "string"++ },++ "aud": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "sub": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "jti": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "grant_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "iat": {++ "type": "integer"++ },++ "exp": {++ "type": "integer"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,81 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/link/access-grant.v1.json",++ "title": "LinkAccessGrant",++ "description": "Approved machine access; null expiration is for same-owner agent or send only.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "from_principal",++ "to_principal",++ "scopes",++ "approved_by",++ "created_at",++ "expires_at",++ "revoked_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "request_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "approved_by": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "expires_at": {++ "oneOf": [++ {++ "type": "string",++ "format": "date-time"++ },++ {++ "type": "null"++ }++ ]++ },++ "revoked_at": {++ "oneOf": [++ {++ "type": "string",++ "format": "date-time"++ },++ {++ "type": "null"++ }++ ]++ }++ }++}nnew file mode 100644@@@ -0,0 +1,86 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/link/access-request.v1.json",++ "title": "LinkAccessRequest",++ "description": "A machine asks another for bounded access.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "from_principal",++ "to_principal",++ "from_owner",++ "to_owner",++ "scopes",++ "status",++ "requested_at",++ "expires_at",++ "duration_seconds"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from_owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from_agent": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "reason": {++ "type": "string",++ "maxLength": 500++ },++ "status": {++ "enum": [++ "pending",++ "approved",++ "denied",++ "expired"++ ]++ },++ "requested_at": {++ "type": "string",++ "format": "date-time"++ },++ "expires_at": {++ "type": "string",++ "format": "date-time"++ },++ "duration_seconds": {++ "type": "integer",++ "minimum": 60,++ "maximum": 2592000++ }++ }++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "id": "agt_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "owner": "usr_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "kind": "link-local",++ "name": "Codex",++ "machine_id": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "skills": [++ "code"++ ],++ "status": "online",++ "allow_others": false,++ "updated_at": "2026-11-11T00:00:00Z"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "id": "tsk_12345678",++ "thread": "thr_12345678",++ "status": "completed",++ "result": {++ "parts": [++ {++ "type": "text",++ "text": "Done"++ }++ ]++ },++ "updated_at": "2026-11-11T00:00:00Z"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "to": "agt_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "from": "agt_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "on_behalf_of": "usr_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "thread": "thr_12345678",++ "message": {++ "role": "user",++ "parts": [++ {++ "type": "text",++ "text": "Hello"++ }++ ]++ }++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "iss": "https://openvibe.network",++ "aud": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "sub": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "jti": "tok_12345678",++ "grant_id": "grt_12345678",++ "scopes": [++ "agent"++ ],++ "iat": 1794355200,++ "exp": 1794358800++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "id": "grt_12345678",++ "request_id": "req_12345678",++ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "scopes": [++ "agent"++ ],++ "approved_by": "usr_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "created_at": "2026-11-11T00:00:00Z",++ "expires_at": "2026-11-11T01:00:00Z",++ "revoked_at": null++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,14 @@++{++ "id": "req_12345678",++ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "from_owner": "usr_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "to_owner": "usr_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "scopes": [++ "agent"++ ],++ "status": "pending",++ "requested_at": "2026-11-11T00:00:00Z",++ "expires_at": "2026-11-11T01:00:00Z",++ "duration_seconds": 3600++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,7 @@++{++ "task_id": "tsk_12345678",++ "thread": "thr_12345678",++ "from": "agt_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "to": "agt_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "at": "2026-11-11T00:00:00Z"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,6 @@++{++ "task_id": "tsk_12345678",++ "thread": "thr_12345678",++ "status": "completed",++ "at": "2026-11-11T00:00:00Z"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,6 @@++{++ "request_id": "req_12345678",++ "status": "approved",++ "grant_id": "grt_12345678",++ "at": "2026-11-11T00:00:00Z"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,6 @@++{++ "request_id": "req_12345678",++ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "at": "2026-11-11T00:00:00Z"++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,6 @@++{++ "grant_id": "grt_12345678",++ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",++ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",++ "at": "2026-11-11T00:00:00Z"++}@@@ -130115,6 +130115,696 @@"additionalProperties": false,"description": "A comparison of things by weighted criteria, with finite dated results and their public sources. Missing evidence is absent, never zero."}++ },++ "link.access-request": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/link/access-request.v1.json",++ "title": "LinkAccessRequest",++ "description": "A machine asks another for bounded access.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "from_principal",++ "to_principal",++ "from_owner",++ "to_owner",++ "scopes",++ "status",++ "requested_at",++ "expires_at",++ "duration_seconds"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from_owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from_agent": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "reason": {++ "type": "string",++ "maxLength": 500++ },++ "status": {++ "enum": [++ "pending",++ "approved",++ "denied",++ "expired"++ ]++ },++ "requested_at": {++ "type": "string",++ "format": "date-time"++ },++ "expires_at": {++ "type": "string",++ "format": "date-time"++ },++ "duration_seconds": {++ "type": "integer",++ "minimum": 60,++ "maximum": 2592000++ }++ }++ }++ },++ "link.access-grant": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/link/access-grant.v1.json",++ "title": "LinkAccessGrant",++ "description": "Approved machine access; null expiration is for same-owner agent or send only.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "from_principal",++ "to_principal",++ "scopes",++ "approved_by",++ "created_at",++ "expires_at",++ "revoked_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "request_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "approved_by": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "expires_at": {++ "oneOf": [++ {++ "type": "string",++ "format": "date-time"++ },++ {++ "type": "null"++ }++ ]++ },++ "revoked_at": {++ "oneOf": [++ {++ "type": "string",++ "format": "date-time"++ },++ {++ "type": "null"++ }++ ]++ }++ }++ }++ },++ "link.access-grant-token": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/link/access-grant-token.v1.json",++ "title": "LinkAccessGrantToken",++ "description": "Claims of the signed grant JWT; target is audience, requester is subject.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "iss",++ "aud",++ "sub",++ "jti",++ "grant_id",++ "scopes",++ "iat",++ "exp"++ ],++ "properties": {++ "iss": {++ "type": "string"++ },++ "aud": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "sub": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "jti": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "grant_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "iat": {++ "type": "integer"++ },++ "exp": {++ "type": "integer"++ }++ }++ }++ },++ "agent.directory-entry": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/directory-entry.v1.json",++ "title": "AgentDirectoryEntry",++ "description": "One discoverable A2A agent belonging to a person.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "owner",++ "kind",++ "name",++ "skills",++ "status",++ "allow_others",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "kind": {++ "enum": [++ "actor",++ "codes",++ "link-local",++ "chat-bot",++ "service"++ ]++ },++ "name": {++ "type": "string",++ "maxLength": 120++ },++ "machine_id": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "service": {++ "type": "string",++ "maxLength": 60++ },++ "endpoint": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "skills": {++ "type": "array",++ "items": {++ "type": "string",++ "maxLength": 120++ },++ "maxItems": 100++ },++ "status": {++ "enum": [++ "online",++ "busy",++ "offline"++ ]++ },++ "allow_others": {++ "type": "boolean"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "agent.task": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/task.v1.json",++ "title": "AgentTask",++ "description": "A2A task with agent, person, thread and text parts limited to 8000 characters.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "to",++ "from",++ "on_behalf_of",++ "thread",++ "message"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "to": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "on_behalf_of": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "message": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "skillId": {++ "type": "string",++ "maxLength": 64++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "agent.task-result": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/agent/task-result.v1.json",++ "title": "AgentTaskResult",++ "description": "Asynchronous A2A task status and optional result.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "thread",++ "status",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "pending",++ "running",++ "completed",++ "failed",++ "cancelled"++ ]++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": "string",++ "maxLength": 500++ }++ }++ }++ },++ "network.link.access.requested": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.requested.v1.json",++ "title": "NetworkLinkAccessRequestedPayload",++ "description": "Machine access request was created.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "request_id",++ "from_principal",++ "to_principal",++ "at"++ ],++ "properties": {++ "request_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "network.link.access.answered": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.answered.v1.json",++ "title": "NetworkLinkAccessAnsweredPayload",++ "description": "Machine access request was answered or expired.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "request_id",++ "status",++ "at"++ ],++ "properties": {++ "request_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "approved",++ "denied",++ "expired"++ ]++ },++ "grant_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "network.link.access.revoked": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.revoked.v1.json",++ "title": "NetworkLinkAccessRevokedPayload",++ "description": "Machine access grant was revoked.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "grant_id",++ "from_principal",++ "to_principal",++ "at"++ ],++ "properties": {++ "grant_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "network.agent.task.created": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.created.v1.json",++ "title": "NetworkAgentTaskCreatedPayload",++ "description": "Agent task was created.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task_id",++ "thread",++ "from",++ "to",++ "at"++ ],++ "properties": {++ "task_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }++ },++ "network.agent.task.updated": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.updated.v1.json",++ "title": "NetworkAgentTaskUpdatedPayload",++ "description": "Agent task status changed.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task_id",++ "thread",++ "status",++ "at"++ ],++ "properties": {++ "task_id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "pending",++ "running",++ "completed",++ "failed",++ "cancelled"++ ]++ },++ "at": {++ "type": "string",++ "format": "date-time"++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bench API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for 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"@@@ -1022,6 +1022,72 @@}}},++ "/api/v1/machines/{id}/relay": {++ "post": {++ "operationId": "post_api_v1_machines_id_relay",++ "summary": "Network relays grant-checked tasks and frames to a paired machine.",++ "description": "**bot.machine.relay** (first-party): Network relays grant-checked tasks and frames to a paired machine.",++ "tags": [++ "bot.machine"++ ],++ "x-openvibe-capabilities": [++ "bot.machine.relay"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "admin",++ "security": [++ {++ "openvibeToken": [++ "bot.machine.relay"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/agent.task.v1"++ }++ }++ }++ },++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/agent.task-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/machines/{id}/revoke": {"post": {"operationId": "post_api_v1_machines_id_revoke",@@@ -2302,6 +2368,162 @@},"components": {"schemas": {++ "agent.task-result.v1": {++ "title": "AgentTaskResult",++ "description": "Asynchronous A2A task status and optional result.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "thread",++ "status",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "pending",++ "running",++ "completed",++ "failed",++ "cancelled"++ ]++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": "string",++ "maxLength": 500++ }++ }++ },++ "agent.task.v1": {++ "title": "AgentTask",++ "description": "A2A task with agent, person, thread and text parts limited to 8000 characters.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "to",++ "from",++ "on_behalf_of",++ "thread",++ "message"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "to": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "on_behalf_of": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "message": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "skillId": {++ "type": "string",++ "maxLength": 64++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },"bot.desk-lease-create-request.v1": {"title": "BotDeskLeaseCreateRequest","description": "bot.desk-lease-create-request@1 (the Desks plan's D6): the body of POST /api/v1/machines/{id}/desk-leases on OpenVibe.Bot (capability bot.desk.session), answered 201 with bot.desk-lease@1. DESK is the name Run chose for the session (unique per session); a desk already leased to another session, or running for the machine's owner, is refused 409 bot.desk_busy, and a repeat for the same session answers its lease (200). A machine with no room (its max_desks) is refused 409 bot.machine_busy, one that is offline 409 bot.device_offline, and one the person may not use 404 bot.device_not_found.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Codes API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe Connect API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Design API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Exchange API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Git API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for 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"@@@ -40,8 +40,8 @@"service": "bot","name": "OpenVibe.Bot","origin": "https://openvibe.bot",-- "operations": 31,-- "capabilities": 11++ "operations": 32,++ "capabilities": 12},{"service": "chat",@@@ -180,8 +180,8 @@"service": "network","name": "OpenVibe.Network","origin": "https://openvibe.network",-- "operations": 70,-- "capabilities": 40++ "operations": 73,++ "capabilities": 43},{"service": "news",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Mail API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for 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"@@@ -16,6 +16,128 @@}],"paths": {++ "/api/v1/agents/register": {++ "post": {++ "operationId": "post_api_v1_agents_register",++ "summary": "A service or paired node registers only its own agents.",++ "description": "**network.agents.register** (first-party): A service or paired node registers only its own agents.",++ "tags": [++ "network.agents"++ ],++ "x-openvibe-capabilities": [++ "network.agents.register"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "admin",++ "security": [++ {++ "openvibeToken": [++ "network.agents.register"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/agent.directory-entry.v1"++ }++ }++ }++ },++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/agent.directory-entry.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/agents/tasks/{id}/result": {++ "post": {++ "operationId": "post_api_v1_agents_tasks_id_result",++ "summary": "Bot reports machine agent task results to Network.",++ "description": "**network.agents.relay** (first-party): Bot reports machine agent task results to Network.",++ "tags": [++ "network.agents"++ ],++ "x-openvibe-capabilities": [++ "network.agents.relay"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "admin",++ "security": [++ {++ "openvibeToken": [++ "network.agents.relay"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/agent.task-result.v1"++ }++ }++ }++ },++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/agent.task-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/creators/{creator}/analytics": {"get": {"operationId": "get_api_v1_creators_creator_analytics",@@@ -192,6 +314,62 @@}}},++ "/api/v1/link/self/access-requests": {++ "post": {++ "operationId": "post_api_v1_link_self_access_requests",++ "summary": "A paired node requests access to another machine.",++ "description": "**network.link.access.request** (first-party): A paired node requests access to another machine.",++ "tags": [++ "network.link"++ ],++ "x-openvibe-capabilities": [++ "network.link.access.request"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "admin",++ "security": [++ {++ "openvibeToken": [++ "network.link.access.request"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/link.access-request.v1"++ }++ }++ }++ },++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/link.access-request.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/link/self/capabilities": {"put": {"operationId": "put_api_v1_link_self_capabilities",@@@ -4377,6 +4555,156 @@}}},++ "agent.directory-entry.v1": {++ "title": "AgentDirectoryEntry",++ "description": "One discoverable A2A agent belonging to a person.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "owner",++ "kind",++ "name",++ "skills",++ "status",++ "allow_others",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "kind": {++ "enum": [++ "actor",++ "codes",++ "link-local",++ "chat-bot",++ "service"++ ]++ },++ "name": {++ "type": "string",++ "maxLength": 120++ },++ "machine_id": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "service": {++ "type": "string",++ "maxLength": 60++ },++ "endpoint": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "skills": {++ "type": "array",++ "items": {++ "type": "string",++ "maxLength": 120++ },++ "maxItems": 100++ },++ "status": {++ "enum": [++ "online",++ "busy",++ "offline"++ ]++ },++ "allow_others": {++ "type": "boolean"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },++ "agent.task-result.v1": {++ "title": "AgentTaskResult",++ "description": "Asynchronous A2A task status and optional result.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "thread",++ "status",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "thread": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "status": {++ "enum": [++ "pending",++ "running",++ "completed",++ "failed",++ "cancelled"++ ]++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "parts"++ ],++ "properties": {++ "role": {++ "enum": [++ "user",++ "agent"++ ]++ },++ "parts": {++ "type": "array",++ "minItems": 1,++ "maxItems": 20,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "text"++ ],++ "properties": {++ "type": {++ "const": "text"++ },++ "text": {++ "type": "string",++ "maxLength": 8000++ }++ }++ }++ }++ }++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": "string",++ "maxLength": 500++ }++ }++ },"ai.run-error.v1": {"title": "AiRunError","description": "ai.run-error@1: safe, actionable words for an AI or Actor run. Raw provider responses are never display text. The code map is shared across products.",@@@ -5404,6 +5732,90 @@}}},++ "link.access-request.v1": {++ "title": "LinkAccessRequest",++ "description": "A machine asks another for bounded access.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "from_principal",++ "to_principal",++ "from_owner",++ "to_owner",++ "scopes",++ "status",++ "requested_at",++ "expires_at",++ "duration_seconds"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"++ },++ "from_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_principal": {++ "type": "string",++ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from_owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "to_owner": {++ "type": "string",++ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "from_agent": {++ "type": "string",++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "scopes": {++ "type": "array",++ "minItems": 1,++ "uniqueItems": true,++ "items": {++ "enum": [++ "agent",++ "send",++ "screen",++ "desk",++ "computer",++ "worker"++ ]++ }++ },++ "reason": {++ "type": "string",++ "maxLength": 500++ },++ "status": {++ "enum": [++ "pending",++ "approved",++ "denied",++ "expired"++ ]++ },++ "requested_at": {++ "type": "string",++ "format": "date-time"++ },++ "expires_at": {++ "type": "string",++ "format": "date-time"++ },++ "duration_seconds": {++ "type": "integer",++ "minimum": 60,++ "maximum": 2592000++ }++ }++ },"modules.module-record.v1": {"title": "ModuleRecord","description": "One subject's value in one namespace, as returned by Network. revision increases by one on every write; a write names the revision it read (If-Match) and fails with 412 if it moved.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.408.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Play API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Quest API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Today API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Zone API",-- "version": "0.408.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for 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"@@@ -336244,3 +336244,1950 @@ export interface CompareComparison {}[];availability?: string[];}++++/** [email protected] (owner: network) */++/**++ * A machine asks another for bounded access.++ */++export interface LinkAccessRequest {++ id: string;++ from_principal: string;++ to_principal: string;++ from_owner: string;++ to_owner: string;++ from_agent?: string;++ /**++ * @minItems 1++ */++ scopes: [++ "agent" | "send" | "screen" | "desk" | "computer" | "worker",++ ...("agent" | "send" | "screen" | "desk" | "computer" | "worker")[]++ ];++ reason?: string;++ status: "pending" | "approved" | "denied" | "expired";++ requested_at: string;++ expires_at: string;++ duration_seconds: number;++}++++/** [email protected] (owner: network) */++/**++ * Approved machine access; null expiration is for same-owner agent or send only.++ */++export interface LinkAccessGrant {++ id: string;++ request_id?: string;++ from_principal: string;++ to_principal: string;++ /**++ * @minItems 1++ */++ scopes: [++ "agent" | "send" | "screen" | "desk" | "computer" | "worker",++ ...("agent" | "send" | "screen" | "desk" | "computer" | "worker")[]++ ];++ approved_by: string;++ created_at: string;++ expires_at: string | null;++ revoked_at: string | null;++}++++/** [email protected] (owner: network) */++/**++ * Claims of the signed grant JWT; target is audience, requester is subject.++ */++export interface LinkAccessGrantToken {++ iss: string;++ aud: string;++ sub: string;++ jti: string;++ grant_id: string;++ /**++ * @minItems 1++ */++ scopes: [++ "agent" | "send" | "screen" | "desk" | "computer" | "worker",++ ...("agent" | "send" | "screen" | "desk" | "computer" | "worker")[]++ ];++ iat: number;++ exp: number;++}++++/** [email protected] (owner: network) */++/**++ * One discoverable A2A agent belonging to a person.++ */++export interface AgentDirectoryEntry {++ id: string;++ owner: string;++ kind: "actor" | "codes" | "link-local" | "chat-bot" | "service";++ name: string;++ machine_id?: string;++ service?: string;++ endpoint?: string;++ /**++ * @maxItems 100++ */++ skills: string[];++ status: "online" | "busy" | "offline";++ allow_others: boolean;++ updated_at: string;++}++++/** [email protected] (owner: network) */++/**++ * A2A task with agent, person, thread and text parts limited to 8000 characters.++ */++export interface AgentTask {++ id?: string;++ to: string;++ from: string;++ on_behalf_of: string;++ thread: string;++ message: {++ role?: "user" | "agent";++ /**++ * @minItems 1++ * @maxItems 20++ */++ parts:++ | [++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ];++ };++ skillId?: string;++ created_at?: string;++}++++/** [email protected] (owner: network) */++/**++ * Asynchronous A2A task status and optional result.++ */++export interface AgentTaskResult {++ id: string;++ thread: string;++ status: "pending" | "running" | "completed" | "failed" | "cancelled";++ result?: {++ role?: "user" | "agent";++ /**++ * @minItems 1++ * @maxItems 20++ */++ parts:++ | [++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ]++ | [++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ },++ {++ type: "text";++ text: string;++ }++ ];++ };++ updated_at: string;++ error?: string;++}++++/** [email protected] (owner: network) */++/**++ * Machine access request was created.++ */++export interface NetworkLinkAccessRequestedPayload {++ request_id: string;++ from_principal: string;++ to_principal: string;++ at: string;++}++++/** [email protected] (owner: network) */++/**++ * Machine access request was answered or expired.++ */++export interface NetworkLinkAccessAnsweredPayload {++ request_id: string;++ status: "approved" | "denied" | "expired";++ grant_id?: string;++ at: string;++}++++/** [email protected] (owner: network) */++/**++ * Machine access grant was revoked.++ */++export interface NetworkLinkAccessRevokedPayload {++ grant_id: string;++ from_principal: string;++ to_principal: string;++ at: string;++}++++/** [email protected] (owner: network) */++/**++ * Agent task was created.++ */++export interface NetworkAgentTaskCreatedPayload {++ task_id: string;++ thread: string;++ from: string;++ to: string;++ at: string;++}++++/** [email protected] (owner: network) */++/**++ * Agent task status changed.++ */++export interface NetworkAgentTaskUpdatedPayload {++ task_id: string;++ thread: string;++ status: "pending" | "running" | "completed" | "failed" | "cancelled";++ at: string;++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "bot.machine.relay",++ "version": "1.0",++ "owner": "bot",++ "status": "active",++ "visibility": "first-party",++ "sensitive": true,++ "description": "Network relays grant-checked tasks and frames to a paired machine.",++ "permissions": [++ "agents:relay"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "admin",++ "events": [],++ "implementedBy": [++ "POST /api/v1/machines/:id/relay"++ ],++ "inputSchema": "agent.task@1",++ "outputSchema": "agent.task-result@1"++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "network.agents.register",++ "version": "1.0",++ "owner": "network",++ "status": "active",++ "visibility": "first-party",++ "sensitive": true,++ "description": "A service or paired node registers only its own agents.",++ "permissions": [++ "agents:register"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "admin",++ "events": [],++ "implementedBy": [++ "POST /api/v1/agents/register"++ ],++ "inputSchema": "agent.directory-entry@1",++ "outputSchema": "agent.directory-entry@1"++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "network.agents.relay",++ "version": "1.0",++ "owner": "network",++ "status": "active",++ "visibility": "first-party",++ "sensitive": true,++ "description": "Bot reports machine agent task results to Network.",++ "permissions": [++ "agents:relay"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "admin",++ "events": [],++ "implementedBy": [++ "POST /api/v1/agents/tasks/:id/result"++ ],++ "inputSchema": "agent.task-result@1",++ "outputSchema": "agent.task-result@1"++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "network.link.access.request",++ "version": "1.0",++ "owner": "network",++ "status": "active",++ "visibility": "first-party",++ "sensitive": true,++ "description": "A paired node requests access to another machine.",++ "permissions": [++ "nodes:self"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "admin",++ "events": [],++ "implementedBy": [++ "POST /api/v1/link/self/access-requests"++ ],++ "inputSchema": "link.access-request@1",++ "outputSchema": "link.access-request@1"++}@@@ -39,7 +39,8 @@"bot.resource.control","bot.desk.session","bot.machine.manage",-- "bot.machine.watch_link"++ "bot.machine.watch_link",++ "bot.machine.relay"],"eventsProduced": ["bot.robot.online",@@@ -50,7 +51,8 @@],"eventsConsumed": ["network.account.export_requested",-- "network.account.deleted"++ "network.account.deleted",++ "network.link.access.revoked"],"namespacesOwned": [],"lifecycle": {@@@ -90,7 +90,10 @@"network.machines.read","network.machines.manage","network.presence.read",-- "network.levels.award"++ "network.levels.award",++ "network.link.access.request",++ "network.agents.register",++ "network.agents.relay"],"eventsProduced": ["network.account.deleted",@@@ -122,7 +125,12 @@"share.transfer.requested","share.transfer.accepted","share.transfer.declined",-- "network.presence.changed"++ "network.presence.changed",++ "network.link.access.requested",++ "network.link.access.answered",++ "network.link.access.revoked",++ "network.agent.task.created",++ "network.agent.task.updated"],"eventsConsumed": ["billing.staff.action",@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.408.0",++ "version": "0.409.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.408.0",++ "version": "0.409.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.408.0",++ "version": "0.409.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",@@@ -15,7 +15,7 @@ const c = require('..');// bot.machine.manage: the machines hub (0.258.0, plan L34): Network fronts Bot for a person and for the apps that// person consented to; Bot stays the authority and checks the machine is that person's own.// bot.machine.watch_link: the owner's agent asks for a link that shows the desk it works on, inside a chat (plan L55).--const BOT_CAPABILITIES = ['bot.robot.read', 'bot.robot.manage', 'bot.robot.control', 'bot.computer.control', 'bot.machine.ai', 'bot.machine.manage', 'bot.machine.watch_link', 'bot.desk.session', 'bot.device.connect', 'bot.job.dispatch', 'bot.resource.read', 'bot.resource.control'];++const BOT_CAPABILITIES = ['bot.robot.read', 'bot.robot.manage', 'bot.robot.control', 'bot.computer.control', 'bot.machine.ai', 'bot.machine.manage', 'bot.machine.watch_link', 'bot.machine.relay', 'bot.desk.session', 'bot.device.connect', 'bot.job.dispatch', 'bot.resource.read', 'bot.resource.control'];const BOT_EVENTS = ['bot.robot.online', 'bot.robot.offline', 'bot.estop.set', 'bot.estop.cleared', 'bot.command.refused'];const bot = c.services.get('bot');
@@ -1,5 +1,9 @@
@@ -1,5 +1,9 @@
# Changelog
# Changelog
+## 0.409.0 — 2026-11-11
+
+- Define machine access requests, grants and signed token claims; the agent directory, A2A tasks and results; five Network events and four registration and relay capabilities.
+
## 0.408.0 — 2026-11-11
## 0.408.0 — 2026-11-11
The rest of the 0.407.0 train. v0.407.0 was tagged at #451's merge, before the train merged, so the tag holds #451
The rest of the 0.407.0 train. v0.407.0 was tagged at #451's merge, before the train merged, so the tag holds #451
new file mode 100644
new file mode 100644
@@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/directory-entry.v1.json",
+ "title": "AgentDirectoryEntry",
+ "description": "One discoverable A2A agent belonging to a person.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "owner",
+ "kind",
+ "name",
+ "skills",
+ "status",
+ "allow_others",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "kind": {
+ "enum": [
+ "actor",
+ "codes",
+ "link-local",
+ "chat-bot",
+ "service"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "machine_id": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "service": {
+ "type": "string",
+ "maxLength": 60
+ },
+ "endpoint": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "skills": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "maxItems": 100
+ },
+ "status": {
+ "enum": [
+ "online",
+ "busy",
+ "offline"
+ ]
+ },
+ "allow_others": {
+ "type": "boolean"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,78 @@
@@ -0,0 +1,78 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/task-result.v1.json",
+ "title": "AgentTaskResult",
+ "description": "Asynchronous A2A task status and optional result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "thread",
+ "status",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "running",
+ "completed",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,82 @@
@@ -0,0 +1,82 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/task.v1.json",
+ "title": "AgentTask",
+ "description": "A2A task with agent, person, thread and text parts limited to 8000 characters.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "to",
+ "from",
+ "on_behalf_of",
+ "thread",
+ "message"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "to": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "on_behalf_of": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "message": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "skillId": {
+ "type": "string",
+ "maxLength": 64
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
@@ -11474,6 +11474,105 @@
@@ -11474,6 +11474,105 @@
"visibility": "public",
"visibility": "public",
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
+ },
+ {
+ "id": "link.access-request",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "link/access-request.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "link.access-grant",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "link/access-grant.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "link.access-grant-token",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "link/access-grant-token.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "agent.directory-entry",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "agent/directory-entry.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "agent.task",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "agent/task.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "agent.task-result",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "agent/task-result.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "network.link.access.requested",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "events/payloads/network.link.access.requested.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "network.link.access.answered",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "events/payloads/network.link.access.answered.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "network.link.access.revoked",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "events/payloads/network.link.access.revoked.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "network.agent.task.created",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "events/payloads/network.agent.task.created.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "network.agent.task.updated",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "events/payloads/network.agent.task.updated.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.created.v1.json",
+ "title": "NetworkAgentTaskCreatedPayload",
+ "description": "Agent task was created.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task_id",
+ "thread",
+ "from",
+ "to",
+ "at"
+ ],
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.updated.v1.json",
+ "title": "NetworkAgentTaskUpdatedPayload",
+ "description": "Agent task status changed.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task_id",
+ "thread",
+ "status",
+ "at"
+ ],
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "running",
+ "completed",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.answered.v1.json",
+ "title": "NetworkLinkAccessAnsweredPayload",
+ "description": "Machine access request was answered or expired.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "request_id",
+ "status",
+ "at"
+ ],
+ "properties": {
+ "request_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "approved",
+ "denied",
+ "expired"
+ ]
+ },
+ "grant_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.requested.v1.json",
+ "title": "NetworkLinkAccessRequestedPayload",
+ "description": "Machine access request was created.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "request_id",
+ "from_principal",
+ "to_principal",
+ "at"
+ ],
+ "properties": {
+ "request_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,32 @@
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.revoked.v1.json",
+ "title": "NetworkLinkAccessRevokedPayload",
+ "description": "Machine access grant was revoked.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "grant_id",
+ "from_principal",
+ "to_principal",
+ "at"
+ ],
+ "properties": {
+ "grant_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,60 @@
@@ -0,0 +1,60 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/link/access-grant-token.v1.json",
+ "title": "LinkAccessGrantToken",
+ "description": "Claims of the signed grant JWT; target is audience, requester is subject.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "iss",
+ "aud",
+ "sub",
+ "jti",
+ "grant_id",
+ "scopes",
+ "iat",
+ "exp"
+ ],
+ "properties": {
+ "iss": {
+ "type": "string"
+ },
+ "aud": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "sub": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "jti": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "grant_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "iat": {
+ "type": "integer"
+ },
+ "exp": {
+ "type": "integer"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,81 @@
@@ -0,0 +1,81 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/link/access-grant.v1.json",
+ "title": "LinkAccessGrant",
+ "description": "Approved machine access; null expiration is for same-owner agent or send only.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "from_principal",
+ "to_principal",
+ "scopes",
+ "approved_by",
+ "created_at",
+ "expires_at",
+ "revoked_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "request_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "approved_by": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "expires_at": {
+ "oneOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "revoked_at": {
+ "oneOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,86 @@
@@ -0,0 +1,86 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/link/access-request.v1.json",
+ "title": "LinkAccessRequest",
+ "description": "A machine asks another for bounded access.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "from_principal",
+ "to_principal",
+ "from_owner",
+ "to_owner",
+ "scopes",
+ "status",
+ "requested_at",
+ "expires_at",
+ "duration_seconds"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from_owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from_agent": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "reason": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "approved",
+ "denied",
+ "expired"
+ ]
+ },
+ "requested_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "expires_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "duration_seconds": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 2592000
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "id": "agt_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "owner": "usr_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "kind": "link-local",
+ "name": "Codex",
+ "machine_id": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "skills": [
+ "code"
+ ],
+ "status": "online",
+ "allow_others": false,
+ "updated_at": "2026-11-11T00:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "id": "tsk_12345678",
+ "thread": "thr_12345678",
+ "status": "completed",
+ "result": {
+ "parts": [
+ {
+ "type": "text",
+ "text": "Done"
+ }
+ ]
+ },
+ "updated_at": "2026-11-11T00:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "to": "agt_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "from": "agt_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "on_behalf_of": "usr_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "thread": "thr_12345678",
+ "message": {
+ "role": "user",
+ "parts": [
+ {
+ "type": "text",
+ "text": "Hello"
+ }
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "iss": "https://openvibe.network",
+ "aud": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "sub": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "jti": "tok_12345678",
+ "grant_id": "grt_12345678",
+ "scopes": [
+ "agent"
+ ],
+ "iat": 1794355200,
+ "exp": 1794358800
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "id": "grt_12345678",
+ "request_id": "req_12345678",
+ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "scopes": [
+ "agent"
+ ],
+ "approved_by": "usr_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "created_at": "2026-11-11T00:00:00Z",
+ "expires_at": "2026-11-11T01:00:00Z",
+ "revoked_at": null
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
+{
+ "id": "req_12345678",
+ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "from_owner": "usr_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to_owner": "usr_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "scopes": [
+ "agent"
+ ],
+ "status": "pending",
+ "requested_at": "2026-11-11T00:00:00Z",
+ "expires_at": "2026-11-11T01:00:00Z",
+ "duration_seconds": 3600
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
+{
+ "task_id": "tsk_12345678",
+ "thread": "thr_12345678",
+ "from": "agt_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to": "agt_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "at": "2026-11-11T00:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "task_id": "tsk_12345678",
+ "thread": "thr_12345678",
+ "status": "completed",
+ "at": "2026-11-11T00:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "request_id": "req_12345678",
+ "status": "approved",
+ "grant_id": "grt_12345678",
+ "at": "2026-11-11T00:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "request_id": "req_12345678",
+ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "at": "2026-11-11T00:00:00Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1 @@
@@ -0,0 +1 @@
+{}
new file mode 100644
new file mode 100644
@@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
+{
+ "grant_id": "grt_12345678",
+ "from_principal": "lnk_AAAAAAAAAAAAAAAAAAAAAAAAAA",
+ "to_principal": "lnk_BBBBBBBBBBBBBBBBBBBBBBBBBB",
+ "at": "2026-11-11T00:00:00Z"
+}
@@ -130115,6 +130115,696 @@
@@ -130115,6 +130115,696 @@
"additionalProperties": false,
"additionalProperties": false,
"description": "A comparison of things by weighted criteria, with finite dated results and their public sources. Missing evidence is absent, never zero."
"description": "A comparison of things by weighted criteria, with finite dated results and their public sources. Missing evidence is absent, never zero."
}
}
+ },
+ "link.access-request": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/link/access-request.v1.json",
+ "title": "LinkAccessRequest",
+ "description": "A machine asks another for bounded access.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "from_principal",
+ "to_principal",
+ "from_owner",
+ "to_owner",
+ "scopes",
+ "status",
+ "requested_at",
+ "expires_at",
+ "duration_seconds"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from_owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from_agent": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "reason": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "approved",
+ "denied",
+ "expired"
+ ]
+ },
+ "requested_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "expires_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "duration_seconds": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 2592000
+ }
+ }
+ }
+ },
+ "link.access-grant": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/link/access-grant.v1.json",
+ "title": "LinkAccessGrant",
+ "description": "Approved machine access; null expiration is for same-owner agent or send only.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "from_principal",
+ "to_principal",
+ "scopes",
+ "approved_by",
+ "created_at",
+ "expires_at",
+ "revoked_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "request_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "approved_by": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "expires_at": {
+ "oneOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "revoked_at": {
+ "oneOf": [
+ {
+ "type": "string",
+ "format": "date-time"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "link.access-grant-token": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/link/access-grant-token.v1.json",
+ "title": "LinkAccessGrantToken",
+ "description": "Claims of the signed grant JWT; target is audience, requester is subject.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "iss",
+ "aud",
+ "sub",
+ "jti",
+ "grant_id",
+ "scopes",
+ "iat",
+ "exp"
+ ],
+ "properties": {
+ "iss": {
+ "type": "string"
+ },
+ "aud": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "sub": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "jti": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "grant_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "iat": {
+ "type": "integer"
+ },
+ "exp": {
+ "type": "integer"
+ }
+ }
+ }
+ },
+ "agent.directory-entry": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/directory-entry.v1.json",
+ "title": "AgentDirectoryEntry",
+ "description": "One discoverable A2A agent belonging to a person.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "owner",
+ "kind",
+ "name",
+ "skills",
+ "status",
+ "allow_others",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "kind": {
+ "enum": [
+ "actor",
+ "codes",
+ "link-local",
+ "chat-bot",
+ "service"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "machine_id": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "service": {
+ "type": "string",
+ "maxLength": 60
+ },
+ "endpoint": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "skills": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "maxItems": 100
+ },
+ "status": {
+ "enum": [
+ "online",
+ "busy",
+ "offline"
+ ]
+ },
+ "allow_others": {
+ "type": "boolean"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "agent.task": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/task.v1.json",
+ "title": "AgentTask",
+ "description": "A2A task with agent, person, thread and text parts limited to 8000 characters.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "to",
+ "from",
+ "on_behalf_of",
+ "thread",
+ "message"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "to": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "on_behalf_of": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "message": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "skillId": {
+ "type": "string",
+ "maxLength": 64
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "agent.task-result": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/agent/task-result.v1.json",
+ "title": "AgentTaskResult",
+ "description": "Asynchronous A2A task status and optional result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "thread",
+ "status",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "running",
+ "completed",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+ }
+ },
+ "network.link.access.requested": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.requested.v1.json",
+ "title": "NetworkLinkAccessRequestedPayload",
+ "description": "Machine access request was created.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "request_id",
+ "from_principal",
+ "to_principal",
+ "at"
+ ],
+ "properties": {
+ "request_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "network.link.access.answered": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.answered.v1.json",
+ "title": "NetworkLinkAccessAnsweredPayload",
+ "description": "Machine access request was answered or expired.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "request_id",
+ "status",
+ "at"
+ ],
+ "properties": {
+ "request_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "approved",
+ "denied",
+ "expired"
+ ]
+ },
+ "grant_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "network.link.access.revoked": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.link.access.revoked.v1.json",
+ "title": "NetworkLinkAccessRevokedPayload",
+ "description": "Machine access grant was revoked.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "grant_id",
+ "from_principal",
+ "to_principal",
+ "at"
+ ],
+ "properties": {
+ "grant_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "network.agent.task.created": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.created.v1.json",
+ "title": "NetworkAgentTaskCreatedPayload",
+ "description": "Agent task was created.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task_id",
+ "thread",
+ "from",
+ "to",
+ "at"
+ ],
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "network.agent.task.updated": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/events/payloads/network.agent.task.updated.v1.json",
+ "title": "NetworkAgentTaskUpdatedPayload",
+ "description": "Agent task status changed.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task_id",
+ "thread",
+ "status",
+ "at"
+ ],
+ "properties": {
+ "task_id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "running",
+ "completed",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -1022,6 +1022,72 @@
@@ -1022,6 +1022,72 @@
}
}
}
}
},
},
+ "/api/v1/machines/{id}/relay": {
+ "post": {
+ "operationId": "post_api_v1_machines_id_relay",
+ "summary": "Network relays grant-checked tasks and frames to a paired machine.",
+ "description": "**bot.machine.relay** (first-party): Network relays grant-checked tasks and frames to a paired machine.",
+ "tags": [
+ "bot.machine"
+ ],
+ "x-openvibe-capabilities": [
+ "bot.machine.relay"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "admin",
+ "security": [
+ {
+ "openvibeToken": [
+ "bot.machine.relay"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/agent.task.v1"
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/agent.task-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/machines/{id}/revoke": {
"/api/v1/machines/{id}/revoke": {
"post": {
"post": {
"operationId": "post_api_v1_machines_id_revoke",
"operationId": "post_api_v1_machines_id_revoke",
@@ -2302,6 +2368,162 @@
@@ -2302,6 +2368,162 @@
},
},
"components": {
"components": {
"schemas": {
"schemas": {
+ "agent.task-result.v1": {
+ "title": "AgentTaskResult",
+ "description": "Asynchronous A2A task status and optional result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "thread",
+ "status",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "running",
+ "completed",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+ },
+ "agent.task.v1": {
+ "title": "AgentTask",
+ "description": "A2A task with agent, person, thread and text parts limited to 8000 characters.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "to",
+ "from",
+ "on_behalf_of",
+ "thread",
+ "message"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "to": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "on_behalf_of": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "message": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "skillId": {
+ "type": "string",
+ "maxLength": 64
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
"bot.desk-lease-create-request.v1": {
"bot.desk-lease-create-request.v1": {
"title": "BotDeskLeaseCreateRequest",
"title": "BotDeskLeaseCreateRequest",
"description": "bot.desk-lease-create-request@1 (the Desks plan's D6): the body of POST /api/v1/machines/{id}/desk-leases on OpenVibe.Bot (capability bot.desk.session), answered 201 with bot.desk-lease@1. DESK is the name Run chose for the session (unique per session); a desk already leased to another session, or running for the machine's owner, is refused 409 bot.desk_busy, and a repeat for the same session answers its lease (200). A machine with no room (its max_desks) is refused 409 bot.machine_busy, one that is offline 409 bot.device_offline, and one the person may not use 404 bot.device_not_found.",
"description": "bot.desk-lease-create-request@1 (the Desks plan's D6): the body of POST /api/v1/machines/{id}/desk-leases on OpenVibe.Bot (capability bot.desk.session), answered 201 with bot.desk-lease@1. DESK is the name Run chose for the session (unique per session); a desk already leased to another session, or running for the machine's owner, is refused 409 bot.desk_busy, and a repeat for the same session answers its lease (200). A machine with no room (its max_desks) is refused 409 bot.machine_busy, one that is offline 409 bot.device_offline, and one the person may not use 404 bot.device_not_found.",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Codes API",
"title": "OpenVibe.Codes API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe Connect API",
"title": "OpenVibe Connect API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Design API",
"title": "OpenVibe.Design API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Exchange API",
"title": "OpenVibe.Exchange API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Exchange as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Git API",
"title": "OpenVibe.Git API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Git as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -40,8 +40,8 @@
@@ -40,8 +40,8 @@
"service": "bot",
"service": "bot",
"name": "OpenVibe.Bot",
"name": "OpenVibe.Bot",
"origin": "https://openvibe.bot",
"origin": "https://openvibe.bot",
- "operations": 31,
- "capabilities": 11
+ "operations": 32,
+ "capabilities": 12
},
},
{
{
"service": "chat",
"service": "chat",
@@ -180,8 +180,8 @@
@@ -180,8 +180,8 @@
"service": "network",
"service": "network",
"name": "OpenVibe.Network",
"name": "OpenVibe.Network",
"origin": "https://openvibe.network",
"origin": "https://openvibe.network",
- "operations": 70,
- "capabilities": 40
+ "operations": 73,
+ "capabilities": 43
},
},
{
{
"service": "news",
"service": "news",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Mail API",
"title": "OpenVibe.Mail API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Mail as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -16,6 +16,128 @@
@@ -16,6 +16,128 @@
}
}
],
],
"paths": {
"paths": {
+ "/api/v1/agents/register": {
+ "post": {
+ "operationId": "post_api_v1_agents_register",
+ "summary": "A service or paired node registers only its own agents.",
+ "description": "**network.agents.register** (first-party): A service or paired node registers only its own agents.",
+ "tags": [
+ "network.agents"
+ ],
+ "x-openvibe-capabilities": [
+ "network.agents.register"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "admin",
+ "security": [
+ {
+ "openvibeToken": [
+ "network.agents.register"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/agent.directory-entry.v1"
+ }
+ }
+ }
+ },
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/agent.directory-entry.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/agents/tasks/{id}/result": {
+ "post": {
+ "operationId": "post_api_v1_agents_tasks_id_result",
+ "summary": "Bot reports machine agent task results to Network.",
+ "description": "**network.agents.relay** (first-party): Bot reports machine agent task results to Network.",
+ "tags": [
+ "network.agents"
+ ],
+ "x-openvibe-capabilities": [
+ "network.agents.relay"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "admin",
+ "security": [
+ {
+ "openvibeToken": [
+ "network.agents.relay"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/agent.task-result.v1"
+ }
+ }
+ }
+ },
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/agent.task-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/creators/{creator}/analytics": {
"/api/v1/creators/{creator}/analytics": {
"get": {
"get": {
"operationId": "get_api_v1_creators_creator_analytics",
"operationId": "get_api_v1_creators_creator_analytics",
@@ -192,6 +314,62 @@
@@ -192,6 +314,62 @@
}
}
}
}
},
},
+ "/api/v1/link/self/access-requests": {
+ "post": {
+ "operationId": "post_api_v1_link_self_access_requests",
+ "summary": "A paired node requests access to another machine.",
+ "description": "**network.link.access.request** (first-party): A paired node requests access to another machine.",
+ "tags": [
+ "network.link"
+ ],
+ "x-openvibe-capabilities": [
+ "network.link.access.request"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "admin",
+ "security": [
+ {
+ "openvibeToken": [
+ "network.link.access.request"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/link.access-request.v1"
+ }
+ }
+ }
+ },
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/link.access-request.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/link/self/capabilities": {
"/api/v1/link/self/capabilities": {
"put": {
"put": {
"operationId": "put_api_v1_link_self_capabilities",
"operationId": "put_api_v1_link_self_capabilities",
@@ -4377,6 +4555,156 @@
@@ -4377,6 +4555,156 @@
}
}
}
}
},
},
+ "agent.directory-entry.v1": {
+ "title": "AgentDirectoryEntry",
+ "description": "One discoverable A2A agent belonging to a person.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "owner",
+ "kind",
+ "name",
+ "skills",
+ "status",
+ "allow_others",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "kind": {
+ "enum": [
+ "actor",
+ "codes",
+ "link-local",
+ "chat-bot",
+ "service"
+ ]
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "machine_id": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "service": {
+ "type": "string",
+ "maxLength": 60
+ },
+ "endpoint": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "skills": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "maxLength": 120
+ },
+ "maxItems": 100
+ },
+ "status": {
+ "enum": [
+ "online",
+ "busy",
+ "offline"
+ ]
+ },
+ "allow_others": {
+ "type": "boolean"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
+ "agent.task-result.v1": {
+ "title": "AgentTaskResult",
+ "description": "Asynchronous A2A task status and optional result.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "thread",
+ "status",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "thread": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "running",
+ "completed",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "parts"
+ ],
+ "properties": {
+ "role": {
+ "enum": [
+ "user",
+ "agent"
+ ]
+ },
+ "parts": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 20,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "text"
+ ],
+ "properties": {
+ "type": {
+ "const": "text"
+ },
+ "text": {
+ "type": "string",
+ "maxLength": 8000
+ }
+ }
+ }
+ }
+ }
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+ },
"ai.run-error.v1": {
"ai.run-error.v1": {
"title": "AiRunError",
"title": "AiRunError",
"description": "ai.run-error@1: safe, actionable words for an AI or Actor run. Raw provider responses are never display text. The code map is shared across products.",
"description": "ai.run-error@1: safe, actionable words for an AI or Actor run. Raw provider responses are never display text. The code map is shared across products.",
@@ -5404,6 +5732,90 @@
@@ -5404,6 +5732,90 @@
}
}
}
}
},
},
+ "link.access-request.v1": {
+ "title": "LinkAccessRequest",
+ "description": "A machine asks another for bounded access.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "from_principal",
+ "to_principal",
+ "from_owner",
+ "to_owner",
+ "scopes",
+ "status",
+ "requested_at",
+ "expires_at",
+ "duration_seconds"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^[a-z]{3}_[A-Za-z0-9_-]{8,80}$"
+ },
+ "from_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_principal": {
+ "type": "string",
+ "pattern": "^lnk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from_owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "to_owner": {
+ "type": "string",
+ "pattern": "^usr_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "from_agent": {
+ "type": "string",
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "scopes": {
+ "type": "array",
+ "minItems": 1,
+ "uniqueItems": true,
+ "items": {
+ "enum": [
+ "agent",
+ "send",
+ "screen",
+ "desk",
+ "computer",
+ "worker"
+ ]
+ }
+ },
+ "reason": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "status": {
+ "enum": [
+ "pending",
+ "approved",
+ "denied",
+ "expired"
+ ]
+ },
+ "requested_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "expires_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "duration_seconds": {
+ "type": "integer",
+ "minimum": 60,
+ "maximum": 2592000
+ }
+ }
+ },
"modules.module-record.v1": {
"modules.module-record.v1": {
"title": "ModuleRecord",
"title": "ModuleRecord",
"description": "One subject's value in one namespace, as returned by Network. revision increases by one on every write; a write names the revision it read (If-Match) and fails with 412 if it moved.",
"description": "One subject's value in one namespace, as returned by Network. revision increases by one on every write; a write names the revision it read (If-Match) and fails with 412 if it moved.",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.408.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Play API",
"title": "OpenVibe.Play API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Quest API",
"title": "OpenVibe.Quest API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"title": "OpenVibe.Report API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"title": "OpenVibe.Today API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Zone API",
"title": "OpenVibe.Zone API",
- "version": "0.408.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.408.0): each operation lists the capabilities it performs; a token for 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.409.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.409.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -336244,3 +336244,1950 @@ export interface CompareComparison {
@@ -336244,3 +336244,1950 @@ export interface CompareComparison {
}[];
}[];
availability?: string[];
availability?: string[];
}
}
+
+/** [email protected] (owner: network) */
+/**
+ * A machine asks another for bounded access.
+ */
+export interface LinkAccessRequest {
+ id: string;
+ from_principal: string;
+ to_principal: string;
+ from_owner: string;
+ to_owner: string;
+ from_agent?: string;
+ /**
+ * @minItems 1
+ */
+ scopes: [
+ "agent" | "send" | "screen" | "desk" | "computer" | "worker",
+ ...("agent" | "send" | "screen" | "desk" | "computer" | "worker")[]
+ ];
+ reason?: string;
+ status: "pending" | "approved" | "denied" | "expired";
+ requested_at: string;
+ expires_at: string;
+ duration_seconds: number;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Approved machine access; null expiration is for same-owner agent or send only.
+ */
+export interface LinkAccessGrant {
+ id: string;
+ request_id?: string;
+ from_principal: string;
+ to_principal: string;
+ /**
+ * @minItems 1
+ */
+ scopes: [
+ "agent" | "send" | "screen" | "desk" | "computer" | "worker",
+ ...("agent" | "send" | "screen" | "desk" | "computer" | "worker")[]
+ ];
+ approved_by: string;
+ created_at: string;
+ expires_at: string | null;
+ revoked_at: string | null;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Claims of the signed grant JWT; target is audience, requester is subject.
+ */
+export interface LinkAccessGrantToken {
+ iss: string;
+ aud: string;
+ sub: string;
+ jti: string;
+ grant_id: string;
+ /**
+ * @minItems 1
+ */
+ scopes: [
+ "agent" | "send" | "screen" | "desk" | "computer" | "worker",
+ ...("agent" | "send" | "screen" | "desk" | "computer" | "worker")[]
+ ];
+ iat: number;
+ exp: number;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * One discoverable A2A agent belonging to a person.
+ */
+export interface AgentDirectoryEntry {
+ id: string;
+ owner: string;
+ kind: "actor" | "codes" | "link-local" | "chat-bot" | "service";
+ name: string;
+ machine_id?: string;
+ service?: string;
+ endpoint?: string;
+ /**
+ * @maxItems 100
+ */
+ skills: string[];
+ status: "online" | "busy" | "offline";
+ allow_others: boolean;
+ updated_at: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * A2A task with agent, person, thread and text parts limited to 8000 characters.
+ */
+export interface AgentTask {
+ id?: string;
+ to: string;
+ from: string;
+ on_behalf_of: string;
+ thread: string;
+ message: {
+ role?: "user" | "agent";
+ /**
+ * @minItems 1
+ * @maxItems 20
+ */
+ parts:
+ | [
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ];
+ };
+ skillId?: string;
+ created_at?: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Asynchronous A2A task status and optional result.
+ */
+export interface AgentTaskResult {
+ id: string;
+ thread: string;
+ status: "pending" | "running" | "completed" | "failed" | "cancelled";
+ result?: {
+ role?: "user" | "agent";
+ /**
+ * @minItems 1
+ * @maxItems 20
+ */
+ parts:
+ | [
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ]
+ | [
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ },
+ {
+ type: "text";
+ text: string;
+ }
+ ];
+ };
+ updated_at: string;
+ error?: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Machine access request was created.
+ */
+export interface NetworkLinkAccessRequestedPayload {
+ request_id: string;
+ from_principal: string;
+ to_principal: string;
+ at: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Machine access request was answered or expired.
+ */
+export interface NetworkLinkAccessAnsweredPayload {
+ request_id: string;
+ status: "approved" | "denied" | "expired";
+ grant_id?: string;
+ at: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Machine access grant was revoked.
+ */
+export interface NetworkLinkAccessRevokedPayload {
+ grant_id: string;
+ from_principal: string;
+ to_principal: string;
+ at: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Agent task was created.
+ */
+export interface NetworkAgentTaskCreatedPayload {
+ task_id: string;
+ thread: string;
+ from: string;
+ to: string;
+ at: string;
+}
+
+/** [email protected] (owner: network) */
+/**
+ * Agent task status changed.
+ */
+export interface NetworkAgentTaskUpdatedPayload {
+ task_id: string;
+ thread: string;
+ status: "pending" | "running" | "completed" | "failed" | "cancelled";
+ at: string;
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "bot.machine.relay",
+ "version": "1.0",
+ "owner": "bot",
+ "status": "active",
+ "visibility": "first-party",
+ "sensitive": true,
+ "description": "Network relays grant-checked tasks and frames to a paired machine.",
+ "permissions": [
+ "agents:relay"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "admin",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/machines/:id/relay"
+ ],
+ "inputSchema": "agent.task@1",
+ "outputSchema": "agent.task-result@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "network.agents.register",
+ "version": "1.0",
+ "owner": "network",
+ "status": "active",
+ "visibility": "first-party",
+ "sensitive": true,
+ "description": "A service or paired node registers only its own agents.",
+ "permissions": [
+ "agents:register"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "admin",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/agents/register"
+ ],
+ "inputSchema": "agent.directory-entry@1",
+ "outputSchema": "agent.directory-entry@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "network.agents.relay",
+ "version": "1.0",
+ "owner": "network",
+ "status": "active",
+ "visibility": "first-party",
+ "sensitive": true,
+ "description": "Bot reports machine agent task results to Network.",
+ "permissions": [
+ "agents:relay"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "admin",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/agents/tasks/:id/result"
+ ],
+ "inputSchema": "agent.task-result@1",
+ "outputSchema": "agent.task-result@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "network.link.access.request",
+ "version": "1.0",
+ "owner": "network",
+ "status": "active",
+ "visibility": "first-party",
+ "sensitive": true,
+ "description": "A paired node requests access to another machine.",
+ "permissions": [
+ "nodes:self"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "admin",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/link/self/access-requests"
+ ],
+ "inputSchema": "link.access-request@1",
+ "outputSchema": "link.access-request@1"
+}
@@ -39,7 +39,8 @@
@@ -39,7 +39,8 @@
"bot.resource.control",
"bot.resource.control",
"bot.desk.session",
"bot.desk.session",
"bot.machine.manage",
"bot.machine.manage",
- "bot.machine.watch_link"
+ "bot.machine.watch_link",
+ "bot.machine.relay"
],
],
"eventsProduced": [
"eventsProduced": [
"bot.robot.online",
"bot.robot.online",
@@ -50,7 +51,8 @@
@@ -50,7 +51,8 @@
],
],
"eventsConsumed": [
"eventsConsumed": [
"network.account.export_requested",
"network.account.export_requested",
- "network.account.deleted"
+ "network.account.deleted",
+ "network.link.access.revoked"
],
],
"namespacesOwned": [],
"namespacesOwned": [],
"lifecycle": {
"lifecycle": {
@@ -90,7 +90,10 @@
@@ -90,7 +90,10 @@
"network.machines.read",
"network.machines.read",
"network.machines.manage",
"network.machines.manage",
"network.presence.read",
"network.presence.read",
- "network.levels.award"
+ "network.levels.award",
+ "network.link.access.request",
+ "network.agents.register",
+ "network.agents.relay"
],
],
"eventsProduced": [
"eventsProduced": [
"network.account.deleted",
"network.account.deleted",
@@ -122,7 +125,12 @@
@@ -122,7 +125,12 @@
"share.transfer.requested",
"share.transfer.requested",
"share.transfer.accepted",
"share.transfer.accepted",
"share.transfer.declined",
"share.transfer.declined",
- "network.presence.changed"
+ "network.presence.changed",
+ "network.link.access.requested",
+ "network.link.access.answered",
+ "network.link.access.revoked",
+ "network.agent.task.created",
+ "network.agent.task.updated"
],
],
"eventsConsumed": [
"eventsConsumed": [
"billing.staff.action",
"billing.staff.action",
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.408.0",
+ "version": "0.409.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.408.0",
+ "version": "0.409.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.408.0",
+ "version": "0.409.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",
@@ -15,7 +15,7 @@ const c = require('..');
@@ -15,7 +15,7 @@ const c = require('..');
// bot.machine.manage: the machines hub (0.258.0, plan L34): Network fronts Bot for a person and for the apps that
// bot.machine.manage: the machines hub (0.258.0, plan L34): Network fronts Bot for a person and for the apps that
// person consented to; Bot stays the authority and checks the machine is that person's own.
// person consented to; Bot stays the authority and checks the machine is that person's own.
// bot.machine.watch_link: the owner's agent asks for a link that shows the desk it works on, inside a chat (plan L55).
// bot.machine.watch_link: the owner's agent asks for a link that shows the desk it works on, inside a chat (plan L55).
-const BOT_CAPABILITIES = ['bot.robot.read', 'bot.robot.manage', 'bot.robot.control', 'bot.computer.control', 'bot.machine.ai', 'bot.machine.manage', 'bot.machine.watch_link', 'bot.desk.session', 'bot.device.connect', 'bot.job.dispatch', 'bot.resource.read', 'bot.resource.control'];
+const BOT_CAPABILITIES = ['bot.robot.read', 'bot.robot.manage', 'bot.robot.control', 'bot.computer.control', 'bot.machine.ai', 'bot.machine.manage', 'bot.machine.watch_link', 'bot.machine.relay', 'bot.desk.session', 'bot.device.connect', 'bot.job.dispatch', 'bot.resource.read', 'bot.resource.control'];
const BOT_EVENTS = ['bot.robot.online', 'bot.robot.offline', 'bot.estop.set', 'bot.estop.cleared', 'bot.command.refused'];
const BOT_EVENTS = ['bot.robot.online', 'bot.robot.offline', 'bot.estop.set', 'bot.estop.cleared', 'bot.command.refused'];
const bot = c.services.get('bot');
const bot = c.services.get('bot');