@goodandready/dsh-cron 0.1.23 → 0.2.0

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/README.ru.md CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  <div align="center">
4
4
 
5
- <h3>Планировщик фоновых задач, cron-автоматизация и выполнение сценариев агентом для DeepSeek Harness</h3>
5
+ <h3>Планировщик cron-задач, фоновая автоматизация и выполнение сценариев агентом для DeepSeek Harness</h3>
6
6
 
7
7
  <p align="center">
8
8
  <a href="https://www.npmjs.com/package/@goodandready/dsh-cron"><img src="https://img.shields.io/npm/v/@goodandready/dsh-cron.svg?style=for-the-badge&color=6366f1&labelColor=1e1b4b" alt="npm version"></a>
9
- <a href="LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-cron.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
9
+ <a href="../LICENSE"><img src="https://img.shields.io/github/license/GooDAnDReaDY/dsh-cron.svg?style=for-the-badge&color=10b981&labelColor=064e3b" alt="license"></a>
10
10
  <a href="https://github.com/topics/dsh-plugin"><img src="https://img.shields.io/badge/DSH-Plugin-8b5cf6.svg?style=for-the-badge&labelColor=2e1065" alt="DSH Plugin"></a>
11
11
  <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node-20%2B-f59e0b.svg?style=for-the-badge&labelColor=451a03" alt="Node version"></a>
12
12
  </p>
@@ -25,158 +25,206 @@
25
25
 
26
26
  ---
27
27
 
28
- ## ⚡ Назначение и решаемая проблема
28
+ ## ⚡ Обзор и проблема
29
29
 
30
- При повседневной работе автономные ИИ-агенты часто должны выполнять повторяющиеся рутинные обязанности: собирать утренние сводки изменений, мониторить статус открытых пулл-реквестов, проверять работоспособность внешних API, проводить регулярную очистку кэша или запускать сценарии тестирования. Без встроенного планировщика пользователю приходится настраивать внешние утилиты crontab, сложные вебхуки или вручную запускать нужные команды каждый день.
30
+ Автономным AI-агентам регулярно нужны повторяющиеся действия: утренние сводки, разбор трекеров задач, проверка доступности API, синхронизация баз данных, периодическая гигиена Git. Без штатного планировщика внутри харнесса приходится использовать внешние обёртки над crontab, сложные webhook-схемы или ручной запуск.
31
31
 
32
- **`@goodandready/dsh-cron`** — полнофункциональный плагин планировщика и фоновой автоматизации для DeepSeek Harness. Он объединяет стандартные cron-выражения и удобные человекопонятные интервалы с автономным запуском агентских сессий:
32
+ **`@goodandready/dsh-cron`** — нативный полноформатный плагин планирования и фоновой автоматизации для DeepSeek Harness. Он связывает стандартные cron-выражения и естественные интервалы с автономным исполнением агентами:
33
33
 
34
- 1. **Визуальный интерфейс «Запланированные задачи»**: удобная кнопка с часами в боковом меню DSH (рядом с канбан-доской и чатом) и полноэкранный интерфейс со вкладками фильтрации, историей запусков и ручным управлением.
35
- 2. **Интерактивный диалог «Создать с DSH»**: постановка задач агенту на естественном языке с автоматическим формированием cron-расписания и выбором рабочей языковой модели.
36
- 3. **Команда `/cron` прямо в чате**: быстрое управление задачами с клавиатуры (`/cron list`, `/cron add`, `/cron pause`, `/cron run`).
37
- 4. **Инструменты модели (AI Tool Calling)**: агент может самостоятельно планировать свои будущие действия в ходе выполнения задачи через встроенные инструменты (`cron_schedule_task`, `cron_list_tasks`, `cron_toggle_task`).
38
- 5. **Надёжный движок и атомарное хранение**: построен на библиотеке `croner`, поддерживает таймзоны, интервалы (`every 15m`, `daily`, `weekdays`), атомарную запись JSON-хранилища и историю выполнения.
34
+ 1. **Развитый визуальный менеджер задач** — кнопка в сайдбаре и полноценная панель: просмотр, фильтры, пауза, немедленный запуск, создание задач.
35
+ 2. **Интерактивный сценарий «Создать с DSH»** — опишите задачу словами, агент уточнит детали и оформит расписание.
36
+ 3. **Автономный tool calling** — нативные инструменты `cron_*` позволяют агентам планировать собственные последующие действия прямо в диалоге.
37
+ 4. **Надёжный планировщик и атомарное хранилище** — на базе `croner`: интервалы, разовые задачи с задержкой, атомарная запись, история запусков, учёт стоимости.
39
38
 
