Changelog
Copy Markdownv0.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.