@goodandready/dsh-remote-workspace 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,62 +1,71 @@
1
1
  # DESIGN.md — dsh-remote-workspace
2
2
 
3
3
  ## Product / Purpose
4
- - **Назначение**: Полнофункциональный корпоративный плагин удалённой разработки для DeepSeek Harness (DSH). Позволяет подключаться к удалённым серверам по SSH, работать с файловой системой через SFTP, вести двустороннюю 3-way синхронизацию без конфликтов, пробрасывать порты и давать агенту LLM компактный набор инструментов для удалённого шелла и файлов.
4
+ - **Назначение**: Полнофункциональный корпоративный плагин удалённой разработки для DeepSeek Harness (DSH). Обеспечивает подключение к удалённым серверам по SSH (ключ / пароль), SFTP-навигацию, 3-way синхронизацию локального зеркала, SSH-туннелирование (port forwarding) и компактный набор инструментов для LLM агента (
5
+ emote_exec,
6
+ emote_fs,
7
+ emote_sync,
8
+ emote_tunnel).
5
9
  - **Аудитория**: Разработчики и инженеры, использующие DSH для работы с проектами на VPS, удаленных серверах, облачных инстансах и MiniPC.
6
- - **Статус**: В активной разработке (MVP).
10
+ - **Статус**: В активной доработке (Стабильность, Тесты, Редизайн в стиле dsh-clinebot).
7
11
 
8
12
  ## User Surfaces
9
- - **Web/UI**: Нативная карточка настроек профилей хостов (Settings -> Remote Workspace), селектор удаленной рабочей папки, индикатор текущего подключения в статусе.
13
+ - **Web/UI**: Нативная карточка настроек профилей хостов (settings.plugin.item), удаленный SFTP браузер каталогов, чип статуса подключения в шапке сессии (conversation.session.header.utilities).
10
14
  - **DSH UI / settings / slots**:
11
- - Карточка настроек: `settings.plugin.item` для `@goodandready/dsh-remote-workspace`.
12
- - Статусный чип/слот подключения в шапке / сайдбаре.
13
- - **API**: HTTP эндпоинты `/api/remote-workspace/hosts`, `/api/remote-workspace/test`, `/api/remote-workspace/browse`, `/api/remote-workspace/sync`, `/api/remote-workspace/tunnels`.
14
- - **CLI / Tools**:
15
- - `remote_exec`: выполнение команд на сервере.
16
- - `remote_fs`: чтение, атомарная запись, патч и stat файлов.
17
- - `remote_sync`: запуск 3-way синхронизации с контролем конфликтов.
18
- - `remote_tunnel`: создание/остановка туннелей port forwarding.
19
- - **Документация**: `README.md` (EN), `README.ru.md` (RU), `README.zh.md` (ZH), технические спецификации в `docs/`.
15
+ - Карточка плагина: settings.plugin.item для @goodandready/dsh-remote-workspace.
16
+ - Статусный чип сессии: conversation.session.header.utilities (order: 30).
17
+ - Запрещённые слоты: settings.section (запрещён стандартом authoring, все настройки только внутри settings.plugin.item).
18
+ - **API маршруты**:
19
+ - GET /dsh-remote-workspace/state: получение профилей, активного хоста и туннелей.
20
+ - POST /dsh-remote-workspace/profiles/save: сохранение профиля (с валидацией и сбросом старых соединений).
21
+ - POST /dsh-remote-workspace/profiles/delete: удаление профиля.
22
+ - POST /dsh-remote-workspace/profiles/active: переключение активного профиля.
23
+ - POST /dsh-remote-workspace/test: live-проверка связи (Ping, OS, Latency).
24
+ - POST /dsh-remote-workspace/browse: чтение содержимого удалённой папки (SFTP).
25
+ - POST /dsh-remote-workspace/sync: запуск двусторонней 3-way синхронизации зеркала (pull/push).
26
+ - POST /dsh-remote-workspace/tunnels/start: создание локального SSH-туннеля.
27
+ - POST /dsh-remote-workspace/tunnels/stop: остановка активного SSH-туннеля.
28
+ - **CLI / Model Tools**:
29
+ -
30
+ emote_exec: выполнение команд на сервере.
31
+ -
32
+ emote_fs: чтение, атомарная запись, stat, mkdir, remove.
33
+ -
34
+ emote_sync: запуск 3-way синхронизации с контролем конфликтов.
35
+ -
36
+ emote_tunnel: создание/остановка/листинг туннелей.
20
37
 
