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 лише якщо одночасно виконуються умови:
- Збіг репо — remote активного текстового редактора (
owner/repo) відповідає патернам репо workspace (glob, як раніше). - Збіг програми (якщо налаштовано) — 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.enabled | boolean | false | Головний перемикач Team Tracker. |
devManager.team.idleWindowMinutes | number | 2 | Хвилини тиші перед IDLE (1–15). |
devManager.team.useActivityWatch | boolean | true | Запитувати локальний ActivityWatch для системного вводу. |
devManager.team.requireActivityWatch | boolean | true | Якщо true — немає обліку, поки ActivityWatch недоступний. |
devManager.team.activityWatchUrl | string | http://localhost:5600 | Базовий URL aw-server. |
Зміна цих ключів перезапускає collector без перезавантаження вікна.
Команди
| Команда | Опис |
|---|---|
| SnakeFlow: Team Tracker — Login | Вхід; може увімкнути трекінг. |
| SnakeFlow: Team Tracker — Logout | Зупинка та вихід. |
| SnakeFlow: Team Tracker — Status | Короткий статус у повідомленні. |
| SnakeFlow: Team Tracker — Show Activity Log | Output-канал з причинами кожної хвилини. |
| 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) | Синхронізація агрегованих комітів для дашбордів. |