40
39
  ---
41
40
 
42
- ## 🏗️ Архитектура работы
41
+ ## 🏗️ Архитектура
43
42
 
44
43
  ```mermaid
45
44
  graph TD
46
- subgraph Client ["Клиентская часть (DSH Web UI)"]
47
- SidebarBtn["Кнопка с часами в меню<br/>(Слот интерфейса DSH)"]
48
- Overlay["Оверлей 'Запланированные задачи'<br/>(Табы: Все, Активные, Пауза, Завершено)"]
49
- CreateWithDSH["Модальное окно 'Создать с DSH'<br/>(Выбор модели и промпт)"]
50
- ManualForm["Форма ручной настройки<br/>(Cron-выражение, таймзона, модель)"]
51
- SlashCmd["Парсер команды /cron<br/>(/cron add, list, pause, run)"]
45
+ subgraph Client ["Клиентская поверхность (DSH UI)"]
46
+ SidebarBtn["Кнопка-часы в сайдбаре<br/>(слот DSH Client UI)"]
47
+ Overlay["Панель управления задачами<br/>(табы: Все, Активные, На паузе, Завершённые)"]
48
+ CreateWithDSH["Диалог «Создать с DSH»<br/>(задача на естественном языке)"]
49
+ ManualForm["Ручная форма задачи<br/>(cron, таймаут, overlap, модель)"]
50
+ SettingsCard["Карточка настроек<br/>(интеграции Telegram / Kanban)"]
52
51
  end
53
52
 
54
- subgraph Server ["Серверная часть (Cordis и службы DSH)"]
55
- HttpRoutes["HTTP REST API маршруты<br/>(/dsh-cron/tasks, /models, /chat-start)"]
56
- AgentTools["Шлюз инструментов агента<br/>(cron_schedule_task, cron_list_tasks)"]
57
- Scheduler["Движок TaskScheduler<br/>(Управление инстансами Croner)"]
58
- Store["Атомарный TaskStore<br/>(tasks.json с безопасной перезаписью)"]
59
- AgentRunner["Диспетчер сессий агента<br/>(Исполнение промпта в изолированном контексте)"]
53
+ subgraph Server ["Серверная часть (Cordis и сервисы DSH)"]
54
+ HttpRoutes["HTTP REST API<br/>(/dsh-cron/*)"]
55
+ AgentTools["Шлюз tool calling<br/>(cron_create_task, cron_list_tasks, ...)"]
56
+ Scheduler["Движок TaskScheduler<br/>(экземпляры Croner + таймеры one-shot)"]
57
+ Store["Атомарный TaskStore<br/>(tasks.json, атомарная запись)"]
58
+ AgentRunner["Диспетчер агентских сессий<br/>(запуск промпта выбранной моделью)"]
59
+ Notify["Доставка<br/>(Telegram Bot API, карточки dsh-kanban)"]
60
60
  end
61
61
 
62
62
  SidebarBtn --> Overlay
63
63
  Overlay --> CreateWithDSH
64
64
  Overlay --> ManualForm
65
- CreateWithDSH -->|POST /chat-start| HttpRoutes
65
+ SettingsCard --> HttpRoutes
66
+ CreateWithDSH -->|POST /chat/start| HttpRoutes
66
67
  ManualForm -->|POST /tasks| HttpRoutes
67
- SlashCmd -->|Диспетчеризация команд| HttpRoutes
68
68
  HttpRoutes --> Scheduler
69
69
  AgentTools --> Scheduler
70
70
  Scheduler --> Store
71
- Scheduler -->|Запуск по расписанию| AgentRunner
71
+ Scheduler -->|Запуск по интервалу/one-shot| AgentRunner
72
+ Scheduler --> Notify
72
73
  ```
73
74
 
74
75
  ---
75
76
 
76
- ## ✨ Подробный разбор возможностей
77
+ ## ✨ Возможности
77
78
 
