SIGN IN SIGN UP

chore(deepagents): widen langsmith peer range to >=0.7.1 <0.10.0 (#776)

`langsmith` is declared as `^0.7.1`, which resolves to at most
**0.7.17** — the last release on that line. langsmith is now on 0.9.x,
so the range is pinned to a line it has moved off.

This matters more than a stale range usually would, because `langsmith`
is a real **dependency** of `@langchain/core` (`>=0.5.0 <1.0.0`), not
only a peer. So the narrow range doesn't just warn — it splits installs
across two langsmith copies, and two copies means two sets of
module-level singletons.

That split is already present in this workspace:

```
deepagents link:../../libs/deepagents
└── langsmith 0.7.10          <-- constrained by ^0.7.1
langchain 1.5.10
  └── langsmith 0.8.9
@langchain/langgraph 1.4.12
  └── langsmith 0.8.9
```

After this change the lockfile collapses to a single `langsmith@0.8.9`.

It also currently blocks downstream consumers: a service that bumps to
langsmith 0.9.x while depending on deepagents gets both an unmet-peer
warning and the dual-copy split, which surfaces as `tsc` errors like
*"Types have separate declarations of a private property 'apiKey'"*
where a `Client` crosses into `@langchain/core`'s tracer types.

### Why `<0.10.0` and not `<1.0.0`

langsmith is pre-1.0 and ships breaking changes in minor bumps — the
generated v2 client paths moved from `/v2/...` to `/api/v2/...` within
the 0.7 → 0.8 minor, for example. So a new minor should be adopted
deliberately rather than pre-authorized. `<0.10.0` covers every line
that exists today and forces a conscious bump at 0.10.

### Why widen rather than move to `^0.9`

Raising the floor to 0.9 would be a breaking change for consumers still
on 0.7.x/0.8.x, so it would need a major bump. Widening is
backward-compatible and unblocks the same people.

`deepagents`' langsmith surface is small — `Client`, plus
`SandboxClient` / `Sandbox` / `LangSmithResourceNotFoundError` /
`LangSmithSandboxError` and four option types from
`langsmith/experimental/sandbox` — and all of it is present and
unchanged across 0.8 and 0.9.

## Test Plan

- [x] `pnpm --filter deepagents typecheck` on the deduped 0.8.9
resolution — clean
- [x] Same, with `langsmith` forced to 0.9.0 — clean
- [x] `pnpm --filter deepagents test:unit` against 0.9.0 — 43 files,
1395 tests passing, no type errors
- [x] `pnpm format:check` and `pnpm lint` — clean
- [x] Maintainer sanity-check on the upper bound; happy to use `<0.9.0`
if you'd rather not bless 0.9 yet

One thing I noticed but did not change: `langsmith` is a peer with no
corresponding `devDependencies` entry, so CI exercises whatever resolves
transitively (0.7.10 before this change, 0.8.9 after) rather than the
peer range's edges. Pinning a dev version would make the peer explicitly
tested — happy to add it here or leave it as a follow-up.

Authored by Claude (Claude Code).

---------

Signed-off-by: Hunter Lovell <40191806+hntrl@users.noreply.github.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Hunter Lovell <40191806+hntrl@users.noreply.github.com>
B
Bagatur committed
95afe3e2682622067a263d2d24129985535b0f3b
Parent: bcc2f5d
Committed by GitHub <noreply@github.com> on 8/21/2026, 7:06:16 PM