Skip to content

feat(skills)!: rename FDv2SkillStore to LaunchDarklySkillStore - #223

Merged
XieX merged 2 commits into
mainfrom
xie/rename-fdv2-skill-store
Oct 27, 2026
Merged

XieX merged 2 commits into
mainfrom
xie/rename-fdv2-skill-store

Conversation

@XieX

@XieX XieX commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Renames the exported FDv2SkillStore class to LaunchDarklySkillStore. 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 ldclient uses DataSystemConfig and keeps the FDv2 class under ldclient/impl/. Go's NewFDv2 is in internal/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 with InMemorySkillStore.

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_fdv2 module, the FDV2_* wire-kind constants, and prose that describes the FDv2 channel itself. Those name the protocol, which is accurate.

FDv2SkillStore stays as a deprecated alias. 0.5.0 (#206, released 2026-10-27) exports FDv2SkillStore from the root, so the old name is kept as FDv2SkillStore = LaunchDarklySkillStore and stays in __all__ until the next major release, matching the JS aliases. It's a plain alias rather than a warning shim, because warnings.deprecated needs Python 3.13 and the package supports 3.12. A test asserts FDv2SkillStore 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 skipped
  • make typecheck, ruff check, ruff format --check and make api-report-check all pass
  • uv.lock is unchanged

🤖 Generated with Claude Code


Note

Overview
Breaking rename: the public Agent Skills delivery store class is now LaunchDarklySkillStore instead of FDv2SkillStore. Imports from launchdarkly_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 say LaunchDarklySkillStore.

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.

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 jeffdupont left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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:

  1. Keep the old name as a deprecated alias of the new class (inline below), and add "FDv2SkillStore" to __all__.
  2. Run make api-report so the report lists both names.
  3. Add one test that FDv2SkillStore is LaunchDarklySkillStore.
  4. 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.

Comment thread packages/client/src/launchdarkly_ai_server/__init__.py
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>

@jeffdupont jeffdupont left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving 5ff2b49. The deprecated FDv2SkillStore alias, its __all__ entry, the API report line and the identity test cover what I asked for, and it now matches js-ai-sdk#172 and launchdarkly/ai-sdks-monorepo#95. Please merge alongside js-ai-sdk#172 before the 1.0 cut, then #95.

XieX added a commit to launchdarkly/js-ai-sdk that referenced this pull request Oct 27, 2026
## 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>
@XieX
XieX merged commit 11f2c0b into main Oct 27, 2026
11 checks passed
@XieX
XieX deleted the xie/rename-fdv2-skill-store branch October 27, 2026 20:10
@github-actions github-actions Bot mentioned this pull request Oct 27, 2026
XieX added a commit that referenced this pull request Oct 28, 2026
Picks up #223, #224 and #225 so the API compatibility check diffs against the
current base instead of attributing their declared breaking changes to this PR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
XieX added a commit to launchdarkly/go-ai-sdk that referenced this pull request Oct 28, 2026
## 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants