Перейти до вмісту

Team Tracker

Team Tracker записує активні хвилини (тики раз на хвилину), класифікує їх для кожного workspace як internal або external за Git remote активного редактора, і надсилає агрегати в team API SnakeFlow. Функція вимкнена, доки ви не увійдете й не ввімкнете її.

Вимоги

  • SnakeFlow: Team Tracker — Login (GitHub OAuth у редакторі).
  • devManager.team.enabled = true (команда входу може увімкнути це автоматично).
  • Для системної миші та клавіатури поза редактором: ActivityWatch (aw-qt) на машині (рекомендовано; див. нижче).

ActivityWatch і статус-бар

Коли ActivityWatch запущений, розширення бачить активність у інших програмах (браузер, зовнішній термінал тощо), щоб не переходити в IDLE лише через відсутність подій у VS Code. Якщо є window watcher (bucket aw-watcher-window_*), раз на хвилину зчитується назва програми та заголовок вікна (коротке кешування) для allowlist програм і підказки в статус-барі.

  • Клік по елементу Team Tracker у статус-барізапуск aw-qt (якщо встановлено) або зупинка ActivityWatch (завершує локальні процеси ActivityWatch на ОС).
  • Якщо aw-qt не знайдено — пропозиція відкрити сторінку завантаження.
  • SnakeFlow: Team Tracker — Show Activity Log (Command Palette) — детальний лог (ACTIVE / IDLE / GATED).

Жорстке вимогу (requireActivityWatch)

Якщо devManager.team.requireActivityWatch = true (за замовчуванням), хвилини не рахуються, доки REST API ActivityWatch недоступний за activityWatchUrl. У статус-барі — червоний індикатор і підказка, що час не записується, доки не запустити ActivityWatch.

Вимкніть requireActivityWatch лише для ролей, яких не потрібно примушувати (наприклад адміни на власних ПК).

Що вважається «активним»

У межах вікна тиші (idleWindowMinutes) оновлює «годинник» активності будь-який із сигналів:

  • Правки тексту, зміна виділення, перемикання редактора, збереження
  • Відкриття терміналу / зміна стану, старт дебагу / зміна breakpoint
  • Виконані команди (AI-команди в логу з окремим тегом)
  • Скрол у редакторі, повернення фокусу вікна
  • ActivityWatch: недавній not-afk / input, якщо сервер увімкнений і доступний

Добу обмежує бекенд (див. API-документацію).

Internal vs external

Для кожного workspace тик internal лише якщо одночасно виконуються умови:

  1. Збіг репоremote активного текстового редактора (owner/repo) відповідає патернам репо workspace (glob, як раніше).
  2. Збіг програми (якщо налаштовано) — allowlist програм порожній (фільтр вимкнено), або хоча б один regex збігається з полем app або title вікна з ActivityWatch (без урахування регістру). Список зберігається на сервері; адміни редагують, усі учасники отримують через /api/team/me.

Інакше — +1 external для цього workspace:

  • Невірний репо → external з реальним owner/repo, якщо відомо.
  • Програма поза allowlist (список непорожній і вікно не підходить під жоден regex) → external з міткою _app:НазваПрограми — бекенд зберігає такі хвилини окремо від зовнішніх репо.

Порожній allowlist програм означає «будь-яка програма підходить» для фільтра за додатком; далі вирішують лише патерни репо.

Примітка: коли ActivityWatch фіксує активність у іншій програмі, класифікація за репо все одно береться з останнього активного редактора в Cursor/VS Code. Якщо в workspace непорожній allowlist, але немає window watcher (bucket), app/title можуть бути недоступні → тик не проходить фільтр програм і йде в external для цього workspace.

Allowlist програм (адмін)

Адміни workspace ведуть список regex на сервері:

  • SnakeFlow Cloud → вкладка Team → панель workspace → редагування allowlist програм (іконка камери) — той самий сценарій, що й команда нижче.
  • SnakeFlow: Team Tracker — Edit App Allowlist — regex через кому; порожній рядок очищає список (знову «усі програми дозволені»).

Сервер перевіряє кожен патерн як JavaScript RegExp (прапор без урахування регістру) і відхиляє невалідний синтаксис. Є обмеження на кількість патернів і довжину рядка (див. реалізацію API).

Порада: regex перевіряються і по назві процесу / app, і по заголовку вікна; за змістом це близько до категоризації ActivityWatch, але правила задає ваша команда для звітів SnakeFlow.

Налаштування

ПараметрТипЗа замовчуваннямОпис
devManager.team.enabledbooleanfalseГоловний перемикач Team Tracker.
devManager.team.idleWindowMinutesnumber2Хвилини тиші перед IDLE (1–15).
devManager.team.useActivityWatchbooleantrueЗапитувати локальний ActivityWatch для системного вводу.
devManager.team.requireActivityWatchbooleantrueЯкщо true — немає обліку, поки ActivityWatch недоступний.
devManager.team.activityWatchUrlstringhttp://localhost:5600Базовий URL aw-server.

Зміна цих ключів перезапускає collector без перезавантаження вікна.

Команди

КомандаОпис
SnakeFlow: Team Tracker — LoginВхід; може увімкнути трекінг.
SnakeFlow: Team Tracker — LogoutЗупинка та вихід.
SnakeFlow: Team Tracker — StatusКороткий статус у повідомленні.
SnakeFlow: Team Tracker — Show Activity LogOutput-канал з причинами кожної хвилини.
SnakeFlow: Team Tracker — Start/Stop ActivityWatchТе саме, що клік у статус-барі.
SnakeFlow: Team Tracker — Edit App AllowlistАдмін workspace: allowlist regex для вікна ActivityWatch (на сервері).
SnakeFlow: Team Tracker — Create WorkspaceАдмін: новий workspace + invite.
SnakeFlow: Team Tracker — Join WorkspaceВхід за кодом запрошення.
SnakeFlow: Team Tracker — Manage WorkspacesСписок / контекст.
SnakeFlow: Team Tracker — Sync Commits (admin)Синхронізація агрегованих комітів для дашбордів.

Див. також