TimelixTimelix
Модули

Timelix Pulse

Отдельный scheduler/queue сервис для отложенных и периодических запусков инструментов

Timelix Pulse — это отдельно деплоимый сервис расписаний и очередей. Он отвечает за отложенные и периодические запуски инструментов, а приложение Timelix работает с ним через клиент lib/pulse.ts и прокси-роуты /api/pulse/*.

Зачем он вынесен отдельно

  • расписание живёт вне lifecycle Next.js процесса
  • одна очередь может обслуживать несколько окружений и frontend-инстансов
  • callback всегда можно направить в production через CALLBACK_URL на стороне Pulse
  • Timelix получает единый слой для schedule, cancel, reschedule и мониторинга job-ов

Основные части

lib/pulse.ts

Клиентский слой приложения. Здесь находятся:

  • scheduleJob()
  • cancelJob()
  • cancelJobsForTool()
  • cancelJobsForAssignment()
  • getJobs()
  • checkPulseHealth()

По умолчанию клиент использует PULSE_URL и PULSE_SECRET.

Прокси-роуты Timelix

Timelix не заставляет UI ходить в Pulse напрямую. Вместо этого приложение проксирует основные операции:

  • GET /api/pulse/status
  • GET /api/pulse/jobs
  • DELETE /api/pulse/jobs/[id]
  • POST /api/pulse/jobs/[id]/reschedule
  • POST /api/pulse/callback

Таким образом UI и внутренние модули работают через привычные роуты Timelix, а секрет к Pulse остаётся на сервере.

Интеграция со Store и scheduled tools

Расписания для инструментов синхронизируются из features/Store/api/storeActions.ts.

Именно там формируется payload для очереди и вызывается синхронизация:

  • при включении расписания tool assignment
  • при изменении времени/интервала
  • при удалении или отключении связи

Поток выполнения

sequenceDiagram
  participant UI as Timelix UI
  participant App as Timelix App
  participant Pulse as Timelix Pulse
  participant Callback as /api/pulse/callback
  participant Agent as ProactiveAgent / Tools
 
  UI->>App: настроить расписание
  App->>Pulse: scheduleJob()
  Pulse-->>App: jobId + executeAt
  Pulse->>Callback: callback в Timelix
  Callback->>Agent: выполнить tool / триггернуть агента
  Callback->>Pulse: при необходимости запланировать следующий run

Callback и следующий запуск

POST /api/pulse/callback — точка, которую вызывает Pulse после наступления времени job-а.

Этот callback:

  • принимает PulseJobPayload
  • вызывает нужный инструмент или agent flow
  • при необходимости планирует следующий запуск

Сама ссылка callback-а задаётся на стороне Pulse через CALLBACK_URL, а не передаётся с каждого клиента отдельно. Это гарантирует, что даже job, созданный из dev/preview, выполнится в правильном production-контуре.

Fallback: app/api/cron

В Timelix есть запасной путь GET /api/cron?run=true.

Он нужен для:

  • ручного запуска scheduled tools
  • fallback-сценариев на serverless или во время отладки

Но канонический scheduler — именно Timelix Pulse. Если Pulse доступен, именно он считается главным источником расписаний.

GET /api/cron без run=true возвращает только статус и прямо сообщает, что основной scheduler — Timelix Pulse.

Мониторинг

Для мониторинга используются:

  • GET /api/pulse/status — быстрая диагностика конфигурации, health и количества jobs
  • GET /api/pulse/jobs — список задач, отфильтрованный по текущему пользователю и компании
  • UI-компонент features/PulseDashboard/ui/PulseDashboard.tsx — визуальная панель job-ов там, где она встроена в продукт

Конфигурация

В приложении Timelix

  • PULSE_URL — адрес внешнего Pulse сервиса
  • PULSE_SECRET — bearer token для запросов в Pulse
  • CRON_SECRET — защита fallback endpoint-а app/api/cron

На стороне Pulse

  • CALLBACK_URL — куда Pulse должен слать callback после наступления job

Типичные проблемы

Pulse not configured

Обычно это означает, что в Timelix не заданы PULSE_URL или PULSE_SECRET.

Job создаётся, но ничего не выполняется

Проверьте:

  • жив ли сам Pulse (/api/pulse/status)
  • корректен ли CALLBACK_URL на стороне Pulse
  • не падает ли POST /api/pulse/callback

UI не видит задачи

Сначала смотрите GET /api/pulse/jobs, затем фильтрацию по userId и companyId в proxy-роуте Timelix.

Связанные разделы

  • Timelix Tools — какие инструменты запускаются по расписанию
  • Timelix Chat — как proactive и scheduled сценарии сходятся с агентским backend-ом