21
- ## Visual Direction
22
- - **Атмосфера**: Премиальный инженерный интерфейс уровня VS Code Remote / Linear / JetBrains Gateway. Строгая типографика, мгновенный отклик, визуализация сетевого состояния (пинг, ОС, туннели).
23
- - **Утверждённые референсы**: Нативные CSS токены DSH (`--dsw-*`, `--dsw-color-*`), карточки с мягкими скруглениями (`rounded-xl`), моноширинные теги и статус-бэйджи.
24
- - **Не копировать**: Спагетти-интерфейс старого dsh-remote, не инжектить принудительно сторонние плагины в `cordis.patch.yml`.
25
-
26
- ## Foundations
27
- - **Цвета и роли**:
28
- - `Online / Connected`: Emerald/Green (`#10b981`).
29
- - `Connecting / Syncing`: Amber/Yellow (`#f59e0b`).
30
- - `Error / Disconnected`: Rose/Red (`#f43f5e`).
31
- - `Tunnel active`: Sky/Cyan (`#0ea5e9`).
32
- - **Типографика**: Стандартный стек шрифтов DSH с `font-mono` для хостов, IP, портов и путей.
33
- - **Сетка и отступы**: 8pt grid, компактные формы с валидацией "на лету".
38
+ ## Visual Direction (Единый стиль dsh-clinebot)
39
+ - **Атмосфера**: Премиальный инженерный интерфейс уровня VS Code Remote / Linear. Строгая типографика, плотные функциональные карточки, чистые переходы и отсутствие лишних теней.
40
+ - **Токены ядра DSH**:
41
+ - Фоны: ar(--dsw-alias-bg-layer-3) (карточки), ar(--dsw-alias-bg-layer-2) (поля ввода, вложенные блоки, таблицы), ar(--dsw-alias-bg-layer-1) (сегменты, подложка).
42
+ - Границы: ar(--dsw-alias-border-l2).
43
+ - Текст: ar(--dsw-alias-label-primary), ar(--dsw-alias-label-secondary), ar(--dsw-alias-label-dimmed).
44
+ - Статусы: ar(--dsw-alias-state-success-primary), ar(--dsw-alias-state-warning-primary), ar(--dsw-alias-state-error-primary), ar(--dsw-alias-state-brand-primary).
45
+ - **Шапка карточки**:
46
+ - Название плагина, подзаголовок, статусный аккордеонный шеврон.
47
+ - Статусные пилюли (Badges): Host online / Offline, Active Profile, Active Tunnels count.
34
48
 
35
49
  ## Components And States
