feat(evals): add Deep Agents bench harness (integrations/deepagents-sdk + Python runner) - #2810
Draft
miguelg719 wants to merge 9 commits into
Draft
feat(evals): add Deep Agents bench harness (integrations/deepagents-sdk + Python runner)#2810miguelg719 wants to merge 9 commits into
miguelg719 wants to merge 9 commits into
Conversation
|
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Contributor
There was a problem hiding this comment.
All reported issues were addressed across 25 files
Architecture diagram
sequenceDiagram
participant EV as Evals Framework
participant TA as DeepagentsToolAdapter
participant SDK as Deepagents SDK (TS)
participant PY as Python Runner (uv/run_eval.py)
participant MCP as MCP Tool Servers
Note over EV,MCP: NEW: Deep Agents Harness Integration Flow
EV->>TA: prepareDeepagentsToolAdapter()
TA->>TA: Resolve ToolSurface & Startup Profile
TA->>MCP: NEW: Mount MCP Servers (stdio)
TA-->>EV: Return config (cwd, env, mcpServers)
EV->>SDK: runDeepagentsSession(prompt, config)
SDK->>PY: NEW: Spawn process via 'uv'
SDK->>PY: NEW: Write JSON config to stdin (prompt, model, mcp_servers)
loop Agent Loop (LangGraph)
PY->>PY: Reason/Generate Tool Call
PY->>SDK: NEW: Emit "assistant" & "tool_call" events (JSONL)
PY->>MCP: Invoke Tool (via MultiServerMCPClient)
MCP-->>PY: Return Observation
PY->>SDK: NEW: Emit "tool_result" event (JSONL)
opt AbortSignal triggered
SDK->>PY: CHANGED: Send SIGTERM to process group
Note over SDK,PY: Escalates to SIGKILL after 5s
end
end
PY->>SDK: NEW: Emit "final" & "usage" events (JSONL)
PY-->>SDK: Process exit
SDK->>SDK: NEW: Parse JSONL & normalize token usage
alt Signal Exit or Truncated Output
SDK-->>EV: Return status: "sdk_error"
else Success
SDK-->>EV: Return DeepagentsSessionResult
end
EV->>EV: NEW: deepagentsAdapter.fromHarnessResult()
Note over EV: Normalize JSONL events into Trajectory for verification
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
miguelg719
marked this pull request as draft
August 24, 2026 18:20
miguelg719
force-pushed
the
harness/wave-eve
branch
from
August 24, 2026 18:38
a3165cf to
746a16c
Compare
miguelg719
force-pushed
the
harness/wave-deepagents
branch
2 times, most recently
from
August 24, 2026 18:52
6ae0c5b to
368813e
Compare
…nner Phase 1 of the deepagents harness (no registry/planner wiring yet): - packages/integrations/deepagents/runner: uv project + run_eval.py that drives LangChain Deep Agents over persistent stdio MCP sessions and emits JSONL events (assistant, tool_call, tool_result, final, usage, error). - packages/integrations/deepagents-sdk: runDeepagentsSession spawns the runner via `uv run --project <dir> --locked python run_eval.py`, forwards AbortSignal as SIGTERM, and normalizes status/stopReason/tokenUsage. - packages/evals/framework: deepagentsToolAdapter (MCP mounts only), harnesses/deepagentsAdapter (events -> NormalizedToolCall), and deepagentsRunner mirroring codexRunner (prompt/parse duplicated on purpose until the shared externalRunner skeleton lands). - turbo/ci/vitest/evals package wiring for the new workspace package.
…arness core - define deepagentsHarness via defineExternalHarness and register it after codex - switch deepagentsRunner onto runExternalHarnessTask (marker result contract, normalized harness_* metrics, harnessStatus/harnessStopReason) - resolve --tool/--startup through the shared toolSurfaceResolution helpers (DEEPAGENTS_TOOL_SURFACES: stagehand_facade, playwright_mcp, chrome_devtools_mcp) - move the file/todo-tool guidance into DEEPAGENTS_SYSTEM_PROMPT - tests: registry/parse coverage for deepagents; three-harness flag guidance
…group cleanup, redaction, runner tool profiles, CI checks
…lip, redacted error events/iterationError, full redaction policy in Python runner
miguelg719
force-pushed
the
harness/wave-deepagents
branch
from
August 24, 2026 19:00
368813e to
bd1e627
Compare
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.
What
Adds
--harness deepagentsto evals. Deep Agents (LangChain/LangGraph) is a Python library with no CLI or Node SDK, so this adds a Python runner plus a TS session layer that spawns it.packages/integrations/deepagents/runner/run_eval.py—create_deep_agent+MultiServerMCPClientover the stagehand facade stdio server; emits JSONL events (tool_call,tool_result,finalwithEVAL_RESULT,usage); harness tool profiles disable summarization/subagents/filesystem/todo tools; pytest coverage.packages/integrations/deepagents-sdk—runDeepagentsSession: spawns the runner viauv, parses JSONL with bounded draining and malformed-line tolerance, process-group termination with SIGTERM→SIGKILL escalation, signal-terminated runs reported assdk_error, recursion-limit →max_turns, redaction.packages/evals/framework/deepagentsToolAdapter.ts/harnesses/deepagentsAdapter.ts—via:"mcp"mounts with bounded cleanup; events →NormalizedToolCall[].defineExternalHarness. CI: newDeep Agents runner checksjob (uv lock check + pytest) gated on runner path changes.Testing
uv run --locked pytest6/6.evals run b:webvoyager --harness deepagents --tool stagehand_facade -l 1 -t 1 -e browserbase): 5 Stagehand tool calls via the facade, final answer produced.Stacked on the eve PR. Implemented with Codex (gpt-5.6) under supervision; review blocker (signal exit reported as completed) fixed in-branch.
Summary by cubic
Adds a Deep Agents harness and Python runner so evals can run LangChain/LangGraph agents over MCP. Previously Deep Agents weren’t supported; now
--harness deepagentsmounts MCP servers and streams JSONL events to the verifier.--harness deepagentswith default modelopenai/gpt-5.4-miniand supported tool surfaces:stagehand_facade(default),playwright_mcp,chrome_devtools_mcp; resolves--tool/--startupvia shared helpers.deepagentsRunnerruns withrunExternalHarnessTask, normalizedharnessStatus/harnessStopReason, and usage mapping.packages/integrations/deepagents/runner/run_eval.py) keeps persistent MCP sessions and emits JSONL events:assistant,tool_call,tool_result,final(with eval result),usage,error; applies sanitize-then-clip and a full redaction policy (redactederror/iterationError); disables filesystem/todo/summarization via harness tool profiles (guidance moved into the system prompt).@browserbasehq/stagehand-integrations-deepagents-sdkspawns the runner viauv, parses JSONL with bounded drain and malformed-line tolerance, forwardsAbortSignalto the process group (SIGTERM→SIGKILL), reports signal exits assdk_error, and normalizes stop reason and token usage.deepagentsToolAdaptermounts MCP servers and startup profiles;harnesses/deepagentsAdapterconverts events toTrajectory; tests cover registry, adapter, runner, and session behavior.packages/integrations/deepagents/runner/**; vitest/turbo include the new SDK.Review/rollout
uv. Example: evals run b:webvoyager --harness deepagents --tool stagehand_facade -l 1 -t 1 -e browserbase.Written for commit bd1e627. Summary will update on new commits.