跳到主要内容

Change log

查看 Markdown

This page lists user-visible changes to the Dex Agents packages, newest first; each section covers the changes since the previous release of this component. All agents packages share one version line. The agents CHANGELOG in the repository has the full details of each release, including API names and upgrade steps.

0.5​

Not released yet. The next release, agents/v0.5.0, ships these changes.

Breaking​

  • Every package requires Dex SDK 1.45.0, so an application can use the SDK's Join helper with the agents packages, and for Worker-side Flow definition upload. The SDK version stays an exact pin. Before upgrading, read the breaking changes of SDK 1.43 and 1.45 in the Python, TypeScript, and Go SDK change logs: since SDK 1.45, a Step type with "-" can no longer start SubFlows. The agents packages start none. Dex Server still needs protocol 4: server-zd 0.1.17 or later.
  • Python and TypeScript cores: a Connector tool's default name now uses the Connector library's snake case, which also names the Python Step factories. An acronym stays one word: listStoryIDs becomes list_story_ids, not list_story_i_d_s, and getHTTPResponse becomes get_http_response. Only ASCII capitals start a word. A call stored under the old name finds no tool after the upgrade and ends as a removed tool's call does. To keep the old name, pass it as the tool's name. A recorded call then resumes under it. See Name the tools.
  • Python and TypeScript cores: a Mutation's defect now records outcome_unknown instead of failed, whatever agent.branches says, and is not retried. A Query's defect follows agent.branches: listed as rejected it is a rejection, otherwise it records failed. These rules, and the rule for uncertain, now apply before the required branches, so a defect or uncertain branch declared required no longer records succeeded. See Outcomes.
  • Python and TypeScript cores: a Mutation that uses the single-dispatch fence records outcome_unknown on every branch except the success branch when its fence checkpoints cannot prove that no request reached the provider. A single-attempt write records "not sent; the provider asked to retry later" only when a notSent or canResend marker shows that nothing was sent. classify_connector_branch (classifyConnectorBranch) takes a new optional may_have_dispatched (mayHaveDispatched).

Added​

  • McpToolSource follows the Dex MCP conventions. A tool definition's _meta key io.superdurable.dex/effect fixes the tool's effect class, and io.superdurable.dex/approval: recommended asks for approval, as a Connector manifest does. A session tool policy may raise such a tool's effect class or approval, but never lowers its effect class. Its writes run in the model's order. Servers without these keys behave as before.
  • McpToolSource.merge_tool_policies (mergeToolPolicies) merges the application's tool policies by the same rule for a framework adapter.
  • A tool result's _meta key io.superdurable.dex/outcome set to unknown records outcome_unknown, and rejected records failed. Either wins over isError.
  • The new npm package @superdurable/dex-agents-pi runs Pi agents on the built-in agent loop. Dex runs the agent loop, pi-ai makes each model call, and Pi tools run as Dex tool Steps.
  • The Dex Agents CLI commands are published for the first time: dex-agents-cli-core and six commands on PyPI, and @superdurable/dex-agents-cli-core and six commands on npm. Each command runs one agent harness in the terminal, such as dex-agents-claude-sdk or dex-agents-builtin, with the connectors MCP server's tools and local file, shell, web fetch, and browser tools as Dex tool Steps.
  • Python and TypeScript cores: user messages and tool results can carry images. Session state stores only an AgentImageReference; the bytes live in a MediaStore, such as S3MediaStore or LocalDirectoryMediaStore. The framework adapters, the built-in agent loop, and McpToolSource take an optional media store and show images to the model only when they have one. Send images only after every Worker of the Flow type runs 0.5.0. The Go core has no image input.

Changed​

  • A tool task poll may raise ToolOutcomeUnknownError. The session records outcome_unknown and stops polling. It used to fail the poll attempt.
  • The built-in agent loop has new names. The old names still work for one release, refer to the same objects, and are deprecated. Stored sessions, Flow types, and wire values are unchanged. Migrate as follows:
    • Python: module dex_agents.stepwise becomes dex_agents.builtin_loop. StepwiseAgentRunner becomes BuiltinLoopAgentRunner, stepwise_agent_session_flow becomes builtin_agent_session_flow, stepwise_agent_session_options becomes builtin_agent_session_options, and encode_stepwise_message and decode_stepwise_message become encode_builtin_loop_message and decode_builtin_loop_message. Each name read from the old module emits a DeprecationWarning.
    • TypeScript: subpath @superdurable/dex-agents/stepwise becomes @superdurable/dex-agents/builtin-loop. StepwiseAgentRunner becomes BuiltinLoopAgentRunner, and createStepwiseAgentSessionFlow becomes createBuiltinAgentSessionFlow.
    • Go: package stepwise becomes builtinloop. StepwiseAgentRunner becomes BuiltinLoopAgentRunner, NewStepwiseAgentRunner becomes NewBuiltinLoopAgentRunner, NewStepwiseAgentSessionFlow becomes NewBuiltinAgentSessionFlow, and EncodeStepwiseMessage and DecodeStepwiseMessage become EncodeBuiltinLoopMessage and DecodeBuiltinLoopMessage.
  • Error texts of the built-in agent loop no longer say "Stepwise": a session message the loop cannot read is now a "built-in agent loop item" in the Python and Go cores and a "built-in loop item" in the TypeScript core. In the Go and TypeScript cores, the error for a framework run state the loop cannot read says "built-in loop". The Go core's panic messages for a nil model client or definition start with builtinloop: instead of stepwise:. Python loggers now sit under dex_agents.builtin_loop.

