# DSH Archive Manager
**Безопасное управление архивированными сессиями в DeepSeek Harness**
[English](README.md) · [简体中文](README.zh-CN.md) · [История изменений](CHANGELOG.md) · [Apache-2.0](LICENSE)
[](LICENSE)
[](https://www.npmjs.com/package/@michengai/dsh-archive-manager)
[](https://www.npmjs.com/package/@michengai/dsh-archive-manager)
[](https://github.com/MichengAI/dsh-archive-manager)
[](#предварительные-требования)
> DSH Archive Manager — это поддерживаемый сообществом плагин для DeepSeek Harness (DSH), а не официальный продукт DeepSeek AI.
## Что умеет плагин
Убирайте неактивные беседы с глаз долой и находите их, когда они снова понадобятся, держа список повседневных задач в порядке.
- **Архивировать беседы**: убрать один чат или все незаархивированные чаты рабочей области.
- **Находить прошлую работу**: искать по названиям и содержимому, комбинировать фильтры по проекту/избранному/дате, сортировать по времени, названию или числу ходов.
- **Восстанавливать задачи**: восстановить один чат, выбранные чаты или группу проекта; выбрать все отфильтрованные результаты для массовых действий.
- **Очищать записи**: безвозвратно удалять ненужные архивы после подтверждения, отслеживать прогресс пакетной обработки и повторять оставшиеся элементы.
- **Упорядочивать важные чаты**: сохранять избранное и предпросматривать очистку неактивных, защищая избранное и активную работу.
- **Очистка сессий-сирот**: автоматически находить и физически удалять остаточные подагенты, чьи родительские сессии были удалены.
- **Действия по правому клику на всю строку**: правый клик по строке рабочей области или сессии вызывает контекстное меню; для строк без меню сохраняется нативное системное меню.
- **Стандартизация избранного и сосуществование с точками статуса (#90, #92)**: выравнивание звёздочки до 16×16px с абсолютным позиционированием поверх слота, устраняющее дрожание; при активности сессии нативные индикаторы статуса остаются полностью видимыми, а звёздочка адаптируется в 10px значок в правом нижнем углу.
- **Быстрые действия рабочей области**: контекстное меню рабочей области позволяет скопировать путь («Копировать папку»), открыть в проводнике («Открыть папку») и заархивировать сессии в один клик.
- **Перемещение сессии между рабочими областями**: каскадное подменю с блокировкой процессов, атомарной перезаписью, мгновенным прогревом проекций и безопасностью двоеточий IM-сессий в NTFS.
- **Интегрированные карточки-аккордеоны и ультракомпактные строки 40px**: группировка проектов в едином стиле Skills Manager; высота строк уменьшена до 40px для максимальной плотности информации.
- **Нативные темные чекбоксы**: возврат к нативным примитивам Checkbox с `accent-color`, идеальное слияние с темным фоном без белых артефактов.
- **Защита модальных окон от просвечивания и локализация доступности**: модальные окна превью монтируются в body (`portalToBody`) с матовым размытием; кнопки закрытия поддерживают трехъязычные метки (`common.close`).
- **Стандартизация ID секции и совместимость (#91)**: ID секции настроек обновлен на `archive-manager` с защитой fail-soft `try/catch` для мирного сосуществования с другими плагинами архивации.
> В этом README описан выпуск **1.1.19**. Полный список возможностей и границы обновления — в [истории изменений](CHANGELOG.md).
## Восстановление кеша списков (ещё не выпущено, #88)
При открытии менеджера проверяются только заголовки и официальный кеш обычных холодных сессий зарегистрированных рабочих областей и архива. Карточка появляется лишь при отсутствии или несовместимости кеша либо проекции названия. По нажатию полные журналы читаются по одному через read-only дескрипторы, а официальный `coldSnapshot` восстанавливает зарегистрированные проекции в `session_projcache`.
Старые домены плагина не сканируются, JSON не копируется, Session/Agent не активируются, модели не вызываются, архивы и расписания не меняются. Активные сессии пропускаются; повторяются только ошибки. После обработки обновляется официальный список и повторяется проверка. Тайм-аут подтверждения не отменяет запись: удаление остаётся в очереди после незавершённой нативной записи. Закрытие страницы останавливает последующие запросы, но не уже отправленный.
## Очистка подагентов-сирот
Когда родительская сессия удалена извне, её дочерние подагенты могут оставаться на диске. Менеджер архива находит такие сессии в панели организации и позволяет физически удалить их в один клик.
## Поиск и предпросмотр
- **Архив** и **Незаархивированные** используют общий поиск по названию/содержимому, фильтры проекта, избранного и даты обновления, а также сортировку по времени создания. Ставьте или снимайте избранное на любой вкладке.
- Поиск по умолчанию автоматически охватывает как названия, так и текст истории сообщений (включая пользователя и ассистента). Фильтры дат включают весь локальный конечный день и комбинируются с проектом и избранным.
- Совпадения показывают фрагменты и подсветку. На вкладке **Архив** щёлкните фрагмент или **Дополнительно → Быстрый предпросмотр**, чтобы изучить контекст без восстановления. На вкладке **Незаархивированные** фрагмент открывает полную беседу.
- Предпросмотр рендерит Markdown-таблицы, цитаты и блоки кода с подписями ролей; переключитесь на исходный текст для подсветки. Показывается до восьми последних сообщений либо контекст вокруг первого совпадения. Каждое сообщение ограничено 2 000 кодовых единиц UTF-16 без разрыва Unicode-символов.
- Поиск принимает до 200 символов запроса и читает пакетами максимум по 20 сессий последовательно внутри каждого пакета. Инструменты, вложения, рассуждения, системные сообщения и плагинные вставки исключаются. Ошибки чтения остаются видимыми и их можно повторить. Сохранённый текст — это не текущий контекст модели.
- Постоянного полнотекстового индекса нет. Большие или длинные беседы могут обрабатываться медленно; сначала сузьте по проекту, датам или избранному. Никаких гарантий по числу сессий или задержке не установлено. Смена фильтров останавливает последующие пакеты и устаревшие результаты, но не может прервать уже читаемый пакет.
## Скриншоты
### 1. Панель настроек архива (карточки-аккордеоны и темные чекбоксы)
Поиск, избранное, предпросмотр, восстановление и очистка в **Настройки → Архив сессий → Архив** с ультракомпактными строками 40px и нативными чекбоксами:

Переключитесь на **Незаархивированные** для умной очистки неактивных и пакетного архивирования:

### 2. Главная панель рабочей области (вход с боковой панели)
При включенном пункте боковой панели открывается центрированное представление рабочей области шириной 960px:

### 3. Нативное контекстное меню боковой панели и каскадное перемещение
Правый клик по строке рабочей области или сессии открывает контекстное меню и каскадное подменю перемещения:
| Быстрые действия рабочей области | Перемещение сессии между проектами |
| :---: | :---: |
|
|
|
*Скриншоты демонстрируют ключевые панели, полноразмерное представление и нативные контекстные меню в формате WebP без потерь.*
## Предварительные требования
- Рабочая установка [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) Web с доступным `dsh` в терминале.
- Поддерживаемые версии DSH: все RC ветки `0.2.x` (`0.2.0-rc.1`, `0.2.0-rc.2`, `0.2.1-rc.1`–`0.2.1-rc.5`) и последняя alpha (`0.2.2-alpha.3`). Промежуточные alpha внутри линии RC не поддерживаются, устанавливайте RC или самую новую alpha. Более ранние хосты отклоняются проверкой версии, и плагин не запускается. Существующие архивы и избранное сохраняются. Для `0.1.x` установите `1.0.20`.
- Node.js версии `^22.19.0 || >=24.0.0`. Для установки из исходников также требуется pnpm.
## Установка
В примерах используется профиль `web`. Замените его на тот профиль, который вы действительно используете.
### Попросите агента установить
Отправьте этот запрос агенту, умеющему выполнять команды в вашем терминале:
```text
Установи последнюю версию @michengai/dsh-archive-manager в мой локальный профиль DSH web, используя официальный npm-реестр. После установки проверь конфигурацию плагина, затем объясни, как перезагрузить DSH и открыть управление архивированными сессиями.
```
### Установка вручную
Выполните в PowerShell:
```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh plugin --profile web add @michengai/dsh-archive-manager@latest --registry=https://registry.npmjs.org/
```
Перезапустите DSH Web, затем жёстко обновите браузер (`Ctrl+Shift+R`). Откройте **Настройки → Архив сессий**, чтобы начать работу.
## Использование
| Цель | Действие |
| --- | --- |
| Архивировать один чат | Откройте меню сессии на боковой панели и выберите **Заархивировать сессию** |
| Архивировать рабочую область | Откройте меню рабочей области и выберите **Заархивировать все чаты** |
| Найти архив | Откройте **Настройки → Архив сессий**, затем выберите поиск по названию/содержимому или фильтруйте по проекту, избранному и датам |
| Изменить порядок | Сортируйте по недавнему архивированию, времени обновления, времени создания или названию |
| Восстановить один чат | Щёлкните значок восстановления или выберите **Дополнительно → Восстановить и открыть** |
| Архивировать проект или несгруппированные чаты | На вкладке **Незаархивированные** откройте меню **…** группы и подтвердите архивирование всех чатов этой группы независимо от фильтров поиска |
| Избранное для чата | Щёлкните звезду справа; используйте выпадающий список избранного для фильтрации |
| Предпросмотр архивированного | Щёлкните фрагмент совпадения или **Дополнительно → Быстрый предпросмотр** |
| Очистить неактивные чаты | На вкладке **Незаархивированные** задайте **Дни простоя**, просмотрите кандидатов и подтвердите |
| Скопировать ID | Скопируйте ID сессии через меню **Дополнительно** |
| Очистить подагентов-сирот | Обнаружить и физически удалить оставшиеся подагенты в панели организации |
| Архивировать по проектам | Переключитесь на **Незаархивированные**, выберите сессии в разных проектах, затем нажмите **Архивировать** и подтвердите |
| Массовое восстановление или удаление | Выберите чаты и используйте массовые действия или меню проекта; отдельных кнопок «Восстановить всё» / «Удалить всё» нет |
Страница открывается на вкладке **Архив**, справа — **Незаархивированные**. Переключение вкладок сбрасывает выбор; смена поиска или фильтра проекта сохраняет его. Проверьте скрытое число выбранных перед массовым действием или сначала очистите выбор.
**Выбрать все результаты** выбирает подходящие сессии, включая свёрнутые группы. Действия по всему проекту по-прежнему применяются ко всему проекту независимо от фильтров поиска. Вкладка **Незаархивированные** исключает субагентов и пустые заглушки.
Массовое архивирование и восстановление из настроек и боковой панели последовательно вызывают официальные API `ctx.workspaces.archiveSession` и `ctx.workspaces.unarchiveSession`.
### Избранное и очистка неактивных
Компактные группы проектов можно сворачивать. Звёзды и значки восстановления/архива появляются справа; в меню архивированной сессии есть «Восстановить и открыть» и удаление.
- Используйте звезду на любой вкладке и выпадающий список **Только избранное**, чтобы найти важные чаты. Избранное сохраняется на хосте при архивировании, восстановлении и смене браузера. Переоткройте управление, чтобы увидеть изменения, сделанные на других страницах. Неизвестные или нечитаемые сессии сохраняют свои сохранённые ID избранного; очистка требует подтверждённого отсутствия артефакта.
- На вкладке **Незаархивированные** введите 1–36 500 целых дней в поле **Дни простоя** и просмотрите кандидатов при текущих фильтрах. Снимите отдельных кандидатов перед подтверждением. Избранное, текущий чат, запущенные сессии (включая субагентов) и ожидающие взаимодействия защищены; сессии без корректного времени активности исключаются.
- Архив повторно проверяет избранное и активность. Пакетное архивирование, восстановление и удаление показывают ход и число успешных, пропущенных и неудачных элементов. Ошибка одной записи не останавливает остальные; повтор затрагивает только неудачные. Повторное удаление всё равно требует подтверждения.
- **Отменить эту архивацию** восстанавливает сессии, архивированные текущим пакетом, включая успешные повторы. Доступно, пока открыта текущая страница управления; обновление или закрытие очищает его. Постоянное удаление отменить нельзя.
- Избранное всё ещё можно архивировать вручную. Защита относится только к очистке неактивных. Плановой или автоматической фоновой очистки нет.
### Просмотр и продолжение архивированных бесед
Нативная навигация по беседе доступна с `0.1.40`; в 1.0.0 используются такие точки входа:
- **Щёлкните название сессии**: откройте нативную сессию DSH для просмотра сообщений, вложений и деталей инструментов. Продолжайте общение, сохраняя сессию архивированной.
- **Дополнительно → Восстановить и открыть**: снимите архивирование с сессии и откройте её, чтобы продолжить работу.
## Совместимость поискового API (для интеграторов)
Канонический API — `workspaceRegistry.searchSessionContent({ sessionIds, query })`, покрывающий архивированные и незаархивированные сессии. Передайте 1–20 ID сессий и непустой запрос в 1–200 символов; ID дедуплицируются. Результат имеет вид `{ items: [{ sessionId, seq, snippet }], failures: [{ sessionId, message }] }`. Отдельные ошибки чтения попадают в `failures`; некорректный ввод отклоняет вызов.
`searchArchivedContent` остаётся устаревшей точкой входа только для архива. Обе используют существующее подключение Typert хоста и границу авторизации; никакого HTTP-эндпоинта или настройки аутентификации не добавляется. Сохраняйте устаревший дескриптор во всём поддерживаемом диапазоне хостов, включая патч-релизы. Удаление требует явного изменения диапазона совместимости, миграции клиента и уведомления об устаревании. Новые клиенты предпочитают канонический API и используют старый только как запасной вариант для версий, никогда не отправляя один и тот же поиск в оба.
## Обновления
Нажмите **Check for updates** в заголовке страницы управления архивом (кнопка пока на английском). Среды DSH CLI или Desktop с поддержкой автоматического обновления могут обновиться напрямую; другие среды дают ручную команду для текущего профиля. Можно также перевыполнить команду установки выше.
## Частые вопросы
### Почему записи нет после установки?
Перезапустите DSH Web и жёстко обновите браузер. Убедитесь, что установили в используемый профиль. Если записи всё ещё нет, выполните:
```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh --profile web --dump-config
```
В конфигурации должен присутствовать `ui-workspace-archive-manager`, и он не должен отключать официальные `workspace` или `session-projection-cache`. Оставшийся override `archive-manager-host` можно удалить. В текущих хостах DSH официальной записи `ui-settings-unarchive-sessions` уже нет, поэтому плагин больше её не отключает (иначе dump-config предупреждает, что запись патча не найдена). Если `cordis.patch.yml` вашего профиля всё ещё отключает `workspace`, `session-projection-cache` или `ui-workspace`, удалите эти override и перезапустите.
### Что происходит со старым кэшем плагина после обновления?
Плагин не заменяет официальную таблицу кэша проекций и больше не сканирует, не проверяет и не переносит старый кэш. Открытие списка архива не читает полные журналы и не дописывает официальный кэш для восстановления отсутствующих записей. Журналы сессий остаются у хоста, который восстанавливает производные данные, включая названия, по мере необходимости. Включение и отключение плагина не переключает таблицы кэша; включать его специально для импорта больше не нужно.
**У холодной сессии без официального кэша название может временно отсутствовать в списке; одно обновление списка не гарантирует восстановление.** Чтение журнала позволяет восстановить название, а восстановление сессии как активной запускает штатную запись кэша. Старые файлы кэша сохраняются без изменений: плагин не читает и не удаляет их автоматически. Подробности — в [журнале изменений](CHANGELOG.md).
### Чем архивирование отличается от удаления?
Архивирование убирает беседу, чтобы позже её можно было восстановить. **Постоянное удаление отменить нельзя** и оно может также удалить вложения этой сессии. Оно не удаляет рабочую директорию вашего проекта. Удаление требует подтверждения.
### Можно ли использовать с Codex UI?
Да. [Codex UI](https://github.com/MichengAI/dsh-codex-ui) сохраняет свой внешний вид и взаимодействие. Управление архивом остаётся доступным в **Настройки → Архив сессий**.
### Сосуществование с другими плагинами архивации
Этот плагин регистрирует пункт настроек с идентификатором `archive-manager`. Если одновременно установлены другие плагины управления архивом (например, `@linxin666/dsh-session-archive`), в боковой панели настроек появятся два отдельных пункта «Архив сессий». К каждому из них можно получить независимый доступ в настройках, что является ожидаемым поведением.
При других проблемах откройте [issue](https://github.com/MichengAI/dsh-archive-manager/issues) с версиями DSH и плагина, шагами воспроизведения и деталями ошибки.
## Установка из исходников
Развернуть для разработки или тестирования неопубликованных изменений
Выполните эти команды в каталоге по вашему выбору. Для локальных изменений, которые ещё не запушены, используйте существующую рабочую копию.
```powershell
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
git clone https://github.com/MichengAI/dsh-archive-manager.git
Set-Location .\dsh-archive-manager
pnpm install --frozen-lockfile
pnpm build
dsh plugin --profile web add .
```
После этого перезапустите DSH Web и жёстко обновите браузер. Исходный код в [src](src) использует строгий TypeScript. GitHub и npm включают готовый к запуску `lib`. После изменения исходников выполните `pnpm build` перед коммитом, иначе установка из исходников сохранит прежний рантайм. Опубликованные точки входа JavaScript и модули рантайма не меняются; установка npm-пакета не требует TypeScript. Выполните `pnpm typecheck` для проверки типов, `pnpm test` для проверки изменений или `pnpm verify` для полных проверок.
## Экосистема продуктов DSH
Для настольного рабочего стола скачайте [DSH Codex Desktop](https://github.com/MichengAI/dsh-codex-desktop/releases). Существующие установки [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) могут добавлять плагины по мере необходимости, следуя README каждого проекта. Ниже перечислены 11 собственных плагинов; уточняйте, что входит в конкретную версию, по соответствующим примечаниям к релизу и встроенному каталогу.
| Плагин | Что умеет |
| --- | --- |
| [Codex UI](https://github.com/MichengAI/dsh-codex-ui) | Организовывать проекты и беседы, искать задачи, перемещаться по ходам чата |
| [Agency Agents](https://github.com/MichengAI/dsh-agency-agents) | Выбирать и вызывать специалистов для задачи |
| [Skills Manager](https://github.com/MichengAI/dsh-skills-manager) | Находить, включать, создавать и импортировать локальные навыки |
| [Archive Manager](https://github.com/MichengAI/dsh-archive-manager) | Искать, восстанавливать или очищать архивированные беседы |
| [IM Connect](https://github.com/MichengAI/dsh-im-connect) | Отправлять задачи и получать ответы через мессенджеры |
| [Automation](https://github.com/MichengAI/dsh-automation) | Планировать задачи и просматривать каждый запуск |
| [BTW](https://github.com/MichengAI/dsh-btw) | Задавать побочные вопросы, не прерывая основную задачу |
| [Simplify](https://github.com/MichengAI/dsh-simplify) | Использовать `/simplify` для улучшения кода в ваших Git-изменениях |
| [PUA](https://github.com/MichengAI/dsh-pua) | Направлять агента пробовать новые подходы после неудач, выяснять причины и проверять результат до завершения |
| [Code Review](https://github.com/MichengAI/dsh-code-review) | Использовать `/review` для независимого код-ревью агентом и получать отчёт в текущей беседе |
| [Codex Pet](https://github.com/MichengAI/dsh-codex-pet) | Просматривать уведомления бесед и отвечать на одобрения инструментов и вопросы через настольного питомца |
## Лицензия
Распространяется по лицензии [Apache License 2.0](LICENSE).