openvibers/openvibe.contracts Commits

Contracts 0.140.0: actor.agent.manage and actor.agent.run (personal agents) (#96)

OP OpenVibers committed 11 Oct 2026 · 7bd5012e90 · 56 files, +2299 −64

Adds `actor.agent.manage` and `actor.agent.run` (active), with `actor.agent-manage-request@1`, `actor.agent-manage-result@1`, `actor.agent-run-request@1` and fixtures: OpenVibe.Actor's personal agents (plan T17), under `/api/v1/me/agents`. An agent has standing instructions, a memory the person controls and a schedule. Every run is an ordinary task (`platform.task@1`) under the same limits. `/api/v1/agents` stays the public catalog of agent systems.

Suite: 18537 checks passed. compat vs v0.139.0: no breaking changes.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 6ff4faa3..cf704cd8 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -4,6 +4,13 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
++## 0.140.0 — 2026-10-11
++
++- `actor.agent.manage` and `actor.agent.run` (active), with `actor.agent-manage-request@1`, `actor.agent-manage-result@1`
++ and `actor.agent-run-request@1`: OpenVibe.Actor's personal agents under `/api/v1/me/agents` (standing instructions,
++ a memory the person controls, a schedule; every run an ordinary task, `platform.task@1`). `/api/v1/agents` stays the
++ public catalog of agent systems (`actor.agent.read`).
++
## 0.139.0 — 2026-10-11
- `host.catalog.manage` (active, staff only) with `host.catalog-manage-request@1` and `host.catalog-manage-result@1`:
ddiff --git a/contracts/actor/agent-manage-request.v1.json b/contracts/actor/agent-manage-request.v1.json
nnew file mode 100644
iindex 00000000..04b35395
---- /dev/null
++++ b/contracts/actor/agent-manage-request.v1.json
@@@ -0,0 +1,88 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/agent-manage-request.v1.json",
++ "title": "ActorAgentManageRequest",
++ "description": "actor.agent-manage-request@1: bodies of actor.agent.manage on OpenVibe.Actor. POST /api/v1/me/agents { name, instructions, mode?, budget_per_run_usd?, daily_runs_max?, schedule?, schedule_at?, schedule_dow?, status? } creates a personal agent (10 per person: 429 actor.agent.limit); PATCH /api/v1/me/agents/:id takes any subset. POST /api/v1/me/agents/:id/memory { text } adds a note (1–1000 characters; 50 notes, the oldest agent-written note goes first, a person's note never automatically) and PATCH /api/v1/me/agents/:id/memory/:mem { text } edits one. Unknown fields are 422 actor.agent.invalid; another person's agent is 404 actor.agent.not_found.",
++ "anyOf": [
++ {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ }
++ }
++ },
++ {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "text"
++ ],
++ "properties": {
++ "text": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 1000
++ }
++ }
++ }
++ ]
++}
ddiff --git a/contracts/actor/agent-manage-result.v1.json b/contracts/actor/agent-manage-result.v1.json
nnew file mode 100644
iindex 00000000..28c3ebde
---- /dev/null
++++ b/contracts/actor/agent-manage-result.v1.json
@@@ -0,0 +1,304 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/agent-manage-result.v1.json",
++ "title": "ActorAgentManageResult",
++ "description": "actor.agent-manage-result@1: GET /api/v1/me/agents → { agents }; an agent (create 201, read, update); GET …/memory → { memory } (newest first); a note (create 201, update). DELETE answers 204 with no body.",
++ "anyOf": [
++ {
++ "type": "object",
++ "required": [
++ "agents"
++ ],
++ "properties": {
++ "agents": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "id",
++ "name",
++ "instructions",
++ "mode",
++ "schedule",
++ "status"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "owner": {
++ "type": "string"
++ },
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ },
++ "next_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_skip_reason": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "memory"
++ ],
++ "properties": {
++ "memory": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "id",
++ "text",
++ "origin"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^mem_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "agent_id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "text": {
++ "type": "string"
++ },
++ "origin": {
++ "enum": [
++ "person",
++ "agent"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "id",
++ "name",
++ "instructions",
++ "mode",
++ "schedule",
++ "status"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "owner": {
++ "type": "string"
++ },
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ },
++ "next_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_skip_reason": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "id",
++ "text",
++ "origin"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^mem_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "agent_id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "text": {
++ "type": "string"
++ },
++ "origin": {
++ "enum": [
++ "person",
++ "agent"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ ]
++}
ddiff --git a/contracts/actor/agent-run-request.v1.json b/contracts/actor/agent-run-request.v1.json
nnew file mode 100644
iindex 00000000..fe60ca0d
---- /dev/null
++++ b/contracts/actor/agent-run-request.v1.json
@@@ -0,0 +1,14 @@
++{
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/agent-run-request.v1.json",
++ "title": "ActorAgentRunRequest",
++ "description": "actor.agent-run-request@1: POST /api/v1/me/agents/:id/run { input? } runs the agent now as an ordinary Actor task (its instructions, then its memory, then the input), under the same free tier, budget and daily limits as the person's own tasks, plus the agent's daily_runs_max (429 actor.agent.limit). Answered 201 with the task (platform.task@1). GET /api/v1/me/agents/:id/runs lists its tasks, newest first.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "input": {
++ "type": "string",
++ "maxLength": 8000
++ }
++ }
++}
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex d3df1260..ecf92df1 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.json
@@@ -6360,6 +6360,33 @@
"status": "active",
"adr": "ADR-044"
},
++ {
++ "id": "actor.agent-manage-request",
++ "version": "1.0.0",
++ "owner": "actor",
++ "schema": "actor/agent-manage-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "actor.agent-manage-result",
++ "version": "1.0.0",
++ "owner": "actor",
++ "schema": "actor/agent-manage-result.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
++ {
++ "id": "actor.agent-run-request",
++ "version": "1.0.0",
++ "owner": "actor",
++ "schema": "actor/agent-run-request.v1.json",
++ "visibility": "public",
++ "compatibility": "backward",
++ "status": "active"
++ },
{
"id": "actor.task-event",
"version": "1.0.0",
ddiff --git a/fixtures/actor.agent-manage-request/invalid/bad-time.json b/fixtures/actor.agent-manage-request/invalid/bad-time.json
nnew file mode 100644
iindex 00000000..979d2ab2
---- /dev/null
++++ b/fixtures/actor.agent-manage-request/invalid/bad-time.json
@@@ -0,0 +1,3 @@
++{
++ "schedule_at": "7:30pm"
++}
ddiff --git a/fixtures/actor.agent-manage-request/invalid/long-note.json b/fixtures/actor.agent-manage-request/invalid/long-note.json
nnew file mode 100644
iindex 00000000..9ab51018
---- /dev/null
++++ b/fixtures/actor.agent-manage-request/invalid/long-note.json
@@@ -0,0 +1,3 @@
++{
++ "text": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
++}
ddiff --git a/fixtures/actor.agent-manage-request/invalid/unknown.json b/fixtures/actor.agent-manage-request/invalid/unknown.json
nnew file mode 100644
iindex 00000000..694e36ed
---- /dev/null
++++ b/fixtures/actor.agent-manage-request/invalid/unknown.json
@@@ -0,0 +1,4 @@
++{
++ "name": "x",
++ "priority": 1
++}
ddiff --git a/fixtures/actor.agent-manage-request/valid/create.json b/fixtures/actor.agent-manage-request/valid/create.json
nnew file mode 100644
iindex 00000000..8ae5fde7
---- /dev/null
++++ b/fixtures/actor.agent-manage-request/valid/create.json
@@@ -0,0 +1,6 @@
++{
++ "name": "Morning briefing",
++ "instructions": "Summarise what shipped on OpenVibe yesterday in five bullets.",
++ "schedule": "daily",
++ "schedule_at": "07:30"
++}
ddiff --git a/fixtures/actor.agent-manage-request/valid/note.json b/fixtures/actor.agent-manage-request/valid/note.json
nnew file mode 100644
iindex 00000000..38d230e1
---- /dev/null
++++ b/fixtures/actor.agent-manage-request/valid/note.json
@@@ -0,0 +1,3 @@
++{
++ "text": "I prefer bullet points."
++}
ddiff --git a/fixtures/actor.agent-manage-request/valid/pause.json b/fixtures/actor.agent-manage-request/valid/pause.json
nnew file mode 100644
iindex 00000000..ec1cfcb2
---- /dev/null
++++ b/fixtures/actor.agent-manage-request/valid/pause.json
@@@ -0,0 +1,3 @@
++{
++ "status": "paused"
++}
ddiff --git a/fixtures/actor.agent-manage-result/invalid/bad-origin.json b/fixtures/actor.agent-manage-result/invalid/bad-origin.json
nnew file mode 100644
iindex 00000000..8211b840
---- /dev/null
++++ b/fixtures/actor.agent-manage-result/invalid/bad-origin.json
@@@ -0,0 +1,9 @@
++{
++ "memory": [
++ {
++ "id": "mem_01M4C49CWJCFYGJS3T7NFZFQYX",
++ "text": "x",
++ "origin": "model"
++ }
++ ]
++}
ddiff --git a/fixtures/actor.agent-manage-result/invalid/empty.json b/fixtures/actor.agent-manage-result/invalid/empty.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/actor.agent-manage-result/invalid/empty.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/actor.agent-manage-result/valid/list.json b/fixtures/actor.agent-manage-result/valid/list.json
nnew file mode 100644
iindex 00000000..31659185
---- /dev/null
++++ b/fixtures/actor.agent-manage-result/valid/list.json
@@@ -0,0 +1,13 @@
++{
++ "agents": [
++ {
++ "id": "agt_01M4C49CW34NGX7TR2TNRVFWNW",
++ "name": "Morning briefing",
++ "instructions": "Summarise.",
++ "mode": "balanced",
++ "schedule": "daily",
++ "schedule_at": "07:30",
++ "status": "active"
++ }
++ ]
++}
ddiff --git a/fixtures/actor.agent-manage-result/valid/memory.json b/fixtures/actor.agent-manage-result/valid/memory.json
nnew file mode 100644
iindex 00000000..ce1a3aab
---- /dev/null
++++ b/fixtures/actor.agent-manage-result/valid/memory.json
@@@ -0,0 +1,9 @@
++{
++ "memory": [
++ {
++ "id": "mem_01M4C49CWJCFYGJS3T7NFZFQYX",
++ "text": "I prefer bullet points.",
++ "origin": "person"
++ }
++ ]
++}
ddiff --git a/fixtures/actor.agent-run-request/invalid/extra.json b/fixtures/actor.agent-run-request/invalid/extra.json
nnew file mode 100644
iindex 00000000..b6f71d76
---- /dev/null
++++ b/fixtures/actor.agent-run-request/invalid/extra.json
@@@ -0,0 +1,4 @@
++{
++ "input": "x",
++ "agent": "openai"
++}
ddiff --git a/fixtures/actor.agent-run-request/invalid/too-long.json b/fixtures/actor.agent-run-request/invalid/too-long.json
nnew file mode 100644
iindex 00000000..f0e1898c
---- /dev/null
++++ b/fixtures/actor.agent-run-request/invalid/too-long.json
@@@ -0,0 +1,3 @@
++{
++ "input": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
++}
ddiff --git a/fixtures/actor.agent-run-request/valid/empty.json b/fixtures/actor.agent-run-request/valid/empty.json
nnew file mode 100644
iindex 00000000..0967ef42
---- /dev/null
++++ b/fixtures/actor.agent-run-request/valid/empty.json
@@@ -0,0 +1 @@
++{}
ddiff --git a/fixtures/actor.agent-run-request/valid/input.json b/fixtures/actor.agent-run-request/valid/input.json
nnew file mode 100644
iindex 00000000..ded9c729
---- /dev/null
++++ b/fixtures/actor.agent-run-request/valid/input.json
@@@ -0,0 +1,3 @@
++{
++ "input": "Focus on Live."
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex 6f3e7c28..597f4b90 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -73689,6 +73689,427 @@
]
}
},
++ "actor.agent-manage-request": {
++ "version": "1.0.0",
++ "owner": "actor",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/agent-manage-request.v1.json",
++ "title": "ActorAgentManageRequest",
++ "description": "actor.agent-manage-request@1: bodies of actor.agent.manage on OpenVibe.Actor. POST /api/v1/me/agents { name, instructions, mode?, budget_per_run_usd?, daily_runs_max?, schedule?, schedule_at?, schedule_dow?, status? } creates a personal agent (10 per person: 429 actor.agent.limit); PATCH /api/v1/me/agents/:id takes any subset. POST /api/v1/me/agents/:id/memory { text } adds a note (1–1000 characters; 50 notes, the oldest agent-written note goes first, a person's note never automatically) and PATCH /api/v1/me/agents/:id/memory/:mem { text } edits one. Unknown fields are 422 actor.agent.invalid; another person's agent is 404 actor.agent.not_found.",
++ "anyOf": [
++ {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ }
++ }
++ },
++ {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "text"
++ ],
++ "properties": {
++ "text": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 1000
++ }
++ }
++ }
++ ]
++ }
++ },
++ "actor.agent-manage-result": {
++ "version": "1.0.0",
++ "owner": "actor",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/agent-manage-result.v1.json",
++ "title": "ActorAgentManageResult",
++ "description": "actor.agent-manage-result@1: GET /api/v1/me/agents → { agents }; an agent (create 201, read, update); GET …/memory → { memory } (newest first); a note (create 201, update). DELETE answers 204 with no body.",
++ "anyOf": [
++ {
++ "type": "object",
++ "required": [
++ "agents"
++ ],
++ "properties": {
++ "agents": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "id",
++ "name",
++ "instructions",
++ "mode",
++ "schedule",
++ "status"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "owner": {
++ "type": "string"
++ },
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ },
++ "next_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_skip_reason": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "memory"
++ ],
++ "properties": {
++ "memory": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "id",
++ "text",
++ "origin"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^mem_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "agent_id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "text": {
++ "type": "string"
++ },
++ "origin": {
++ "enum": [
++ "person",
++ "agent"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "id",
++ "name",
++ "instructions",
++ "mode",
++ "schedule",
++ "status"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "owner": {
++ "type": "string"
++ },
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ },
++ "next_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_skip_reason": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "id",
++ "text",
++ "origin"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^mem_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "agent_id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "text": {
++ "type": "string"
++ },
++ "origin": {
++ "enum": [
++ "person",
++ "agent"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ ]
++ }
++ },
++ "actor.agent-run-request": {
++ "version": "1.0.0",
++ "owner": "actor",
++ "status": "active",
++ "schema": {
++ "$schema": "https://json-schema.org/draft/2020-12/schema",
++ "$id": "https://openvibe.network/contracts/actor/agent-run-request.v1.json",
++ "title": "ActorAgentRunRequest",
++ "description": "actor.agent-run-request@1: POST /api/v1/me/agents/:id/run { input? } runs the agent now as an ordinary Actor task (its instructions, then its memory, then the input), under the same free tier, budget and daily limits as the person's own tasks, plus the agent's daily_runs_max (429 actor.agent.limit). Answered 201 with the task (platform.task@1). GET /api/v1/me/agents/:id/runs lists its tasks, newest first.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "input": {
++ "type": "string",
++ "maxLength": 8000
++ }
++ }
++ }
++ },
"actor.task-event": {
"version": "1.0.0",
"owner": "actor",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex b346037f..3cdb0fe1 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the 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"
@@@ -62,6 +62,742 @@
}
}
},
++ "/api/v1/me/agents": {
++ "get": {
++ "operationId": "get_api_v1_me_agents",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "post": {
++ "operationId": "post_api_v1_me_agents",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ }
++ }
++ }
++ },
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-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/{id}": {
++ "delete": {
++ "operationId": "delete_api_v1_me_agents_id",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "get": {
++ "operationId": "get_api_v1_me_agents_id",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "patch": {
++ "operationId": "patch_api_v1_me_agents_id",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-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/{id}/memory": {
++ "delete": {
++ "operationId": "delete_api_v1_me_agents_id_memory",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "get": {
++ "operationId": "get_api_v1_me_agents_id_memory",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "post": {
++ "operationId": "post_api_v1_me_agents_id_memory",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-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/{id}/memory/{mem}": {
++ "delete": {
++ "operationId": "delete_api_v1_me_agents_id_memory_mem",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "mem",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-result.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ },
++ "patch": {
++ "operationId": "patch_api_v1_me_agents_id_memory_mem",
++ "summary": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete wh",
++ "description": "**actor.agent.manage** (public): Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.manage"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.manage"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "mem",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-manage-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/{id}/run": {
++ "post": {
++ "operationId": "post_api_v1_me_agents_id_run",
++ "summary": "Run one of your personal agents now, and list its runs.",
++ "description": "**actor.agent.run** (public): Run one of your personal agents now, and list its runs. A run is an ordinary Actor task (platform.task@1) under the same routing, checking, metering, free tier and budgets as a task you give directly, plus the agent's own daily run cap; scheduled runs use the same path.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.run"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.run"
++ ]
++ }
++ ],
++ "requestBody": {
++ "required": false,
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/actor.agent-run-request.v1"
++ }
++ }
++ }
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/platform.task.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
++ "/api/v1/me/agents/{id}/runs": {
++ "get": {
++ "operationId": "get_api_v1_me_agents_id_runs",
++ "summary": "Run one of your personal agents now, and list its runs.",
++ "description": "**actor.agent.run** (public): Run one of your personal agents now, and list its runs. A run is an ordinary Actor task (platform.task@1) under the same routing, checking, metering, free tier and budgets as a task you give directly, plus the agent's own daily run cap; scheduled runs use the same path.",
++ "tags": [
++ "actor.agent"
++ ],
++ "x-openvibe-capabilities": [
++ "actor.agent.run"
++ ],
++ "x-openvibe-visibility": [
++ "public"
++ ],
++ "x-openvibe-quota-class": "actor-task",
++ "security": [
++ {
++ "openvibeToken": [
++ "actor.agent.run"
++ ]
++ }
++ ],
++ "x-openvibe-input": {
++ "$ref": "#/components/schemas/actor.agent-run-request.v1"
++ },
++ "parameters": [
++ {
++ "name": "id",
++ "in": "path",
++ "required": true,
++ "schema": {
++ "type": "string"
++ }
++ },
++ {
++ "name": "input",
++ "in": "query",
++ "required": false,
++ "schema": {
++ "type": "string",
++ "maxLength": 8000
++ }
++ }
++ ],
++ "responses": {
++ "2XX": {
++ "description": "Success",
++ "content": {
++ "application/json": {
++ "schema": {
++ "$ref": "#/components/schemas/platform.task.v1"
++ }
++ }
++ }
++ },
++ "default": {
++ "description": "An error (RFC 9457 problem details)",
++ "content": {
++ "application/problem+json": {
++ "schema": {
++ "$ref": "#/components/schemas/errors.problem.v1"
++ }
++ }
++ }
++ }
++ }
++ }
++ },
"/api/v1/resources": {
"get": {
"operationId": "get_api_v1_resources",
@@@ -612,6 +1348,406 @@
}
}
},
++ "actor.agent-manage-request.v1": {
++ "title": "ActorAgentManageRequest",
++ "description": "actor.agent-manage-request@1: bodies of actor.agent.manage on OpenVibe.Actor. POST /api/v1/me/agents { name, instructions, mode?, budget_per_run_usd?, daily_runs_max?, schedule?, schedule_at?, schedule_dow?, status? } creates a personal agent (10 per person: 429 actor.agent.limit); PATCH /api/v1/me/agents/:id takes any subset. POST /api/v1/me/agents/:id/memory { text } adds a note (1–1000 characters; 50 notes, the oldest agent-written note goes first, a person's note never automatically) and PATCH /api/v1/me/agents/:id/memory/:mem { text } edits one. Unknown fields are 422 actor.agent.invalid; another person's agent is 404 actor.agent.not_found.",
++ "anyOf": [
++ {
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ }
++ }
++ },
++ {
++ "type": "object",
++ "additionalProperties": false,
++ "required": [
++ "text"
++ ],
++ "properties": {
++ "text": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 1000
++ }
++ }
++ }
++ ]
++ },
++ "actor.agent-manage-result.v1": {
++ "title": "ActorAgentManageResult",
++ "description": "actor.agent-manage-result@1: GET /api/v1/me/agents → { agents }; an agent (create 201, read, update); GET …/memory → { memory } (newest first); a note (create 201, update). DELETE answers 204 with no body.",
++ "anyOf": [
++ {
++ "type": "object",
++ "required": [
++ "agents"
++ ],
++ "properties": {
++ "agents": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "id",
++ "name",
++ "instructions",
++ "mode",
++ "schedule",
++ "status"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "owner": {
++ "type": "string"
++ },
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ },
++ "next_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_skip_reason": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "memory"
++ ],
++ "properties": {
++ "memory": {
++ "type": "array",
++ "items": {
++ "type": "object",
++ "required": [
++ "id",
++ "text",
++ "origin"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^mem_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "agent_id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "text": {
++ "type": "string"
++ },
++ "origin": {
++ "enum": [
++ "person",
++ "agent"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "id",
++ "name",
++ "instructions",
++ "mode",
++ "schedule",
++ "status"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "owner": {
++ "type": "string"
++ },
++ "name": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 60
++ },
++ "instructions": {
++ "type": "string",
++ "minLength": 1,
++ "maxLength": 4000
++ },
++ "mode": {
++ "enum": [
++ "balanced",
++ "cheapest",
++ "best",
++ "fastest",
++ "private"
++ ]
++ },
++ "budget_per_run_usd": {
++ "type": "number",
++ "exclusiveMinimum": 0,
++ "description": "At most the person's per-task allowance."
++ },
++ "daily_runs_max": {
++ "type": "integer",
++ "minimum": 1,
++ "maximum": 24
++ },
++ "schedule": {
++ "enum": [
++ "off",
++ "hourly",
++ "daily",
++ "weekly"
++ ]
++ },
++ "schedule_at": {
++ "type": [
++ "string",
++ "null"
++ ],
++ "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$",
++ "description": "HH:MM UTC, for daily and weekly."
++ },
++ "schedule_dow": {
++ "type": [
++ "integer",
++ "null"
++ ],
++ "minimum": 0,
++ "maximum": 6,
++ "description": "0 is Sunday; for weekly."
++ },
++ "status": {
++ "enum": [
++ "active",
++ "paused"
++ ]
++ },
++ "next_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_run_at": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "last_skip_reason": {
++ "type": [
++ "string",
++ "null"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ },
++ {
++ "type": "object",
++ "required": [
++ "id",
++ "text",
++ "origin"
++ ],
++ "properties": {
++ "id": {
++ "type": "string",
++ "pattern": "^mem_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "agent_id": {
++ "type": "string",
++ "pattern": "^agt_[0-9A-HJKMNP-TV-Z]{26}$"
++ },
++ "text": {
++ "type": "string"
++ },
++ "origin": {
++ "enum": [
++ "person",
++ "agent"
++ ]
++ },
++ "created_at": {
++ "type": "string"
++ },
++ "updated_at": {
++ "type": "string"
++ }
++ }
++ }
++ ]
++ },
++ "actor.agent-run-request.v1": {
++ "title": "ActorAgentRunRequest",
++ "description": "actor.agent-run-request@1: POST /api/v1/me/agents/:id/run { input? } runs the agent now as an ordinary Actor task (its instructions, then its memory, then the input), under the same free tier, budget and daily limits as the person's own tasks, plus the agent's daily_runs_max (429 actor.agent.limit). Answered 201 with the task (platform.task@1). GET /api/v1/me/agents/:id/runs lists its tasks, newest first.",
++ "type": "object",
++ "additionalProperties": false,
++ "properties": {
++ "input": {
++ "type": "string",
++ "maxLength": 8000
++ }
++ }
++ },
"actor.task-create-request.v1": {
"title": "ActorTaskCreateRequest",
"description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.",
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex fa16f556..bc47c537 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 9b5b4e09..2f77dcd1 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex 40614e62..d65c0c0f 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex 23449535..d624124f 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex d98fc3b4..c4cbc46f 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex fa8800aa..0c273e7a 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex c71c3c5c..92c21827 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex a2a8deb9..c0431679 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex 9ad7fbe0..680bec01 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 64a683c7..c4be245a 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex 736d88d2..8a27e12e 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex 5aebdb3b..a4e077a1 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/index.json b/generated/openapi/index.json
iindex 0b2a7cf9..985713dd 100644
---- a/generated/openapi/index.json
++++ b/generated/openapi/index.json
@@@ -5,8 +5,8 @@
"service": "actor",
"name": "OpenVibe.Actor",
"origin": "https://openvibe.actor",
-- "operations": 9,
-- "capabilities": 5
++ "operations": 21,
++ "capabilities": 7
},
{
"service": "ai",
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex e33878e5..ebd91326 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex 97ad56a7..a56b0d2d 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex 58eec3a1..b7f64065 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex 4ad9458a..fa208ff3 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex cfedc6a0..55fb11d6 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex 1bd5e970..9f5bb625 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenRestream API",
-- "version": "0.139.0",
-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex 48c97f0a..ce746474 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex 39ae8d48..f22d68e7 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex 04c71017..fb57a885 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex 5d999e93..2bbcf30e 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex b51f8957..105fc8e5 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex 7a0236ae..7554eafd 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 9cedd81b..8f7a6561 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex 74f16333..131ef213 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex a7b24364..c396e36a 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 8af04c41..bd53471f 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex 22d1a2c2..9842fb0b 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.139.0",
-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.139.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
++ "version": "0.140.0",
++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.140.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"name": "MIT",
"identifier": "MIT"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex 0f774170..5390cb62 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -60603,6 +60603,123 @@ export interface ActorTaskCreateRequest {
];
}
++/** [email protected] (owner: actor) */
++/**
++ * actor.agent-manage-request@1: bodies of actor.agent.manage on OpenVibe.Actor. POST /api/v1/me/agents { name, instructions, mode?, budget_per_run_usd?, daily_runs_max?, schedule?, schedule_at?, schedule_dow?, status? } creates a personal agent (10 per person: 429 actor.agent.limit); PATCH /api/v1/me/agents/:id takes any subset. POST /api/v1/me/agents/:id/memory { text } adds a note (1–1000 characters; 50 notes, the oldest agent-written note goes first, a person's note never automatically) and PATCH /api/v1/me/agents/:id/memory/:mem { text } edits one. Unknown fields are 422 actor.agent.invalid; another person's agent is 404 actor.agent.not_found.
++ */
++export type ActorAgentManageRequest =
++ | {
++ name?: string;
++ instructions?: string;
++ mode?: "balanced" | "cheapest" | "best" | "fastest" | "private";
++ /**
++ * At most the person's per-task allowance.
++ */
++ budget_per_run_usd?: number;
++ daily_runs_max?: number;
++ schedule?: "off" | "hourly" | "daily" | "weekly";
++ /**
++ * HH:MM UTC, for daily and weekly.
++ */
++ schedule_at?: string | null;
++ /**
++ * 0 is Sunday; for weekly.
++ */
++ schedule_dow?: number | null;
++ status?: "active" | "paused";
++ }
++ | {
++ text: string;
++ };
++
++/** [email protected] (owner: actor) */
++/**
++ * actor.agent-manage-result@1: GET /api/v1/me/agents → { agents }; an agent (create 201, read, update); GET …/memory → { memory } (newest first); a note (create 201, update). DELETE answers 204 with no body.
++ */
++export type ActorAgentManageResult =
++ | {
++ agents: {
++ id: string;
++ owner?: string;
++ name: string;
++ instructions: string;
++ mode: "balanced" | "cheapest" | "best" | "fastest" | "private";
++ /**
++ * At most the person's per-task allowance.
++ */
++ budget_per_run_usd?: number;
++ daily_runs_max?: number;
++ schedule: "off" | "hourly" | "daily" | "weekly";
++ /**
++ * HH:MM UTC, for daily and weekly.
++ */
++ schedule_at?: string | null;
++ /**
++ * 0 is Sunday; for weekly.
++ */
++ schedule_dow?: number | null;
++ status: "active" | "paused";
++ next_run_at?: string | null;
++ last_run_at?: string | null;
++ last_skip_reason?: string | null;
++ created_at?: string;
++ updated_at?: string;
++ }[];
++ }
++ | {
++ memory: {
++ id: string;
++ agent_id?: string;
++ text: string;
++ origin: "person" | "agent";
++ created_at?: string;
++ updated_at?: string;
++ }[];
++ }
++ | {
++ id: string;
++ owner?: string;
++ name: string;
++ instructions: string;
++ mode: "balanced" | "cheapest" | "best" | "fastest" | "private";
++ /**
++ * At most the person's per-task allowance.
++ */
++ budget_per_run_usd?: number;
++ daily_runs_max?: number;
++ schedule: "off" | "hourly" | "daily" | "weekly";
++ /**
++ * HH:MM UTC, for daily and weekly.
++ */
++ schedule_at?: string | null;
++ /**
++ * 0 is Sunday; for weekly.
++ */
++ schedule_dow?: number | null;
++ status: "active" | "paused";
++ next_run_at?: string | null;
++ last_run_at?: string | null;
++ last_skip_reason?: string | null;
++ created_at?: string;
++ updated_at?: string;
++ }
++ | {
++ id: string;
++ agent_id?: string;
++ text: string;
++ origin: "person" | "agent";
++ created_at?: string;
++ updated_at?: string;
++ };
++
++/** [email protected] (owner: actor) */
++/**
++ * actor.agent-run-request@1: POST /api/v1/me/agents/:id/run { input? } runs the agent now as an ordinary Actor task (its instructions, then its memory, then the input), under the same free tier, budget and daily limits as the person's own tasks, plus the agent's daily_runs_max (429 actor.agent.limit). Answered 201 with the task (platform.task@1). GET /api/v1/me/agents/:id/runs lists its tasks, newest first.
++ */
++export interface ActorAgentRunRequest {
++ input?: string;
++}
++
/** [email protected] (owner: actor) */
/**
* actor.task-event@1: one event on a task's live stream (GET /api/v1/tasks/:id/events, text/event-stream; the SSE id is SEQ, so a reader resumes with Last-Event-ID). KIND is run.job-stream-event@1's three, as platform.task@1 progress names them: state (the task moved to STATE), output (one step of the agent's work: AGENT says what it is doing in TEXT, or calls TOOL with a short INPUT summary, or a tool answered), end (the task ended in STATE; nothing follows). Events are best-effort; the task record (GET /api/v1/tasks/:id) is the source of truth.
ddiff --git a/manifests/capabilities/actor.agent.manage.json b/manifests/capabilities/actor.agent.manage.json
nnew file mode 100644
iindex 00000000..3f1dd74e
---- /dev/null
++++ b/manifests/capabilities/actor.agent.manage.json
@@@ -0,0 +1,31 @@
++{
++ "id": "actor.agent.manage",
++ "version": "1.0",
++ "owner": "actor",
++ "status": "active",
++ "visibility": "public",
++ "sensitive": true,
++ "description": "Keep your personal agents on OpenVibe.Actor: create, read, change and delete an agent (standing instructions, mode, a budget per run, a daily run cap and a schedule), and read, add, edit and delete what it remembers, or forget everything. A person's agents are theirs alone; another person's agent is 404.",
++ "inputSchema": "actor.agent-manage-request@1",
++ "outputSchema": "actor.agent-manage-result@1",
++ "permissions": [
++ "actor:agents:manage"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "actor-task",
++ "events": [],
++ "implementedBy": [
++ "GET /api/v1/me/agents",
++ "POST /api/v1/me/agents",
++ "GET /api/v1/me/agents/:id",
++ "PATCH /api/v1/me/agents/:id",
++ "DELETE /api/v1/me/agents/:id",
++ "GET /api/v1/me/agents/:id/memory",
++ "POST /api/v1/me/agents/:id/memory",
++ "PATCH /api/v1/me/agents/:id/memory/:mem",
++ "DELETE /api/v1/me/agents/:id/memory/:mem",
++ "DELETE /api/v1/me/agents/:id/memory"
++ ]
++}
ddiff --git a/manifests/capabilities/actor.agent.run.json b/manifests/capabilities/actor.agent.run.json
nnew file mode 100644
iindex 00000000..69a7284e
---- /dev/null
++++ b/manifests/capabilities/actor.agent.run.json
@@@ -0,0 +1,23 @@
++{
++ "id": "actor.agent.run",
++ "version": "1.0",
++ "owner": "actor",
++ "status": "active",
++ "visibility": "public",
++ "sensitive": true,
++ "description": "Run one of your personal agents now, and list its runs. A run is an ordinary Actor task (platform.task@1) under the same routing, checking, metering, free tier and budgets as a task you give directly, plus the agent's own daily run cap; scheduled runs use the same path.",
++ "inputSchema": "actor.agent-run-request@1",
++ "outputSchema": "platform.task@1",
++ "permissions": [
++ "actor:agents:run"
++ ],
++ "resourceConstraints": [
++ "owner"
++ ],
++ "quotaClass": "actor-task",
++ "events": [],
++ "implementedBy": [
++ "POST /api/v1/me/agents/:id/run",
++ "GET /api/v1/me/agents/:id/runs"
++ ]
++}
ddiff --git a/manifests/services/actor.json b/manifests/services/actor.json
iindex 37aed6f4..d27f14df 100644
---- a/manifests/services/actor.json
++++ b/manifests/services/actor.json
@@@ -20,7 +20,9 @@
"actor.task.read",
"actor.task.list",
"actor.agent.read",
-- "actor.resource.read"
++ "actor.resource.read",
++ "actor.agent.manage",
++ "actor.agent.run"
],
"eventsProduced": [],
"eventsConsumed": [
ddiff --git a/package.json b/package.json
iindex f7882c26..47147b11 100644
---- a/package.json
++++ b/package.json
@@@ -1,6 +1,6 @@
{
"name": "openvibe-contracts",
-- "version": "0.139.0",
++ "version": "0.140.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",