Fixed​

  • Python and TypeScript Claude Agent SDK adapters: when the Claude Code CLI returns an error result, the turn's error now reads "the Claude Code CLI returned an error result (subtype ...)". It used to read "reported success" for an error result whose subtype is success, such as a failed login.

0.4​

Released 2026-11-10 as agents/v0.4.0.

Added​

  • ConnectorToolSource in the Python and TypeScript cores offers reviewed Connector operations to an agent as tools. The application names each operation with connector_tool (connectorTool). Nothing is exposed by default, and an operation whose manifest lacks agent.exposed is refused when the agent is defined. Needs Connector SDK 0.9.0. Reference.
  • Connector tool calls take their effect class and approval default from the Connector manifest, map the selected branch to succeeded, failed, or outcome_unknown, and cut results at 64 KiB by default. Connector writes of one model response run one at a time, in the model's order; once one does not succeed, the later ones record failed with skipped set. See Connectors as tools.
  • Every Python and TypeScript framework adapter takes tool sources, through tool_sources (toolSources), with a listing timeout of 10 seconds by default. Each call of a source tool runs once in its own tool Step.
  • Tool call contract: ToolOutcomeUnknownError, DeferredToolExecution.context, ToolCallStepOptions, and the AgentToolCall fields ordered_write, write_queued, skipped, and truncated_output_bytes. Records written by 0.2 decode unchanged.

Changed​

  • Claude Agent SDK adapters: an approved Claude Code tool resumes with its recorded arguments, the input that the hooks produced and the approval saw. A recorded call replays only as its own tool, at most once per segment. The application's PreToolUse hooks are not called for a resumed call that already has a final record.
  • TypeScript Mastra: the new mastraRunToolNames names the tools Mastra adds itself. With toolSources or mastraRunToolNames, a toolPolicies key no longer allows such a tool by itself.
  • TypeScript Vercel AI SDK: the toolPolicies type accepts any string key, so a source tool can have a policy.
  • Python LangGraph: a model tool call without a tool call ID fails the RunModel attempt.

0.3​

Released 2026-11-09 as agents/v0.3.0.

Added​

  • render_session_flow_graph (renderSessionFlowGraph) and the dex-agents-session-graph command render the session Flow graph for Dex Web, with Actions for resolve_interrupt, answer_question, steer_user_message, and cancel_turn. Reference.
  • Compaction in the OpenAI Agents SDK, Pydantic AI, LangChain and LangGraph, Google ADK, Vercel AI SDK, and Mastra adapters. Adapters compact only between turns. Reference.
  • ModelSpendLimit checks each model call before it runs and reports its usage after. A refused call ends the turn. Reference.
  • run_model_limit (runModelLimit) sets the method timeout and attempts of RunModel. Reference.
  • AgentSessionClient.start_session and startAgentSession make a new session searchable by the Step it waits in. Reference.

Changed​

  • Every package requires Dex SDK 1.38.0.
  • A session over the server's state limit fails with the reason: its status becomes failed, and new messages raise AgentSessionFailedError. Upgrade every reader of a session before the Workers that write failed. Reference.

0.2​

Released 2026-11-05 as agents/v0.2.0.

Breaking​

  • Stop every 0.1 Worker of a Flow type before any 0.2 Worker starts. 0.2 moves older messages into AgentMessageChunks, which a 0.1 Worker cannot read. Reference.

Added​

  • The built-in agent loop, with questions, durable waits, plans and plan mode, MCP tool sources, and a scripted demo model.
  • Steering and turn cancellation: steer_user_message and cancel_turn.
  • Tool tasks: a tool can start long work and the session polls it in PollToolTask.
  • Context compaction with the CompactContext Step, and message retention through retained_message_limit. Reference.
  • Messages are stored in chunks (AgentMessageChunks), so storing a message writes only that message.
  • UI stream adapters for the AI SDK useChat and plain Server-Sent Events, which resume through the Dex resume token.
  • OpenTelemetry GenAI spans for model calls and tool calls.
  • The Go core, with the built-in agent loop and OpenAI and Anthropic model clients.
  • A call whose tool Step never reached a Worker records failed, with an error that starts "the tool did not run, so it is safe to call again". Reference.

Changed​

  • Every package requires Dex SDK 1.35.0.
  • resolve_interrupt and answer_question can raise RpcLockConflictError. AgentSessionClient retries it for 5 seconds. Reference.

0.1​

Released 2026-11-01 as agents/v0.1.0.

Added​

  • First release. Python packages dex-agents, dex-agents-openai-agents, dex-agents-pydantic-ai, dex-agents-langgraph, dex-agents-google-adk, and dex-agents-claude-agent-sdk. TypeScript packages @superdurable/dex-agents, @superdurable/dex-agents-vercel-ai, @superdurable/dex-agents-openai-agents, @superdurable/dex-agents-mastra, and @superdurable/dex-agents-claude-agent-sdk. Each model call is one Dex Step and each tool call is its own Step. Reference.