openvibers/openvibe.contracts Commits
Contracts 0.162.0: codes.task.start/read/cancel (a service starts a coding task for a person on their own machine) (#119)
Changes
@@@ -4,6 +4,18 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) thfrom `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,the notes were in the tag and commit messages (`git tag -n1`).++## 0.162.0 — 2026-10-14++++- **`codes.task.start`, `codes.task.read`, `codes.task.cancel`** (plan T16/T17): a first-party service starts a coding++ task for a person on OpenVibe.Codes (`POST /api/v1/tasks`, the person in `X-OV-Subject`), reads it and cancels it.++ - Codes runs the task on that person's own machine through OpenVibe.Run, in the project of their latest++ openvibe.codes/run task. Without one: 409 `codes.no_project`.++ - Only the service that started a task, for the same person, sees it.++ - OpenVibe.Actor is the first caller: its `codes` agent routes coding work there instead of refusing it.++- New contracts: `codes.task-start-request@1`, `codes.task-start-result@1`, `codes.task@1` (state, page URL, and once++ ended: ok, summary, files, patch, push, cost on the person's own keys, duration).++- Additive. `codes` declares the three capabilities in its service manifest.++## 0.161.0 — 2026-10-14- **`platform.resource-offer@1`: `owner` for a user-owned offer** (plan T14, ADR-046). A person's own Node is offered with@@@ -7128,6 +7128,33 @@"visibility": "public","compatibility": "backward","status": "active"++ },++ {++ "id": "codes.task-start-request",++ "version": "1.0.0",++ "owner": "codes",++ "schema": "codes/task-start-request.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "codes.task-start-result",++ "version": "1.0.0",++ "owner": "codes",++ "schema": "codes/task-start-result.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"++ },++ {++ "id": "codes.task",++ "version": "1.0.0",++ "owner": "codes",++ "schema": "codes/task.v1.json",++ "visibility": "first-party",++ "compatibility": "backward",++ "status": "active"}]}nnew file mode 100644@@@ -0,0 +1,53 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/task-start-request.v1.json",++ "title": "CodesTaskStartRequest",++ "description": "codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "repo",++ "prompt"++ ],++ "properties": {++ "repo": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://[^\\s@/]+/[^\\s@]+$",++ "maxLength": 300++ },++ "ref": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "pattern": "^[^\\s~^:?*\\[\\\\]+$"++ },++ "prompt": {++ "type": "string",++ "minLength": 1,++ "maxLength": 8000++ },++ "agent": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9-]{1,40}$"++ },++ "permission": {++ "enum": [++ "edit",++ "full"++ ]++ },++ "push": {++ "type": "boolean"++ },++ "pull_request": {++ "type": "boolean"++ },++ "idempotency_key": {++ "type": "string",++ "minLength": 8,++ "maxLength": 128,++ "pattern": "^[A-Za-z0-9_.:-]+$"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,20 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/task-start-result.v1.json",++ "title": "CodesTaskStartResult",++ "description": "codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task",++ "created"++ ],++ "properties": {++ "task": {++ "$ref": "task.v1.json"++ },++ "created": {++ "type": "boolean"++ }++ }++}nnew file mode 100644@@@ -0,0 +1,179 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/task.v1.json",++ "title": "CodesTask",++ "description": "codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "state",++ "repo",++ "url",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Codes task id (tsk_ + ULID)."++ },++ "state": {++ "enum": [++ "queued",++ "placed",++ "running",++ "succeeded",++ "failed",++ "cancelled",++ "expired"++ ]++ },++ "repo": {++ "type": "string",++ "maxLength": 300++ },++ "ref": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 200++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 41++ },++ "url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 1000++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "ok"++ ],++ "properties": {++ "ok": {++ "type": "boolean"++ },++ "agents": {++ "type": "array",++ "maxItems": 20,++ "items": {++ "type": "string",++ "maxLength": 41++ }++ },++ "summary": {++ "type": "string",++ "maxLength": 4000++ },++ "files": {++ "type": "array",++ "maxItems": 2000,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path"++ ],++ "properties": {++ "path": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500++ },++ "added": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0++ },++ "removed": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0++ }++ }++ }++ },++ "patch": {++ "type": "string",++ "maxLength": 262144++ },++ "patch_truncated": {++ "type": "boolean"++ },++ "push": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "pushed"++ ],++ "properties": {++ "pushed": {++ "type": "boolean"++ },++ "branch": {++ "type": "string",++ "maxLength": 200++ },++ "branch_url": {++ "type": "string",++ "format": "uri"++ },++ "pull_request": {++ "type": "string",++ "format": "uri"++ },++ "pull_request_error": {++ "type": "string",++ "maxLength": 500++ },++ "reason": {++ "type": "string",++ "maxLength": 500++ }++ }++ },++ "cost_usd": {++ "type": "number",++ "minimum": 0++ },++ "duration_ms": {++ "type": "integer",++ "minimum": 0++ },++ "error": {++ "type": "string",++ "maxLength": 1000++ }++ }++ }++ }++}nnew file mode 100644@@@ -0,0 +1,4 @@++{++ "repo": "https://github.com/octocat/Hello-World",++ "prompt": ""++}nnew file mode 100644@@@ -0,0 +1,4 @@++{++ "repo": "https://user:[email protected]/octocat/Hello-World",++ "prompt": "x"++}nnew file mode 100644@@@ -0,0 +1,4 @@++{++ "repo": "[email protected]:octocat/Hello-World.git",++ "prompt": "x"++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "repo": "https://github.com/octocat/Hello-World",++ "prompt": "x",++ "project": "prj_01M4XE52PGJDVR1KZ1AG9VYW3Q"++}nnew file mode 100644@@@ -0,0 +1,5 @@++{++ "repo": "https://github.com/octocat/Hello-World",++ "prompt": "x",++ "permission": "root"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "repo": "https://github.com/octocat/Hello-World",++ "ref": "master",++ "prompt": "Fix the failing test and run the suite.",++ "agent": "deepseek",++ "permission": "full",++ "push": true,++ "pull_request": true,++ "idempotency_key": "act_01M4XF00000000000000000000:step-2"++}nnew file mode 100644@@@ -0,0 +1,4 @@++{++ "repo": "https://github.com/octocat/Hello-World",++ "prompt": "Add a line to the README."++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "task": {++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "nope",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++ },++ "created": true++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "task": {++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "queued",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++ }++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "task": {++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "queued",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++ },++ "created": true++}nnew file mode 100644@@@ -0,0 +1,34 @@++{++ "task": {++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "succeeded",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:01:12.000Z",++ "result": {++ "ok": true,++ "agents": [++ "deepseek"++ ],++ "summary": "Appended the line.",++ "files": [++ {++ "path": "README",++ "added": 1,++ "removed": 0++ }++ ],++ "patch": "diff --git a/README b/README\n--- a/README\n+++ b/README\n@@ -1 +1,2 @@\n Hello World!\n+Edited.\n",++ "cost_usd": 0.0011,++ "duration_ms": 4200,++ "push": {++ "pushed": false,++ "reason": "no GITHUB_TOKEN on this machine"++ }++ }++ },++ "created": false++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "task_1",++ "state": "queued",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "queued",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "http://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "succeeded",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z",++ "result": {++ "summary": "x"++ }++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "paused",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "failed",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z",++ "error": "run.job.unplaceable: no machine of yours runs code jobs"++}nnew file mode 100644@@@ -0,0 +1,10 @@++{++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "queued",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:00:00.000Z"++}nnew file mode 100644@@@ -0,0 +1,31 @@++{++ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "state": "succeeded",++ "repo": "https://github.com/octocat/Hello-World",++ "ref": null,++ "agent": "deepseek",++ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",++ "created_at": "2026-10-14T15:00:00.000Z",++ "updated_at": "2026-10-14T15:01:12.000Z",++ "result": {++ "ok": true,++ "agents": [++ "deepseek"++ ],++ "summary": "Appended the line.",++ "files": [++ {++ "path": "README",++ "added": 1,++ "removed": 0++ }++ ],++ "patch": "diff --git a/README b/README\n--- a/README\n+++ b/README\n@@ -1 +1,2 @@\n Hello World!\n+Edited.\n",++ "cost_usd": 0.0011,++ "duration_ms": 4200,++ "push": {++ "pushed": false,++ "reason": "no GITHUB_TOKEN on this machine"++ }++ }++}@@@ -79685,6 +79685,273 @@}]}++ },++ "codes.task-start-request": {++ "version": "1.0.0",++ "owner": "codes",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/task-start-request.v1.json",++ "title": "CodesTaskStartRequest",++ "description": "codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "repo",++ "prompt"++ ],++ "properties": {++ "repo": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://[^\\s@/]+/[^\\s@]+$",++ "maxLength": 300++ },++ "ref": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "pattern": "^[^\\s~^:?*\\[\\\\]+$"++ },++ "prompt": {++ "type": "string",++ "minLength": 1,++ "maxLength": 8000++ },++ "agent": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9-]{1,40}$"++ },++ "permission": {++ "enum": [++ "edit",++ "full"++ ]++ },++ "push": {++ "type": "boolean"++ },++ "pull_request": {++ "type": "boolean"++ },++ "idempotency_key": {++ "type": "string",++ "minLength": 8,++ "maxLength": 128,++ "pattern": "^[A-Za-z0-9_.:-]+$"++ }++ }++ }++ },++ "codes.task-start-result": {++ "version": "1.0.0",++ "owner": "codes",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/task-start-result.v1.json",++ "title": "CodesTaskStartResult",++ "description": "codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task",++ "created"++ ],++ "properties": {++ "task": {++ "$ref": "task.v1.json"++ },++ "created": {++ "type": "boolean"++ }++ }++ }++ },++ "codes.task": {++ "version": "1.0.0",++ "owner": "codes",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/codes/task.v1.json",++ "title": "CodesTask",++ "description": "codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "state",++ "repo",++ "url",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Codes task id (tsk_ + ULID)."++ },++ "state": {++ "enum": [++ "queued",++ "placed",++ "running",++ "succeeded",++ "failed",++ "cancelled",++ "expired"++ ]++ },++ "repo": {++ "type": "string",++ "maxLength": 300++ },++ "ref": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 200++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 41++ },++ "url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 1000++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "ok"++ ],++ "properties": {++ "ok": {++ "type": "boolean"++ },++ "agents": {++ "type": "array",++ "maxItems": 20,++ "items": {++ "type": "string",++ "maxLength": 41++ }++ },++ "summary": {++ "type": "string",++ "maxLength": 4000++ },++ "files": {++ "type": "array",++ "maxItems": 2000,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path"++ ],++ "properties": {++ "path": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500++ },++ "added": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0++ },++ "removed": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0++ }++ }++ }++ },++ "patch": {++ "type": "string",++ "maxLength": 262144++ },++ "patch_truncated": {++ "type": "boolean"++ },++ "push": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "pushed"++ ],++ "properties": {++ "pushed": {++ "type": "boolean"++ },++ "branch": {++ "type": "string",++ "maxLength": 200++ },++ "branch_url": {++ "type": "string",++ "format": "uri"++ },++ "pull_request": {++ "type": "string",++ "format": "uri"++ },++ "pull_request_error": {++ "type": "string",++ "maxLength": 500++ },++ "reason": {++ "type": "string",++ "maxLength": 500++ }++ }++ },++ "cost_usd": {++ "type": "number",++ "minimum": 0++ },++ "duration_ms": {++ "type": "integer",++ "minimum": 0++ },++ "error": {++ "type": "string",++ "maxLength": 1000++ }++ }++ }++ }++ }}}}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Billing API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Blog API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Bot API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Chat API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the 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"nnew file mode 100644@@@ -0,0 +1,512 @@++{++ "openapi": "3.1.0",++ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",++ "info": {++ "title": "OpenVibe.Codes API",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the 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"++ }++ },++ "servers": [++ {++ "url": "https://openvibe.codes"++ }++ ],++ "paths": {++ "/api/v1/tasks": {++ "post": {++ "operationId": "post_api_v1_tasks",++ "summary": "Start a coding task for a person on their own machine: POST /api/v1/tasks on OpenVibe.Codes, as a first-party service naming the person in X-OV-Subject (OpenVibe.Actor routes coding work here, plan T1",++ "description": "**codes.task.start** (first-party): Start a coding task for a person on their own machine: POST /api/v1/tasks on OpenVibe.Codes, as a first-party service naming the person in X-OV-Subject (OpenVibe.Actor routes coding work here, plan T17). Codes submits it to OpenVibe.Run as that person, in the project of their latest openvibe.codes/run task, and Run places it only on a machine of theirs (platform.resource-offer@1 owner). The person pays nothing to OpenVibe for it: the model use is on their own machine's keys.",++ "tags": [++ "codes.task"++ ],++ "x-openvibe-capabilities": [++ "codes.task.start"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "codes-task-start",++ "security": [++ {++ "openvibeToken": [++ "codes.task.start"++ ]++ }++ ],++ "requestBody": {++ "required": false,++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/codes.task-start-request.v1"++ }++ }++ }++ },++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/codes.task-start-result.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/tasks/{id}": {++ "get": {++ "operationId": "get_api_v1_tasks_id",++ "summary": "Read a coding task started through codes.task.start: GET /api/v1/tasks/:id on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject.",++ "description": "**codes.task.read** (first-party): Read a coding task started through codes.task.start: GET /api/v1/tasks/:id on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Another service's task, or another person's, is 404.",++ "tags": [++ "codes.task"++ ],++ "x-openvibe-capabilities": [++ "codes.task.read"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "codes-read",++ "security": [++ {++ "openvibeToken": [++ "codes.task.read"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/codes.task.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ },++ "/api/v1/tasks/{id}/cancel": {++ "post": {++ "operationId": "post_api_v1_tasks_id_cancel",++ "summary": "Cancel a coding task started through codes.task.start that has not ended: POST /api/v1/tasks/:id/cancel on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject.",++ "description": "**codes.task.cancel** (first-party): Cancel a coding task started through codes.task.start that has not ended: POST /api/v1/tasks/:id/cancel on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Codes cancels the Run job; the task ends cancelled (an ended one is answered as it is).",++ "tags": [++ "codes.task"++ ],++ "x-openvibe-capabilities": [++ "codes.task.cancel"++ ],++ "x-openvibe-visibility": [++ "first-party"++ ],++ "x-openvibe-quota-class": "codes-task-start",++ "security": [++ {++ "openvibeToken": [++ "codes.task.cancel"++ ]++ }++ ],++ "parameters": [++ {++ "name": "id",++ "in": "path",++ "required": true,++ "schema": {++ "type": "string"++ }++ }++ ],++ "responses": {++ "2XX": {++ "description": "Success",++ "content": {++ "application/json": {++ "schema": {++ "$ref": "#/components/schemas/codes.task.v1"++ }++ }++ }++ },++ "default": {++ "description": "An error (RFC 9457 problem details)",++ "content": {++ "application/problem+json": {++ "schema": {++ "$ref": "#/components/schemas/errors.problem.v1"++ }++ }++ }++ }++ }++ }++ }++ },++ "components": {++ "schemas": {++ "codes.task-start-request.v1": {++ "title": "CodesTaskStartRequest",++ "description": "codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "repo",++ "prompt"++ ],++ "properties": {++ "repo": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://[^\\s@/]+/[^\\s@]+$",++ "maxLength": 300++ },++ "ref": {++ "type": "string",++ "minLength": 1,++ "maxLength": 200,++ "pattern": "^[^\\s~^:?*\\[\\\\]+$"++ },++ "prompt": {++ "type": "string",++ "minLength": 1,++ "maxLength": 8000++ },++ "agent": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9-]{1,40}$"++ },++ "permission": {++ "enum": [++ "edit",++ "full"++ ]++ },++ "push": {++ "type": "boolean"++ },++ "pull_request": {++ "type": "boolean"++ },++ "idempotency_key": {++ "type": "string",++ "minLength": 8,++ "maxLength": 128,++ "pattern": "^[A-Za-z0-9_.:-]+$"++ }++ }++ },++ "codes.task-start-result.v1": {++ "title": "CodesTaskStartResult",++ "description": "codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "task",++ "created"++ ],++ "properties": {++ "task": {++ "$ref": "#/components/schemas/codes.task.v1"++ },++ "created": {++ "type": "boolean"++ }++ }++ },++ "codes.task.v1": {++ "title": "CodesTask",++ "description": "codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "id",++ "state",++ "repo",++ "url",++ "created_at",++ "updated_at"++ ],++ "properties": {++ "id": {++ "type": "string",++ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$",++ "description": "The Codes task id (tsk_ + ULID)."++ },++ "state": {++ "enum": [++ "queued",++ "placed",++ "running",++ "succeeded",++ "failed",++ "cancelled",++ "expired"++ ]++ },++ "repo": {++ "type": "string",++ "maxLength": 300++ },++ "ref": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 200++ },++ "agent": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 41++ },++ "url": {++ "type": "string",++ "format": "uri",++ "pattern": "^https://"++ },++ "created_at": {++ "type": "string",++ "format": "date-time"++ },++ "updated_at": {++ "type": "string",++ "format": "date-time"++ },++ "error": {++ "type": [++ "string",++ "null"++ ],++ "maxLength": 1000++ },++ "result": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "ok"++ ],++ "properties": {++ "ok": {++ "type": "boolean"++ },++ "agents": {++ "type": "array",++ "maxItems": 20,++ "items": {++ "type": "string",++ "maxLength": 41++ }++ },++ "summary": {++ "type": "string",++ "maxLength": 4000++ },++ "files": {++ "type": "array",++ "maxItems": 2000,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "path"++ ],++ "properties": {++ "path": {++ "type": "string",++ "minLength": 1,++ "maxLength": 500++ },++ "added": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0++ },++ "removed": {++ "type": [++ "integer",++ "null"++ ],++ "minimum": 0++ }++ }++ }++ },++ "patch": {++ "type": "string",++ "maxLength": 262144++ },++ "patch_truncated": {++ "type": "boolean"++ },++ "push": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "pushed"++ ],++ "properties": {++ "pushed": {++ "type": "boolean"++ },++ "branch": {++ "type": "string",++ "maxLength": 200++ },++ "branch_url": {++ "type": "string",++ "format": "uri"++ },++ "pull_request": {++ "type": "string",++ "format": "uri"++ },++ "pull_request_error": {++ "type": "string",++ "maxLength": 500++ },++ "reason": {++ "type": "string",++ "maxLength": 500++ }++ }++ },++ "cost_usd": {++ "type": "number",++ "minimum": 0++ },++ "duration_ms": {++ "type": "integer",++ "minimum": 0++ },++ "error": {++ "type": "string",++ "maxLength": 1000++ }++ }++ }++ }++ },++ "errors.problem.v1": {++ "title": "Problem",++ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",++ "type": "object",++ "required": [++ "type",++ "title",++ "status",++ "code"++ ],++ "additionalProperties": true,++ "properties": {++ "type": {++ "type": "string",++ "format": "uri-reference"++ },++ "title": {++ "type": "string",++ "minLength": 1++ },++ "status": {++ "type": "integer",++ "minimum": 400,++ "maximum": 599++ },++ "detail": {++ "type": "string"++ },++ "instance": {++ "type": "string",++ "format": "uri-reference"++ },++ "code": {++ "type": "string",++ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"++ },++ "request_id": {++ "type": "string"++ },++ "trace_id": {++ "type": "string",++ "pattern": "^[0-9a-f]{32}$"++ },++ "errors": {++ "type": "array",++ "items": {++ "type": "object",++ "required": [++ "message"++ ],++ "properties": {++ "path": {++ "type": "string"++ },++ "message": {++ "type": "string"++ }++ }++ }++ },++ "error": {++ "type": "string",++ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."++ }++ }++ }++ },++ "securitySchemes": {++ "openvibeToken": {++ "type": "http",++ "scheme": "bearer",++ "bearerFormat": "JWT",++ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."++ }++ }++ }++}@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Coupons API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Deals API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Events API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Food API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Games API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Host API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the 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"@@@ -43,6 +43,13 @@"operations": 24,"capabilities": 13},++ {++ "service": "codes",++ "name": "OpenVibe.Codes",++ "origin": "https://openvibe.codes",++ "operations": 3,++ "capabilities": 3++ },{"service": "community","name": "OpenVibe.Community",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Inventory API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Live API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.MediaHub API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Media API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Network API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.News API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenRestream API",-- "version": "0.161.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Reviews API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Run API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Search API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Services API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Sources API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Space API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tips API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Tools API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Trade API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.VIP API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Watch API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Wiki API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Work API",-- "version": "0.161.0",-- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.162.0",++ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the 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"@@@ -176945,3 +176945,207 @@ export type VideoPlaylistManageResult =added_at: string;}[];};++++/** [email protected] (owner: codes) */++/**++ * codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).++ */++export interface CodesTaskStartRequest {++ repo: string;++ ref?: string;++ prompt: string;++ agent?: string;++ permission?: "edit" | "full";++ push?: boolean;++ pull_request?: boolean;++ idempotency_key?: string;++}++++/** [email protected] (owner: codes) */++/**++ * codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).++ */++export interface CodesTaskStartResult {++ task: CodesTask;++ created: boolean;++}++++/** [email protected] (owner: codes) */++/**++ * codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).++ */++export interface CodesTask {++ /**++ * The Codes task id (tsk_ + ULID).++ */++ id: string;++ state: "queued" | "placed" | "running" | "succeeded" | "failed" | "cancelled" | "expired";++ repo: string;++ ref?: string | null;++ agent?: string | null;++ url: string;++ created_at: string;++ updated_at: string;++ error?: string | null;++ result?: {++ ok: boolean;++ /**++ * @maxItems 20++ */++ agents?:++ | []++ | [string]++ | [string, string]++ | [string, string, string]++ | [string, string, string, string]++ | [string, string, string, string, string]++ | [string, string, string, string, string, string]++ | [string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string, string, string]++ | [string, string, string, string, string, string, string, string, string, string, string, string, string, string]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ]++ | [++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string,++ string++ ];++ summary?: string;++ /**++ * @maxItems 2000++ */++ files?: {++ path: string;++ added?: number | null;++ removed?: number | null;++ }[];++ patch?: string;++ patch_truncated?: boolean;++ push?: {++ pushed: boolean;++ branch?: string;++ branch_url?: string;++ pull_request?: string;++ pull_request_error?: string;++ reason?: string;++ };++ cost_usd?: number;++ duration_ms?: number;++ error?: string;++ };++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "codes.task.cancel",++ "version": "1.0",++ "owner": "codes",++ "status": "active",++ "visibility": "first-party",++ "description": "Cancel a coding task started through codes.task.start that has not ended: POST /api/v1/tasks/:id/cancel on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Codes cancels the Run job; the task ends cancelled (an ended one is answered as it is).",++ "inputSchema": "common.no-body@1",++ "outputSchema": "codes.task@1",++ "permissions": [++ "codes:tasks:cancel"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "codes-task-start",++ "events": [],++ "implementedBy": [++ "POST /api/v1/tasks/:id/cancel"++ ]++}nnew file mode 100644@@@ -0,0 +1,21 @@++{++ "id": "codes.task.read",++ "version": "1.0",++ "owner": "codes",++ "status": "active",++ "visibility": "first-party",++ "description": "Read a coding task started through codes.task.start: GET /api/v1/tasks/:id on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Another service's task, or another person's, is 404.",++ "inputSchema": "common.no-body@1",++ "outputSchema": "codes.task@1",++ "permissions": [++ "codes:tasks:read"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "codes-read",++ "events": [],++ "implementedBy": [++ "GET /api/v1/tasks/:id"++ ]++}nnew file mode 100644@@@ -0,0 +1,22 @@++{++ "id": "codes.task.start",++ "version": "1.0",++ "owner": "codes",++ "status": "active",++ "visibility": "first-party",++ "sensitive": true,++ "description": "Start a coding task for a person on their own machine: POST /api/v1/tasks on OpenVibe.Codes, as a first-party service naming the person in X-OV-Subject (OpenVibe.Actor routes coding work here, plan T17). Codes submits it to OpenVibe.Run as that person, in the project of their latest openvibe.codes/run task, and Run places it only on a machine of theirs (platform.resource-offer@1 owner). The person pays nothing to OpenVibe for it: the model use is on their own machine's keys.",++ "inputSchema": "codes.task-start-request@1",++ "outputSchema": "codes.task-start-result@1",++ "permissions": [++ "codes:tasks:start"++ ],++ "resourceConstraints": [++ "owner"++ ],++ "quotaClass": "codes-task-start",++ "events": [],++ "implementedBy": [++ "POST /api/v1/tasks"++ ]++}@@@ -26,7 +26,11 @@"legalProfile": "ugc","position": 22},-- "capabilities": [],++ "capabilities": [++ "codes.task.start",++ "codes.task.read",++ "codes.task.cancel"++ ],"eventsProduced": [],"eventsConsumed": [],"namespacesOwned": [@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.161.0",++ "version": "0.162.0","description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.","main": "index.js","types": "generated/typescript/index.d.ts",
@@ -4,6 +4,18 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,18 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
from `https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/<tag>`. Before v0.30.0,
the notes were in the tag and commit messages (`git tag -n1`).
the notes were in the tag and commit messages (`git tag -n1`).
+## 0.162.0 — 2026-10-14
+
+- **`codes.task.start`, `codes.task.read`, `codes.task.cancel`** (plan T16/T17): a first-party service starts a coding
+ task for a person on OpenVibe.Codes (`POST /api/v1/tasks`, the person in `X-OV-Subject`), reads it and cancels it.
+ - Codes runs the task on that person's own machine through OpenVibe.Run, in the project of their latest
+ openvibe.codes/run task. Without one: 409 `codes.no_project`.
+ - Only the service that started a task, for the same person, sees it.
+ - OpenVibe.Actor is the first caller: its `codes` agent routes coding work there instead of refusing it.
+- New contracts: `codes.task-start-request@1`, `codes.task-start-result@1`, `codes.task@1` (state, page URL, and once
+ ended: ok, summary, files, patch, push, cost on the person's own keys, duration).
+- Additive. `codes` declares the three capabilities in its service manifest.
+
## 0.161.0 — 2026-10-14
## 0.161.0 — 2026-10-14
- **`platform.resource-offer@1`: `owner` for a user-owned offer** (plan T14, ADR-046). A person's own Node is offered with
- **`platform.resource-offer@1`: `owner` for a user-owned offer** (plan T14, ADR-046). A person's own Node is offered with
@@ -7128,6 +7128,33 @@
@@ -7128,6 +7128,33 @@
"visibility": "public",
"visibility": "public",
"compatibility": "backward",
"compatibility": "backward",
"status": "active"
"status": "active"
+ },
+ {
+ "id": "codes.task-start-request",
+ "version": "1.0.0",
+ "owner": "codes",
+ "schema": "codes/task-start-request.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "codes.task-start-result",
+ "version": "1.0.0",
+ "owner": "codes",
+ "schema": "codes/task-start-result.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
+ },
+ {
+ "id": "codes.task",
+ "version": "1.0.0",
+ "owner": "codes",
+ "schema": "codes/task.v1.json",
+ "visibility": "first-party",
+ "compatibility": "backward",
+ "status": "active"
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/task-start-request.v1.json",
+ "title": "CodesTaskStartRequest",
+ "description": "codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "repo",
+ "prompt"
+ ],
+ "properties": {
+ "repo": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://[^\\s@/]+/[^\\s@]+$",
+ "maxLength": 300
+ },
+ "ref": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "pattern": "^[^\\s~^:?*\\[\\\\]+$"
+ },
+ "prompt": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 8000
+ },
+ "agent": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9-]{1,40}$"
+ },
+ "permission": {
+ "enum": [
+ "edit",
+ "full"
+ ]
+ },
+ "push": {
+ "type": "boolean"
+ },
+ "pull_request": {
+ "type": "boolean"
+ },
+ "idempotency_key": {
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 128,
+ "pattern": "^[A-Za-z0-9_.:-]+$"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/task-start-result.v1.json",
+ "title": "CodesTaskStartResult",
+ "description": "codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task",
+ "created"
+ ],
+ "properties": {
+ "task": {
+ "$ref": "task.v1.json"
+ },
+ "created": {
+ "type": "boolean"
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,179 @@
@@ -0,0 +1,179 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/task.v1.json",
+ "title": "CodesTask",
+ "description": "codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "state",
+ "repo",
+ "url",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Codes task id (tsk_ + ULID)."
+ },
+ "state": {
+ "enum": [
+ "queued",
+ "placed",
+ "running",
+ "succeeded",
+ "failed",
+ "cancelled",
+ "expired"
+ ]
+ },
+ "repo": {
+ "type": "string",
+ "maxLength": 300
+ },
+ "ref": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 200
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 41
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1000
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "ok"
+ ],
+ "properties": {
+ "ok": {
+ "type": "boolean"
+ },
+ "agents": {
+ "type": "array",
+ "maxItems": 20,
+ "items": {
+ "type": "string",
+ "maxLength": 41
+ }
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 4000
+ },
+ "files": {
+ "type": "array",
+ "maxItems": 2000,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "added": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ },
+ "removed": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ }
+ }
+ }
+ },
+ "patch": {
+ "type": "string",
+ "maxLength": 262144
+ },
+ "patch_truncated": {
+ "type": "boolean"
+ },
+ "push": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "pushed"
+ ],
+ "properties": {
+ "pushed": {
+ "type": "boolean"
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "branch_url": {
+ "type": "string",
+ "format": "uri"
+ },
+ "pull_request": {
+ "type": "string",
+ "format": "uri"
+ },
+ "pull_request_error": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "reason": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+ },
+ "cost_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "duration_ms": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 1000
+ }
+ }
+ }
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "repo": "https://github.com/octocat/Hello-World",
+ "prompt": ""
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "repo": "https://user:[email protected]/octocat/Hello-World",
+ "prompt": "x"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "repo": "[email protected]:octocat/Hello-World.git",
+ "prompt": "x"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "repo": "https://github.com/octocat/Hello-World",
+ "prompt": "x",
+ "project": "prj_01M4XE52PGJDVR1KZ1AG9VYW3Q"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
+{
+ "repo": "https://github.com/octocat/Hello-World",
+ "prompt": "x",
+ "permission": "root"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": "master",
+ "prompt": "Fix the failing test and run the suite.",
+ "agent": "deepseek",
+ "permission": "full",
+ "push": true,
+ "pull_request": true,
+ "idempotency_key": "act_01M4XF00000000000000000000:step-2"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
+{
+ "repo": "https://github.com/octocat/Hello-World",
+ "prompt": "Add a line to the README."
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "task": {
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "nope",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+ },
+ "created": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "task": {
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "queued",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "task": {
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "queued",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+ },
+ "created": true
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
+{
+ "task": {
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "succeeded",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:01:12.000Z",
+ "result": {
+ "ok": true,
+ "agents": [
+ "deepseek"
+ ],
+ "summary": "Appended the line.",
+ "files": [
+ {
+ "path": "README",
+ "added": 1,
+ "removed": 0
+ }
+ ],
+ "patch": "diff --git a/README b/README\n--- a/README\n+++ b/README\n@@ -1 +1,2 @@\n Hello World!\n+Edited.\n",
+ "cost_usd": 0.0011,
+ "duration_ms": 4200,
+ "push": {
+ "pushed": false,
+ "reason": "no GITHUB_TOKEN on this machine"
+ }
+ }
+ },
+ "created": false
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "task_1",
+ "state": "queued",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "queued",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "http://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "succeeded",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z",
+ "result": {
+ "summary": "x"
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "paused",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "failed",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z",
+ "error": "run.job.unplaceable: no machine of yours runs code jobs"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
+{
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "queued",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:00:00.000Z"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
+{
+ "id": "tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "state": "succeeded",
+ "repo": "https://github.com/octocat/Hello-World",
+ "ref": null,
+ "agent": "deepseek",
+ "url": "https://openvibe.codes/run/tasks/tsk_01M4XEV0JT93CAYTXVD6V0QW1E",
+ "created_at": "2026-10-14T15:00:00.000Z",
+ "updated_at": "2026-10-14T15:01:12.000Z",
+ "result": {
+ "ok": true,
+ "agents": [
+ "deepseek"
+ ],
+ "summary": "Appended the line.",
+ "files": [
+ {
+ "path": "README",
+ "added": 1,
+ "removed": 0
+ }
+ ],
+ "patch": "diff --git a/README b/README\n--- a/README\n+++ b/README\n@@ -1 +1,2 @@\n Hello World!\n+Edited.\n",
+ "cost_usd": 0.0011,
+ "duration_ms": 4200,
+ "push": {
+ "pushed": false,
+ "reason": "no GITHUB_TOKEN on this machine"
+ }
+ }
+}
@@ -79685,6 +79685,273 @@
@@ -79685,6 +79685,273 @@
}
}
]
]
}
}
+ },
+ "codes.task-start-request": {
+ "version": "1.0.0",
+ "owner": "codes",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/task-start-request.v1.json",
+ "title": "CodesTaskStartRequest",
+ "description": "codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "repo",
+ "prompt"
+ ],
+ "properties": {
+ "repo": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://[^\\s@/]+/[^\\s@]+$",
+ "maxLength": 300
+ },
+ "ref": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "pattern": "^[^\\s~^:?*\\[\\\\]+$"
+ },
+ "prompt": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 8000
+ },
+ "agent": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9-]{1,40}$"
+ },
+ "permission": {
+ "enum": [
+ "edit",
+ "full"
+ ]
+ },
+ "push": {
+ "type": "boolean"
+ },
+ "pull_request": {
+ "type": "boolean"
+ },
+ "idempotency_key": {
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 128,
+ "pattern": "^[A-Za-z0-9_.:-]+$"
+ }
+ }
+ }
+ },
+ "codes.task-start-result": {
+ "version": "1.0.0",
+ "owner": "codes",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/task-start-result.v1.json",
+ "title": "CodesTaskStartResult",
+ "description": "codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task",
+ "created"
+ ],
+ "properties": {
+ "task": {
+ "$ref": "task.v1.json"
+ },
+ "created": {
+ "type": "boolean"
+ }
+ }
+ }
+ },
+ "codes.task": {
+ "version": "1.0.0",
+ "owner": "codes",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/codes/task.v1.json",
+ "title": "CodesTask",
+ "description": "codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "state",
+ "repo",
+ "url",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Codes task id (tsk_ + ULID)."
+ },
+ "state": {
+ "enum": [
+ "queued",
+ "placed",
+ "running",
+ "succeeded",
+ "failed",
+ "cancelled",
+ "expired"
+ ]
+ },
+ "repo": {
+ "type": "string",
+ "maxLength": 300
+ },
+ "ref": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 200
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 41
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1000
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "ok"
+ ],
+ "properties": {
+ "ok": {
+ "type": "boolean"
+ },
+ "agents": {
+ "type": "array",
+ "maxItems": 20,
+ "items": {
+ "type": "string",
+ "maxLength": 41
+ }
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 4000
+ },
+ "files": {
+ "type": "array",
+ "maxItems": 2000,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "added": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ },
+ "removed": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ }
+ }
+ }
+ },
+ "patch": {
+ "type": "string",
+ "maxLength": 262144
+ },
+ "patch_truncated": {
+ "type": "boolean"
+ },
+ "push": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "pushed"
+ ],
+ "properties": {
+ "pushed": {
+ "type": "boolean"
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "branch_url": {
+ "type": "string",
+ "format": "uri"
+ },
+ "pull_request": {
+ "type": "string",
+ "format": "uri"
+ },
+ "pull_request_error": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "reason": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+ },
+ "cost_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "duration_ms": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 1000
+ }
+ }
+ }
+ }
+ }
}
}
}
}
}
}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.AI API",
"title": "OpenVibe.AI API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Billing API",
"title": "OpenVibe.Billing API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Blog API",
"title": "OpenVibe.Blog API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Bot API",
"title": "OpenVibe.Bot API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Chat API",
"title": "OpenVibe.Chat API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
new file mode 100644
new file mode 100644
@@ -0,0 +1,512 @@
@@ -0,0 +1,512 @@
+{
+ "openapi": "3.1.0",
+ "jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
+ "info": {
+ "title": "OpenVibe.Codes API",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Codes as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the 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"
+ }
+ },
+ "servers": [
+ {
+ "url": "https://openvibe.codes"
+ }
+ ],
+ "paths": {
+ "/api/v1/tasks": {
+ "post": {
+ "operationId": "post_api_v1_tasks",
+ "summary": "Start a coding task for a person on their own machine: POST /api/v1/tasks on OpenVibe.Codes, as a first-party service naming the person in X-OV-Subject (OpenVibe.Actor routes coding work here, plan T1",
+ "description": "**codes.task.start** (first-party): Start a coding task for a person on their own machine: POST /api/v1/tasks on OpenVibe.Codes, as a first-party service naming the person in X-OV-Subject (OpenVibe.Actor routes coding work here, plan T17). Codes submits it to OpenVibe.Run as that person, in the project of their latest openvibe.codes/run task, and Run places it only on a machine of theirs (platform.resource-offer@1 owner). The person pays nothing to OpenVibe for it: the model use is on their own machine's keys.",
+ "tags": [
+ "codes.task"
+ ],
+ "x-openvibe-capabilities": [
+ "codes.task.start"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "codes-task-start",
+ "security": [
+ {
+ "openvibeToken": [
+ "codes.task.start"
+ ]
+ }
+ ],
+ "requestBody": {
+ "required": false,
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/codes.task-start-request.v1"
+ }
+ }
+ }
+ },
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/codes.task-start-result.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tasks/{id}": {
+ "get": {
+ "operationId": "get_api_v1_tasks_id",
+ "summary": "Read a coding task started through codes.task.start: GET /api/v1/tasks/:id on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject.",
+ "description": "**codes.task.read** (first-party): Read a coding task started through codes.task.start: GET /api/v1/tasks/:id on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Another service's task, or another person's, is 404.",
+ "tags": [
+ "codes.task"
+ ],
+ "x-openvibe-capabilities": [
+ "codes.task.read"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "codes-read",
+ "security": [
+ {
+ "openvibeToken": [
+ "codes.task.read"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/codes.task.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/tasks/{id}/cancel": {
+ "post": {
+ "operationId": "post_api_v1_tasks_id_cancel",
+ "summary": "Cancel a coding task started through codes.task.start that has not ended: POST /api/v1/tasks/:id/cancel on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject.",
+ "description": "**codes.task.cancel** (first-party): Cancel a coding task started through codes.task.start that has not ended: POST /api/v1/tasks/:id/cancel on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Codes cancels the Run job; the task ends cancelled (an ended one is answered as it is).",
+ "tags": [
+ "codes.task"
+ ],
+ "x-openvibe-capabilities": [
+ "codes.task.cancel"
+ ],
+ "x-openvibe-visibility": [
+ "first-party"
+ ],
+ "x-openvibe-quota-class": "codes-task-start",
+ "security": [
+ {
+ "openvibeToken": [
+ "codes.task.cancel"
+ ]
+ }
+ ],
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "2XX": {
+ "description": "Success",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/codes.task.v1"
+ }
+ }
+ }
+ },
+ "default": {
+ "description": "An error (RFC 9457 problem details)",
+ "content": {
+ "application/problem+json": {
+ "schema": {
+ "$ref": "#/components/schemas/errors.problem.v1"
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "codes.task-start-request.v1": {
+ "title": "CodesTaskStartRequest",
+ "description": "codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "repo",
+ "prompt"
+ ],
+ "properties": {
+ "repo": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://[^\\s@/]+/[^\\s@]+$",
+ "maxLength": 300
+ },
+ "ref": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 200,
+ "pattern": "^[^\\s~^:?*\\[\\\\]+$"
+ },
+ "prompt": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 8000
+ },
+ "agent": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9-]{1,40}$"
+ },
+ "permission": {
+ "enum": [
+ "edit",
+ "full"
+ ]
+ },
+ "push": {
+ "type": "boolean"
+ },
+ "pull_request": {
+ "type": "boolean"
+ },
+ "idempotency_key": {
+ "type": "string",
+ "minLength": 8,
+ "maxLength": 128,
+ "pattern": "^[A-Za-z0-9_.:-]+$"
+ }
+ }
+ },
+ "codes.task-start-result.v1": {
+ "title": "CodesTaskStartResult",
+ "description": "codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "task",
+ "created"
+ ],
+ "properties": {
+ "task": {
+ "$ref": "#/components/schemas/codes.task.v1"
+ },
+ "created": {
+ "type": "boolean"
+ }
+ }
+ },
+ "codes.task.v1": {
+ "title": "CodesTask",
+ "description": "codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "id",
+ "state",
+ "repo",
+ "url",
+ "created_at",
+ "updated_at"
+ ],
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^tsk_[0-9A-HJKMNP-TV-Z]{26}$",
+ "description": "The Codes task id (tsk_ + ULID)."
+ },
+ "state": {
+ "enum": [
+ "queued",
+ "placed",
+ "running",
+ "succeeded",
+ "failed",
+ "cancelled",
+ "expired"
+ ]
+ },
+ "repo": {
+ "type": "string",
+ "maxLength": 300
+ },
+ "ref": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 200
+ },
+ "agent": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 41
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "pattern": "^https://"
+ },
+ "created_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "updated_at": {
+ "type": "string",
+ "format": "date-time"
+ },
+ "error": {
+ "type": [
+ "string",
+ "null"
+ ],
+ "maxLength": 1000
+ },
+ "result": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "ok"
+ ],
+ "properties": {
+ "ok": {
+ "type": "boolean"
+ },
+ "agents": {
+ "type": "array",
+ "maxItems": 20,
+ "items": {
+ "type": "string",
+ "maxLength": 41
+ }
+ },
+ "summary": {
+ "type": "string",
+ "maxLength": 4000
+ },
+ "files": {
+ "type": "array",
+ "maxItems": 2000,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "path"
+ ],
+ "properties": {
+ "path": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 500
+ },
+ "added": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ },
+ "removed": {
+ "type": [
+ "integer",
+ "null"
+ ],
+ "minimum": 0
+ }
+ }
+ }
+ },
+ "patch": {
+ "type": "string",
+ "maxLength": 262144
+ },
+ "patch_truncated": {
+ "type": "boolean"
+ },
+ "push": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "pushed"
+ ],
+ "properties": {
+ "pushed": {
+ "type": "boolean"
+ },
+ "branch": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "branch_url": {
+ "type": "string",
+ "format": "uri"
+ },
+ "pull_request": {
+ "type": "string",
+ "format": "uri"
+ },
+ "pull_request_error": {
+ "type": "string",
+ "maxLength": 500
+ },
+ "reason": {
+ "type": "string",
+ "maxLength": 500
+ }
+ }
+ },
+ "cost_usd": {
+ "type": "number",
+ "minimum": 0
+ },
+ "duration_ms": {
+ "type": "integer",
+ "minimum": 0
+ },
+ "error": {
+ "type": "string",
+ "maxLength": 1000
+ }
+ }
+ }
+ }
+ },
+ "errors.problem.v1": {
+ "title": "Problem",
+ "description": "RFC 9457 problem details (application/problem+json) with a stable OpenVibe error code and trace identifiers. The legacy 'error' string is allowed during migration so existing clients keep working.",
+ "type": "object",
+ "required": [
+ "type",
+ "title",
+ "status",
+ "code"
+ ],
+ "additionalProperties": true,
+ "properties": {
+ "type": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "title": {
+ "type": "string",
+ "minLength": 1
+ },
+ "status": {
+ "type": "integer",
+ "minimum": 400,
+ "maximum": 599
+ },
+ "detail": {
+ "type": "string"
+ },
+ "instance": {
+ "type": "string",
+ "format": "uri-reference"
+ },
+ "code": {
+ "type": "string",
+ "pattern": "^[a-z][a-z0-9_]*(\\.[a-z0-9_]+)*$"
+ },
+ "request_id": {
+ "type": "string"
+ },
+ "trace_id": {
+ "type": "string",
+ "pattern": "^[0-9a-f]{32}$"
+ },
+ "errors": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "message"
+ ],
+ "properties": {
+ "path": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "error": {
+ "type": "string",
+ "description": "Deprecated compatibility field: same text as title/detail for clients that read {error}."
+ }
+ }
+ }
+ },
+ "securitySchemes": {
+ "openvibeToken": {
+ "type": "http",
+ "scheme": "bearer",
+ "bearerFormat": "JWT",
+ "description": "An OpenVibe Network token for this service: a person's token, an app token (client credentials, audience of the service) or a first-party service token. Its `cap` claim must include the capability the operation names."
+ }
+ }
+ }
+}
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Coupons API",
"title": "OpenVibe.Coupons API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Deals API",
"title": "OpenVibe.Deals API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Events API",
"title": "OpenVibe.Events API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Food API",
"title": "OpenVibe.Food API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Games API",
"title": "OpenVibe.Games API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Host API",
"title": "OpenVibe.Host API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -43,6 +43,13 @@
@@ -43,6 +43,13 @@
"operations": 24,
"operations": 24,
"capabilities": 13
"capabilities": 13
},
},
+ {
+ "service": "codes",
+ "name": "OpenVibe.Codes",
+ "origin": "https://openvibe.codes",
+ "operations": 3,
+ "capabilities": 3
+ },
{
{
"service": "community",
"service": "community",
"name": "OpenVibe.Community",
"name": "OpenVibe.Community",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Live API",
"title": "OpenVibe.Live API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.MediaHub API",
"title": "OpenVibe.MediaHub API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.MediaHub as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Media API",
"title": "OpenVibe.Media API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Network API",
"title": "OpenVibe.Network API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.News API",
"title": "OpenVibe.News API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenRestream API",
"title": "OpenRestream API",
- "version": "0.161.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Reviews API",
"title": "OpenVibe.Reviews API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Run API",
"title": "OpenVibe.Run API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Search API",
"title": "OpenVibe.Search API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Services API",
"title": "OpenVibe.Services API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Sources API",
"title": "OpenVibe.Sources API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Space API",
"title": "OpenVibe.Space API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Space as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tips API",
"title": "OpenVibe.Tips API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Tools API",
"title": "OpenVibe.Tools API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Trade API",
"title": "OpenVibe.Trade API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.VIP API",
"title": "OpenVibe.VIP API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Watch API",
"title": "OpenVibe.Watch API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Wiki API",
"title": "OpenVibe.Wiki API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Work API",
"title": "OpenVibe.Work API",
- "version": "0.161.0",
- "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.161.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.162.0",
+ "description": "Routes of OpenVibe.Work as the OpenVibe contracts describe them (openvibe-contracts 0.162.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -176945,3 +176945,207 @@ export type VideoPlaylistManageResult =
@@ -176945,3 +176945,207 @@ export type VideoPlaylistManageResult =
added_at: string;
added_at: string;
}[];
}[];
};
};
+
+/** [email protected] (owner: codes) */
+/**
+ * codes.task-start-request@1: the body of POST /api/v1/tasks on OpenVibe.Codes (capability codes.task.start). A first-party service (OpenVibe.Actor) starts a coding task for a person, named with X-OV-Subject: Codes runs it on that person's own machine through OpenVibe.Run (openvibe.codes/run, plan T16), in the project of their latest task there, so the person has used openvibe.codes/run once before a service can start one for them (else 409 codes.no_project). REPO is an https git URL with no credentials; REF a branch or tag to start from (default: the repository's default branch). PROMPT is the task. AGENT names one of Codes' agents (GET /harnesses), absent for Codes' router to pick. PERMISSION: edit (default; the agents edit files) or full (they may also run commands: tests, installs). PUSH asks for the change on a new branch (GitHub, with the machine's GITHUB_TOKEN; never the branch it started from), PULL_REQUEST also opens a pull request. IDEMPOTENCY_KEY: a repeat for the same person with the same key answers the first task (200, created false).
+ */
+export interface CodesTaskStartRequest {
+ repo: string;
+ ref?: string;
+ prompt: string;
+ agent?: string;
+ permission?: "edit" | "full";
+ push?: boolean;
+ pull_request?: boolean;
+ idempotency_key?: string;
+}
+
+/** [email protected] (owner: codes) */
+/**
+ * codes.task-start-result@1: the answer of POST /api/v1/tasks (201 created, or 200 with created false for a repeated idempotency key).
+ */
+export interface CodesTaskStartResult {
+ task: CodesTask;
+ created: boolean;
+}
+
+/** [email protected] (owner: codes) */
+/**
+ * codes.task@1: a coding task on OpenVibe.Codes, as GET /api/v1/tasks/:id answers it (capability codes.task.read) and POST /api/v1/tasks creates it. STATE follows the OpenVibe.Run job that carries it: queued (waiting for one of the person's machines), placed, running, then succeeded, failed, cancelled or expired (no machine of theirs took it in time). URL is the task's page on openvibe.codes, where its owner follows it live. RESULT is present once it has ended: OK says whether the agents finished, SUMMARY what they said, FILES and PATCH the change (the patch at most 256 KiB, PATCH_TRUNCATED when cut), PUSH where it went when asked, COST_USD the model use on the person's own keys, DURATION_MS the time on their machine. ERROR says why a task that never ran ended (Run refused it, or the job failed before a result).
+ */
+export interface CodesTask {
+ /**
+ * The Codes task id (tsk_ + ULID).
+ */
+ id: string;
+ state: "queued" | "placed" | "running" | "succeeded" | "failed" | "cancelled" | "expired";
+ repo: string;
+ ref?: string | null;
+ agent?: string | null;
+ url: string;
+ created_at: string;
+ updated_at: string;
+ error?: string | null;
+ result?: {
+ ok: boolean;
+ /**
+ * @maxItems 20
+ */
+ agents?:
+ | []
+ | [string]
+ | [string, string]
+ | [string, string, string]
+ | [string, string, string, string]
+ | [string, string, string, string, string]
+ | [string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string, string, string]
+ | [string, string, string, string, string, string, string, string, string, string, string, string, string, string]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ]
+ | [
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string,
+ string
+ ];
+ summary?: string;
+ /**
+ * @maxItems 2000
+ */
+ files?: {
+ path: string;
+ added?: number | null;
+ removed?: number | null;
+ }[];
+ patch?: string;
+ patch_truncated?: boolean;
+ push?: {
+ pushed: boolean;
+ branch?: string;
+ branch_url?: string;
+ pull_request?: string;
+ pull_request_error?: string;
+ reason?: string;
+ };
+ cost_usd?: number;
+ duration_ms?: number;
+ error?: string;
+ };
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "codes.task.cancel",
+ "version": "1.0",
+ "owner": "codes",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Cancel a coding task started through codes.task.start that has not ended: POST /api/v1/tasks/:id/cancel on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Codes cancels the Run job; the task ends cancelled (an ended one is answered as it is).",
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "codes.task@1",
+ "permissions": [
+ "codes:tasks:cancel"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "codes-task-start",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/tasks/:id/cancel"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,21 @@
@@ -0,0 +1,21 @@
+{
+ "id": "codes.task.read",
+ "version": "1.0",
+ "owner": "codes",
+ "status": "active",
+ "visibility": "first-party",
+ "description": "Read a coding task started through codes.task.start: GET /api/v1/tasks/:id on OpenVibe.Codes, as the service that started it, naming the same person in X-OV-Subject. Another service's task, or another person's, is 404.",
+ "inputSchema": "common.no-body@1",
+ "outputSchema": "codes.task@1",
+ "permissions": [
+ "codes:tasks:read"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "codes-read",
+ "events": [],
+ "implementedBy": [
+ "GET /api/v1/tasks/:id"
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
+{
+ "id": "codes.task.start",
+ "version": "1.0",
+ "owner": "codes",
+ "status": "active",
+ "visibility": "first-party",
+ "sensitive": true,
+ "description": "Start a coding task for a person on their own machine: POST /api/v1/tasks on OpenVibe.Codes, as a first-party service naming the person in X-OV-Subject (OpenVibe.Actor routes coding work here, plan T17). Codes submits it to OpenVibe.Run as that person, in the project of their latest openvibe.codes/run task, and Run places it only on a machine of theirs (platform.resource-offer@1 owner). The person pays nothing to OpenVibe for it: the model use is on their own machine's keys.",
+ "inputSchema": "codes.task-start-request@1",
+ "outputSchema": "codes.task-start-result@1",
+ "permissions": [
+ "codes:tasks:start"
+ ],
+ "resourceConstraints": [
+ "owner"
+ ],
+ "quotaClass": "codes-task-start",
+ "events": [],
+ "implementedBy": [
+ "POST /api/v1/tasks"
+ ]
+}
@@ -26,7 +26,11 @@
@@ -26,7 +26,11 @@
"legalProfile": "ugc",
"legalProfile": "ugc",
"position": 22
"position": 22
},
},
- "capabilities": [],
+ "capabilities": [
+ "codes.task.start",
+ "codes.task.read",
+ "codes.task.cancel"
+ ],
"eventsProduced": [],
"eventsProduced": [],
"eventsConsumed": [],
"eventsConsumed": [],
"namespacesOwned": [
"namespacesOwned": [
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.161.0",
+ "version": "0.162.0",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"description": "Machine-readable contracts for the OpenVibe network: schemas, manifests, ids, error envelope, capability checks.",
"main": "index.js",
"main": "index.js",
"types": "generated/typescript/index.d.ts",
"types": "generated/typescript/index.d.ts",