import type { VoiceTool, AgentId } from './_types' import { tabletJson } from './_http' const setTimer: VoiceTool = { schema: { type: 'function', function: { name: 'set_timer', description: 'Запустить таймер на планшете. Показывает обратный отсчёт с названием и звенит ' + 'по окончании. Используй для «поставь таймер на 10 минут», «напомни через час», ' + '«засеки 5 минут для чайника».', parameters: { type: 'object', properties: { seconds: { type: 'integer', description: 'Длительность в секундах (1..86400)', minimum: 1, maximum: 86400, }, label: { type: 'string', description: 'Короткое название таймера (например «Чайник», «Паста»)', }, }, required: ['seconds', 'label'], }, }, }, async execute(args, agent: AgentId) { const seconds = Number(args?.seconds || 0) const label = String(args?.label || 'Таймер') if (!Number.isFinite(seconds) || seconds < 1) return { error: 'seconds must be positive' } return tabletJson('POST', '/api/voice/timer', { action: 'start', seconds, label, agent, }) }, } const cancelTimer: VoiceTool = { schema: { type: 'function', function: { name: 'cancel_timer', description: 'Отменить активный таймер по его названию. Для «отмени таймер чайник», ' + '«убери таймер пасты», «останови отсчёт».', parameters: { type: 'object', properties: { label: { type: 'string', description: 'Название таймера (примерное совпадение — можно частично).', }, }, required: ['label'], }, }, }, async execute(args) { const label = String(args?.label || '').trim() if (!label) return { error: 'label required' } return tabletJson('POST', '/api/voice/timer', { action: 'cancel', label }) }, } const adjustTimer: VoiceTool = { schema: { type: 'function', function: { name: 'adjust_timer', description: 'Изменить оставшееся время таймера. Для «добавь ещё 5 минут», «убавь на минуту», ' + '«накинь времени чайнику». Положительный delta_seconds = добавить, отрицательный = уменьшить.', parameters: { type: 'object', properties: { label: { type: 'string', description: 'Название таймера для которого меняем время.', }, delta_seconds: { type: 'integer', description: 'Секунды (+ добавить, - уменьшить). Например 300 = +5 минут, -60 = -1 минута.', }, }, required: ['label', 'delta_seconds'], }, }, }, async execute(args) { const label = String(args?.label || '').trim() const delta = Number(args?.delta_seconds || 0) if (!label) return { error: 'label required' } if (!Number.isFinite(delta) || delta === 0) return { error: 'delta_seconds must be non-zero' } return tabletJson('POST', '/api/voice/timer', { action: 'adjust', label, delta_seconds: delta, }) }, } export const tools: VoiceTool[] = [setTimer, cancelTimer, adjustTimer]