78
- ### 1. Графический оверлей и кнопка в боковом меню
79
- По клику на значок часов в боковой панели DSH открывается удобный центр управления:
80
- * **Табы статусов**: быстрое переключение между категориями **Все**, **Активные**, **Приостановленные** и **Завершено**.
81
- * **Меню быстрых действий**: мгновенный запуск вне очереди (*«Запустить сейчас»*), постановка на паузу/возобновление и безопасное удаление задач.
82
- * **Готовые шаблоны в 1 клик**: предустановленные карточки популярных сценариев (*«Ежедневная сводка изменений»*, *«Еженедельный обзор репозитория»*, *«Мониторинг доступности»*).
83
- * **Журнал истории**: в карточке каждой задачи сохраняются отметки времени запуска, длительность работы в секундах, статус завершения и логи агента.
79
+ ### 1. Визуальный менеджер задач
80
+ Нажмите на иконку-часы в сайдбаре DSH (рядом с кнопкой новой сессии), чтобы открыть панель:
81
+ * **Табы фильтрации**: **Все**, **Активные**, **На паузе**, **Завершённые**.
82
+ * **Мгновенные действия**: немедленный запуск (**Запустить**), пауза/возобновление расписания, удаление с подтверждением.
83
+ * **Готовые шаблоны в один клик**: *Ежедневная сводка*, *Еженедельный обзор*, *Мониторинг дальнейших действий*.
84
+ * **История запусков**: в карточке задачи — время, длительность и статусы предыдущих запусков (успех / сбой / таймаут / пропуск / пропущен по простою), вывод и ошибки.
85
+ * **Сводная статистика**: активные задачи, всего запусков, израсходованные токены и оценочная стоимость в долларах.
84
86
 
85
- ### 2. Режим создания «Создать с DSH»
86
- Позволяет формулировать периодические задачи на обычном разговорном языке:
87
+ ### 2. Диалог «Создать с DSH»
88
+ Превратите естественный язык в задачу без подбора cron-синтаксиса:
87
89
  1. Нажмите **Создать ⌄** ➔ **Создать с DSH**.
88
- 2. Выберите нужного провайдера и модель из выпадающего списка.
89
- 3. Опишите задачу (например: *«Каждое утро в 9:00 проверять открытые тикеты в Gitea и формировать краткий дайджест»*).
90
- 4. Плагин автоматически создаст отдельную диалоговую сессию с агентом, передаст системные инструкции планировщика и зарегистрирует задачу в `TaskStore`.
90
+ 2. Опишите, что нужно автоматизировать (например: *«Проверяй открытые PR по будням в 9:00 и готовь черновики комментариев»*).
91
+ 3. Плагин создаст отдельную агентскую сессию с системными инструкциями планировщика. Агент уточнит детали — LLM или NO-LLM shell-задача, точное cron-выражение, экономичная модель из доступных в вашей установке DSH, нужно ли «правило тишины» (алерт только при новых событиях или сбоях) — и создаст задачу через инструмент `cron_create_task` только после вашего подтверждения.
91
92
 
92
- ### 3. Команда `/cron` в строке ввода чата
93
- Для тех, кто предпочитает работу с клавиатуры:
93
+ ### 3. Инструменты агентов (tool calling)
94
94
 
95
- | Команда | Синтаксис | Описание |
96
- |:---|:---|:---|
97
- | `/cron list` | `/cron list` | Выводит список всех зарегистрированных задач со статусами и ID |
98
- | `/cron add` | `/cron add "<расписание>" <промпт>` | Создаёт новую задачу. Пример: `/cron add "every 2h" Собрать статистику коммитов` |
99
- | `/cron pause` | `/cron pause <id>` | Приостанавливает выполнение задачи без её удаления |
100
- | `/cron resume` | `/cron resume <id>` | Возобновляет работу приостановленной задачи |
101
- | `/cron run` | `/cron run <id>` | Немедленно запускает задачу вне очереди |
102
- | `/cron delete` | `/cron delete <id>` | Полностью удаляет задачу из расписания |
95
+ | Инструмент | Описание |
96
+ |:---|:---|
97
+ | `cron_create_task` | Создаёт задачу: `title`, `schedule`, `prompt`, опционально `type` (`llm`/`script`), `delivery`, `provider`, `model`, `notifyTelegram`, `onlyOnFailure`, `timeoutSeconds`, `overlapPolicy`, `kanbanMode` |
98
+ | `cron_schedule_task` | Псевдоним `cron_create_task` для совместимости с существующими промптами |
99
+ | `cron_list_tasks` | Список задач со статусами, временем следующего запуска, токенами и стоимостью |
100
+ | `cron_pause_task` | Приостанавливает расписание без удаления конфигурации |
101
+ | `cron_resume_task` | Возобновляет приостановленное расписание |
102
+ | `cron_delete_task` | Полностью удаляет задачу и её историю |
103
+ | `cron_run_task` | Немедленный внеплановый запуск |
103
104
 