36
- - **HostManagerCard**:
37
- - Список настроенных машин с иконками ОС, пингом и статусом ключа.
38
- - Модальное окно/форма добавления (Host, Port, User, Auth: Key / Password / Agent, JumpHost).
39
- - Кнопка «Проверить подключение» с индикацией задержки (ping ms) и версии SSH.
40
- - **RemoteDirectoryPicker**:
41
- - Дерево каталогов с навигацией по клику, breadcrumbs и кнопкой «Выбрать как Workspace».
42
- - **TunnelManager**:
43
- - Таблица активных Local и Reverse туннелей с тумблерами включения/выключения.
44
- - **Loading / Empty / Error States**:
45
- - Скелетоны при чтении SFTP дерева.
46
- - Ясные подсказки при ошибках авторизации (HostKey mismatch, Auth fail, Timeout, Permission denied).
47
-
48
- ## User Flows
49
- 1. **Настройка**: Открыть настройки -> Добавить хост -> Нажать «Проверить» -> Зелёный статус -> Сохранить.
50
- 2. **Открытие проекта**: Выбрать хост -> Открыть Remote Directory Picker -> Выбрать папку -> Активировать как Remote Workspace.
51
- 3. **Работа агента**: LLM получает компактные инструменты `remote_*`, видит активный хост в system prompt и безопасно редактирует код.
50
+ 1. **Секция 1: Профили серверов (SSH Profiles)**:
51
+ - Таблица настроенных машин с бейджами типа аутентификации (🔑 key / 🔒 pwd), меткой активного сервера, кнопками «Сделать активным», «Редактировать», «Удалить».
52
+ - Пустое состояние: ясное сообщение и кнопка + Добавить хост.
53
+ 2. **Секция 2: Интерактивный редактор профиля**:
54
+ - Название, Хост/IP, Порт, Пользователь.
55
+ - Сегментированный переключатель авторизации (SSH-ключ vs Пароль).
56
+ - Поля авторизации: путь к приватному ключу, парольная фраза, либо пароль (маскированный).
57
+ - Директории: Удалённый каталог проекта (с кнопкой вызова SFTP браузера) и **Локальная папка зеркала** (с подсказкой назначения).
58
+ - Кнопки: «⚡ Проверить связь (Ping)», «Отмена», «Сохранить».
59
+ - Результат пинга: отображение Latency: X ms | OS: Y или понятный текст ошибки.
60
+ 3. **Секция 3: Диагностика активного подключения**:
61
+ - Четырёхколоночная сетка метрик активного сервера (Хост, Удалённая папка, Метод авторизации, Статус ядра).
62
+ 4. **Секция 4: Синхронизация зеркала (Mirror Sync)**:
63
+ - Кнопки Pull (Remote -> Local) и Push (Local -> Remote) с индикацией процесса, результатом и предупреждением при конфликтах.
64
+ 5. **Секция 5: SSH-туннели (Port Forwarding)**:
65
+ - Таблица активных туннелей (ID, Локальный порт -> Удалённый порт) с кнопкой закрытия.
66
+ - Форма создания нового туннеля (Local Port, Remote Port, кнопка «Открыть туннель»).
52
67
 
53
- ## Do / Don't
54
- - **Do**:
55
- - Использовать строгие типы Schemastery для настроек и аргументов тулов.
56
- - Всегда проверять TOFU known_hosts для защиты от спуфинга.
57
- - Делать атомарную запись файлов во избежание повреждения кода при сетевых разрывах.
58
- - Поддерживать три языка (EN, RU, ZH) в интерфейсе.
59
- - **Don't**:
60
- - Забивать контекст LLM десятками однотипных функций `rw_*`.
61
- - Блокировать Event Loop Node.js долгими SFTP операциями — использовать потоки и Promise pool.
62
- - Хранить пароли в открытых логах.
68
+ ## Security & Reliability
69
+ - Защита всех мутирующих эндпоинтов проверкой isTrustedSettingsRequest(req) (защита от cross-site атак).
70
+ - Безопасное чтение Cordis сервисов через .get() с fallback.
71
+ - Изоляция жизненного цикла стримов в TunnelService (прослушивание сокетных и потоковых ошибок).
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## Ключевые выводы анализа dsh-remote
4
4
  1. Преимущество 3-way sync: snapshot хешей предотвращает перезапись изменений при одновременном редактировании на сервере и локально.
