github HKUDS/DeepTutor v1.2.5
DeepTutor-v1.2.5

7 hours ago

DeepTutor v1.2.5 Release Notes

Release Date: 2026.04.25

Highlights

Attachment Store and File Preview Drawer

Chat attachments are now persisted as first-class session artifacts instead of living only as inline base64 blobs in message rows. The turn runtime writes every uploaded file to a new attachment store before document extraction, records a stable URL on the message, and drops the bulky base64 payload from persisted chat history.

  • Backend attachment storedeeptutor/services/storage/attachment_store.py introduces a pluggable AttachmentStore protocol and a default LocalDiskAttachmentStore rooted at data/user/workspace/chat/attachments. The path can be overridden with CHAT_ATTACHMENT_DIR, documented in .env.example.
  • Safe attachment serving — a new /api/attachments/{session_id}/{attachment_id}/{filename} router serves stored files with traversal-safe path resolution, atomic writes on upload, inline Content-Disposition, UTF-8 filename handling, and private no-cache headers.
  • Stable attachment metadataAttachment now carries an id plus extracted_text; TurnRuntimeManager generates missing IDs, persists original bytes, stores the preview URL, and keeps extracted text from Office/text documents so the UI can show exactly what the assistant read.
  • Right-side preview drawerFilePreviewDrawer adds a Claude-style side panel for chat files. On desktop it squeezes the chat column; on smaller screens it overlays. The shell stays mounted for instant open/close, while heavy preview bodies are deferred until after the slide animation to avoid jank.
  • Preview renderers — PDFs render in the browser viewer, images and SVGs render with native <img>, Markdown reuses the main Markdown renderer, code/text files use RichCodeBlock with syntax highlighting, Office files show backend-extracted plain text, and unsupported/legacy files fall back to a download card.
  • Attachment actions — pending composer chips and sent message cards are clickable, with keyboard focus rings, download, copy-link, Escape-to-close, and graceful "legacy file not stored" messaging for old sessions.

Broader Code and Text Attachment Coverage

The v1.2.4 text/code attachment support has been widened substantially, keeping the backend RAG router, chat extractor, frontend upload allowlist, icons, and preview highlighter aligned.

  • More accepted formatsFileTypeRouter.TEXT_EXTENSIONS and TEXT_LIKE_EXTS now include JSONC/JSON5, MJS/CJS/MTS/CTS, Vue/Svelte, Kotlin scripts, Groovy/Gradle, C#/Zig/Nim, Objective-C, Perl/Lua/Julia/Dart, Haskell/Clojure/Elixir/Erlang/OCaml/F#, Lisp/Scheme/Racket, Solidity, fish/vim, GraphQL/protobuf, CMake/Makefile, Terraform/HCL, nginx config, and Dockerfile-style files.
  • Central syntax mappingweb/lib/code-languages.ts maps extensions and special filenames (Dockerfile, Makefile, CMakeLists.txt, dotfiles, etc.) to Prism language names so preview classification and code highlighting stay in sync.
  • Frontend helpers exportedextOf() is now exported from web/lib/doc-attachments.ts for the preview pipeline, and document icons/categories were expanded to match the new extension set.

Attachment-Aware Deep Capabilities

Uploaded attachments now flow into more agent pipelines, not just the default chat stage.

  • Base agent parity — non-streaming LLM calls now use the same prepare_multimodal_messages() path as streaming calls when attachments are present, including image stripping/logging for non-vision models.
  • Deep Solve — instead of extracting only the first image URL, DeepSolveCapability forwards image attachments through MainSolver into planner, solver, and replan calls, so multimodal problems remain visible throughout the Plan-ReAct-Write loop.
  • Deep Question — topic generation and follow-up answering pass attachments to the underlying agents. Mimic mode can now use [Attached Documents] text directly when uploaded PDFs have already been extracted and stripped from base64 storage.
  • Deep Research — research planning accepts attachments and forwards them into the first planning LLM call, whether that is rephrase or decompose, without duplicating the same image/file context in later planning turns.
  • Visualize — visualization analysis now receives chat attachments, enabling diagrams or screenshots to influence render-type selection and data extraction.

TutorBot Export and Notebook Capture

TutorBot chat sessions now have the same capture paths as regular chat:

  • The Agent chat page adds Save to Notebook and Download Markdown actions in the header.
  • SaveToNotebookModal, notebook-api, backend notebook request types, and RecordType now recognize a new tutorbot record type.
  • The Knowledge page displays TutorBot notebook entries with their own violet badge and bot icon.
  • Restored TutorBot chat history now re-snaps to the bottom across multiple frames so Markdown/KaTeX growth after first paint does not leave the user above the latest message.

Setup Tour Diagnostics and Install Robustness

The guided setup tour now explains dependency failures instead of failing silently:

  • Bootstrap dependency installation captures stdout/stderr and prints the real pip error plus a manual retry command.
  • uv resolution checks common install locations (~/.local/bin, ~/.cargo/bin, Homebrew paths) before attempting installation, and reports clear next steps if uv installs successfully but is still not on PATH.
  • uv install failures now show localized English/Chinese hints for Python wheel availability, stale shell PATH, PyPI mirror issues, and direct installer options.
  • Node.js/npm version checks resolve executables through shutil.which() before running --version, improving Windows .cmd/.bat compatibility after Python subprocess hardening.

Chat and Knowledge UX Fixes

  • Auto-scroll reliabilityuseChatAutoScroll now waits for message content before attaching its mutation observer, fixing missed bottom-scroll behavior when reopening sessions whose message container was initially empty.
  • Preview animation polishglobals.css adds a chat-preview-shell transition so the drawer slide and chat-column squeeze move together at the same 220 ms timing.
  • Knowledge upload picker — KB file inputs no longer rely on the browser/OS accept filter, which could hide valid files on some systems; in-app validation still enforces the supported-file policy after selection.
  • Localized preview copy — English and Chinese strings were added for preview loading, copy link, unavailable previews, legacy files, remove attachment, and Office extracted-text explanation.

Test Suite Expansion

  • Capability attachment forwardingtests/core/test_capabilities_runtime.py adds coverage for Deep Solve, Deep Question, Deep Research, and Visualize attachment propagation, including mimic mode with extracted document text.
  • Research planning edge casetests/agents/research/test_research_pipeline_rag.py verifies that attachments are forwarded to decompose when rephrase is enabled but performs zero iterations, ensuring the first actual planning LLM call still sees the uploaded context.

Full Changelog: v1.2.4...v1.2.5

Don't miss a new DeepTutor release

NewReleases is sending notifications on new releases.