@goodandready/dsh-task-tracker 0.0.0-stage → 0.2.13

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/CHANGELOG.md ADDED
@@ -0,0 +1,182 @@
1
+ # Changelog
2
+
3
+ ## [0.2.13] - 2026-11-14
4
+
5
+ ### Changed
6
+ - **Public release identity**: package renamed from the private scope to the canonical `@goodandready/dsh-task-tracker` in `package.json`, `cordis.patch.yml`, the client loader entry, the host updater and all three READMEs.
7
+ - **Public distribution channel**: dropped the GitHub Packages `publishConfig`; the built-in updater now defaults to the public npm registry.
8
+ - **Repository metadata**: `repository`, `homepage` and `bugs` point at the public project instead of the private mirror.
9
+
10
+ ### Added
11
+ - **Mandatory project files**: `AGENTS.md`, `index.md` and `deploy.sh` with the release procedure, plus `.gitattributes` `export-ignore` for internal files.
12
+ - **Quality gates**: `package-lock.json`, ESLint with `no-undef`, and `scripts/pack-check.mjs` (262144-byte file limit, no tarballs in the checkout) wired into `npm run check`.
13
+
14
+ ## [0.2.12] - 2026-11-08
15
+
16
+ ### Fixed & Enhanced
17
+ - **Canonical Design Tokens Alignment**: replaced all 28 non-existent CSS variables `--dsw-alias-color-primary-base`, `--dsw-alias-color-warning`, and `--dsw-alias-color-danger` in `lib/client.js` with canonical DSH tokens `--dsw-alias-button-primary-fill`, `--dsw-alias-state-warn-primary`, and `--dsw-alias-state-error-primary`, removing obsolete hex fallbacks (#69).
18
+ - **Explicit dsh-tools Peer Dependency Range**: narrowed wildcard `*` peer dependency on `@deepseek-ai/dsh-tools` to verified runtime window `^0.1.7-rc.2 || ^0.2.0-rc.1` in `package.json` (#71).
19
+ - **Settings Card Volatile Configuration Support**: marked `filePath` with `.volatile()` in host `Config` schema and implemented safe unwrapping in `lib/index.js` and `lib/storage.js` to ensure volatile box objects resolve safely to default storage paths (#60).
20
+
21
+ ## [0.2.11] - 2026-11-08
22
+
23
+ ### Fixed & Cleaned
24
+ - **Folder Icon Preservation**: in `addFolder()`, default icon parameter to `undefined` so adding an existing folder without specifying a new icon preserves the existing custom icon (#65).
25
+ - **Supply-Chain Guard Preservation**: removed `--config.minimumReleaseAge=0` flag from updater spawn arguments in `lib/updater.js`, ensuring pnpm release-age quarantine guard remains active (#66, #68).
26
+ - **Dead Code Cleanup**: removed unreferenced `recover()` method from `TaskStore` and cleaned up unused `legacyDbPath` parameter in host `apply()` initialization (#67).
27
+
28
+ ## [0.2.10] - 2026-11-08
29
+
30
+ ### Fixed & Hardened
31
+ - **tasks.json Record Validation & Defensive Coercion**: added `normalizeTask()` on load to filter non-object records and items lacking valid IDs; safely coerces `title`, `description`, `status`, and `createdAt` to strings to prevent sort and query filter TypeErrors on hand-edited data (#62).
32
+ - **Pagination Bounds & Clamping**: HTTP endpoints validate `?limit` and `?offset` query parameters, rejecting negative or non-numeric values with 400 Bad Request; `store.list()` clamps `limit` so `limit: 0` returns empty results instead of unbounded lists (#63).
33
+ - **Internal Error Path Sanitization**: added `sanitizeErrorMessage()` in route handling to strip absolute filesystem paths from 500 error responses and removed paths from storage exception strings (#64).
34
+
35
+ ## [0.2.9] - 2026-11-08
36
+
37
+ ### Security & Authorization
38
+ - **Reject Sec-Fetch-Site: none on Mutating Routes**: disallowed `Sec-Fetch-Site: none` bypass on state-changing REST routes (POST, PUT, DELETE), preventing unverified origin requests from triggering mutations (#61).
39
+ - **Address Validation & Loopback Reset Restriction**: enforced loopback-only (`127.0.0.1` / `::1`) authorization for destructive `POST .../tasks/reset` operations, and strict validation of remote client IP addresses (#72).
40
+ - **Enforce DSH Connection Authentication for Remote LAN Requests**: wired `getConnection(ctx)?.requestRejection(req)` in REST API middleware so unauthenticated LAN clients receive 401 fail-closed on task tracker endpoints (#73).
41
+
42
+ ## [0.2.8] - 2026-09-25
43
+
44
+ ### Fixed
45
+ - **Storage Quarantine on Parse Failure**: `TaskStore.load()` safely quarantines corrupted `tasks.json` files to `${filePath}.corrupt.<timestamp>` instead of treating parse errors as an empty task list. Protects against accidental data wiping and refuses mutations via `StorageCorruptedError`. Added safe recovery via `POST /dsh-task-tracker/api/tasks/reset` (#54).
46
+ - **Host Lifecycle Resource Ownership**: host tools (`todo_add`, `todo_list`, `todo_done`), route registrations, and updater registrations in `lib/index.js` are now strictly bound inside `ctx.effect(...)` with cleanup disposers, preventing resource leaks on reload (#55).
47
+ - **Drop Removed Settings Service**: removed obsolete `settings` service from `inject` and `apply` in `lib/index.js`, fixing Cordis proxy accessor crashes during boot in DSH 0.1.7+ (#56).
48
+
49
+ ### Documentation & Security
50
+ - **Runtime Language Contracts**: documented language architecture in `docs/design/DESIGN.md`: canonical English (`en`) and Chinese (`zh`) client dictionaries with zero bundled Russian to avoid runtime collisions with `dsh-russian-lang`; Russian tool descriptions preserved for agent prompt fidelity (#9).
51
+ - **Git Remote Credential Sanitization**: rotated and removed embedded userinfo tokens from `.git/config` and repository configurations (#53).
52
+
53
+ ## [0.2.7] - 2026-09-24
54
+
55
+ ### Security
56
+ - **Request Authorization (Fail-Closed)**: `isAllowedRequest` отклоняет мутирующие запросы (POST, PATCH, DELETE, PUT) без заголовков `Origin` и `Sec-Fetch-Site` со статусом 403 Forbidden, если соединение не является локальным (loopback) (#43).
57
+ - **Host Environment Sanitization**: удален захардкоженный fallback-путь абсолютный путь окружения в `lib/storage.js`; значение по умолчанию для `legacyDbPath` изменено на `null`. Расширен `test/identity.test.mjs` для проверки всех файлов `lib/*.js` (#41, #47).
58
+
59
+ ### Fixed
60
+ - **Safe Task ID Decoding**: добавлена безопасная обработка URI-кодированных идентификаторов задач (`safeDecode`) в маршрутах GET, PATCH и DELETE. Некорректно закодированные последовательности URL возвращают 400 Bad Request вместо неперехваченного исключения 500 (#40).
61
+ - **Reactive TasksScreen Refresh**: `TasksScreen` подписан на открытие панели — задачи загружаются актуальными сразу при открытии (#37).
62
+ - **Manual Refresh Button**: добавлена кнопка «Refresh» в шапку экрана задач со спиннером и поддержкой локализации (EN/ZH) (#37).
63
+ - **Realtime Component Sync**: внедрено событие `dsh-task-tracker:data-changed` — изменения задач в `TasksScreen` мгновенно обновляют счетчик в `TaskChip` без ожидания 10-секундного таймера поллинга (#37).
64
+
65
+ ### Performance
66
+ - **DOM MutationObserver Optimization**: наблюдатели мутаций в `mountTasksScreen` и `mountSidebarEntry` отключаются сразу после успешного монтажа элементов, устраняя холостую нагрузку на CPU при стриминге токенов модели (#38).
67
+ - **Storage mtime Caching**: оптимизирован метод `load()` и `ensureFresh()` в `TaskStore` — кэширование `lastMtime` корректно работает даже при 0 задач, устраняя повторное чтение и парсинг с диска при регулярном поллинге статистики (#39).
68
+
69
+ ### Refactoring & Tech Debt
70
+ - **Clean Config Schema**: удалены устаревшие неиспользуемые поля `base`, `user`, `pass`, `passFile` из схемы `Config`. Устранены избыточные ветки `ctx.inject` в `apply()`, опираясь на явный экспорт `inject` (#42).
71
+ - **GitHub Mirror Workflow**: подтвержден канонический скрипт санитизированной публикации в GitHub-зеркало `scripts/publish-github.sh` (#35).
72
+
73
+ All notable changes to `@goodandready/dsh-task-tracker` will be documented in this file.
74
+
75
+ ## 0.2.6
76
+
77
+ ### Fixed
78
+ - Settings no longer wait on the removed settingsScope service. The client uses configForms (#44).
79
+
80
+ ## [0.2.5] - 2026-09-19
81
+
82
+ ### Fixed
83
+ - **Settings reachable again on the plugin's own page**: the current DSH core
84
+ (0.1.6-alpha.2) renders a plugin's configuration page only for entries registered
85
+ in the plugin-list seat `plugins.item`. That seat takes an `id` and a static label
86
+ instead of a `key`, so it is mounted separately from the keyed helper; the row seat
87
+ and the legacy card stay as fallbacks. Both lifecycle tests now expect four slot
88
+ injections.
89
+
90
+ ## [0.2.4] - 2026-09-19
91
+
92
+ ### Fixed
93
+ - **Настройки снова доступны**: карточка регистрировалась в `settings.plugin.item` —
94
+ слот, который текущее ядро DSH (0.1.6-alpha.2) **не рендерит**, поэтому настройки
95
+ были недостижимы. Теперь поверхность регистрируется первой в посадке строки на
96
+ странице «Плагины» — `plugins.row.config` с ключом
97
+ `@goodandready/dsh-task-tracker#dsh-task-tracker`: у строки плагина
98
+ появляется контрол «настроить», чья страница — форма настроек (`view: 'page'`,
99
+ раскрытая и без нашей карточки и шапки), плюс однострочник для
100
+ `view: 'summary'`. Прежняя посадка `settings.plugin.item` сохранена фолбэком.
101
+ - Тесты жизненного цикла обновлены под две посадки (строка + легаси-карточка) и
102
+ проверяют ключ строки.
103
+
104
+ ## [0.2.3] - 2026-09-19
105
+
106
+ ### Fixed
107
+ - **Updater CLI discovery infinite loop**: исправлен критический баг в findDshCliEntry (lib/updater.js) — добавлен переход directory = parent, предотвращающий бесконечный цикл поиска package.json и 100% загрузку CPU при вызове /dsh-task-tracker/api/updater (#31).
108
+ - **Unit test**: добавлен юнит-тест гарантированного быстрого завершения findDshCliEntry при отсутствии package.json в родительских каталогах.
109
+
110
+ ## [0.2.2] - 2026-09-18
111
+
112
+ ### Added
113
+ - **Quick-add bar and Prominent Add Task buttons**: добавлен ряд быстрого создания задач (Enter для добавления) и заметные кнопки «+ Add Task» в шапке и в пустом состоянии папки (#31).
114
+ - **Auto-updater**: встроен автоматический серверный апдейтер плагина lib/updater.js с поддержкой токенов GitHub Packages из ~/.npmrc и секция обновления в карточке настроек плагина (/dsh-task-tracker/api/updater) (#31).
115
+ - **Bilingual dictionaries (EN & ZH)**: полные канонические словари English (en) и Chinese (zh), регистрация в ctx.locale.register и нулевое содержание захардкоженного русского текста в коде клиента (#31).
116
+
117
+ ### Fixed
118
+ - **Inbox tasks visibility**: исправлена фильтрация задач в папке Inbox — задачи с дефолтной или пустой папкой корректно сопоставляются с Inbox, счетчики папок синхронизированы (#31).
119
+
120
+ ## [0.2.0] - 2026-09-18
121
+
122
+ ### Added
123
+ - **CI / Gitea Actions**: добавлен `.gitea/workflows/ci.yml` с автоматическим запуском проверки синтаксиса (`node --check`) и набора тестов (`npm test`) на push и PR (#28).
124
+
125
+ ### Changed
126
+ - **Client Diagnostics & Effects Language**: диагностические метки `ctx.effect` в `lib/client.js` переведены на канонический английский язык клиента (`'dsh-task-tracker: locale dictionaries'`, `'settings card'`) в соответствии с `DESIGN.md` (#27).
127
+
128
+ - **Нижняя полка папок (Bottom Folder Shelf)**: фиксированные плашки папок (`140px`, значок + название с переносом до 2 строк, счетчик задач), перенос строк в 2 ряда при увеличении числа папок (#25).
129
+ - **Смена значка папки**: встроенный поповер с палитрой эмодзи для быстрой персонализации иконок папок (#25).
130
+ - **Drag & Drop задач в папки**: перетаскивание строк задач из списка на любую плашку папки внизу для мгновенного перемещения (#25).
131
+ - **Компактный список задач в папке**: отображение только заголовков задач с чекбоксом выполнения и меткой приоритета (#25).
132
+ - **Вертикальная прокрутка**: плавная полоса прокрутки списка задач при превышении высоты области просмотра (#25).
133
+ - **Модальное окно задачи (Task Detail Modal)**: просмотр и редактирование заголовка, многострочного описания, автора, даты и времени создания (`createdAt`), папки и приоритета (#25).
134
+ - **Интеграция с агентом («Начать чат с агентом»)**: запуск нового сеанса чата с автоматической вставкой структурированного контекста задачи (заголовок, папка, приоритет, описание) в поле ввода как из модалки создания, так и из модалки просмотра любой задачи (#25).
135
+ - **Верхняя панель фильтрации**: быстрые фильтры «Все» / «Не завершенные» / «Завершенные» в шапке экрана (#25).
136
+ - **Расширенное API папок**: поддержка метаданных папок (`{ name, icon }`), эндпоинты `PATCH /tasks/folders/:name` и `DELETE /tasks/folders/:name`.
137
+ - **Выделенный CHANGELOG.md**: история версий вынесена из `README.md` в соответствии со стандартом документации (#24).
138
+
139
+ ## [0.1.9] - 2026-09-18
140
+
141
+ ### Changed
142
+ - **Settings Architecture**: удален избыточный отложенный фолбэк `settings.section` в корень настроек; оставлена единственная каноническая точка входа — карточка `settings.plugin.item` в «Settings → Плагины» в соответствии со стандартом семейства плагинов DSH (#22).
143
+ - **Diagnostics**: добавлена явная обработка ошибок и предупреждающее логирование при регистрации карточки настроек (#22).
144
+ - **Tests**: добавлены тесты-стражи, гарантирующие отсутствие внедрения `settings.section` (#22).
145
+
146
+ ## [0.1.8] - 2026-09-18
147
+
148
+ ### Added
149
+ - **Folder Swimlanes & Drag & Drop**: добавлена поддержка организации задач по папкам/горизонтальным областям (`folders`) с drag & drop переносом между ними (#20).
150
+ - **Navigation & Return to Chat**: добавлена стандартная кнопка возврата в чат («To the chat») в шапке экрана `TasksScreen` с иконкой и плавной анимацией возврата (#20).
151
+ - **Task Creation & Reliability**: переработана панель создания задач (замена `<form>` на `div.tt-create-bar` с селектором целевой папки, явным выбором приоритета и обработчиком клика), добавлено видимое отображение ошибок валидации и сети (#20).
152
+ - **Storage & API**: схема `tasks.json` обновлена до формата v2 с поддержкой списка `folders`, автомиграцией v1, и новыми эндпоинтами `GET /folders`, `POST /folders`, фильтрацией `GET /tasks?folder=...` (#20).
153
+ - **Agent Tools**: инструмент `todo_add` расширен опциональным параметром `folder`, `todo_list` поддерживает фильтрацию по папкам (#20).
154
+
155
+ ## [0.1.7] - 2026-09-18
156
+
157
+ ### Changed
158
+ - **Packaging**: сделан надежный разбор `npm pack --json` в тестах под npm 12/10/11 (#15).
159
+ - **Diagnostics & Error Handling**: устранены пустые `catch` в `lib/client.js`, добавлено логирование сбоя поллинга статистики и явная пометка намерений `/* bestEffort: cleanup */` (#16).
160
+ - **Theming & Contrast**: шесть хардкод-цветов переведены на дизайн-токены ядра (`--dsw-alias-*`) и `color-mix()` для адаптации к темной и светлой темам, добавлен тест-страж `test/theme.test.mjs` (#17).
161
+ - **Refactoring & Settings**: удален неиспользуемый `getConfig()`, поля внешнего сервиса помечены `@deprecated`, карточка настроек приведена в соответствие с локальным хранилищем, актуализировано описание инструмента `todo_add` (#18).
162
+
163
+ ## [0.1.6] - 2026-09-18
164
+
165
+ ### Added
166
+ - **Host Service Inject**: добавлены `webServer` и `settings` в явный список зависимостей плагина (`inject`) для надежной регистрации API-маршрутов (#13).
167
+
168
+ ## [0.1.5] - 2026-09-18
169
+
170
+ ### Added
171
+ - **Standalone Architecture (Вариант Б)**: перенос таск-трекера полностью внутрь DSH без внешнего Go-микросервиса и порта 8182 (#13).
172
+ - **Storage**: легковесное хранилище `tasks.json` с атомарной записью (`node:fs`) и автоматическим импортом прежних задач из SQLite при первом старте.
173
+ - **UI**: полноэкранный экран управления задачами `TasksScreen` с фильтрами, поиском, инлайн-созданием и управлением статусами.
174
+ - **Navigation**: кнопка со счетчиком задач в шапке сессии (`conversation.session.header.utilities`) и кнопка в боковой панели.
175
+ - **REST API**: эндпоинты `/dsh-task-tracker/api/tasks` (GET, POST, PATCH, DELETE, stats).
176
+
177
+ ## [0.1.4] - 2026-09-18
178
+
179
+ ### Changed
180
+ - **Lifecycle**: регистрация локалей и слотов обернута в `ctx.effect` с функциями очистки (#7).
181
+ - **Locale**: регистрация только канонического английского словаря; русская локализация делегирована в `dsh-russian-lang` (#9).
182
+ - **Packaging**: очищен `package.json.files` (удалены дубликат `lib/` и неотслеживаемый `test/`), исключен внутренний `AGENTS.md` (#8).
package/README.md CHANGED
@@ -1,3 +1,69 @@
1
- # Temporary Holding Version
1
+ # @goodandready/dsh-task-tracker
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Built-in todo inbox and task manager for DeepSeek Harness.
4
+
5
+ - **Storage:** a local `tasks.json` file, written atomically with `node:fs` (`.tmp` + `renameSync`). No extra dependencies.
6
+ - **Operator UI:** a full-screen `TasksScreen` over the conversation, a folder shelf with drag-and-drop, task modals, and a jump into an agent chat.
7
+ - **Agent integration:** a "Start chat with agent" action that puts the task context into the composer, plus the tools `todo_add`, `todo_list`, and `todo_done`.
8
+ - **REST API:** `/dsh-task-tracker/api/tasks[...]`, registered through `ctx.webServer.register`.
9
+
10
+ ## What you can do
11
+
12
+ 1. **Folder shelf.** Folders sit in a fixed strip at the bottom. Each folder has an icon, long names wrap, and a task row can be dropped onto a folder.
13
+ 2. **Compact list.** A folder shows task titles with a completion mark and a priority. Long lists scroll.
14
+ 3. **Task modal.** Click a task to edit the title, description, author, folder, and priority (normal / low / medium / high). **Start chat with agent** opens a conversation for that task.
15
+ 4. **Create.** **+ Create** adds a task. The create form can also create the task and open the chat immediately.
16
+ 5. **Filters & Refresh.** All / open / done, search over title and description, and a manual Refresh button with real-time reactive sync.
17
+ 6. **Entry points.** An unfinished-count chip in the session header, a sidebar button, and a back-to-chat control.
18
+
19
+ ## Install
20
+
21
+ Published on npm:
22
+
23
+ ```sh
24
+ npm install @goodandready/dsh-task-tracker
25
+ ```
26
+
27
+ Or add it to a DSH profile:
28
+
29
+ ```sh
30
+ dsh plugin add @goodandready/dsh-task-tracker
31
+ ```
32
+
33
+ ## Agent tools
34
+
35
+ Registered on `ctx.tools`:
36
+
37
+ - `todo_add` — create a task. `title` is required. Optional: `description`, `priority` (0-3), `folder` (default `Inbox`), `author`.
38
+ - `todo_list` — list tasks. Optional: `status` (`pending`, `done`, `all`), `folder`, `limit`.
39
+ - `todo_done` — complete a task. `id` is required.
40
+
41
+ ## REST API
42
+
43
+ Prefix: `/dsh-task-tracker/api`.
44
+
45
+ - `GET /tasks` — list tasks (`status`, `folder`).
46
+ - `POST /tasks` — create `{ title, description, priority, folder, author }`.
47
+ - `GET /tasks/stats` — `{ total, pending, done }`.
48
+ - `GET /tasks/folders` — folder names (`details=1` returns `{ name, icon, count }`).
49
+ - `POST /tasks/folders` — create `{ name, icon }`.
50
+ - `PATCH /tasks/folders/:name` — change the icon.
51
+ - `DELETE /tasks/folders/:name` — delete the folder; its tasks move to `Inbox`.
52
+ - `PATCH /tasks/:id` — update `title`, `description`, `completed`, `priority`, `folder`.
53
+ - `DELETE /tasks/:id` — delete a task.
54
+
55
+ ## Settings
56
+
57
+ In Settings, under the Task Tracker plugin:
58
+
59
+ - **Custom tasks JSON storage path (`filePath`):** where `tasks.json` lives. Default is the profile directory `task-tracker/tasks.json`.
60
+ - The directory and file are created on first use.
61
+ - On first start, existing tasks are imported from a previous SQLite database when one is present.
62
+
63
+ ## Locale behavior
64
+
65
+ The client ships the canonical English catalog for `dsh-task-tracker`. Russian UI strings are provided by the separate `dsh-russian-lang` plugin.
66
+
67
+ ## License
68
+
69
+ MIT
package/README.ru.md ADDED
@@ -0,0 +1,100 @@
1
+ # @goodandready/dsh-task-tracker
2
+
3
+ Автономный встроенный Todo-инбокс и менеджер задач для Ди (DeepSeek Harness):
4
+ - **Хранилище:** локальный JSON-файл `tasks.json` со стандартной библиотекой `node:fs` и атомарной записью (`.tmp` + `renameSync`), zero external dependencies.
5
+ - **Интерфейс оператора:** полноэкранный экран `TasksScreen` поверх диалога, нижняя полка папок с перетаскиванием задач, детальные модальные окна и быстрый переход в чат с агентом.
6
+ - **Интеграция с агентом:** вызов сессии агента по кнопке «Начать чат с агентом» с автоматической передачей контекста задачи в композер, а также штатные тулы агента `todo_add`, `todo_list`, `todo_done`.
7
+ - **REST API:** полнофункциональные маршруты `/dsh-task-tracker/api/tasks[...]` на базе `ctx.webServer.register`.
8
+
9
+ ## Возможности
10
+
11
+ 1. **Нижняя панель папок (Folder Shelf):**
12
+ - Все папки отображаются внизу в виде фиксированных плашек (`140px`).
13
+ - Значок папки настраивается (встроенная палитра эмодзи).
14
+ - Длинные названия папок переносятся на две строки.
15
+ - При росте количества папок они компактно выстраиваются в 2 ряда с прокруткой.
16
+ - Поддерживается drag-and-drop: строку задачи можно перетащить прямо на плашку папки.
17
+
18
+ 2. **Компактный список задач в папке:**
19
+ - Отображает только заголовки задач в чистых аккуратных строках с индикатором выполнения и приоритета.
20
+ - При большом количестве задач появляется вертикальная полоса прокрутки.
21
+
22
+ 3. **Детальное модальное окно задачи:**
23
+ - Открывается по клику на любую задачу.
24
+ - Позволяет просматривать и редактировать:
25
+ - Заголовок задачи.
26
+ - Подробное многострочное описание.
27
+ - Автора задачи (`User`, агент или имя пользователя).
28
+ - Дату и время создания (`createdAt`).
29
+ - Папку размещения и приоритет (Обычный / Низкий / Средний / Высокий).
30
+ - Содержит кнопку **«Начать чат с агентом»** для немедленного решения задачи в диалоге.
31
+
32
+ 4. **Создание задач и старт чата:**
33
+ - Кнопка **+ Создать** открывает окно добавления задачи.
34
+ - Внизу формы создания доступны кнопки «+ Создать» и **«Начать чат с агентом»** (создает задачу и сразу открывает чат).
35
+
36
+ 5. **Верхние фильтры и обновление:**
37
+ - Переключение между режимами: **Все** / **Не завершенные** / **Завершенные**.
38
+ - Полнотекстовый поиск по названию и описанию.
39
+ - Кнопка принудительного обновления («Refresh») со спиннером и реактивная синхронизация.
40
+
41
+ 6. **Быстрый доступ:**
42
+ - Кнопка-чип со счетчиком невыполненных задач в шапке сессии (`conversation.session.header.utilities`).
43
+ - Кнопка в боковой панели (`Tasks`).
44
+ - Кнопка возврата в чат («← В чат») в шапке таск-трекера.
45
+
46
+ ## Установка
47
+
48
+ Пакет опубликован в npm:
49
+
50
+ ```sh
51
+ npm install @goodandready/dsh-task-tracker
52
+ ```
53
+
54
+ Или добавьте его в профиль DSH:
55
+
56
+ ```sh
57
+ dsh plugin add @goodandready/dsh-task-tracker
58
+ ```
59
+
60
+ ## Инструменты агента
61
+
62
+ Плагин регистрирует 3 инструмента в `ctx.tools`:
63
+
64
+ - `todo_add`: создание новой задачи в инбоксе или указанной папке.
65
+ - Параметры: `title` (строка, обязательно), `description` (строка, опционально), `priority` (0-3), `folder` (название папки, по умолчанию `Inbox`), `author` (автор).
66
+ - `todo_list`: получение списка задач.
67
+ - Параметры: `status` (`"pending" | "done" | "all"`), `folder` (фильтр по папке), `limit` (максимум записей).
68
+ - `todo_done`: завершение задачи по ее ID.
69
+ - Параметры: `id` (строка, обязательно).
70
+
71
+ ## REST API
72
+
73
+ Все эндпоинты доступны по префиксу `/dsh-task-tracker/api`:
74
+
75
+ - `GET /tasks`: список всех задач (поддерживает `?status=pending|done|all` и `?folder=...`).
76
+ - `POST /tasks`: создание задачи `{ title, description, priority, folder, author }`.
77
+ - `GET /tasks/stats`: статистика `{ total, pending, done }`.
78
+ - `GET /tasks/folders`: список имен папок (`?details=1` возвращает объекты `{ name, icon, count }`).
79
+ - `POST /tasks/folders`: создание папки `{ name, icon }`.
80
+ - `PATCH /tasks/folders/:name`: обновление папки (смена иконки).
81
+ - `DELETE /tasks/folders/:name`: удаление папки (задачи переносятся в `Inbox`).
82
+ - `PATCH /tasks/:id`: обновление полей задачи (`title`, `description`, `completed`, `priority`, `folder`).
83
+ - `DELETE /tasks/:id`: удаление задачи.
84
+
85
+ ## Настройки плагина
86
+
87
+ В «Settings → Плагины → Task Tracker»:
88
+ - **Custom tasks JSON storage path (`filePath`):** кастомный путь к файлу хранилища задач (по умолчанию `~/.dsh/task-tracker/tasks.json`).
89
+ - Автоматически создает директорию и файл при первом обращении.
90
+ - При первом запуске автоматически импортирует существующие задачи из прежней SQLite базы данных (если есть).
91
+
92
+ ## Языковое поведение / Locale behavior
93
+
94
+ - **Клиентский интерфейс:** регистрирует только канонический английский словарь (`en`) для пространства `dsh-task-tracker`. Встроенный словарь `ru` не поставляется во избежание коллизий в веб-профиле DSH.
95
+ - **Русская локализация:** интерфейс переводится централизованным плагином `dsh-russian-lang`.
96
+ - **Инструменты агента:** системные описания инструментов в `lib/index.js` выполнены на русском языке для корректной работы LLM-модели Ди.
97
+
98
+ ## Лицензия
99
+
100
+ MIT
package/README.zh.md ADDED
@@ -0,0 +1,69 @@
1
+ # @goodandready/dsh-task-tracker
2
+
3
+ DeepSeek Harness 内置的待办收件箱和任务管理器。
4
+
5
+ - **存储:** 本地 `tasks.json`,用 `node:fs` 原子写入(`.tmp` + `renameSync`),没有额外依赖。
6
+ - **界面:** 盖在对话上的全屏 `TasksScreen`、可拖放的文件夹条、任务详情,以及跳进代理对话。
7
+ - **代理:** 「与代理开始对话」会把任务上下文放进输入框。工具为 `todo_add`、`todo_list`、`todo_done`。
8
+ - **REST API:** `/dsh-task-tracker/api/tasks[...]`,通过 `ctx.webServer.register` 注册。
9
+
10
+ ## 能做什么
11
+
12
+ 1. **文件夹条。** 文件夹固定在底部,可以改图标;把任务行拖到文件夹上即可归类。
13
+ 2. **紧凑列表。** 文件夹里只显示标题、完成状态和优先级,列表过长时滚动。
14
+ 3. **任务详情。** 点击任务可编辑标题、描述、作者、文件夹和优先级(普通 / 低 / 中 / 高)。**与代理开始对话**会为这个任务打开对话。
15
+ 4. **新建。** **+ 新建**添加任务,也可以新建后立刻打开对话。
16
+ 5. **筛选与刷新。** 全部 / 未完成 / 已完成,支持按标题和描述搜索,提供手动刷新按钮与任务实时同步。
17
+ 6. **入口。** 会话顶栏的未完成计数、侧栏按钮,以及返回对话。
18
+
19
+ ## 安装
20
+
21
+ 包已发布到 npm:
22
+
23
+ ```sh
24
+ npm install @goodandready/dsh-task-tracker
25
+ ```
26
+
27
+ 或添加到 DSH 配置文件:
28
+
29
+ ```sh
30
+ dsh plugin add @goodandready/dsh-task-tracker
31
+ ```
32
+
33
+ ## 代理工具
34
+
35
+ 注册在 `ctx.tools`:
36
+
37
+ - `todo_add`:新建任务。`title` 必填。可选 `description`、`priority`(0-3)、`folder`(默认 `Inbox`)、`author`。
38
+ - `todo_list`:列出任务。可选 `status`(`pending`、`done`、`all`)、`folder`、`limit`。
39
+ - `todo_done`:按 `id` 完成任务。
40
+
41
+ ## REST API
42
+
43
+ 前缀:`/dsh-task-tracker/api`。
44
+
45
+ - `GET /tasks`:列出任务(`status`、`folder`)。
46
+ - `POST /tasks`:创建 `{ title, description, priority, folder, author }`。
47
+ - `GET /tasks/stats`:`{ total, pending, done }`。
48
+ - `GET /tasks/folders`:文件夹名称(`details=1` 返回 `{ name, icon, count }`)。
49
+ - `POST /tasks/folders`:创建 `{ name, icon }`。
50
+ - `PATCH /tasks/folders/:name`:修改图标。
51
+ - `DELETE /tasks/folders/:name`:删除文件夹,其中的任务移到 `Inbox`。
52
+ - `PATCH /tasks/:id`:更新 `title`、`description`、`completed`、`priority`、`folder`。
53
+ - `DELETE /tasks/:id`:删除任务。
54
+
55
+ ## 设置
56
+
57
+ 在 Task Tracker 插件设置中:
58
+
59
+ - **自定义任务 JSON 路径(`filePath`):** `tasks.json` 的位置。默认在配置档目录的 `task-tracker/tasks.json`。
60
+ - 首次使用时创建目录和文件。
61
+ - 首次启动时,如果存在旧的 SQLite 数据库,会导入其中的任务。
62
+
63
+ ## 语言
64
+
65
+ 客户端只附带 `dsh-task-tracker` 的英文目录。俄文界面由单独的 `dsh-russian-lang` 插件提供。
66
+
67
+ ## 许可证
68
+
69
+ MIT
@@ -0,0 +1,6 @@
1
+ # dsh-task-tracker bundle layer: applied automatically when the package is
2
+ # installed as a profile bundle (package.json declares dsh.bundle.patch).
3
+ - insert:
4
+ - id: dsh-task-tracker
5
+ name: '@goodandready/dsh-task-tracker'
6
+ config: {}