- create_event(title, date, start_time?, end_time?, all_day?, owner)
owner обязателен (daniil | sveta). System prompt велит LLM уточнять
чей это календарь, если неясно.
- update_event(event_id, owner, ...fields) — меняет только переданные
поля. Сначала нужно вызвать get_today_events для получения event_id.
- delete_event(event_id, owner) — сначала get_today_events, найти
событие по названию, подтвердить если важное.
get_today_events теперь возвращает event_id и owner (daniil/sveta),
плюс принимает range=month. Description явно говорит LLM что это
первый tool для CRUD-сценариев.
System prompt (Cosmo и Люся) дополнен секцией 'Работа с календарём'
с правилами: даты YYYY-MM-DD, время HH:MM, «завтра» = +1 день,
вычислять от {today}.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two new Claude tools for voice control over existing timers.
Both accept a {label} (fuzzy match on tablet side, case-insensitive
substring) so the LLM doesn'\''t need to know internal timer ids.
- cancel_timer(label) → POST /api/voice/timer {action:cancel}
- adjust_timer(label, delta_seconds) → POST {action:adjust}
Use cases:
'\''Отмени таймер чайник'\'' → cancel_timer(label="чайник")
'\''Добавь ещё 5 минут к пасте'\'' → adjust_timer(label="паста", delta_seconds=300)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Claude Haiku 4.5 теперь умеет дёргать tools. Все tools — proxy к endpoints
планшета (/api/voice/tools/* и /api/voice/timer) с bearer auth
VOICE_API_KEY. Никакой дополнительной auth в скрипте не требуется.
- satellite/tools.py — 5 tools:
* get_weather(city?) → Open-Meteo через tablet
* get_transport(direction, routes?) → трамваи Антонова-Овсеенко
* get_today_events(range?) → Google Calendar (today/week)
* get_notes() → текстовые + shopping lists
* set_timer(seconds, label) → создаёт таймер на дашборде
Каждый tool возвращает dict/list; ошибки упаковываются как {error: ...}
и отдаются Claude как результат — он сам обрабатывает.
- satellite/llm_claude.py:
* Подключил TOOL_SCHEMAS в вызов messages.create
* Цикл tool-use: до MAX_TOOL_ROUNDS=4 раундов tool_use → exec → tool_result
* System prompt дополнен инструкцией «используй tools без спроса»
* Финальный текст (после всех tool rounds) сохраняется в историю как один
assistant-turn — tool rounds в history не пишутся чтобы не раздувать кеш
* Usage логируется суммарно за все раунды
Работает с уже поднятым tinyproxy на .103 (HTTPS_PROXY в .env).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>