DeepTutor v1.6.8 Release Notes
Release Date: 2026.09.14
v1.6.8 lands twenty-two community pull requests and a sweep of the reports behind them. Where v1.6.7 chased a token budget spent on hidden thinking, this one mostly answers a different complaint: I did a thing and the app quietly did nothing. A deleted chat with no way back, a book link that opened the library instead of the book, an attachment the model never mentioned, a backend killed while it was still starting. Three new surfaces arrive alongside — a recycle bin, history search, and a tool that looks past your own knowledge base. Drop-in — no migrations.
What's New
Deleted chats are recoverable
Deleting a conversation used to be final. It now moves the chat to a recycle bin — a collapsible section in the sidebar — where you can restore it or delete it for good. Attachments, mastery state and the rest of a chat's artifacts survive the trip and come back with it, and only an explicit purge removes anything from disk.
Search your whole conversation history
The history picker now searches message text, not just titles. Matches come back with a short excerpt around the hit so you can tell two similar conversations apart before opening either. Literal, case-insensitive, and bounded on both the query and the excerpt.
A tool that looks past your knowledge base
knowledge_frontier reads a knowledge base and goes looking for what is not in it — recent work on the same subject, surfaced as a starting point rather than an answer. It mounts automatically when a turn has a KB, next to rag and kb_files:
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontierReasoning models that stop mid-thought now say so
A round that spent its whole budget on hidden reasoning and returned nothing used to end the turn with an opaque failure. Two readings of that scene now run in series: a round that demonstrably hit its cap fails with the counters that prove it — rounds, reasoning characters, completion tokens — because that is a configuration you can act on. Anything else that reasoned without answering ends the turn saying which kind of empty it was. Replayed rounds keep their reasoning for providers that send it, and a leading <think> block no longer swallows the JSON after it.
Reading and Books open where you pointed them
A deep book URL opened the library and left you to find the book yourself; the outline stopped tracking the page you were actually on once the material was a document rather than media; a reading material rendered "cannot open" during the beat before loading had begun. All three are fixed. So is an EPUB that macOS re-zipped — Finder's archive wraps the book in a directory, which used to leave DeepTutor treating __MACOSX/._* entries as chapters.
Attachments the model can actually see
Images from earlier turns are re-sent so a follow-up question about a picture still has the picture, with the cap now a setting rather than a constant. And a file whose text extraction produced nothing — a scanned PDF, typically — is listed with the reason instead of being skipped in silence, so the model can name the file and say why it cannot quote it rather than asking you to upload it again.
Settings, startup and the things that were failing quietly
Applying settings that changed nothing used to reset every runtime client anyway; one place now decides that, instead of five call sites each deciding it their own way. The launcher no longer kills a backend that is merely still starting. Retrieval progress logged off the event loop reaches you instead of vanishing. A capability is cancelled when the turn consuming it stops, GraphRAG workers repair stale Arrow registrations before they start, and behind a reverse proxy the access log records the real client rather than the proxy.
Smaller fixes worth naming
An ask_user card drops an option whose visible text duplicates another. A quiz plan that comes back with no templates fails instead of silently producing nothing. An explicit retryable: false is honored rather than overridden by the status code. read_skill recovers a missing file properly. A session held by a dead turn clears itself. The reasoning probe budget is no longer the outlier it was, and every LLM budget now lives in agents.yaml, one entry per stage.
Upgrade Notes
Run pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. Nothing needs migrating.
- Deleting a chat is now reversible, and that changes what "delete" means. A delete soft-deletes; the row stays until you purge it from the recycle bin. Deleting a reading material still removes its sessions the same way it did before.
agents.yamlowns every LLM budget. Stage-levelmax_tokensentries moved there, one per stage. Values you already set are still read; stages that had no entry now have one.- The prior-image re-injection cap is configurable. It was a hard-coded 4. It lives in system settings now, and
0turns the feature off.
Full Changelog: v1.6.7...v1.6.8