Compare commits

..
Author SHA1 Message Date
syachamaneni-lc 98f361f558 chore: merge main into dev package branch
Keep the upstream agent CLI and deployment validation while preserving
the dev release version and regional LangSmith dashboard URLs.

Validation: format, lint, and type checks pass; 487 CLI tests pass.
Two Docker-related failures also reproduce on unchanged origin/main.
2026-09-23 16:05:18 -07:00
syachamaneni-lc 56debf4f34 dev release 2026-09-23 16:01:07 -07:00
syachamaneni-lc ab851822c5 langgaph cli 2026-09-22 11:32:33 -07:00
4 changed files with 14 additions and 17 deletions
+1 -1
View File
@@ -1 +1 @@
__version__ = "0.4.32"
__version__ = "0.4.31.dev0"
+3 -13
View File
@@ -12,7 +12,6 @@ from collections.abc import Callable, Mapping, Sequence
from contextlib import contextmanager
from dataclasses import asdict, dataclass, field
from datetime import datetime, timezone
from functools import partial
from typing import Protocol, TypeVar
import click
@@ -1918,8 +1917,7 @@ OPT_AGENT_ID = click.option(
help="Logical agent ID (requires agent mode enabled for the tenant).",
)
OPT_AGENT_ENVIRONMENT = partial(
click.option,
OPT_AGENT_ENVIRONMENT = click.option(
"--agent-environment",
"environment",
envvar="LANGSMITH_AGENT_ENVIRONMENT",
@@ -2027,9 +2025,7 @@ def _deploy_base_options(
OPT_HOST_API_KEY,
OPT_HOST_DEPLOYMENT_NAME,
OPT_AGENT_ID,
OPT_AGENT_ENVIRONMENT()
if include_docker_args
else OPT_AGENT_ENVIRONMENT(type=str),
OPT_AGENT_ENVIRONMENT,
click.option(
"--deployment-id",
help=(
@@ -2176,12 +2172,6 @@ def deploy(ctx: click.Context, **_: object):
# otherwise, we return None here and click will proceed to actually run the subcommand (list or delete)
if ctx.invoked_subcommand is not None:
return
environment_param = next(
param for param in _deploy_cmd.params if param.name == "environment"
)
ctx.params["environment"] = environment_param.type_cast_value(
ctx, ctx.params["environment"]
)
if (
ctx.params.get("agent_id") is not None
or ctx.params.get("environment") is not None
@@ -2381,7 +2371,7 @@ def _deploy_cmd(
@OPT_HOST_API_KEY
@OPT_HOST_URL
@OPT_AGENT_ID
@OPT_AGENT_ENVIRONMENT()
@OPT_AGENT_ENVIRONMENT
@click.option(
"--name-contains",
default="",
+4 -3
View File
@@ -78,9 +78,10 @@ def _cloud_control_plane_host_for(langsmith_api_host: str) -> str:
def _cloud_dashboard_for(control_plane_host: str) -> str:
if control_plane_host.endswith(f".{CLOUD_CONTROL_PLANE_HOST}"):
region = control_plane_host[: -len(CLOUD_CONTROL_PLANE_HOST) - 1]
return f"https://{region}.{CLOUD_DASHBOARD_HOST}"
for api_host in (CLOUD_CONTROL_PLANE_HOST, CLOUD_API_HOST):
if control_plane_host.endswith(f".{api_host}"):
region = control_plane_host[: -len(api_host) - 1]
return f"https://{region}.{CLOUD_DASHBOARD_HOST}"
return CLOUD_DASHBOARD_URL
@@ -527,6 +527,12 @@ CLOUD = ("https://api.host.langchain.com", "https://smith.langchain.com")
("https://eu.api.host.langchain.com", "https://eu.smith.langchain.com"),
id="regional_control_plane_maps_to_regional_dashboard",
),
pytest.param(
"https://dev.api.smith.langchain.com/",
None,
("https://dev.api.smith.langchain.com", "https://dev.smith.langchain.com"),
id="dev_smith_api_maps_to_dev_dashboard",
),
],
)
def test_control_plane_endpoints_resolve(host_url, langsmith_endpoint, expected):