Skip to content

fix(AIC-3726): realign three usage IDs with the 1.0 factory names - #197

Merged
jeffdupont merged 1 commit into
mainfrom
jdupont/usage-id-realign
Oct 30, 2026
Merged

jeffdupont merged 1 commit into
mainfrom
jdupont/usage-id-realign

Conversation

@jeffdupont

@jeffdupont jeffdupont commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

What

Renames three $ld:ai:sdk:usage helper IDs (TESTING.md §3.27) so they match the factory names introduced by AIC-3686 / AIC-3687.

Factory (TS / Python / Go) Old ID New ID
createOpenAIMessagesHandler / create_openai_messages_handler / openaimessages.NewHandler openai-messages.createOpenAIHandler openai-messages.createOpenAIMessagesHandler
createLangChainMessagesHandler / create_langchain_messages_handler / langchainmessages.NewHandler langchain-messages.createLangChainHandler langchain-messages.createLangChainMessagesHandler
createOpenAIAgentsHandler / create_openai_agents_handler / openaiagents.NewHandler openai-agents.createOpenAIAgentHandler openai-agents.createOpenAIAgentsHandler

Changes: the three reportUsage calls, the sdk-usage.test.ts rows and payload assertions, and api-surface/*.txt. js-ai-sdk#165 renames the two messages IDs to the same strings, so whichever merges second has nothing to change on those lines.

Why

TESTING.md §3.27 freezes usage IDs, which is why the factory renames kept the old IDs. Nothing has published at 1.0 yet, so this realigns the three IDs once, in every SDK at the same time, before the 1.0 release PRs merge. The spec PR records this as the only pre-1.0 exception; the freeze holds from 1.0.0 on.

Tests

  • yarn build, yarn lint, yarn code:check, yarn api:check, yarn test:api-surface: passed.
  • Vitest: openai-messages 117 passed, langchain-messages 138 passed, openai-agents 136 passed.
  • Check that the test really covers the ID: putting the old ID back in openai-agents/src/handler.ts fails 2 of the 9 sdk-usage tests; the new ID passes all 9.

Links

🤖 Generated with Claude Code


Note

Overview
Renames three $ld:ai:sdk:usage helper strings so they match the public factory exports (createOpenAIMessagesHandler, createLangChainMessagesHandler, createOpenAIAgentsHandler) instead of the older shortened IDs.

Each rename is wired through reportUsage in the three handler packages, the usage= entries in api-surface/*.txt, and the sdk-usage.test.ts call maps and payload expectations. Runtime handler behavior is unchanged; only the telemetry identifier emitted on factory use updates.

Reviewed by Cursor Bugbot for commit ca2622a. Bugbot is set up for automated code reviews on this repo. Configure here.

Rename openai-messages.createOpenAIHandler, langchain-messages.createLangChainHandler
and openai-agents.createOpenAIAgentHandler to the factory names from AIC-3686 /
AIC-3687. One-time pre-1.0 exception to the TESTING.md §3.27 ID freeze.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@jeffdupont
jeffdupont force-pushed the jdupont/usage-id-realign branch from 2b98273 to ca2622a Compare October 29, 2026 23:15
@jeffdupont
jeffdupont marked this pull request as ready for review October 30, 2026 14:35
@jeffdupont
jeffdupont requested a review from a team October 30, 2026 14:35
jeffdupont added a commit to launchdarkly/go-ai-sdk that referenced this pull request Oct 30, 2026
## What

Renames three `$ld:ai:sdk:usage` helper IDs (TESTING.md §3.27) so they
match the factory names introduced by AIC-3686 / AIC-3687.

| Factory (TS / Python / Go) | Old ID | New ID |
| --- | --- | --- |
| `createOpenAIMessagesHandler` / `create_openai_messages_handler` /
`openaimessages.NewHandler` | `openai-messages.createOpenAIHandler` |
`openai-messages.createOpenAIMessagesHandler` |
| `createLangChainMessagesHandler` / `create_langchain_messages_handler`
/ `langchainmessages.NewHandler` |
`langchain-messages.createLangChainHandler` |
`langchain-messages.createLangChainMessagesHandler` |
| `createOpenAIAgentsHandler` / `create_openai_agents_handler` /
`openaiagents.NewHandler` | `openai-agents.createOpenAIAgentHandler` |
`openai-agents.createOpenAIAgentsHandler` |

Changes: the three `ReportUsage` strings, the handler test assertions,
the doc comments that name the TypeScript factory, and `agents.md` in
langchainmessages and openaiagents. Go is not a registered language in
`api-surface/usage-ids.txt` yet, so the registry is not affected.

## Why

TESTING.md §3.27 freezes usage IDs, which is why the factory renames
kept the old IDs. Nothing has published at 1.0 yet, so this realigns the
three IDs once, in every SDK at the same time, before the 1.0 release
PRs merge. The spec PR records this as the only pre-1.0 exception; the
freeze holds from 1.0.0 on.

## Tests

- `go test` and `go vet` for `./openaimessages/...
./langchainmessages/... ./openaiagents/...`: passed.

## Links

- Jira: [AIC-3726](https://launchdarkly.atlassian.net/browse/AIC-3726)
(relates to AIC-3686, AIC-3687, AIC-3084)
- Sibling PRs (merge together, before the 1.0 release PRs js-ai-sdk#188
/ python-ai-sdk#242):
  - spec: launchdarkly/ai-sdks-monorepo#121
  - JS: launchdarkly/js-ai-sdk#197
  - Python: launchdarkly/python-ai-sdk#252
  - Go: #23

🤖 Generated with [Claude Code](https://claude.com/claude-code)


[AIC-3726]:
https://launchdarkly.atlassian.net/browse/AIC-3726?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Overview**
> Renames three **`$ld:ai:sdk:usage`** helper strings emitted by
**`NewHandler`** so they match the 1.0 factory naming used in the
JS/Python SDKs (pre-1.0 realignment per TESTING.md §3.27).
> 
> **`openaimessages`**: `openai-messages.createOpenAIHandler` →
**`createOpenAIMessagesHandler`**. **`langchainmessages`**:
`langchain-messages.createLangChainHandler` →
**`createLangChainMessagesHandler`**. **`openaiagents`**:
`openai-agents.createOpenAIAgentHandler` →
**`createOpenAIAgentsHandler`**.
> 
> Each package updates the **`ReportUsage`** call, doc comments /
**`agents.md`**, and **`TestSdkUsage`** (or equivalent) expectations.
Wrapper helpers such as **`openaiMessages`** / **`langchainMessages`**
are unchanged.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
801b85c. 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>
@jeffdupont
jeffdupont merged commit fc83c7a into main Oct 30, 2026
13 checks passed
@jeffdupont
jeffdupont deleted the jdupont/usage-id-realign branch October 30, 2026 15:40
jeffdupont added a commit to launchdarkly/python-ai-sdk that referenced this pull request Oct 30, 2026
## What

Renames three `$ld:ai:sdk:usage` helper IDs (TESTING.md §3.27) so they
match the factory names introduced by AIC-3686 / AIC-3687.

| Factory (TS / Python / Go) | Old ID | New ID |
| --- | --- | --- |
| `createOpenAIMessagesHandler` / `create_openai_messages_handler` /
`openaimessages.NewHandler` | `openai-messages.createOpenAIHandler` |
`openai-messages.createOpenAIMessagesHandler` |
| `createLangChainMessagesHandler` / `create_langchain_messages_handler`
/ `langchainmessages.NewHandler` |
`langchain-messages.createLangChainHandler` |
`langchain-messages.createLangChainMessagesHandler` |
| `createOpenAIAgentsHandler` / `create_openai_agents_handler` /
`openaiagents.NewHandler` | `openai-agents.createOpenAIAgentHandler` |
`openai-agents.createOpenAIAgentsHandler` |

Changes: the three `report_usage` calls and the `test_sdk_usage.py` rows
and payload assertions.

## Why

TESTING.md §3.27 freezes usage IDs, which is why the factory renames
kept the old IDs. Nothing has published at 1.0 yet, so this realigns the
three IDs once, in every SDK at the same time, before the 1.0 release
PRs merge. The spec PR records this as the only pre-1.0 exception; the
freeze holds from 1.0.0 on.

## Tests

- pytest: openai-messages 146 passed, langchain-messages 182 passed,
openai-agents 195 passed.
- Check that the test really covers the ID: putting the old ID back in
`openai-messages/.../handler.py` fails 2 of the 3 `test_sdk_usage.py`
tests; the new ID passes all 3.

## Links

- Jira: [AIC-3726](https://launchdarkly.atlassian.net/browse/AIC-3726)
(relates to AIC-3686, AIC-3687, AIC-3084)
- Sibling PRs (merge together, before the 1.0 release PRs js-ai-sdk#188
/ python-ai-sdk#242):
  - spec: launchdarkly/ai-sdks-monorepo#121
  - JS: launchdarkly/js-ai-sdk#197
  - Python: #252
  - Go: launchdarkly/go-ai-sdk#23

🤖 Generated with [Claude Code](https://claude.com/claude-code)


[AIC-3726]:
https://launchdarkly.atlassian.net/browse/AIC-3726?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Overview**
> Renames three **`$ld:ai:sdk:usage`** `helper` strings so they match
the public factory APIs (`create_*_messages_handler`,
`create_openai_agents_handler`) ahead of the 1.0 release.
> 
> **openai-messages:** `openai-messages.createOpenAIHandler` →
`openai-messages.createOpenAIMessagesHandler`
> 
> **langchain-messages:** `langchain-messages.createLangChainHandler` →
`langchain-messages.createLangChainMessagesHandler`
> 
> **openai-agents:** `openai-agents.createOpenAIAgentHandler` →
`openai-agents.createOpenAIAgentsHandler`
> 
> Each change is only the `report_usage(...)` call in the package
handler and the matching expectations in `test_sdk_usage.py`
(parametrize rows and held-helper flush assertions). Handler behavior is
unchanged.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
d507430. 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>
@github-actions github-actions Bot mentioned this pull request Oct 30, 2026
jeffdupont pushed a commit that referenced this pull request Oct 30, 2026
🤖 I have created a release *beep* *boop*
---


<details><summary>@launchdarkly/ai-claude-agents: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-claude-agents-0.5.0...@launchdarkly/ai-claude-agents-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
* **SEC-9507:** enable Claude native tools only when the active
variation attaches them
* **claude-agents:** honour the config's max_tokens and disable thinking
unless the config asks
([#183](#183))
* **skills:** rename FDv2SkillStore to LaunchDarklySkillStore
([#172](#172))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))

### Features

* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
([8dbe2ec](8dbe2ec))
* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))
* **skills:** give Claude Agents runs the skills attached to their
variation ([#136](#136))
([df16ba0](df16ba0))
* **skills:** rename FDv2SkillStore to LaunchDarklySkillStore
([#172](#172))
([d3e7c5f](d3e7c5f))


### Bug Fixes

* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))
([c6c00fc](c6c00fc))
* **claude-agents:** honour the config's max_tokens and disable thinking
unless the config asks
([#183](#183))
([f58ce21](f58ce21))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))
* **SEC-9507:** dispatch litellm-messages tool calls only to tools
offered for the request
([6926e8a](6926e8a))
* **SEC-9507:** enable Claude native tools only when the active
variation attaches them
([6926e8a](6926e8a))
* **SEC-9507:** pass handlers only the tools attached to the active
variation
([6926e8a](6926e8a))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-claude-messages: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-claude-messages-0.5.0...@launchdarkly/ai-claude-messages-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))

### Features

* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))
([c6c00fc](c6c00fc))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-langchain-agents: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-langchain-agents-0.5.0...@launchdarkly/ai-langchain-agents-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
* **AIC-3439:** let wildcard handlers accept only named providers
([#111](#111))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))

### Features

* **AIC-3439:** let wildcard handlers accept only named providers
([#111](#111))
([9371975](9371975))
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
([8dbe2ec](8dbe2ec))
* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3592:** make native LangGraph hand-offs complete
([#192](#192))
([025f2ce](025f2ce))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))
([c6c00fc](c6c00fc))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-langchain-messages: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-langchain-messages-0.5.0...@launchdarkly/ai-langchain-messages-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
* **AIC-3439:** let wildcard handlers accept only named providers
([#111](#111))
* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))

### Features

* **AIC-3439:** let wildcard handlers accept only named providers
([#111](#111))
([9371975](9371975))
* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
([15a0d37](15a0d37))
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
([8dbe2ec](8dbe2ec))
* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3726:** realign three usage IDs with the 1.0 factory names
([#197](#197))
([fc83c7a](fc83c7a))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-litellm-agents: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-litellm-agents-0.2.0...@launchdarkly/ai-litellm-agents-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.

### Features

* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-litellm-messages: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-litellm-messages-0.2.0...@launchdarkly/ai-litellm-messages-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **SEC-9507:** enable Claude native tools only when the active
variation attaches them
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))

### Features

* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))
([c6c00fc](c6c00fc))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))
* **SEC-9507:** dispatch litellm-messages tool calls only to tools
offered for the request
([6926e8a](6926e8a))
* **SEC-9507:** enable Claude native tools only when the active
variation attaches them
([6926e8a](6926e8a))
* **SEC-9507:** pass handlers only the tools attached to the active
variation
([6926e8a](6926e8a))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-node: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-node-0.4.0...@launchdarkly/ai-node-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **evaluations:** promote Evaluations from Code to core
([#181](#181))
* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
* **skills:** rename FDv2SkillStore to LaunchDarklySkillStore
([#172](#172))

### Features

* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
([15a0d37](15a0d37))
* **evaluations:** promote Evaluations from Code to core
([#181](#181))
([676a2ed](676a2ed))
* **skills:** rename FDv2SkillStore to LaunchDarklySkillStore
([#172](#172))
([d3e7c5f](d3e7c5f))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-openai-agents: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-openai-agents-0.5.0...@launchdarkly/ai-openai-agents-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
* **AIC-3687:** rename createOpenAIAgentHandler to
createOpenAIAgentsHandler
([#174](#174))

### Features

* **AIC-3687:** rename createOpenAIAgentHandler to
createOpenAIAgentsHandler
([#174](#174))
([cfba4d2](cfba4d2))
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
([8dbe2ec](8dbe2ec))
* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3726:** realign three usage IDs with the 1.0 factory names
([#197](#197))
([fc83c7a](fc83c7a))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-openai-messages: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-openai-messages-0.5.0...@launchdarkly/ai-openai-messages-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))

### Features

* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
([15a0d37](15a0d37))
* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))
([c6c00fc](c6c00fc))
* **AIC-3726:** realign three usage IDs with the 1.0 factory names
([#197](#197))
([fc83c7a](fc83c7a))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-otel: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-otel-0.3.0...@launchdarkly/ai-otel-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** spans carry launchdarkly.project_id instead of
highlight.project_id

### Bug Fixes

* **client:** stamp launchdarkly.project_id on the telemetry resource
([#176](#176))
([93fb412](93fb412))
</details>

<details><summary>@launchdarkly/ai-server: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-server-0.5.0...@launchdarkly/ai-server-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
* **AIC-3439:** let wildcard handlers accept only named providers
([#111](#111))
* **SEC-9507:** enable Claude native tools only when the active
variation attaches them
* **evaluations:** export each offline row as one trace
([#175](#175))
* **evaluations:** promote Evaluations from Code to core
([#181](#181))
* **evaluations:** remove default pass rate threshold
([#184](#184))
* **client:** spans carry launchdarkly.project_id instead of
highlight.project_id
* **AIC-3687:** rename createOpenAIAgentHandler to
createOpenAIAgentsHandler
([#174](#174))
* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
* **skills:** rename FDv2SkillStore to LaunchDarklySkillStore
([#172](#172))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))

### Features

* **AIC-3439:** let wildcard handlers accept only named providers
([#111](#111))
([9371975](9371975))
* **AIC-3686:** rename the LangChain and OpenAI messages factories to
*MessagesHandler
([#173](#173))
([15a0d37](15a0d37))
* **AIC-3687:** rename createOpenAIAgentHandler to
createOpenAIAgentsHandler
([#174](#174))
([cfba4d2](cfba4d2))
* **client:** add result variant and value to the feature_flag span
event ([#186](#186))
([8dbe2ec](8dbe2ec))
* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))
* **client:** point judge spans at the run they graded
([#200](#200))
([ba9c936](ba9c936))
* **evaluations:** export each offline row as one trace
([#175](#175))
([05a7eb1](05a7eb1))
* **evaluations:** promote Evaluations from Code to core
([#181](#181))
([676a2ed](676a2ed))
* **evaluations:** remove default pass rate threshold
([#184](#184))
([f3a3e37](f3a3e37))
* **skills:** give Claude Agents runs the skills attached to their
variation ([#136](#136))
([df16ba0](df16ba0))
* **skills:** rename FDv2SkillStore to LaunchDarklySkillStore
([#172](#172))
([d3e7c5f](d3e7c5f))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **AIC-3598:** type toolHandlers on the handler contract; declare
@langchain/anthropic
([#170](#170))
([c6c00fc](c6c00fc))
* **AIC-3601:** stop multi-edge routing text from asking a router for a
final answer
([#177](#177))
([10cce54](10cce54))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))
* **client:** stamp launchdarkly.project_id on the telemetry resource
([#176](#176))
([93fb412](93fb412))
* **evaluations:** update stale test import
([#189](#189))
([f4d8083](f4d8083))
* **evaluations:** warn once when a scorer returns an invalid score
([#199](#199))
([f43c888](f43c888))
* **graph:** report a node's own judge scores on its node_done stream
event ([#182](#182))
([1230f02](1230f02))
* **SEC-9507:** dispatch litellm-messages tool calls only to tools
offered for the request
([6926e8a](6926e8a))
* **SEC-9507:** enable Claude native tools only when the active
variation attaches them
([6926e8a](6926e8a))
* **SEC-9507:** pass handlers only the tools attached to the active
variation
([6926e8a](6926e8a))
</details>

<details><summary>@launchdarkly/ai-typesafe: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-typesafe-0.2.0...@launchdarkly/ai-typesafe-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.

### Features

* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-vercel-agents: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-vercel-agents-0.3.0...@launchdarkly/ai-vercel-agents-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.

### Features

* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.0
</details>

<details><summary>@launchdarkly/ai-vercel-messages: 1.0.0</summary>

##
[1.0.0](https://github.com/launchdarkly/js-ai-sdk/compare/@launchdarkly/ai-vercel-messages-0.3.0...@launchdarkly/ai-vercel-messages-1.0.0)
(2026-10-30)


### ⚠ BREAKING CHANGES

* **client:** conversation content is now captured on spans by default.
To keep it off, call configure({ options: { captureContent: false } })
once at startup.
* **client:** createHandler returns a new wrapper function rather than
adding providesFor to the function you pass and returning that same
function. Use the handler createHandler returns; the function you passed
in no longer carries providesFor.

### Features

* **client:** capture conversation content on spans by default and add
configure()
([d9c7fc3](d9c7fc3))


### Bug Fixes

* **AIC-3573:** never send a NativeTool to the model as a function tool
([#194](#194))
([ec43b85](ec43b85))
* **client:** return a new handler from createHandler instead of
changing the function passed in
([d9c7fc3](d9c7fc3))


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @launchdarkly/ai-server bumped from ^0.5.0 to ^1.0.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 **release-please** PR cuts **1.0.0** for every workspace package
(`@launchdarkly/ai-server`, `@launchdarkly/ai-node`, provider adapters,
`@launchdarkly/ai-otel`, `@launchdarkly/ai-typesafe`) by updating
`.release-please-manifest.json`, each `package.json` / `src/version.ts`,
and adding **1.0.0** changelog sections. Provider packages bump their
`@launchdarkly/ai-server` dependency to **^1.0.0**.
> 
> The release notes bundled here flag **breaking** upgrades integrators
must handle: **`configure()`** with **conversation content on spans by
default** (opt out via `captureContent: false`); **`createHandler`** now
returns a **new wrapper** instead of mutating the passed function;
renamed factories (**`*MessagesHandler`**,
**`createOpenAIAgentsHandler`**); **`LaunchDarklySkillStore`** (was
`FDv2SkillStore`); **Evaluations promoted to core** with offline
export/trace and threshold behavior changes; telemetry
**`launchdarkly.project_id`** (was `highlight.project_id`); richer
**`feature_flag`** span events; and **SEC-9507** tool scoping (native
tools and handlers only see tools on the active variation).
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
f87c9a6. 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>
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