@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.
- package/docs/design/DESIGN.md +60 -51
- package/docs/plans/findings.md +14 -2
- package/docs/plans/progress.md +11 -10
- package/docs/plans/task_plan.md +16 -19
- package/lib/client.js +439 -127
- package/lib/index.js +19 -14
- package/lib/mirror-sync-service.js +22 -6
- package/lib/routes.js +85 -20
- package/lib/ssh-service.js +31 -8
- package/lib/tunnel-service.js +20 -10
- package/package.json +1 -1
package/docs/design/DESIGN.md
CHANGED
|
@@ -1,62 +1,71 @@
|
|
|
1
1
|
# DESIGN.md — dsh-remote-workspace
|
|
2
2
|
|
|
3
3
|
## Product / Purpose
|
|
4
|
-
- **Назначение**: Полнофункциональный корпоративный плагин удалённой разработки для DeepSeek Harness (DSH).
|
|
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
|
-
- **Статус**: В активной
|
|
10
|
+
- **Статус**: В активной доработке (Стабильность, Тесты, Редизайн в стиле dsh-clinebot).
|
|
7
11
|
|
|
8
12
|
## User Surfaces
|
|
9
|
-
- **Web/UI**: Нативная карточка настроек профилей хостов (
|
|
13
|
+
- **Web/UI**: Нативная карточка настроек профилей хостов (settings.plugin.item), удаленный SFTP браузер каталогов, чип статуса подключения в шапке сессии (conversation.session.header.utilities).
|
|
10
14
|
- **DSH UI / settings / slots**:
|
|
11
|
-
- Карточка
|
|
12
|
-
- Статусный
|
|
13
|
-
-
|
|
14
|
-
- **
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
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
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
##
|
|
54
|
-
-
|
|
55
|
-
|
|
56
|
-
|
|
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 (прослушивание сокетных и потоковых ошибок).
|
package/docs/plans/findings.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## Ключевые выводы анализа dsh-remote
|
|
4
4
|
1. Преимущество 3-way sync: snapshot хешей предотвращает перезапись изменений при одновременном редактировании на сервере и локально.
|
|
5
|
-
2. Проблема 21 инструмента rw_*: перегружает LLM prompt. В новом плагине объединяем в 4 сбалансированных инструмента:
|
|
6
|
-
|
|
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) на мутирующих маршрутах.
|
package/docs/plans/progress.md
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Журнал выполнения
|
|
4
4
|
- **2026-09-08**:
|
|
5
|
-
- Создан репозиторий
|
|
6
|
-
- Создана задача Issue #1:
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
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
|
+
- Подготовлен и утвержден комплексный план.
|
package/docs/plans/task_plan.md
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
# task_plan.md — dsh-remote-workspace
|
|
2
2
|
|
|
3
3
|
## Цель
|
|
4
|
-
Создать высоконадежный корпоративный плагин удаленной разработки
|
|
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**: Конфигурация сборки и репозитория (
|
|
9
|
-
- [x] **Фаза 3**: Ядро backend сервисов (
|
|
10
|
-
- [x] **Фаза 4**: Инструменты модели (
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
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).
|