Skip to content

Commit 4ad75f7

Browse files
feat(packaging): split into slim Stainless-managed client + hand-authored ADK overlay
Inverts the package-ownership direction so Stainless owns what it natively generates and the hand-authored ADK overlay lives in its own subdir. Layout changes: - src/agentex/lib/ → adk/src/agentex/lib/ (`git mv`) - Root pyproject.toml: renamed agentex-sdk → agentex-sdk-client; dropped the 38 ADK deps; reverted requires-python to >= 3.11 (slim has no 3.12-only imports); removed the `agentex` CLI entry point. - New adk/pyproject.toml: name = agentex-sdk; depends on agentex-sdk-client + 31 ADK deps; requires-python >= 3.12; ships only agentex/lib/*; owns the `agentex` CLI entry point. Net effect for consumers: - pip install agentex-sdk → same as today (heavy install) - pip install agentex-sdk-client → NEW slim option (6 deps, REST client only) Non-breaking. agentex-sdk now depends on agentex-sdk-client, so existing consumers transitively get the slim client deps without any code change. Why invert: the previous design (slim sibling under client/, heavy at root) required hand-modifying Stainless's emitted root pyproject.toml — risky under codegen 3-way merge. With the inversion: - Root pyproject.toml is 100% Stainless-owned (no manual edits to fight) - ADK overlay is self-contained in adk/ — preserved via `keep_files` - The future repo split (Option B in AGX1-292) becomes trivially `mv adk/ ../scale-agentex-adk/` Required Stainless dashboard work before this can ship: - Set targets.python.options.package_name = "agentex-sdk-client" - Reduce dashboard's dep list to the 6 bare-client deps - Add `adk/**` to keep_files Required PyPI work: - Claim agentex-sdk-client package name; add token to repo secrets - agentex-sdk publishing token moves to publish from adk/ (or stays in same repo, just sourced from adk/) Verified locally with Python 3.13: - Both wheels build cleanly (slim: 154 files, 6 deps; heavy: agentex/lib/ only, 32 deps including agentex-sdk-client) - Dual-install: no file conflicts; all imports resolve from both packages Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 0f177c9 commit 4ad75f7

350 files changed

Lines changed: 154 additions & 43 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

adk/README.md

Lines changed: 32 additions & 0 deletions

adk/pyproject.toml

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
[project]
2+
# Hand-authored ADK overlay for agentex. This package contributes only
3+
# `agentex/lib/*` to the agentex.* namespace; the REST client surface
4+
# (agentex/{__init__.py, _*.py, types/, resources/}) ships from the slim
5+
# sibling package `agentex-sdk-client` which is pinned as a runtime dep.
6+
#
7+
# This entire `adk/` directory must be preserved across Stainless codegen
8+
# via `keep_files: ["adk/**"]` in the Stainless dashboard config.
9+
name = "agentex-sdk"
10+
version = "0.11.4"
11+
description = "Agent Development Kit (ADK) overlay for the Agentex API — FastACP server, Temporal workflows, LLM provider integrations, observability"
12+
license = "Apache-2.0"
13+
authors = [
14+
{ name = "Agentex", email = "roxanne.farhad@scale.com" },
15+
]
16+
readme = "README.md"
17+
18+
dependencies = [
19+
"agentex-sdk-client",
20+
# CLI surface (agentex.lib.cli.*, agentex.lib.sdk.config.*)
21+
"typer>=0.16,<0.17",
22+
"questionary>=2.0.1,<3",
23+
"rich>=13.9.2,<14",
24+
"yaspin>=3.1.0",
25+
"pyyaml>=6.0.2,<7",
26+
"python-on-whales>=0.73.0,<0.74",
27+
"kubernetes>=25.0.0,<36.0.0",
28+
"jsonref>=1.1.0,<2",
29+
"jsonschema>=4.23.0,<5",
30+
"jinja2>=3.1.3,<4",
31+
"watchfiles>=0.24.0,<1.0",
32+
# ACP server (FastAPI app surface)
33+
"fastapi>=0.115.0",
34+
"starlette>=0.49.1",
35+
"uvicorn>=0.31.1",
36+
"aiohttp>=3.10.10,<4",
37+
# Temporal workflows
38+
"temporalio>=1.26.0,<2",
39+
"cloudpickle>=3.1.1",
40+
# Async streaming infra
41+
"redis>=5.2.0,<8",
42+
# LLM provider integrations
43+
"litellm>=1.83.7,<2",
44+
"openai-agents==0.14.1",
45+
"openai>=2.2,<3", # Required by openai-agents; litellm now supports openai 2.x (issue #13711 resolved: https://github.com/BerriAI/litellm/issues/13711)
46+
"claude-agent-sdk>=0.1.0",
47+
"pydantic-ai-slim>=1.0,<2",
48+
"langgraph-checkpoint>=2.0.0",
49+
"scale-gp>=0.1.0a59",
50+
"scale-gp-beta>=0.2.0",
51+
"mcp>=1.4.1",
52+
# Observability
53+
"ddtrace>=3.13.0",
54+
"opentelemetry-api>=1.20.0",
55+
"opentelemetry-sdk>=1.20.0",
56+
"json_log_formatter>=1.1.1",
57+
]
58+
59+
# agentex/lib/* uses `from typing import override` (3.12+) in 19 files.
60+
# The slim agentex-sdk-client keeps 3.11 support.
61+
requires-python = ">= 3.12,<4"
62+
classifiers = [
63+
"Typing :: Typed",
64+
"Intended Audience :: Developers",
65+
"Programming Language :: Python :: 3.12",
66+
"Programming Language :: Python :: 3.13",
67+
"Programming Language :: Python :: 3.14",
68+
"Operating System :: OS Independent",
69+
"Topic :: Software Development :: Libraries :: Python Modules",
70+
"License :: OSI Approved :: Apache Software License",
71+
]
72+
73+
[project.urls]
74+
Homepage = "https://github.com/scaleapi/scale-agentex-python"
75+
Repository = "https://github.com/scaleapi/scale-agentex-python"
76+
77+
[project.scripts]
78+
agentex = "agentex.lib.cli.commands.main:app"
79+
80+
[build-system]
81+
requires = ["hatchling"]
82+
build-backend = "hatchling.build"
83+
84+
# Ship only agentex/lib/*. The rest of agentex.* (the Stainless-generated
85+
# client) ships from the sibling agentex-sdk-client package, which this
86+
# package pins as a runtime dep.
87+
[tool.hatch.build.targets.wheel]
88+
only-include = ["src/agentex/lib"]
89+
sources = ["src"]
90+
# Don't ship internal test files in the wheel; CLI Jinja templates
91+
# (test_agent.py.j2 etc.) are preserved because they don't match these globs.
92+
exclude = [
93+
"src/agentex/lib/**/tests/**",
94+
"src/agentex/lib/**/test_*.py",
95+
"src/agentex/lib/**/conftest.py",
96+
"src/agentex/lib/**/pytest.ini",
97+
]
98+
99+
[tool.hatch.build.targets.sdist]
100+
include = [
101+
"/pyproject.toml",
102+
"/README.md",
103+
"/src/agentex/lib/**",
104+
]
105+
exclude = [
106+
"/src/agentex/lib/**/tests/**",
107+
"/src/agentex/lib/**/test_*.py",
108+
"/src/agentex/lib/**/conftest.py",
109+
"/src/agentex/lib/**/pytest.ini",
110+
]
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)