openvibers/openvibe.contracts Commits
0.229.0: the Action Center (common.action-item@1, common.action-list-result@1, network.me-actions-result@1; actor/codes/ai.actions.read, actor.approval.decide, network.actions.read) (#237)
Changes
@@@ -4,6 +4,18 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,the notes were in the tag and commit messages (`git tag -n1`).++## 0.229.0 — 2026-10-28++++- **The Action Center** (plan 2026-10-28 §3.10, NOTIF-5): one list of a person's agent work on every site.++ - `common.action-item@1`: one item (an agent task, a coding task, an AI run, an approval), with its bucket++ (running, waiting, scheduled, done, failed), state, cost in USD, steps, error, page and the actions it allows.++ - `common.action-list-result@1`: one authority's items for a person. Served by Actor, Codes and AI at++ `GET /api/v1/actions?subject=usr_…` under the new first-party capabilities `actor.actions.read`,++ `codes.actions.read` and `ai.actions.read`, which are granted to Network only.++ - `actor.approval.decide`: Network approves or declines an Actor approval for its person.++ - `network.actions.read` and `network.me-actions-result@1`: `GET /api/v1/me/actions` merges them with Network's++ own confirmations into the five buckets, and `POST /api/v1/me/actions/:service/:id/:action` acts on one.++## 0.228.0 — 2026-10-28- **OpenVibe.Design** (`design`, live at openvibe.design, port 5090; plan 2026-10-28 §5.2, the Design room). v1 is the@@@ -7595,6 +7595,33 @@"compatibility": "backward","status": "active","adr": "ADR-043"++ },++ {++ "id": "common.action-item",++ "version": "1.0.0",++ "owner": "contracts",++ "schema": "common/action-item.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "common.action-list-result",++ "version": "1.0.0",++ "owner": "contracts",++ "schema": "common/action-list-result.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "network.me-actions-result",++ "version": "1.0.0",++ "owner": "network",++ "schema": "network/me-actions-result.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,147 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/common/action-item.v1.json",++ "title": "ActionItem",++ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "service",++ "id",++ "kind",++ "title",++ "bucket",++ "state",++ "created_at",++ "updated_at",++ "href",++ "actions"++ ],++ "properties": {++ "service": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ],++ "description": "The authority that owns the item."++ },++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80,++ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."++ },++ "kind": {++ "enum": [++ "agent_task",++ "code_task",++ "ai_run",++ "approval",++ "desk_session"++ ],++ "description": "What the item is."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 160,++ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."++ },++ "summary": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "The last step, the outcome, or what will happen on approval."++ },++ "bucket": {++ "enum": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."++ },++ "state": {++ "type": "string",++ "minLength": 1,++ "maxLength": 32,++ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 80,++ "description": "The agent, model or workflow doing it, when known."++ },++ "cost_usd": {++ "type": [++ "number",++ "null"++ ],++ "minimum": 0,++ "description": "What it cost the person, in US dollars; null when unknown or free."++ },++ "steps": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0,++ "description": "Tool calls or steps so far, when counted."++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "Why it failed, in words a person can act on."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "next_run_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When a scheduled item runs next."++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "The item's page: its live steps, receipt or approval."++ },++ "actions": {++ "type": "array",++ "maxItems": 4,++ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",++ "items": {++ "enum": [++ "open",++ "approve",++ "decline",++ "cancel",++ "retry"++ ]++ }++ }++ }++}nnew file mode 100644@@@ -0,0 +1,20 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/common/action-list-result.v1.json",++ "title": "ActionListResult",++ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "items"++ ],++ "properties": {++ "items": {++ "type": "array",++ "maxItems": 50,++ "items": {++ "$ref": "action-item.v1.json"++ }++ }++ }++}nnew file mode 100644@@@ -0,0 +1,120 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/network/me-actions-result.v1.json",++ "title": "MeActionsResult",++ "description": "The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "buckets",++ "counts",++ "sources",++ "partial",++ "generated_at"++ ],++ "properties": {++ "buckets": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "properties": {++ "running": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "waiting": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "scheduled": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "done": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "failed": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ }++ }++ },++ "counts": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "properties": {++ "running": {++ "type": "integer",++ "minimum": 0++ },++ "waiting": {++ "type": "integer",++ "minimum": 0++ },++ "scheduled": {++ "type": "integer",++ "minimum": 0++ },++ "done": {++ "type": "integer",++ "minimum": 0++ },++ "failed": {++ "type": "integer",++ "minimum": 0++ }++ }++ },++ "sources": {++ "type": "object",++ "propertyNames": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ]++ },++ "additionalProperties": {++ "enum": [++ "ok",++ "unavailable",++ "timeout",++ "not_connected"++ ]++ }++ },++ "partial": {++ "type": "boolean"++ },++ "generated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "service": "actor",++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "agent_task",++ "title": "Find three cheap flights to Lisbon",++ "summary": "Read 4 pages; comparing prices",++ "bucket": "running",++ "state": "running",++ "agent": "deepseek-flash",++ "cost_usd": 0.004,++ "steps": 6,++ "error": null,++ "created_at": "2026-10-28T14:00:00Z",++ "updated_at": "2026-10-28T14:02:10Z",++ "next_run_at": null,++ "href": "http://openvibe.actor/tasks/x",++ "actions": [++ "open",++ "cancel"++ ]++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "service": "actor",++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "agent_task",++ "title": "Find three cheap flights to Lisbon",++ "summary": "Read 4 pages; comparing prices",++ "bucket": "paused",++ "state": "running",++ "agent": "deepseek-flash",++ "cost_usd": 0.004,++ "steps": 6,++ "error": null,++ "created_at": "2026-10-28T14:00:00Z",++ "updated_at": "2026-10-28T14:02:10Z",++ "next_run_at": null,++ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "actions": [++ "open",++ "cancel"++ ]++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "service": "network",++ "id": "cnf_01JAB2C3D4E5F6G7H8J9K0MNPR",++ "kind": "approval",++ "title": "Send an email to the venue",++ "summary": "Your agent asks to send one email from your account",++ "bucket": "waiting",++ "state": "pending",++ "created_at": "2026-10-28T14:00:00Z",++ "updated_at": "2026-10-28T14:00:00Z",++ "href": "https://openvibe.network/my#approvals",++ "actions": [++ "approve",++ "decline",++ "open"++ ]++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "service": "actor",++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "agent_task",++ "title": "Find three cheap flights to Lisbon",++ "summary": "Read 4 pages; comparing prices",++ "bucket": "running",++ "state": "running",++ "agent": "deepseek-flash",++ "cost_usd": 0.004,++ "steps": 6,++ "error": null,++ "created_at": "2026-10-28T14:00:00Z",++ "updated_at": "2026-10-28T14:02:10Z",++ "next_run_at": null,++ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "actions": [++ "open",++ "cancel"++ ]++}nnew file mode 100644@@@ -0,0 +1 @@++{}nnew file mode 100644@@@ -0,0 +1,25 @@++{++ "items": [++ {++ "service": "actor",++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "agent_task",++ "title": "Find three cheap flights to Lisbon",++ "summary": "Read 4 pages; comparing prices",++ "bucket": "running",++ "state": "running",++ "agent": "deepseek-flash",++ "cost_usd": 0.004,++ "steps": 6,++ "error": null,++ "created_at": "2026-10-28T14:00:00Z",++ "updated_at": "2026-10-28T14:02:10Z",++ "next_run_at": null,++ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "actions": [++ "open",++ "cancel"++ ]++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,15 @@++{++ "buckets": {++ "running": []++ },++ "counts": {++ "running": 0,++ "waiting": 0,++ "scheduled": 0,++ "done": 0,++ "failed": 0++ },++ "sources": {},++ "partial": false,++ "generated_at": "2026-10-28T14:02:11Z"++}nnew file mode 100644@@@ -0,0 +1,46 @@++{++ "buckets": {++ "running": [++ {++ "service": "actor",++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "kind": "agent_task",++ "title": "Find three cheap flights to Lisbon",++ "summary": "Read 4 pages; comparing prices",++ "bucket": "running",++ "state": "running",++ "agent": "deepseek-flash",++ "cost_usd": 0.004,++ "steps": 6,++ "error": null,++ "created_at": "2026-10-28T14:00:00Z",++ "updated_at": "2026-10-28T14:02:10Z",++ "next_run_at": null,++ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "actions": [++ "open",++ "cancel"++ ]++ }++ ],++ "waiting": [],++ "scheduled": [],++ "done": [],++ "failed": []++ },++ "counts": {++ "running": 1,++ "waiting": 0,++ "scheduled": 0,++ "done": 0,++ "failed": 0++ },++ "sources": {++ "actor": "ok",++ "codes": "timeout",++ "ai": "ok",++ "network": "ok"++ },++ "partial": true,++ "generated_at": "2026-10-28T14:02:11Z"++}@@@ -85278,6 +85278,308 @@}}}++ },++ "common.action-item": {++ "version": "1.0.0",++ "owner": "contracts",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/common/action-item.v1.json",++ "title": "ActionItem",++ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "service",++ "id",++ "kind",++ "title",++ "bucket",++ "state",++ "created_at",++ "updated_at",++ "href",++ "actions"++ ],++ "properties": {++ "service": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ],++ "description": "The authority that owns the item."++ },++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80,++ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."++ },++ "kind": {++ "enum": [++ "agent_task",++ "code_task",++ "ai_run",++ "approval",++ "desk_session"++ ],++ "description": "What the item is."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 160,++ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."++ },++ "summary": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "The last step, the outcome, or what will happen on approval."++ },++ "bucket": {++ "enum": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."++ },++ "state": {++ "type": "string",++ "minLength": 1,++ "maxLength": 32,++ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 80,++ "description": "The agent, model or workflow doing it, when known."++ },++ "cost_usd": {++ "type": [++ "number",++ "null"++ ],++ "minimum": 0,++ "description": "What it cost the person, in US dollars; null when unknown or free."++ },++ "steps": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0,++ "description": "Tool calls or steps so far, when counted."++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "Why it failed, in words a person can act on."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "next_run_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When a scheduled item runs next."++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "The item's page: its live steps, receipt or approval."++ },++ "actions": {++ "type": "array",++ "maxItems": 4,++ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",++ "items": {++ "enum": [++ "open",++ "approve",++ "decline",++ "cancel",++ "retry"++ ]++ }++ }++ }++ }++ },++ "common.action-list-result": {++ "version": "1.0.0",++ "owner": "contracts",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/common/action-list-result.v1.json",++ "title": "ActionListResult",++ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "items"++ ],++ "properties": {++ "items": {++ "type": "array",++ "maxItems": 50,++ "items": {++ "$ref": "action-item.v1.json"++ }++ }++ }++ }++ },++ "network.me-actions-result": {++ "version": "1.0.0",++ "owner": "network",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/network/me-actions-result.v1.json",++ "title": "MeActionsResult",++ "description": "The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "buckets",++ "counts",++ "sources",++ "partial",++ "generated_at"++ ],++ "properties": {++ "buckets": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "properties": {++ "running": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "waiting": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "scheduled": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "done": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ },++ "failed": {++ "type": "array",++ "items": {++ "$ref": "../common/action-item.v1.json"++ }++ }++ }++ },++ "counts": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "properties": {++ "running": {++ "type": "integer",++ "minimum": 0++ },++ "waiting": {++ "type": "integer",++ "minimum": 0++ },++ "scheduled": {++ "type": "integer",++ "minimum": 0++ },++ "done": {++ "type": "integer",++ "minimum": 0++ },++ "failed": {++ "type": "integer",++ "minimum": 0++ }++ }++ },++ "sources": {++ "type": "object",++ "propertyNames": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ]++ },++ "additionalProperties": {++ "enum": [++ "ok",++ "unavailable",++ "timeout",++ "not_connected"++ ]++ }++ },++ "partial": {++ "type": "boolean"++ },++ "generated_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.228.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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,52 @@}],"paths": {++ "/api/v1/actions": {++ "get": {++ "operationId": "get_api_v1_actions",++ "summary": "Read one person's Action Center items from OpenVibe.Actor (plan 2026-10-28 §3.10): agent tasks (running, needing the person, done or failed), pending approvals, and personal agents' next scheduled run",++ "description": "**actor.actions.read** (first-party): Read one person's Action Center items from OpenVibe.Actor (plan 2026-10-28 §3.10): agent tasks (running, needing the person, done or failed), pending approvals, and personal agents' next scheduled runs, as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",++ "tags": [++ "actor.actions"++ ],++ "x-openvibe-capabilities": [++ "actor.actions.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "actor.actions.read"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/common.action-list-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/agents": {"get": {"operationId": "get_api_v1_agents",@@@ -62,6 +108,62 @@}}},++ "/api/v1/approvals/{id}/decide": {++ "post": {++ "operationId": "post_api_v1_approvals_id_decide",++ "summary": "Approve or decline a pending OpenVibe.Actor approval for its person (plan 2026-10-28 §3.10): POST /api/v1/approvals/:id/decide { decision: approve | decline } with a service token and X-OV-Subject nam",++ "description": "**actor.approval.decide** (first-party): Approve or decline a pending OpenVibe.Actor approval for its person (plan 2026-10-28 §3.10): POST /api/v1/approvals/:id/decide { decision: approve | decline } with a service token and X-OV-Subject naming the approval's owner, the same decision the person makes on /me/approvals. Granted to OpenVibe.Network, which acts from the Action Center for the signed-in person.",++ "tags": [++ "actor.approval"++ ],++ "x-openvibe-capabilities": [++ "actor.approval.decide"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "actor.approval.decide"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/me/agents": {"get": {"operationId": "get_api_v1_me_agents",@@@ -2156,6 +2258,169 @@}}},++ "common.action-item.v1": {++ "title": "ActionItem",++ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "service",++ "id",++ "kind",++ "title",++ "bucket",++ "state",++ "created_at",++ "updated_at",++ "href",++ "actions"++ ],++ "properties": {++ "service": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ],++ "description": "The authority that owns the item."++ },++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80,++ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."++ },++ "kind": {++ "enum": [++ "agent_task",++ "code_task",++ "ai_run",++ "approval",++ "desk_session"++ ],++ "description": "What the item is."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 160,++ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."++ },++ "summary": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "The last step, the outcome, or what will happen on approval."++ },++ "bucket": {++ "enum": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."++ },++ "state": {++ "type": "string",++ "minLength": 1,++ "maxLength": 32,++ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 80,++ "description": "The agent, model or workflow doing it, when known."++ },++ "cost_usd": {++ "type": [++ "number",++ "null"++ ],++ "minimum": 0,++ "description": "What it cost the person, in US dollars; null when unknown or free."++ },++ "steps": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0,++ "description": "Tool calls or steps so far, when counted."++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "Why it failed, in words a person can act on."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "next_run_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When a scheduled item runs next."++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "The item's page: its live steps, receipt or approval."++ },++ "actions": {++ "type": "array",++ "maxItems": 4,++ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",++ "items": {++ "enum": [++ "open",++ "approve",++ "decline",++ "cancel",++ "retry"++ ]++ }++ }++ }++ },++ "common.action-list-result.v1": {++ "title": "ActionListResult",++ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "items"++ ],++ "properties": {++ "items": {++ "type": "array",++ "maxItems": 50,++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ }++ }++ },"common.resource-control-request.v1": {"title": "ResourceControlRequest","description": "common.resource-control-request@1: one control operation OpenVibe.Services (or Actor's Console) sends to the authority that owns a resource (ADR-048, plan T13). Services never mutates another service's database; every create, update, start, stop, delete, resize, rotate, pair, grant or revoke is this request to the owning authority's control API, which decides and answers with a common.resource-control-result@1. A request names exactly one of resource (every action but create) or resource_kind (create, before the name exists). project_id is the tenancy boundary and equals the project segment of resource. idempotency_key makes a retry safe: the authority answers a repeated key with the first result. A sensitive action (money, publishing, deleting, physical control) is refused with confirmation_required until its owner approves; the retry carries that confirmation_id (roadmap WS-Z2). The cross-field rules are checked by contracts.resources.checkControlRequest.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.228.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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,52 @@}],"paths": {++ "/api/v1/actions": {++ "get": {++ "operationId": "get_api_v1_actions",++ "summary": "Read one person's Action Center items from OpenVibe.AI (plan 2026-10-28 §3.10): AI runs made on the person's behalf (on_behalf_of), as common.action-list-result@1.",++ "description": "**ai.actions.read** (first-party): Read one person's Action Center items from OpenVibe.AI (plan 2026-10-28 §3.10): AI runs made on the person's behalf (on_behalf_of), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",++ "tags": [++ "ai.actions"++ ],++ "x-openvibe-capabilities": [++ "ai.actions.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "ai.actions.read"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/common.action-list-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/attribution-quotas/{attribution}": {"delete": {"operationId": "delete_api_v1_attribution_quotas_attribution",@@@ -5022,6 +5068,169 @@}]},++ "common.action-item.v1": {++ "title": "ActionItem",++ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "service",++ "id",++ "kind",++ "title",++ "bucket",++ "state",++ "created_at",++ "updated_at",++ "href",++ "actions"++ ],++ "properties": {++ "service": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ],++ "description": "The authority that owns the item."++ },++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80,++ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."++ },++ "kind": {++ "enum": [++ "agent_task",++ "code_task",++ "ai_run",++ "approval",++ "desk_session"++ ],++ "description": "What the item is."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 160,++ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."++ },++ "summary": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "The last step, the outcome, or what will happen on approval."++ },++ "bucket": {++ "enum": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."++ },++ "state": {++ "type": "string",++ "minLength": 1,++ "maxLength": 32,++ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 80,++ "description": "The agent, model or workflow doing it, when known."++ },++ "cost_usd": {++ "type": [++ "number",++ "null"++ ],++ "minimum": 0,++ "description": "What it cost the person, in US dollars; null when unknown or free."++ },++ "steps": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0,++ "description": "Tool calls or steps so far, when counted."++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "Why it failed, in words a person can act on."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "next_run_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When a scheduled item runs next."++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "The item's page: its live steps, receipt or approval."++ },++ "actions": {++ "type": "array",++ "maxItems": 4,++ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",++ "items": {++ "enum": [++ "open",++ "approve",++ "decline",++ "cancel",++ "retry"++ ]++ }++ }++ }++ },++ "common.action-list-result.v1": {++ "title": "ActionListResult",++ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "items"++ ],++ "properties": {++ "items": {++ "type": "array",++ "maxItems": 50,++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ }++ }++ },"common.entity-ref.v1": {"title": "EntityRef","description": "Typed reference to another service's entity. Store this instead of a foreign key; resolve a display projection from the owner.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.228.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.228.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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,52 @@}],"paths": {++ "/api/v1/actions": {++ "get": {++ "operationId": "get_api_v1_actions",++ "summary": "Read one person's Action Center items from OpenVibe.Codes (plan 2026-10-28 §3.10): coding tasks run through OpenVibe.Run (queued, placed, running, done, failed), as common.action-list-result@1.",++ "description": "**codes.actions.read** (first-party): Read one person's Action Center items from OpenVibe.Codes (plan 2026-10-28 §3.10): coding tasks run through OpenVibe.Run (queued, placed, running, done, failed), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",++ "tags": [++ "codes.actions"++ ],++ "x-openvibe-capabilities": [++ "codes.actions.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "codes.actions.read"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/common.action-list-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/tasks": {"post": {"operationId": "post_api_v1_tasks",@@@ -433,6 +479,169 @@}}},++ "common.action-item.v1": {++ "title": "ActionItem",++ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "service",++ "id",++ "kind",++ "title",++ "bucket",++ "state",++ "created_at",++ "updated_at",++ "href",++ "actions"++ ],++ "properties": {++ "service": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ],++ "description": "The authority that owns the item."++ },++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80,++ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."++ },++ "kind": {++ "enum": [++ "agent_task",++ "code_task",++ "ai_run",++ "approval",++ "desk_session"++ ],++ "description": "What the item is."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 160,++ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."++ },++ "summary": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "The last step, the outcome, or what will happen on approval."++ },++ "bucket": {++ "enum": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."++ },++ "state": {++ "type": "string",++ "minLength": 1,++ "maxLength": 32,++ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 80,++ "description": "The agent, model or workflow doing it, when known."++ },++ "cost_usd": {++ "type": [++ "number",++ "null"++ ],++ "minimum": 0,++ "description": "What it cost the person, in US dollars; null when unknown or free."++ },++ "steps": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0,++ "description": "Tool calls or steps so far, when counted."++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "Why it failed, in words a person can act on."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "next_run_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When a scheduled item runs next."++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "The item's page: its live steps, receipt or approval."++ },++ "actions": {++ "type": "array",++ "maxItems": 4,++ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",++ "items": {++ "enum": [++ "open",++ "approve",++ "decline",++ "cancel",++ "retry"++ ]++ }++ }++ }++ },++ "common.action-list-result.v1": {++ "title": "ActionListResult",++ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "items"++ ],++ "properties": {++ "items": {++ "type": "array",++ "maxItems": 50,++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ }++ }++ },"errors.problem.v1": {"title": "Problem","description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.228.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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"@@@ -5,15 +5,15 @@"service": "actor","name": "OpenVibe.Actor","origin": "https://openvibe.actor",-- "operations": 24,-- "capabilities": 8++ "operations": 26,++ "capabilities": 10},{"service": "ai","name": "OpenVibe.AI","origin": "https://ai.openvibe.services",-- "operations": 43,-- "capabilities": 8++ "operations": 44,++ "capabilities": 9},{"service": "billing",@@@ -47,8 +47,8 @@"service": "codes","name": "OpenVibe.Codes","origin": "https://openvibe.codes",-- "operations": 3,-- "capabilities": 3++ "operations": 4,++ "capabilities": 4},{"service": "community",@@@ -131,8 +131,8 @@"service": "network","name": "OpenVibe.Network","origin": "https://openvibe.network",-- "operations": 41,-- "capabilities": 29++ "operations": 43,++ "capabilities": 30},{"service": "news",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.228.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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"@@@ -136,6 +136,124 @@}}},++ "/api/v1/me/actions": {++ "get": {++ "operationId": "get_api_v1_me_actions",++ "summary": "The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and f",++ "description": "**network.actions.read** (public): The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and failed (network.me-actions-result@1); POST /api/v1/me/actions/:service/:id/:action approves, declines or cancels through the owning authority. Readable from every OpenVibe site with the person's Network token, like the bell.",++ "tags": [++ "network.actions"++ ],++ "x-openvibe-capabilities": [++ "network.actions.read"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "network.actions.read"++ ]++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/network.me-actions-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/me/actions/{service}/{id}/{action}": {++ "post": {++ "operationId": "post_api_v1_me_actions_service_id_action",++ "summary": "The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and f",++ "description": "**network.actions.read** (public): The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and failed (network.me-actions-result@1); POST /api/v1/me/actions/:service/:id/:action approves, declines or cancels through the owning authority. Readable from every OpenVibe site with the person's Network token, like the bell.",++ "tags": [++ "network.actions"++ ],++ "x-openvibe-capabilities": [++ "network.actions.read"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "standard",++ "security": [++ {++ "openvibeToken": [++ "network.actions.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "service",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ },++ {++ "name": "action",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/network.me-actions-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },"/api/v1/node/self/capabilities": {"put": {"operationId": "put_api_v1_node_self_capabilities",@@@ -2378,6 +2496,151 @@},"components": {"schemas": {++ "common.action-item.v1": {++ "title": "ActionItem",++ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "service",++ "id",++ "kind",++ "title",++ "bucket",++ "state",++ "created_at",++ "updated_at",++ "href",++ "actions"++ ],++ "properties": {++ "service": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ],++ "description": "The authority that owns the item."++ },++ "id": {++ "type": "string",++ "minLength": 1,++ "maxLength": 80,++ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."++ },++ "kind": {++ "enum": [++ "agent_task",++ "code_task",++ "ai_run",++ "approval",++ "desk_session"++ ],++ "description": "What the item is."++ },++ "title": {++ "type": "string",++ "minLength": 1,++ "maxLength": 160,++ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."++ },++ "summary": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "The last step, the outcome, or what will happen on approval."++ },++ "bucket": {++ "enum": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."++ },++ "state": {++ "type": "string",++ "minLength": 1,++ "maxLength": 32,++ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 80,++ "description": "The agent, model or workflow doing it, when known."++ },++ "cost_usd": {++ "type": [++ "number",++ "null"++ ],++ "minimum": 0,++ "description": "What it cost the person, in US dollars; null when unknown or free."++ },++ "steps": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0,++ "description": "Tool calls or steps so far, when counted."++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 400,++ "description": "Why it failed, in words a person can act on."++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "next_run_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time",++ "description": "When a scheduled item runs next."++ },++ "href": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://",++ "maxLength": 2048,++ "description": "The item's page: its live steps, receipt or approval."++ },++ "actions": {++ "type": "array",++ "maxItems": 4,++ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",++ "items": {++ "enum": [++ "open",++ "approve",++ "decline",++ "cancel",++ "retry"++ ]++ }++ }++ }++ },"common.no-body.v1": {"title": "NoBody","description": "common.no-body@1: the capability's request carries no body; its parameters are the path and query of the routes in implementedBy (an id, a page cursor). An input schema that says so explicitly, so every active capability names one (roadmap WS-C task 4).",@@@ -3593,6 +3856,124 @@}}},++ "network.me-actions-result.v1": {++ "title": "MeActionsResult",++ "description": "The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "buckets",++ "counts",++ "sources",++ "partial",++ "generated_at"++ ],++ "properties": {++ "buckets": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "properties": {++ "running": {++ "type": "array",++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ },++ "waiting": {++ "type": "array",++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ },++ "scheduled": {++ "type": "array",++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ },++ "done": {++ "type": "array",++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ },++ "failed": {++ "type": "array",++ "items": {++ "$ref": "#/components/schemas/common.action-item.v1"++ }++ }++ }++ },++ "counts": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "running",++ "waiting",++ "scheduled",++ "done",++ "failed"++ ],++ "properties": {++ "running": {++ "type": "integer",++ "minimum": 0++ },++ "waiting": {++ "type": "integer",++ "minimum": 0++ },++ "scheduled": {++ "type": "integer",++ "minimum": 0++ },++ "done": {++ "type": "integer",++ "minimum": 0++ },++ "failed": {++ "type": "integer",++ "minimum": 0++ }++ }++ },++ "sources": {++ "type": "object",++ "propertyNames": {++ "enum": [++ "actor",++ "codes",++ "ai",++ "network",++ "run"++ ]++ },++ "additionalProperties": {++ "enum": [++ "ok",++ "unavailable",++ "timeout",++ "not_connected"++ ]++ }++ },++ "partial": {++ "type": "boolean"++ },++ "generated_at": {++ "type": "string",++ "format": "date-time"++ }++ }++ },"network.mod-install-request.v1": {"title": "NetworkModInstallRequest","description": "network.mod-install-request@1 (OpenVibe.Network; roadmap WS-M task 3, ADR-013): a runtime (OpenVibe.Games) registers an install's mod principal, POST /internal/mods with capability mods.grant.manage. The manifest (mods.mod-manifest@1) names the requested capabilities; `approve` is the subset staff approved at install, and the rest stays pending. The runtime that registers a mod is its owner: only it (or Network staff) changes its grants. Registering the same mod again answers the existing principal.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.228.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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"@@@ -212416,3 +212416,121 @@ export interface BotDeskLeaseCreateRequest {*/height?: number;}++++/** [email protected] (owner: contracts) */++/**++ * One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.++ */++export interface ActionItem {++ /**++ * The authority that owns the item.++ */++ service: "actor" | "codes" | "ai" | "network" | "run";++ /**++ * The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id).++ */++ id: string;++ /**++ * What the item is.++ */++ kind: "agent_task" | "code_task" | "ai_run" | "approval" | "desk_session";++ /**++ * A short plain-text name: the start of the task text, the workflow, or what the approval is for.++ */++ title: string;++ /**++ * The last step, the outcome, or what will happen on approval.++ */++ summary?: string | null;++ /**++ * Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired).++ */++ bucket: "running" | "waiting" | "scheduled" | "done" | "failed";++ /**++ * The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…).++ */++ state: string;++ /**++ * The agent, model or workflow doing it, when known.++ */++ agent?: string | null;++ /**++ * What it cost the person, in US dollars; null when unknown or free.++ */++ cost_usd?: number | null;++ /**++ * Tool calls or steps so far, when counted.++ */++ steps?: number | null;++ /**++ * Why it failed, in words a person can act on.++ */++ error?: string | null;++ created_at: string;++ updated_at: string;++ /**++ * When a scheduled item runs next.++ */++ next_run_at?: string | null;++ /**++ * The item's page: its live steps, receipt or approval.++ */++ href: string;++ /**++ * What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.++ *++ * @maxItems 4++ */++ actions:++ | []++ | ["open" | "approve" | "decline" | "cancel" | "retry"]++ | ["open" | "approve" | "decline" | "cancel" | "retry", "open" | "approve" | "decline" | "cancel" | "retry"]++ | [++ "open" | "approve" | "decline" | "cancel" | "retry",++ "open" | "approve" | "decline" | "cancel" | "retry",++ "open" | "approve" | "decline" | "cancel" | "retry"++ ]++ | [++ "open" | "approve" | "decline" | "cancel" | "retry",++ "open" | "approve" | "decline" | "cancel" | "retry",++ "open" | "approve" | "decline" | "cancel" | "retry",++ "open" | "approve" | "decline" | "cancel" | "retry"++ ];++}++++/** [email protected] (owner: contracts) */++/**++ * One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.++ */++export interface ActionListResult {++ /**++ * @maxItems 50++ */++ items: ActionItem[];++}++++/** [email protected] (owner: network) */++/**++ * The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.++ */++export interface MeActionsResult {++ buckets: {++ running: ActionItem[];++ waiting: ActionItem[];++ scheduled: ActionItem[];++ done: ActionItem[];++ failed: ActionItem[];++ };++ counts: {++ running: number;++ waiting: number;++ scheduled: number;++ done: number;++ failed: number;++ };++ sources: {++ [k: string]: ("ok" | "unavailable" | "timeout" | "not_connected") | undefined;++ };++ partial: boolean;++ generated_at: string;++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "actor.actions.read",++ "version": "1.0",++ "owner": "actor",++ "status": "active",++ "visibility": "first-party",++ "description": "Read one person's Action Center items from OpenVibe.Actor (plan 2026-10-28 §3.10): agent tasks (running, needing the person, done or failed), pending approvals, and personal agents' next scheduled runs, as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",++ "permissions": [++ "actor:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/actions"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "common.action-list-result@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "actor.approval.decide",++ "version": "1.0",++ "owner": "actor",++ "status": "active",++ "visibility": "first-party",++ "description": "Approve or decline a pending OpenVibe.Actor approval for its person (plan 2026-10-28 §3.10): POST /api/v1/approvals/:id/decide { decision: approve | decline } with a service token and X-OV-Subject naming the approval's owner, the same decision the person makes on /me/approvals. Granted to OpenVibe.Network, which acts from the Action Center for the signed-in person.",++ "permissions": [++ "actor:write"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "POST /api/v1/approvals/:id/decide"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "common.action-item@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "ai.actions.read",++ "version": "1.0",++ "owner": "ai",++ "status": "active",++ "visibility": "first-party",++ "description": "Read one person's Action Center items from OpenVibe.AI (plan 2026-10-28 §3.10): AI runs made on the person's behalf (on_behalf_of), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",++ "permissions": [++ "ai:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/actions"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "common.action-list-result@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "codes.actions.read",++ "version": "1.0",++ "owner": "codes",++ "status": "active",++ "visibility": "first-party",++ "description": "Read one person's Action Center items from OpenVibe.Codes (plan 2026-10-28 §3.10): coding tasks run through OpenVibe.Run (queued, placed, running, done, failed), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",++ "permissions": [++ "codes:read"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/actions"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "common.action-list-result@1"++}nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "id": "network.actions.read",++ "version": "1.0",++ "owner": "network",++ "status": "active",++ "visibility": "public",++ "description": "The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and failed (network.me-actions-result@1); POST /api/v1/me/actions/:service/:id/:action approves, declines or cancels through the owning authority. Readable from every OpenVibe site with the person's Network token, like the bell.",++ "permissions": [++ "network:read",++ "network:write"++ ],++ "resourceConstraints": [++ "none"++ ],++ "quotaClass": "standard",++ "events": [],++ "implementedBy": [++ "GET /api/v1/me/actions",++ "POST /api/v1/me/actions/:service/:id/:action"++ ],++ "inputSchema": "common.no-body@1",++ "outputSchema": "network.me-actions-result@1"++}@@@ -23,7 +23,9 @@"actor.resource.read","actor.resource.control","actor.agent.manage",-- "actor.agent.run"++ "actor.agent.run",++ "actor.actions.read",++ "actor.approval.decide"],"eventsProduced": [],"eventsConsumed": [@@@ -27,7 +27,8 @@"ai.run.create","ai.run.read","ai.usage.read",-- "ai.workflow.manage"++ "ai.workflow.manage",++ "ai.actions.read"],"eventsProduced": ["ai.run.queued",@@@ -43,7 +43,8 @@"capabilities": ["codes.task.start","codes.task.read",-- "codes.task.cancel"++ "codes.task.cancel",++ "codes.actions.read"],"eventsProduced": [],"eventsConsumed": [],@@@ -76,7 +76,8 @@"network.resource.report","network.secret.use","network.staff.read",-- "network.status.incident"++ "network.status.incident",++ "network.actions.read"],"eventsProduced": ["network.account.deleted",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.228.0",++ "version": "0.229.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -4,6 +4,18 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,18 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
the notes were in the tag and commit messages (`git tag -n1`).
+## 0.229.0 — 2026-10-28
+
+- **The Action Center** (plan 2026-10-28 §3.10, NOTIF-5): one list of a person's agent work on every site.
+ - `common.action-item@1`: one item (an agent task, a coding task, an AI run, an approval), with its bucket
+ (running, waiting, scheduled, done, failed), state, cost in USD, steps, error, page and the actions it allows.
+ - `common.action-list-result@1`: one authority's items for a person. Served by Actor, Codes and AI at
+ `GET /api/v1/actions?subject=usr_…` under the new first-party capabilities `actor.actions.read`,
+ `codes.actions.read` and `ai.actions.read`, which are granted to Network only.
+ - `actor.approval.decide`: Network approves or declines an Actor approval for its person.
+ - `network.actions.read` and `network.me-actions-result@1`: `GET /api/v1/me/actions` merges them with Network's
+ own confirmations into the five buckets, and `POST /api/v1/me/actions/:service/:id/:action` acts on one.
+
## 0.228.0 — 2026-10-28
## 0.228.0 — 2026-10-28
- **OpenVibe.Design** (`design`, live at openvibe.design, port 5090; plan 2026-10-28 §5.2, the Design room). v1 is the
- **OpenVibe.Design** (`design`, live at openvibe.design, port 5090; plan 2026-10-28 §5.2, the Design room). v1 is the
@@ -7595,6 +7595,33 @@
@@ -7595,6 +7595,33 @@
"compatibility": "backward",
"compatibility": "backward",
"status": "active",
"status": "active",
"adr": "ADR-043"
"adr": "ADR-043"
+ },
+ {
+ "id": "common.action-item",
+ "version": "1.0.0",
+ "owner": "contracts",
+ "schema": "common/action-item.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "common.action-list-result",
+ "version": "1.0.0",
+ "owner": "contracts",
+ "schema": "common/action-list-result.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "network.me-actions-result",
+ "version": "1.0.0",
+ "owner": "network",
+ "schema": "network/me-actions-result.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,147 @@
@@ -0,0 +1,147 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/common/action-item.v1.json",
+ "title": "ActionItem",
+ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "service",
+ "id",
+ "kind",
+ "title",
+ "bucket",
+ "state",
+ "created_at",
+ "updated_at",
+ "href",
+ "actions"
+ ],
+ "properties": {
+ "service": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ],
+ "description": "The authority that owns the item."
+ },
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80,
+ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."
+ },
+ "kind": {
+ "enum": [
+ "agent_task",
+ "code_task",
+ "ai_run",
+ "approval",
+ "desk_session"
+ ],
+ "description": "What the item is."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."
+ },
+ "summary": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "The last step, the outcome, or what will happen on approval."
+ },
+ "bucket": {
+ "enum": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."
+ },
+ "state": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32,
+ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 80,
+ "description": "The agent, model or workflow doing it, when known."
+ },
+ "cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "What it cost the person, in US dollars; null when unknown or free."
+ },
+ "steps": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "Tool calls or steps so far, when counted."
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "Why it failed, in words a person can act on."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "next_run_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When a scheduled item runs next."
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "The item's page: its live steps, receipt or approval."
+ },
+ "actions": {
+ "type": "array",
+ "maxItems": 4,
+ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",
+ "items": {
+ "enum": [
+ "open",
+ "approve",
+ "decline",
+ "cancel",
+ "retry"
+ ]
+ }
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/common/action-list-result.v1.json",
+ "title": "ActionListResult",
+ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "items"
+ ],
+ "properties": {
+ "items": {
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "action-item.v1.json"
+ }
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,120 @@
@@ -0,0 +1,120 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/network/me-actions-result.v1.json",
+ "title": "MeActionsResult",
+ "description": "The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "buckets",
+ "counts",
+ "sources",
+ "partial",
+ "generated_at"
+ ],
+ "properties": {
+ "buckets": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "properties": {
+ "running": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "waiting": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "scheduled": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "done": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "failed": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ }
+ }
+ },
+ "counts": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "properties": {
+ "running": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "waiting": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "scheduled": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "done": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "failed": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "sources": {
+ "type": "object",
+ "propertyNames": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ]
+ },
+ "additionalProperties": {
+ "enum": [
+ "ok",
+ "unavailable",
+ "timeout",
+ "not_connected"
+ ]
+ }
+ },
+ "partial": {
+ "type": "boolean"
+ },
+ "generated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "service": "actor",
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "agent_task",
+ "title": "Find three cheap flights to Lisbon",
+ "summary": "Read 4 pages; comparing prices",
+ "bucket": "running",
+ "state": "running",
+ "agent": "deepseek-flash",
+ "cost_usd": 0.004,
+ "steps": 6,
+ "error": null,
+ "created_at": "2026-10-28T14:00:00Z",
+ "updated_at": "2026-10-28T14:02:10Z",
+ "next_run_at": null,
+ "href": "http://openvibe.actor/tasks/x",
+ "actions": [
+ "open",
+ "cancel"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "service": "actor",
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "agent_task",
+ "title": "Find three cheap flights to Lisbon",
+ "summary": "Read 4 pages; comparing prices",
+ "bucket": "paused",
+ "state": "running",
+ "agent": "deepseek-flash",
+ "cost_usd": 0.004,
+ "steps": 6,
+ "error": null,
+ "created_at": "2026-10-28T14:00:00Z",
+ "updated_at": "2026-10-28T14:02:10Z",
+ "next_run_at": null,
+ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "actions": [
+ "open",
+ "cancel"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "service": "network",
+ "id": "cnf_01JAB2C3D4E5F6G7H8J9K0MNPR",
+ "kind": "approval",
+ "title": "Send an email to the venue",
+ "summary": "Your agent asks to send one email from your account",
+ "bucket": "waiting",
+ "state": "pending",
+ "created_at": "2026-10-28T14:00:00Z",
+ "updated_at": "2026-10-28T14:00:00Z",
+ "href": "https://openvibe.network/my#approvals",
+ "actions": [
+ "approve",
+ "decline",
+ "open"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "service": "actor",
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "agent_task",
+ "title": "Find three cheap flights to Lisbon",
+ "summary": "Read 4 pages; comparing prices",
+ "bucket": "running",
+ "state": "running",
+ "agent": "deepseek-flash",
+ "cost_usd": 0.004,
+ "steps": 6,
+ "error": null,
+ "created_at": "2026-10-28T14:00:00Z",
+ "updated_at": "2026-10-28T14:02:10Z",
+ "next_run_at": null,
+ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "actions": [
+ "open",
+ "cancel"
+ ]
+}
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,25 @@
@@ -0,0 +1,25 @@
+{
+ "items": [
+ {
+ "service": "actor",
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "agent_task",
+ "title": "Find three cheap flights to Lisbon",
+ "summary": "Read 4 pages; comparing prices",
+ "bucket": "running",
+ "state": "running",
+ "agent": "deepseek-flash",
+ "cost_usd": 0.004,
+ "steps": 6,
+ "error": null,
+ "created_at": "2026-10-28T14:00:00Z",
+ "updated_at": "2026-10-28T14:02:10Z",
+ "next_run_at": null,
+ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "actions": [
+ "open",
+ "cancel"
+ ]
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
+{
+ "buckets": {
+ "running": []
+ },
+ "counts": {
+ "running": 0,
+ "waiting": 0,
+ "scheduled": 0,
+ "done": 0,
+ "failed": 0
+ },
+ "sources": {},
+ "partial": false,
+ "generated_at": "2026-10-28T14:02:11Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
+{
+ "buckets": {
+ "running": [
+ {
+ "service": "actor",
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "kind": "agent_task",
+ "title": "Find three cheap flights to Lisbon",
+ "summary": "Read 4 pages; comparing prices",
+ "bucket": "running",
+ "state": "running",
+ "agent": "deepseek-flash",
+ "cost_usd": 0.004,
+ "steps": 6,
+ "error": null,
+ "created_at": "2026-10-28T14:00:00Z",
+ "updated_at": "2026-10-28T14:02:10Z",
+ "next_run_at": null,
+ "href": "https://openvibe.actor/tasks/tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "actions": [
+ "open",
+ "cancel"
+ ]
+ }
+ ],
+ "waiting": [],
+ "scheduled": [],
+ "done": [],
+ "failed": []
+ },
+ "counts": {
+ "running": 1,
+ "waiting": 0,
+ "scheduled": 0,
+ "done": 0,
+ "failed": 0
+ },
+ "sources": {
+ "actor": "ok",
+ "codes": "timeout",
+ "ai": "ok",
+ "network": "ok"
+ },
+ "partial": true,
+ "generated_at": "2026-10-28T14:02:11Z"
+}
@@ -85278,6 +85278,308 @@
@@ -85278,6 +85278,308 @@
}
}
}
}
}
}
+ },
+ "common.action-item": {
+ "version": "1.0.0",
+ "owner": "contracts",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/common/action-item.v1.json",
+ "title": "ActionItem",
+ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "service",
+ "id",
+ "kind",
+ "title",
+ "bucket",
+ "state",
+ "created_at",
+ "updated_at",
+ "href",
+ "actions"
+ ],
+ "properties": {
+ "service": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ],
+ "description": "The authority that owns the item."
+ },
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80,
+ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."
+ },
+ "kind": {
+ "enum": [
+ "agent_task",
+ "code_task",
+ "ai_run",
+ "approval",
+ "desk_session"
+ ],
+ "description": "What the item is."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."
+ },
+ "summary": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "The last step, the outcome, or what will happen on approval."
+ },
+ "bucket": {
+ "enum": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."
+ },
+ "state": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32,
+ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 80,
+ "description": "The agent, model or workflow doing it, when known."
+ },
+ "cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "What it cost the person, in US dollars; null when unknown or free."
+ },
+ "steps": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "Tool calls or steps so far, when counted."
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "Why it failed, in words a person can act on."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "next_run_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When a scheduled item runs next."
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "The item's page: its live steps, receipt or approval."
+ },
+ "actions": {
+ "type": "array",
+ "maxItems": 4,
+ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",
+ "items": {
+ "enum": [
+ "open",
+ "approve",
+ "decline",
+ "cancel",
+ "retry"
+ ]
+ }
+ }
+ }
+ }
+ },
+ "common.action-list-result": {
+ "version": "1.0.0",
+ "owner": "contracts",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/common/action-list-result.v1.json",
+ "title": "ActionListResult",
+ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "items"
+ ],
+ "properties": {
+ "items": {
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "action-item.v1.json"
+ }
+ }
+ }
+ }
+ },
+ "network.me-actions-result": {
+ "version": "1.0.0",
+ "owner": "network",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/network/me-actions-result.v1.json",
+ "title": "MeActionsResult",
+ "description": "The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "buckets",
+ "counts",
+ "sources",
+ "partial",
+ "generated_at"
+ ],
+ "properties": {
+ "buckets": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "properties": {
+ "running": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "waiting": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "scheduled": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "done": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ },
+ "failed": {
+ "type": "array",
+ "items": {
+ "$ref": "../common/action-item.v1.json"
+ }
+ }
+ }
+ },
+ "counts": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "properties": {
+ "running": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "waiting": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "scheduled": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "done": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "failed": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "sources": {
+ "type": "object",
+ "propertyNames": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ]
+ },
+ "additionalProperties": {
+ "enum": [
+ "ok",
+ "unavailable",
+ "timeout",
+ "not_connected"
+ ]
+ }
+ },
+ "partial": {
+ "type": "boolean"
+ },
+ "generated_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.228.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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,52 @@
@@ -16,6 +16,52 @@
}
}
],
],
"paths": {
"paths": {
+ "/api/v1/actions": {
+ "get": {
+ "operationId": "get_api_v1_actions",
+ "summary": "Read one person's Action Center items from OpenVibe.Actor (plan 2026-10-28 §3.10): agent tasks (running, needing the person, done or failed), pending approvals, and personal agents' next scheduled run",
+ "description": "**actor.actions.read** (first-party): Read one person's Action Center items from OpenVibe.Actor (plan 2026-10-28 §3.10): agent tasks (running, needing the person, done or failed), pending approvals, and personal agents' next scheduled runs, as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",
+ "tags": [
+ "actor.actions"
+ ],
+ "x-openvibe-capabilities": [
+ "actor.actions.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "actor.actions.read"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/common.action-list-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/agents": {
"/api/v1/agents": {
"get": {
"get": {
"operationId": "get_api_v1_agents",
"operationId": "get_api_v1_agents",
@@ -62,6 +108,62 @@
@@ -62,6 +108,62 @@
}
}
}
}
},
},
+ "/api/v1/approvals/{id}/decide": {
+ "post": {
+ "operationId": "post_api_v1_approvals_id_decide",
+ "summary": "Approve or decline a pending OpenVibe.Actor approval for its person (plan 2026-10-28 §3.10): POST /api/v1/approvals/:id/decide { decision: approve | decline } with a service token and X-OV-Subject nam",
+ "description": "**actor.approval.decide** (first-party): Approve or decline a pending OpenVibe.Actor approval for its person (plan 2026-10-28 §3.10): POST /api/v1/approvals/:id/decide { decision: approve | decline } with a service token and X-OV-Subject naming the approval's owner, the same decision the person makes on /me/approvals. Granted to OpenVibe.Network, which acts from the Action Center for the signed-in person.",
+ "tags": [
+ "actor.approval"
+ ],
+ "x-openvibe-capabilities": [
+ "actor.approval.decide"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "actor.approval.decide"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/me/agents": {
"/api/v1/me/agents": {
"get": {
"get": {
"operationId": "get_api_v1_me_agents",
"operationId": "get_api_v1_me_agents",
@@ -2156,6 +2258,169 @@
@@ -2156,6 +2258,169 @@
}
}
}
}
},
},
+ "common.action-item.v1": {
+ "title": "ActionItem",
+ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "service",
+ "id",
+ "kind",
+ "title",
+ "bucket",
+ "state",
+ "created_at",
+ "updated_at",
+ "href",
+ "actions"
+ ],
+ "properties": {
+ "service": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ],
+ "description": "The authority that owns the item."
+ },
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80,
+ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."
+ },
+ "kind": {
+ "enum": [
+ "agent_task",
+ "code_task",
+ "ai_run",
+ "approval",
+ "desk_session"
+ ],
+ "description": "What the item is."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."
+ },
+ "summary": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "The last step, the outcome, or what will happen on approval."
+ },
+ "bucket": {
+ "enum": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."
+ },
+ "state": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32,
+ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 80,
+ "description": "The agent, model or workflow doing it, when known."
+ },
+ "cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "What it cost the person, in US dollars; null when unknown or free."
+ },
+ "steps": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "Tool calls or steps so far, when counted."
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "Why it failed, in words a person can act on."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "next_run_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When a scheduled item runs next."
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "The item's page: its live steps, receipt or approval."
+ },
+ "actions": {
+ "type": "array",
+ "maxItems": 4,
+ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",
+ "items": {
+ "enum": [
+ "open",
+ "approve",
+ "decline",
+ "cancel",
+ "retry"
+ ]
+ }
+ }
+ }
+ },
+ "common.action-list-result.v1": {
+ "title": "ActionListResult",
+ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "items"
+ ],
+ "properties": {
+ "items": {
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ }
+ }
+ },
"common.resource-control-request.v1": {
"common.resource-control-request.v1": {
"title": "ResourceControlRequest",
"title": "ResourceControlRequest",
"description": "common.resource-control-request@1: one control operation OpenVibe.Services (or Actor's Console) sends to the authority that owns a resource (ADR-048, plan T13). Services never mutates another service's database; every create, update, start, stop, delete, resize, rotate, pair, grant or revoke is this request to the owning authority's control API, which decides and answers with a common.resource-control-result@1. A request names exactly one of resource (every action but create) or resource_kind (create, before the name exists). project_id is the tenancy boundary and equals the project segment of resource. idempotency_key makes a retry safe: the authority answers a repeated key with the first result. A sensitive action (money, publishing, deleting, physical control) is refused with confirmation_required until its owner approves; the retry carries that confirmation_id (roadmap WS-Z2). The cross-field rules are checked by contracts.resources.checkControlRequest.",
"description": "common.resource-control-request@1: one control operation OpenVibe.Services (or Actor's Console) sends to the authority that owns a resource (ADR-048, plan T13). Services never mutates another service's database; every create, update, start, stop, delete, resize, rotate, pair, grant or revoke is this request to the owning authority's control API, which decides and answers with a common.resource-control-result@1. A request names exactly one of resource (every action but create) or resource_kind (create, before the name exists). project_id is the tenancy boundary and equals the project segment of resource. idempotency_key makes a retry safe: the authority answers a repeated key with the first result. A sensitive action (money, publishing, deleting, physical control) is refused with confirmation_required until its owner approves; the retry carries that confirmation_id (roadmap WS-Z2). The cross-field rules are checked by contracts.resources.checkControlRequest.",
@@ -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.228.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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,52 @@
@@ -16,6 +16,52 @@
}
}
],
],
"paths": {
"paths": {
+ "/api/v1/actions": {
+ "get": {
+ "operationId": "get_api_v1_actions",
+ "summary": "Read one person's Action Center items from OpenVibe.AI (plan 2026-10-28 §3.10): AI runs made on the person's behalf (on_behalf_of), as common.action-list-result@1.",
+ "description": "**ai.actions.read** (first-party): Read one person's Action Center items from OpenVibe.AI (plan 2026-10-28 §3.10): AI runs made on the person's behalf (on_behalf_of), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",
+ "tags": [
+ "ai.actions"
+ ],
+ "x-openvibe-capabilities": [
+ "ai.actions.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "ai.actions.read"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/common.action-list-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/attribution-quotas/{attribution}": {
"/api/v1/attribution-quotas/{attribution}": {
"delete": {
"delete": {
"operationId": "delete_api_v1_attribution_quotas_attribution",
"operationId": "delete_api_v1_attribution_quotas_attribution",
@@ -5022,6 +5068,169 @@
@@ -5022,6 +5068,169 @@
}
}
]
]
},
},
+ "common.action-item.v1": {
+ "title": "ActionItem",
+ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "service",
+ "id",
+ "kind",
+ "title",
+ "bucket",
+ "state",
+ "created_at",
+ "updated_at",
+ "href",
+ "actions"
+ ],
+ "properties": {
+ "service": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ],
+ "description": "The authority that owns the item."
+ },
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80,
+ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."
+ },
+ "kind": {
+ "enum": [
+ "agent_task",
+ "code_task",
+ "ai_run",
+ "approval",
+ "desk_session"
+ ],
+ "description": "What the item is."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."
+ },
+ "summary": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "The last step, the outcome, or what will happen on approval."
+ },
+ "bucket": {
+ "enum": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."
+ },
+ "state": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32,
+ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 80,
+ "description": "The agent, model or workflow doing it, when known."
+ },
+ "cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "What it cost the person, in US dollars; null when unknown or free."
+ },
+ "steps": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "Tool calls or steps so far, when counted."
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "Why it failed, in words a person can act on."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "next_run_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When a scheduled item runs next."
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "The item's page: its live steps, receipt or approval."
+ },
+ "actions": {
+ "type": "array",
+ "maxItems": 4,
+ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",
+ "items": {
+ "enum": [
+ "open",
+ "approve",
+ "decline",
+ "cancel",
+ "retry"
+ ]
+ }
+ }
+ }
+ },
+ "common.action-list-result.v1": {
+ "title": "ActionListResult",
+ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "items"
+ ],
+ "properties": {
+ "items": {
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ }
+ }
+ },
"common.entity-ref.v1": {
"common.entity-ref.v1": {
"title": "EntityRef",
"title": "EntityRef",
"description": "Typed reference to another service's entity. Store this instead of a foreign key; resolve a display projection from the owner.",
"description": "Typed reference to another service's entity. Store this instead of a foreign key; resolve a display projection from the owner.",
@@ -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.228.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.228.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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,52 @@
@@ -16,6 +16,52 @@
}
}
],
],
"paths": {
"paths": {
+ "/api/v1/actions": {
+ "get": {
+ "operationId": "get_api_v1_actions",
+ "summary": "Read one person's Action Center items from OpenVibe.Codes (plan 2026-10-28 §3.10): coding tasks run through OpenVibe.Run (queued, placed, running, done, failed), as common.action-list-result@1.",
+ "description": "**codes.actions.read** (first-party): Read one person's Action Center items from OpenVibe.Codes (plan 2026-10-28 §3.10): coding tasks run through OpenVibe.Run (queued, placed, running, done, failed), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",
+ "tags": [
+ "codes.actions"
+ ],
+ "x-openvibe-capabilities": [
+ "codes.actions.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "codes.actions.read"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/common.action-list-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/tasks": {
"/api/v1/tasks": {
"post": {
"post": {
"operationId": "post_api_v1_tasks",
"operationId": "post_api_v1_tasks",
@@ -433,6 +479,169 @@
@@ -433,6 +479,169 @@
}
}
}
}
},
},
+ "common.action-item.v1": {
+ "title": "ActionItem",
+ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "service",
+ "id",
+ "kind",
+ "title",
+ "bucket",
+ "state",
+ "created_at",
+ "updated_at",
+ "href",
+ "actions"
+ ],
+ "properties": {
+ "service": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ],
+ "description": "The authority that owns the item."
+ },
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80,
+ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."
+ },
+ "kind": {
+ "enum": [
+ "agent_task",
+ "code_task",
+ "ai_run",
+ "approval",
+ "desk_session"
+ ],
+ "description": "What the item is."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."
+ },
+ "summary": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "The last step, the outcome, or what will happen on approval."
+ },
+ "bucket": {
+ "enum": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."
+ },
+ "state": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32,
+ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 80,
+ "description": "The agent, model or workflow doing it, when known."
+ },
+ "cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "What it cost the person, in US dollars; null when unknown or free."
+ },
+ "steps": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "Tool calls or steps so far, when counted."
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "Why it failed, in words a person can act on."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "next_run_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When a scheduled item runs next."
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "The item's page: its live steps, receipt or approval."
+ },
+ "actions": {
+ "type": "array",
+ "maxItems": 4,
+ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",
+ "items": {
+ "enum": [
+ "open",
+ "approve",
+ "decline",
+ "cancel",
+ "retry"
+ ]
+ }
+ }
+ }
+ },
+ "common.action-list-result.v1": {
+ "title": "ActionListResult",
+ "description": "One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "items"
+ ],
+ "properties": {
+ "items": {
+ "type": "array",
+ "maxItems": 50,
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ }
+ }
+ },
"errors.problem.v1": {
"errors.problem.v1": {
"title": "Problem",
"title": "Problem",
"description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",
"description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",
@@ -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.228.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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"
@@ -5,15 +5,15 @@
@@ -5,15 +5,15 @@
"service": "actor",
"service": "actor",
"name": "OpenVibe.Actor",
"name": "OpenVibe.Actor",
"origin": "https://openvibe.actor",
"origin": "https://openvibe.actor",
- "operations": 24,
- "capabilities": 8
+ "operations": 26,
+ "capabilities": 10
},
},
{
{
"service": "ai",
"service": "ai",
"name": "OpenVibe.AI",
"name": "OpenVibe.AI",
"origin": "https://ai.openvibe.services",
"origin": "https://ai.openvibe.services",
- "operations": 43,
- "capabilities": 8
+ "operations": 44,
+ "capabilities": 9
},
},
{
{
"service": "billing",
"service": "billing",
@@ -47,8 +47,8 @@
@@ -47,8 +47,8 @@
"service": "codes",
"service": "codes",
"name": "OpenVibe.Codes",
"name": "OpenVibe.Codes",
"origin": "https://openvibe.codes",
"origin": "https://openvibe.codes",
- "operations": 3,
- "capabilities": 3
+ "operations": 4,
+ "capabilities": 4
},
},
{
{
"service": "community",
"service": "community",
@@ -131,8 +131,8 @@
@@ -131,8 +131,8 @@
"service": "network",
"service": "network",
"name": "OpenVibe.Network",
"name": "OpenVibe.Network",
"origin": "https://openvibe.network",
"origin": "https://openvibe.network",
- "operations": 41,
- "capabilities": 29
+ "operations": 43,
+ "capabilities": 30
},
},
{
{
"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.228.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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"
@@ -136,6 +136,124 @@
@@ -136,6 +136,124 @@
}
}
}
}
},
},
+ "/api/v1/me/actions": {
+ "get": {
+ "operationId": "get_api_v1_me_actions",
+ "summary": "The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and f",
+ "description": "**network.actions.read** (public): The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and failed (network.me-actions-result@1); POST /api/v1/me/actions/:service/:id/:action approves, declines or cancels through the owning authority. Readable from every OpenVibe site with the person's Network token, like the bell.",
+ "tags": [
+ "network.actions"
+ ],
+ "x-openvibe-capabilities": [
+ "network.actions.read"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "network.actions.read"
+ ]
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/network.me-actions-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/me/actions/{service}/{id}/{action}": {
+ "post": {
+ "operationId": "post_api_v1_me_actions_service_id_action",
+ "summary": "The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and f",
+ "description": "**network.actions.read** (public): The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and failed (network.me-actions-result@1); POST /api/v1/me/actions/:service/:id/:action approves, declines or cancels through the owning authority. Readable from every OpenVibe site with the person's Network token, like the bell.",
+ "tags": [
+ "network.actions"
+ ],
+ "x-openvibe-capabilities": [
+ "network.actions.read"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "standard",
+ "security": [
+ {
+ "openvibeToken": [
+ "network.actions.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "service",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "name": "action",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/network.me-actions-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"/api/v1/node/self/capabilities": {
"/api/v1/node/self/capabilities": {
"put": {
"put": {
"operationId": "put_api_v1_node_self_capabilities",
"operationId": "put_api_v1_node_self_capabilities",
@@ -2378,6 +2496,151 @@
@@ -2378,6 +2496,151 @@
},
},
"components": {
"components": {
"schemas": {
"schemas": {
+ "common.action-item.v1": {
+ "title": "ActionItem",
+ "description": "One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "service",
+ "id",
+ "kind",
+ "title",
+ "bucket",
+ "state",
+ "created_at",
+ "updated_at",
+ "href",
+ "actions"
+ ],
+ "properties": {
+ "service": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ],
+ "description": "The authority that owns the item."
+ },
+ "id": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 80,
+ "description": "The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id)."
+ },
+ "kind": {
+ "enum": [
+ "agent_task",
+ "code_task",
+ "ai_run",
+ "approval",
+ "desk_session"
+ ],
+ "description": "What the item is."
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 160,
+ "description": "A short plain-text name: the start of the task text, the workflow, or what the approval is for."
+ },
+ "summary": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "The last step, the outcome, or what will happen on approval."
+ },
+ "bucket": {
+ "enum": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "description": "Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired)."
+ },
+ "state": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 32,
+ "description": "The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…)."
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 80,
+ "description": "The agent, model or workflow doing it, when known."
+ },
+ "cost_usd": {
+ "type": [
+ "number",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "What it cost the person, in US dollars; null when unknown or free."
+ },
+ "steps": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0,
+ "description": "Tool calls or steps so far, when counted."
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 400,
+ "description": "Why it failed, in words a person can act on."
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "next_run_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time",
+ "description": "When a scheduled item runs next."
+ },
+ "href": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://",
+ "maxLength": 2048,
+ "description": "The item's page: its live steps, receipt or approval."
+ },
+ "actions": {
+ "type": "array",
+ "maxItems": 4,
+ "description": "What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.",
+ "items": {
+ "enum": [
+ "open",
+ "approve",
+ "decline",
+ "cancel",
+ "retry"
+ ]
+ }
+ }
+ }
+ },
"common.no-body.v1": {
"common.no-body.v1": {
"title": "NoBody",
"title": "NoBody",
"description": "common.no-body@1: the capability's request carries no body; its parameters are the path and query of the routes in implementedBy (an id, a page cursor). An input schema that says so explicitly, so every active capability names one (roadmap WS-C task 4).",
"description": "common.no-body@1: the capability's request carries no body; its parameters are the path and query of the routes in implementedBy (an id, a page cursor). An input schema that says so explicitly, so every active capability names one (roadmap WS-C task 4).",
@@ -3593,6 +3856,124 @@
@@ -3593,6 +3856,124 @@
}
}
}
}
},
},
+ "network.me-actions-result.v1": {
+ "title": "MeActionsResult",
+ "description": "The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "buckets",
+ "counts",
+ "sources",
+ "partial",
+ "generated_at"
+ ],
+ "properties": {
+ "buckets": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "properties": {
+ "running": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ },
+ "waiting": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ },
+ "scheduled": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ },
+ "done": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ },
+ "failed": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/common.action-item.v1"
+ }
+ }
+ }
+ },
+ "counts": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "running",
+ "waiting",
+ "scheduled",
+ "done",
+ "failed"
+ ],
+ "properties": {
+ "running": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "waiting": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "scheduled": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "done": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "failed": {
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ },
+ "sources": {
+ "type": "object",
+ "propertyNames": {
+ "enum": [
+ "actor",
+ "codes",
+ "ai",
+ "network",
+ "run"
+ ]
+ },
+ "additionalProperties": {
+ "enum": [
+ "ok",
+ "unavailable",
+ "timeout",
+ "not_connected"
+ ]
+ }
+ },
+ "partial": {
+ "type": "boolean"
+ },
+ "generated_at": {
+ "type": "string",
+ "format": "date-time"
+ }
+ }
+ },
"network.mod-install-request.v1": {
"network.mod-install-request.v1": {
"title": "NetworkModInstallRequest",
"title": "NetworkModInstallRequest",
"description": "network.mod-install-request@1 (OpenVibe.Network; roadmap WS-M task 3, ADR-013): a runtime (OpenVibe.Games) registers an install's mod principal, POST /internal/mods with capability mods.grant.manage. The manifest (mods.mod-manifest@1) names the requested capabilities; `approve` is the subset staff approved at install, and the rest stays pending. The runtime that registers a mod is its owner: only it (or Network staff) changes its grants. Registering the same mod again answers the existing principal.",
"description": "network.mod-install-request@1 (OpenVibe.Network; roadmap WS-M task 3, ADR-013): a runtime (OpenVibe.Games) registers an install's mod principal, POST /internal/mods with capability mods.grant.manage. The manifest (mods.mod-manifest@1) names the requested capabilities; `approve` is the subset staff approved at install, and the rest stays pending. The runtime that registers a mod is its owner: only it (or Network staff) changes its grants. Registering the same mod again answers the existing principal.",
@@ -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.228.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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.228.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.228.0): each operation lists the capabilities it performs; a token for 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.229.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.229.0): each operation lists the capabilities it performs; a token for 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"
@@ -212416,3 +212416,121 @@ export interface BotDeskLeaseCreateRequest {
@@ -212416,3 +212416,121 @@ export interface BotDeskLeaseCreateRequest {
*/
*/
height?: number;
height?: number;
}
}
+
+/** [email protected] (owner: contracts) */
+/**
+ * One piece of a person's agent work in the Action Center (plan 2026-10-28 §3.10): an agent task, a coding task, an AI run, or an approval waiting on them. Each authority answers its own items in this shape (common.action-list-result@1); OpenVibe.Network merges them into buckets (network.me-actions-result@1). Text is plain (no markup); a cost is what the person was charged in USD, null when unknown or free; href is a page on the authority's own public site.
+ */
+export interface ActionItem {
+ /**
+ * The authority that owns the item.
+ */
+ service: "actor" | "codes" | "ai" | "network" | "run";
+ /**
+ * The authority's own id (tsk_…, a Codes task id, run_…, a confirmation id).
+ */
+ id: string;
+ /**
+ * What the item is.
+ */
+ kind: "agent_task" | "code_task" | "ai_run" | "approval" | "desk_session";
+ /**
+ * A short plain-text name: the start of the task text, the workflow, or what the approval is for.
+ */
+ title: string;
+ /**
+ * The last step, the outcome, or what will happen on approval.
+ */
+ summary?: string | null;
+ /**
+ * Where the Action Center shows it: running (queued or working), waiting (needs the person), scheduled (will run later), done, failed (failed, cancelled or expired).
+ */
+ bucket: "running" | "waiting" | "scheduled" | "done" | "failed";
+ /**
+ * The authority's own state word (queued, running, needs_you, succeeded, failed, cancelled, pending…).
+ */
+ state: string;
+ /**
+ * The agent, model or workflow doing it, when known.
+ */
+ agent?: string | null;
+ /**
+ * What it cost the person, in US dollars; null when unknown or free.
+ */
+ cost_usd?: number | null;
+ /**
+ * Tool calls or steps so far, when counted.
+ */
+ steps?: number | null;
+ /**
+ * Why it failed, in words a person can act on.
+ */
+ error?: string | null;
+ created_at: string;
+ updated_at: string;
+ /**
+ * When a scheduled item runs next.
+ */
+ next_run_at?: string | null;
+ /**
+ * The item's page: its live steps, receipt or approval.
+ */
+ href: string;
+ /**
+ * What the person can do from the list. approve/decline/cancel/retry go through OpenVibe.Network (POST /api/v1/me/actions/:service/:id/:action); open is a link.
+ *
+ * @maxItems 4
+ */
+ actions:
+ | []
+ | ["open" | "approve" | "decline" | "cancel" | "retry"]
+ | ["open" | "approve" | "decline" | "cancel" | "retry", "open" | "approve" | "decline" | "cancel" | "retry"]
+ | [
+ "open" | "approve" | "decline" | "cancel" | "retry",
+ "open" | "approve" | "decline" | "cancel" | "retry",
+ "open" | "approve" | "decline" | "cancel" | "retry"
+ ]
+ | [
+ "open" | "approve" | "decline" | "cancel" | "retry",
+ "open" | "approve" | "decline" | "cancel" | "retry",
+ "open" | "approve" | "decline" | "cancel" | "retry",
+ "open" | "approve" | "decline" | "cancel" | "retry"
+ ];
+}
+
+/** [email protected] (owner: contracts) */
+/**
+ * One authority's Action Center items for a person (capabilities actor.actions.read, codes.actions.read, ai.actions.read): GET /api/v1/actions?subject=usr_… with the caller's service token. Everything running, waiting or scheduled, then done and failed items from the last 30 days, newest first, at most 50.
+ */
+export interface ActionListResult {
+ /**
+ * @maxItems 50
+ */
+ items: ActionItem[];
+}
+
+/** [email protected] (owner: network) */
+/**
+ * The Action Center for the signed-in person (capability network.actions.read, GET /api/v1/me/actions): every authority's items merged into five buckets, newest first in each. sources says how each authority answered; a slow or failing one is left out (partial true), never fails the answer.
+ */
+export interface MeActionsResult {
+ buckets: {
+ running: ActionItem[];
+ waiting: ActionItem[];
+ scheduled: ActionItem[];
+ done: ActionItem[];
+ failed: ActionItem[];
+ };
+ counts: {
+ running: number;
+ waiting: number;
+ scheduled: number;
+ done: number;
+ failed: number;
+ };
+ sources: {
+ [k: string]: ("ok" | "unavailable" | "timeout" | "not_connected") | undefined;
+ };
+ partial: boolean;
+ generated_at: string;
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "actor.actions.read",
+ "version": "1.0",
+ "owner": "actor",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read one person's Action Center items from OpenVibe.Actor (plan 2026-10-28 §3.10): agent tasks (running, needing the person, done or failed), pending approvals, and personal agents' next scheduled runs, as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",
+ "permissions": [
+ "actor:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/actions"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "common.action-list-result@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "actor.approval.decide",
+ "version": "1.0",
+ "owner": "actor",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Approve or decline a pending OpenVibe.Actor approval for its person (plan 2026-10-28 §3.10): POST /api/v1/approvals/:id/decide { decision: approve | decline } with a service token and X-OV-Subject naming the approval's owner, the same decision the person makes on /me/approvals. Granted to OpenVibe.Network, which acts from the Action Center for the signed-in person.",
+ "permissions": [
+ "actor:write"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/approvals/:id/decide"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "common.action-item@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "ai.actions.read",
+ "version": "1.0",
+ "owner": "ai",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read one person's Action Center items from OpenVibe.AI (plan 2026-10-28 §3.10): AI runs made on the person's behalf (on_behalf_of), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",
+ "permissions": [
+ "ai:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/actions"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "common.action-list-result@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "codes.actions.read",
+ "version": "1.0",
+ "owner": "codes",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read one person's Action Center items from OpenVibe.Codes (plan 2026-10-28 §3.10): coding tasks run through OpenVibe.Run (queued, placed, running, done, failed), as common.action-list-result@1. GET /api/v1/actions?subject=usr_… with a service token; granted to OpenVibe.Network's aggregator only. Never another person's items, and only the fields of common.action-item@1.",
+ "permissions": [
+ "codes:read"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/actions"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "common.action-list-result@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "id": "network.actions.read",
+ "version": "1.0",
+ "owner": "network",
+ "status": "active",
+ "visibility": "public",
+ "description": "The Action Center for the signed-in person (plan 2026-10-28 §3.10): GET /api/v1/me/actions merges Actor, Codes and AI items and Network's own confirmations into running, waiting, scheduled, done and failed (network.me-actions-result@1); POST /api/v1/me/actions/:service/:id/:action approves, declines or cancels through the owning authority. Readable from every OpenVibe site with the person's Network token, like the bell.",
+ "permissions": [
+ "network:read",
+ "network:write"
+ ],
+ "resourceConstraints": [
+ "none"
+ ],
+ "quotaClass": "standard",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/me/actions",
+ "POST /api/v1/me/actions/:service/:id/:action"
+ ],
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "network.me-actions-result@1"
+}
@@ -23,7 +23,9 @@
@@ -23,7 +23,9 @@
"actor.resource.read",
"actor.resource.read",
"actor.resource.control",
"actor.resource.control",
"actor.agent.manage",
"actor.agent.manage",
- "actor.agent.run"
+ "actor.agent.run",
+ "actor.actions.read",
+ "actor.approval.decide"
],
],
"eventsProduced": [],
"eventsProduced": [],
"eventsConsumed": [
"eventsConsumed": [
@@ -27,7 +27,8 @@
@@ -27,7 +27,8 @@
"ai.run.create",
"ai.run.create",
"ai.run.read",
"ai.run.read",
"ai.usage.read",
"ai.usage.read",
- "ai.workflow.manage"
+ "ai.workflow.manage",
+ "ai.actions.read"
],
],
"eventsProduced": [
"eventsProduced": [
"ai.run.queued",
"ai.run.queued",
@@ -43,7 +43,8 @@
@@ -43,7 +43,8 @@
"capabilities": [
"capabilities": [
"codes.task.start",
"codes.task.start",
"codes.task.read",
"codes.task.read",
- "codes.task.cancel"
+ "codes.task.cancel",
+ "codes.actions.read"
],
],
"eventsProduced": [],
"eventsProduced": [],
"eventsConsumed": [],
"eventsConsumed": [],
@@ -76,7 +76,8 @@
@@ -76,7 +76,8 @@
"network.resource.report",
"network.resource.report",
"network.secret.use",
"network.secret.use",
"network.staff.read",
"network.staff.read",
- "network.status.incident"
+ "network.status.incident",
+ "network.actions.read"
],
],
"eventsProduced": [
"eventsProduced": [
"network.account.deleted",
"network.account.deleted",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.228.0",
+ "version": "0.229.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",