- Volume was mounted at ~/.claude only, but claude-code writes auth to ~/.claude.json too — that file lived on the ephemeral container layer and was lost on every recreate. Now the whole $HOME is on the named volume, and claude-config moved outside HOME (/app) so it isn't shadowed by it. - Default /news topic was hardcoded to AI; now it's a configurable DEFAULT_TOPIC (plain "главные новости дня"), topic is fully free-form. - Prompt now instructs Claude to send interim "⏳ ..." progress updates via send_to_telegram while researching, not just the final digest — a bare request like "call this tool" was already taking 3+ minutes end-to-end, so silence read as broken. - All user-facing/prompt text moved into bot/lib/lexicon.dart. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
3.0 KiB
Dart
41 lines
3.0 KiB
Dart
// Все тексты, которые бот показывает пользователю или подставляет в промпт
|
||
// Claude — в одном месте, чтобы менять формулировки не по всему коду.
|
||
class Lexicon {
|
||
static const welcome =
|
||
'Привет! Я agent-news. Команда /news <тема> — сделаю ресёрч и пришлю '
|
||
'выжимку с источниками. Без темы — возьму главные новости дня. '
|
||
'Ресёрч ведёт Claude Code, обычно несколько минут — по ходу буду '
|
||
'присылать статусы, что происходит.';
|
||
|
||
static const alreadyBusy = 'Уже выполняю другой запрос, подожди.';
|
||
|
||
static String starting(String topic) =>
|
||
'🔎 Начинаю ресёрч по теме «$topic». Пришлю статусы по ходу и выжимку в конце.';
|
||
|
||
static const timedOut = 'Не успел уложиться по времени, попробуй позже.';
|
||
|
||
static const failed = 'Не получилось выполнить ресёрч, попробуй позже.';
|
||
|
||
// Тема по умолчанию для /news без аргумента — просто «главные новости»,
|
||
// без привязки к конкретной сфере: тема запроса задаётся пользователем.
|
||
static const defaultTopic = 'главные новости дня';
|
||
|
||
static String researchInstruction(String topic) =>
|
||
'Проведи ресёрч по теме "$topic" за последние 7 дней. Используй поиск '
|
||
'в интернете. Составь выжимку: 5-8 пунктов, у каждого — суть в 1-2 '
|
||
'предложениях и ссылка на источник.';
|
||
|
||
static String progressInstruction(int chatId) =>
|
||
'По ходу работы присылай короткие статусы через инструмент '
|
||
'send_to_telegram (chat_id=$chatId, text="⏳ <что делаешь сейчас>") — '
|
||
'например сразу после того как определишь план поиска, и ещё раз '
|
||
'после того как соберёшь основные источники. Это нужно, чтобы '
|
||
'пользователь видел, что процесс идёт, а не просто ждал молча.';
|
||
|
||
static String finalDeliveryInstruction(int chatId) =>
|
||
'В конце ОБЯЗАТЕЛЬНО вызови send_to_telegram ещё раз с параметрами '
|
||
'chat_id=$chatId и text=<готовая выжимка в Markdown, с заголовком>. Это '
|
||
'единственный способ доставить результат — не выводи финальный ответ '
|
||
'никак иначе, только через вызов этого инструмента.';
|
||
}
|