5
- 2. Проблема 21 инструмента rw_*: перегружает LLM prompt. В новом плагине объединяем в 4 сбалансированных инструмента: `remote_exec`, `remote_fs`, `remote_sync`, `remote_tunnel`.
6
- 3. Модульность: вместо спагетти в `index.js` реализуем 4 отдельных Cordis сервиса.
5
+ 2. Проблема 21 инструмента rw_*: перегружает LLM prompt. В новом плагине объединяем в 4 сбалансированных инструмента:
6
+ emote_exec,
7
+ emote_fs,
8
+ emote_sync,
9
+ emote_tunnel.
10
+ 3. Модульность: вместо спагетти в index.js реализуем 4 отдельных Cordis сервиса.
7
11
  4. UI: использование нативных CSS переменных DSH, чистый React, поддержка i18n (EN/RU/ZH).
12
+
13
+ ## Результаты аудита стабильности и UI (Фаза 8)
14
+ 1. **Баг localMirrorPath**: в форме профиля отсутствовало поле ввода localMirrorPath, что блокировало синхронизацию зеркала (400 Error).
15
+ 2. **Баг рассинхронизации полей testConnection**: бэкенд отдавал latency/os, клиент ожидал latencyMs/
16
+ emoteOs.
17
+ 3. **Утечка кэшированных SSH-соединений**: при смене хоста или ключа/пароля в профиле старое соединение с тем же id не сбрасывалось из пула SshService.
18
+ 4. **Отсутствие UI для SSH-туннелей**: туннели были поддержаны на бэкенде, но не имели интерфейса в карточке настроек.
19
+ 5. **Безопасность API**: отсутствовал фильтр isTrustedSettingsRequest(req) на мутирующих маршрутах.
@@ -2,13 +2,14 @@
2
2
 
3
3
  ## Журнал выполнения
4
4
  - **2026-09-08**:
5
- - Создан репозиторий `goodandready/dsh-remote-workspace` в Gitea.
6
- - Создана задача Issue #1: `[critical] Initial implementation of dsh-remote-workspace plugin`.
7
- - Создано worktree `issue-1-remote-workspace`.
8
- - Оформлен обязательный дизайн-контракт `docs/design/DESIGN.md`.
9
- - Реализованы 4 ключевых сервиса: `SshService`, `RemoteFsService`, `MirrorSyncService`, `TunnelService`.
10
- - Зарегистрированы инструменты модели: `remote_exec`, `remote_fs`, `remote_sync`, `remote_tunnel`.
11
- - Созданы API маршруты и клиентский компонент с поддержкой `i18n` (RU, EN, ZH).
12
- - Написаны и успешно пройдены 12 тестов (юнит + интеграция SSH + интеграция туннелей + SFTP).
13
- - Проверена упаковка `npm pack --dry-run`.
14
- - Все изменения синхронизированы с веткой `feat/issue-1-remote-workspace` и PR #2.
5
+ - Создан репозиторий goodandready/dsh-remote-workspace в Gitea.
6
+ - Создана задача Issue #1: [critical] Initial implementation of dsh-remote-workspace plugin.
7
+ - Оформлен дизайн-контракт docs/design/DESIGN.md.
8
+ - Реализованы 4 сервиса и 4 инструмента модели.
9
+ - Пройдены первые 12 тестов.
10
+ - **2026-09-09**:
11
+ - Обогащена документация по стандарту dsh-documentation-standard (EN/RU/ZH).
12
+ - **2026-09-10**:
13
+ - Создано worktree stability-and-clinebot-ui для реализации Фазы 8.
14
+ - Выполнен детальный аудит стабильности кода и визуального слоя.
15
+ - Подготовлен и утвержден комплексный план.
@@ -1,26 +1,23 @@
1
1
  # task_plan.md — dsh-remote-workspace
2
2
 
3
3
  ## Цель
4
- Создать высоконадежный корпоративный плагин удаленной разработки `dsh-remote-workspace` для DeepSeek Harness с современным UI, сервисной архитектурой Cordis, 3-way mirror sync, SSH port forwarding и компактным набором инструментов LLM.
4
+ Создать высоконадежный корпоративный плагин удаленной разработки dsh-remote-workspace для DeepSeek Harness с современным UI, сервисной архитектурой Cordis, 3-way mirror sync, SSH port forwarding и компактным набором инструментов LLM.
5
5
 
