@goodandready/dsh-cron 0.1.12 → 0.1.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/lib/chat-start.js CHANGED
@@ -42,10 +42,22 @@ export async function chatStartHandler(ctx, req, res, parseJsonBody, sendJson, r
42
42
  const cwd = process.cwd();
43
43
  const handle = await agents.create({
44
44
  sessionId: mintSessionId(),
45
- meta: { cwd },
45
+ meta: {
46
+ cwd,
47
+ agentPreset: 'standard',
48
+ },
46
49
  agentOptions: provider && model ? { provider, model } : undefined,
47
50
  });
48
51
 
52
+ const permissions = ctx.get?.('permissionPresets');
53
+ if (permissions && typeof permissions.set === 'function') {
54
+ try {
55
+ permissions.set(handle.agent.session, 'workspace-write');
56
+ } catch (permErr) {
57
+ ctx.logger?.warn?.(`[dsh-cron] could not set permissionPreset: ${permErr.message}`);
58
+ }
59
+ }
60
+
49
61
  const { buildAgentCronPrompt } = await import('./prompt.js');
50
62
  const fullPrompt = buildAgentCronPrompt(userPrompt);
51
63
 
@@ -60,4 +72,4 @@ export async function chatStartHandler(ctx, req, res, parseJsonBody, sendJson, r
60
72
  ctx.logger?.warn?.(`[dsh-cron] chat/start error: ${err.message}`);
61
73
  sendJson(res, 500, { ok: false, error: err.message });
62
74
  }
63
- }
75
+ }
package/lib/prompt.js CHANGED
@@ -14,37 +14,41 @@ export function buildAgentCronPrompt(userText) {
14
14
  КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО вызывать инструмент \`cron_schedule_task\` в первом же ответе!
15
15
  Ты НЕ имеешь права создавать задачу, пока не задашь пользователю уточняющие вопросы и не получишь его подтверждение.
16
16
 
17
- 2. ЧТО ТЫ ОБЯЗАН УТОЧНИТЬ В ПЕРВОМ ОТВЕТЕ:
18
- - Тип задачи (LLM или NO-LLM?):
19
- * LLM-крон: агент запускается по расписанию с языковой моделью, анализирует вывод, делает выводы, парсит неструктурированный текст (расходует токены).
20
- * NO-LLM крон (скрипт/bash): периодический запуск shell-команды или скрипта (curl, git check, ping, проверка системных служб) БЕЗ участия LLM. Не расходует токены, сообщает только при ненулевом коде возврата или ошибке.
21
- Спроси пользователя, какой вариант предпочтительнее для его задачи (или аргументированно предложи подходящий).
22
- - Выбор модели (если выбран LLM-крон):
23
- * Предложи экономичную и быструю модель (например, \`deepseek/deepseek-v4-flash\` или \`Qwen/Qwen3.8-Flash\`).
24
- * Спроси, подходит ли эта модель или пользователь хочет использовать другую подключенную модель.
17
+ 2. ПЕРВЫЙ ВОПРОС: LLM vs NO-LLM Shell (КРИТИЧЕСКИ ВАЖНО):
18
+ - Оцени характер задачи:
19
+ * Если задача ТРИВИАЛЬНАЯ (проверка RSS/Atom фида, проверка кода ответа HTTP, curl/ping/git check, мониторинг файла или службы) — ТЫ ОБЯЗАН РЕКОМЕНДОВАТЬ NO-LLM Shell (type: "script")!
20
+ Поясни пользователю: "Для этой задачи языковая модель избыточна — простой bash-скрипт с curl/jq отработает за миллисекунды, надежно и не потратит ни единого токена. Рекомендую оформить как NO-LLM Shell-скрипт."
21
+ * Если задача требует СЕМАНТИЧЕСКОГО АНАЛИЗА (обобщение писем, генерация отчета из неструктурированного текста, принятие смысловых решений) — предложи LLM (type: "llm").
22
+ - Спроси пользователя, согласен ли он с предложенным типом задачи.
23
+
24
+ 3. ЧТО ТЫ ОБЯЗАН УТОЧНИТЬ:
25
+ - Если выбран NO-LLM Shell:
26
+ * Предложи готовый shell-скрипт или команду для выполнения.
27
+ * Уточни, подходит ли логика скрипта.
28
+ - Если выбран LLM:
29
+ * Предложи экономичную модель (например, \`deepseek/deepseek-v4-flash\` или \`Qwen/Qwen3.8-Flash\`).
30
+ * Спроси, подходит ли эта модель.
25
31
  - Точное расписание (schedule):
26
32
  * Предложи конкретное выражение cron (например, "0 */6 * * *" для 4 раз в день или "0 9 * * 1-5" по будням) и понятное текстовое пояснение.
27
- * Уточни, устраивает ли такое расписание.
28
33
  - Silent Rule (Правило тишины / Уведомления):
29
- * По умолчанию для регулярных проверок действует Silent Rule: если всё в порядке / нет обновлений / сервис работает штатно — агент молчит или возвращает пустой ответ, чтобы не спамить. Оповещение отправляется ТОЛЬКО при обнаружении изменений, обновлений или проблем.
30
- * Уточни, нужно ли применять Silent Rule или присылать отчёт при каждом запуске.
34
+ * Для проверок и мониторингов действует жесткое Silent Rule: если новых событий/изменений нет — ПОЛНАЯ ТИШИНА, никаких сообщений в чат/Telegram не отправляется вообще (exit 0 в скрипте или пустой ответ). Оповещение уходит ТОЛЬКО при обнаружении новинок или сбое.
35
+ * Подтверди пользователю, что правило тишины будет включено.
31
36
 
32
- 3. СТРУКТУРА ПЕРВОГО ОТВЕТА:
37
+ 4. СТРУКТУРА ПЕРВОГО ОТВЕТА:
33
38
  - Кратко подтверди суть задачи.
34
- - Сформулируй проект карточки задачи:
35
- • Тип: [LLM / NO-LLM]
39
+ - Сформулируй проект карточки:
40
+ • Тип: [NO-LLM Shell (рекомендуется) / LLM]
36
41
  • Расписание: [cron-выражение и понятное описание]
37
- • Модель: [если LLM — предлагаемая модель]
38
- • Логика проверки и Silent Rule: [кратко]
39
- - Задай недостающие вопросы (LLM/NO-LLM, модель, расписание, порог алерта).
40
- - Попроси пользователя подтвердить или скорректировать параметры перед созданием.
42
+ • Реализация / Скрипт / Модель: [код скрипта или предлагаемая модель]
43
+ • Silent Rule: [только при наличии изменений / сбое]
44
+ - Задай недостающие вопросы и попроси подтвердить создание задачи.
41
45
 
42
- 4. СОЗДАНИЕ ЗАДАЧИ:
46
+ 5. СОЗДАНИЕ ЗАДАЧИ:
43
47
  Только ПОСЛЕ ТОГО, как пользователь ответит и подтвердит параметры, вызови инструмент \`cron_schedule_task\`, передав:
44
48
  - title: понятное название задачи
45
49
  - schedule: согласованное cron-выражение
46
- - prompt: финальная подробная инструкция для агента (с обязательным Silent Rule) ИЛИ shell-команда для NO-LLM
47
- - type: "llm" или "script"
48
- - provider и model: согласованный провайдер и модель (если type="llm")
50
+ - prompt: финальная shell-команда/путь к скрипту (для type="script") ИЛИ подробная инструкция с Silent Rule (для type="llm")
51
+ - type: "script" или "llm"
52
+ - provider и model: согласованный провайдер и модель (только если type="llm")
49
53
  - delivery: "isolated"`;
50
54
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goodandready/dsh-cron",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
4
4
  "description": "Scheduled cron tasks, background automation and agent execution for DeepSeek Harness.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",