openvibers/openvibe.contracts Commits

Contracts 0.133.0: Actor task webhooks (signed per task, actor.task-webhook@1) (#86)

OP OpenVibers committed 10 Oct 2026 · 14da43d515 · 46 files, +2149 −73

Plan T17: Actor task webhooks, the Contracts half. Additive; OpenVibe.Actor implements them with its pin to this release (next PR).

- **`actor.task-create-request@1`** gains `webhooks`: 1 to 8 items, each an https `url` and the `events` to deliver (platform.task@1 state names).
- **Signing:**
  - `platform.task@1` already listed `webhooks`, with a `secret_ref` naming a *project* secret. Project secrets do not exist, and a person's task has no project.
  - So Actor mints a secret per task: `platform.task@1` gains `webhook_secret` (`whsec_` and 43 characters).
  - It appears only in the answer that created the task (and an idempotent repeat), never in a read or a list, and it is erased once the task has ended and its deliveries are done.
  - The request schema leaves `secret_ref` out, so naming one is a 422 until project secrets exist.
- **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 the task 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.
- `lib/ids.js`: `webhook_delivery: 'whd'`. The `actor.task.create` capability describes webhooks.
- **Fixtures:**
  - valid: a request with webhooks, a delivery;
  - invalid requests: plain http, `secret_ref`;
  - invalid deliveries: one carrying the secret, one with a bad delivery id.

`node test/run.js`: 18,408 checks passed; `compat.js v0.132.0`: no breaking changes; `generated/` is up to date.

Changes

ddiff --git a/CHANGELOG.md b/CHANGELOG.md
iindex 4358ae38..2ea4f093 100644
---- a/CHANGELOG.md
++++ b/CHANGELOG.md
@@@ -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,
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
ddiff --git a/contracts/actor/task-create-request.v1.json b/contracts/actor/task-create-request.v1.json
iindex fc02ff7d..1303478c 100644
---- a/contracts/actor/task-create-request.v1.json
++++ b/contracts/actor/task-create-request.v1.json
@@@ -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"
++ ]
++ }
++ ]
}
]
}
ddiff --git a/contracts/actor/task-webhook.v1.json b/contracts/actor/task-webhook.v1.json
nnew file mode 100644
iindex 00000000..e9d0b62b
---- /dev/null
++++ b/contracts/actor/task-webhook.v1.json
@@@ -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"
++ }
++ }
++}
ddiff --git a/contracts/catalog.json b/contracts/catalog.json
iindex 1dea9681..92ec7cf2 100644
---- a/contracts/catalog.json
++++ b/contracts/catalog.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",
ddiff --git a/contracts/platform/task.v1.json b/contracts/platform/task.v1.json
iindex 173d1a59..0430c444 100644
---- a/contracts/platform/task.v1.json
++++ b/contracts/platform/task.v1.json
@@@ -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": [
ddiff --git a/fixtures/actor.task-create-request/invalid/webhook-http.json b/fixtures/actor.task-create-request/invalid/webhook-http.json
nnew file mode 100644
iindex 00000000..fc260f62
---- /dev/null
++++ b/fixtures/actor.task-create-request/invalid/webhook-http.json
@@@ -0,0 +1,11 @@
++{
++ "task": "x",
++ "webhooks": [
++ {
++ "url": "http://hooks.example.com/x",
++ "events": [
++ "succeeded"
++ ]
++ }
++ ]
++}
ddiff --git a/fixtures/actor.task-create-request/invalid/webhook-secret-ref.json b/fixtures/actor.task-create-request/invalid/webhook-secret-ref.json
nnew file mode 100644
iindex 00000000..a208d1fb
---- /dev/null
++++ b/fixtures/actor.task-create-request/invalid/webhook-secret-ref.json
@@@ -0,0 +1,12 @@
++{
++ "task": "x",
++ "webhooks": [
++ {
++ "url": "https://hooks.example.com/x",
++ "events": [
++ "succeeded"
++ ],
++ "secret_ref": "HOOK_KEY"
++ }
++ ]
++}
ddiff --git a/fixtures/actor.task-create-request/valid/with-webhooks.json b/fixtures/actor.task-create-request/valid/with-webhooks.json
nnew file mode 100644
iindex 00000000..03f6e2cb
---- /dev/null
++++ b/fixtures/actor.task-create-request/valid/with-webhooks.json
@@@ -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"
++ ]
++ }
++ ]
++}
ddiff --git a/fixtures/actor.task-webhook/invalid/bad-delivery-id.json b/fixtures/actor.task-webhook/invalid/bad-delivery-id.json
nnew file mode 100644
iindex 00000000..c9a824ab
---- /dev/null
++++ b/fixtures/actor.task-webhook/invalid/bad-delivery-id.json
@@@ -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"
++ ]
++ }
++ ]
++ }
++}
ddiff --git a/fixtures/actor.task-webhook/invalid/carries-secret.json b/fixtures/actor.task-webhook/invalid/carries-secret.json
nnew file mode 100644
iindex 00000000..6ee30c6f
---- /dev/null
++++ b/fixtures/actor.task-webhook/invalid/carries-secret.json
@@@ -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"
++}
ddiff --git a/fixtures/actor.task-webhook/valid/failed.json b/fixtures/actor.task-webhook/valid/failed.json
nnew file mode 100644
iindex 00000000..797b920b
---- /dev/null
++++ b/fixtures/actor.task-webhook/valid/failed.json
@@@ -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"
++ ]
++ }
++ ]
++ }
++}
ddiff --git a/generated/json-schema/bundle.json b/generated/json-schema/bundle.json
iindex b70170ee..769b7a56 100644
---- a/generated/json-schema/bundle.json
++++ b/generated/json-schema/bundle.json
@@@ -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",
ddiff --git a/generated/openapi/actor.json b/generated/openapi/actor.json
iindex b26935b3..47f28fb5 100644
---- a/generated/openapi/actor.json
++++ b/generated/openapi/actor.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Actor API",
-- "version": "0.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": [
ddiff --git a/generated/openapi/ai.json b/generated/openapi/ai.json
iindex 1f5aa23e..a83261e5 100644
---- a/generated/openapi/ai.json
++++ b/generated/openapi/ai.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.AI API",
-- "version": "0.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"
ddiff --git a/generated/openapi/billing.json b/generated/openapi/billing.json
iindex 3ffef4ee..2ab5ff8d 100644
---- a/generated/openapi/billing.json
++++ b/generated/openapi/billing.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Billing API",
-- "version": "0.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"
ddiff --git a/generated/openapi/blog.json b/generated/openapi/blog.json
iindex aadae310..c2c536ed 100644
---- a/generated/openapi/blog.json
++++ b/generated/openapi/blog.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Blog API",
-- "version": "0.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"
ddiff --git a/generated/openapi/bot.json b/generated/openapi/bot.json
iindex 25203458..62992ad0 100644
---- a/generated/openapi/bot.json
++++ b/generated/openapi/bot.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Bot API",
-- "version": "0.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"
ddiff --git a/generated/openapi/chat.json b/generated/openapi/chat.json
iindex 01678780..201df290 100644
---- a/generated/openapi/chat.json
++++ b/generated/openapi/chat.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Chat API",
-- "version": "0.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"
ddiff --git a/generated/openapi/community.json b/generated/openapi/community.json
iindex 1f643aef..55c69588 100644
---- a/generated/openapi/community.json
++++ b/generated/openapi/community.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Community API",
-- "version": "0.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"
ddiff --git a/generated/openapi/coupons.json b/generated/openapi/coupons.json
iindex 1da220bb..70d2369b 100644
---- a/generated/openapi/coupons.json
++++ b/generated/openapi/coupons.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Coupons API",
-- "version": "0.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"
ddiff --git a/generated/openapi/deals.json b/generated/openapi/deals.json
iindex d66b359c..ddf38a88 100644
---- a/generated/openapi/deals.json
++++ b/generated/openapi/deals.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Deals API",
-- "version": "0.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"
ddiff --git a/generated/openapi/events.json b/generated/openapi/events.json
iindex d3583787..b1309d8e 100644
---- a/generated/openapi/events.json
++++ b/generated/openapi/events.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Events API",
-- "version": "0.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"
ddiff --git a/generated/openapi/food.json b/generated/openapi/food.json
iindex 31034251..18e03745 100644
---- a/generated/openapi/food.json
++++ b/generated/openapi/food.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Food API",
-- "version": "0.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"
ddiff --git a/generated/openapi/games.json b/generated/openapi/games.json
iindex abc3352b..2a97a528 100644
---- a/generated/openapi/games.json
++++ b/generated/openapi/games.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Games API",
-- "version": "0.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"
ddiff --git a/generated/openapi/host.json b/generated/openapi/host.json
iindex cb353c0f..aab907e8 100644
---- a/generated/openapi/host.json
++++ b/generated/openapi/host.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Host API",
-- "version": "0.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"
ddiff --git a/generated/openapi/inventory.json b/generated/openapi/inventory.json
iindex 204ee61b..19a68a29 100644
---- a/generated/openapi/inventory.json
++++ b/generated/openapi/inventory.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Inventory API",
-- "version": "0.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"
ddiff --git a/generated/openapi/live.json b/generated/openapi/live.json
iindex f23cbbf0..19ba9266 100644
---- a/generated/openapi/live.json
++++ b/generated/openapi/live.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Live API",
-- "version": "0.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"
ddiff --git a/generated/openapi/media.json b/generated/openapi/media.json
iindex 45e913d4..d2f03c39 100644
---- a/generated/openapi/media.json
++++ b/generated/openapi/media.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Media API",
-- "version": "0.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"
ddiff --git a/generated/openapi/network.json b/generated/openapi/network.json
iindex 94287b8d..926a8de2 100644
---- a/generated/openapi/network.json
++++ b/generated/openapi/network.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Network API",
-- "version": "0.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"
ddiff --git a/generated/openapi/news.json b/generated/openapi/news.json
iindex 7d64672c..3a828163 100644
---- a/generated/openapi/news.json
++++ b/generated/openapi/news.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.News API",
-- "version": "0.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"
ddiff --git a/generated/openapi/openre.json b/generated/openapi/openre.json
iindex 22857bbe..15b5d936 100644
---- a/generated/openapi/openre.json
++++ b/generated/openapi/openre.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenRestream API",
-- "version": "0.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"
ddiff --git a/generated/openapi/reviews.json b/generated/openapi/reviews.json
iindex b7656eb7..79151e13 100644
---- a/generated/openapi/reviews.json
++++ b/generated/openapi/reviews.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Reviews API",
-- "version": "0.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"
ddiff --git a/generated/openapi/run.json b/generated/openapi/run.json
iindex a1ccf18f..2b0926c5 100644
---- a/generated/openapi/run.json
++++ b/generated/openapi/run.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Run API",
-- "version": "0.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"
ddiff --git a/generated/openapi/search.json b/generated/openapi/search.json
iindex 3c8917c2..74052ebb 100644
---- a/generated/openapi/search.json
++++ b/generated/openapi/search.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Search API",
-- "version": "0.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"
ddiff --git a/generated/openapi/services.json b/generated/openapi/services.json
iindex bc035362..d34ac391 100644
---- a/generated/openapi/services.json
++++ b/generated/openapi/services.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Services API",
-- "version": "0.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"
ddiff --git a/generated/openapi/sources.json b/generated/openapi/sources.json
iindex c7f65730..6c5e951e 100644
---- a/generated/openapi/sources.json
++++ b/generated/openapi/sources.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Sources API",
-- "version": "0.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"
ddiff --git a/generated/openapi/tips.json b/generated/openapi/tips.json
iindex cceec1ba..813b6e00 100644
---- a/generated/openapi/tips.json
++++ b/generated/openapi/tips.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tips API",
-- "version": "0.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"
ddiff --git a/generated/openapi/tools.json b/generated/openapi/tools.json
iindex 1a9ff2e0..b1fc4785 100644
---- a/generated/openapi/tools.json
++++ b/generated/openapi/tools.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Tools API",
-- "version": "0.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"
ddiff --git a/generated/openapi/trade.json b/generated/openapi/trade.json
iindex d05e42f9..e815ab9a 100644
---- a/generated/openapi/trade.json
++++ b/generated/openapi/trade.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Trade API",
-- "version": "0.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"
ddiff --git a/generated/openapi/vip.json b/generated/openapi/vip.json
iindex 9096a40e..0672299f 100644
---- a/generated/openapi/vip.json
++++ b/generated/openapi/vip.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.VIP API",
-- "version": "0.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"
ddiff --git a/generated/openapi/watch.json b/generated/openapi/watch.json
iindex 00ead42c..9baeb0bb 100644
---- a/generated/openapi/watch.json
++++ b/generated/openapi/watch.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Watch API",
-- "version": "0.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"
ddiff --git a/generated/openapi/wiki.json b/generated/openapi/wiki.json
iindex 4317594e..c3c6fef7 100644
---- a/generated/openapi/wiki.json
++++ b/generated/openapi/wiki.json
@@@ -3,8 +3,8 @@
"jsonSchemaDialect": "https://json-schema.org/draft/2020-12/schema",
"info": {
"title": "OpenVibe.Wiki API",
-- "version": "0.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"
ddiff --git a/generated/typescript/index.d.ts b/generated/typescript/index.d.ts
iindex ed610877..278b8852 100644
---- a/generated/typescript/index.d.ts
++++ b/generated/typescript/index.d.ts
@@@ -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.
ddiff --git a/lib/ids.js b/lib/ids.js
iindex 4a2e6004..d842ea8e 100644
---- a/lib/ids.js
++++ b/lib/ids.js
@@@ -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}$/;
ddiff --git a/manifests/capabilities/actor.task.create.json b/manifests/capabilities/actor.task.create.json
iindex 6bcee119..7245befb 100644
---- a/manifests/capabilities/actor.task.create.json
++++ b/manifests/capabilities/actor.task.create.json
@@@ -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": [
ddiff --git a/package.json b/package.json
iindex 06bc4e38..b5ab15e3 100644
---- a/package.json
++++ b/package.json
@@@ -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",