release: v1.6.8
Twenty-two community pull requests and the reports behind them. Where v1.6.7 chased a token budget spent on hidden thinking, this one answers a different complaint: I did a thing and the app quietly did nothing. New surfaces: a recycle bin that makes a deleted chat recoverable, search across the full text of your conversation history, and `knowledge_frontier` — a tool that reads a knowledge base and goes looking for what is not in it. Fixes worth naming: a reasoning model that stops mid-thought now fails with the counters that prove it rather than an opaque error; deep book URLs open the book instead of the library; the reading outline tracks the page again; an EPUB that macOS re-zipped reads as the book it is; a file whose extraction produced nothing is listed with the reason instead of skipped in silence; the launcher stops killing a backend that is merely still starting. Also in this commit: README prose plus all eleven translations, the v1.6.8 release notes with v1.6.5 archived past the one-week line, three duplicate keys removed from the locale files (`Delete permanently` had two different zh values, and the wrong one was winning), and the mypy annotation that made every `conn.execute` in the new file library look like a call on None. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2e907c991e
commit
a7c30a588f
@@ -36,7 +36,7 @@ repos:
|
||||
args: [--unsafe]
|
||||
|
||||
- id: check-json
|
||||
exclude: ^(.*\.lock|.*\.log)
|
||||
exclude: ^(.*\.lock|.*\.log|.*tsconfig.*\.json)
|
||||
|
||||
- id: check-added-large-files
|
||||
args: [--maxkb=6144]
|
||||
|
||||
@@ -50,15 +50,17 @@
|
||||
|
||||
### 📦 Releases
|
||||
|
||||
> **[2026.9.14]** [v1.6.8](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.8) — A recycle bin for deleted chats, search across your whole conversation history, a tool that looks past your knowledge base, and a sweep of fixes for quiet failures.
|
||||
|
||||
> **[2026.9.11]** [v1.6.7](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.7) — A fix release: books that arrived as one empty chapter, quizzes that produced nothing, the model's scratchpad in the text, formulas printed raw, and cards you could not submit.
|
||||
|
||||
> **[2026.9.8]** [v1.6.6](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.6) — A fix release: answers that could not submit, a copy button that lied, connected knowledge bases for partners, Codex sign-in inside Docker, and a 100 KB lighter home route.
|
||||
|
||||
> **[2026.9.6]** [v1.6.5](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.5) — A content workspace you point at any folder, one `exec` tool for every language, Mastery Path modes that gate its tools, and Settings that grades readiness.
|
||||
|
||||
<details>
|
||||
<summary><b>Past releases (more than 1 week ago)</b></summary>
|
||||
|
||||
> **[2026.9.6]** [v1.6.5](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.5) — A content workspace you point at any folder, one `exec` tool for every language, Mastery Path modes that gate its tools, and Settings that grades readiness.
|
||||
|
||||
> **[2026.9.3]** [v1.6.4](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.4) — Faster isolated runtimes, controllable Book generation, source-complete Mastery paths and Chat hand-offs, durable Reading, unified activity UI, recoverable sessions, and explicit per-model API capabilities.
|
||||
|
||||
> **[2026.9.2]** [v1.6.3](https://github.com/HKUDS/DeepTutor/releases/tag/v1.6.3) — Breaking front/back-end refactor, strict canonical routes and recoverable streams, plus learner/guardian accounts, grounded Reading, WeKnora, broader parsing, Python 3.14, and DashScope media.
|
||||
@@ -209,7 +211,7 @@
|
||||
|
||||
</details>
|
||||
|
||||
> ✨ **v1.6.7 is live.** `pip install -U deeptutor` picks up the latest stable release.
|
||||
> ✨ **v1.6.8 is live.** `pip install -U deeptutor` picks up the latest stable release.
|
||||
|
||||
### 📰 News
|
||||
|
||||
|
||||
@@ -416,7 +416,7 @@ Chat هي القدرة الافتراضية والمكان الذي يبدأ ف
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="حلقة وكيل محادثة DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
الأدوات القابلة للتبديل من قِبَل المستخدم هي `brainstorm` و`web_search` و`paper_search` و`reason` و`geogebra_analysis` — بالإضافة إلى `imagegen` و`videogen` بمجرد تهيئة نموذج التوليد المطابق. الأدوات السياقية مثل `rag` و`kb_files` و`read_source` و`read_memory` و`write_memory` و`read_skill` و`load_tools` و`exec` و`web_fetch` و`ask_user` و`list_notebook` و`write_note` و`question_bank` و`github` و`consult_subagent` و`workspace_list` و`workspace_read` و`workspace_search` و`workspace_present` و`workspace_export` تُثبَّت تلقائياً عندما يكون للدور السياق الصحيح.
|
||||
الأدوات القابلة للتبديل من قِبَل المستخدم هي `brainstorm` و`web_search` و`paper_search` و`reason` و`geogebra_analysis` — بالإضافة إلى `imagegen` و`videogen` بمجرد تهيئة نموذج التوليد المطابق. الأدوات السياقية مثل `rag` و`kb_files` و`knowledge_frontier` و`read_source` و`read_memory` و`write_memory` و`read_skill` و`load_tools` و`exec` و`web_fetch` و`ask_user` و`list_notebook` و`write_note` و`question_bank` و`github` و`consult_subagent` و`workspace_list` و`workspace_read` و`workspace_search` و`workspace_present` و`workspace_export` تُثبَّت تلقائياً عندما يكون للدور السياق الصحيح.
|
||||
|
||||
يأتي السياق في نوعين: يستمر **السياق الثابت للجلسة** (القدرة، ومساحة العمل أو الدورة، والأدوات، وقواعد المعرفة، والشخصية، والنموذج، وحالة Reading / Mastery) عبر الأدوار؛ وتأتي **المراجع لمرة واحدة** (الملفات وتاريخ المحادثة والكتب وأقسام القراءة ودفاتر الملاحظات وبنك الأسئلة والوكلاء المستوردون) من قائمة `+` لدور واحد. ولا يفعل زر الصوت سوى تفريغ الرسالة الحالية نصياً.
|
||||
|
||||
@@ -635,6 +635,7 @@ data/
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ Chat 是默认能力,也是大多数工作的起点。单个对话线程可以
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="DeepTutor 聊天智能体循环" width="900">
|
||||
</div>
|
||||
|
||||
用户可切换的工具有 `brainstorm`、`web_search`、`paper_search`、`reason` 和 `geogebra_analysis` — 配置了对应生成模型后还有 `imagegen` 和 `videogen`。上下文工具如 `rag`、`kb_files`、`read_source`、`read_memory`、`write_memory`、`read_skill`、`load_tools`、`exec`、`web_fetch`、`ask_user`、`list_notebook`、`write_note`、`question_bank`、`github`、`consult_subagent`、`workspace_list`、`workspace_read`、`workspace_search`、`workspace_present` 和 `workspace_export` 会在当前轮次具备相应上下文时自动挂载。
|
||||
用户可切换的工具有 `brainstorm`、`web_search`、`paper_search`、`reason` 和 `geogebra_analysis` — 配置了对应生成模型后还有 `imagegen` 和 `videogen`。上下文工具如 `rag`、`kb_files`、`knowledge_frontier`、`read_source`、`read_memory`、`write_memory`、`read_skill`、`load_tools`、`exec`、`web_fetch`、`ask_user`、`list_notebook`、`write_note`、`question_bank`、`github`、`consult_subagent`、`workspace_list`、`workspace_read`、`workspace_search`、`workspace_present` 和 `workspace_export` 会在当前轮次具备相应上下文时自动挂载。
|
||||
|
||||
上下文分为两类:**粘性会话上下文**(能力、工作区或课程、工具、知识库、人格预设、模型,以及 Reading / Mastery 状态)会在各轮次间持续保留;**一次性引用**(文件、聊天历史、书籍、阅读章节、笔记本、题库、导入的智能体)通过 `+` 菜单添加,仅用于单次对话轮次。语音按钮只会转录当前消息。
|
||||
|
||||
@@ -635,6 +635,7 @@ data/
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -425,7 +425,7 @@ El bucle es deliberadamente simple: el modelo piensa en rondas, llama herramient
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="Bucle de agente de chat DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
Las herramientas activables por el usuario son `brainstorm`, `web_search`, `paper_search`, `reason` y `geogebra_analysis` — más `imagegen` y `videogen` una vez que configures el modelo de generación correspondiente. Las herramientas contextuales como `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` y `workspace_export` se montan automáticamente cuando el turno tiene el contexto adecuado.
|
||||
Las herramientas activables por el usuario son `brainstorm`, `web_search`, `paper_search`, `reason` y `geogebra_analysis` — más `imagegen` y `videogen` una vez que configures el modelo de generación correspondiente. Las herramientas contextuales como `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` y `workspace_export` se montan automáticamente cuando el turno tiene el contexto adecuado.
|
||||
|
||||
El contexto viene en dos tipos: el **contexto de sesión persistente** (capacidad, espacio de trabajo o curso, herramientas, bases de conocimiento, persona, modelo y estado de Reading / Mastery) persiste entre turnos; las **referencias de un solo uso** (archivos, historial de chat, libros, secciones de lectura, cuadernos, banco de preguntas, agentes importados) vienen del menú `+` para un único turno. El botón de voz solo transcribe el mensaje actual.
|
||||
|
||||
@@ -644,6 +644,7 @@ Un binario `deeptutor`, dos formas de entrar: un **REPL** interactivo para quien
|
||||
deeptutor chat # REPL interactivo
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -426,7 +426,7 @@ La boucle est délibérément simple : le modèle réfléchit en rounds, appelle
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="Boucle d'agent Chat de DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
Les outils basculables par l'utilisateur sont `brainstorm`, `web_search`, `paper_search`, `reason` et `geogebra_analysis` — plus `imagegen` et `videogen` une fois que vous avez configuré le modèle de génération correspondant. Les outils contextuels tels que `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` et `workspace_export` se montent automatiquement quand le tour dispose du bon contexte.
|
||||
Les outils basculables par l'utilisateur sont `brainstorm`, `web_search`, `paper_search`, `reason` et `geogebra_analysis` — plus `imagegen` et `videogen` une fois que vous avez configuré le modèle de génération correspondant. Les outils contextuels tels que `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` et `workspace_export` se montent automatiquement quand le tour dispose du bon contexte.
|
||||
|
||||
Le contexte se présente en deux types : le **contexte de session persistant** (capacité, espace de travail ou cours, outils, bases de connaissances, persona, modèle et état Reading / Mastery) persiste entre les tours ; les **références ponctuelles** (fichiers, historique de chat, livres, sections de lecture, carnets, banque de questions, agents importés) proviennent du menu `+` pour un seul tour. Le bouton vocal ne transcrit que le message en cours.
|
||||
|
||||
@@ -645,6 +645,7 @@ Un seul binaire `deeptutor`, deux façons d'accéder : un **REPL** interactif po
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ Loop जानबूझकर simple है: model rounds में सोचत
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="DeepTutor Chat agent loop" width="900">
|
||||
</div>
|
||||
|
||||
User-toggleable tools हैं `brainstorm`, `web_search`, `paper_search`, `reason`, और `geogebra_analysis` — साथ ही `imagegen` और `videogen` जब आप matching generation model configure करें। Contextual tools जैसे `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present`, और `workspace_export` तब automatically mount होते हैं जब turn के पास सही context हो।
|
||||
User-toggleable tools हैं `brainstorm`, `web_search`, `paper_search`, `reason`, और `geogebra_analysis` — साथ ही `imagegen` और `videogen` जब आप matching generation model configure करें। Contextual tools जैसे `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present`, और `workspace_export` तब automatically mount होते हैं जब turn के पास सही context हो।
|
||||
|
||||
Context दो प्रकार की होती है: **sticky session context** (capability, workspace या course, tools, knowledge bases, persona, model, और Reading / Mastery state) turns के पार persist करती है; **एक-बार references** (files, chat history, books, reading sections, notebooks, question bank, imported agents) एक single turn के लिए `+` menu से आते हैं। Voice button केवल current message को transcribe करता है।
|
||||
|
||||
@@ -635,6 +635,7 @@ data/
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ Chatはデフォルト機能であり、ほとんどの作業が始まる場所
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="DeepTutorチャットエージェントループ" width="900">
|
||||
</div>
|
||||
|
||||
ユーザーが切り替えられるツールは`brainstorm`、`web_search`、`paper_search`、`reason`、`geogebra_analysis` — 加えて、対応する生成モデルを設定すれば`imagegen`と`videogen`も利用できます。`rag`、`kb_files`、`read_source`、`read_memory`、`write_memory`、`read_skill`、`load_tools`、`exec`、`web_fetch`、`ask_user`、`list_notebook`、`write_note`、`question_bank`、`github`、`consult_subagent`、`workspace_list`、`workspace_read`、`workspace_search`、`workspace_present`、`workspace_export`などのコンテキスト依存ツールは、ターンに適切なコンテキストがある場合に自動的にマウントされます。
|
||||
ユーザーが切り替えられるツールは`brainstorm`、`web_search`、`paper_search`、`reason`、`geogebra_analysis` — 加えて、対応する生成モデルを設定すれば`imagegen`と`videogen`も利用できます。`rag`、`kb_files`、`knowledge_frontier`、`read_source`、`read_memory`、`write_memory`、`read_skill`、`load_tools`、`exec`、`web_fetch`、`ask_user`、`list_notebook`、`write_note`、`question_bank`、`github`、`consult_subagent`、`workspace_list`、`workspace_read`、`workspace_search`、`workspace_present`、`workspace_export`などのコンテキスト依存ツールは、ターンに適切なコンテキストがある場合に自動的にマウントされます。
|
||||
|
||||
コンテキストには2種類あります:**スティッキーセッションコンテキスト**(機能、ワークスペースまたはコース、ツール、知識ベース、ペルソナ、モデル、Reading / Masteryの状態)はターンをまたいで持続します。**ワンタイム参照**(ファイル、チャット履歴、本、読書セクション、ノートブック、問題バンク、インポートしたエージェント)は単一のターンのために`+`メニューから追加します。音声ボタンが文字起こしするのは現在のメッセージだけです。
|
||||
|
||||
@@ -635,6 +635,7 @@ data/
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ Pętla jest celowo prosta: model myśli w rundach, wywołuje narzędzia gdy są
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="Pętla agenta czatu DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
Narzędzia przełączalne przez użytkownika to `brainstorm`, `web_search`, `paper_search`, `reason` i `geogebra_analysis` — plus `imagegen` i `videogen` po skonfigurowaniu odpowiedniego modelu generowania. Narzędzia kontekstowe takie jak `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` i `workspace_export` montują się automatycznie gdy tura ma odpowiedni kontekst.
|
||||
Narzędzia przełączalne przez użytkownika to `brainstorm`, `web_search`, `paper_search`, `reason` i `geogebra_analysis` — plus `imagegen` i `videogen` po skonfigurowaniu odpowiedniego modelu generowania. Narzędzia kontekstowe takie jak `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` i `workspace_export` montują się automatycznie gdy tura ma odpowiedni kontekst.
|
||||
|
||||
Kontekst dzieli się na dwa rodzaje: **trwały kontekst sesji** (możliwość, obszar roboczy lub kurs, narzędzia, bazy wiedzy, persona, model oraz stan Reading / Mastery) jest zachowany przez tury; **jednorazowe odwołania** (pliki, historia czatu, książki, sekcje do czytania, notatniki, bank pytań, zaimportowani agenci) pochodzą z menu `+` dla jednej tury. Przycisk głosowy jedynie transkrybuje bieżącą wiadomość.
|
||||
|
||||
@@ -635,6 +635,7 @@ Jeden plik binarny `deeptutor`, dwa sposoby wejścia: interaktywny **REPL** dla
|
||||
deeptutor chat # interaktywny REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ O loop é deliberadamente simples: o modelo pensa em rondas, chama ferramentas q
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="Loop de agente de chat DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
As ferramentas ativáveis pelo utilizador são `brainstorm`, `web_search`, `paper_search`, `reason` e `geogebra_analysis` — mais `imagegen` e `videogen` depois de configurar o modelo de geração correspondente. Ferramentas contextuais como `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` e `workspace_export` montam automaticamente quando o turno tem o contexto certo.
|
||||
As ferramentas ativáveis pelo utilizador são `brainstorm`, `web_search`, `paper_search`, `reason` e `geogebra_analysis` — mais `imagegen` e `videogen` depois de configurar o modelo de geração correspondente. Ferramentas contextuais como `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` e `workspace_export` montam automaticamente quando o turno tem o contexto certo.
|
||||
|
||||
O contexto é de dois tipos: o **contexto de sessão fixo** (capacidade, espaço de trabalho ou curso, ferramentas, bases de conhecimento, persona, modelo e estado de Reading / Mastery) persiste entre turnos; as **referências únicas** (ficheiros, histórico de chat, livros, secções de leitura, notebooks, banco de questões, agentes importados) vêm do menu `+` para um único turno. O botão de voz transcreve apenas a mensagem atual.
|
||||
|
||||
@@ -635,6 +635,7 @@ Um binário `deeptutor`, duas formas de entrada: um **REPL** interativo para pes
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ DeepTutor отделяет установленный код, приватное
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="Цикл агента чата DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
Переключаемые пользователем инструменты: `brainstorm`, `web_search`, `paper_search`, `reason` и `geogebra_analysis` — плюс `imagegen` и `videogen` после настройки соответствующей генеративной модели. Контекстные инструменты, такие как `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` и `workspace_export`, монтируются автоматически, когда ход имеет подходящий контекст.
|
||||
Переключаемые пользователем инструменты: `brainstorm`, `web_search`, `paper_search`, `reason` и `geogebra_analysis` — плюс `imagegen` и `videogen` после настройки соответствующей генеративной модели. Контекстные инструменты, такие как `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` и `workspace_export`, монтируются автоматически, когда ход имеет подходящий контекст.
|
||||
|
||||
Контекст бывает двух видов: **постоянный контекст сессии** (возможность, рабочее пространство или курс, инструменты, базы знаний, персонаж, модель и состояние Reading / Mastery) сохраняется между ходами; **одноразовые ссылки** (файлы, история чата, книги, разделы чтения, блокноты, банк вопросов, импортированные агенты) берутся из меню `+` для одного хода. Кнопка голосового ввода только транскрибирует текущее сообщение.
|
||||
|
||||
@@ -635,6 +635,7 @@ data/
|
||||
deeptutor chat # интерактивный REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -433,7 +433,7 @@ Chat คือความสามารถเริ่มต้นและส
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="ลูป agent ของ Chat ใน DeepTutor" width="900">
|
||||
</div>
|
||||
|
||||
เครื่องมือที่ผู้ใช้สลับได้ ได้แก่ `brainstorm`, `web_search`, `paper_search`, `reason`, และ `geogebra_analysis` — รวมถึง `imagegen` และ `videogen` เมื่อคุณกำหนดค่าโมเดลสร้างที่ตรงกัน เครื่องมือตามบริบทเช่น `rag`, `kb_files`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` และ `workspace_export` จะ mount อัตโนมัติเมื่อ turn มีบริบทที่ถูกต้อง
|
||||
เครื่องมือที่ผู้ใช้สลับได้ ได้แก่ `brainstorm`, `web_search`, `paper_search`, `reason`, และ `geogebra_analysis` — รวมถึง `imagegen` และ `videogen` เมื่อคุณกำหนดค่าโมเดลสร้างที่ตรงกัน เครื่องมือตามบริบทเช่น `rag`, `kb_files`, `knowledge_frontier`, `read_source`, `read_memory`, `write_memory`, `read_skill`, `load_tools`, `exec`, `web_fetch`, `ask_user`, `list_notebook`, `write_note`, `question_bank`, `github`, `consult_subagent`, `workspace_list`, `workspace_read`, `workspace_search`, `workspace_present` และ `workspace_export` จะ mount อัตโนมัติเมื่อ turn มีบริบทที่ถูกต้อง
|
||||
|
||||
บริบทมีสองประเภท: **sticky session context** (capability, workspace หรือ course, tools, knowledge bases, persona, model และสถานะ Reading / Mastery) คงอยู่ตลอด turns; **one-time references** (ไฟล์, ประวัติ chat, หนังสือ, ส่วนการอ่าน, notebooks, question bank, imported agents) มาจากเมนู `+` สำหรับ turn เดียว ปุ่ม voice ทำหน้าที่ถอดเสียงเฉพาะข้อความปัจจุบัน
|
||||
|
||||
@@ -652,6 +652,7 @@ binary `deeptutor` เดียว, สองวิธีเข้า: **REPL**
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -416,7 +416,7 @@ Chat 是預設能力,也是大多數工作的起點。單一對話可以進行
|
||||
<img src="../../assets/figs/system/chat-agent-loop.png" alt="DeepTutor Chat 代理程式迴圈" width="900">
|
||||
</div>
|
||||
|
||||
使用者可切換的工具包括 `brainstorm`、`web_search`、`paper_search`、`reason` 與 `geogebra_analysis`;設定對應的生成模型後,還會有 `imagegen` 與 `videogen`。`rag`、`kb_files`、`read_source`、`read_memory`、`write_memory`、`read_skill`、`load_tools`、`exec`、`web_fetch`、`ask_user`、`list_notebook`、`write_note`、`question_bank`、`github`、`consult_subagent`、`workspace_list`、`workspace_read`、`workspace_search`、`workspace_present` 與 `workspace_export` 等情境式工具,會在回合具有相符情境時自動掛載。
|
||||
使用者可切換的工具包括 `brainstorm`、`web_search`、`paper_search`、`reason` 與 `geogebra_analysis`;設定對應的生成模型後,還會有 `imagegen` 與 `videogen`。`rag`、`kb_files`、`knowledge_frontier`、`read_source`、`read_memory`、`write_memory`、`read_skill`、`load_tools`、`exec`、`web_fetch`、`ask_user`、`list_notebook`、`write_note`、`question_bank`、`github`、`consult_subagent`、`workspace_list`、`workspace_read`、`workspace_search`、`workspace_present` 與 `workspace_export` 等情境式工具,會在回合具有相符情境時自動掛載。
|
||||
|
||||
情境分成兩類:**固定的工作階段情境**(能力、工作區或課程、工具、知識庫、角色設定、模型,以及 Reading/Mastery 狀態)會延續到後續回合;**單次參照**(檔案、聊天記錄、書籍、閱讀章節、筆記本、題庫、匯入的代理程式)則從 `+` 選單加入,只用於單一回合。語音按鈕只會轉錄目前的訊息。
|
||||
|
||||
@@ -635,6 +635,7 @@ data/
|
||||
deeptutor chat # interactive REPL
|
||||
deeptutor chat --capability deep_solve --kb my-kb --tool rag
|
||||
deeptutor run chat "Explain the Fourier transform" --tool rag --kb textbook
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
deeptutor run deep_research "Survey 2026 papers on RAG" \
|
||||
--config mode=report --config depth=standard
|
||||
```
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# 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](ver1-6-7.md) 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`:
|
||||
|
||||
```bash
|
||||
deeptutor run chat "Find recent work beyond this material" --kb textbook --tool knowledge_frontier
|
||||
```
|
||||
|
||||
### Reasoning 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.yaml` owns every LLM budget.** Stage-level `max_tokens` entries 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 `0` turns the feature off.
|
||||
|
||||
**Full Changelog**: https://github.com/HKUDS/DeepTutor/compare/v1.6.7...v1.6.8
|
||||
@@ -6,6 +6,6 @@ before publishing to PyPI; the web sidebar badge and CLI banner read from this
|
||||
file directly.
|
||||
"""
|
||||
|
||||
__version__ = "1.6.7"
|
||||
__version__ = "1.6.8"
|
||||
|
||||
__all__ = ("__version__",)
|
||||
|
||||
@@ -7,6 +7,7 @@ Combines user directory initialization and port configuration management.
|
||||
import json
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import yaml
|
||||
|
||||
@@ -74,7 +75,7 @@ DEFAULT_MAIN_SETTINGS = {
|
||||
},
|
||||
}
|
||||
|
||||
DEFAULT_AGENTS_SETTINGS = {
|
||||
DEFAULT_AGENTS_SETTINGS: dict[str, Any] = {
|
||||
"capabilities": {
|
||||
"solve": {"temperature": 0.3, "max_tokens": 8192},
|
||||
"research": {"temperature": 0.5, "max_tokens": 12000},
|
||||
|
||||
@@ -28,6 +28,7 @@ import hashlib
|
||||
import logging
|
||||
import os
|
||||
from pathlib import Path
|
||||
import sqlite3
|
||||
import threading
|
||||
import time
|
||||
from typing import Any, Iterator
|
||||
@@ -110,8 +111,7 @@ class FileLibraryStore:
|
||||
# ------------------------------------------------------------------
|
||||
|
||||
@contextmanager
|
||||
def _connect(self) -> Iterator[None]:
|
||||
import sqlite3
|
||||
def _connect(self) -> Iterator[sqlite3.Connection]:
|
||||
|
||||
conn = sqlite3.connect(str(self._db_path), timeout=30.0)
|
||||
conn.row_factory = sqlite3.Row
|
||||
@@ -122,7 +122,6 @@ class FileLibraryStore:
|
||||
conn.close()
|
||||
|
||||
def _init_db(self) -> None:
|
||||
import sqlite3
|
||||
|
||||
with self._connect() as conn:
|
||||
conn.execute(
|
||||
@@ -231,7 +230,6 @@ class FileLibraryStore:
|
||||
filename: str,
|
||||
mime_type: str,
|
||||
) -> dict[str, Any]:
|
||||
import sqlite3
|
||||
|
||||
sha = _sha256(data)
|
||||
now = time.time()
|
||||
|
||||
@@ -849,7 +849,6 @@
|
||||
"Copy": "Copy",
|
||||
"Regenerate": "Regenerate",
|
||||
"Recycle Bin": "Recycle Bin",
|
||||
"Restore": "Restore",
|
||||
"Delete permanently": "Delete permanently",
|
||||
"No deleted chats": "No deleted chats",
|
||||
"Permanently delete this session?": "Permanently delete this session?",
|
||||
@@ -3106,7 +3105,6 @@
|
||||
"Following up on {{name}}": "Following up on {{name}}",
|
||||
"{{done}} of {{total}} answered": "{{done}} of {{total}} answered",
|
||||
"{{count}} selected · at least 2": "{{count}} selected · at least 2",
|
||||
"Delete permanently": "Delete permanently",
|
||||
"The map could not be loaded": "The map could not be loaded",
|
||||
"This map could not be found": "This map could not be found",
|
||||
"Back to topics": "Back to topics",
|
||||
@@ -3698,7 +3696,6 @@
|
||||
"Notes could not be loaded.": "Notes could not be loaded.",
|
||||
"Notes could not be copied.": "Notes could not be copied.",
|
||||
"Note was not saved.": "Note was not saved.",
|
||||
"Retry": "Retry",
|
||||
"Note saved.": "Note saved.",
|
||||
"Note was not deleted.": "Note was not deleted.",
|
||||
"Video learning panels": "Video learning panels",
|
||||
|
||||
@@ -878,7 +878,6 @@
|
||||
"Copy": "复制",
|
||||
"Regenerate": "重新生成",
|
||||
"Recycle Bin": "回收站",
|
||||
"Restore": "恢复",
|
||||
"Delete permanently": "彻底删除",
|
||||
"No deleted chats": "没有已删除的对话",
|
||||
"Permanently delete this session?": "确定要彻底删除此对话吗?",
|
||||
@@ -3106,7 +3105,6 @@
|
||||
"Following up on {{name}}": "追问 {{name}}",
|
||||
"{{done}} of {{total}} answered": "{{total}} 位中已有 {{done}} 位回答",
|
||||
"{{count}} selected · at least 2": "已选 {{count}} 位 · 至少 2 位",
|
||||
"Delete permanently": "确认删除",
|
||||
"The map could not be loaded": "地图读取失败",
|
||||
"This map could not be found": "找不到这张地图",
|
||||
"Back to topics": "返回主题列表",
|
||||
@@ -3698,7 +3696,6 @@
|
||||
"Notes could not be loaded.": "无法加载笔记。",
|
||||
"Notes could not be copied.": "无法复制笔记。",
|
||||
"Note was not saved.": "笔记未保存。",
|
||||
"Retry": "重试",
|
||||
"Note saved.": "笔记已保存。",
|
||||
"Note was not deleted.": "笔记未删除。",
|
||||
"Video learning panels": "视频学习面板",
|
||||
|
||||
Reference in New Issue
Block a user