Repository navigation
fix(skills): Correct the HTTP 403 advice now that server-side FDv2 is available to every account - #141
Merged
Conversation
… available to every account Co-Authored-By: traci@launchdarkly.com <traci@launchdarkly.com>
Contributor
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
andrewklatzke
approved these changes
Oct 16, 2026
Merged
jeffdupont
pushed a commit
that referenced
this pull request
Oct 26, 2026
🤖 I have created a release *beep* *boop* --- <details><summary>@launchdarkly/ai-claude-agents: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-claude-agents-0.4.0...@launchdarkly/ai-claude-agents-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **claude-agents:** accept trusted cwd and settingSources options, and load no host settings by default ([#135](#135)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) * **claude-agents:** accept trusted cwd and settingSources options, and load no host settings by default ([#135](#135)) ([6acd53d](6acd53d)) ### Bug Fixes * **AIC-3571:** visit every child before its parent in reverseTraverse ([#147](#147)) ([a17a2ce](a17a2ce)) * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **claude-agents:** fail the run when the CLI reports an API error as success ([#138](#138)) ([4637958](4637958)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) * give native graph spans their LaunchDarkly identity ([#101](#101)) ([4d97cfa](4d97cfa)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-claude-messages: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-claude-messages-0.4.0...@launchdarkly/ai-claude-messages-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-langchain-agents: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-langchain-agents-0.4.0...@launchdarkly/ai-langchain-agents-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) * give native graph spans their LaunchDarkly identity ([#101](#101)) ([4d97cfa](4d97cfa)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-langchain-messages: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-langchain-messages-0.4.0...@launchdarkly/ai-langchain-messages-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-litellm-agents: 0.2.0</summary> ## [0.2.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-litellm-agents-0.1.0...@launchdarkly/ai-litellm-agents-0.2.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) ### Features * add LiteLLM messages and agents integrations ([#75](#75)) ([127f156](127f156)) ### Bug Fixes * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-litellm-messages: 0.2.0</summary> ## [0.2.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-litellm-messages-0.1.0...@launchdarkly/ai-litellm-messages-0.2.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) ### Features * add LiteLLM messages and agents integrations ([#75](#75)) ([127f156](127f156)) ### Bug Fixes * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-node: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-node-0.3.0...@launchdarkly/ai-node-0.4.0) (2026-10-26) ### ⚠ BREAKING CHANGES * **skills:** promote Agent Skills to core ([#159](#159)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **skills:** promote Agent Skills to core ([#159](#159)) ([c7135cd](c7135cd)) ### Bug Fixes * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-openai-agents: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-openai-agents-0.4.0...@launchdarkly/ai-openai-agents-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * **AIC-3571:** visit every child before its parent in reverseTraverse ([#147](#147)) ([a17a2ce](a17a2ce)) * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **AIC-3586:** propagate tool handler errors instead of sending them to the model ([#139](#139)) ([1f31e85](1f31e85)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) * give native graph spans their LaunchDarkly identity ([#101](#101)) ([4d97cfa](4d97cfa)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-openai-messages: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-openai-messages-0.4.0...@launchdarkly/ai-openai-messages-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-otel: 0.3.0</summary> ## [0.3.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-otel-0.2.0...@launchdarkly/ai-otel-0.3.0) (2026-10-26) ### ⚠ BREAKING CHANGES * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Bug Fixes * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) </details> <details><summary>@launchdarkly/ai-server: 0.5.0</summary> ## [0.5.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-server-0.4.0...@launchdarkly/ai-server-0.5.0) (2026-10-26) ### ⚠ BREAKING CHANGES * **skills:** promote Agent Skills to core ([#159](#159)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) * **client:** the client no longer loads .env. Add import 'dotenv/config' to your entrypoint (and install dotenv) if you relied on it. ### Experimental * **evaluations:** hash eventId and contentHash as RFC 8785 canonical JSON, the same in every SDK ([c971649](c971649)) * **evaluations:** Set JSON as standard for output to pass to judge ([#152](#152)) ([330da44](330da44)) ### Features * **AIC-3534:** add a TypeSafe Jev judge handler ([#122](#122)) ([0c1d6b7](0c1d6b7)) * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) * **skills:** promote Agent Skills to core ([#159](#159)) ([c7135cd](c7135cd)) ### Bug Fixes * **AIC-3541:** accept a node-server-sdk client in initClient() without a cast ([#128](#128)) ([5819449](5819449)) * **AIC-3570:** re-resolve graph flags on every invoke and stream ([#145](#145)) ([ce4f72e](ce4f72e)) * **AIC-3571:** visit every child before its parent in reverseTraverse ([#147](#147)) ([a17a2ce](a17a2ce)) * **AIC-3576:** record deferred judge scores under the evaluated config ([#148](#148)) ([d9fbee6](d9fbee6)) * **AIC-3577:** send object tool results to the model as JSON ([#146](#146)) ([be41d87](be41d87)) * **AIC-3596:** point the missing-OTel warning and docs at @launchdarkly/ai-otel ([#144](#144)) ([9b5f32e](9b5f32e)) * **client:** show a judge an output of 0, false, {} or [] ([c971649](c971649)) * **client:** stop loading dotenv from library code ([#69](#69)) ([fea34f3](fea34f3)) * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) * give native graph spans their LaunchDarkly identity ([#101](#101)) ([4d97cfa](4d97cfa)) * **judges:** a judge config's outputFormat must not reach the provider ([#56](#56)) ([8c6f4d2](8c6f4d2)) * **skills:** Correct the HTTP 403 advice now that server-side FDv2 is available to every account ([#141](#141)) ([5b7b732](5b7b732)) * **skills:** default FDv2SkillStore endpoints from LD_BASE_URI and LD_STREAM_URI ([#134](#134)) ([05f77d9](05f77d9)) </details> <details><summary>@launchdarkly/ai-typesafe: 0.2.0</summary> ## [0.2.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-typesafe-0.1.0...@launchdarkly/ai-typesafe-0.2.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) ### Features * **AIC-3534:** add a TypeSafe Jev judge handler ([#122](#122)) ([0c1d6b7](0c1d6b7)) * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-vercel-agents: 0.3.0</summary> ## [0.3.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-vercel-agents-0.2.0...@launchdarkly/ai-vercel-agents-0.3.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) * give native graph spans their LaunchDarkly identity ([#101](#101)) ([4d97cfa](4d97cfa)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> <details><summary>@launchdarkly/ai-vercel-messages: 0.3.0</summary> ## [0.3.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-vercel-messages-0.2.0...@launchdarkly/ai-vercel-messages-0.3.0) (2026-10-26) ### ⚠ BREAKING CHANGES * forward the same model.parameters keys as the Python SDK ([#118](#118)) ### Features * **AIC-3623:** evals from code ([#143](#143)) ([dc74b48](dc74b48)) ### Bug Fixes * forward the same model.parameters keys as the Python SDK ([#118](#118)) ([f7883ce](f7883ce)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.4.0 to ^0.5.0 </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Overview** > This is a **Release Please** cut that bumps published versions across the monorepo and records what ships in each package—there is no application source in the diff beyond `LD_AI_PACKAGE_VERSION` strings and dependency pins. > > **@launchdarkly/ai-server** goes to **0.5.0**; provider packages move to **0.5.0** (or **0.4.0** / **0.3.0** / **0.2.0** where applicable), `.release-please-manifest.json` is updated, and every adapter’s `package.json` now depends on **`@launchdarkly/ai-server` ^0.5.0**. New **CHANGELOG** sections document the release notes already merged on `main`. > > Reviewers should treat this as publishing **breaking** behavior called out in those changelogs: libraries no longer auto-load **`.env`** (apps need `import 'dotenv/config'` if they relied on it), **`model.parameters`** forwarding is aligned with the Python SDK, **Agent Skills** are promoted from experimental to core, plus features/fixes such as **evals from code**, TypeSafe judge handler, and **claude-agents** defaulting to no host settings unless `cwd` / `settingSources` are passed. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 8c6546c. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
From Traci:
Caseware is using skills and they mentioned that
The SDK docs say skill content is delivered only through FDv2 (FDv2SkillStore), and that we'd get a 403 if FDv2 isn't enabled for our account.
I want to clarify that it is enabled for all accounts
FDv2SkillStore's 403 message and the README's beta caveat said FDv2 is "opt-in per account" and told users to ask support to enable it. That's no longer true. In production,fdv2-protocol-controlallows/sdk/polland/sdk/streamfor every account under its "Server Side SDKs (GA)" rule. A customer recently asked us to "enable FDv2" because of this wording.FORBIDDEN_ADVICEnow tells the user to check that the SDK key is the environment's server-side key and that no proxy in between is refusing the request, then to contact support.SkillDeliveryAllowedis false, the skill payload is left out of the assignment and no error is returned. Theld-relaycaveat is unchanged.How to test
npx vitest run src/__tests__/skills-fdv2.test.ts -t 403frompackages/client. Also ranmake code-check.Link to Devin session: https://app.devin.ai/sessions/86607bf5a72840ac922a278d08236eb9
Open in Devin Desktop: https://app.devin.ai/desktop/session/86607bf5a72840ac922a278d08236eb9?variant=devin
Requested by: @tracisiebel
Note
Overview
Updates FDv2 skill delivery docs and fatal HTTP 403 handling to match current LaunchDarkly behavior: SDK-facing FDv2 endpoints are no longer described as opt-in per account.
FORBIDDEN_ADVICEinskills-fdv2.tsnow tells operators to verify the environment server-side SDK key and check for a proxy blocking the request before contacting support, instead of asking LaunchDarkly to enable FDv2. The README beta caveat is aligned: accounts without Agent Skills get empty skill content rather than a product error; 403 still surfaces as a fatal error with the revised guidance. The 403 integration test asserts the new proxy wording.Reviewed by Cursor Bugbot for commit cb9e3a4. Bugbot is set up for automated code reviews on this repo. Configure here.