104
- ### 4. Инструменты модели (Tool Calling)
105
- Агент может вызывать инструменты планировщика в процессе общения:
105
+ Пример вызова модели в диалоге:
106
106
 
107
- * **`cron_schedule_task`**: создание задачи с параметрами `name`, `schedule`, `prompt` и опциональным выбором `model`.
108
- * **`cron_list_tasks`**: просмотр списка запланированных задач и времени их следующего срабатывания.
109
- * **`cron_toggle_task`**: включение или выключение задачи по её идентификатору `id`.
107
+ ```
108
+ cron_create_task({
109
+ "title": "Утренняя сводка",
110
+ "schedule": "0 8 * * 1-5",
111
+ "prompt": "Подготовь короткую утреннюю сводку активных задач и открытых тикетов.",
112
+ "type": "llm",
113
+ "delivery": "isolated"
114
+ })
115
+ ```
110
116
 
111
- ### 5. Поддерживаемый синтаксис расписаний
112
- Благодаря библиотеке `croner` поддерживаются как классические cron-выражения, так и дружественные интервалы:
117
+ ### 4. Синтаксис расписаний
118
+ На базе `croner`: стандартные 5-полевые cron-выражения и дружелюбные алиасы:
113
119
 
114
- * `0 9 * * 1-5` — по будням в 09:00 утра
120
+ * `0 9 * * 1-5` — по будням в 09:00
115
121
  * `*/15 * * * *` — каждые 15 минут
116
122
  * `0 0 * * 0` — каждое воскресенье в полночь
