@goodandready/dsh-kanban 0.1.23 → 0.1.24

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/README.md CHANGED
@@ -260,6 +260,12 @@ compares the requested names against the actual exports. It is deliberately not
260
260
  part of `npm test`: the test suite runs without a core and without a profile.
261
261
  Run it on the machine where the harness lives, before publishing.
262
262
 
263
+ ## 💻 Cross-Platform Path Handling
264
+
265
+ Task working directories (`resolveCwd`) respect operating system path conventions.
266
+ On Windows, repository root fencing accounts for drive letters and backslash path
267
+ separators, ensuring full test and runtime compatibility across POSIX and Windows.
268
+
263
269
  ## 📄 License
264
270
 
265
271
  MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
@@ -0,0 +1,52 @@
1
+ # DESIGN.md — dsh-kanban
2
+
3
+ ## Product / Purpose
4
+ - Назначение: Интегрированная доска задач для DeepSeek Harness с двусторонней сверкой с Gitea, автоматическим подхватом сессий агентов и управлением жизненным циклом.
5
+ - Аудитория: Разработчики и операторы DeepSeek Harness, ведущие проектные задачи и сессии агентов.
6
+ - Статус: Production, версия 0.1.23+.
7
+
8
+ ## User Surfaces
9
+ - Web/UI: Экран доски в центральной колонке интерфейса DSH (mountBoard), выдвигающаяся панель задач, фильтры, группировки (по проектам, по исполнителю), метрики переходов.
10
+ - DSH UI / settings / slots:
11
+ - Карточка настроек в слоте settings.plugin.item (пространство dsh-kanban).
12
+ - Чип активной задачи в conversation.session.header.utilities.
13
+ - Пункт бокового меню для вызова экрана доски.
14
+ - API: HTTP эндпоинты /dsh-kanban/* (board, snapshot, task, sync, webhook, metrics, whoami).
15
+ - CLI: node tools/compat.mjs (проверка совместимости экспортов ядра).
16
+ - Документация: README.md, docs/README.ru.md, docs/README.zh.md, index.md.
17
+
18
+ ## Visual Direction
19
+ - Атмосфера: Строгий утилитарный инструментальный интерфейс в едином стиле темы DeepSeek Harness.
20
+ - Утверждённые референсы и что из них берём: Системные карточки DSH (стили заголовков, отступы, шрифты, цветовые токены --dsw-alias-*).
21
+ - Не копировать: Внешние неинтегрированные темы, разнородные цвета рамок и теней.
22
+
23
+ ## Foundations
24
+ - Цвета и роли: Использование CSS-переменных DSH темы (--dsw-alias-bg-layer-3, --dsw-alias-border-l2, --dsw-alias-label-primary, --dsw-alias-label-secondary).
25
+ - Типографика: Системный стек шрифтов DSH (inherit, 13-14px базовый размер, 11-12px для бейджей и служебных меток).
26
+ - Сетка, отступы, responsive: 5 стандартных колонок (backlog, ready, progress, review, done) с горизонтальным скроллом и адаптивными карточками.
27
+ - Accessibility: Нативные кнопки button, role="status" для сообщений, семантичные поля ввода с aria-label/label.
28
+
29
+ ## Components And States
30
+ - Компоненты: BoardScreen, Column, Card, TaskDrawer, KanbanSettingsCard, TaskChip, MetricsModal.
31
+ - Loading / empty / error / success:
32
+ - Загрузка: состояние скелетона/лоадера без блокировки скролла.
33
+ - Пустые колонки: пунктирная область перетаскивания.
34
+ - Ошибки: всплывающий баннер с ключом локализации t('error.' + err).
35
+ - Формы, валидация и действия: Валидация обязательных полей при создании задачи, блокировка повторных кликов при сохранении.
36
+
37
+ ## User Flows
38
+ - Критические сценарии:
39
+ 1. Создание задачи / подхват из Gitea Issue.
40
+ 2. Перемещение карточки между колонками человеком или через инструмент агента board_move.
41
+ 3. Запуск сессии агента по карточке с автоматическим назначением ответственного.
42
+ 4. Автоматическое обновление статуса (waiting) по событиям ядра (session/event).
43
+ 5. Экспорт и импорт снимка доски в JSON.
44
+
45
+ ## Do / Don't
46
+ - Do: Использовать только токены темы --dsw-alias-*, очищать все слушатели событий при размонтировании, соблюдать порядок хуков React.
47
+ - Don't: Не переводить карточку в done агентом (колонка done фиксируется только по факту закрытия issue и ветки).
48
+
49
+ ## Locked Design Decisions
50
+ - 2026-08-20 — Карточка настроек монтируется в settings.plugin.item с резервом в settings.section.
51
+ - 2026-08-25 — Использование дробной индексации ($O(1)$) для позиционирования карточек.
52
+ - 2026-09-02 — Снимок доски объединён на маршруте /dsh-kanban/snapshot (GET: выгрузка, POST: загрузка).
package/lib/launcher.js CHANGED
@@ -12,7 +12,7 @@
12
12
  // Пакеты ядра здесь не импортируются: идентификатор сессии и сборка сообщения
13
13
  // приходят параметрами. Так модуль проверяется без харнесса и без сети.
14
14
 
15
- import { isAbsolute, join, resolve } from 'node:path'
15
+ import { isAbsolute, join, resolve, sep } from 'node:path'
16
16
 
17
17
  /**
18
18
  * Хвост своей задачи — УСЛОВИЕ, а не приказ.
@@ -110,7 +110,8 @@ export function resolveCwd(task, config, cwdOf = () => process.cwd()) {
110
110
 
111
111
  const target = resolve(join(root, repo))
112
112
  const fence = resolve(root)
113
- if (target !== fence && !target.startsWith(fence.endsWith('/') ? fence : fence + '/')) {
113
+ const fenceSep = fence.endsWith(sep) || fence.endsWith('/') ? fence : fence + sep
114
+ if (target !== fence && !target.startsWith(fenceSep) && !target.startsWith(fence.endsWith('/') ? fence : fence + '/')) {
114
115
  throw new Error('имя репозитория выводит за пределы корня проектов')
115
116
  }
116
117
  return target
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-kanban",
3
- "version": "0.1.23",
3
+ "version": "0.1.24",
4
4
  "description": "Visual Kanban board for DeepSeek Harness: Gitea-backed tasks, workflow columns, and a dedicated agent session per task.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",