Repository navigation
fix(deps): depend on the @launchdarkly/ai-server release each package needs - #119
Conversation
… needs Every package that depends on @launchdarkly/ai-server asked for "*". A consumer whose lockfile already holds an older ai-server keeps it when it upgrades a handler or ai-node, because "*" is still satisfied. The handlers on main already import normalizeModelParameters and pickForwardedModelParameters, which published ai-server 0.3.0 does not export, and @launchdarkly/ai-node/experimental re-exports a subpath that only the next ai-server release will have. Ranges are now ^0.3.0, and release-please's node-workspace plugin rewrites them to ^<new version> in each release PR. The plugin keeps a ^ prefix but turns "*" into an exact pin, which is why the ranges change here as well. The ranges can't be pinned to the next version by hand: yarn v1 links a workspace sibling only when its version satisfies the range, so ^0.4.0 against the local 0.3.0 fails `yarn install --frozen-lockfile`. The plugin also gives every dependent a patch release whenever ai-server releases, whether or not it has changes of its own. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jeffdupont
left a comment
There was a problem hiding this comment.
The problem is real, and this should land before #85. The only published @launchdarkly/ai-server is still 0.3.0 on npm. Its exports has only ".", and it has no pickForwardedModelParameters. So with "*", a consumer with 0.3.0 locked who upgrades a handler or ai-node gets an import failure, or ERR_PACKAGE_PATH_NOT_EXPORTED for /experimental. The reasoning about the yarn v1 workspace link and ^0.3.0 makes sense. On 0.x, ^0.3.0 means <0.4.0, so the fix depends on release-please rewriting the range to ^0.4.0. I did not rerun the release-please dry run; I am relying on yours.
Two things I would settle before 1.0:
- Should this be a peer dependency? Inline, on
langchain-messages. - Python has the same gap, and it arrives with py #107. Once #107 merges, every Python handler imports
launchdarkly_ai_server.parameter_forwarding, for exampleclaude-agents/handler.py:50andlangchain-agents/handler.py:33. That module is not on Pythonmain(0b4df05), so the latest on PyPI (0.2.4) cannot have it. The handlers depend on a bare"launchdarkly-ai-server", so a user with 0.2.4 installed who upgrades a handler gets anImportError. "Doesn't need a similar change yet" is true only until #107 is released. Could the Python lower bounds land alongside #107, so the fix ships in both SDKs?
Smaller: the patch release for every dependent on each ai-server release is a real cost, as you say. If changelog noise matters, it may be worth a line in the release notes saying those bumps are dependency-only.
|
@jeffdupont, thanks.
On the dependency-only patch bumps: agreed that a line in the release notes saying so is worth adding when the release PR goes out. |
…ing (#123) ## Summary Lists Agent Skills changes under an **Experimental** heading in each package's changelog, as TESTING.md §0.1 promises for an experimental feature. Spec: launchdarkly/ai-sdks-monorepo#50. Python twin: launchdarkly/python-ai-sdk#150. ## How `release-please-config.json` gains `changelog-sections`. Rows matching `feat`, `fix` and `perf` with scope `skills` map to "Experimental". The rest of the list reproduces the defaults release-please 17.6.0 uses for the Node strategy (the `conventionalcommits` preset's list), so every other commit renders exactly as before. Matching on scope works because release-please hands `changelog-sections` to `conventional-changelog-conventionalcommits` 6.1.0 unchanged (`manifest.ts:1397`), and the preset's `findTypeEntry` checks an entry's `scope` (`writer-opts.js:60-71`). The first match wins, so the scoped rows come first, and "Experimental" is therefore the first heading. `scope` isn't in release-please's documented config schema. Rerun the checks below when upgrading release-please. `AGENTS.md` gains a "PR Titles and the Changelog" section with the convention: - an experimental change uses its feature's scope, and only that one scope; - a PR that mixes core and experimental changes is split, or uses `BEGIN_COMMIT_OVERRIDE`; - a breaking experimental change uses `!` while the package is 0.x, and drops it after 1.0. The block sits at the end of the file so it doesn't conflict with #119, which adds `plugins` after `bootstrap-sha` (`git merge-tree` is clean). ## Verification - **Rendering:** I ran release-please 17.6.0's own commit parser and `DefaultChangelogNotes` against this config, with synthetic commits. - Non-experimental commits render byte-for-byte the same as with the defaults. - `feat(skills)`, `fix(skills)`, `perf(skills)` and `feat(skills)!` land under Experimental. A breaking one also appears in "⚠ BREAKING CHANGES". - `docs(skills)` stays hidden, `feat(skills,client)` lands under Features, and `feat(client)` stays under Features. - **Dry run:** `release-please release-pr --dry-run` against this branch proposes the same packages, versions and notes as release PR #85, apart from the date. Nothing on `main` uses the `skills` scope yet. - **Agent Skills:** #71 is retitled `feat(skills): Agent Skills`, so its squash commit lands under Experimental. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Overview** > Configures **release-please** so Agent Skills work (`feat`/`fix`/`perf` with scope `skills`) appears under an **Experimental** changelog heading, while the rest of the section list mirrors the default Node/conventional-commits preset so other commits render unchanged. > > Adds **PR Titles and the Changelog** to `AGENTS.md`, documenting squash-merge titles, the single `skills` scope, mixed core/experimental PRs (`BEGIN_COMMIT_OVERRIDE`), breaking experimental commits while packages are 0.x, and removing experimental rows when a feature graduates. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 5c1e697. 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: Claude Opus 5.5 <noreply@anthropic.com>
Brings in #115 (helper usage), #123 (Experimental changelog heading), #78 (bundler import diagnostics) and #119 (node-workspace ranges). lifecycle.ts conflict: keep the branch's init/shutdown structure and add main's usage flush beside each flushAiSdkInfo call (already-initialized, BYOC, and after a successful options-path await), so a failed or abandoned init never flushes and a retry flushes once. shutdown() resets usage with sdk-info, only when a client existed, as main's early return did; held helpers survive a no-client shutdown. shutdownTelemetry() keeps the branch's OTel-globals teardown and gains main's ESM warning reset. Root surface: add main's configInternal, createHandlerInternal, graphInternal, inspectConfigInternal and reportUsage to ROOT_VALUES and regenerate etc/ai-server.api.md. The experimental report is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🤖 I have created a release *beep* *boop* --- <details><summary>@launchdarkly/ai-claude-agents: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-claude-agents-0.3.0...@launchdarkly/ai-claude-agents-0.4.0) (2026-10-09) ### Features * **AIC-3211:** record each graph node as its own tracking event ([#91](#91)) ([2df2923](2df2923)) * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) ### Bug Fixes * **claude-agents:** forward only an allowlist of query() options from model.parameters ([37bd8a7](37bd8a7)) * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-claude-messages: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-claude-messages-0.3.0...@launchdarkly/ai-claude-messages-0.4.0) (2026-10-09) ### Features * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) * **claude-messages:** forward only Messages API keys from model.parameters ([9a1819e](9a1819e)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * **openai-messages:** only exclude model.parameters keys that would break the handler ([39e342d](39e342d)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **SEC-9507:** authorize message-handler tools from the active variation ([#90](#90)) ([c16fe93](c16fe93)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-langchain-agents: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-langchain-agents-0.3.0...@launchdarkly/ai-langchain-agents-0.4.0) (2026-10-09) ### Features * **AIC-3211:** record each graph node as its own tracking event ([#91](#91)) ([2df2923](2df2923)) * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **langchain:** forward only a per-model-class allowlist of constructor fields ([0990a51](0990a51)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-langchain-messages: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-langchain-messages-0.3.0...@launchdarkly/ai-langchain-messages-0.4.0) (2026-10-09) ### Features * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **langchain:** forward only a per-model-class allowlist of constructor fields ([0990a51](0990a51)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **SEC-9507:** authorize message-handler tools from the active variation ([#90](#90)) ([c16fe93](c16fe93)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-node: 0.3.0</summary> ## [0.3.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-node-0.2.0...@launchdarkly/ai-node-0.3.0) (2026-10-09) ### Experimental * **skills:** add experimental Agent Skills under `@launchdarkly/ai-server/experimental`, re-exported from `@launchdarkly/ai-node/experimental` ([a242659](a242659)) ### Features * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) * **build:** dual ESM/CommonJS output via tsup ([d8e62e4](d8e62e4)) * **client:** `initClient(client, options)` accepts telemetry options for a pre-initialized client ([a242659](a242659)) * **client:** warn about unrecognized `initClient` options instead of ignoring them silently ([a242659](a242659)) ### Bug Fixes * **client:** `shutdownTelemetry()` releases the OpenTelemetry globals the SDK registered, so a later `initClient` exports spans again ([a242659](a242659)) * **client:** a repeat `initClient(client)` returns the client already set instead of replacing it ([a242659](a242659)) * **client:** an `initClient` that fails, or that `shutdown()` interrupts, closes the client it built, and a failure is no longer cached, so the next call retries ([a242659](a242659)) * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-openai-agents: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-openai-agents-0.3.0...@launchdarkly/ai-openai-agents-0.4.0) (2026-10-09) ### Features * **AIC-3210:** support streaming responses from agent graph nodes ([#84](#84)) ([24671e8](24671e8)) * **AIC-3211:** record each graph node as its own tracking event ([#91](#91)) ([2df2923](2df2923)) * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * **openai-agents:** forward only an allowlist of ModelSettings fields from model.parameters ([398e935](398e935)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **telemetry:** report OpenAI tool arguments as an object, not a JSON string ([#68](#68)) ([d614791](d614791)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-openai-messages: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-openai-messages-0.3.0...@launchdarkly/ai-openai-messages-0.4.0) (2026-10-09) ### Features * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) * **openai-messages:** forward only Responses API keys from model.parameters ([5c51dc9](5c51dc9)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * **openai-messages:** only exclude model.parameters keys that would break the handler ([39e342d](39e342d)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **SEC-9507:** authorize message-handler tools from the active variation ([#90](#90)) ([c16fe93](c16fe93)) * **telemetry:** report OpenAI tool arguments as an object, not a JSON string ([#68](#68)) ([d614791](d614791)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-otel: 0.2.0</summary> ## [0.2.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-otel-0.1.1...@launchdarkly/ai-otel-0.2.0) (2026-10-09) ### Features * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) * **build:** dual ESM/CommonJS output via tsup ([d8e62e4](d8e62e4)) </details> <details><summary>@launchdarkly/ai-server: 0.4.0</summary> ## [0.4.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-server-0.3.0...@launchdarkly/ai-server-0.4.0) (2026-10-09) ### Experimental * **skills:** add experimental Agent Skills under `@launchdarkly/ai-server/experimental`, re-exported from `@launchdarkly/ai-node/experimental` ([a242659](a242659)) ### Features * **AIC-3210:** support streaming responses from agent graph nodes ([#84](#84)) ([24671e8](24671e8)) * **AIC-3211:** record each graph node as its own tracking event ([#91](#91)) ([2df2923](2df2923)) * **AIC-3416:** say the real reason when a bundler breaks an optional import [3/4] ([#78](#78)) ([7ee4d5a](7ee4d5a)) * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) * **build:** build the AI SDK like the other LaunchDarkly JS SDKs so CommonJS apps can load it (2/4) ([#77](#77)) ([2cda755](2cda755)) * **client:** `initClient(client, options)` accepts telemetry options for a pre-initialized client ([a242659](a242659)) * **client:** restore pickForwardedModelParameters for closed provider request types ([f7f85d0](f7f85d0)) * **client:** warn about unrecognized `initClient` options instead of ignoring them silently ([a242659](a242659)) ### Bug Fixes * **client:** `shutdownTelemetry()` releases the OpenTelemetry globals the SDK registered, so a later `initClient` exports spans again ([a242659](a242659)) * **client:** a repeat `initClient(client)` returns the client already set instead of replacing it ([a242659](a242659)) * **client:** an `initClient` that fails, or that `shutdown()` interrupts, closes the client it built, and a failure is no longer cached, so the next call retries ([a242659](a242659)) * **handlers:** camelize snake_case model.parameters for framework handlers ([75c6287](75c6287)) * **judges:** a judge's own config must not fail the run it grades ([#17](#17)) ([6e85cac](6e85cac)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **vercel-messages:** map model.parameters onto AI SDK call settings ([d2a52ae](d2a52ae)) * **vercel:** tag vercelEvaluate spans with run identity ([#100](#100)) ([d32bede](d32bede)) </details> <details><summary>@launchdarkly/ai-vercel-agents: 0.2.0</summary> ## [0.2.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-vercel-agents-0.1.0...@launchdarkly/ai-vercel-agents-0.2.0) (2026-10-09) ### Features * **AIC-3408:** add Vercel AI SDK messages and agents adapters ([#83](#83)) ([7d08c9c](7d08c9c)) * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **vercel-agents:** map model.parameters onto ToolLoopAgent call settings ([4241d75](4241d75)) * **vercel:** never forward headers, providerOptions, maxRetries or timeout from model.parameters ([0a616fb](0a616fb)) * **vercel:** send image content as AI SDK file parts ([#99](#99)) ([2856abc](2856abc)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0 </details> <details><summary>@launchdarkly/ai-vercel-messages: 0.2.0</summary> ## [0.2.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-vercel-messages-0.1.0...@launchdarkly/ai-vercel-messages-0.2.0) (2026-10-09) ### Features * **AIC-3408:** add Vercel AI SDK messages and agents adapters ([#83](#83)) ([7d08c9c](7d08c9c)) * **AIC-3495:** record which public helpers an application calls ([#115](#115)) ([aeb4019](aeb4019)) ### Bug Fixes * **deps:** depend on the @launchdarkly/ai-server release each package needs ([#119](#119)) ([9c2a56b](9c2a56b)) * **langchain:** stop forwarding additionalModelRequestFields to ChatBedrockConverse ([f6268fd](f6268fd)) * pass AI Config model parameters through to every provider handler ([#73](#73)) ([993225f](993225f)) * **vercel-messages:** map model.parameters onto AI SDK call settings ([d2a52ae](d2a52ae)) * **vercel:** never forward headers, providerOptions, maxRetries or timeout from model.parameters ([0a616fb](0a616fb)) * **vercel:** send image content as AI SDK file parts ([#99](#99)) ([2856abc](2856abc)) * **vercel:** tag vercelEvaluate spans with run identity ([#100](#100)) ([d32bede](d32bede)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.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** > **Release Please monorepo cut** that bumps published versions in `.release-please-manifest.json`, each package’s `package.json` / `src/version.ts`, and adds matching **CHANGELOG** sections (including first changelogs for the Vercel packages). Provider packages now depend on **`@launchdarkly/ai-server` ^0.4.0**. > > The documented release for **`@launchdarkly/ai-server` 0.4.0** (and aligned provider bumps) includes **dual ESM + CommonJS builds**, **agent graph node streaming**, **per-node tracking events** and **public-helper usage telemetry**, **`initClient` / `shutdownTelemetry` lifecycle fixes**, and **experimental Agent Skills** under `@launchdarkly/ai-server/experimental`. Cross-cutting fixes in the notes cover **AI Config `model.parameters` forwarding** (allowlists, snake_case → camelCase), **message-handler tool authorization (SEC-9507)**, and **Vercel adapter** parameter mapping and multimodal content handling. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 4acc72c. 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>
Summary
Pins
@launchdarkly/ai-serverto a specific version rather than"*", and uses thenode-workspaceplugin forrelease-pleaseto automatically update it as part of the release workflow.Details
Every package that depends on
@launchdarkly/ai-serverasks for"*". A consumer whose lockfile already holds an older ai-server keeps it when they upgrade a handler or@launchdarkly/ai-node, because"*"is still satisfied. That is already a problem on main:normalizeModelParameters/pickForwardedModelParameters, which published@launchdarkly/ai-server@0.3.0does not export. As it stands, the next release (chore: release main #85) would publish handlers that fail at import against a locked 0.3.0.@launchdarkly/ai-node/experimentalre-exports@launchdarkly/ai-server/experimental. A pre-release review installed the packed ai-node with the published ai-server 0.3.0 and gotERR_PACKAGE_PATH_NOT_EXPORTED.Change
release-please-config.json: add thenode-workspaceplugin, so each release PR rewrites dependents' ranges to the version it releases."*"→"^0.3.0". The plugin keeps a^/~/>=prefix, but it turns"*"into an exact pin (0.4.0) and keeps it exact from then on.Why not just pin
^0.4.0nowYarn v1 links a workspace sibling only when its version satisfies the range. Local
packages/clientstays at 0.3.0 until the release PR bumps it, so^0.4.0makes yarn go to npm, where 0.4.0 doesn't exist, andyarn install --frozen-lockfilefails withCouldn't find any versions for "@launchdarkly/ai-server" that matches "^0.4.0".^0.3.0links the local package now, and^0.4.0links it once the release PR has bumped it.yarn.lockis unchanged either way, since yarn v1 doesn't lock workspace packages.Policy change to be aware of
node-workspacegives every dependent a patch release, with a "Dependencies" changelog entry, whenever ai-server releases. It does this even when the dependent has no changes of its own, and release-please 17.6.0 has no option to turn it off (always-link-localis parsed but never read: googleapis/release-please#2876). The nine dependents are already in the pending release, so this release is unaffected.Verification
yarn install --frozen-lockfile,yarn lint:pkg(sherif), and the biome pre-commit hooks pass.release-please release-pr --dry-run(17.6.0, the version release-please-action v5.0.0 bundles) against this branch. It proposes the same versions as chore: release main #85: ai-server 0.4.0, ai-node 0.3.0, ai-otel 0.2.0, handlers 0.4.0, vercel-* 0.2.0. Each of the nine dependents gets@launchdarkly/ai-server bumped from ^0.3.0 to ^0.4.0in itspackage.jsonand changelog.Merge this before #85. It doesn't conflict with #71, which doesn't touch these dependency lines or the release config.
The Python SDK has the same unpinned
launchdarkly-ai-serverdependencies, but doesn't need a similar change yet.🤖 Generated with Claude Code, updated by @XieX
Note
Overview
Replaces wildcard
@launchdarkly/ai-serverdependencies ("*") with^0.3.0across nine workspace packages (ai-node, claude/openai/langchain/vercel agents and messages). That forces installs/upgrades to pull a compatible ai-server instead of keeping an older lockfile version that still satisfies*, which was breaking imports and experimental re-exports against published 0.3.0.Adds the
node-workspaceplugin torelease-please-config.jsonso future release PRs automatically bump dependents’ ai-server ranges when packages/client releases (e.g.^0.3.0→^0.4.0on the next cut).Reviewed by Cursor Bugbot for commit 1f3b9d3. Bugbot is set up for automated code reviews on this repo. Configure here.