117
- * `every 10m` / `every 2h` / `every 30s` — интервалы на понятном языке
118
- * `daily` / `hourly` / `weekly` — быстрые алиасы
123
+ * `every 10m` / `every 2h` / `every 30s` — естественные интервалы
124
+ * алиасы `daily` / `hourly` / `weekdays` (`weekdays` → `0 9 * * 1-5`)
125
+ * **Разовые задачи**: `at: 2026-09-05T15:00:00Z` (точный ISO-таймстемп) или относительные задержки `in 20m` / `in 2h` (принимаются и русские варианты вроде `через 15 минут`). После единственного запуска задача автоматически переходит в `completed` и отображается на табе **Завершённые**.
126
+
127
+ ### 5. Уведомления Telegram
128
+ Прямая интеграция с Telegram Bot API доставляет отчёты о запусках и трейсы ошибок в мессенджер:
129
+
130
+ * **Автоматические или собственные креденшелы** — введите свои `botToken` и `chatId` в диалоге настроек или позвольте плагину унаследовать значения по умолчанию из секции `dsh-messenger-gateway` вашего DSH `settings.yaml` (best-effort).
131
+ * **Режим «только при сбоях»** — включите `onlyOnFailure` глобально или для отдельной задачи. Успешные запуски молчат; сбои (статусы `error` и `timeout`) отправляют алерт с трейсом.
132
+ * **Markdown-оформление** — статусные значки (✅ / ❌), длительность, описание расписания и monospace-блоки вывода; динамические значения экранируются, поэтому нестандартные символы в названии не сломают сообщение.
133
+ * **Кнопка проверки** — проверьте доставку в Telegram до запуска критичных задач.
134
+
135
+ ### 6. Интеграция с Kanban и учёт стоимости
136
+ * **Автоматические карточки Kanban** — при `kanbanMode` = `on_failure` или `always` плагин создаёт карточки в `dsh-kanban` (`on_failure` → *Backlog* при `error`/`timeout`; `always` → *Done*/*Backlog* по завершении).
137
+ * **Счётчик токенов и стоимости** — потребление токенов (ввод, вывод, чтения из кэша) учитывается по запускам и задачам с оценкой в USD по встроенной таблице цен и сводной панелью аналитики.
138
+
139
+ ### 7. Политики наложения и таймаут выполнения
140
+
141
+ * **Таймаут (`timeoutSeconds`)** — по достижении лимита shell-процесс немедленно завершается через abort-сигнал, а агентская сессия закрывается, чтобы не расходовать токены. По умолчанию `1800` (30 минут).
142
+ * **Политика наложения (`overlapPolicy`)** — что делать, когда тик срабатывает при ещё активном предыдущем запуске:
143
+ * **`skip`** (по умолчанию): накладывающийся запуск отбрасывается, в истории появляется запись `skipped`;
144
+ * **`queue`**: следующий запуск ставится в очередь и стартует по завершении активного;
145
+ * **`replace`**: активный запуск прерывается через `AbortController`, запускается свежий.
146
+
147
+ Если сервис был выключен в момент планового запуска, при старте в истории появится запись `missed` — пробелы в истории остаются видимыми.
119
148
 
120
149
  ---
121
150
 
122
151
  ## 📦 Установка
123
152
 
124
- Установка через командную строку DeepSeek Harness:
125
-
126
153
  ```bash
127
154
  dsh plugin --profile web add @goodandready/dsh-cron
128
155
  ```
129
156
 
130
- Перезапустите DSH и обновите вкладку в браузере.
157
+ Перезапустите DeepSeek Harness и обновите страницу в браузере.
131
158
 
132
159
  ---
133
160
 
134
161
  ## ⚙️ Конфигурация (`settings.yaml`)
135
162
 
136
- Настройка доступна через файл конфигурации или панель настроек DSH:
163
+ Конфигурацию можно задать в `settings.yaml` или интерактивно через карточку настроек плагина в DSH:
137
164
 
138
165
  ```yaml
139
166
  # settings.yaml
140
167
  dsh-cron:
141
- storagePath: "data/cron-tasks.json"
142
- maxHistoryEntries: 50
143
- defaultTimezone: "Europe/Moscow"
144
- defaultModel: ""
145
- notifyOnFailure: true
168
+ botToken: "" # токен Telegram Bot API (секретное поле)
169
+ chatId: "" # ID чата Telegram для отчётов
170
+ notifyTelegram: false # глобально отправлять отчёты о всех задачах
171
+ onlyOnFailure: false # отправлять отчёты только при сбоях
172
+ kanbanBaseUrl: "http://127.0.0.1:3000" # базовый URL HTTP API dsh-kanban
146
173
  ```
147
174
 
148
- ### Таблица параметров конфигурации
175
+ ### Параметры
149
176
 
150
177
  | Параметр | Тип | По умолчанию | Описание |
151
178
  |:---|:---|:---|:---|
152
- | `storagePath` | `string` | `"data/cron-tasks.json"` | Путь к файлу атомарного сохранения задач и истории |
153
- | `maxHistoryEntries` | `number` | `50` | Максимальное количество записей журнала запусков на задачу |
154
- | `defaultTimezone` | `string` | `"UTC"` | Часовой пояс IANA для расчёта cron-выражений |
155
- | `defaultModel` | `string` | `""` | Модель по умолчанию, если не выбрана вручную |
156
- | `notifyOnFailure` | `boolean` | `true` | Показывать уведомление в интерфейсе при сбое фоновой задачи |
179
+ | `botToken` | `string` | `""` | Токен Telegram Bot API. Если пусто, плагин пытается унаследовать бота, настроенного для `dsh-messenger-gateway` в настройках DSH (best-effort). Секретное поле: в интерфейсе отображается только замаскированное значение |
180
+ | `chatId` | `string` | `""` | ID чата Telegram для отчётов. Пустое значение — откат к первому разрешённому чату `dsh-messenger-gateway` |
181
+ | `notifyTelegram` | `boolean` | `false` | Глобальный выключатель доставки отчётов в Telegram |
182
+ | `onlyOnFailure` | `boolean` | `false` | Глобальный режим «только при сбоях» (`error`/`timeout`) |
183
+ | `kanbanBaseUrl` | `string` | `"http://127.0.0.1:3000"` | Базовый URL HTTP API `dsh-kanban` для автоматических карточек |
184
+
185
+ Примечания:
186
+
187
+ * История запусков ограничена **50 записями на задачу** (фиксировано); в записи хранится до 4000 символов вывода.
188
+ * Задачи выполняются в **локальном часовом поясе сервера**; cron-выражения вычисляет `croner` по часам хоста.
189
+ * Задачи сохраняются в каталоге данных DSH (`cron/tasks.json`) и переживают перезапуск; пропущенные one-shot запуски обнаруживаются при старте.
157
190
 
158
191
  ---
159
192
 
160
- ## 🧪 Тестирование
193
+ ## 🔌 HTTP API
194
+
195
+ Все эндпоинты обслуживаются веб-сервером DSH под `/dsh-cron/`. Чтение открыто локальному интерфейсу; **мутирующие эндпоинты отклоняют cross-origin запросы** и принимают тела до 1 МБ. Для создания `script`-задач по HTTP дополнительно требуется заголовок `x-dsh-cron-confirm: script`, который подделанный межсайтовый запрос приложить не может.
161
196
 
162
- Запуск набора юнит-тестов:
197
+ | Метод | Путь | Описание |
198
+ |:---|:---|:---|
199
+ | `GET` | `/dsh-cron/tasks` | Список задач; параметры `status` (`all/active/paused/completed`), `query` (подстрока). Возвращает задачи, шаблоны рекомендаций и сводную статистику |
200
+ | `POST` | `/dsh-cron/tasks` | Создание или обновление задачи (при наличии `id` — обновление). Обязательны `title`, `schedule`, `prompt` |
201
+ | `GET` | `/dsh-cron/tasks/:id/history` | История запусков, `?limit=20` |
202
+ | `POST` | `/dsh-cron/tasks/:id/run` | Немедленный ручной запуск |
203
+ | `POST` | `/dsh-cron/tasks/:id/pause` | Пауза расписания |
204
+ | `POST` | `/dsh-cron/tasks/:id/resume` | Возобновление расписания |
205
+ | `POST` | `/dsh-cron/tasks/:id/toggle` | Переключение активна/на паузе |
206
+ | `PATCH` | `/dsh-cron/tasks/:id` | Частичное обновление (только whitelisted-поля: `title`, `schedule`, `prompt`, `type`, `delivery`, `provider`, `model`, настройки уведомлений/таймаута/overlap/kanban, `status`, `oneShot`) |
207
+ | `DELETE` | `/dsh-cron/tasks/:id` | Удаление задачи |
208
+ | `GET` | `/dsh-cron/models` | Список LLM-провайдеров; `?provider=<id>` — модели |
209
+ | `POST` | `/dsh-cron/chat/start` | Старт агентской сессии «Создать с DSH» с инструкциями планировщика |
210
+ | `GET` | `/dsh-cron/settings` | Настройки для клиента (токен замаскирован) |
211
+ | `POST` | `/dsh-cron/settings` | Обновление настроек интеграций |
212
+ | `POST` | `/dsh-cron/telegram/test` | Тестовое сообщение в Telegram |
213
+ | `POST` | `/dsh-cron/kanban/test` | Тестовая карточка в Kanban |
214
+ | `*` | `/dsh-cron/action/:id/:action` | Legacy-алиас действий над задачей (`run`, `toggle`, `delete`, `history`) |
215
+
216
+ ---
217
+
218
+ ## 🧪 Тестирование
163
219
 
164
220
  ```bash
165
221
  npm test
166
222
  ```
167
223
 
224
+ Набор покрывает разбор расписаний, движок планировщика, атомарное хранилище, HTTP-хелперы, уведомления и контракт инструментов.
225
+
168
226
  ---
169
227
 
170
228
  ## 📄 Лицензия
171
229
 
172
230
  MIT © [GooDAnDReaDY](https://github.com/GooDAnDReaDY)
173
-
174
- ### Интеграция с Kanban и счетчик стоимости токенов (v0.1.17)
175
- - **Автосоздание карточек в Kanban**: Автоматическое заведение задач в бэклог `dsh-kanban` при обнаружении сбоев/ошибок (`on_failure`) или при каждом завершении (`always`).
176
- - **Трекинг токенов и расчет расходов (USD)**: Подсчет потребления токенов (input, output, cacheRead) для каждой задачи и запуск с расчетом примерной стоимости в долларах США.
177
- - **Сводная панель статистики**: Отображение общего числа запусков, активных задач, суммарного расхода токенов и совокупных затрат прямо в заголовке планировщика.
178
-
179
- ### Разовые отложенные задачи (v0.1.18)
180
- - **Точное время и относительные задержки**: Поддержка однократных задач, запускаемых в конкретный момент времени по стандарту ISO 8601 (`at: 2026-09-05T12:00:00Z`) или через заданный интервал (`in 20m`, `in 2h`, `через 15 минут`).
181
- - **Автоматический перевод в «Завершенные»**: После единичного выполнения задача автоматически переходит в статус `completed`, исключая повторные старты.
182
- - **Индикация в интерфейсе**: Разовые задачи помечаются специальным бейджем «Разовая» и фильтруются по вкладке «Завершенные».