Changelog
0.3.7 — 2026-04-18
Added
CanvasMiddleware— opt-in LangChain agent middleware that injects canvas tools and report-building guidance into anycreate_deep_agentcall. Downstream users enable the canvas feature viamiddleware=[CanvasMiddleware()]without touching tool lists or system prompts.- Canvas section item type (
add_canvas_section(title, level=1)) — structural headings that render ash1–h6in the UI for report organization. reorder_canvas(item_ids)tool — rewrite canvas items in a new order.- Provenance: canvas items now record
source_cellandexecution_countfrom the most recent notebook cell execution; surfaced as a “cell N” pill in the UI. - Tab visibility controls:
show_canvas/show_filesonCoworkApp,--show-canvas/--no-show-canvasand--show-files/--no-show-filesCLI flags,DEEPAGENT_SHOW_CANVAS/DEEPAGENT_SHOW_FILESenv vars. Canvas tab defaults to auto-detect (on whenCanvasMiddlewareis attached, off otherwise); files tab defaults to on. agent_uses_canvas_middleware(agent)helper for downstream detection.- Integration tests for the SSE streaming pipe (
tests/test_sse_adapter.py) using a conformant fake agent — catches API drift inlanggraph-stream-parserbefore it hangs the UI. - API contract guards for
prepare_agent_inputandcreate_resume_inputsignatures. demo/plain_agent.py— minimal example of a custom agent without canvas middleware.
Fixed
- Agent streaming hung silently when
prepare_agent_input()was called with an unsupportedcontext_parts=kwarg. Context is now prepended to the user message directly. CanvasMiddleware.awrap_model_callasync variant — the sync-onlywrap_model_callcrashed withNotImplementedErrorunderagent.astream().run_agent_stream/run_interrupt_responsenow wrap the full function body in a try/except and emiterrorevents for uncaught exceptions instead of dying silently in the background task.
Changed
- Canvas tools are no longer baked into
AGENT_TOOLS— they are injected exclusively viaCanvasMiddlewareto avoid double-registration. - Default-agent system prompt no longer embeds canvas guidance; the prompt is appended at call time by
CanvasMiddleware.
Removed
- Dead
NotebookState._canvas_itemslist andget_canvas_items/clear_canvas_itemsmethods (never populated; replaced by file-backed canvas state). - Dead
create_session_agentfactory that imported a non-existentcowork_dash.backendsmodule.
0.3.6 — 2026-04-07
Changed
- Replace WebSocket streaming with Server-Sent Events (SSE) for reliable operation behind reverse proxies and with
host=0.0.0.0 - Frontend
useAgentStreamhook now usesEventSource+fetch()instead ofWebSocket - Session manager uses async event queues instead of WebSocket references
- Authentication middleware simplified (no more WebSocket-specific handling)
Added
GET /api/streamSSE endpoint with 30s keepalive andX-Accel-Buffering: noheader for nginx compatibilityPOST /api/chatendpoint to send user messagesPOST /api/chat/interruptendpoint to respond to HITL interruptsPOST /api/chat/cancelendpoint to cancel running streams
Removed
websocketsdependency (no longer needed)- WebSocket endpoint (
/ws/chat) replaced by SSE + REST
0.3.5 — 2026-02-19
Added
- Custom CSS theming support via
--custom-cssCLI flag,custom_cssPython API param, orDEEPAGENT_CUSTOM_CSSenv var /api/custom-cssendpoint serves theme file at runtime; frontend injects it dynamicallyPOST /api/session/{id}/injectREST endpoint for fire-and-forget message injection from external appsGET /api/sessionsendpoint to list all sessions with connection statusinject.pyconvenience script for programmatic message injection- Theme reference documentation (
docs/CUSTOM_THEME_REFERENCE.md)
Fixed
- Dark mode text color in canvas markdown content (
.markdown-contentmissing basecolor) - Interrupt dialog diagnostics for empty
action_requests
0.3.4 — 2026-02-10
Added
/create-workflowslash command with two-step text input flow for creating workflows from scratchcreate_workflow_promptconfigurable via Python API, CLI (--create-workflow-prompt), and env var (DEEPAGENT_CREATE_WORKFLOW_PROMPT)- README documentation for slash commands, authentication, and workflow prompt configuration
Changed
- Refactored slash command
hasArgboolean tosecondStepunion type ("none"|"file-picker"|"text") for extensibility - Generalized
tryExecuteandhandleInputChangeto work with any command definition
0.3.3 — 2026-02-10
Added
- Print/export conversation via browser Print dialog with print-optimized CSS
/save-workflowslash command to capture conversations as reusable workflow markdown files/run-workflowslash command with autocomplete dropdown listing.mdfiles from./workflows/- Configurable workflow prompts via Python API (
save_workflow_prompt,run_workflow_prompt), CLI flags, and env vars
0.3.2 — 2026-02-10
Added
- Optional HTTP Basic Auth (Dash-style) — enable with
DEEPAGENT_AUTH_PASSWORDenv var,--auth-passwordCLI flag, orauth_passwordPython kwarg - Username defaults to
adminwhen only password is set; customize viaDEEPAGENT_AUTH_USERNAME - Protects all HTTP and WebSocket endpoints with timing-safe credential comparison
0.3.1 — 2026-02-09
Added
- Session persistence across page refresh (messages, todos, token usage saved to localStorage)
- HITL interrupt tests for single and multi-interrupt serialization
Fixed
- Fix HITL interrupt dialog showing blank (no tool name or args displayed)
- Fix interrupt approval sending empty decisions (
{"decisions": []}) - Fix
Decisiontype for edit case to useedited_actionmatching backend format - Fix display_inline crash and blank screen rendering (records vs data format mismatch)
- Add error boundary around inline display to prevent white-screen crashes
- Rename
display_inlineparameter fromcontenttofile_pathto clarify filepath-only usage
0.3.0 — 2026-02-08
- Fix wheel build to include frontend static assets
- Inline HTML and Plotly chart rendering via sandboxed iframes
- Icon customization, agent name inference, auto theme, favicon
- Streaming improvements: cancel support, tool previews, scroll anchoring, message timing
- Token usage chart with per-turn breakdown
- File browser, canvas, todo panel, and dark mode style polish
0.2.0 — 2026-02-06
Initial release of cowork-dash.
Features
- Chat interface with real-time token streaming via WebSocket
- Tool call visualization with inline display of arguments, results, duration, and status
- Rich inline content rendering: HTML, Plotly charts, images, DataFrames, PDFs, JSON
- Canvas panel for persistent visualizations (Plotly, matplotlib, Mermaid diagrams, DataFrames, Markdown, images)
- File browser with syntax-highlighted viewer and live file change detection
- Task tracking sidebar with progress bar, synced with agent
write_todoscalls - Human-in-the-loop interrupt dialog for reviewing and approving agent actions
- Token usage counter with per-turn breakdown chart
- Light, dark, and system-auto theming
- Customizable title, subtitle, welcome message, agent name, and icon
- CLI (
cowork-dash run) and Python API (CoworkApp,run_app) - Configuration via Python args, CLI flags, or environment variables