@goodandready/dsh-kanban 0.2.1 → 0.2.2
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
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
- Don't: Не переводить карточку в done агентом (колонка done фиксируется только по факту закрытия issue и ветки).
|
|
48
48
|
|
|
49
49
|
## Locked Design Decisions
|
|
50
|
-
- 2026-08-20 — Карточка настроек монтируется в settings.plugin.item
|
|
50
|
+
- 2026-08-20 — Карточка настроек монтируется в settings.plugin.item (резерв в settings.section исключён по #238).
|
|
51
51
|
- 2026-08-25 — Использование дробной индексации ($O(1)$) для позиционирования карточек.
|
|
52
52
|
- 2026-09-02 — Снимок доски объединён на маршруте /dsh-kanban/snapshot (GET: выгрузка, POST: загрузка).
|
|
53
53
|
- 2026-09-03 — Изоляция сессий задач в git worktree ($DSH_HOME/worktrees/<repo-key>/<task-id>/ на ветке task/<id>-<slug>), регистрация воркдерева в workspaceRegistry, проверка dirtyFiles и безопасная очистка в фазе cleanup (#193).
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
- Фильтрация structural noise в проверках dirtyFiles: в checkWorktreeDirty добавлен флаг --ignore-submodules=all, исключающий ложные блокировки удаления воркдеревьев из-за субмодулей и дрейфа gitlinks (#213).
|
|
67
67
|
- Фильтрация сессий субагентов: сессии с маркером subagent (origin === 'subagent' или parentId !== undefined) исключаются из liveSessions и не перезаписывают состояние корневых задач (#215).
|
|
68
68
|
## Locked Decisions
|
|
69
|
+
- **0.2.2 (Issue #238)**: Удалён устаревший фоллбэк на `settings.section` в пользу строгого размещения карточки в `settings.plugin.item`; все обращения к службам Cordis (в частности к `llm`) приведены к каноническому `ctx.get('...')`.
|
|
69
70
|
- **0.2.1**: Карточка настроек плагина перенесена строго в слот `settings.plugin.item` (раздел «Настройки → Плагины → Настройки плагинов») без одновременной дублирующей регистрации в `settings.section` (Issue #236).
|
|
70
71
|
|
|
71
72
|
### 2026-09-08: Релиз v0.2.0 — Milestone (SSE, Chat Sync, Templates, Two-Column Drawer, Multi-Repo) (#210, #219, #220, #222, #225)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Issue #238: Убрать settings.section fallback и перевести обращение к службам на ctx.get
|
|
2
|
+
|
|
3
|
+
## Контекст
|
|
4
|
+
Issue #238 (priority/low, type/tech-debt, scope/webui) указывает:
|
|
5
|
+
1. Карточка настроек регистрирует запасной слот settings.section (строку в боковом списке настроек). Согласно дизайн-контракту и политике DSH-плагинов, боковой список настроек плоский и перегружен, а набор полей плагина должен жить исключительно как карточка внутри «Настройки → Плагины → Настройки плагинов» (settings.plugin.item).
|
|
6
|
+
2. В коде обнаружено обращение ctx.llm вместо канонического ctx.get('llm'). Контекст Cordis оборачивается в прокси, и свойства-поля могут возвращать undefined, поэтому доступ к службам должен выполняться строго через ctx.get('...').
|
|
7
|
+
|
|
8
|
+
## План работ
|
|
9
|
+
- [ ] 1. Исправить вызовы ctx.llm на ctx.get('llm') в lib/index.js (GET /dsh-kanban/models).
|
|
10
|
+
- [ ] 2. В lib/client.js убрать запасную регистрацию settings.section, оставив карточку только в слоте settings.plugin.item.
|
|
11
|
+
- [ ] 3. Актуализировать тесты в test/board-ui.test.mjs и test/identity.test.mjs.
|
|
12
|
+
- [ ] 4. Обновить docs/design/DESIGN.md (зафиксировать решение #238).
|
|
13
|
+
- [ ] 5. Выполнить полный тестовый прогон npm test (все 651 тест) и npm run compat.
|
package/lib/client.js
CHANGED
|
@@ -4239,11 +4239,10 @@ window.__ModuleLoader__.load({
|
|
|
4239
4239
|
// Ключ обязан совпадать с пространством настроек: вкладка перебирает
|
|
4240
4240
|
// объявленные пространства и рисует слот settings.plugin.item с entryKey,
|
|
4241
4241
|
// равным имени пространства.
|
|
4242
|
-
//
|
|
4243
|
-
//
|
|
4242
|
+
// Собственный раздел верхнего уровня (settings.section) не регистрируется,
|
|
4243
|
+
// чтобы не засорять плоский общий список настроек (#238).
|
|
4244
4244
|
const cardSlot = registerFirst(ctx, [
|
|
4245
4245
|
{ name: 'settings.plugin.item', key: NS, locale: NS, inject: () => ({ ctx }) },
|
|
4246
|
-
{ name: 'settings.section', id: '@goodandready/dsh-kanban', order: 32, locale: NS, label: () => fallbackT('title'), inject: () => ({ ctx }) },
|
|
4247
4246
|
], KanbanSettingsCard)
|
|
4248
4247
|
|
|
4249
4248
|
// Экран доски встраивается в оболочку, а не в слот: раздела верхнего
|
package/lib/index.js
CHANGED
|
@@ -1230,16 +1230,17 @@ export function apply(ctx, config) {
|
|
|
1230
1230
|
path: '/dsh-kanban/models',
|
|
1231
1231
|
handler: async (req, res) => {
|
|
1232
1232
|
const current = ctx.get('agentDefaultModel')?.currentSelection?.() ?? null
|
|
1233
|
+
const llmService = ctx.get('llm')
|
|
1233
1234
|
let providers = []
|
|
1234
1235
|
try {
|
|
1235
|
-
providers = (
|
|
1236
|
+
providers = ((llmService?.listProviders?.() ?? []).map((p) => ({ id: p.id, name: p.name ?? p.id })))
|
|
1236
1237
|
} catch { providers = [] }
|
|
1237
1238
|
|
|
1238
1239
|
const wanted = urlOf(req).searchParams.get('provider') || ''
|
|
1239
1240
|
if (wanted === '') { writeJson(res, 200, { current, providers, models: [] }); return }
|
|
1240
1241
|
|
|
1241
1242
|
try {
|
|
1242
|
-
const rows = await
|
|
1243
|
+
const rows = await llmService?.listModels?.(wanted)
|
|
1243
1244
|
writeJson(res, 200, {
|
|
1244
1245
|
current, providers,
|
|
1245
1246
|
models: (rows ?? []).map((m) => ({ id: m.id, name: m.name ?? m.id })),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goodandready/dsh-kanban",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
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",
|