Skip to content

ci(python): run the agent-spec and claude-agent-sdk test suites - #2646

Open
BenTaylorDev wants to merge 1 commit into
mainfrom
ben1/ci-python-lanes-agentspec-claudesdk
Open

ci(python): run the agent-spec and claude-agent-sdk test suites#2646
BenTaylorDev wants to merge 1 commit into
mainfrom
ben1/ci-python-lanes-agentspec-claudesdk

Conversation

@BenTaylorDev

Copy link
Copy Markdown
Contributor

Follow-up to the CI coverage note in #2645.

Problem

unit-python-sdk.yml has a lane per python integration — langgraph, watsonx, adk-middleware, aws-strands, langroid, crew-ai, claude-managed-agents — except two. integrations/agent-spec/python and integrations/claude-agent-sdk/python ship a tests/ directory (49 and 110 tests today) and declare [tool.ag-ui.scripts] test = "python -m pytest", but nothing ran them:

  • the generic python job only runs sdks/python;
  • both packages appeared in paths: solely so the lockfiles job would verify their committed locks, which the comment there recorded: "agent-spec and claude-agent-sdk have no test lane, but they ship committed lockfiles that the lockfiles job below verifies."

So a change to either package could go green with none of its tests executing.

Change

One lane per package, copied verbatim from the langroid-python lane — same pinned actions/checkout, setup-uv and actions/cache refs, same fork-PR cache-key prefix, same uv sync --locked, same assert-lockfiles-unchanged guard. The runner is python -m pytest tests/ -v rather than unittest discover, because both suites use pytest fixtures and pytest-asyncio; this matches the crewai-python and claude-managed-agents-python lanes.

The paths: comment recording the gap is removed. The two path entries stay, so the new lanes trigger on changes to either package.

Testing

Ran the exact CI commands locally in a clean worktree at origin/main:

integrations/agent-spec/python        uv sync --locked  →  ok
                                     uv run --locked python -m pytest tests/ -q  →  49 passed
integrations/claude-agent-sdk/python  uv sync --locked  →  ok
                                     uv run --locked python -m pytest tests/ -q  →  110 passed

--locked (not --frozen) is what the other lanes use, and it passes for both, so neither lock is stale. git status stayed clean afterwards, so neither install rewrites a lockfile and the assert-lockfiles-unchanged guard has nothing to trip on.

Workflow checks that cover this file, run locally:

actionlint .github/workflows/unit-python-sdk.yml               →  clean
bash scripts/release/verify-python-toolchain-pins.sh
  All 17 pin declaration(s) match .github/python-toolchain.env (uv 0.12.1, CPython 3.12).
  All 24 setup-uv invocation(s) resolve their version from it.

The pin script's counts include the two invocations this PR adds.

Note for a maintainer

The two new checks, agent-spec-python and claude-agent-sdk-python, are not in branch protection's required list. They will report on PRs but not block until someone adds them.

🤖 Generated with Claude Code

unit-python-sdk.yml had a lane per python integration except these two.
Both ship a tests/ directory (49 and 110 tests) and declare
[tool.ag-ui.scripts] test, but nothing ran them: the generic `python` job
only covers sdks/python, and the two packages appeared in `paths:` solely so
the `lockfiles` job would verify their committed locks. A change to either
package could go green without one of its tests executing.

