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

Wake Lock

SnakeFlow може блокувати перехід ОС у сон (і за бажання тримати монітор увімкненим), поки ви активно працюєте в редакторі або поки працює Quality Hub. Використовуються системні API (SetThreadExecutionState у Windows, caffeinate у macOS, systemd-inhibit у Linux).

Wake Lock не пов’язаний з обліком часу в Team Tracker →: трекер має власну двофакторну логіку (ActivityWatch + простій системи + фокус IDE) і не вважає «утримується wake lock» доказом роботи людини.


Два незалежні утримувачі

УтримувачКоли працюєЯк накладається
Трекер активностіПеремикач у статус-барі ON (за замовчуванням) + devManager.wakeLock.enabledПідписується на події редактора; викликає acquire('Activity') лише поки остання активність у межах idleThresholdSeconds.
Quality HubdevManager.wakeLock.autoActivate + головний enabledОкремий acquire('Quality Hub') на час повного прогону перевірок (незалежно від перемикача трекера).

Обидва використовують один менеджер з лічильником посилань: якщо Quality Hub працює одночасно з трекером активності, refCount дорівнює 2, доки кожен шлях не відпустить лок. У підказці статус-бару показуються refCount і як довго триває поточне безперервне утримання, коли лок активний.


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

Трекер активності не тримає лок усю тривалість VS Code task чи debug-сесії. onDidStartTask / onDidEndTask і старт/завершення дебагу лише оновлюють «годинник» активності — це сигнали, а не якорі. Довгограючий dev-сервер без нових сигналів відпускає лок після idleThresholdSeconds (за замовчуванням 120 с) тиші.

Події, що оновлюють годинник (із фільтрами):

  • Правки тексту в реальних документах (onDidChangeTextDocument) — схеми output, vscode-scm, git, vscode ігноруються.
  • Збереження (onDidSaveTextDocument).
  • Виділення / курсор у редакторі (з debounce).
  • Старт / кінець task — один імпульс на подію, а не «тримаємо доки task живий».
  • Старт / завершення debug-сесії — те саме.
  • Старт / кінець виконання команди в терміналі (якщо API VS Code доступний) — реальні запуски; не відкриття/закриття терміналу, фокус, зміна розміру (ці події прибрані як шумні).

Не прив’язано до Wake Lock: фаза «думає» в AI-чаті без правок файлів, пасивні file watchers без змін у документі, просто запущений сервер без перелічених сигналів.

Якщо треба тримати ПК уві час довгих фаз чату без edits — збільшіть devManager.wakeLock.idleThresholdSeconds (наприклад 300–600): Усі параметри →.


Довгограючі задачі та сон

Раніше будь-який запущений task міг тримати лок назавжди. Це виправлено: vite / watch без onDidEndTask більше не блокує сон після порогу простою.

Нюанс: якщо watcher пише файли під звичайним file:// у workspace, ці зміни все одно рахуються як активність (як правки агента). Шумні дерева краще не тримати в тому ж корені або збільшити поріг простою.


Попередження про довге утримання

devManager.wakeLock.maxHoldHours (за замовчуванням 4, 0 = вимкнено): якщо refCount лишається більше нуля безперервно довше за вказаний час — у лог пишеться попередження, можливе повідомлення з кнопками Release now / Show log. Примусового зняття немає (валідний дуже довгий прогін Quality Hub може перевищити ліміт).

Допомагає виявити витоки (завислий helper, шлях без release).


Файл логу

devManager.wakeLock.persistLog (за замовчуванням false): за увімкнення та наявності папки workspace рядки з каналу SnakeFlow: Wake Lock дублюються у:

<workspace>/.vscode/snakeflow-wakelock.log або <workspace>/.cursor/snakeflow-wakelock.log

залежно від IDE. Файл ротується після 1 МБ (попередній вміст → snakeflow-wakelock.log.1).


Діагностика

  • Command Palette → SnakeFlow: Wake Lock — Diagnose — стан менеджера, refCount, прапор активності, підказки ОС (наприклад powercfg, де доступно). У Windows powercfg /requests часто потребує підвищених прав для повного виводу.
  • Елемент статус-бару Wake: коли лок активний (Awake), підказка показує refCount і тривалість утримання.

Швидкий довідник параметрів

Повні таблиці: Усі параметри → Wake Lock.

КлючРоль
devManager.wakeLock.enabledГоловний перемикач; якщо false — трекер активності та Quality Hub не отримують лок.
devManager.wakeLock.autoActivateУтримувати лок під час прогонів Quality Hub.
devManager.wakeLock.idleThresholdSecondsПростій редактора перед звільненням активнісного лока.
devManager.wakeLock.keepDisplayAwakeТакож тримати монітор (Windows ES_DISPLAY_REQUIRED; на частині Linux конфігурацій дисплей не блокується).
devManager.wakeLock.maxHoldHoursДовге безперервне утримання → попередження.
devManager.wakeLock.persistLogДзеркалити лог у snakeflow-wakelock.log.
devManager.wakeLock.readyTimeoutMs / startRetriesНалаштування запуску helper-процесу.

Див. також