diff --git a/.changeset/browser-pay-event-redaction.md b/.changeset/browser-pay-event-redaction.md deleted file mode 100644 index 739028c94..000000000 --- a/.changeset/browser-pay-event-redaction.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sapiom/browser-pay": minor ---- - -Interceptor event URLs are origin-only, and refusal reasons on events are sanitized. CDP attach errors use fixed messages to avoid forwarding transport details. diff --git a/.changeset/browser-pay-intercept-diagnostics.md b/.changeset/browser-pay-intercept-diagnostics.md deleted file mode 100644 index 993d7d9e7..000000000 --- a/.changeset/browser-pay-intercept-diagnostics.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sapiom/browser-pay": patch ---- - -Better debug logging for browser-pay: an optional logger now receives browser step failures, and CDP errors name the method. diff --git a/.changeset/browser-pay-refusal-pass-through.md b/.changeset/browser-pay-refusal-pass-through.md deleted file mode 100644 index 6a1669282..000000000 --- a/.changeset/browser-pay-refusal-pass-through.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@sapiom/browser-pay": minor ---- - -A refused event may include optional `retryable` and `requestId`. When `retryable` is missing, the event leaves it unset. The SDK does not invent it, and polling still follows only `relay_in_progress`. - -A reason on that event passes through when it matches `/^[a-z]+(_[a-z]+)*$/` and is at most 48 characters, including a reason this package does not list. Every other reason is `unrecognized`. `RefusalReason` is that open set. `KnownRefusalReason` names the reasons the relay emits today. diff --git a/.changeset/core-remove-list-transactions-params.md b/.changeset/core-remove-list-transactions-params.md deleted file mode 100644 index 188412a53..000000000 --- a/.changeset/core-remove-list-transactions-params.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sapiom/core": minor ---- - -Remove the exported `ListTransactionsParams` type. No client method accepted it, and its fields did not match `GET /v1/transactions`: the API paginates with `page[limit]` / `page[after]` cursors (no `offset`), and `filter[service]` takes a service ID (UUID), not a name. Code that imported the type should drop the import; nothing at runtime changes. diff --git a/.changeset/drop-retired-docs-links.md b/.changeset/drop-retired-docs-links.md deleted file mode 100644 index 24ee36317..000000000 --- a/.changeset/drop-retired-docs-links.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"@sapiom/agent-core": patch -"@sapiom/agent": patch -"@sapiom/harness": patch -"@sapiom/analytics-core": patch ---- - -Stop linking docs.sapiom.ai pages that no longer exist. The `sapiom-agent-authoring` skill and its scaffold copies, the Agent Studio system prompt, help palette and welcome screen, and the `@sapiom/agent` README drop links to the agent quick start, authoring guide, MCP setup, call-surface, credentials and signals guides. The first-run telemetry notice drops its link to a `/telemetry` page that never existed. Links to `/capabilities` pages are unchanged. diff --git a/.changeset/mcp-platform-events-subscribable.md b/.changeset/mcp-platform-events-subscribable.md deleted file mode 100644 index 364e9a674..000000000 --- a/.changeset/mcp-platform-events-subscribable.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sapiom/mcp": patch ---- - -The schedule tool now says `sapiom.*` platform events can be subscribed to with an `event` trigger (never emitted) and points to the server instructions for the list; the bundled primer now documents `sapiom.run.failed`. diff --git a/.changeset/run-connectors-selection.md b/.changeset/run-connectors-selection.md deleted file mode 100644 index d24609db6..000000000 --- a/.changeset/run-connectors-selection.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sapiom/tools": minor ---- - -Coding runs and model runs take an optional `connectors` list: the slugs of the connections the run may use, sent on the wire as `connectors`. This is how you decide which agent gets which connection. Leaving it unset is unchanged behavior — the key never reaches the wire and every ready connection attaches. `[]` attaches none. A slug that isn't a ready connection gets the run refused with HTTP 400 `connectors_unavailable`. A platform release that predates per-run selection ignores the field and attaches every connection, as before. diff --git a/.changeset/sdk-shared-credential-transport.md b/.changeset/sdk-shared-credential-transport.md deleted file mode 100644 index 212587a9c..000000000 --- a/.changeset/sdk-shared-credential-transport.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -"@sapiom/analytics-core": minor -"@sapiom/core": minor -"@sapiom/agent-core": minor -"@sapiom/browser-pay": minor -"@sapiom/mcp": patch -"@sapiom/tools": patch ---- - -The tenant API key now only travels over HTTPS, or plain HTTP to a loopback -host, from every SDK client, and never follows a redirect to another origin. -One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` -subpath, is the only code that sets the key header. - -Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a -non-loopback host is now refused, and the key headers are stripped on a -cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their -first runtime dependency, `@sapiom/analytics-core`. - -- `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` - URL to a non-loopback host (for example a Docker service name or a LAN IP) - now fails before the request is sent. On a trusted private network, opt in - with `new SapiomClient({ allowInsecureHttp: true })` (core), - `createClient({ allowInsecureHttp: true })` (agent-core) or - `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, - `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. -- `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without - the key. A redirect to a refused channel drops the batch. -- Every client follows redirects itself: the first hop to another origin drops - `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. -- `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; - read `defaults.credential` instead. -- `@sapiom/browser-pay`: the payment relay uses the shared rule, so a - `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and - a refused base URL throws a `CredentialChannelError`. Redirects are still - refused. -- `@sapiom/tools`: no behavior change. A refused call now throws a - `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. diff --git a/.changeset/slack-history-whoami.md b/.changeset/slack-history-whoami.md deleted file mode 100644 index 9a36aa6ec..000000000 --- a/.changeset/slack-history-whoami.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@sapiom/tools": minor ---- - -`connectors.slack` gains `history()` (Slack `conversations.history`: a channel's top-level messages, paginated, with `oldest` / `latest` bounds) and `whoAmI()` (Slack `auth.test`: the bot's own `user_id` and `bot_id`, to recognise its own posts). Agents that read a channel no longer need their own Slack bot token. diff --git a/packages/agent-core/CHANGELOG.md b/packages/agent-core/CHANGELOG.md index d039da052..96617bf78 100644 --- a/packages/agent-core/CHANGELOG.md +++ b/packages/agent-core/CHANGELOG.md @@ -1,5 +1,50 @@ # @sapiom/orchestration-core +## 0.16.0 + +### Minor Changes + +- a76b8bd: The tenant API key now only travels over HTTPS, or plain HTTP to a loopback + host, from every SDK client, and never follows a redirect to another origin. + One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` + subpath, is the only code that sets the key header. + + Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a + non-loopback host is now refused, and the key headers are stripped on a + cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their + first runtime dependency, `@sapiom/analytics-core`. + + - `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` + URL to a non-loopback host (for example a Docker service name or a LAN IP) + now fails before the request is sent. On a trusted private network, opt in + with `new SapiomClient({ allowInsecureHttp: true })` (core), + `createClient({ allowInsecureHttp: true })` (agent-core) or + `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, + `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. + - `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without + the key. A redirect to a refused channel drops the batch. + - Every client follows redirects itself: the first hop to another origin drops + `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. + - `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; + read `defaults.credential` instead. + - `@sapiom/browser-pay`: the payment relay uses the shared rule, so a + `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and + a refused base URL throws a `CredentialChannelError`. Redirects are still + refused. + - `@sapiom/tools`: no behavior change. A refused call now throws a + `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. + +### Patch Changes + +- 1b9a5f6: Stop linking docs.sapiom.ai pages that no longer exist. The `sapiom-agent-authoring` skill and its scaffold copies, the Agent Studio system prompt, help palette and welcome screen, and the `@sapiom/agent` README drop links to the agent quick start, authoring guide, MCP setup, call-surface, credentials and signals guides. The first-run telemetry notice drops its link to a `/telemetry` page that never existed. Links to `/capabilities` pages are unchanged. +- Updated dependencies [1b9a5f6] +- Updated dependencies [89f1829] +- Updated dependencies [a76b8bd] +- Updated dependencies [ec08398] + - @sapiom/agent@0.14.12 + - @sapiom/analytics-core@0.3.0 + - @sapiom/tools@0.48.0 + ## 0.15.7 ### Patch Changes diff --git a/packages/agent-core/package.json b/packages/agent-core/package.json index 7a487d3f4..f92425d71 100644 --- a/packages/agent-core/package.json +++ b/packages/agent-core/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/agent-core", - "version": "0.15.7", + "version": "0.16.0", "description": "Pure, stateless core functions for scaffolding, validating, and operating Sapiom agents — shared by the CLI and MCP packages.", "license": "MIT", "author": "Sapiom", diff --git a/packages/agent-core/src/version-fallback.generated.ts b/packages/agent-core/src/version-fallback.generated.ts index 243a0cbad..c4e78f637 100644 --- a/packages/agent-core/src/version-fallback.generated.ts +++ b/packages/agent-core/src/version-fallback.generated.ts @@ -4,6 +4,6 @@ // @sapiom/agent + @sapiom/tools versions and the offline scaffold fallback can no // longer drift. export const VERSION_FALLBACK = { - agent: "0.14.11", - tools: "0.47.0", + agent: "0.14.12", + tools: "0.48.0", } as const; diff --git a/packages/agent-studio/CHANGELOG.md b/packages/agent-studio/CHANGELOG.md index 12f6f19cb..c7c9b2f37 100644 --- a/packages/agent-studio/CHANGELOG.md +++ b/packages/agent-studio/CHANGELOG.md @@ -1,5 +1,12 @@ # @sapiom/agent-studio +## 0.1.39 + +### Patch Changes + +- Updated dependencies [1b9a5f6] + - @sapiom/harness@0.22.1 + ## 0.1.38 ### Patch Changes diff --git a/packages/agent-studio/package.json b/packages/agent-studio/package.json index 3ffb2d0fe..6a7c5f83e 100644 --- a/packages/agent-studio/package.json +++ b/packages/agent-studio/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/agent-studio", - "version": "0.1.38", + "version": "0.1.39", "description": "Agent Studio — build, test, deploy, and run Sapiom agents with your coding agent in a local workspace.", "keywords": [ "sapiom", diff --git a/packages/agent/CHANGELOG.md b/packages/agent/CHANGELOG.md index f783ab4cb..672509fa6 100644 --- a/packages/agent/CHANGELOG.md +++ b/packages/agent/CHANGELOG.md @@ -1,5 +1,15 @@ # @sapiom/orchestration +## 0.14.12 + +### Patch Changes + +- 1b9a5f6: Stop linking docs.sapiom.ai pages that no longer exist. The `sapiom-agent-authoring` skill and its scaffold copies, the Agent Studio system prompt, help palette and welcome screen, and the `@sapiom/agent` README drop links to the agent quick start, authoring guide, MCP setup, call-surface, credentials and signals guides. The first-run telemetry notice drops its link to a `/telemetry` page that never existed. Links to `/capabilities` pages are unchanged. +- Updated dependencies [89f1829] +- Updated dependencies [a76b8bd] +- Updated dependencies [ec08398] + - @sapiom/tools@0.48.0 + ## 0.14.11 ### Patch Changes diff --git a/packages/agent/package.json b/packages/agent/package.json index 0fc69c0e3..3a8c73749 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/agent", - "version": "0.14.11", + "version": "0.14.12", "description": "Versioned public contract for authoring Sapiom agents: types, directive constructors/guards, defineAgent, defineStep, InMemoryContextStore. Shared by customer agent definitions, the sandbox step-runner, and the engine.", "license": "MIT", "author": "Sapiom", diff --git a/packages/analytics-core/CHANGELOG.md b/packages/analytics-core/CHANGELOG.md index e8de1e0f3..35d92cb6f 100644 --- a/packages/analytics-core/CHANGELOG.md +++ b/packages/analytics-core/CHANGELOG.md @@ -1,5 +1,43 @@ # @sapiom/analytics-core +## 0.3.0 + +### Minor Changes + +- a76b8bd: The tenant API key now only travels over HTTPS, or plain HTTP to a loopback + host, from every SDK client, and never follows a redirect to another origin. + One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` + subpath, is the only code that sets the key header. + + Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a + non-loopback host is now refused, and the key headers are stripped on a + cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their + first runtime dependency, `@sapiom/analytics-core`. + + - `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` + URL to a non-loopback host (for example a Docker service name or a LAN IP) + now fails before the request is sent. On a trusted private network, opt in + with `new SapiomClient({ allowInsecureHttp: true })` (core), + `createClient({ allowInsecureHttp: true })` (agent-core) or + `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, + `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. + - `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without + the key. A redirect to a refused channel drops the batch. + - Every client follows redirects itself: the first hop to another origin drops + `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. + - `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; + read `defaults.credential` instead. + - `@sapiom/browser-pay`: the payment relay uses the shared rule, so a + `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and + a refused base URL throws a `CredentialChannelError`. Redirects are still + refused. + - `@sapiom/tools`: no behavior change. A refused call now throws a + `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. + +### Patch Changes + +- 1b9a5f6: Stop linking docs.sapiom.ai pages that no longer exist. The `sapiom-agent-authoring` skill and its scaffold copies, the Agent Studio system prompt, help palette and welcome screen, and the `@sapiom/agent` README drop links to the agent quick start, authoring guide, MCP setup, call-surface, credentials and signals guides. The first-run telemetry notice drops its link to a `/telemetry` page that never existed. Links to `/capabilities` pages are unchanged. + ## 0.2.1 ### Patch Changes diff --git a/packages/analytics-core/package.json b/packages/analytics-core/package.json index fa29ff412..ed840b1b1 100644 --- a/packages/analytics-core/package.json +++ b/packages/analytics-core/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/analytics-core", - "version": "0.2.1", + "version": "0.3.0", "description": "Zero-dependency usage analytics emitter shared by Sapiom SDK packages — consent-aware, batched, and guaranteed to never throw or block the host application.", "license": "MIT", "author": "Sapiom", diff --git a/packages/axios/CHANGELOG.md b/packages/axios/CHANGELOG.md index 6798696fe..f5b658074 100644 --- a/packages/axios/CHANGELOG.md +++ b/packages/axios/CHANGELOG.md @@ -1,5 +1,13 @@ # @sapiom/axios +## 0.5.2 + +### Patch Changes + +- Updated dependencies [a8068d8] +- Updated dependencies [a76b8bd] + - @sapiom/core@0.6.0 + ## 0.5.1 ### Patch Changes diff --git a/packages/axios/package.json b/packages/axios/package.json index 1505821ee..8d0eca081 100644 --- a/packages/axios/package.json +++ b/packages/axios/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/axios", - "version": "0.5.1", + "version": "0.5.2", "description": "Axios integration for Sapiom SDK", "keywords": [ "sapiom", diff --git a/packages/browser-pay/CHANGELOG.md b/packages/browser-pay/CHANGELOG.md index eb8a14d94..8e134e7cf 100644 --- a/packages/browser-pay/CHANGELOG.md +++ b/packages/browser-pay/CHANGELOG.md @@ -1,5 +1,51 @@ # @sapiom/browser-pay +## 0.2.0 + +### Minor Changes + +- b386258: Interceptor event URLs are origin-only, and refusal reasons on events are sanitized. CDP attach errors use fixed messages to avoid forwarding transport details. +- 8d77192: A refused event may include optional `retryable` and `requestId`. When `retryable` is missing, the event leaves it unset. The SDK does not invent it, and polling still follows only `relay_in_progress`. + + A reason on that event passes through when it matches `/^[a-z]+(_[a-z]+)*$/` and is at most 48 characters, including a reason this package does not list. Every other reason is `unrecognized`. `RefusalReason` is that open set. `KnownRefusalReason` names the reasons the relay emits today. + +- a76b8bd: The tenant API key now only travels over HTTPS, or plain HTTP to a loopback + host, from every SDK client, and never follows a redirect to another origin. + One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` + subpath, is the only code that sets the key header. + + Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a + non-loopback host is now refused, and the key headers are stripped on a + cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their + first runtime dependency, `@sapiom/analytics-core`. + + - `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` + URL to a non-loopback host (for example a Docker service name or a LAN IP) + now fails before the request is sent. On a trusted private network, opt in + with `new SapiomClient({ allowInsecureHttp: true })` (core), + `createClient({ allowInsecureHttp: true })` (agent-core) or + `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, + `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. + - `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without + the key. A redirect to a refused channel drops the batch. + - Every client follows redirects itself: the first hop to another origin drops + `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. + - `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; + read `defaults.credential` instead. + - `@sapiom/browser-pay`: the payment relay uses the shared rule, so a + `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and + a refused base URL throws a `CredentialChannelError`. Redirects are still + refused. + - `@sapiom/tools`: no behavior change. A refused call now throws a + `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. + +### Patch Changes + +- 150bbd7: Better debug logging for browser-pay: an optional logger now receives browser step failures, and CDP errors name the method. +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/analytics-core@0.3.0 + ## 0.1.1 ### Patch Changes diff --git a/packages/browser-pay/package.json b/packages/browser-pay/package.json index 76dafca66..8163739be 100644 --- a/packages/browser-pay/package.json +++ b/packages/browser-pay/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/browser-pay", - "version": "0.1.1", + "version": "0.2.0", "description": "Browser-side payment interceptor. Pause a placeholder card request over CDP and relay it.", "keywords": [ "sapiom", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 395fb40f7..599e57fdc 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,17 @@ # @sapiom/cli +## 21.0.1 + +### Patch Changes + +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/agent-core@0.16.0 + - @sapiom/agent@0.14.12 + - @sapiom/harness@0.22.1 + - @sapiom/analytics-core@0.3.0 + - @sapiom/sandbox-preview@0.1.34 + ## 21.0.0 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 26af0a494..21da63b85 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/cli", - "version": "21.0.0", + "version": "21.0.1", "description": "The Sapiom command-line interface — scaffold, validate, and ship Sapiom agents.", "license": "MIT", "author": "Sapiom", @@ -46,7 +46,7 @@ "zod": "^3.25.76" }, "peerDependencies": { - "@sapiom/harness": ">=0.22.0" + "@sapiom/harness": ">=0.22.1" }, "peerDependenciesMeta": { "@sapiom/harness": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index d90f39feb..28e0c4749 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,46 @@ # @sapiom/core +## 0.6.0 + +### Minor Changes + +- a8068d8: Remove the exported `ListTransactionsParams` type. No client method accepted it, and its fields did not match `GET /v1/transactions`: the API paginates with `page[limit]` / `page[after]` cursors (no `offset`), and `filter[service]` takes a service ID (UUID), not a name. Code that imported the type should drop the import; nothing at runtime changes. +- a76b8bd: The tenant API key now only travels over HTTPS, or plain HTTP to a loopback + host, from every SDK client, and never follows a redirect to another origin. + One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` + subpath, is the only code that sets the key header. + + Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a + non-loopback host is now refused, and the key headers are stripped on a + cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their + first runtime dependency, `@sapiom/analytics-core`. + + - `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` + URL to a non-loopback host (for example a Docker service name or a LAN IP) + now fails before the request is sent. On a trusted private network, opt in + with `new SapiomClient({ allowInsecureHttp: true })` (core), + `createClient({ allowInsecureHttp: true })` (agent-core) or + `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, + `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. + - `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without + the key. A redirect to a refused channel drops the batch. + - Every client follows redirects itself: the first hop to another origin drops + `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. + - `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; + read `defaults.credential` instead. + - `@sapiom/browser-pay`: the payment relay uses the shared rule, so a + `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and + a refused base URL throws a `CredentialChannelError`. Redirects are still + refused. + - `@sapiom/tools`: no behavior change. A refused call now throws a + `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. + +### Patch Changes + +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/analytics-core@0.3.0 + ## 0.5.0 ### Minor Changes diff --git a/packages/core/package.json b/packages/core/package.json index 0f049fcef..a3ec5f8f4 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/core", - "version": "0.5.0", + "version": "0.6.0", "description": "Core SDK for Sapiom API - Transaction management and core utilities", "keywords": [ "sapiom", diff --git a/packages/fetch/CHANGELOG.md b/packages/fetch/CHANGELOG.md index b41c14cbf..d3db4f806 100644 --- a/packages/fetch/CHANGELOG.md +++ b/packages/fetch/CHANGELOG.md @@ -1,5 +1,13 @@ # @sapiom/fetch +## 0.5.1 + +### Patch Changes + +- Updated dependencies [a8068d8] +- Updated dependencies [a76b8bd] + - @sapiom/core@0.6.0 + ## 0.5.0 ### Minor Changes diff --git a/packages/fetch/package.json b/packages/fetch/package.json index 1b029a616..c99b0a4c2 100644 --- a/packages/fetch/package.json +++ b/packages/fetch/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/fetch", - "version": "0.5.0", + "version": "0.5.1", "description": "Fetch API integration for Sapiom SDK", "keywords": [ "sapiom", diff --git a/packages/harness/CHANGELOG.md b/packages/harness/CHANGELOG.md index 92e6d6f39..4be611da5 100644 --- a/packages/harness/CHANGELOG.md +++ b/packages/harness/CHANGELOG.md @@ -1,5 +1,18 @@ # @sapiom/harness +## 0.22.1 + +### Patch Changes + +- 1b9a5f6: Stop linking docs.sapiom.ai pages that no longer exist. The `sapiom-agent-authoring` skill and its scaffold copies, the Agent Studio system prompt, help palette and welcome screen, and the `@sapiom/agent` README drop links to the agent quick start, authoring guide, MCP setup, call-surface, credentials and signals guides. The first-run telemetry notice drops its link to a `/telemetry` page that never existed. Links to `/capabilities` pages are unchanged. +- Updated dependencies [1b9a5f6] +- Updated dependencies [085a3c4] +- Updated dependencies [a76b8bd] + - @sapiom/agent-core@0.16.0 + - @sapiom/agent@0.14.12 + - @sapiom/analytics-core@0.3.0 + - @sapiom/mcp@0.20.2 + ## 0.22.0 ### Minor Changes diff --git a/packages/harness/package.json b/packages/harness/package.json index 560b5a15b..debc0d23a 100644 --- a/packages/harness/package.json +++ b/packages/harness/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/harness", - "version": "0.22.0", + "version": "0.22.1", "description": "Agent Studio — a CLI-launched local web app that runs your coding agent (Claude Code or Codex) in a Sapiom-configured environment: MCP pre-wired, agents tracked, one-click deploy/run, and a live canvas for previews.", "keywords": [ "sapiom", diff --git a/packages/langchain-classic/CHANGELOG.md b/packages/langchain-classic/CHANGELOG.md index 90bf623ef..69d0fa4a0 100644 --- a/packages/langchain-classic/CHANGELOG.md +++ b/packages/langchain-classic/CHANGELOG.md @@ -1,5 +1,15 @@ # @sapiom/langchain-classic +## 0.5.2 + +### Patch Changes + +- Updated dependencies [a8068d8] +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/core@0.6.0 + - @sapiom/analytics-core@0.3.0 + ## 0.5.1 ### Patch Changes diff --git a/packages/langchain-classic/package.json b/packages/langchain-classic/package.json index d5fa3081a..eedfc2c90 100644 --- a/packages/langchain-classic/package.json +++ b/packages/langchain-classic/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/langchain-classic", - "version": "0.5.1", + "version": "0.5.2", "private": true, "description": "LangChain v0.x integration for Sapiom SDK (legacy)", "keywords": [ diff --git a/packages/langchain/CHANGELOG.md b/packages/langchain/CHANGELOG.md index 73f07741b..fe327d669 100644 --- a/packages/langchain/CHANGELOG.md +++ b/packages/langchain/CHANGELOG.md @@ -1,5 +1,15 @@ # @sapiom/langchain +## 0.5.2 + +### Patch Changes + +- Updated dependencies [a8068d8] +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/core@0.6.0 + - @sapiom/analytics-core@0.3.0 + ## 0.5.1 ### Patch Changes diff --git a/packages/langchain/package.json b/packages/langchain/package.json index ce7fb9568..4d030f475 100644 --- a/packages/langchain/package.json +++ b/packages/langchain/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/langchain", - "version": "0.5.1", + "version": "0.5.2", "private": true, "description": "LangChain v1.x integration for Sapiom SDK", "keywords": [ diff --git a/packages/mcp/CHANGELOG.md b/packages/mcp/CHANGELOG.md index 7ac9f8f59..eb77cee72 100644 --- a/packages/mcp/CHANGELOG.md +++ b/packages/mcp/CHANGELOG.md @@ -1,5 +1,46 @@ # @sapiom/mcp +## 0.20.2 + +### Patch Changes + +- 085a3c4: The schedule tool now says `sapiom.*` platform events can be subscribed to with an `event` trigger (never emitted) and points to the server instructions for the list; the bundled primer now documents `sapiom.run.failed`. +- a76b8bd: The tenant API key now only travels over HTTPS, or plain HTTP to a loopback + host, from every SDK client, and never follows a redirect to another origin. + One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` + subpath, is the only code that sets the key header. + + Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a + non-loopback host is now refused, and the key headers are stripped on a + cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their + first runtime dependency, `@sapiom/analytics-core`. + + - `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` + URL to a non-loopback host (for example a Docker service name or a LAN IP) + now fails before the request is sent. On a trusted private network, opt in + with `new SapiomClient({ allowInsecureHttp: true })` (core), + `createClient({ allowInsecureHttp: true })` (agent-core) or + `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, + `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. + - `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without + the key. A redirect to a refused channel drops the batch. + - Every client follows redirects itself: the first hop to another origin drops + `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. + - `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; + read `defaults.credential` instead. + - `@sapiom/browser-pay`: the payment relay uses the shared rule, so a + `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and + a refused base URL throws a `CredentialChannelError`. Redirects are still + refused. + - `@sapiom/tools`: no behavior change. A refused call now throws a + `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. + +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/agent-core@0.16.0 + - @sapiom/analytics-core@0.3.0 + - @sapiom/sandbox-preview@0.1.34 + ## 0.20.1 ### Patch Changes diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 022c71c95..5999614cf 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/mcp", - "version": "0.20.1", + "version": "0.20.2", "description": "Local Sapiom developer MCP server (sapiom-dev) — the unmetered surface for building and operating on Sapiom; today it scaffolds, tests, deploys, and inspects orchestrations. Not the remote Sapiom capability MCP.", "mcpName": "io.github.sapiom/mcp", "keywords": [ diff --git a/packages/node-http/CHANGELOG.md b/packages/node-http/CHANGELOG.md index 14460b730..df9d3adf7 100644 --- a/packages/node-http/CHANGELOG.md +++ b/packages/node-http/CHANGELOG.md @@ -1,5 +1,13 @@ # @sapiom/node-http +## 0.4.2 + +### Patch Changes + +- Updated dependencies [a8068d8] +- Updated dependencies [a76b8bd] + - @sapiom/core@0.6.0 + ## 0.4.1 ### Patch Changes diff --git a/packages/node-http/package.json b/packages/node-http/package.json index 3f5a88243..69901093a 100644 --- a/packages/node-http/package.json +++ b/packages/node-http/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/node-http", - "version": "0.4.1", + "version": "0.4.2", "description": "Node.js HTTP/HTTPS integration for Sapiom SDK", "keywords": [ "sapiom", diff --git a/packages/sandbox-preview/CHANGELOG.md b/packages/sandbox-preview/CHANGELOG.md index 4bbe0ee3c..90b6a8eee 100644 --- a/packages/sandbox-preview/CHANGELOG.md +++ b/packages/sandbox-preview/CHANGELOG.md @@ -1,5 +1,14 @@ # @sapiom/sandbox-preview +## 0.1.34 + +### Patch Changes + +- Updated dependencies [89f1829] +- Updated dependencies [a76b8bd] +- Updated dependencies [ec08398] + - @sapiom/tools@0.48.0 + ## 0.1.33 ### Patch Changes diff --git a/packages/sandbox-preview/package.json b/packages/sandbox-preview/package.json index 1528ce654..d97f5bb00 100644 --- a/packages/sandbox-preview/package.json +++ b/packages/sandbox-preview/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/sandbox-preview", - "version": "0.1.33", + "version": "0.1.34", "description": "Client-side flow for deploying a web-app preview to a Sapiom sandbox — provision, upload, deploy to a live URL. Shared by the CLI and MCP packages.", "license": "MIT", "author": "Sapiom", diff --git a/packages/sandbox/CHANGELOG.md b/packages/sandbox/CHANGELOG.md index 819a1a37b..4a06478fa 100644 --- a/packages/sandbox/CHANGELOG.md +++ b/packages/sandbox/CHANGELOG.md @@ -1,5 +1,11 @@ # @sapiom/sandbox +## 0.8.6 + +### Patch Changes + +- @sapiom/fetch@0.5.1 + ## 0.8.5 ### Patch Changes diff --git a/packages/sandbox/package.json b/packages/sandbox/package.json index 556e4a8fe..510555659 100644 --- a/packages/sandbox/package.json +++ b/packages/sandbox/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/sandbox", - "version": "0.8.5", + "version": "0.8.6", "description": "Sandbox environment management for Sapiom SDK", "repository": { "type": "git", diff --git a/packages/tools/CHANGELOG.md b/packages/tools/CHANGELOG.md index cf65544f6..7dd4e0b7e 100644 --- a/packages/tools/CHANGELOG.md +++ b/packages/tools/CHANGELOG.md @@ -1,5 +1,48 @@ # @sapiom/tools +## 0.48.0 + +### Minor Changes + +- 89f1829: Coding runs and model runs take an optional `connectors` list: the slugs of the connections the run may use, sent on the wire as `connectors`. This is how you decide which agent gets which connection. Leaving it unset is unchanged behavior — the key never reaches the wire and every ready connection attaches. `[]` attaches none. A slug that isn't a ready connection gets the run refused with HTTP 400 `connectors_unavailable`. A platform release that predates per-run selection ignores the field and attaches every connection, as before. +- ec08398: `connectors.slack` gains `history()` (Slack `conversations.history`: a channel's top-level messages, paginated, with `oldest` / `latest` bounds) and `whoAmI()` (Slack `auth.test`: the bot's own `user_id` and `bot_id`, to recognise its own posts). Agents that read a channel no longer need their own Slack bot token. + +### Patch Changes + +- a76b8bd: The tenant API key now only travels over HTTPS, or plain HTTP to a loopback + host, from every SDK client, and never follows a redirect to another origin. + One function, `credentialFetch` from the new `@sapiom/analytics-core/credential` + subpath, is the only code that sets the key header. + + Behavior changes, shipped as 0.x minor bumps: a plain `http://` URL to a + non-loopback host is now refused, and the key headers are stripped on a + cross-origin redirect. `@sapiom/core` and `@sapiom/browser-pay` gain their + first runtime dependency, `@sapiom/analytics-core`. + + - `@sapiom/core`, `@sapiom/agent-core` and `@sapiom/mcp`: a plain `http://` + URL to a non-loopback host (for example a Docker service name or a LAN IP) + now fails before the request is sent. On a trusted private network, opt in + with `new SapiomClient({ allowInsecureHttp: true })` (core), + `createClient({ allowInsecureHttp: true })` (agent-core) or + `SAPIOM_ALLOW_INSECURE_HTTP=1` (all clients). `localhost`, `*.localhost`, + `127.0.0.1` and `[::1]` work as before. Core does not retry a refused channel. + - `@sapiom/analytics-core`: on such an endpoint the batch is still sent, without + the key. A redirect to a refused channel drops the batch. + - Every client follows redirects itself: the first hop to another origin drops + `x-api-key`, `x-sapiom-api-key` and every `x-sapiom-*` header. + - `@sapiom/core`: `getHttpClient().defaults.headers` no longer carries the key; + read `defaults.credential` instead. + - `@sapiom/browser-pay`: the payment relay uses the shared rule, so a + `*.localhost` base URL and `SAPIOM_ALLOW_INSECURE_HTTP=1` are now accepted, and + a refused base URL throws a `CredentialChannelError`. Redirects are still + refused. + - `@sapiom/tools`: no behavior change. A refused call now throws a + `CredentialChannelError`, a `TypeError` subclass that keeps `name: "TypeError"`. + +- Updated dependencies [1b9a5f6] +- Updated dependencies [a76b8bd] + - @sapiom/analytics-core@0.3.0 + ## 0.47.0 ### Minor Changes diff --git a/packages/tools/package.json b/packages/tools/package.json index 52615dbf7..1c5b03f23 100644 --- a/packages/tools/package.json +++ b/packages/tools/package.json @@ -1,6 +1,6 @@ { "name": "@sapiom/tools", - "version": "0.47.0", + "version": "0.48.0", "description": "Typed client for Sapiom capabilities (sandboxes, repositories, agent, file storage, …) — the same tools your agents call over MCP, callable from your code, auth'd to your tenant.", "license": "MIT", "author": "Sapiom", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3955c6475..50da7ad70 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -335,7 +335,7 @@ importers: specifier: workspace:^ version: link:../analytics-core '@sapiom/harness': - specifier: '>=0.22.0' + specifier: '>=0.22.1' version: link:../harness '@sapiom/sandbox-preview': specifier: workspace:^