Adds a lane for each, copied from the langroid one, with pytest as the runner
because both suites use pytest fixtures and pytest-asyncio. Drops the
`paths:` comment that recorded the gap.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@BenTaylorDev
BenTaylorDev requested a review from a team as a code owner September 4, 2026 17:40
# in CI. Five of the 13 are stale today, which is why closing this needs its own
# change: freezing them as-is turns dojo-e2e red, and relocking all 13
# pulls in dependency churn well beyond a toolchain pin.
agent-spec-python:
- name: Detect fork PR
id: fork-check
run: |
if [[ "${{ github.event_name }}" == "pull_request" && \
id: fork-check
run: |
if [[ "${{ github.event_name }}" == "pull_request" && \
"${GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME}" != "${{ github.repository }}" ]]; then
# reads as though the guard itself is broken, which is precisely the misleading
# signal action.yml's header argues against.
if: ${{ !cancelled() && steps.checkout.outcome == 'success' }}
uses: ./.github/actions/assert-lockfiles-unchanged
if: ${{ !cancelled() && steps.checkout.outcome == 'success' }}
uses: ./.github/actions/assert-lockfiles-unchanged

claude-agent-sdk-python:
- name: Detect fork PR
id: fork-check
run: |
if [[ "${{ github.event_name }}" == "pull_request" && \
id: fork-check
run: |
if [[ "${{ github.event_name }}" == "pull_request" && \
"${GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME}" != "${{ github.repository }}" ]]; then
# reads as though the guard itself is broken, which is precisely the misleading
# signal action.yml's header argues against.
if: ${{ !cancelled() && steps.checkout.outcome == 'success' }}
uses: ./.github/actions/assert-lockfiles-unchanged
@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Python Preview Packages

Version 0.0.0.dev1788543641 published to TestPyPI.

Warning: These packages are built from contributor code that may not yet have been vetted for correctness or security. Install at your own risk and do not use in production.

Install with uv

Add the TestPyPI index to your pyproject.toml:

[[tool.uv.index]]
name = "testpypi"
url = "https://test.pypi.org/simple/"
explicit = true

Then install the packages you need:

# Core SDK
uv add 'ag-ui-protocol==0.0.0.dev1788543641' --index testpypi

# Integrations (each already depends on the matching ag-ui-protocol preview)
uv add 'ag-ui-langgraph==0.0.0.dev1788543641' --index testpypi
uv add 'ag-ui-crewai==0.0.0.dev1788543641' --index testpypi
# NOTE: ag-ui-agent-spec depends on pyagentspec (git-only, not on PyPI).
# You will need to install pyagentspec separately from its git repo.
uv add 'ag-ui-agent-spec==0.0.0.dev1788543641' --index testpypi
uv add 'ag_ui_adk==0.0.0.dev1788543641' --index testpypi
uv add 'ag_ui_strands==0.0.0.dev1788543641' --index testpypi

Install with pip

pip install \
  --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple/ \
  ag-ui-protocol==0.0.0.dev1788543641

Use --extra-index-url https://pypi.org/simple/ so pip can resolve
transitive dependencies (pydantic, fastapi, etc.) from real PyPI.


Commit: d215f3c

@pkg-pr-new

pkg-pr-new Bot commented Sep 4, 2026

Copy link
Copy Markdown

Open in StackBlitz

@ag-ui/a2a-middleware

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/a2a-middleware@2646

@ag-ui/a2ui-middleware

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/a2ui-middleware@2646

@ag-ui/event-throttle-middleware

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/event-throttle-middleware@2646

@ag-ui/mcp-apps-middleware

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/mcp-apps-middleware@2646

@ag-ui/mcp-middleware

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/mcp-middleware@2646

@ag-ui/a2a

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/a2a@2646

@ag-ui/adk

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/adk@2646

@ag-ui/ag2

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/ag2@2646

@ag-ui/agno

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/agno@2646

@ag-ui/aws-strands

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/aws-strands@2646

@ag-ui/claude-agent-sdk

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/claude-agent-sdk@2646

@ag-ui/claude-managed-agents

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/claude-managed-agents@2646

@ag-ui/crewai

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/crewai@2646

@ag-ui/langchain

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/langchain@2646

@ag-ui/langgraph

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/langgraph@2646

@ag-ui/llamaindex

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/llamaindex@2646

@ag-ui/mastra

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/mastra@2646

@ag-ui/pydantic-ai

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/pydantic-ai@2646

@ag-ui/vercel-ai-sdk

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/vercel-ai-sdk@2646

@ag-ui/watsonx

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/watsonx@2646

@ag-ui/a2ui-toolkit

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/a2ui-toolkit@2646

create-ag-ui-app

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/create-ag-ui-app@2646

@ag-ui/client

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/client@2646

@ag-ui/core

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/core@2646

@ag-ui/encoder

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/encoder@2646

@ag-ui/proto

pnpm add https://pkg.pr.new/ag-ui-protocol/ag-ui/@ag-ui/proto@2646

commit: 2e24e19

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