feat(harness): public adk facade + docs for the unified harness surface (PR 9)#423
Merged
Merged
Conversation
37421b6 to
df3461c
Compare
4da0747 to
e56cccc
Compare
ccbd5cf to
e3fa1cc
Compare
61bb331 to
8f6e65b
Compare
danielmillerp
approved these changes
Jun 22, 2026
| @@ -0,0 +1,196 @@ | |||
| # Unified Harness Surface | |||
c8c63d1 to
05120f3
Compare
8f6e65b to
423ba89
Compare
05120f3 to
c9a907c
Compare
423ba89 to
44a852a
Compare
c9a907c to
a04bf5e
Compare
Base automatically changed from
declan-scale/agx1-373-conformance-equivalence
to
next
June 22, 2026 20:09
44a852a to
78b36cd
Compare
…-375); cleanup Re-export UnifiedEmitter, SpanTracer, TurnUsage, TurnResult, HarnessTurn, StreamTaskMessage, OpenSpan, CloseSpan, and SpanSignal from agentex.lib.adk so agent authors can import the unified harness surface from the canonical public facade instead of the internal core.harness path (AGX1-375). Add adk/docs/harness.md covering the canonical StreamTaskMessage* stream, convert_<harness>_to_agentex_events taps, HarnessTurn protocol, UnifiedEmitter (yield_turn vs auto_send_turn), tracing-on-by-default, TurnUsage/TurnResult, and per-channel usage examples. Dead-code sweep: nothing safe to remove — the _async modules have not been migrated to use the new auto_send path yet (those are separate migration PRs), and the intentionally-kept _*_tracing handlers are not present in this branch. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rs, workaround markers, optional adk.harness namespace) Documents the deferred, breaking-ish cleanup to run as PR 10 once the whole harness-surface stack merges, the deprecation window passes, and the golden agent is migrated off the bespoke paths. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ile] The sync ACP example imported create_pydantic_ai_tracing_handler (deprecated) but never used it — only UnifiedEmitter and convert_pydantic_ai_to_agentex_events are referenced. Remove it so the example doesn't steer readers toward the deprecated handler. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…0 plan Folds the review finding (duplicated _FakeTracing/_FakeSpan test doubles, copy-pasted determinism test, five parallel harness-turn usage normalizers, three divergent sync-path structures, competing adk/__init__.py edits, and tutorial-scaffolding drift) into the existing post-merge cleanup plan as scope items 6-12, flagged non-breaking so they can land independently of the deprecation-gated removals. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ials The migrations added a second set of langgraph/pydantic-ai/openai tutorial agents alongside the ones already on next. The pre-existing ones demonstrate the deprecated bespoke-tracing path (they import create_*_tracing_handler), so retiring/migrating them is a hard prerequisite of item 1's symbol removal, not optional. Adds item 13 (with a replace-in-place vs keep-new decision), cross-references item 1, and gates item 13 alongside item 1. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolves the open naming decision in items 11/13: standardize on the numbered NNN_<name> convention and rename the new harness_* tutorials off the bare scheme, folding the rename into the replace-in-place retirement of the pre-unified tutorials (pydantic-ai/langgraph/openai take over their old numbered slots; codex gets fresh numbers; claude_code already compliant). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PR 9 stays scoped to the public adk facade + adk/docs/harness.md. The PR 10 cleanup plan now lives on declan-scale/pr10-harness-cleanup. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
599176a to
f58cfc9
Compare
declan-scale
added a commit
that referenced
this pull request
Jun 23, 2026
…ified-harness planning doc PR 10 is stacked on PR 9 (#423). The plan sequences the 13 cleanup-scope items plus a filesystem layout/naming consolidation (every harness -> _<harness>_sync.py + _<harness>_turn.py under _modules/, openai moved out of providers/_modules/) and a harness.md docs refresh. The pre-unified unified-harness-surface plan doc is removed now that the stack is merged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
UnifiedEmitter,SpanTracer,TurnUsage,TurnResult,HarnessTurn,StreamTaskMessage,OpenSpan,CloseSpan,SpanSignalfromagentex.lib.adk— additive, consistent with howconvert_pydantic_ai_to_agentex_events/convert_langgraph_to_agentex_eventsare already exported. Agent authors can now dofrom agentex.lib.adk import UnifiedEmitter, TurnUsage, ...without touching internalcore.harnesspaths.adk/docs/harness.md): covers the canonicalStreamTaskMessage*stream,convert_<harness>_to_agentex_eventstap contract,HarnessTurnprotocol,UnifiedEmitter(yield_turn vs auto_send_turn delivery modes), tracing-on-by-default semantics,TurnUsagefields,TurnResult, span derivation rules, and per-channel usage examples._asyncmodules (_pydantic_ai_async,_langgraph_async) still use directadk.streamingcalls — those migrations are separate PRs. The_*_tracinghandlers are not present on this branch.Test plan
uv run --all-packages --all-extras pytest tests/lib/core/harness/ -q— 45 passeduv run --all-packages python -c "from agentex.lib.adk import UnifiedEmitter"— OKuv run ruff check src/agentex/lib/adk/__init__.py— all checks passeduv run pyright src/agentex/lib/adk/__init__.py— 0 errors🤖 Generated with Claude Code
Greptile Summary
Confidence Score: 4/5
The import facade change is small, but the public API remains incomplete for the documented harness integration flow.
The review is based on a narrow diff with one clear public API gap in the newly added exports. Runtime verification was limited by local environment constraints, but the code-level issue is straightforward in the facade export list.
src/agentex/lib/adk/init.py
What T-Rex did
Comments Outside Diff (1)
src/agentex/lib/adk/__init__.py, line 16-22 (link)The new facade exports
UnifiedEmitterand the shared harness types, but it still leavesPydanticAITurn,LangGraphTurn, andOpenAITurnbehind private module paths. Agent authors can import the emitter and taps fromagentex.lib.adk, but attempts to use the same public path for the turn wrappers needed byyield_turn()orauto_send_turn()fail withImportError. Please re-export the existing turn classes and usage helpers so each shipped harness has a complete public import path.Prompt To Fix With AI
Prompt To Fix All With AI
Reviews (9): Last reviewed commit: "docs(harness-cleanup): move PR 10 plan o..." | Re-trigger Greptile