Commit History
-
Unify figure store globally, enable cross-agent figure references
- Replace per-tab IMAGE_STORES with single global FIGURE_STORE shared by code and image agents - Unify naming: image_N → figure_T{tab}_N across all agents - Store values as {type, data} dicts consistently - Restore figure registry from workspace on session reload - Remove separate 'images' handling in frontend (unified under 'figures') - Add cross-agent figure reference instructions to command center prompt - Fix double-wrapping bug in image agent nudge path Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>4c24c65
-
Global image namespacing, persistent server-side image store, save_image improvements
- Namespace image/figure refs at backend level (image_T{tab}_N, figure_T{tab}_N) so frontend no longer needs to translate between local and global names - Add persistent IMAGE_STORES/IMAGE_COUNTERS dicts in main.py so image data survives agent re-entry without requiring multimodal mode - save_image tool: return base64 preview, add proper display name/description - Fix nudge condition: trigger result formatting even when image_store is empty - Add hidden assistant message for result_preview history reconstruction - Clean up image stores on session switch Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>f508f01
-
Add save_image tool to image agent
Allows saving generated/edited images to the workspace as PNG files. Source can be an image reference (e.g., 'image_1') or a URL. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>b75e768 -
Fix tool message handling, parallel image refs, error display, and UX polish
- Preserve tool_call_id/tool_calls in Message model so command center history doesn't break on subsequent LLM calls (400 error fix) - Namespace image/figure refs with tab ID (image_1 -> image_T3_1) to avoid collisions between parallel sub-agents - Strip HTML error pages (e.g. HF 503) to short status messages - Show progress widget when command center auto-continues after sub-agents finish - Only reuse agent tabs when both task_id and agent type match - Nudge command center and image agent to only generate images when explicitly asked - Add GLM-5 and Qwen3.5-397B models, update default agent assignments - Update README with install/docker/env docs, add privacy notice to login Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>4da424f -
Remove requirements.txt, use pyproject.toml as single dependency source
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>c48a8e5 -
Remove dev files, experiments, stale configs; clean up .gitignore
Remove: dev/ (planning docs, mockups), experiment/ (old scripts/results), features.md, mock.html, backend/README.md, settings.json, workspace test data. Untrack .claude/settings.local.json, add .claude/ and workspace/ to .gitignore. Trim .gitignore from 232 lines of boilerplate to ~30 relevant entries. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>32cdbe2
-
Trim system prompts ~35% and strengthen figure embedding rule
- All 5 agent prompts trimmed: remove generic filler, redundant examples, obvious coaching - Command center: bold rule to ALWAYS embed figures/images (sub-agent results are collapsed) - Code agent: explicit warning not to use show_html for displaying captured figures - Research: cut "Your role is to" fluff, keep table formatting guidance - Web/Image: merge redundant strategy+guidelines sections Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>ad948a8 -
Split frontend script.js (5460 lines) into 8 focused modules
- utils.js: global state, apiFetch, escapeHtml, formatDate, 3 shared helpers - timeline.js: sidebar timeline data + rendering + multi-user - sessions.js: session CRUD + panel UI - tabs.js: tab creation/switching, sendMessage - streaming.js: SSE streaming, code cells, action widgets, parseMarkdown - workspace.js: serialize/restore workspace state - settings.js: settings CRUD, themes, debug/files/sessions panels - app.js: DOMContentLoaded, initializeEventListeners Deduplication: setupInputListeners (3 copies), setupCollapseToggle (4 copies), closeAllPanels (4 verbose blocks) extracted to shared helpers in utils.js. Update README with DIRECT_TOOL_REGISTRY docs, key patterns & conventions section for agent contributors, and updated file tree. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>78f4d62 -
Refactor backend: extract async stream helper, direct tool registry, nudge_for_result via call_llm
- Add _stream_sync_generator helper in main.py, replacing 5 duplicated async queue patterns - Add DIRECT_TOOL_REGISTRY in tools.py combining schema + execute in one dict - Refactor command.py to use DIRECT_TOOL_REGISTRY instead of separate DIRECT_TOOLS set and if/elif dispatch - Make nudge_for_result use call_llm for debug panel parity (agents.py, agent.py, code.py, image.py) - Eliminate hardcoded frontend AGENT_REGISTRY, fetch from /api/agents at startup (script.js) - Debug panel fixes: base64 image placeholders, call enumeration, layout, remove refresh button - Add drag-and-drop file upload to files panel - Rewrite README for release with extension/tool/theme documentation - Reduce debug panel width from 600px to 450px Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>4e3db9c -
Debug panel: full LLM call parity, show_html tool, drag-drop file upload
- Centralize LLM calls into call_llm() generator in agents.py with retries and debug events - Emit debug_call_input/output SSE events for every LLM turn across all agents - Frontend accumulates debug history per tab with INPUT/OUTPUT sections - Replace base64 images with hoverable thumbnail placeholders in debug JSON - Persist debug history in workspace save/restore - Add show_html direct tool for command center (iframe srcdoc rendering) - Add drag & drop file upload to files panel (folder-aware targeting) - Remove old MESSAGE_HISTORY polling, refresh button; debug updates in real-time - Reduce debug panel width to 450px Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>0d3d041
-
Image agent fixes: sizing, error handling, result nudge, registry filtering
- Add max-height: 400px to all image CSS rules and inline styles - Filter globalFigureRegistry to only include images/figures referenced in sub-agent <result> content (prevents command center from rendering images the sub-agent didn't explicitly include) - Extract shared nudge_for_result() utility in agents.py, replacing duplicated nudge code in agent.py, code.py, and image.py - Return actual error messages from execute_generate_image/execute_edit_image (tuple return) so the LLM can adapt its strategy on failure - Show real error messages in frontend tool cells instead of generic "Failed to process image" - Resize large input images to 1024px max before sending to HF image_to_image API (FLUX.1-Kontext-dev expects ~1024px inputs) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>583c5ee
-
Fix image agent: multimodal tool responses, read_image rename, default model
- Pass tool response content as native multimodal array (not JSON string) so VLM actually sees images instead of hallucinating - Rename read_image_url → read_image with local file path support - Update frontend to handle read_image tool name and show path + image - Set Qwen3-235B as default image agent model - Add "Presenting Results" section to command center system prompt - Collapse/expand action-widgets in main chat with checkbox Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d86459e -
Fix file download in multi-user mode (fall back to session_id query param)
window.open() can't send custom headers, so get_user_id() now checks the session_id query parameter as a fallback for the X-Session-ID header. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>704f712 -
Add multi-user session isolation and HF bucket sync
- --multi-user flag for per-user isolation (files, sessions, settings, sandboxes) - Username prompt overlay on first visit, stored in localStorage - X-Session-ID header on all API requests via apiFetch() wrapper - Per-user directories under workspace/users/<username>/ - Default settings copied from base config for new users - User indicator in sidebar with click-to-switch - HF Storage Bucket sync in Dockerfile (HF_BUCKET + HF_BUCKET_TOKEN env vars) - Background sync loop every 60s for persistent storage on HF Spaces Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>5f63301
-
Add file explorer download/upload, path linkification, and legend
- Add download button (↓) next to files and upload button (+) next to folders in the file explorer tree - Add root-level upload button (+) in files panel header - Backend: GET /api/files/download, POST /api/files/upload, POST /api/files/check - Add python-multipart dependency for file uploads - Linkify backtick paths in messages: checks existence via /api/files/check and wraps matching inline code in clickable links to file explorer - Make download widget local paths clickable to navigate in file explorer - Add legend at bottom of files panel (click/double-click/drag) - Rename command center label from TASKS to MAIN Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>89321a6
-
Add Pillow dependency for image resizing in image agent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>17b2757 -
Rename Report to Result and update welcome diagram labels
- Timeline tag: REPORT → RESULT - Welcome SVG: Task Center → Main Agent, Agent → Sub-Agent, Task → Sub-Agent, Report/Report summary → Result - Status messages: "Generating report..." → "Generating result..." Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>e9d71f8 -
Replace readability with trafilatura for text extraction, add HTML mode
Switch read_url's default text extraction from readability-lxml to trafilatura, which captures significantly more content (images, tables, links) especially on non-article pages. Add use_html parameter for stripped-down HTML output when the agent needs to inspect page structure. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>59d77e5 -
Add abort/stop feature and agentui CLI command
Adds cooperative abort via threading.Event so users can stop running agents. Backend abort registry tracks parent-child relationships for recursive abort. Frontend toggles SEND→STOP during generation, with AbortController on fetch. Command center STOP aborts all child agents. Aborted agents produce a result message so parent agents are aware. Also adds `agentui` CLI entry point. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9bcfe23 -
Fix imports: use relative imports throughout backend package
Removes all try/except ImportError fallback patterns and uses consistent relative imports (from .module import ...) everywhere. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>c0c69f5
-
UI design refinements: resizable sidebar, compact tabs, widget improvements
- Add resizable timeline sidebar with drag handle (persisted to localStorage) - Move widget collapse arrows to left side, show tool query in header - Add double-click on collapse arrow to toggle all widgets - Compact tab bar (25px), rename TASKS to MAIN, harmonize panel button sizes - Compact settings, sessions, debug, files panel headers and content - Add current date to all agent system prompts - Add user message background styling, fix chat panel background color - Remove session indicator from bottom right - Fix textarea scrollbar appearing before content overflow - Fix tab bar border gap next to + button - Default expand agents and show turns checkboxes to checked - Fix legend overflow with flex-wrap on narrow sidebar Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>4da7797
-
Improve web agent prompts, add chunked read_url, and UI refinements
- Rewrite web agent system prompt with metacognitive strategy (reflect before every tool call, snippets are data, adapt on failure) - Remove screenshot_url from web agent (not multimodal) - Add chunked read_url with 10k char chunks and URL content cache - Add code agent reflection step in system prompt - Add collapsible widgets for tool cells, code cells, and action widgets - Fix tab overflow with flex-shrink compression (like browser tabs) - Add active tab indicator arrow in timeline sidebar - Smart auto-scroll: only scroll to bottom if user is near bottom - Timeline turn click now scrolls to corresponding chat element Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>4f207be
-
Fix binary file download, add tool element tab persistence, and UI refinements
- Fix sandbox file download to always use bytes format, preventing corruption of binary files - Add serialization/restore for tool-call, tool-response, and tool-cell elements in tab persistence - Update code agent prompt (clarify working directory, relax savefig guideline) - Apply global scrollbar styling, add collapsed timeline padding - Clean up generated workspace test files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9937804
-
Add command center continuation, result nudge, input blocking, and prompt improvements
- Command center auto-continues after all sub-agents finish via continueCommandCenter() - Fix race condition with pendingAgentLaunches counter for delayed agent tab creation - Block command center input while agents are running - Nudge agents for <result> tag if they finish without one (agent.py, code.py) - Strengthen task decomposition prompt to always parallelize multi-entity queries - Improve code agent prompt: sandbox filesystem clarity, plt.show() over savefig - Suppress Python warnings in E2B sandbox on startup - Double output truncation limit (4000 chars) and keep beginning + end Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>9e3f857 -
Improve agent routing prompts, add timeline inline labels, drop chat agent
- Rewrite command center system prompt: default to web agent for searches, reserve research agent for deep multi-source analysis, add task decomposition for parallel execution - Sharpen web agent prompt: iterate strategy, full content in <result> tags - Remove chat agent (redundant with web agent) - Replace timeline tooltip pseudo-elements with real <span> labels that show inline text next to dots with hover popup for full content - Fix timeline row spacing and nested agent padding Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>77ed993
-
Rename notebooks→agents, Productive→AgentUI across full codebase
- Rename all notebook references to agent (~340 occurrences across 16 files) - Rename Productive branding to AgentUI (title, welcome text, README) - Add settings migration: notebooks→agents key, productive_settings→agentui_settings - Add backward-compatible localStorage and workspace fallbacks - Scope .agent-header and .agent-body CSS to avoid timeline/content collision - Hide sessions folder from file tree context - Add markdown content toggle to read_url widget - Rename run_interactive_notebook→run_stateful_code - Preserve JupyterNotebook class and .jupyter-notebook-container (actual Jupyter refs) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>a58e6a3
-
Add IMAGE agent, web tools for AGENT, and fix conversation history
- New IMAGE notebook type with HuggingFace image generation/editing tools (generate_image, edit_image, read_image_url via FLUX.1 models) - New backend/image.py streaming handler with image store and VLM context resize (512px JPEG thumbnails to avoid token overflow) - New backend/tools.py centralizing all tool definitions and execution functions - New backend/agent.py with web tools (web_search, read_url, screenshot_url) - Image model settings use dropdowns populated from configured models - Settings panel shows active settings.json file path - Fix conversation history: sub-notebook results now update the tool response DOM element so follow-up questions have full context Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>2a5ead4 -
Centralize agent type registry into single source of truth
Replace ~17 scattered type definitions across 4 files with a unified AGENT_REGISTRY on both backend (agents.py) and frontend (script.js). Adding a new agent now only requires one registry entry per side. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>d22e6fd
-
Add dark themes (Noir, Eclipse) and fix theming consistency
- Add Noir (black & white) and Eclipse (navy & blue) dark themes - Fix timeline return line hardcoded #ccc → var(--border-primary) - Fix action widget RESULT separator #e0e0e0 → var(--border-primary) - Fix Prism.js white text-shadow and token backgrounds on dark themes - Fix action widget pre blocks using hardcoded colors → CSS variables - Pass bgPrimary/textPrimary/textSecondary to sub-agent for plot styling - Share SVG diagram and research tree overrides across all dark themes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>5f1190f
-
timeline
3923314
-
Add import fallbacks for running server directly
Relative imports fail when running `python backend/main.py` directly instead of `python -m backend.main`. Added try/except fallbacks for: - code, research, command module imports - defaultnames import - jupyter_handler import in utils.py TODO: Consider a cleaner solution like adding backend/ to sys.path at startup, or always requiring module-style execution. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>0801a15
-
Make command center stateless for multi-user support
Frontend now sends full conversation history for all notebook types, removing dependency on backend-stored CONVERSATION_HISTORY dict. This fixes issues with multiple users sharing state on HF Spaces. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>102d6ec -
Fix relative imports for code, research, and command modules
These imports were failing silently in the Docker container, causing COMMAND_AVAILABLE=False and disabling tool calling. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>67ef0af
-
Fix relative import for defaultnames module
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>3c1fcb4 -
update
40853c6
-
update
ff12557
-
v0.20
8350b87
-
deep research
5aae12e
-
v21.0
528426e -
v20.0
51b6e17
-
Reorganize project structure and update gitignore
fb24fbc -
v0.19
746c759
-
v0.18
e95b0dd -
v0.16
1886657
-
v0.15
2d52286
-
v0.14
fcc734a
-
v0.13
0eb969b
-
v0.12
424c8a9
-
v0.11
0eebd6d
-
v0.1
f7942d2