openvibers/openvibe.contracts Commits
actor.assignment@1: the tree of delegated work, its capabilities and a step assignment id (0.328.0) (#336)
Changes
@@@ -1,5 +1,11 @@# Changelog++## 0.328.0 — 2026-11-07++++- Add `actor.assignment@1`: one node of the tree of delegated work (plan §12) — id, root, parent, depth, origin (`person`, `routine`, `outside`), mode (`work`, `consult`, `notify`), reply (`resume`, `poll`, `none`), the agent and task it runs as, the node's level and effective level, the root's budget (limit, spent and remaining), state and timestamps. A node is one hand-off: a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. The effective level is the higher of the agent's own and the one inherited along a person's or routine's line; outside work never passes a level down. A cancel cascades down the tree, and a root's budget stops its children when spent. `GET /api/v1/assignments/:id` answers the node and its children and `POST /api/v1/assignments/:id/cancel` cancels the subtree; both are owner-only and another person gets 404. An existing task gets a root lazily.++- Add the capabilities `actor.assignment.read` and `actor.assignment.cancel`, and name them in Actor's service manifest. They are the two assignment routes above.++- `actor.task-event@2` gains an optional `assignment_id` on a step event, so the Dock's timeline can draw the work tree later. Additive: an event without one stays valid, and the task record is still the source of truth.++## 0.327.0 — 2026-11-07- One Computer across Surf, Actor and the Dock (plan 2026-11-07: "Surf, Computer and Actor are one experience"): `platform.task@1` gains optional `computer` (`session_id`, `machine`, `where`, `cost_hint`, `driving`) — the browser or desktop session a running task opened, wherever it runs. `session_id` is OpenVibe.Run's `ses_…`; it is null only when the desk runs directly on the person's own machine through OpenVibe.Bot, where there is no Run session. `where` is `yours`, `home` or `network`, and `machine` is the person's own word for it.nnew file mode 100644@@@ -0,0 +1,24 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/assignment-cancel-result.v1.json",++ "title": "ActorAssignmentCancelResult",++ "description": "actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "assignment",++ "cancelled"++ ],++ "properties": {++ "assignment": {++ "$ref": "assignment.v1.json"++ },++ "cancelled": {++ "type": "array",++ "maxItems": 1000,++ "items": {++ "$ref": "assignment.v1.json"++ }++ }++ }++}nnew file mode 100644@@@ -0,0 +1,24 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/assignment-tree.v1.json",++ "title": "ActorAssignmentTree",++ "description": "actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "assignment",++ "children"++ ],++ "properties": {++ "assignment": {++ "$ref": "assignment.v1.json"++ },++ "children": {++ "type": "array",++ "maxItems": 100,++ "items": {++ "$ref": "assignment.v1.json"++ }++ }++ }++}nnew file mode 100644@@@ -0,0 +1,159 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/assignment.v1.json",++ "title": "ActorAssignment",++ "description": "actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "root",++ "parent",++ "depth",++ "origin",++ "mode",++ "reply",++ "agent_id",++ "task_id",++ "level",++ "effective_level",++ "budget",++ "state",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "root": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "parent": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "depth": {++ "type": "integer",++ "minimum": 0++ },++ "origin": {++ "type": "string",++ "enum": [++ "person",++ "routine",++ "outside"++ ]++ },++ "mode": {++ "type": "string",++ "enum": [++ "work",++ "consult",++ "notify"++ ]++ },++ "reply": {++ "type": "string",++ "enum": [++ "resume",++ "poll",++ "none"++ ]++ },++ "agent_id": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "task_id": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "level": {++ "type": "string",++ "enum": [++ "ask",++ "auto-edits",++ "approve-for-me",++ "full"++ ]++ },++ "effective_level": {++ "type": "string",++ "enum": [++ "ask",++ "auto-edits",++ "approve-for-me",++ "full"++ ]++ },++ "budget": {++ "type": "object",++ "additionalProperties": false,++ "description": "The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.",++ "required": [++ "limit_usd",++ "spent_usd",++ "remaining_usd"++ ],++ "properties": {++ "limit_usd": {++ "type": "number",++ "minimum": 0++ },++ "spent_usd": {++ "type": "number",++ "minimum": 0++ },++ "remaining_usd": {++ "type": "number",++ "minimum": 0++ }++ }++ },++ "state": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "waiting",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "started_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "ended_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ }++ }++}@@@ -58,6 +58,11 @@"handoff"]},++ "assignment_id": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The assignment node this step belongs to (actor.assignment@1): the work tree the Dock may draw later. Older events and work with no assignment have none."++ },"text": {"type": "string","maxLength": 8000@@@ -7307,6 +7307,36 @@"status": "active","adr": "ADR-044"},++ {++ "id": "actor.assignment",++ "version": "1.0.0",++ "owner": "actor",++ "schema": "actor/assignment.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active",++ "adr": "ADR-044"++ },++ {++ "id": "actor.assignment-tree",++ "version": "1.0.0",++ "owner": "actor",++ "schema": "actor/assignment-tree.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active",++ "adr": "ADR-044"++ },++ {++ "id": "actor.assignment-cancel-result",++ "version": "1.0.0",++ "owner": "actor",++ "schema": "actor/assignment-cancel-result.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active",++ "adr": "ADR-044"++ },{"id": "actor.agent-list-result","version": "1.0.0",nnew file mode 100644@@@ -0,0 +1,19 @@++{++ "assignment": {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },++ "state": "cancelled",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:05.000Z"++ }++}nnew file mode 100644@@@ -0,0 +1,24 @@++{++ "assignment": {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": {++ "limit_usd": 0.05,++ "spent_usd": 0,++ "remaining_usd": 0.05++ },++ "state": "paused",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:05.000Z"++ },++ "cancelled": []++}nnew file mode 100644@@@ -0,0 +1,40 @@++{++ "assignment": {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },++ "state": "cancelled",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:05.000Z",++ "ended_at": "2026-11-07T10:00:05.000Z"++ },++ "cancelled": [++ {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },++ "state": "cancelled",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:05.000Z",++ "ended_at": "2026-11-07T10:00:05.000Z"++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,46 @@++{++ "assignment": {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": {++ "limit_usd": 0.05,++ "spent_usd": 0,++ "remaining_usd": 0.05++ },++ "state": "running",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++ },++ "children": [++ {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPT",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 1,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": {++ "limit_usd": 0.05,++ "spent_usd": 0,++ "remaining_usd": 0.05++ },++ "state": "paused",++ "created_at": "2026-11-07T10:00:01.000Z",++ "updated_at": "2026-11-07T10:00:01.000Z"++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,19 @@++{++ "assignment": {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },++ "state": "running",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++ }++}nnew file mode 100644@@@ -0,0 +1,38 @@++{++ "assignment": {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },++ "state": "running",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++ },++ "children": [++ {++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPT",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "depth": 1,++ "origin": "person",++ "mode": "consult",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "full",++ "effective_level": "full",++ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },++ "state": "queued",++ "created_at": "2026-11-07T10:00:01.000Z",++ "updated_at": "2026-11-07T10:00:01.000Z"++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "webhook",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },++ "state": "queued",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },++ "state": "paused",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,16 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "state": "queued",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,17 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": -1,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },++ "state": "queued",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,18 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": null,++ "task_id": null,++ "level": "ask",++ "effective_level": "ask",++ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },++ "state": "queued",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:00.000Z",++ "owner": "user:usr_01JAB2C3D4E5F6G7H8J9K0MNPS"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPT",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "depth": 1,++ "origin": "routine",++ "mode": "consult",++ "reply": "poll",++ "agent_id": null,++ "task_id": null,++ "level": "auto-edits",++ "effective_level": "auto-edits",++ "budget": {++ "limit_usd": 0.05,++ "spent_usd": 0.0012,++ "remaining_usd": 0.0488++ },++ "state": "queued",++ "created_at": "2026-11-07T10:00:02.000Z",++ "updated_at": "2026-11-07T10:00:02.000Z"++}nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPX",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPX",++ "parent": null,++ "depth": 0,++ "origin": "outside",++ "mode": "notify",++ "reply": "none",++ "agent_id": null,++ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPT",++ "level": "full",++ "effective_level": "ask",++ "budget": {++ "limit_usd": 0,++ "spent_usd": 0,++ "remaining_usd": 0++ },++ "state": "succeeded",++ "created_at": "2026-11-07T10:00:03.000Z",++ "updated_at": "2026-11-07T10:00:09.000Z",++ "started_at": "2026-11-07T10:00:03.000Z",++ "ended_at": "2026-11-07T10:00:09.000Z"++}nnew file mode 100644@@@ -0,0 +1,23 @@++{++ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "parent": null,++ "depth": 0,++ "origin": "person",++ "mode": "work",++ "reply": "resume",++ "agent_id": "agt_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "level": "ask",++ "effective_level": "ask",++ "budget": {++ "limit_usd": 0.05,++ "spent_usd": 0.0012,++ "remaining_usd": 0.0488++ },++ "state": "running",++ "created_at": "2026-11-07T10:00:00.000Z",++ "updated_at": "2026-11-07T10:00:05.000Z",++ "started_at": "2026-11-07T10:00:01.000Z",++ "ended_at": null++}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "seq": 6,++ "kind": "output",++ "at": "2026-11-07T10:00:02.000Z",++ "agent": "openvibe-runtime",++ "step": "tool_call",++ "tool": "computer_run",++ "input": "npm test",++ "assignment_id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS"++}@@@ -84526,6 +84526,11 @@"handoff"]},++ "assignment_id": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The assignment node this step belongs to (actor.assignment@1): the work tree the Dock may draw later. Older events and work with no assignment have none."++ },"text": {"type": "string","maxLength": 8000@@@ -84718,6 +84723,228 @@}}},++ "actor.assignment": {++ "version": "1.0.0",++ "owner": "actor",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/assignment.v1.json",++ "title": "ActorAssignment",++ "description": "actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "root",++ "parent",++ "depth",++ "origin",++ "mode",++ "reply",++ "agent_id",++ "task_id",++ "level",++ "effective_level",++ "budget",++ "state",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "root": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "parent": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "depth": {++ "type": "integer",++ "minimum": 0++ },++ "origin": {++ "type": "string",++ "enum": [++ "person",++ "routine",++ "outside"++ ]++ },++ "mode": {++ "type": "string",++ "enum": [++ "work",++ "consult",++ "notify"++ ]++ },++ "reply": {++ "type": "string",++ "enum": [++ "resume",++ "poll",++ "none"++ ]++ },++ "agent_id": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "task_id": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "level": {++ "type": "string",++ "enum": [++ "ask",++ "auto-edits",++ "approve-for-me",++ "full"++ ]++ },++ "effective_level": {++ "type": "string",++ "enum": [++ "ask",++ "auto-edits",++ "approve-for-me",++ "full"++ ]++ },++ "budget": {++ "type": "object",++ "additionalProperties": false,++ "description": "The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.",++ "required": [++ "limit_usd",++ "spent_usd",++ "remaining_usd"++ ],++ "properties": {++ "limit_usd": {++ "type": "number",++ "minimum": 0++ },++ "spent_usd": {++ "type": "number",++ "minimum": 0++ },++ "remaining_usd": {++ "type": "number",++ "minimum": 0++ }++ }++ },++ "state": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "waiting",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "started_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "ended_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ }++ }++ }++ },++ "actor.assignment-tree": {++ "version": "1.0.0",++ "owner": "actor",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/assignment-tree.v1.json",++ "title": "ActorAssignmentTree",++ "description": "actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "assignment",++ "children"++ ],++ "properties": {++ "assignment": {++ "$ref": "assignment.v1.json"++ },++ "children": {++ "type": "array",++ "maxItems": 100,++ "items": {++ "$ref": "assignment.v1.json"++ }++ }++ }++ }++ },++ "actor.assignment-cancel-result": {++ "version": "1.0.0",++ "owner": "actor",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/assignment-cancel-result.v1.json",++ "title": "ActorAssignmentCancelResult",++ "description": "actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "assignment",++ "cancelled"++ ],++ "properties": {++ "assignment": {++ "$ref": "assignment.v1.json"++ },++ "cancelled": {++ "type": "array",++ "maxItems": 1000,++ "items": {++ "$ref": "assignment.v1.json"++ }++ }++ }++ }++ },"actor.agent-list-result@1": {"version": "1.0.0","owner": "actor",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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"@@@ -825,6 +825,118 @@}}},++ "/api/v1/assignments/{id}": {++ "get": {++ "operationId": "get_api_v1_assignments_id",++ "summary": "Read one node of your assignment tree and its children with GET /api/v1/assignments/:id (actor.assignment@1): the hand-off, who started it, its mode and reply, the agent and task it runs as, its level",++ "description": "**actor.assignment.read** (public): Read one node of your assignment tree and its children with GET /api/v1/assignments/:id (actor.assignment@1): the hand-off, who started it, its mode and reply, the agent and task it runs as, its level and effective level, the root's budget and the state. Only the person whose work it is can read it; another person gets the same 404 as a node that does not exist.",++ "tags": [++ "actor.assignment"++ ],++ "x-openvibe-capabilities": [++ "actor.assignment.read"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "actor-read",++ "security": [++ {++ "openvibeToken": [++ "actor.assignment.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/actor.assignment-tree.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/assignments/{id}/cancel": {++ "post": {++ "operationId": "post_api_v1_assignments_id_cancel",++ "summary": "Cancel your assignment tree from one node down with POST /api/v1/assignments/:id/cancel: every child node is cancelled and every task still running under the tree is stopped.",++ "description": "**actor.assignment.cancel** (public): Cancel your assignment tree from one node down with POST /api/v1/assignments/:id/cancel: every child node is cancelled and every task still running under the tree is stopped. It answers the node and the nodes it cancelled. Only the person whose work it is can cancel it; another person gets the same 404 as a node that does not exist.",++ "tags": [++ "actor.assignment"++ ],++ "x-openvibe-capabilities": [++ "actor.assignment.cancel"++ ],++ "x-openvibe-visibility": [++ "public"++ ],++ "x-openvibe-quota-class": "actor-write",++ "security": [++ {++ "openvibeToken": [++ "actor.assignment.cancel"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/actor.assignment-cancel-result.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",@@@ -3906,6 +4018,207 @@}}},++ "actor.assignment-cancel-result.v1": {++ "title": "ActorAssignmentCancelResult",++ "description": "actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "assignment",++ "cancelled"++ ],++ "properties": {++ "assignment": {++ "$ref": "#/components/schemas/actor.assignment.v1"++ },++ "cancelled": {++ "type": "array",++ "maxItems": 1000,++ "items": {++ "$ref": "#/components/schemas/actor.assignment.v1"++ }++ }++ }++ },++ "actor.assignment-tree.v1": {++ "title": "ActorAssignmentTree",++ "description": "actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "assignment",++ "children"++ ],++ "properties": {++ "assignment": {++ "$ref": "#/components/schemas/actor.assignment.v1"++ },++ "children": {++ "type": "array",++ "maxItems": 100,++ "items": {++ "$ref": "#/components/schemas/actor.assignment.v1"++ }++ }++ }++ },++ "actor.assignment.v1": {++ "title": "ActorAssignment",++ "description": "actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "root",++ "parent",++ "depth",++ "origin",++ "mode",++ "reply",++ "agent_id",++ "task_id",++ "level",++ "effective_level",++ "budget",++ "state",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "root": {++ "type": "string",++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "parent": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "depth": {++ "type": "integer",++ "minimum": 0++ },++ "origin": {++ "type": "string",++ "enum": [++ "person",++ "routine",++ "outside"++ ]++ },++ "mode": {++ "type": "string",++ "enum": [++ "work",++ "consult",++ "notify"++ ]++ },++ "reply": {++ "type": "string",++ "enum": [++ "resume",++ "poll",++ "none"++ ]++ },++ "agent_id": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "task_id": {++ "type": [++ "string",++ "null"++ ],++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "level": {++ "type": "string",++ "enum": [++ "ask",++ "auto-edits",++ "approve-for-me",++ "full"++ ]++ },++ "effective_level": {++ "type": "string",++ "enum": [++ "ask",++ "auto-edits",++ "approve-for-me",++ "full"++ ]++ },++ "budget": {++ "type": "object",++ "additionalProperties": false,++ "description": "The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.",++ "required": [++ "limit_usd",++ "spent_usd",++ "remaining_usd"++ ],++ "properties": {++ "limit_usd": {++ "type": "number",++ "minimum": 0++ },++ "spent_usd": {++ "type": "number",++ "minimum": 0++ },++ "remaining_usd": {++ "type": "number",++ "minimum": 0++ }++ }++ },++ "state": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "waiting",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "started_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ },++ "ended_at": {++ "type": [++ "string",++ "null"++ ],++ "format": "date-time"++ }++ }++ },"actor.model-manage-request.v1": {"title": "ActorModelManageRequest","description": "actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bench API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe Connect API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Design API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Domains API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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,8 +5,8 @@"service": "actor","name": "OpenVibe.Actor","origin": "https://openvibe.actor",-- "operations": 49,-- "capabilities": 14++ "operations": 51,++ "capabilities": 16},{"service": "ai",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Report API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Today API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Vision API",-- "version": "0.327.0",-- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",-- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.328.0",++ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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"@@@ -265936,6 +265936,61 @@ export interface ActorTaskWebhook {task: Task;}++/** [email protected] (owner: actor) */++/**++ * actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.++ */++export interface ActorAssignment {++ id: string;++ root: string;++ parent: string | null;++ depth: number;++ origin: "person" | "routine" | "outside";++ mode: "work" | "consult" | "notify";++ reply: "resume" | "poll" | "none";++ agent_id: string | null;++ task_id: string | null;++ level: "ask" | "auto-edits" | "approve-for-me" | "full";++ effective_level: "ask" | "auto-edits" | "approve-for-me" | "full";++ /**++ * The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.++ */++ budget: {++ limit_usd: number;++ spent_usd: number;++ remaining_usd: number;++ };++ state: "queued" | "running" | "waiting" | "succeeded" | "failed" | "cancelled";++ created_at: string;++ updated_at: string;++ started_at?: string | null;++ ended_at?: string | null;++}++++/** [email protected] (owner: actor) */++/**++ * actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.++ */++export interface ActorAssignmentTree {++ assignment: ActorAssignment;++ /**++ * @maxItems 100++ */++ children: ActorAssignment[];++}++++/** [email protected] (owner: actor) */++/**++ * actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.++ */++export interface ActorAssignmentCancelResult {++ assignment: ActorAssignment;++ /**++ * @maxItems 1000++ */++ cancelled: ActorAssignment[];++}++/** [email protected] (owner: actor) *//*** actor.agent-list-result@1: GET /api/v1/agents (capability actor.agent.read): every agent system Actor can route a task to. KIND is the backend class (ADR-044): openvibe-runtime (OpenVibe's own agent, acting through OpenVibe services), agent-platform (another platform's agent, called through its API), open-model (an open model on OpenVibe's own hardware), codes (coding work through OpenVibe.Codes), node and run (a person's machine or OpenVibe.Run). TRUST is ADR-046's class; private mode takes only first-party ones. CAN are the task classes and tools it takes (task:<class>, tool:<name>). RATE_CARD is the published price, revised by review and never written by a model (SOURCE says where it comes from, VERIFIED_AT when a person last checked it). AVAILABLE says whether it can take a task now and REASON why not.nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "actor.assignment.cancel",++ "version": "1.0",++ "owner": "actor",++ "status": "active",++ "visibility": "public",++ "description": "Cancel your assignment tree from one node down with POST /api/v1/assignments/:id/cancel: every child node is cancelled and every task still running under the tree is stopped. It answers the node and the nodes it cancelled. Only the person whose work it is can cancel it; another person gets the same 404 as a node that does not exist.",++ "inputSchema": "common.no-body@1",++ "permissions": [++ "actor:assignments:cancel"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "actor-write",++ "events": [],++ "implementedBy": [++ "POST /api/v1/assignments/:id/cancel"++ ],++ "outputSchema": "actor.assignment-cancel-result@1"++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "actor.assignment.read",++ "version": "1.0",++ "owner": "actor",++ "status": "active",++ "visibility": "public",++ "description": "Read one node of your assignment tree and its children with GET /api/v1/assignments/:id (actor.assignment@1): the hand-off, who started it, its mode and reply, the agent and task it runs as, its level and effective level, the root's budget and the state. Only the person whose work it is can read it; another person gets the same 404 as a node that does not exist.",++ "inputSchema": "common.no-body@1",++ "permissions": [++ "actor:assignments:read"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "actor-read",++ "events": [],++ "implementedBy": [++ "GET /api/v1/assignments/:id"++ ],++ "outputSchema": "actor.assignment-tree@1"++}@@@ -29,7 +29,9 @@"actor.model.manage","actor.a2a.task","actor.config.manage",-- "actor.timeline.read"++ "actor.timeline.read",++ "actor.assignment.read",++ "actor.assignment.cancel"],"eventsProduced": ["agent.step.started",@@@ -1,12 +1,12 @@{"name": "openvibe-contracts",-- "version": "0.327.0",++ "version": "0.328.0","lockfileVersion": 3,"requires": true,"packages": {"": {"name": "openvibe-contracts",-- "version": "0.327.0",++ "version": "0.328.0","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.327.0",++ "version": "0.328.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",
@@ -1,5 +1,11 @@
@@ -1,5 +1,11 @@
# Changelog
# Changelog
+## 0.328.0 — 2026-11-07
+
+- Add `actor.assignment@1`: one node of the tree of delegated work (plan §12) — id, root, parent, depth, origin (`person`, `routine`, `outside`), mode (`work`, `consult`, `notify`), reply (`resume`, `poll`, `none`), the agent and task it runs as, the node's level and effective level, the root's budget (limit, spent and remaining), state and timestamps. A node is one hand-off: a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. The effective level is the higher of the agent's own and the one inherited along a person's or routine's line; outside work never passes a level down. A cancel cascades down the tree, and a root's budget stops its children when spent. `GET /api/v1/assignments/:id` answers the node and its children and `POST /api/v1/assignments/:id/cancel` cancels the subtree; both are owner-only and another person gets 404. An existing task gets a root lazily.
+- Add the capabilities `actor.assignment.read` and `actor.assignment.cancel`, and name them in Actor's service manifest. They are the two assignment routes above.
+- `actor.task-event@2` gains an optional `assignment_id` on a step event, so the Dock's timeline can draw the work tree later. Additive: an event without one stays valid, and the task record is still the source of truth.
+
## 0.327.0 — 2026-11-07
## 0.327.0 — 2026-11-07
- One Computer across Surf, Actor and the Dock (plan 2026-11-07: "Surf, Computer and Actor are one experience"): `platform.task@1` gains optional `computer` (`session_id`, `machine`, `where`, `cost_hint`, `driving`) — the browser or desktop session a running task opened, wherever it runs. `session_id` is OpenVibe.Run's `ses_…`; it is null only when the desk runs directly on the person's own machine through OpenVibe.Bot, where there is no Run session. `where` is `yours`, `home` or `network`, and `machine` is the person's own word for it.
- One Computer across Surf, Actor and the Dock (plan 2026-11-07: "Surf, Computer and Actor are one experience"): `platform.task@1` gains optional `computer` (`session_id`, `machine`, `where`, `cost_hint`, `driving`) — the browser or desktop session a running task opened, wherever it runs. `session_id` is OpenVibe.Run's `ses_…`; it is null only when the desk runs directly on the person's own machine through OpenVibe.Bot, where there is no Run session. `where` is `yours`, `home` or `network`, and `machine` is the person's own word for it.
new file mode 100644
new file mode 100644
@@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/assignment-cancel-result.v1.json",
+ "title": "ActorAssignmentCancelResult",
+ "description": "actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "assignment",
+ "cancelled"
+ ],
+ "properties": {
+ "assignment": {
+ "$ref": "assignment.v1.json"
+ },
+ "cancelled": {
+ "type": "array",
+ "maxItems": 1000,
+ "items": {
+ "$ref": "assignment.v1.json"
+ }
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/assignment-tree.v1.json",
+ "title": "ActorAssignmentTree",
+ "description": "actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "assignment",
+ "children"
+ ],
+ "properties": {
+ "assignment": {
+ "$ref": "assignment.v1.json"
+ },
+ "children": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "$ref": "assignment.v1.json"
+ }
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,159 @@
@@ -0,0 +1,159 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/assignment.v1.json",
+ "title": "ActorAssignment",
+ "description": "actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "root",
+ "parent",
+ "depth",
+ "origin",
+ "mode",
+ "reply",
+ "agent_id",
+ "task_id",
+ "level",
+ "effective_level",
+ "budget",
+ "state",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "root": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "parent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "depth": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "origin": {
+ "type": "string",
+ "enum": [
+ "person",
+ "routine",
+ "outside"
+ ]
+ },
+ "mode": {
+ "type": "string",
+ "enum": [
+ "work",
+ "consult",
+ "notify"
+ ]
+ },
+ "reply": {
+ "type": "string",
+ "enum": [
+ "resume",
+ "poll",
+ "none"
+ ]
+ },
+ "agent_id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "task_id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "level": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "auto-edits",
+ "approve-for-me",
+ "full"
+ ]
+ },
+ "effective_level": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "auto-edits",
+ "approve-for-me",
+ "full"
+ ]
+ },
+ "budget": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.",
+ "required": [
+ "limit_usd",
+ "spent_usd",
+ "remaining_usd"
+ ],
+ "properties": {
+ "limit_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "spent_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "remaining_usd": {
+ "type": "number",
+ "minimum": 0
+ }
+ }
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "waiting",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "started_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "ended_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ }
+ }
+}
@@ -58,6 +58,11 @@
@@ -58,6 +58,11 @@
"handoff"
"handoff"
]
]
},
},
+ "assignment_id": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The assignment node this step belongs to (actor.assignment@1): the work tree the Dock may draw later. Older events and work with no assignment have none."
+ },
"text": {
"text": {
"type": "string",
"type": "string",
"maxLength": 8000
"maxLength": 8000
@@ -7307,6 +7307,36 @@
@@ -7307,6 +7307,36 @@
"status": "active",
"status": "active",
"adr": "ADR-044"
"adr": "ADR-044"
},
},
+ {
+ "id": "actor.assignment",
+ "version": "1.0.0",
+ "owner": "actor",
+ "schema": "actor/assignment.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active",
+ "adr": "ADR-044"
+ },
+ {
+ "id": "actor.assignment-tree",
+ "version": "1.0.0",
+ "owner": "actor",
+ "schema": "actor/assignment-tree.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active",
+ "adr": "ADR-044"
+ },
+ {
+ "id": "actor.assignment-cancel-result",
+ "version": "1.0.0",
+ "owner": "actor",
+ "schema": "actor/assignment-cancel-result.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active",
+ "adr": "ADR-044"
+ },
{
{
"id": "actor.agent-list-result",
"id": "actor.agent-list-result",
"version": "1.0.0",
"version": "1.0.0",
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
+{
+ "assignment": {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },
+ "state": "cancelled",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:05.000Z"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
+{
+ "assignment": {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": {
+ "limit_usd": 0.05,
+ "spent_usd": 0,
+ "remaining_usd": 0.05
+ },
+ "state": "paused",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:05.000Z"
+ },
+ "cancelled": []
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,40 @@
@@ -0,0 +1,40 @@
+{
+ "assignment": {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },
+ "state": "cancelled",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:05.000Z",
+ "ended_at": "2026-11-07T10:00:05.000Z"
+ },
+ "cancelled": [
+ {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },
+ "state": "cancelled",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:05.000Z",
+ "ended_at": "2026-11-07T10:00:05.000Z"
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
+{
+ "assignment": {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": {
+ "limit_usd": 0.05,
+ "spent_usd": 0,
+ "remaining_usd": 0.05
+ },
+ "state": "running",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+ },
+ "children": [
+ {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPT",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 1,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": {
+ "limit_usd": 0.05,
+ "spent_usd": 0,
+ "remaining_usd": 0.05
+ },
+ "state": "paused",
+ "created_at": "2026-11-07T10:00:01.000Z",
+ "updated_at": "2026-11-07T10:00:01.000Z"
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,19 @@
@@ -0,0 +1,19 @@
+{
+ "assignment": {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },
+ "state": "running",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
+{
+ "assignment": {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },
+ "state": "running",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+ },
+ "children": [
+ {
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPT",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "depth": 1,
+ "origin": "person",
+ "mode": "consult",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "full",
+ "effective_level": "full",
+ "budget": { "limit_usd": 0.05, "spent_usd": 0, "remaining_usd": 0.05 },
+ "state": "queued",
+ "created_at": "2026-11-07T10:00:01.000Z",
+ "updated_at": "2026-11-07T10:00:01.000Z"
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "webhook",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },
+ "state": "queued",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },
+ "state": "paused",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "state": "queued",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": -1,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },
+ "state": "queued",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": null,
+ "task_id": null,
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": { "limit_usd": 1, "spent_usd": 0, "remaining_usd": 1 },
+ "state": "queued",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:00.000Z",
+ "owner": "user:usr_01JAB2C3D4E5F6G7H8J9K0MNPS"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPT",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "depth": 1,
+ "origin": "routine",
+ "mode": "consult",
+ "reply": "poll",
+ "agent_id": null,
+ "task_id": null,
+ "level": "auto-edits",
+ "effective_level": "auto-edits",
+ "budget": {
+ "limit_usd": 0.05,
+ "spent_usd": 0.0012,
+ "remaining_usd": 0.0488
+ },
+ "state": "queued",
+ "created_at": "2026-11-07T10:00:02.000Z",
+ "updated_at": "2026-11-07T10:00:02.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPX",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPX",
+ "parent": null,
+ "depth": 0,
+ "origin": "outside",
+ "mode": "notify",
+ "reply": "none",
+ "agent_id": null,
+ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPT",
+ "level": "full",
+ "effective_level": "ask",
+ "budget": {
+ "limit_usd": 0,
+ "spent_usd": 0,
+ "remaining_usd": 0
+ },
+ "state": "succeeded",
+ "created_at": "2026-11-07T10:00:03.000Z",
+ "updated_at": "2026-11-07T10:00:09.000Z",
+ "started_at": "2026-11-07T10:00:03.000Z",
+ "ended_at": "2026-11-07T10:00:09.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
+{
+ "id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "root": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "parent": null,
+ "depth": 0,
+ "origin": "person",
+ "mode": "work",
+ "reply": "resume",
+ "agent_id": "agt_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "level": "ask",
+ "effective_level": "ask",
+ "budget": {
+ "limit_usd": 0.05,
+ "spent_usd": 0.0012,
+ "remaining_usd": 0.0488
+ },
+ "state": "running",
+ "created_at": "2026-11-07T10:00:00.000Z",
+ "updated_at": "2026-11-07T10:00:05.000Z",
+ "started_at": "2026-11-07T10:00:01.000Z",
+ "ended_at": null
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "task_id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "seq": 6,
+ "kind": "output",
+ "at": "2026-11-07T10:00:02.000Z",
+ "agent": "openvibe-runtime",
+ "step": "tool_call",
+ "tool": "computer_run",
+ "input": "npm test",
+ "assignment_id": "asg_01JAB2C3D4E5F6G7H8J9K0MNPS"
+}
@@ -84526,6 +84526,11 @@
@@ -84526,6 +84526,11 @@
"handoff"
"handoff"
]
]
},
},
+ "assignment_id": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The assignment node this step belongs to (actor.assignment@1): the work tree the Dock may draw later. Older events and work with no assignment have none."
+ },
"text": {
"text": {
"type": "string",
"type": "string",
"maxLength": 8000
"maxLength": 8000
@@ -84718,6 +84723,228 @@
@@ -84718,6 +84723,228 @@
}
}
}
}
},
},
+ "actor.assignment": {
+ "version": "1.0.0",
+ "owner": "actor",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/assignment.v1.json",
+ "title": "ActorAssignment",
+ "description": "actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "root",
+ "parent",
+ "depth",
+ "origin",
+ "mode",
+ "reply",
+ "agent_id",
+ "task_id",
+ "level",
+ "effective_level",
+ "budget",
+ "state",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "root": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "parent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "depth": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "origin": {
+ "type": "string",
+ "enum": [
+ "person",
+ "routine",
+ "outside"
+ ]
+ },
+ "mode": {
+ "type": "string",
+ "enum": [
+ "work",
+ "consult",
+ "notify"
+ ]
+ },
+ "reply": {
+ "type": "string",
+ "enum": [
+ "resume",
+ "poll",
+ "none"
+ ]
+ },
+ "agent_id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "task_id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "level": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "auto-edits",
+ "approve-for-me",
+ "full"
+ ]
+ },
+ "effective_level": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "auto-edits",
+ "approve-for-me",
+ "full"
+ ]
+ },
+ "budget": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.",
+ "required": [
+ "limit_usd",
+ "spent_usd",
+ "remaining_usd"
+ ],
+ "properties": {
+ "limit_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "spent_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "remaining_usd": {
+ "type": "number",
+ "minimum": 0
+ }
+ }
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "waiting",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "started_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "ended_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ }
+ }
+ }
+ },
+ "actor.assignment-tree": {
+ "version": "1.0.0",
+ "owner": "actor",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/assignment-tree.v1.json",
+ "title": "ActorAssignmentTree",
+ "description": "actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "assignment",
+ "children"
+ ],
+ "properties": {
+ "assignment": {
+ "$ref": "assignment.v1.json"
+ },
+ "children": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "$ref": "assignment.v1.json"
+ }
+ }
+ }
+ }
+ },
+ "actor.assignment-cancel-result": {
+ "version": "1.0.0",
+ "owner": "actor",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/assignment-cancel-result.v1.json",
+ "title": "ActorAssignmentCancelResult",
+ "description": "actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "assignment",
+ "cancelled"
+ ],
+ "properties": {
+ "assignment": {
+ "$ref": "assignment.v1.json"
+ },
+ "cancelled": {
+ "type": "array",
+ "maxItems": 1000,
+ "items": {
+ "$ref": "assignment.v1.json"
+ }
+ }
+ }
+ }
+ },
"actor.agent-list-result@1": {
"actor.agent-list-result@1": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "actor",
"owner": "actor",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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"
@@ -825,6 +825,118 @@
@@ -825,6 +825,118 @@
}
}
}
}
},
},
+ "/api/v1/assignments/{id}": {
+ "get": {
+ "operationId": "get_api_v1_assignments_id",
+ "summary": "Read one node of your assignment tree and its children with GET /api/v1/assignments/:id (actor.assignment@1): the hand-off, who started it, its mode and reply, the agent and task it runs as, its level",
+ "description": "**actor.assignment.read** (public): Read one node of your assignment tree and its children with GET /api/v1/assignments/:id (actor.assignment@1): the hand-off, who started it, its mode and reply, the agent and task it runs as, its level and effective level, the root's budget and the state. Only the person whose work it is can read it; another person gets the same 404 as a node that does not exist.",
+ "tags": [
+ "actor.assignment"
+ ],
+ "x-openvibe-capabilities": [
+ "actor.assignment.read"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "actor-read",
+ "security": [
+ {
+ "openvibeToken": [
+ "actor.assignment.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/actor.assignment-tree.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/assignments/{id}/cancel": {
+ "post": {
+ "operationId": "post_api_v1_assignments_id_cancel",
+ "summary": "Cancel your assignment tree from one node down with POST /api/v1/assignments/:id/cancel: every child node is cancelled and every task still running under the tree is stopped.",
+ "description": "**actor.assignment.cancel** (public): Cancel your assignment tree from one node down with POST /api/v1/assignments/:id/cancel: every child node is cancelled and every task still running under the tree is stopped. It answers the node and the nodes it cancelled. Only the person whose work it is can cancel it; another person gets the same 404 as a node that does not exist.",
+ "tags": [
+ "actor.assignment"
+ ],
+ "x-openvibe-capabilities": [
+ "actor.assignment.cancel"
+ ],
+ "x-openvibe-visibility": [
+ "public"
+ ],
+ "x-openvibe-quota-class": "actor-write",
+ "security": [
+ {
+ "openvibeToken": [
+ "actor.assignment.cancel"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/actor.assignment-cancel-result.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",
@@ -3906,6 +4018,207 @@
@@ -3906,6 +4018,207 @@
}
}
}
}
},
},
+ "actor.assignment-cancel-result.v1": {
+ "title": "ActorAssignmentCancelResult",
+ "description": "actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "assignment",
+ "cancelled"
+ ],
+ "properties": {
+ "assignment": {
+ "$ref": "#/components/schemas/actor.assignment.v1"
+ },
+ "cancelled": {
+ "type": "array",
+ "maxItems": 1000,
+ "items": {
+ "$ref": "#/components/schemas/actor.assignment.v1"
+ }
+ }
+ }
+ },
+ "actor.assignment-tree.v1": {
+ "title": "ActorAssignmentTree",
+ "description": "actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "assignment",
+ "children"
+ ],
+ "properties": {
+ "assignment": {
+ "$ref": "#/components/schemas/actor.assignment.v1"
+ },
+ "children": {
+ "type": "array",
+ "maxItems": 100,
+ "items": {
+ "$ref": "#/components/schemas/actor.assignment.v1"
+ }
+ }
+ }
+ },
+ "actor.assignment.v1": {
+ "title": "ActorAssignment",
+ "description": "actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "root",
+ "parent",
+ "depth",
+ "origin",
+ "mode",
+ "reply",
+ "agent_id",
+ "task_id",
+ "level",
+ "effective_level",
+ "budget",
+ "state",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "root": {
+ "type": "string",
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "parent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^asg_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "depth": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "origin": {
+ "type": "string",
+ "enum": [
+ "person",
+ "routine",
+ "outside"
+ ]
+ },
+ "mode": {
+ "type": "string",
+ "enum": [
+ "work",
+ "consult",
+ "notify"
+ ]
+ },
+ "reply": {
+ "type": "string",
+ "enum": [
+ "resume",
+ "poll",
+ "none"
+ ]
+ },
+ "agent_id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "task_id": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "level": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "auto-edits",
+ "approve-for-me",
+ "full"
+ ]
+ },
+ "effective_level": {
+ "type": "string",
+ "enum": [
+ "ask",
+ "auto-edits",
+ "approve-for-me",
+ "full"
+ ]
+ },
+ "budget": {
+ "type": "object",
+ "additionalProperties": false,
+ "description": "The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.",
+ "required": [
+ "limit_usd",
+ "spent_usd",
+ "remaining_usd"
+ ],
+ "properties": {
+ "limit_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "spent_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "remaining_usd": {
+ "type": "number",
+ "minimum": 0
+ }
+ }
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "waiting",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "started_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ },
+ "ended_at": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "format": "date-time"
+ }
+ }
+ },
"actor.model-manage-request.v1": {
"actor.model-manage-request.v1": {
"title": "ActorModelManageRequest",
"title": "ActorModelManageRequest",
"description": "actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.",
"description": "actor.model-manage-request@1: the body of PUT /api/v1/me/model on OpenVibe.Actor: { choice, model? }. choice is 'auto' (Actor decides, as before), 'openvibe' (OpenVibe's own keys, through OpenVibe.AI) or 'own:<provider>' (your own key for that provider: openai, anthropic, deepseek, google, openrouter or mistral). model is the model id you picked for it, or nothing: OpenVibe.AI then routes the call. The key itself never reaches Actor: it stays sealed in OpenVibe.AI. An unknown provider or a model id that is not one is 422 actor.model.invalid.",
@@ -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.327.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bench API",
"title": "OpenVibe.Bench API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Bench as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe Connect API",
"title": "OpenVibe Connect API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe Connect as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Design API",
"title": "OpenVibe.Design API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Design as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Domains API",
"title": "OpenVibe.Domains API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Domains as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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,8 +5,8 @@
@@ -5,8 +5,8 @@
"service": "actor",
"service": "actor",
"name": "OpenVibe.Actor",
"name": "OpenVibe.Actor",
"origin": "https://openvibe.actor",
"origin": "https://openvibe.actor",
- "operations": 49,
- "capabilities": 14
+ "operations": 51,
+ "capabilities": 16
},
},
{
{
"service": "ai",
"service": "ai",
@@ -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.327.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Play as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Quest as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Report API",
"title": "OpenVibe.Report API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Report as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Today API",
"title": "OpenVibe.Today API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Today as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Vision API",
"title": "OpenVibe.Vision API",
- "version": "0.327.0",
- "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Vision as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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.327.0",
- "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.327.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.328.0",
+ "description": "Routes of OpenVibe.Zone as the OpenVibe contracts describe them (openvibe-contracts 0.328.0): each operation lists the capabilities it performs; a token for the 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"
@@ -265936,6 +265936,61 @@ export interface ActorTaskWebhook {
@@ -265936,6 +265936,61 @@ export interface ActorTaskWebhook {
task: Task;
task: Task;
}
}
+/** [email protected] (owner: actor) */
+/**
+ * actor.assignment@1: one node of the tree of delegated work (plan §12). A node is a hand-off — a person giving Actor a task, a routine or Watch trigger starting a run, an agent handing work to another agent, or Actor starting a Codes or Space task. ID is the node; ROOT names the node whose BUDGET the whole tree spends, PARENT the node that handed this work over (null on a root) and DEPTH its distance from the root (0 on a root). ORIGIN says who started the line: a person (person), a routine or Watch trigger (routine), or work from outside Actor (outside). MODE is the hand-off's kind (work, consult, notify) and REPLY how its result comes back (resume into the parent, poll, or none). LEVEL is the node's own level and EFFECTIVE_LEVEL the level its steps run at: the higher of the agent's own level and the one inherited from a person's or routine's line. Outside work never passes a level down. BUDGET is the root's budget and what the tree has spent. A cancel cascades down the tree. GET /api/v1/assignments/:id returns { assignment, children } and POST /api/v1/assignments/:id/cancel returns { assignment, cancelled }; both are owner-only, and another person's node is the same 404 as one that does not exist. A task has no node until one is made for it: an existing task gets a root lazily.
+ */
+export interface ActorAssignment {
+ id: string;
+ root: string;
+ parent: string | null;
+ depth: number;
+ origin: "person" | "routine" | "outside";
+ mode: "work" | "consult" | "notify";
+ reply: "resume" | "poll" | "none";
+ agent_id: string | null;
+ task_id: string | null;
+ level: "ask" | "auto-edits" | "approve-for-me" | "full";
+ effective_level: "ask" | "auto-edits" | "approve-for-me" | "full";
+ /**
+ * The budget of the root of this tree, and what the tree has spent of it. Every node carries the same root budget.
+ */
+ budget: {
+ limit_usd: number;
+ spent_usd: number;
+ remaining_usd: number;
+ };
+ state: "queued" | "running" | "waiting" | "succeeded" | "failed" | "cancelled";
+ created_at: string;
+ updated_at: string;
+ started_at?: string | null;
+ ended_at?: string | null;
+}
+
+/** [email protected] (owner: actor) */
+/**
+ * actor.assignment-tree@1: GET /api/v1/assignments/:id (capability actor.assignment.read): the node and its direct children, oldest first. Each node is an actor.assignment@1. Only the owner can read the tree; another person gets 404.
+ */
+export interface ActorAssignmentTree {
+ assignment: ActorAssignment;
+ /**
+ * @maxItems 100
+ */
+ children: ActorAssignment[];
+}
+
+/** [email protected] (owner: actor) */
+/**
+ * actor.assignment-cancel-result@1: POST /api/v1/assignments/:id/cancel (capability actor.assignment.cancel): the node as it is now and every node the cancel stopped, the node included and its children below it. The tasks those nodes ran are cancelled too. Only the owner can cancel; another person gets 404.
+ */
+export interface ActorAssignmentCancelResult {
+ assignment: ActorAssignment;
+ /**
+ * @maxItems 1000
+ */
+ cancelled: ActorAssignment[];
+}
+
/** [email protected] (owner: actor) */
/** [email protected] (owner: actor) */
/**
/**
* actor.agent-list-result@1: GET /api/v1/agents (capability actor.agent.read): every agent system Actor can route a task to. KIND is the backend class (ADR-044): openvibe-runtime (OpenVibe's own agent, acting through OpenVibe services), agent-platform (another platform's agent, called through its API), open-model (an open model on OpenVibe's own hardware), codes (coding work through OpenVibe.Codes), node and run (a person's machine or OpenVibe.Run). TRUST is ADR-046's class; private mode takes only first-party ones. CAN are the task classes and tools it takes (task:<class>, tool:<name>). RATE_CARD is the published price, revised by review and never written by a model (SOURCE says where it comes from, VERIFIED_AT when a person last checked it). AVAILABLE says whether it can take a task now and REASON why not.
* actor.agent-list-result@1: GET /api/v1/agents (capability actor.agent.read): every agent system Actor can route a task to. KIND is the backend class (ADR-044): openvibe-runtime (OpenVibe's own agent, acting through OpenVibe services), agent-platform (another platform's agent, called through its API), open-model (an open model on OpenVibe's own hardware), codes (coding work through OpenVibe.Codes), node and run (a person's machine or OpenVibe.Run). TRUST is ADR-046's class; private mode takes only first-party ones. CAN are the task classes and tools it takes (task:<class>, tool:<name>). RATE_CARD is the published price, revised by review and never written by a model (SOURCE says where it comes from, VERIFIED_AT when a person last checked it). AVAILABLE says whether it can take a task now and REASON why not.
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "actor.assignment.cancel",
+ "version": "1.0",
+ "owner": "actor",
+ "status": "active",
+ "visibility": "public",
+ "description": "Cancel your assignment tree from one node down with POST /api/v1/assignments/:id/cancel: every child node is cancelled and every task still running under the tree is stopped. It answers the node and the nodes it cancelled. Only the person whose work it is can cancel it; another person gets the same 404 as a node that does not exist.",
+ "inputSchema": "common.no-body@1",
+ "permissions": [
+ "actor:assignments:cancel"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "actor-write",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/assignments/:id/cancel"
+ ],
+ "outputSchema": "actor.assignment-cancel-result@1"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "actor.assignment.read",
+ "version": "1.0",
+ "owner": "actor",
+ "status": "active",
+ "visibility": "public",
+ "description": "Read one node of your assignment tree and its children with GET /api/v1/assignments/:id (actor.assignment@1): the hand-off, who started it, its mode and reply, the agent and task it runs as, its level and effective level, the root's budget and the state. Only the person whose work it is can read it; another person gets the same 404 as a node that does not exist.",
+ "inputSchema": "common.no-body@1",
+ "permissions": [
+ "actor:assignments:read"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "actor-read",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/assignments/:id"
+ ],
+ "outputSchema": "actor.assignment-tree@1"
+}
@@ -29,7 +29,9 @@
@@ -29,7 +29,9 @@
"actor.model.manage",
"actor.model.manage",
"actor.a2a.task",
"actor.a2a.task",
"actor.config.manage",
"actor.config.manage",
- "actor.timeline.read"
+ "actor.timeline.read",
+ "actor.assignment.read",
+ "actor.assignment.cancel"
],
],
"eventsProduced": [
"eventsProduced": [
"agent.step.started",
"agent.step.started",
@@ -1,12 +1,12 @@
@@ -1,12 +1,12 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.327.0",
+ "version": "0.328.0",
"lockfileVersion": 3,
"lockfileVersion": 3,
"requires": true,
"requires": true,
"packages": {
"packages": {
"": {
"": {
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.327.0",
+ "version": "0.328.0",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.327.0",
+ "version": "0.328.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",