Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
651da05
feat(cli): /summary supports custom export path (#8113)
qwen-code-dev-bot Jul 30, 2026
a8f3726
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Jul 30, 2026
ae966bb
fix(cli): summary custom path dir detection and i18n key (#8116)
qwen-code-dev-bot Jul 30, 2026
721ae1b
test(cli): assert relative display path in summary tests (#8116)
Jul 30, 2026
96f73b1
fix(cli): summary path containment, early validation, and mkdir harde…
Jul 30, 2026
4e6a6f4
fix(cli): defer summary mkdir to save time so failed generation leave…
Jul 30, 2026
9fbecfe
fix(cli): normalize path separators in summary test and assert file c…
Jul 30, 2026
7238cbf
test(cli): assert directory permission mode in summary test (#8116)
Jul 30, 2026
25e810b
fix(cli): resolve symlinks in summary path containment check (#8116)
Jul 30, 2026
fae425d
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Jul 31, 2026
afac1c1
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Jul 31, 2026
f6467bf
fix(cli): reject broken symlinks escaping project root in /summary (#…
qwen-code-ci-bot Jul 31, 2026
bc46383
fix(cli): guard /summary overwrite and expand tilde in path (#8116)
qwen-code-dev-bot Jul 31, 2026
ddee516
fix(cli): re-validate appended default filename for symlink escape in…
Jul 31, 2026
6109840
fix(cli): harden /summary symlink chain walk, file mode, and overwrit…
Aug 1, 2026
cae22cd
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
578baa1
fix(cli): address review feedback on /summary custom path (#8116)
Aug 1, 2026
523cf48
fix(cli): address review feedback on /summary custom path (#8116)
Aug 1, 2026
5044921
fix(cli): address review feedback on /summary custom path (#8116)
Aug 1, 2026
543b120
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
f18300f
test(cli): cover post-LLM symlink re-check and interactive error UI (…
qwen-code-dev-bot Aug 1, 2026
9d6d556
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
0ee995d
Merge branch 'main' into feat/summary-export-path
wenshao Aug 1, 2026
c4c268a
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
9a9d374
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
4c32ef3
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
812e233
fix(cli): address review feedback on /summary custom path (#8116)
qwen-code-ci-bot Aug 1, 2026
63359f6
Merge branch 'main' into feat/summary-export-path
wenshao Aug 1, 2026
d707217
Merge branch 'main' into feat/summary-export-path
qwen-code-dev-bot Aug 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion docs/users/features/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ These commands help you save, restore, and summarize work progress.
| Command | Description | Usage Examples |
| ---------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------- |
| `/init` | Analyze current directory and create initial context file | `/init` |
| `/summary` | Generate project summary based on conversation history | `/summary` |
| `/summary` | Generate project summary based on conversation history | `/summary` or `/summary docs/my-summary.md` |
| `/compress` | Replace chat history with summary to save Tokens | `/compress` or `/summarize` |
| `/compress-fast` | Fast compression without AI — strips old tool outputs and thinking parts | `/compress-fast` |
| `/resume` | Resume a previous conversation session | `/resume` or `/continue` |
Expand All @@ -38,6 +38,10 @@ These commands help you save, restore, and summarize work progress.
>
> `/summarize` is an alias for `/compress` (it compresses chat history — a destructive operation). To generate a non-destructive project summary instead, use `/summary`.

> [!note]
>
> `/summary` accepts an optional `[path]` argument to save the summary to a custom location within the project root. Without an argument, it saves to `.qwen/PROJECT_SUMMARY.md`. Custom-path summaries are not detected by the welcome-back flow (`ui.enableWelcomeBack`), which only reads the default `.qwen/PROJECT_SUMMARY.md` location.

### 1.2 Interface and Workspace Control

Commands for adjusting interface appearance and work environment.
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/ca.js
Original file line number Diff line number Diff line change
Expand Up @@ -1117,6 +1117,14 @@ export default {
"Ja s'està generant el resum, espereu que acabi la sol·licitud anterior",
'No conversation found to summarize.':
"No s'ha trobat cap conversa per resumir.",
'Summary path already exists and is not a generated summary: {{path}}':
'El camí del resum ja existeix i no és un resum generat: {{path}}',
'Summary path must be within the project root.':
'El camí del resum ha de ser dins de la arrel del projecte.',
'Summary path resolves to an existing directory: {{path}}':
'El camí del resum es resol a un directori existent: {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'El camí del resum acaba amb un separador però és un fitxer existent: {{path}}',
'Failed to generate project context summary: {{error}}':
'Error en generar el resum del context del projecte: {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/de.js
Original file line number Diff line number Diff line change
Expand Up @@ -992,6 +992,14 @@ export default {
'Zusammenfassung wird bereits generiert, warten Sie auf Abschluss der vorherigen Anfrage',
'No conversation found to summarize.':
'Kein Gespräch zum Zusammenfassen gefunden.',
'Summary path already exists and is not a generated summary: {{path}}':
'Der Zusammenfassungspfad existiert bereits und ist keine generierte Zusammenfassung: {{path}}',
'Summary path must be within the project root.':
'Der Zusammenfassungspfad muss sich im Projektstammverzeichnis befinden.',
'Summary path resolves to an existing directory: {{path}}':
'Der Zusammenfassungspfad verweist auf ein vorhandenes Verzeichnis: {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'Der Zusammenfassungspfad endet mit einem Trennzeichen, ist aber eine vorhandene Datei: {{path}}',
'Failed to generate project context summary: {{error}}':
'Fehler beim Generieren der Projektkontextzusammenfassung: {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -1470,6 +1470,14 @@ export default {
'Already generating summary, wait for previous request to complete':
'Already generating summary, wait for previous request to complete',
'No conversation found to summarize.': 'No conversation found to summarize.',
'Summary path already exists and is not a generated summary: {{path}}':
'Summary path already exists and is not a generated summary: {{path}}',
'Summary path must be within the project root.':
'Summary path must be within the project root.',
'Summary path resolves to an existing directory: {{path}}':
'Summary path resolves to an existing directory: {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'Summary path ends with a separator but is an existing file: {{path}}',
'Failed to generate project context summary: {{error}}':
'Failed to generate project context summary: {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/fr.js
Original file line number Diff line number Diff line change
Expand Up @@ -1123,6 +1123,14 @@ export default {
'Génération de résumé déjà en cours, attendez que la demande précédente se termine',
'No conversation found to summarize.':
'Aucune conversation trouvée à résumer.',
'Summary path already exists and is not a generated summary: {{path}}':
"Le chemin du résumé existe déjà et n'est pas un résumé généré : {{path}}",
'Summary path must be within the project root.':
'Le chemin du résumé doit se trouver dans la racine du projet.',
'Summary path resolves to an existing directory: {{path}}':
'Le chemin du résumé correspond à un répertoire existant : {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'Le chemin du résumé se termine par un séparateur mais est un fichier existant : {{path}}',
'Failed to generate project context summary: {{error}}':
'Échec de la génération du résumé du contexte du projet : {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/ja.js
Original file line number Diff line number Diff line change
Expand Up @@ -763,6 +763,14 @@ export default {
'Already generating summary, wait for previous request to complete':
'サマリー生成中です。前のリクエストの完了をお待ちください',
'No conversation found to summarize.': '要約する会話が見つかりません',
'Summary path already exists and is not a generated summary: {{path}}':
'サマリーパスは既に存在し、生成されたサマリーではありません: {{path}}',
'Summary path must be within the project root.':
'サマリーパスはプロジェクトルート内にある必要があります',
'Summary path resolves to an existing directory: {{path}}':
'サマリーパスは既存のディレクトリに解決されます: {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'サマリーパスは区切り文字で終わっていますが、既存のファイルです: {{path}}',
'Failed to generate project context summary: {{error}}':
'プロジェクトコンテキストサマリーの生成に失敗: {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/pt.js
Original file line number Diff line number Diff line change
Expand Up @@ -997,6 +997,14 @@ export default {
'Já gerando resumo, aguarde a conclusão da solicitação anterior',
'No conversation found to summarize.':
'Nenhuma conversa encontrada para resumir.',
'Summary path already exists and is not a generated summary: {{path}}':
'O caminho do resumo já existe e não é um resumo gerado: {{path}}',
'Summary path must be within the project root.':
'O caminho do resumo deve estar dentro da raiz do projeto.',
'Summary path resolves to an existing directory: {{path}}':
'O caminho do resumo resolve para um diretório existente: {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'O caminho do resumo termina com um separador, mas é um arquivo existente: {{path}}',
'Failed to generate project context summary: {{error}}':
'Falha ao gerar resumo do contexto do projeto: {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
8 changes: 8 additions & 0 deletions packages/cli/src/i18n/locales/ru.js
Original file line number Diff line number Diff line change
Expand Up @@ -1005,6 +1005,14 @@ export default {
'Генерация сводки уже выполняется, дождитесь завершения предыдущего запроса',
'No conversation found to summarize.':
'Не найдено диалогов для создания сводки.',
'Summary path already exists and is not a generated summary: {{path}}':
'Путь сводки уже существует и не является сгенерированной сводкой: {{path}}',
'Summary path must be within the project root.':
'Путь сводки должен находиться в корне проекта.',
'Summary path resolves to an existing directory: {{path}}':
'Путь сводки указывает на существующий каталог: {{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'Путь сводки заканчивается разделителем, но является существующим файлом: {{path}}',
'Failed to generate project context summary: {{error}}':
'Не удалось сгенерировать сводку контекста проекта: {{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
7 changes: 7 additions & 0 deletions packages/cli/src/i18n/locales/zh-TW.js
Original file line number Diff line number Diff line change
Expand Up @@ -1300,6 +1300,13 @@ export default {
'Already generating summary, wait for previous request to complete':
'正在生成摘要,請等待上一個請求完成',
'No conversation found to summarize.': '未找到要總結的對話',
'Summary path already exists and is not a generated summary: {{path}}':
'摘要路徑已存在且非產生的摘要:{{path}}',
'Summary path must be within the project root.': '摘要路徑必須在專案根目錄內',
'Summary path resolves to an existing directory: {{path}}':
'摘要路徑解析為一個已存在的目錄:{{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'摘要路徑以分隔符結尾,但是一個已存在的檔案:{{path}}',
'Failed to generate project context summary: {{error}}':
'生成項目上下文摘要失敗:{{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
7 changes: 7 additions & 0 deletions packages/cli/src/i18n/locales/zh.js
Original file line number Diff line number Diff line change
Expand Up @@ -1410,6 +1410,13 @@ export default {
'Already generating summary, wait for previous request to complete':
'正在生成摘要,请等待上一个请求完成',
'No conversation found to summarize.': '未找到要总结的对话',
'Summary path already exists and is not a generated summary: {{path}}':
'摘要路径已存在且不是生成的摘要:{{path}}',
'Summary path must be within the project root.': '摘要路径必须在项目根目录内',
'Summary path resolves to an existing directory: {{path}}':
'摘要路径解析为一个已存在的目录:{{path}}',
'Summary path ends with a separator but is an existing file: {{path}}':
'摘要路径以分隔符结尾,但是一个已存在的文件:{{path}}',
'Failed to generate project context summary: {{error}}':
'生成项目上下文摘要失败:{{error}}',
'Saved project summary to {{filePathForDisplay}}.':
Expand Down
Loading
Loading