6
6
  ## Фазы реализации
7
7
  - [x] **Фаза 1**: Анализ dsh-remote, формирование архитектуры, инициализация репозитория Gitea и worktree.
8
- - [x] **Фаза 2**: Конфигурация сборки и репозитория (`package.json`, `.gitignore`, `cordis.patch.yml`).
9
- - [x] **Фаза 3**: Ядро backend сервисов (`SshService`, `RemoteFsService`, `MirrorSyncService`, `TunnelService`).
10
- - [x] **Фаза 4**: Инструменты модели (`remote_exec`, `remote_fs`, `remote_sync`, `remote_tunnel`) и API маршруты.
8
+ - [x] **Фаза 2**: Конфигурация сборки и репозитория (package.json, .gitignore, cordis.patch.yml).
9
+ - [x] **Фаза 3**: Ядро backend сервисов (SshService, RemoteFsService, MirrorSyncService, TunnelService).
10
+ - [x] **Фаза 4**: Инструменты модели (
11
+ emote_exec,
12
+ emote_fs,
13
+ emote_sync,
14
+ emote_tunnel) и API маршруты.
11
15
  - [x] **Фаза 5**: Клиентская часть (i18n RU/EN/ZH, UI слоты).
12
- - [x] **Фаза 6**: Комплексное тестирование модулей:
13
- - Модульные тесты `SshService` (парсинг ключей, disconnectAll).
14
- - Краевые случаи 3-way sync (обнаружение конфликтов при одновременной правке, чистый pull).
15
- - SFTP операции (потоковое чтение, атомарная запись через `.dsh-tmp`, posix stat).
16
- - Сквозной интеграционный тест SSH-сервера (подключение, замер пинга, ОС, exec, обработка неверных паролей).
17
- - Сквозной интеграционный тест SSH Port Forwarding (туннелирование HTTP-трафика через виртуальный зашифрованный канал).
18
- - Синтаксический аудит файлов (`node --check`).
19
- - Упаковка пакета (`npm pack --dry-run`).
20
- - [ ] **Фаза 7**: Дополнительные ручные сценарии и доводка по обратной связи пользователя (БЕЗ релиза и публикации).
21
-
22
- ## Критерии приемки (DoD)
23
- 1. Все 12 модульных и интеграционных тестов проходят стабильно (12/12 pass).
24
- 2. Все файлы production-кода валидны по синтаксису Node.js.
25
- 3. Пакет упаковывается чисто (размер ~15 КБ).
26
- 4. Релиз заблокирован до отдельного явного подтверждения пользователя.
16
+ - [x] **Фаза 6**: Комплексное тестирование базовых модулей (12/12 pass).
17
+ - [x] **Фаза 7**: Дополнительные ручные сценарии и документация (Docs standard EN/RU/ZH).
18
+ - [/] **Фаза 8**: Стабильность, аудит багов, расширение тестов и дизайн в едином стиле dsh-clinebot:
19
+ - [ ] 8.1. Исправление стабильности: безопасный доступ к Cordis сервисам (ctx.get), сброс соединений при смене реквизитов профиля, нормализация полей в estConnection (latencyMs / remoteOs).
20
+ - [ ] 8.2. Безопасность и отказоустойчивость: фильтрация isTrustedSettingsRequest на API маршрутах, обработка ошибок стримов в TunnelService, автосоздание папок в MirrorSyncService.
21
+ - [ ] 8.3. Редизайн UI в едином стиле dsh-clinebot: модульные карточки, статусные бейджи в шапке, добавление поля localMirrorPath, секция управления туннелями в интерфейсе.
22
+ - [ ] 8.4. Расширение набора тестов (тесты API routes, tools, store/apply, client registration).
23
+ - [ ] 8.5. Тестирование на изолированном MiniPC сервере (dsh-test-plugin).