Changelog
Copy Markdownv0.4.1
Widens the sagents dependency constraint from ~> 0.8.0 to ~> 0.8 so the
debugger resolves against both the sagents 0.8.x and 0.9.x lines. The 0.9.0
release reworks only the optional Horde distribution backend and changes no API
the debugger consumes (Sagents.AgentServer, Sagents.Middleware,
Sagents.MiddlewareEntry, Sagents.Presence, Sagents.Subscriber), so the two
are compatible. No functional changes.
Changed
- Relax
sagentsrequirement to~> 0.8(allows>= 0.8.0and< 1.0.0) #34
v0.4.0
First stable release of the 0.4.0 line, promoting the v0.4.0-rc.1/v0.4.0-rc.2 work out of the release-candidate phase. The library now tracks the stable sagents 0.8.0 line. There are no functional changes since v0.4.0-rc.2 — see the RC entries below for the full feature set.
Because most users are upgrading directly from the 0.3.x line, note the breaking router change carried over from v0.4.0-rc.1.
Upgrading from v0.3.x - v0.4.0
The sagents_live_debugger router macro now requires a :pubsub option pointing at the host application's Phoenix.PubSub instance. Previously the debugger derived the PubSub name from coordinator.pubsub_name(); that path has been removed.
Update your router:
sagents_live_debugger "/debug/agents",
coordinator: MyApp.Coordinator,
pubsub: MyApp.PubSub, # NEW — required
presence_module: MyAppWeb.PresenceMounting without :pubsub will raise KeyError at compile time.
Changed
- Breaking:
:pubsubis now a required option on thesagents_live_debuggerrouter macro. See upgrade notes above. - Promoted
sagentsdependency constraint from the pre-release~> 0.8.0-rcto the stable~> 0.8.0#33 - Updated README install instructions to the stable
~> 0.4.0and removed the release-candidate note #33
v0.4.0-rc.2
Maintenance release candidate. No breaking changes since v0.4.0-rc.1 — primarily a dependency refresh aligning with newer sagents/langchain releases, plus code-quality cleanups.
Changed
- Dependency refresh, notably
sagents0.8.0-rc.1→0.8.0-rc.11andlangchain0.8.4→0.8.12, along withphoenix,ecto(3.13 → 3.14),decimal(2 → 3),req,finch,mint,plug, and other transitive bumps #29 - Removed dead
nil-handling clauses inAgentListLive(format_time_ago/1,format_duration_from_start/1,detail_format_time_ago/1) that a newer compiler flagged as unreachable — every caller already guards againstnil#29 - Credo-driven style cleanups across
agent_list_live.ex,core_components.ex,message_components.ex,session_config.ex, andsubagents_tab.ex(not part of a PR) - Documentation fixes to silence
mix docswarnings inREADME.mdandCHANGELOG.md(not part of a PR)
v0.4.0-rc.1
Release candidate aligned with sagents v0.8.0-rc.1. Contains a breaking router change and a new middleware debug-summary callback.
Upgrading from v0.3.x - v0.4.0-rc.1
The sagents_live_debugger router macro now requires a :pubsub option pointing at the host application's Phoenix.PubSub instance. Previously the debugger derived the PubSub name from coordinator.pubsub_name(); that path has been removed.
Update your router:
sagents_live_debugger "/debug/agents",
coordinator: MyApp.Coordinator,
pubsub: MyApp.PubSub, # NEW — required
presence_module: MyAppWeb.PresenceMounting without :pubsub will raise KeyError at compile time.
Added
Sagents.Middleware.debug_summary/1callback support in the Middleware tab. When a middleware module exportsdebug_summary/1, its return value (a map or string) is rendered in place of the raw config — letting middleware that holds large structures (caches, big in-memory stores) surface a curated, compact view instead of dumping their entire configuration into the debug page.- Bounded inspect output for middleware config via
inspect_for_display/1. Defaults are nowlimit: 200andprintable_limit: 16_384, preventing a single oversized value from dominating render time and DOM size. Middleware that needs a richer view should opt intodebug_summary/1. - Producer-crash recovery:
AgentListLivenow traps:DOWNfrom monitored AgentServers and flips the matching subscription entries to:pending, so the next presence-diff join for thatagent_idresubscribes automatically.
Changed
- Breaking:
:pubsubis now a required option on thesagents_live_debuggerrouter macro. See upgrade notes above. - Updated dependency on
sagentslibrary to>= 0.8.0-rc.1. - Subscription handling migrated to
Sagents.Subscriberfor both:mainand:debugchannels. Subscriptions for not-yet-running agents are recorded as:pendingand upgraded automatically when the agent appears viapresence_diff, replacing the previousSagents.AgentServer.subscribe/subscribe_debugcalls that returned{:error, :process_not_found}for offline agents. subscribe_to_presence/2andsubscribe_to_agent_presence/1now usePhoenix.PubSub.subscribe/2directly (caller-level dedup via the:subscribed_topicsMapSet) instead ofSagents.PubSub.subscribe/3.- Middleware tab config rendering refactored into a multi-clause
middleware_config_display/1function component, dispatching at compile time on{:map, _}vs{:string, _}payloads fromdisplay_config/1.
v0.3.8
Fixed
priv/directory is now included in the published Hex package so the bundled CSS asset (priv/static/debugger.css) actually ships with the library #24
v0.3.7
Added
:csp_nonce_assign_keyrouter option for mounting the debugger under a strict Content Security Policy. Accepts either a single atom (used for both script and style nonces) or a%{script: atom, style: atom}map, matching thePhoenix.LiveDashboardconvention. The emitted<link>and<script>tags in the root layout now include the correspondingnonceattribute #23- Self-contained CSS asset serving: the ~2060-line stylesheet was extracted from the inline
<style>block intopriv/static/debugger.cssand is served from a cache-busted/css-:md5Plug route alongside the existing JS bundle, withpublic, max-age=31536000, immutableheaders #23 - New
SagentsLiveDebugger.Timezonemodule withvalidate/1andvalidate_or_utc/1, backed byTzdata, so browser-supplied zones can never crashDateTime.shift_zone/3when rendering event timestamps #23
Changed
- Browser timezone is now read from the LiveSocket
connect_paramsat mount time (pushed by the bundled LiveSocket init script) and validated inSessionConfig.on_mount/4, replacing the previous hidden-button +phx:page-loading-stopJS round-trip #23 live_session :sagents_debuggernow uses the MFA session form ({SagentsLiveDebugger.Router, :__session__, [...]}) instead of a static map, keeping session resolution lazy #23- Removed the inline
<style>block, the hidden#sagents-tz-btnbutton, theset_timezoneevent handler, and the privatevalidate_timezone/1helper fromAgentListLive, all superseded by the new asset route andTimezonemodule #23
v0.3.6
Added
- Live message updates during multi-turn agent runs - the Messages tab now streams
:agent_state_messages_appendedevents and patches messages turn-by-turn instead of waiting for the final:agent_state_update#19 - Cancelled agent state handling with a red "Agent cancelled" banner at the end of the messages list, a
status-cancelledbadge in the SubAgents tab, and a dedicatedhandle_subagent_event/3clause that preserves streamed messages when a context-less cancellation broadcast arrives #19 - Structured rendering of
%LangChain.LangChainError{}sub-agent failures (context length exceeded,:lengthstops, etc.) with a clean type + message view instead of a rawinspectblob #19 :subagent_failed_with_contextevent handler that renders "Last N message(s) before failure" alongside the structured error #19.github/dependabot.ymlfor weekly GitHub Actions updates with a 7-day cooldown #19
Changed
- CI workflow hardened per zizmor recommendations:
actions/checkout,erlef/setup-beam, andactions/cachepinned to commit SHAs with version comments, andpersist-credentials: falseset on checkout #19
Fixed
- Lumis compiler warning resolved by moving the
:languageoption into the{:html_inline, ...}formatter tuple incore_components.exto match the current Lumis formatter signature #19
v0.3.5
Added
- Self-contained JavaScript asset serving following the
Phoenix.LiveDashboardpattern -- the debugger now bundlesphoenix.js,phoenix_html.js, andphoenix_live_view.jsat compile time and serves them from a cache-busted Plug route, so host applications no longer need to provide LiveView JS assets #17 - WebSocket-to-LongPoll automatic fallback in the bundled LiveSocket initialization #17
live_socket_pathoption in router macro for custom WebSocket paths #17
Changed
- Layout split into
root/1(HTML shell with<script>, CSRF meta,phx-socket) andapp/1(passthrough), matching Phoenix conventions for root vs app layouts #17 .btn-primaryand.btn-secondarystyles promoted to global scope (previously scoped under.filter-actions) #17
Fixed
- Debugger now works in host applications that don't load Phoenix LiveView JavaScript in their own layout #17
- Button styles rendering inconsistently outside of filter actions context #17
v0.3.4
Added
- Error events are now displayed in the agent event stream, making it easier to spot and diagnose failures during agent runs #14
v0.3.3
Changed
- Loosened dependency constraints on
jason,mdex,lumis, andtzdata(from~>to>=) so host applications can pin their own compatible versions without conflicts #13
v0.3.2
Added
- Middleware tab now displays the tools provided by each middleware item, with a collapsible tools list showing tool count #11
Changed
- Relaxed
sagentsdependency constraint from~> 0.4.0to>= 0.4.0for greater compatibility with host applications
v0.3.1
Changed
- Updated dependency on
sagentslibrary to~> 0.4.0
Fixed
- README setup example now includes the required
presence_moduleoption in the router configuration
v0.3.0
Added
- Enhanced display of interrupted tool calls — interrupted tool results now show a ✋ icon, amber "INTERRUPTED" badge, and a highlighted code block with interrupt data details #7
- Interrupt summary formatting in the event timeline, distinguishing direct HITL interrupts from sub-agent HITL interrupts #7
- Agent run mode display on the overview tab under "Agent Information" #6
Changed
- Updated dependency on
sagentslibrary to~> 0.3.0(andlangchainto0.6.1via transitive dep) #7
v0.2.1
Changed
- Updated dependency on
sagentslibrary to~> 0.2.1
v0.2.0
Added
- Horde distributed clustering support - the debug dashboard is now cluster-aware and handles agent migration across nodes #2
- "Node" column in the agent list table showing which node each agent runs on
- Node transfer events (
:node_transferring,:node_transferred) for tracking agent migration most_recent_meta/1helper for resolving multiple presence metas during Horde handoffs
Changed
- Updated dependency on
sagentslibrary to~> 0.2.0 - Dashboard title changed from "Agent Debug Dashboard" to "Sagents Debug Dashboard"
- Migrated syntax highlighting theme from Autumn to Lumis
- Added
lumisdependency (~> 0.1)
v0.1.0
Initial release published to hex.pm.