DeepTutor v1.5.5 Release Notes
Release Date: 2026.07.26
A follow-up to v1.5.4 with two new ways to bring a model — sign in with your own ChatGPT plan, or route through Eden AI's gateway — knowledge bases that can finally say what they actually hold, and GraphRAG indexing that no longer needs a loop workaround. Drop-in, no migrations; if you ran v1.5.4, the chat-branching fix below is the one to take.
What's New
Sign in with your ChatGPT plan (experimental)
OpenAI Codex is now a first-party OAuth provider (#690). Pick it under Settings → Models → LLM and a browser sign-in replaces the API-key fields, with the model list read from that account's live catalog; on a remote box run deeptutor provider login openai-codex there instead. Credentials stay in <user-root>/private/openai-codex/ with owner-only permissions, and ~/.codex is never read or modified. Because a token authorizes one person's plan, the profile is per-account: it is not assignable through user grants, and signing in only becomes the active model when no LLM is configured yet — it never repoints a deployment behind your back. This compatibility path is experimental; the upstream interface may change.
Eden AI
Eden AI joins as the 35th LLM binding (#671) — an OpenAI-compatible gateway that reaches many providers behind one key, with models addressed as <provider>/<model>.
Knowledge bases that know what they hold
Ask how many files a knowledge base has, or whether some document is in it, and the answer no longer comes from whichever chunks the query happened to match. Each attached KB now carries a real document inventory into the turn, plus a new kb_files tool that enumerates on demand with glob and substring filters — mounted whenever a KB is attached, and deniable per partner like any other tool. Linked folders and Obsidian vaults are enumerated in place; a remote LightRAG server declares itself unlistable rather than reporting zero. The KB page and the chat answer now read the same definition, so they can no longer disagree about the same library.
Traceable RAG citations
The rag tool used to report a single "source" that was just an echo of its own query, leaving grounded answers with no provenance. It now forwards the chunks, entities, and reports retrieval actually returned (#694). The local LightRAG pipeline keeps only its synthesised answer, so that one engine still has nothing to cite.
GraphRAG indexing without the loop workaround
GraphRAG imports a patch that refuses uvloop — the loop uvicorn[standard] gives the backend on macOS and Linux — so indexing died at import unless you forced UVICORN_LOOP=asyncio for the whole app. Every GraphRAG entry point now runs on a worker thread with its own stock asyncio loop (#695), and two config faults that broke the first indexing run — an unescaped $ in the file pattern and an unregistered cache type — are fixed (#699).
Assorted fixes
- Optimistic message ids are unique again (#698): the user row and the assistant placeholder could be minted in the same millisecond, collapse onto one persisted id, and drop the reply from the visible thread until a reload. Exposed by v1.5.4's in-place turn reconciliation.
- Scrolling up in a partner chat stays where you put it instead of being yanked back down (#704).
claude-opus-5is recognized as an effort-based model, so requests stop carrying thetemperatureit rejects (#703); Kimi-branded Moonshot models now omit the parameter entirely rather than pinning it to1.0.deeptutor startkeeps relaying logs on legacy Windows code pages (#702) — a✓in the Next.js banner used to kill the relay thread on cp950/cp936/cp932 and leave the session silent.
Upgrade Notes
Drop-in from v1.5.4: pip install -U deeptutor; Docker users pull ghcr.io/hkuds/deeptutor:latest. No migrations, no schema or config changes.
- If you set
UVICORN_LOOP=asyncioto work around GraphRAG indexing, you can drop it. - OpenAI Codex sign-in is per-account by design — each user signs in for themselves, and the profile cannot be handed out through grants.
Full Changelog: v1.5.4...v1.5.5