DSH Archive Manager

# DSH Archive Manager **Безопасное управление архивированными сессиями в DeepSeek Harness** [English](README.md) · [简体中文](README.zh-CN.md) · [История изменений](CHANGELOG.md) · [Apache-2.0](LICENSE) [![Лицензия: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) [![npm package](https://img.shields.io/npm/v/%40michengai%2Fdsh-archive-manager.svg?label=npm%20package)](https://www.npmjs.com/package/@michengai/dsh-archive-manager) [![npm downloads](https://img.shields.io/npm/dt/%40michengai%2Fdsh-archive-manager.svg?label=npm%20downloads)](https://www.npmjs.com/package/@michengai/dsh-archive-manager) [![DSH Web Plugin](https://img.shields.io/badge/DSH%20Web-Plugin-0f766e.svg)](https://github.com/MichengAI/dsh-archive-manager) [![DSH supported through 0.2.2-alpha.3](https://img.shields.io/badge/DSH-up%20to%200.2.2--alpha.3-2563eb.svg)](#предварительные-требования)
> 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 и нативными чекбоксами: ![Архив: общие фильтры поиска, избранное и компактные строки](assets/screenshots/archived-sessions.webp) Переключитесь на **Незаархивированные** для умной очистки неактивных и пакетного архивирования: ![Незаархивированные: умная очистка неактивных и архивирование проектов](assets/screenshots/unarchived-sessions.webp) ### 2. Главная панель рабочей области (вход с боковой панели) При включенном пункте боковой панели открывается центрированное представление рабочей области шириной 960px: ![Главная панель: отдельный вход на боковой панели и 960px центрированный вид](assets/screenshots/main-view-panel.webp) ### 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).