Repository navigation
feat(skills)!: rename FDv2SkillStore to LaunchDarklySkillStore - #223
Conversation
The store's public name now says where skill content comes from rather than which protocol version carries it. The base SDKs keep "FDv2" out of their public type names (Python's DataSystemConfig, Go's internal datasystem.NewFDv2), and FDv2 is still Early Access, so a type named after it would date the API. Only the exported class is renamed. The `skills_fdv2` module, its wire-kind constants and the prose describing the FDv2 channel are unchanged, since they describe the protocol itself. The root export has not shipped yet (it arrives with the #210 promotion in the pending release), so no deprecated alias is kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jeffdupont
left a comment
There was a problem hiding this comment.
The rename itself is clean: no stray FDv2SkillStore left, the API report is regenerated, usage IDs are unaffected, and it matches launchdarkly/ai-sdks-monorepo#95's surface list.
One thing changed under it today: #206 merged at 17:01Z and published launchdarkly-ai-server 0.5.0, which exports FDv2SkillStore from the root (__init__.py:69,274 at the launchdarkly-ai-server-0.5.0 tag). So the "no released version has exported it" reason no longer holds, and code written against 0.5.0 (from launchdarkly_ai_server import FDv2SkillStore) would hit an ImportError on 1.0.0.
That's the same situation js-ai-sdk#172 handles with deprecated aliases "so 0.5.0 code still compiles". Let's match it here:
- Keep the old name as a deprecated alias of the new class (inline below), and add
"FDv2SkillStore"to__all__. - Run
make api-reportso the report lists both names. - Add one test that
FDv2SkillStore is LaunchDarklySkillStore. - Update the PR body's "No deprecated alias" section.
launchdarkly/ai-sdks-monorepo#95's A.12 Python row needs the same change ("No alias… renamed before any release exported it"). I'll comment there too. This rename is breaking, so all three need to merge before the 1.0 cut.
launchdarkly-ai-server 0.5.0 (#206) shipped FDv2SkillStore from the package root, so the old name stays importable until the next major release, matching the JS aliases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
## Summary **Breaking change.** Renames the store's exported names and keeps the old ones as `@deprecated` aliases. It's one of three companion PRs: launchdarkly/python-ai-sdk#223 and the spec change in launchdarkly/ai-sdks-monorepo#95. | Old (0.5.0) | New | | --- | --- | | `FDv2SkillStore` | `LaunchDarklySkillStore` | | `FDv2SkillStoreOptions` | `LaunchDarklySkillStoreOptions` | | `FDv2Mode` | `LaunchDarklySkillStoreMode` | **Why.** The base LaunchDarkly SDKs keep "FDv2" out of their public type names. Java has `Components.dataSystem()`, React Native has a `dataSystem` option, and Go's `NewFDv2` is in `internal/datasystem`. FDv2 is also still Early Access, so a type named after the protocol version would date the API. The new name says where the content comes from, and it pairs with `InMemorySkillStore`. **Why it's marked breaking (`!`).** The old names now resolve to `@deprecated` aliases instead of their own declarations. `FDv2SkillStore` is now an alias `const` plus a type, not a class, and the options and mode types are now aliases. The API compatibility check flags all three as breaking changes. Ordinary code written against 0.5.0 keeps compiling and running: `new FDv2SkillStore(...)` and `instanceof` still work, and a new test asserts it. The exception is code that augments the old `FDv2SkillStore` class declaration, which no longer has one to merge into. Before 1.0, `!` means a minor bump. `ai-server` is already going to 0.6.0 with breaking changes in release PR #171, so its version is unchanged. `ai-node` also gets a minor bump, because this PR touches one of its tests. The README's type table lists the aliases, which stay until the next major release. **What stays.** The `skills-fdv2.ts` module, the `FDV2_*` wire-kind constants, and prose that describes the FDv2 channel itself. Those name the protocol, which is accurate. **API surface.** `api-surface/ai-server.txt` marks the three old names as leaving (`-`) and adds the new ones (`+`). The API Extractor report is regenerated. ## Testing - `yarn test`: all workspaces pass (client: 1926 passed, 11 skipped) - `yarn typecheck`, `yarn code:check`, `yarn api:check` and `yarn api:surface` all pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Overview** > Renames the Agent Skills delivery store from **FDv2**-prefixed public types to **`LaunchDarklySkillStore`**, **`LaunchDarklySkillStoreOptions`**, and **`LaunchDarklySkillStoreMode`**, aligning naming with other LaunchDarkly SDKs and de-emphasizing the internal FDv2 protocol in customer-facing APIs. > > The implementation class and all user-facing errors, docs, and examples now use the new names. **`FDv2SkillStore`**, **`FDv2SkillStoreOptions`**, and **`FDv2Mode`** remain as **`@deprecated` aliases** (const/type aliases, not a separate class declaration) so 0.5.0 call sites keep compiling; **`new FDv2SkillStore(...)`** and **`instanceof`** still work via the alias. Package exports, API Extractor report, **`api-surface/ai-server.txt`**, and tests are updated accordingly—including a test that the deprecated name equals **`LaunchDarklySkillStore`**. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 7aaa1a8. 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>
## Summary Renames the Agent Skills delivery store, so Go matches launchdarkly/python-ai-sdk#223 and launchdarkly/js-ai-sdk#172. The spec change is launchdarkly/ai-sdks-monorepo#96, which follows launchdarkly/ai-sdks-monorepo#95. **Why.** FDv2 is still Early Access, and the base SDKs keep it out of their public type names. The store is now named for its source rather than its protocol. | Before | After | | --- | --- | | `FDv2SkillStore` | `LaunchDarklySkillStore` | | `NewFDv2SkillStore` | `NewLaunchDarklySkillStore` | | `FDv2SkillStoreOptions` | `LaunchDarklySkillStoreOptions` | | `FDv2Mode` | `LaunchDarklySkillStoreMode` | | `FDv2ModeStream` / `FDv2ModePoll` | `LaunchDarklySkillStoreModeStream` / `LaunchDarklySkillStoreModePoll` | **No deprecated aliases.** No Go version has been released: there are no tags or GitHub releases, and the release-please manifest is at `0.0.0`. So this is a clean rename, as in Python. TypeScript kept aliases because 0.5.0 shipped the old names. The rename covers `internal/skills`, the `aiserver/experimental` aliases and wrappers, the documented-surface test list, error and log strings that name the type, `README.md` and `agents.md`. **Unchanged:** the `internal/skills/fdv2_*.go` file names, the wire-kind constants (`FDv2PayloadKind`, `FDv2ObjectKind`), the unexported `newFDv2Reader`, the `TestFDv2*` test names, and prose that describes the FDv2 protocol. **Conflicts with #14.** #14 (promote Agent Skills to core) moves these files into `aiserver/skills_*.go` and keeps the FDv2 names. Whichever lands second has to carry the rename across. If #14 lands first, rerunning the same word-boundary replacement over `aiserver/` redoes this PR. ## Checks - `go build ./...`, `go vet ./...` and `go test -race ./...` pass. - `gofmt -l .` is clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code) <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Overview** > **Breaking rename** of the experimental Agent Skills delivery store public API so Go aligns with the Python and JS AI SDKs: types are named for LaunchDarkly as the content source rather than the FDv2 wire protocol. > > Public symbols move from `FDv2SkillStore` / `NewFDv2SkillStore` / `FDv2SkillStoreOptions` / `FDv2Mode` to **`LaunchDarklySkillStore`**, **`NewLaunchDarklySkillStore`**, **`LaunchDarklySkillStoreOptions`**, and **`LaunchDarklySkillStoreMode`** (with `LaunchDarklySkillStoreModeStream` / `LaunchDarklySkillStoreModePoll`). The change threads through `internal/skills`, `aiserver/experimental` aliases, README/agents docs, the pinned `skillsSurface` test list, and user-facing error/log strings (including `ErrStoreClosed` and `noStoreMessage`). > > **No deprecated aliases** — the package has not shipped a release yet. **Behavior and FDv2 transport are unchanged**: `fdv2_store.go` / `fdv2_reader.go` filenames, internal reader helpers, and `TestFDv2*` names stay as-is. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 4cd495a. 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>
🤖 I have created a release *beep* *boop* --- <details><summary>launchdarkly-ai-server: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-server-0.5.0...launchdarkly-ai-server-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **client:** init_client raises when the LaunchDarkly client did not initialize ([#254](#254)) * **evaluations:** route generation and judges to a scoped wildcard handler only for its named providers, and accept two scoped wildcards of one mode when their lists differ * **AIC-3439:** let wildcard handlers accept only named providers * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **evaluations:** promote Evaluations from Code to core ([#235](#235)) * **client:** capture conversation content by default ([#213](#213)) * **evaluations:** remove default pass rate threshold ([#238](#238)) * **evaluations:** set default pass rate threshold ([#226](#226)) * **client:** spans carry launchdarkly.project_id instead of highlight.project_id * **AIC-3687:** rename create_openai_agent_handler to create_openai_agents_handler ([#225](#225)) * **skills:** rename FDv2SkillStore to LaunchDarklySkillStore ([#223](#223)) ### Features * **AIC-3439:** let wildcard handlers accept only named providers ([454a4de](454a4de)) * **AIC-3687:** rename create_openai_agent_handler to create_openai_agents_handler ([#225](#225)) ([a7cdbc0](a7cdbc0)) * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) * **client:** point judge spans at the run they graded ([#253](#253)) ([863d423](863d423)) * **evaluations:** promote Evaluations from Code to core ([#235](#235)) ([0bc43a5](0bc43a5)) * **evaluations:** remove default pass rate threshold ([#238](#238)) ([882d099](882d099)) * **evaluations:** route generation and judges to a scoped wildcard handler only for its named providers, and accept two scoped wildcards of one mode when their lists differ ([454a4de](454a4de)) * **evaluations:** set default pass rate threshold ([#226](#226)) ([7ee368c](7ee368c)) * **skills:** rename FDv2SkillStore to LaunchDarklySkillStore ([#223](#223)) ([11f2c0b](11f2c0b)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) * **AIC-3601:** stop graph routing text inviting a router to answer for its target ([#230](#230)) ([27b8d09](27b8d09)) * **client:** init_client raises when the LaunchDarkly client did not initialize ([#254](#254)) ([6e66c00](6e66c00)) * **client:** stamp launchdarkly.project_id on the telemetry resource ([#229](#229)) ([5347558](5347558)) * **evaluations:** copy inline tool schemas and name both sources on a key collision ([#227](#227)) ([bfbdd4c](bfbdd4c)) * **evaluations:** send criterion errors as errorMessage and skip criteria for rows that did not generate ([#228](#228)) ([8b05b56](8b05b56)) * **graph:** report a node's own judge scores on its node_done stream event ([#236](#236)) ([2f3f9ee](2f3f9ee)) ### Documentation * **AIC-3692:** say which project id attribute the telemetry resource carries ([#239](#239)) ([64eff43](64eff43)) * state that Agent Skills and Evaluations from Code need 1.0.0 ([#191](#191)) ([fe3ef08](fe3ef08)) </details> <details><summary>launchdarkly-ai-python: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-python-0.4.0...launchdarkly-ai-python-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **evaluations:** promote Evaluations from Code to core ([#235](#235)) ### Features * **evaluations:** promote Evaluations from Code to core ([#235](#235)) ([0bc43a5](0bc43a5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) ### Documentation * state that Agent Skills and Evaluations from Code need 1.0.0 ([#191](#191)) ([fe3ef08](fe3ef08)) </details> <details><summary>launchdarkly-ai-claude-agents: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-claude-agents-0.3.0...launchdarkly-ai-claude-agents-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **claude-agents:** honour the config's max_tokens and disable thinking unless the config asks ([#237](#237)) * **client:** capture conversation content by default ([#213](#213)) * **AIC-3685:** make the internal provider helpers private ([#224](#224)) * **skills:** rename FDv2SkillStore to LaunchDarklySkillStore ([#223](#223)) ### Features * **AIC-3685:** make the internal provider helpers private ([#224](#224)) ([9afdb94](9afdb94)) * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) * **skills:** rename FDv2SkillStore to LaunchDarklySkillStore ([#223](#223)) ([11f2c0b](11f2c0b)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) * **claude-agents:** honour the config's max_tokens and disable thinking unless the config asks ([#237](#237)) ([a7ded1b](a7ded1b)) </details> <details><summary>launchdarkly-ai-claude-messages: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-claude-messages-0.3.0...launchdarkly-ai-claude-messages-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) * **AIC-3735:** send Claude Messages sampling parameters through extra_body ([#256](#256)) ([c6d0376](c6d0376)) </details> <details><summary>launchdarkly-ai-openai-agents: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-openai-agents-0.3.0...launchdarkly-ai-openai-agents-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) * **AIC-3685:** make the internal provider helpers private ([#224](#224)) * **AIC-3687:** rename create_openai_agent_handler to create_openai_agents_handler ([#225](#225)) ### Features * **AIC-3685:** make the internal provider helpers private ([#224](#224)) ([9afdb94](9afdb94)) * **AIC-3687:** rename create_openai_agent_handler to create_openai_agents_handler ([#225](#225)) ([a7cdbc0](a7cdbc0)) * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) * **AIC-3716:** build OpenAI native graph node tools with FunctionTool ([#251](#251)) ([b859b67](b859b67)) * **AIC-3726:** realign three usage IDs with the 1.0 factory names ([#252](#252)) ([1c4d904](1c4d904)) </details> <details><summary>launchdarkly-ai-vercel-agents: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-vercel-agents-0.2.0...launchdarkly-ai-vercel-agents-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </details> <details><summary>launchdarkly-ai-litellm-agents: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-litellm-agents-0.2.0...launchdarkly-ai-litellm-agents-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </details> <details><summary>launchdarkly-ai-openai-messages: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-openai-messages-0.3.0...launchdarkly-ai-openai-messages-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) * **AIC-3726:** realign three usage IDs with the 1.0 factory names ([#252](#252)) ([1c4d904](1c4d904)) </details> <details><summary>launchdarkly-ai-vercel-messages: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-vercel-messages-0.2.0...launchdarkly-ai-vercel-messages-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </details> <details><summary>launchdarkly-ai-litellm-messages: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-litellm-messages-0.2.0...launchdarkly-ai-litellm-messages-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </details> <details><summary>launchdarkly-ai-langchain-agents: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-langchain-agents-0.3.0...launchdarkly-ai-langchain-agents-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **evaluations:** route generation and judges to a scoped wildcard handler only for its named providers, and accept two scoped wildcards of one mode when their lists differ * **AIC-3439:** let wildcard handlers accept only named providers * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **AIC-3439:** let wildcard handlers accept only named providers ([454a4de](454a4de)) * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) * **evaluations:** route generation and judges to a scoped wildcard handler only for its named providers, and accept two scoped wildcards of one mode when their lists differ ([454a4de](454a4de)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3590:** build Python langchain-agents with langchain.agents.create_agent ([#175](#175)) ([8218626](8218626)) * **AIC-3592:** make native LangGraph hand-offs complete ([#246](#246)) ([bfb738f](bfb738f)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </details> <details><summary>launchdarkly-ai-langchain-messages: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-langchain-messages-0.3.0...launchdarkly-ai-langchain-messages-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **evaluations:** route generation and judges to a scoped wildcard handler only for its named providers, and accept two scoped wildcards of one mode when their lists differ * **AIC-3439:** let wildcard handlers accept only named providers * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **AIC-3439:** let wildcard handlers accept only named providers ([454a4de](454a4de)) * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) * **evaluations:** route generation and judges to a scoped wildcard handler only for its named providers, and accept two scoped wildcards of one mode when their lists differ ([454a4de](454a4de)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3573:** never send a NativeTool to the model as a function tool ([#248](#248)) ([73caeae](73caeae)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) * **AIC-3726:** realign three usage IDs with the 1.0 factory names ([#252](#252)) ([1c4d904](1c4d904)) </details> <details><summary>launchdarkly-ai-opencode-agents: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-opencode-agents-0.3.0...launchdarkly-ai-opencode-agents-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </details> <details><summary>launchdarkly-ai-typesafe: 1.0.0</summary> ## [1.0.0](launchdarkly-ai-typesafe-0.2.0...launchdarkly-ai-typesafe-1.0.0) (2026-10-30) ### ⚠ BREAKING CHANGES * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) * **client:** capture conversation content by default ([#213](#213)) ### Features * **client:** add result variant and value to the feature_flag span event ([#240](#240)) ([040d487](040d487)) * **client:** capture conversation content by default ([#213](#213)) ([77a7cf5](77a7cf5)) ### Bug Fixes * **AIC-3568:** give the barrel core's __all__, and drop private-spec references ([#234](#234)) ([88e57e6](88e57e6)) * **AIC-3598:** make Python packaging and public types GA-ready ([#218](#218)) ([5860b40](5860b40)) </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 moves every monorepo package to **1.0.0** and records the GA release in changelogs. It updates `.release-please-manifest.json`, each package’s `pyproject.toml` / `__version__`, and prepends **1.0.0** notes to every `CHANGELOG.md`. > > Handler and barrel packages now require **`launchdarkly-ai-server>=1.0.0,<2`**, so installs must upgrade the core client in lockstep with adapters. > > There is **no new application logic** in this diff—only release metadata. The changelog text still matters for reviewers: it summarizes breaking work already on `main`, including **Evaluations from Code promoted to core**, **conversation content captured by default**, **`init_client` failing when LD init fails**, telemetry **`launchdarkly.project_id`**, renames like **`LaunchDarklySkillStore`** and **`create_openai_agents_handler`**, tightened **wildcard handler routing**, and **GA packaging / public `__all__`** cleanup. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 2e904f7. 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
Renames the exported
FDv2SkillStoreclass toLaunchDarklySkillStore. It's one of three companion PRs, with launchdarkly/js-ai-sdk#172 and the spec change in launchdarkly/ai-sdks-monorepo#95.Why. The base LaunchDarkly SDKs keep "FDv2" out of their public type names. Python's
ldclientusesDataSystemConfigand keeps theFDv2class underldclient/impl/. Go'sNewFDv2is ininternal/datasystem. FDv2 is also still Early Access: the Python and .NET changelogs and the data saving mode docs say so. A type named after the protocol version would date the API. The new name says where the content comes from, and it pairs withInMemorySkillStore.What changes. The class name, everywhere it appears: the root export,
__all__, the API report, error messages, docstrings, both READMEs,agents.md, the Claude Agents package's example, and tests.What stays. The
skills_fdv2module, theFDV2_*wire-kind constants, and prose that describes the FDv2 channel itself. Those name the protocol, which is accurate.FDv2SkillStorestays as a deprecated alias. 0.5.0 (#206, released 2026-10-27) exportsFDv2SkillStorefrom the root, so the old name is kept asFDv2SkillStore = LaunchDarklySkillStoreand stays in__all__until the next major release, matching the JS aliases. It's a plain alias rather than a warning shim, becausewarnings.deprecatedneeds Python 3.13 and the package supports 3.12. A test assertsFDv2SkillStore is LaunchDarklySkillStore. The title keeps!: the class's own name (__name__, reprs, the API report) changes, and the old name goes away in the next major release.Testing
pytest packages/client/tests packages/claude-agents/tests: 2170 passed, 1 skippedmake typecheck,ruff check,ruff format --checkandmake api-report-checkall passuv.lockis unchanged🤖 Generated with Claude Code
Note
Overview
Breaking rename: the public Agent Skills delivery store class is now
LaunchDarklySkillStoreinstead ofFDv2SkillStore. Imports fromlaunchdarkly_ai_server,__all__, the API report, and companion packages (e.g. Claude Agents examples) are updated accordingly.Unchanged: implementation still lives in
skills_fdv2.py, FDv2 wire/protocol naming in internals, and store behavior (FDv2 poll/stream channel, lifecycle, diagnostics). Docstrings and user-facing errors now sayLaunchDarklySkillStore.No shim: there is no deprecated alias—callers must switch the symbol name (aligned with JS AI SDK and monorepo spec changes).
Reviewed by Cursor Bugbot for commit a3d82cb. Bugbot is set up for automated code reviews on this repo. Configure here.