Skip to content

v1.5.13

Latest

Choose a tag to compare

@pancacake pancacake released this 17 Aug 03:23

DeepTutor v1.5.13 Release Notes

Release Date: 2026.08.17

v1.5.12 was about where an answer's material comes from. This one is mostly about Book — the surface that turns that material into something you read rather than something you chat with. A book could be generated but not really used: the page froze while it was being written, the progress it claimed to track was never written down, and what you got could not leave the app. That gap is the bulk of this release. The home screen also stops asking you to start from a blank composer. Drop-in — no migrations, nothing to re-index.

What's New

Watch a book being written, then finish it and take it with you

Compilation outlives the request that started it: confirm_spine returns as soon as the page shells exist, while the work it queued runs for minutes. The event bus was owned by that request and closed with it, so every subsequent event was dropped and "watch your book being written" degraded into a frozen page. The stream is now owned per book by the process, so it survives the request, a refresh, and a reconnect.

Reading progress is now actually recorded. visited_page_ids and bookmarked_page_ids had been declared but never written for the life of the feature; visited pages, bookmarks, and quiz attempts now roll up into a completion score and a list of weak chapters.

And a book can leave the app: export to a self-contained Markdown document. Every block type gets a text projection, and inherently visual blocks (a rendered animation, an interactive widget) degrade to their description plus a pointer instead of vanishing silently. Non-ASCII titles survive the download — a Chinese or accented book name used to fail the request outright.

Know what a book costs before you approve it — and don't pay twice

Confirming a spine kicks off dozens of LLM calls and many minutes of work. The editor now shows a live per-chapter estimate derived from the Section Architect's own templates, so the number cannot drift from what actually gets generated, and it stays accurate while you add, remove, or retype chapters.

Two scheduling defects that were invisible in production are fixed: the same page could be compiled twice concurrently — billed twice, one result silently discarded — and a book would grind on through a provider outage until every chapter was half-generated. The source sweep is bounded too. Ungated, eight knowledge bases against a dozen queries fired roughly a hundred concurrent provider calls; the cap is now allocated round-robin, so it isn't spent entirely on the first few bases.

Connected knowledge bases stop silently contributing nothing

A connected KB — an Obsidian vault, a remote LightRAG or IMA library, a subagent CLI — has no local index, so rag_search returns nothing for it. Book generation swept them anyway, and the empty result was indistinguishable from a source with no relevant content: attach your vault, and nothing ever told you it contributed zero. Retrieval now tells indexed bases and connected pointers apart and routes each accordingly.

Three places to start, drawn from what you were actually doing

The home composer now offers three starter suggestions built from your memory — the L3 synthesis plus your last several activities across surfaces. They propose a specific thing to understand rather than a way to revisit history, and they're sized per language so they don't overflow. A new recall memory read backs them, and snapshot stamps are read without loading entity content.

Mastery paths follow the conversation

A path outlives any one chat, and a chat may work several paths in sequence. Moving a live turn between paths now happens in one place — lease, session preference, and live turn changed together, release before acquire — so a rejected handoff leaves the learner where they were instead of half-moved. Path state and turn recovery are hardened, teaching content stays visible, qualitative reviews are scheduled, and deleting a session cleans up its path.

Tencent IMA credentials move up to the account

IMA credentials used to live only on each KB. They now also resolve at the account level from Knowledge → the IMA engine page, the way PageIndex's key does, with the per-KB pair still winning when it is complete. Existing bindings keep working untouched, and rotating the account key updates every KB that relies on it. Read-only IMA connections and source-text retrieval are fixed alongside.

Assorted

  • EPUB is a supported knowledge-base format, and Docling can parse remotely against a Docling Serve server (mode=remote) with no local install or model downloads.
  • Generated code is parsed before it reaches you. A truncated snippet used to ship with nothing marking it unchecked.
  • The Overview chapter stays singular. Re-confirming a spine grew a second one each time, and the page was rebuilt wholesale — the one path that bypassed edited_by_user protection. Its wording is also no longer hard-coded to Chinese-or-English while the picker offers eleven languages.
  • Quiz blocks read the question pipeline directly instead of a legacy facade that discarded progress from the slowest block.
  • Knowledge: large uploads stream through the web layer, document parsing runs off the event loop, docstore probes are cached and deduped in kb list, and GraphRAG model/embedding compatibility is hardened.
  • Partners: data is isolated per user, an invalid channel config no longer takes the others down, the tool list follows the global chat toggles, and a partner reconnects after its tab goes inactive.
  • Models & providers: the model catalog and provider transport recover instead of staying broken, catalog secrets are protected in the settings API, GPT-5 agentic tools use the Responses API, provider stream-failure boundaries survive, and completed turn message IDs persist across reconnects.
  • Runtime: the active virtualenv is visible inside the bwrap sandbox, invalid homes and placeholder OpenAI keys are rejected, Windows .cmd shims resolve before a CLI is spawned, console exception tracebacks are preserved, and mcp installs by default so the PageIndex MCP server connects.

Upgrade Notes

pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No schema changes, no re-index, no migration.

  • Books compiled before this release have no recorded progress. Completion scores and weak chapters start accumulating from your next read; nothing is backfilled and no existing page is rewritten.
  • A book that was mid-compile when you upgrade should be resumed, not left. The event stream is now owned per book, so reopening it reattaches to the live compile rather than showing a frozen page.
  • settings/ima.json is new and optional. Existing per-KB IMA credentials keep working exactly as before — the account-level pair only fills in for KBs that don't carry their own.

Full Changelog: v1.5.12...v1.5.13