diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f4bbcb..5232cef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [v0.33.2] - 2026-10-01 + +### Changed + +- **The server is moving into `Pipelex/pipelex`**: from the next release, the server ships from the pipelex repository's `api/` directory together with the pipelex library and under its version number, so the next `pipelex/pipelex-api` image tag is a pipelex version; the image name, its port and its `/root/.pipelex` mount do not change, and this repository will be archived once the move lands. + +### Fixed + +- **The `callback_urls` description says what a completion webhook carries**: the OpenAPI description and the run docs said the runner posts the run's result to each callback URL; they now say the body is a completion notice (`pipeline_run_id`, `state` with its legacy `status` alias, the `result_url` storage key prefix and `error`), and that the results themselves stay in storage under that prefix. The description also says that the `X-Completion-Signature` header signs the run id, not the body. + ## [v0.33.1] - 2026-09-30 ### Fixed diff --git a/README.md b/README.md index 28f541b..fa60ce9 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ The official REST API server for building and executing Pipelex pipelines. Deplo --- +> [!IMPORTANT] +> **This server is moving into [`Pipelex/pipelex`](https://github.com/Pipelex/pipelex).** It will live there as the repository's `api/` directory and be released together with the pipelex library, under the library's version number, so the next tag of the `pipelex/pipelex-api` image will be a pipelex version rather than the next `0.33.x`. The image keeps its name, its port and its `/root/.pipelex` configuration mount. This repository takes no new changes and will be archived once the move lands; please open new issues on `Pipelex/pipelex`. + # 📑 Table of Contents - [Introduction](#introduction) diff --git a/api/schemas/models.py b/api/schemas/models.py index 0f8d12c..5e275ed 100644 --- a/api/schemas/models.py +++ b/api/schemas/models.py @@ -431,8 +431,11 @@ class PipelexApiStartRequest(StartRequest): default=None, description=( "PIPELEX-API EXTENSION (not part of the MTHDS Protocol) — completion webhooks. " - "When the run finishes, the runner POSTs the RunResult to each URL, HMAC-SHA256-signed " - "via the X-Completion-Signature header. http/https only; private, loopback, link-local " + "When the run finishes, the runner POSTs a completion notice to each URL, with an " + "X-Completion-Signature header holding the HMAC-SHA256 of the run id (not of the body). " + "The body carries `pipeline_run_id`, `state` (with the legacy `status` alias), `result_url` " + "(the storage key prefix of the stored results, when results were stored) and `error` on " + "failure; it does not carry the run's output. http/https only; private, loopback, link-local " "and cloud-metadata hosts are rejected." ), ) diff --git a/docs/index.md b/docs/index.md index f9c0f29..44c3229 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1,8 @@ # Pipelex API Documentation +!!! important "This server is moving into [`Pipelex/pipelex`](https://github.com/Pipelex/pipelex)" + It will live there as the repository's `api/` directory and be released together with the pipelex library, under the library's version number, so the next tag of the `pipelex/pipelex-api` image will be a pipelex version rather than the next `0.33.x`. The image keeps its name, its port and its `/root/.pipelex` configuration mount. This repository takes no new changes and will be archived once the move lands; please open new issues on `Pipelex/pipelex`. + Welcome to the Pipelex API documentation. The API provides programmatic access to the Pipelex system. ## The three-layer contract diff --git a/docs/openapi/pipelex-api.openapi.yaml b/docs/openapi/pipelex-api.openapi.yaml index 7a1b1d7..abd8cf6 100644 --- a/docs/openapi/pipelex-api.openapi.yaml +++ b/docs/openapi/pipelex-api.openapi.yaml @@ -11,7 +11,7 @@ info: license: name: Elastic License 2.0 identifier: Elastic-2.0 - version: 0.33.1 + version: 0.33.2 paths: /health: get: @@ -746,8 +746,11 @@ paths: - type: 'null' title: Callback Urls description: PIPELEX-API EXTENSION (not part of the MTHDS Protocol) — completion webhooks. When the run - finishes, the runner POSTs the RunResult to each URL, HMAC-SHA256-signed via the X-Completion-Signature - header. http/https only; private, loopback, link-local and cloud-metadata hosts are rejected. + finishes, the runner POSTs a completion notice to each URL, with an X-Completion-Signature header holding + the HMAC-SHA256 of the run id (not of the body). The body carries `pipeline_run_id`, `state` (with the + legacy `status` alias), `result_url` (the storage key prefix of the stored results, when results were + stored) and `error` on failure; it does not carry the run's output. http/https only; private, loopback, + link-local and cloud-metadata hosts are rejected. orchestration_mode: anyOf: - type: string diff --git a/docs/pipe-run.md b/docs/pipe-run.md index 137390b..c887536 100644 --- a/docs/pipe-run.md +++ b/docs/pipe-run.md @@ -177,7 +177,7 @@ Start a pipeline execution and get its `pipeline_run_id` back with a `202` ack. When the pipeline completes, each URL in the list receives a POST carrying: -- The completion payload in the body: `pipeline_run_id` (the protocol field), the delivery `status` (`"COMPLETED"` or `"FAILED"`), `result_url` (when results were stored), `error` (the raw `ErrorReport` dict on failure), plus the runtime's legacy `pipeline_run_id` key +- A completion notice in the body, not the run's output: `pipeline_run_id`, the delivery `state` (`"COMPLETED"` or `"FAILED"`, also sent under the legacy `status` key), `result_url` (when results were stored: the storage key prefix under which the result files sit, not a fetchable URL) and `error` (the raw `ErrorReport` dict on failure). The receiver reads the results from storage under that prefix. - An **`X-Completion-Signature`** header — `HMAC-SHA256(secret, pipeline_run_id)` rendered as a hex digest **Verifying the signature on the receiver side** diff --git a/pyproject.toml b/pyproject.toml index 7e73ab7..0e899bb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "pipelex-api" -version = "0.33.1" +version = "0.33.2" description = "Pipelex API" authors = [{ name = "Evotis S.A.S.", email = "oss@pipelex.com" }] maintainers = [{ name = "Pipelex staff", email = "oss@pipelex.com" }] diff --git a/uv.lock b/uv.lock index 6acd6aa..1a6af76 100644 --- a/uv.lock +++ b/uv.lock @@ -2367,7 +2367,7 @@ mistralai = [ [[package]] name = "pipelex-api" -version = "0.33.1" +version = "0.33.2" source = { editable = "." } dependencies = [ { name = "fastapi" },