openvibers/openvibe.contracts Commits
Contracts 0.133.0: Actor task webhooks (signed per task, actor.task-webhook@1) (#86)
Changes
@@@ -4,6 +4,27 @@ 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.133.0 — 2026-10-10++++**Actor task webhooks** (plan T17). Additive; OpenVibe.Actor implements them with its pin to this release.++++- **`actor.task-create-request@1`:** gains `webhooks` (1 to 8 items, each an https `url` and the `events` to deliver, which++ are the names of platform.task@1 `state`).++- **Signing:** Actor signs each task's deliveries with a secret it mints for that task. `platform.task@1` gains++ `webhook_secret` (`whsec_` and 43 characters), present only in the answer that created the task (and an idempotent++ repeat), never in a read or a list. It is erased once the task has ended and its deliveries are done.++- **New `actor.task-webhook@1`** (the delivery body): `{ type: "actor.task.state", delivery_id: "whd_…", state, task }`.++ - `delivery_id` is stable across retries.++ - `task` is platform.task@1 as it was then, without the secret.++ - Signed exactly like an Events delivery (`X-OpenVibe-Timestamp`, `X-OpenVibe-Signature-V2`), so receivers check++ it with openvibe-sdk/events `verifyDeliveryV2`.++ - 2xx is delivered; 410 or a URL the egress guard refuses ends it; anything else is retried for about a day.++- **Not accepted yet:** a project secret named by reference (`secret_ref`), since project secrets are not built. The++ request schema leaves it out, so naming one is a 422.++- `lib/ids.js` records `webhook_delivery: 'whd'`; the `actor.task.create` capability says what it now does.++- **Fixtures:** a request with webhooks; invalid ones for plain http and `secret_ref`; a delivery; invalid deliveries++ carrying the secret or with a bad delivery id.++## 0.132.0 — 2026-10-10**An Events position is an opaque cursor and nothing else** (ADR-042 decision 7, plan T7). `events.read-result@1` and@@@ -2,7 +2,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/actor/task-create-request.v1.json","title": "ActorTaskCreateRequest",-- "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.",++ "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.","type": "object","additionalProperties": false,"required": [@@@ -53,6 +53,47 @@"minLength": 8,"maxLength": 128,"pattern": "^[A-Za-z0-9._:-]+$"++ },++ "webhooks": {++ "type": "array",++ "minItems": 1,++ "maxItems": 8,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "url",++ "events"++ ],++ "properties": {++ "url": {++ "type": "string",++ "format": "uri",++ "maxLength": 2000,++ "pattern": "^https://",++ "description": "The HTTPS endpoint Actor POSTs to."++ },++ "events": {++ "type": "array",++ "minItems": 1,++ "maxItems": 6,++ "uniqueItems": true,++ "items": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "verifying",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "description": "The state changes delivered; the names of platform.task@1 `state`."++ }++ }++ },++ "description": "Where Actor tells the caller about this task's state changes (plan T17)."}},"examples": [@@@ -62,6 +103,20 @@"budget": {"per_task_usd": 0.05}++ },++ {++ "task": "Summarize today's top three posts on openvibe.news.",++ "mode": "cheapest",++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed",++ "cancelled"++ ]++ }++ ]}]}nnew file mode 100644@@@ -0,0 +1,37 @@++{++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/task-webhook.v1.json",++ "title": "ActorTaskWebhook",++ "description": "actor.task-webhook@1: the body OpenVibe.Actor POSTs to a task's webhook (plan T17) when the task reaches a state the webhook asked for. TYPE is actor.task.state; DELIVERY_ID is stable across retries (dedupe on it); STATE is the state reached; TASK is platform.task@1 as it was at that moment, without webhook_secret. Headers: X-OpenVibe-Delivery-Id, X-OpenVibe-Task-Id, X-OpenVibe-Task-State, X-OpenVibe-Delivery-Attempt, X-OpenVibe-Timestamp and X-OpenVibe-Signature-V2 (HMAC-SHA256 of \"<timestamp>.<raw body>\" with the task's webhook_secret; openvibe-sdk/events verifyDeliveryV2 checks it and the ±300 s window). A 2xx answer is delivered; 410 Gone, or a URL the egress guard refuses at send time, ends the delivery at once; anything else is retried with backoff for about a day. Deliveries never delay or change the task.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "delivery_id",++ "state",++ "task"++ ],++ "properties": {++ "type": {++ "const": "actor.task.state"++ },++ "delivery_id": {++ "type": "string",++ "pattern": "^whd_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "state": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "verifying",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "task": {++ "$ref": "../platform/task.v1.json"++ }++ }++}@@@ -6362,6 +6362,16 @@"status": "active","adr": "ADR-044"},++ {++ "id": "actor.task-webhook",++ "version": "1.0.0",++ "owner": "actor",++ "schema": "actor/task-webhook.v1.json",++ "visibility": "public",++ "compatibility": "backward",++ "status": "active",++ "adr": "ADR-044"++ },{"id": "actor.agent-list-result","version": "1.0.0",@@@ -2,7 +2,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/platform/task.v1.json","title": "Task",-- "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",++ "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.","$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.","type": "object","additionalProperties": false,@@@ -274,6 +274,11 @@}],"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."++ },++ "webhook_secret": {++ "type": "string",++ "pattern": "^whsec_[A-Za-z0-9_-]{43}$",++ "description": "The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of \"<t>.<raw body>\">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done."}},"allOf": [nnew file mode 100644@@@ -0,0 +1,11 @@++{++ "task": "x",++ "webhooks": [++ {++ "url": "http://hooks.example.com/x",++ "events": [++ "succeeded"++ ]++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,12 @@++{++ "task": "x",++ "webhooks": [++ {++ "url": "https://hooks.example.com/x",++ "events": [++ "succeeded"++ ],++ "secret_ref": "HOOK_KEY"++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,13 @@++{++ "task": "Summarize today's top three posts on openvibe.news.",++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed",++ "cancelled"++ ]++ }++ ]++}nnew file mode 100644@@@ -0,0 +1,42 @@++{++ "type": "actor.task.state",++ "delivery_id": "dlv_1",++ "state": "failed",++ "task": {++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "requester": {++ "type": "user",++ "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"++ },++ "task": "Summarize today's top three posts on openvibe.news.",++ "mode": "cheapest",++ "budget": {++ "per_task_usd": 0.05,++ "per_day_usd": 1++ },++ "state": "failed",++ "created_at": "2026-10-10T22:00:00.000Z",++ "finished_at": "2026-10-10T22:00:41.000Z",++ "result": null,++ "cost": {++ "usd": 0.0021,++ "free_allowance_used": 0.0021++ },++ "explanation": null,++ "progress": null,++ "cancel": null,++ "error": {++ "code": "actor.agents.exhausted",++ "detail": "No agent finished this task with an answer that passed its check."++ },++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed"++ ]++ }++ ]++ }++}nnew file mode 100644@@@ -0,0 +1,44 @@++{++ "type": "actor.task.state",++ "delivery_id": "whd_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "state": "failed",++ "task": {++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "requester": {++ "type": "user",++ "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"++ },++ "task": "Summarize today's top three posts on openvibe.news.",++ "mode": "cheapest",++ "budget": {++ "per_task_usd": 0.05,++ "per_day_usd": 1++ },++ "state": "failed",++ "created_at": "2026-10-10T22:00:00.000Z",++ "finished_at": "2026-10-10T22:00:41.000Z",++ "result": null,++ "cost": {++ "usd": 0.0021,++ "free_allowance_used": 0.0021++ },++ "explanation": null,++ "progress": null,++ "cancel": null,++ "error": {++ "code": "actor.agents.exhausted",++ "detail": "No agent finished this task with an answer that passed its check."++ },++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed"++ ]++ }++ ],++ "webhook_secret": "whsec_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"++ },++ "secret": "x"++}nnew file mode 100644@@@ -0,0 +1,42 @@++{++ "type": "actor.task.state",++ "delivery_id": "whd_01JAB2C3D4E5F6G7H8J9K0MNPS",++ "state": "failed",++ "task": {++ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",++ "requester": {++ "type": "user",++ "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"++ },++ "task": "Summarize today's top three posts on openvibe.news.",++ "mode": "cheapest",++ "budget": {++ "per_task_usd": 0.05,++ "per_day_usd": 1++ },++ "state": "failed",++ "created_at": "2026-10-10T22:00:00.000Z",++ "finished_at": "2026-10-10T22:00:41.000Z",++ "result": null,++ "cost": {++ "usd": 0.0021,++ "free_allowance_used": 0.0021++ },++ "explanation": null,++ "progress": null,++ "cancel": null,++ "error": {++ "code": "actor.agents.exhausted",++ "detail": "No agent finished this task with an answer that passed its check."++ },++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed"++ ]++ }++ ]++ }++}@@@ -66571,7 +66571,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/platform/task.v1.json","title": "Task",-- "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",++ "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.","$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.","type": "object","additionalProperties": false,@@@ -66843,6 +66843,11 @@}],"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."++ },++ "webhook_secret": {++ "type": "string",++ "pattern": "^whsec_[A-Za-z0-9_-]{43}$",++ "description": "The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of \"<t>.<raw body>\">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done."}},"allOf": [@@@ -73228,7 +73233,7 @@"$schema": "https://json-schema.org/draft/2020-12/schema","$id": "https://openvibe.network/contracts/actor/task-create-request.v1.json","title": "ActorTaskCreateRequest",-- "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.",++ "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.","type": "object","additionalProperties": false,"required": [@@@ -73279,6 +73284,47 @@"minLength": 8,"maxLength": 128,"pattern": "^[A-Za-z0-9._:-]+$"++ },++ "webhooks": {++ "type": "array",++ "minItems": 1,++ "maxItems": 8,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "url",++ "events"++ ],++ "properties": {++ "url": {++ "type": "string",++ "format": "uri",++ "maxLength": 2000,++ "pattern": "^https://",++ "description": "The HTTPS endpoint Actor POSTs to."++ },++ "events": {++ "type": "array",++ "minItems": 1,++ "maxItems": 6,++ "uniqueItems": true,++ "items": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "verifying",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "description": "The state changes delivered; the names of platform.task@1 `state`."++ }++ }++ },++ "description": "Where Actor tells the caller about this task's state changes (plan T17)."}},"examples": [@@@ -73288,6 +73334,20 @@"budget": {"per_task_usd": 0.05}++ },++ {++ "task": "Summarize today's top three posts on openvibe.news.",++ "mode": "cheapest",++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed",++ "cancelled"++ ]++ }++ ]}]}@@@ -73440,6 +73500,48 @@}}},++ "actor.task-webhook": {++ "version": "1.0.0",++ "owner": "actor",++ "status": "active",++ "schema": {++ "$schema": "https://json-schema.org/draft/2020-12/schema",++ "$id": "https://openvibe.network/contracts/actor/task-webhook.v1.json",++ "title": "ActorTaskWebhook",++ "description": "actor.task-webhook@1: the body OpenVibe.Actor POSTs to a task's webhook (plan T17) when the task reaches a state the webhook asked for. TYPE is actor.task.state; DELIVERY_ID is stable across retries (dedupe on it); STATE is the state reached; TASK is platform.task@1 as it was at that moment, without webhook_secret. Headers: X-OpenVibe-Delivery-Id, X-OpenVibe-Task-Id, X-OpenVibe-Task-State, X-OpenVibe-Delivery-Attempt, X-OpenVibe-Timestamp and X-OpenVibe-Signature-V2 (HMAC-SHA256 of \"<timestamp>.<raw body>\" with the task's webhook_secret; openvibe-sdk/events verifyDeliveryV2 checks it and the ±300 s window). A 2xx answer is delivered; 410 Gone, or a URL the egress guard refuses at send time, ends the delivery at once; anything else is retried with backoff for about a day. Deliveries never delay or change the task.",++ "type": "object",++ "additionalProperties": false,++ "required": [++ "type",++ "delivery_id",++ "state",++ "task"++ ],++ "properties": {++ "type": {++ "const": "actor.task.state"++ },++ "delivery_id": {++ "type": "string",++ "pattern": "^whd_[0-9A-HJKMNP-TV-Z]{26}$"++ },++ "state": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "verifying",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "task": {++ "$ref": "../platform/task.v1.json"++ }++ }++ }++ },"actor.agent-list-result": {"version": "1.0.0","owner": "actor",@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Actor API",-- "version": "0.132.0",-- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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"@@@ -258,7 +258,7 @@"post": {"operationId": "post_api_v1_tasks","summary": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget.",-- "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running.",++ "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running. A task may register webhooks: Actor POSTs actor.task-webhook@1 to each on the state changes it asked for, signed with a secret minted for the task and returned once, as webhook_secret, in the answer that created it.","tags": ["actor.task"],@@@ -370,7 +370,7 @@"post": {"operationId": "post_api_v1_tasks_id_cancel","summary": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget.",-- "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running.",++ "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running. A task may register webhooks: Actor POSTs actor.task-webhook@1 to each on the state changes it asked for, signed with a secret minted for the task and returned once, as webhook_secret, in the answer that created it.","tags": ["actor.task"],@@@ -614,7 +614,7 @@},"actor.task-create-request.v1": {"title": "ActorTaskCreateRequest",-- "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.",++ "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.","type": "object","additionalProperties": false,"required": [@@@ -665,6 +665,47 @@"minLength": 8,"maxLength": 128,"pattern": "^[A-Za-z0-9._:-]+$"++ },++ "webhooks": {++ "type": "array",++ "minItems": 1,++ "maxItems": 8,++ "items": {++ "type": "object",++ "additionalProperties": false,++ "required": [++ "url",++ "events"++ ],++ "properties": {++ "url": {++ "type": "string",++ "format": "uri",++ "maxLength": 2000,++ "pattern": "^https://",++ "description": "The HTTPS endpoint Actor POSTs to."++ },++ "events": {++ "type": "array",++ "minItems": 1,++ "maxItems": 6,++ "uniqueItems": true,++ "items": {++ "type": "string",++ "enum": [++ "queued",++ "running",++ "verifying",++ "succeeded",++ "failed",++ "cancelled"++ ]++ },++ "description": "The state changes delivered; the names of platform.task@1 `state`."++ }++ }++ },++ "description": "Where Actor tells the caller about this task's state changes (plan T17)."}},"examples": [@@@ -674,6 +715,20 @@"budget": {"per_task_usd": 0.05}++ },++ {++ "task": "Summarize today's top three posts on openvibe.news.",++ "mode": "cheapest",++ "webhooks": [++ {++ "url": "https://hooks.example.com/openvibe/actor",++ "events": [++ "succeeded",++ "failed",++ "cancelled"++ ]++ }++ ]}]},@@@ -1100,7 +1155,7 @@},"platform.task.v1": {"title": "Task",-- "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",++ "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.","$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.","type": "object","additionalProperties": false,@@@ -1372,6 +1427,11 @@}],"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."++ },++ "webhook_secret": {++ "type": "string",++ "pattern": "^whsec_[A-Za-z0-9_-]{43}$",++ "description": "The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of \"<t>.<raw body>\">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done."}},"allOf": [@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.AI API",-- "version": "0.132.0",-- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.","license": {"name": "MIT","identifier": "MIT"@@@ -3,8 +3,8 @@"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema","info": {"title": "OpenVibe.Community API",-- "version": "0.132.0",-- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.Inventory API",-- "version": "0.132.0",-- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",-- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",++ "version": "0.133.0",++ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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"@@@ -55975,7 +55975,7 @@ export type JobFrame =/** [email protected] (owner: network) *//**-- * platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.++ * platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.*/export type Task = {[k: string]: unknown | undefined;@@@ -56786,6 +56786,10 @@ export type Task = {*/detail: string;} | null;++ /**++ * The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of "<t>.<raw body>">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done.++ */++ webhook_secret?: string;};/** [email protected] (owner: events) */@@@ -58911,7 +58915,7 @@ export interface SpaceModerationActionPayload {/** [email protected] (owner: actor) *//**-- * actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.++ * actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.*/export interface ActorTaskCreateRequest {/**@@@ -58928,6 +58932,1613 @@ export interface ActorTaskCreateRequest {*/agent?: string;idempotency_key?: string;++ /**++ * Where Actor tells the caller about this task's state changes (plan T17).++ *++ * @minItems 1++ * @maxItems 8++ */++ webhooks?:++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ]++ | [++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ },++ {++ /**++ * The HTTPS endpoint Actor POSTs to.++ */++ url: string;++ /**++ * The state changes delivered; the names of platform.task@1 `state`.++ *++ * @minItems 1++ * @maxItems 6++ */++ events:++ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ]++ | [++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",++ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"++ ];++ }++ ];}/** [email protected] (owner: actor) */@@@ -58962,6 +60573,17 @@ export interface ActorTaskListResult {next: string | null;}++/** [email protected] (owner: actor) */++/**++ * actor.task-webhook@1: the body OpenVibe.Actor POSTs to a task's webhook (plan T17) when the task reaches a state the webhook asked for. TYPE is actor.task.state; DELIVERY_ID is stable across retries (dedupe on it); STATE is the state reached; TASK is platform.task@1 as it was at that moment, without webhook_secret. Headers: X-OpenVibe-Delivery-Id, X-OpenVibe-Task-Id, X-OpenVibe-Task-State, X-OpenVibe-Delivery-Attempt, X-OpenVibe-Timestamp and X-OpenVibe-Signature-V2 (HMAC-SHA256 of "<timestamp>.<raw body>" with the task's webhook_secret; openvibe-sdk/events verifyDeliveryV2 checks it and the ±300 s window). A 2xx answer is delivered; 410 Gone, or a URL the egress guard refuses at send time, ends the delivery at once; anything else is retried with backoff for about a day. Deliveries never delay or change the task.++ */++export interface ActorTaskWebhook {++ type: "actor.task.state";++ delivery_id: string;++ state: "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled";++ task: Task;++}++/** [email protected] (owner: actor) *//*** actor.agent-list-result@1: GET /api/v1/agents (capability actor.agent.read): every agent system Actor can route a task to. KIND is the backend class (ADR-044): openvibe-runtime (OpenVibe's own agent, acting through OpenVibe services), agent-platform (another platform's agent, called through its API), open-model (an open model on OpenVibe's own hardware), codes (coding work through OpenVibe.Codes), node and run (a person's machine or OpenVibe.Run). TRUST is ADR-046's class; private mode takes only first-party ones. CAN are the task classes and tools it takes (task:<class>, tool:<name>). RATE_CARD is the published price, revised by review and never written by a model (SOURCE says where it comes from, VERIFIED_AT when a person last checked it). AVAILABLE says whether it can take a task now and REASON why not.@@@ -6,7 +6,7 @@const crypto = require('crypto');const ALPHABET = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';--const PREFIX = { user: 'usr', guest: 'gst', app: 'app', mod: 'mod', agent: 'agt', node: 'nod', event: 'evt', media: 'med', project: 'prj', confirmation: 'cnf', job: 'job', task: 'tsk', watch: 'wch', observation: 'wco', check: 'ckr', subscription: 'sub', deploy: 'dpl', domain: 'dom', manifest: 'mfs', release: 'rel', site: 'sit', robot: 'rob', stream: 'std' };++const PREFIX = { user: 'usr', guest: 'gst', app: 'app', mod: 'mod', agent: 'agt', node: 'nod', event: 'evt', media: 'med', project: 'prj', confirmation: 'cnf', job: 'job', task: 'tsk', watch: 'wch', observation: 'wco', check: 'ckr', subscription: 'sub', deploy: 'dpl', domain: 'dom', manifest: 'mfs', release: 'rel', site: 'sit', robot: 'rob', stream: 'std', webhook_delivery: 'whd' };const SLUG_TYPES = new Set(['service', 'system']);const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;const SLUG_RE = /^[a-z][a-z0-9-]{1,39}$/;@@@ -5,7 +5,7 @@"status": "active","visibility": "public","sensitive": true,-- "description": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running.",++ "description": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running. A task may register webhooks: Actor POSTs actor.task-webhook@1 to each on the state changes it asked for, signed with a secret minted for the task and returned once, as webhook_secret, in the answer that created it.","inputSchema": "actor.task-create-request@1","outputSchema": "platform.task@1","permissions": [@@@ -1,6 +1,6 @@{"name": "openvibe-contracts",-- "version": "0.132.0",++ "version": "0.133.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,27 @@ All notable changes to `openvibe-contracts`. Releases are git tags (`vX.Y.Z`) th
@@ -4,6 +4,27 @@ 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.133.0 — 2026-10-10
+
+**Actor task webhooks** (plan T17). Additive; OpenVibe.Actor implements them with its pin to this release.
+
+- **`actor.task-create-request@1`:** gains `webhooks` (1 to 8 items, each an https `url` and the `events` to deliver, which
+ are the names of platform.task@1 `state`).
+- **Signing:** Actor signs each task's deliveries with a secret it mints for that task. `platform.task@1` gains
+ `webhook_secret` (`whsec_` and 43 characters), present only in the answer that created the task (and an idempotent
+ repeat), never in a read or a list. It is erased once the task has ended and its deliveries are done.
+- **New `actor.task-webhook@1`** (the delivery body): `{ type: "actor.task.state", delivery_id: "whd_…", state, task }`.
+ - `delivery_id` is stable across retries.
+ - `task` is platform.task@1 as it was then, without the secret.
+ - Signed exactly like an Events delivery (`X-OpenVibe-Timestamp`, `X-OpenVibe-Signature-V2`), so receivers check
+ it with openvibe-sdk/events `verifyDeliveryV2`.
+ - 2xx is delivered; 410 or a URL the egress guard refuses ends it; anything else is retried for about a day.
+- **Not accepted yet:** a project secret named by reference (`secret_ref`), since project secrets are not built. The
+ request schema leaves it out, so naming one is a 422.
+- `lib/ids.js` records `webhook_delivery: 'whd'`; the `actor.task.create` capability says what it now does.
+- **Fixtures:** a request with webhooks; invalid ones for plain http and `secret_ref`; a delivery; invalid deliveries
+ carrying the secret or with a bad delivery id.
+
## 0.132.0 — 2026-10-10
## 0.132.0 — 2026-10-10
**An Events position is an opaque cursor and nothing else** (ADR-042 decision 7, plan T7). `events.read-result@1` and
**An Events position is an opaque cursor and nothing else** (ADR-042 decision 7, plan T7). `events.read-result@1` and
@@ -2,7 +2,7 @@
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/actor/task-create-request.v1.json",
"$id": "https://openvibe.network/contracts/actor/task-create-request.v1.json",
"title": "ActorTaskCreateRequest",
"title": "ActorTaskCreateRequest",
- "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.",
+ "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.",
"type": "object",
"type": "object",
"additionalProperties": false,
"additionalProperties": false,
"required": [
"required": [
@@ -53,6 +53,47 @@
@@ -53,6 +53,47 @@
"minLength": 8,
"minLength": 8,
"maxLength": 128,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]+$"
"pattern": "^[A-Za-z0-9._:-]+$"
+ },
+ "webhooks": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 8,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "url",
+ "events"
+ ],
+ "properties": {
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 2000,
+ "pattern": "^https://",
+ "description": "The HTTPS endpoint Actor POSTs to."
+ },
+ "events": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 6,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "verifying",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "description": "The state changes delivered; the names of platform.task@1 `state`."
+ }
+ }
+ },
+ "description": "Where Actor tells the caller about this task's state changes (plan T17)."
}
}
},
},
"examples": [
"examples": [
@@ -62,6 +103,20 @@
@@ -62,6 +103,20 @@
"budget": {
"budget": {
"per_task_usd": 0.05
"per_task_usd": 0.05
}
}
+ },
+ {
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "mode": "cheapest",
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ }
+ ]
}
}
]
]
}
}
new file mode 100644
new file mode 100644
@@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/task-webhook.v1.json",
+ "title": "ActorTaskWebhook",
+ "description": "actor.task-webhook@1: the body OpenVibe.Actor POSTs to a task's webhook (plan T17) when the task reaches a state the webhook asked for. TYPE is actor.task.state; DELIVERY_ID is stable across retries (dedupe on it); STATE is the state reached; TASK is platform.task@1 as it was at that moment, without webhook_secret. Headers: X-OpenVibe-Delivery-Id, X-OpenVibe-Task-Id, X-OpenVibe-Task-State, X-OpenVibe-Delivery-Attempt, X-OpenVibe-Timestamp and X-OpenVibe-Signature-V2 (HMAC-SHA256 of \"<timestamp>.<raw body>\" with the task's webhook_secret; openvibe-sdk/events verifyDeliveryV2 checks it and the ±300 s window). A 2xx answer is delivered; 410 Gone, or a URL the egress guard refuses at send time, ends the delivery at once; anything else is retried with backoff for about a day. Deliveries never delay or change the task.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "delivery_id",
+ "state",
+ "task"
+ ],
+ "properties": {
+ "type": {
+ "const": "actor.task.state"
+ },
+ "delivery_id": {
+ "type": "string",
+ "pattern": "^whd_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "verifying",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "task": {
+ "$ref": "../platform/task.v1.json"
+ }
+ }
+}
@@ -6362,6 +6362,16 @@
@@ -6362,6 +6362,16 @@
"status": "active",
"status": "active",
"adr": "ADR-044"
"adr": "ADR-044"
},
},
+ {
+ "id": "actor.task-webhook",
+ "version": "1.0.0",
+ "owner": "actor",
+ "schema": "actor/task-webhook.v1.json",
+ "visibility": "public",
+ "compatibility": "backward",
+ "status": "active",
+ "adr": "ADR-044"
+ },
{
{
"id": "actor.agent-list-result",
"id": "actor.agent-list-result",
"version": "1.0.0",
"version": "1.0.0",
@@ -2,7 +2,7 @@
@@ -2,7 +2,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/platform/task.v1.json",
"$id": "https://openvibe.network/contracts/platform/task.v1.json",
"title": "Task",
"title": "Task",
- "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",
+ "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",
"$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.",
"$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.",
"type": "object",
"type": "object",
"additionalProperties": false,
"additionalProperties": false,
@@ -274,6 +274,11 @@
@@ -274,6 +274,11 @@
}
}
],
],
"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."
"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."
+ },
+ "webhook_secret": {
+ "type": "string",
+ "pattern": "^whsec_[A-Za-z0-9_-]{43}$",
+ "description": "The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of \"<t>.<raw body>\">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done."
}
}
},
},
"allOf": [
"allOf": [
new file mode 100644
new file mode 100644
@@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
+{
+ "task": "x",
+ "webhooks": [
+ {
+ "url": "http://hooks.example.com/x",
+ "events": [
+ "succeeded"
+ ]
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
+{
+ "task": "x",
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/x",
+ "events": [
+ "succeeded"
+ ],
+ "secret_ref": "HOOK_KEY"
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
+{
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ }
+ ]
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
+{
+ "type": "actor.task.state",
+ "delivery_id": "dlv_1",
+ "state": "failed",
+ "task": {
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "requester": {
+ "type": "user",
+ "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
+ },
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "mode": "cheapest",
+ "budget": {
+ "per_task_usd": 0.05,
+ "per_day_usd": 1
+ },
+ "state": "failed",
+ "created_at": "2026-10-10T22:00:00.000Z",
+ "finished_at": "2026-10-10T22:00:41.000Z",
+ "result": null,
+ "cost": {
+ "usd": 0.0021,
+ "free_allowance_used": 0.0021
+ },
+ "explanation": null,
+ "progress": null,
+ "cancel": null,
+ "error": {
+ "code": "actor.agents.exhausted",
+ "detail": "No agent finished this task with an answer that passed its check."
+ },
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed"
+ ]
+ }
+ ]
+ }
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
+{
+ "type": "actor.task.state",
+ "delivery_id": "whd_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "state": "failed",
+ "task": {
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "requester": {
+ "type": "user",
+ "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
+ },
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "mode": "cheapest",
+ "budget": {
+ "per_task_usd": 0.05,
+ "per_day_usd": 1
+ },
+ "state": "failed",
+ "created_at": "2026-10-10T22:00:00.000Z",
+ "finished_at": "2026-10-10T22:00:41.000Z",
+ "result": null,
+ "cost": {
+ "usd": 0.0021,
+ "free_allowance_used": 0.0021
+ },
+ "explanation": null,
+ "progress": null,
+ "cancel": null,
+ "error": {
+ "code": "actor.agents.exhausted",
+ "detail": "No agent finished this task with an answer that passed its check."
+ },
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed"
+ ]
+ }
+ ],
+ "webhook_secret": "whsec_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ },
+ "secret": "x"
+}
new file mode 100644
new file mode 100644
@@ -0,0 +1,42 @@
@@ -0,0 +1,42 @@
+{
+ "type": "actor.task.state",
+ "delivery_id": "whd_01JAB2C3D4E5F6G7H8J9K0MNPS",
+ "state": "failed",
+ "task": {
+ "id": "tsk_01JAB2C3D4E5F6G7H8J9K0MNPQ",
+ "requester": {
+ "type": "user",
+ "id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
+ },
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "mode": "cheapest",
+ "budget": {
+ "per_task_usd": 0.05,
+ "per_day_usd": 1
+ },
+ "state": "failed",
+ "created_at": "2026-10-10T22:00:00.000Z",
+ "finished_at": "2026-10-10T22:00:41.000Z",
+ "result": null,
+ "cost": {
+ "usd": 0.0021,
+ "free_allowance_used": 0.0021
+ },
+ "explanation": null,
+ "progress": null,
+ "cancel": null,
+ "error": {
+ "code": "actor.agents.exhausted",
+ "detail": "No agent finished this task with an answer that passed its check."
+ },
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed"
+ ]
+ }
+ ]
+ }
+}
@@ -66571,7 +66571,7 @@
@@ -66571,7 +66571,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/platform/task.v1.json",
"$id": "https://openvibe.network/contracts/platform/task.v1.json",
"title": "Task",
"title": "Task",
- "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",
+ "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",
"$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.",
"$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.",
"type": "object",
"type": "object",
"additionalProperties": false,
"additionalProperties": false,
@@ -66843,6 +66843,11 @@
@@ -66843,6 +66843,11 @@
}
}
],
],
"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."
"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."
+ },
+ "webhook_secret": {
+ "type": "string",
+ "pattern": "^whsec_[A-Za-z0-9_-]{43}$",
+ "description": "The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of \"<t>.<raw body>\">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done."
}
}
},
},
"allOf": [
"allOf": [
@@ -73228,7 +73233,7 @@
@@ -73228,7 +73233,7 @@
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://openvibe.network/contracts/actor/task-create-request.v1.json",
"$id": "https://openvibe.network/contracts/actor/task-create-request.v1.json",
"title": "ActorTaskCreateRequest",
"title": "ActorTaskCreateRequest",
- "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.",
+ "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.",
"type": "object",
"type": "object",
"additionalProperties": false,
"additionalProperties": false,
"required": [
"required": [
@@ -73279,6 +73284,47 @@
@@ -73279,6 +73284,47 @@
"minLength": 8,
"minLength": 8,
"maxLength": 128,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]+$"
"pattern": "^[A-Za-z0-9._:-]+$"
+ },
+ "webhooks": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 8,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "url",
+ "events"
+ ],
+ "properties": {
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 2000,
+ "pattern": "^https://",
+ "description": "The HTTPS endpoint Actor POSTs to."
+ },
+ "events": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 6,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "verifying",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "description": "The state changes delivered; the names of platform.task@1 `state`."
+ }
+ }
+ },
+ "description": "Where Actor tells the caller about this task's state changes (plan T17)."
}
}
},
},
"examples": [
"examples": [
@@ -73288,6 +73334,20 @@
@@ -73288,6 +73334,20 @@
"budget": {
"budget": {
"per_task_usd": 0.05
"per_task_usd": 0.05
}
}
+ },
+ {
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "mode": "cheapest",
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ }
+ ]
}
}
]
]
}
}
@@ -73440,6 +73500,48 @@
@@ -73440,6 +73500,48 @@
}
}
}
}
},
},
+ "actor.task-webhook": {
+ "version": "1.0.0",
+ "owner": "actor",
+ "status": "active",
+ "schema": {
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "$id": "https://openvibe.network/contracts/actor/task-webhook.v1.json",
+ "title": "ActorTaskWebhook",
+ "description": "actor.task-webhook@1: the body OpenVibe.Actor POSTs to a task's webhook (plan T17) when the task reaches a state the webhook asked for. TYPE is actor.task.state; DELIVERY_ID is stable across retries (dedupe on it); STATE is the state reached; TASK is platform.task@1 as it was at that moment, without webhook_secret. Headers: X-OpenVibe-Delivery-Id, X-OpenVibe-Task-Id, X-OpenVibe-Task-State, X-OpenVibe-Delivery-Attempt, X-OpenVibe-Timestamp and X-OpenVibe-Signature-V2 (HMAC-SHA256 of \"<timestamp>.<raw body>\" with the task's webhook_secret; openvibe-sdk/events verifyDeliveryV2 checks it and the ±300 s window). A 2xx answer is delivered; 410 Gone, or a URL the egress guard refuses at send time, ends the delivery at once; anything else is retried with backoff for about a day. Deliveries never delay or change the task.",
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "type",
+ "delivery_id",
+ "state",
+ "task"
+ ],
+ "properties": {
+ "type": {
+ "const": "actor.task.state"
+ },
+ "delivery_id": {
+ "type": "string",
+ "pattern": "^whd_[0-9A-HJKMNP-TV-Z]{26}$"
+ },
+ "state": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "verifying",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "task": {
+ "$ref": "../platform/task.v1.json"
+ }
+ }
+ }
+ },
"actor.agent-list-result": {
"actor.agent-list-result": {
"version": "1.0.0",
"version": "1.0.0",
"owner": "actor",
"owner": "actor",
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Actor API",
"title": "OpenVibe.Actor API",
- "version": "0.132.0",
- "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Actor as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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"
@@ -258,7 +258,7 @@
@@ -258,7 +258,7 @@
"post": {
"post": {
"operationId": "post_api_v1_tasks",
"operationId": "post_api_v1_tasks",
"summary": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget.",
"summary": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget.",
- "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running.",
+ "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running. A task may register webhooks: Actor POSTs actor.task-webhook@1 to each on the state changes it asked for, signed with a secret minted for the task and returned once, as webhook_secret, in the answer that created it.",
"tags": [
"tags": [
"actor.task"
"actor.task"
],
],
@@ -370,7 +370,7 @@
@@ -370,7 +370,7 @@
"post": {
"post": {
"operationId": "post_api_v1_tasks_id_cancel",
"operationId": "post_api_v1_tasks_id_cancel",
"summary": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget.",
"summary": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget.",
- "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running.",
+ "description": "**actor.task.create** (public): Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running. A task may register webhooks: Actor POSTs actor.task-webhook@1 to each on the state changes it asked for, signed with a secret minted for the task and returned once, as webhook_secret, in the answer that created it.",
"tags": [
"tags": [
"actor.task"
"actor.task"
],
],
@@ -614,7 +614,7 @@
@@ -614,7 +614,7 @@
},
},
"actor.task-create-request.v1": {
"actor.task-create-request.v1": {
"title": "ActorTaskCreateRequest",
"title": "ActorTaskCreateRequest",
- "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.",
+ "description": "actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.",
"type": "object",
"type": "object",
"additionalProperties": false,
"additionalProperties": false,
"required": [
"required": [
@@ -665,6 +665,47 @@
@@ -665,6 +665,47 @@
"minLength": 8,
"minLength": 8,
"maxLength": 128,
"maxLength": 128,
"pattern": "^[A-Za-z0-9._:-]+$"
"pattern": "^[A-Za-z0-9._:-]+$"
+ },
+ "webhooks": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 8,
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "required": [
+ "url",
+ "events"
+ ],
+ "properties": {
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "maxLength": 2000,
+ "pattern": "^https://",
+ "description": "The HTTPS endpoint Actor POSTs to."
+ },
+ "events": {
+ "type": "array",
+ "minItems": 1,
+ "maxItems": 6,
+ "uniqueItems": true,
+ "items": {
+ "type": "string",
+ "enum": [
+ "queued",
+ "running",
+ "verifying",
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ },
+ "description": "The state changes delivered; the names of platform.task@1 `state`."
+ }
+ }
+ },
+ "description": "Where Actor tells the caller about this task's state changes (plan T17)."
}
}
},
},
"examples": [
"examples": [
@@ -674,6 +715,20 @@
@@ -674,6 +715,20 @@
"budget": {
"budget": {
"per_task_usd": 0.05
"per_task_usd": 0.05
}
}
+ },
+ {
+ "task": "Summarize today's top three posts on openvibe.news.",
+ "mode": "cheapest",
+ "webhooks": [
+ {
+ "url": "https://hooks.example.com/openvibe/actor",
+ "events": [
+ "succeeded",
+ "failed",
+ "cancelled"
+ ]
+ }
+ ]
}
}
]
]
},
},
@@ -1100,7 +1155,7 @@
@@ -1100,7 +1155,7 @@
},
},
"platform.task.v1": {
"platform.task.v1": {
"title": "Task",
"title": "Task",
- "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",
+ "description": "platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.",
"$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.",
"$comment": "Additive optional fields may extend this v1 contract. It is the task resource, not a device frame: Actor's link is HTTP/SSE where Run's is the Node WebSocket.",
"type": "object",
"type": "object",
"additionalProperties": false,
"additionalProperties": false,
@@ -1372,6 +1427,11 @@
@@ -1372,6 +1427,11 @@
}
}
],
],
"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."
"description": "Why the task failed, once it has; null otherwise. Never a credential and never raw provider output."
+ },
+ "webhook_secret": {
+ "type": "string",
+ "pattern": "^whsec_[A-Za-z0-9_-]{43}$",
+ "description": "The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of \"<t>.<raw body>\">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done."
}
}
},
},
"allOf": [
"allOf": [
@@ -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.132.0",
- "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.AI as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Billing as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Blog as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Bot as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Chat as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
"license": {
"license": {
"name": "MIT",
"name": "MIT",
"identifier": "MIT"
"identifier": "MIT"
@@ -3,8 +3,8 @@
@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"info": {
"title": "OpenVibe.Community API",
"title": "OpenVibe.Community API",
- "version": "0.132.0",
- "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Community as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Coupons as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Deals as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Events as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Food as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Games as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Host as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.Inventory API",
"title": "OpenVibe.Inventory API",
- "version": "0.132.0",
- "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Inventory as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Live as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Media as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Network as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.News as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenRestream as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Reviews as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Run as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Search as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Services as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Sources as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Tips as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Tools as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Trade as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.VIP as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Watch as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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.132.0",
- "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.132.0): each operation lists the capabilities it performs; a token for the service's audience must carry one of them unless the route is open. Generated by openvibe-contracts lib/openapi.js; do not edit.",
+ "version": "0.133.0",
+ "description": "Routes of OpenVibe.Wiki as the OpenVibe contracts describe them (openvibe-contracts 0.133.0): each operation lists the capabilities it performs; a token for the 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"
@@ -55975,7 +55975,7 @@ export type JobFrame =
@@ -55975,7 +55975,7 @@ export type JobFrame =
/** [email protected] (owner: network) */
/** [email protected] (owner: network) */
/**
/**
- * platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to. Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.
+ * platform.task@1 (plan T17, ADR-044): one task at OpenVibe.Actor's task router. POST /api/v1/tasks (actor.task.create) creates it from a plain-language `task` plus a `mode` and a `budget`; the router mints `id`, sets `state` and `created_at`, picks a backend from the registered agent systems, runs the task, verifies the result, escalates or fails over, and answers with `result`, `cost` and `explanation`. GET /api/v1/tasks/{id} (actor.task.read) reads the same resource. Progress streams as server-sent events from `progress.stream_url` (actor.task-event@1; the task's own counter in `progress.last_seq`); `cancel` records that a cancel was requested (POST /api/v1/tasks/{id}/cancel), `error` says why a task failed, and `webhooks` are the registered endpoints the router delivers each state change to (actor.task-webhook@1, signed with `webhook_secret`, which only the creating answer carries). Owned by `network` like every other platform.* contract and implemented by OpenVibe.Actor (manifests/services/actor.json). This v1 contract may grow optional fields.
*/
*/
export type Task = {
export type Task = {
[k: string]: unknown | undefined;
[k: string]: unknown | undefined;
@@ -56786,6 +56786,10 @@ export type Task = {
@@ -56786,6 +56786,10 @@ export type Task = {
*/
*/
detail: string;
detail: string;
} | null;
} | null;
+ /**
+ * The secret every webhook delivery of this task is signed with (X-OpenVibe-Signature-V2: t=<unix seconds>,v2=<hex HMAC-SHA256 of "<t>.<raw body>">, verified by openvibe-sdk/events verifyDeliveryV2). Present only in the answer that created the task (and an idempotent repeat of it), never in a read or a list; erased once the task has ended and its deliveries are done.
+ */
+ webhook_secret?: string;
};
};
/** [email protected] (owner: events) */
/** [email protected] (owner: events) */
@@ -58911,7 +58915,7 @@ export interface SpaceModerationActionPayload {
@@ -58911,7 +58915,7 @@ export interface SpaceModerationActionPayload {
/** [email protected] (owner: actor) */
/** [email protected] (owner: actor) */
/**
/**
- * actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict.
+ * actor.task-create-request@1: the body of POST /api/v1/tasks on OpenVibe.Actor (capability actor.task.create), the creation subset of platform.task@1. TASK is the instruction in plain words. MODE is the planner objective (default balanced). BUDGET caps what this task may cost (per_task_usd) and what the caller's tasks may cost in one UTC day (per_day_usd); either may be left out for the person's free-allowance defaults, and a value above the person's tier is refused 422 actor.budget.over_tier, never silently lowered. AGENT pins one agent system by its id from GET /api/v1/agents (routing still checks that it can take the task). IDEMPOTENCY_KEY: a repeat from the same requester within 24 h with an identical body answers the first task (200), with a different body 409 actor.idempotency.conflict. WEBHOOKS (at most 8): each an https URL and the state changes to deliver there (the names of platform.task@1 `state`). Actor signs every delivery with a secret it mints for the task, returned once as `webhook_secret` in the answer that created it (and in an idempotent repeat), and POSTs actor.task-webhook@1 through its egress guard: public addresses only, ports 443 or 8443, no credentials in the URL, never a redirect. A URL that cannot be delivered to is refused 422 actor.webhook.refused. A project secret named by reference (platform.task@1 `secret_ref`) is not accepted yet.
*/
*/
export interface ActorTaskCreateRequest {
export interface ActorTaskCreateRequest {
/**
/**
@@ -58928,6 +58932,1613 @@ export interface ActorTaskCreateRequest {
@@ -58928,6 +58932,1613 @@ export interface ActorTaskCreateRequest {
*/
*/
agent?: string;
agent?: string;
idempotency_key?: string;
idempotency_key?: string;
+ /**
+ * Where Actor tells the caller about this task's state changes (plan T17).
+ *
+ * @minItems 1
+ * @maxItems 8
+ */
+ webhooks?:
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ]
+ | [
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ },
+ {
+ /**
+ * The HTTPS endpoint Actor POSTs to.
+ */
+ url: string;
+ /**
+ * The state changes delivered; the names of platform.task@1 `state`.
+ *
+ * @minItems 1
+ * @maxItems 6
+ */
+ events:
+ | ["queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ]
+ | [
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled",
+ "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled"
+ ];
+ }
+ ];
}
}
/** [email protected] (owner: actor) */
/** [email protected] (owner: actor) */
@@ -58962,6 +60573,17 @@ export interface ActorTaskListResult {
@@ -58962,6 +60573,17 @@ export interface ActorTaskListResult {
next: string | null;
next: string | null;
}
}
+/** [email protected] (owner: actor) */
+/**
+ * actor.task-webhook@1: the body OpenVibe.Actor POSTs to a task's webhook (plan T17) when the task reaches a state the webhook asked for. TYPE is actor.task.state; DELIVERY_ID is stable across retries (dedupe on it); STATE is the state reached; TASK is platform.task@1 as it was at that moment, without webhook_secret. Headers: X-OpenVibe-Delivery-Id, X-OpenVibe-Task-Id, X-OpenVibe-Task-State, X-OpenVibe-Delivery-Attempt, X-OpenVibe-Timestamp and X-OpenVibe-Signature-V2 (HMAC-SHA256 of "<timestamp>.<raw body>" with the task's webhook_secret; openvibe-sdk/events verifyDeliveryV2 checks it and the ±300 s window). A 2xx answer is delivered; 410 Gone, or a URL the egress guard refuses at send time, ends the delivery at once; anything else is retried with backoff for about a day. Deliveries never delay or change the task.
+ */
+export interface ActorTaskWebhook {
+ type: "actor.task.state";
+ delivery_id: string;
+ state: "queued" | "running" | "verifying" | "succeeded" | "failed" | "cancelled";
+ task: Task;
+}
+
/** [email protected] (owner: actor) */
/** [email protected] (owner: actor) */
/**
/**
* actor.agent-list-result@1: GET /api/v1/agents (capability actor.agent.read): every agent system Actor can route a task to. KIND is the backend class (ADR-044): openvibe-runtime (OpenVibe's own agent, acting through OpenVibe services), agent-platform (another platform's agent, called through its API), open-model (an open model on OpenVibe's own hardware), codes (coding work through OpenVibe.Codes), node and run (a person's machine or OpenVibe.Run). TRUST is ADR-046's class; private mode takes only first-party ones. CAN are the task classes and tools it takes (task:<class>, tool:<name>). RATE_CARD is the published price, revised by review and never written by a model (SOURCE says where it comes from, VERIFIED_AT when a person last checked it). AVAILABLE says whether it can take a task now and REASON why not.
* actor.agent-list-result@1: GET /api/v1/agents (capability actor.agent.read): every agent system Actor can route a task to. KIND is the backend class (ADR-044): openvibe-runtime (OpenVibe's own agent, acting through OpenVibe services), agent-platform (another platform's agent, called through its API), open-model (an open model on OpenVibe's own hardware), codes (coding work through OpenVibe.Codes), node and run (a person's machine or OpenVibe.Run). TRUST is ADR-046's class; private mode takes only first-party ones. CAN are the task classes and tools it takes (task:<class>, tool:<name>). RATE_CARD is the published price, revised by review and never written by a model (SOURCE says where it comes from, VERIFIED_AT when a person last checked it). AVAILABLE says whether it can take a task now and REASON why not.
@@ -6,7 +6,7 @@
@@ -6,7 +6,7 @@
const crypto = require('crypto');
const crypto = require('crypto');
const ALPHABET = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
const ALPHABET = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
-const PREFIX = { user: 'usr', guest: 'gst', app: 'app', mod: 'mod', agent: 'agt', node: 'nod', event: 'evt', media: 'med', project: 'prj', confirmation: 'cnf', job: 'job', task: 'tsk', watch: 'wch', observation: 'wco', check: 'ckr', subscription: 'sub', deploy: 'dpl', domain: 'dom', manifest: 'mfs', release: 'rel', site: 'sit', robot: 'rob', stream: 'std' };
+const PREFIX = { user: 'usr', guest: 'gst', app: 'app', mod: 'mod', agent: 'agt', node: 'nod', event: 'evt', media: 'med', project: 'prj', confirmation: 'cnf', job: 'job', task: 'tsk', watch: 'wch', observation: 'wco', check: 'ckr', subscription: 'sub', deploy: 'dpl', domain: 'dom', manifest: 'mfs', release: 'rel', site: 'sit', robot: 'rob', stream: 'std', webhook_delivery: 'whd' };
const SLUG_TYPES = new Set(['service', 'system']);
const SLUG_TYPES = new Set(['service', 'system']);
const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;
const ULID_RE = /^[0-9A-HJKMNP-TV-Z]{26}$/;
const SLUG_RE = /^[a-z][a-z0-9-]{1,39}$/;
const SLUG_RE = /^[a-z][a-z0-9-]{1,39}$/;
@@ -5,7 +5,7 @@
@@ -5,7 +5,7 @@
"status": "active",
"status": "active",
"visibility": "public",
"visibility": "public",
"sensitive": true,
"sensitive": true,
- "description": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running.",
+ "description": "Give OpenVibe.Actor a task: POST /api/v1/tasks with the task in plain words, a mode (cheapest, balanced, best, fastest, private) and a budget. Actor picks the agent system for it with openvibe-sdk/placement, runs it, has a second model family check the result, and records the result, the cost to the cent and the explanation on the task (platform.task@1, answered 201 with state queued). POST /api/v1/tasks/:id/cancel stops a task that has not ended. A person's tasks are theirs; a token that names a project puts the task in that project. Each person has a daily free allowance; a task whose cheapest eligible agent would cost more than its budget fails with actor.budget.exceeded instead of running. A task may register webhooks: Actor POSTs actor.task-webhook@1 to each on the state changes it asked for, signed with a secret minted for the task and returned once, as webhook_secret, in the answer that created it.",
"inputSchema": "actor.task-create-request@1",
"inputSchema": "actor.task-create-request@1",
"outputSchema": "platform.task@1",
"outputSchema": "platform.task@1",
"permissions": [
"permissions": [
@@ -1,6 +1,6 @@
@@ -1,6 +1,6 @@
{
{
"name": "openvibe-contracts",
"name": "openvibe-contracts",
- "version": "0.132.0",
+ "version": "0.133.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",