@monotykamary/localterm-server 2.66.8 → 2.66.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-git-status.d.ts +3 -0
- package/dist/agent-git-status.d.ts.map +1 -0
- package/dist/agent-git-status.js +46 -0
- package/dist/agent-git-status.js.map +1 -0
- package/dist/agent-log-utils.d.ts +18 -0
- package/dist/agent-log-utils.d.ts.map +1 -0
- package/dist/agent-log-utils.js +123 -0
- package/dist/agent-log-utils.js.map +1 -0
- package/dist/agent-models.d.ts +4 -0
- package/dist/agent-models.d.ts.map +1 -0
- package/dist/agent-models.js +100 -0
- package/dist/agent-models.js.map +1 -0
- package/dist/agent-runner.d.ts +3 -5
- package/dist/agent-runner.d.ts.map +1 -1
- package/dist/agent-runner.js +8 -522
- package/dist/agent-runner.js.map +1 -1
- package/dist/agent-session-reader.d.ts +3 -0
- package/dist/agent-session-reader.d.ts.map +1 -0
- package/dist/agent-session-reader.js +113 -0
- package/dist/agent-session-reader.js.map +1 -0
- package/dist/build-pty-environment.d.ts +8 -0
- package/dist/build-pty-environment.d.ts.map +1 -0
- package/dist/build-pty-environment.js +44 -0
- package/dist/build-pty-environment.js.map +1 -0
- package/dist/caffeinate-automatic-detector.d.ts +57 -0
- package/dist/caffeinate-automatic-detector.d.ts.map +1 -0
- package/dist/caffeinate-automatic-detector.js +275 -0
- package/dist/caffeinate-automatic-detector.js.map +1 -0
- package/dist/caffeinate-battery-guard.d.ts +35 -0
- package/dist/caffeinate-battery-guard.d.ts.map +1 -0
- package/dist/caffeinate-battery-guard.js +190 -0
- package/dist/caffeinate-battery-guard.js.map +1 -0
- package/dist/caffeinate-manager.d.ts +5 -31
- package/dist/caffeinate-manager.d.ts.map +1 -1
- package/dist/caffeinate-manager.js +55 -400
- package/dist/caffeinate-manager.js.map +1 -1
- package/dist/cdp/cdp-client.d.ts +4 -70
- package/dist/cdp/cdp-client.d.ts.map +1 -1
- package/dist/cdp/cdp-client.js +58 -418
- package/dist/cdp/cdp-client.js.map +1 -1
- package/dist/cdp/cdp-connection.d.ts +72 -0
- package/dist/cdp/cdp-connection.d.ts.map +1 -0
- package/dist/cdp/cdp-connection.js +272 -0
- package/dist/cdp/cdp-connection.js.map +1 -0
- package/dist/cdp/constants.d.ts +6 -0
- package/dist/cdp/constants.d.ts.map +1 -0
- package/dist/cdp/constants.js +9 -0
- package/dist/cdp/constants.js.map +1 -0
- package/dist/cdp/target-registry.d.ts +41 -0
- package/dist/cdp/target-registry.d.ts.map +1 -0
- package/dist/cdp/target-registry.js +118 -0
- package/dist/cdp/target-registry.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/git-branch-metadata.d.ts +11 -0
- package/dist/git-branch-metadata.d.ts.map +1 -0
- package/dist/git-branch-metadata.js +85 -0
- package/dist/git-branch-metadata.js.map +1 -0
- package/dist/git-diff-cache.d.ts +13 -0
- package/dist/git-diff-cache.d.ts.map +1 -0
- package/dist/git-diff-cache.js +32 -0
- package/dist/git-diff-cache.js.map +1 -0
- package/dist/git-diff-parser.d.ts +15 -0
- package/dist/git-diff-parser.d.ts.map +1 -0
- package/dist/git-diff-parser.js +196 -0
- package/dist/git-diff-parser.js.map +1 -0
- package/dist/git-diff-service.d.ts +10 -0
- package/dist/git-diff-service.d.ts.map +1 -0
- package/dist/git-diff-service.js +395 -0
- package/dist/git-diff-service.js.map +1 -0
- package/dist/git-diff.d.ts +8 -41
- package/dist/git-diff.d.ts.map +1 -1
- package/dist/git-diff.js +5 -944
- package/dist/git-diff.js.map +1 -1
- package/dist/github-pr.d.ts +32 -0
- package/dist/github-pr.d.ts.map +1 -0
- package/dist/github-pr.js +266 -0
- package/dist/github-pr.js.map +1 -0
- package/dist/pi-binary-resolver.d.ts +6 -0
- package/dist/pi-binary-resolver.d.ts.map +1 -0
- package/dist/pi-binary-resolver.js +70 -0
- package/dist/pi-binary-resolver.js.map +1 -0
- package/dist/pi-rpc-client.d.ts +14 -0
- package/dist/pi-rpc-client.d.ts.map +1 -0
- package/dist/pi-rpc-client.js +87 -0
- package/dist/pi-rpc-client.js.map +1 -0
- package/dist/session-client-hub.d.ts +57 -0
- package/dist/session-client-hub.d.ts.map +1 -0
- package/dist/session-client-hub.js +435 -0
- package/dist/session-client-hub.js.map +1 -0
- package/dist/session-command-executor.d.ts +14 -0
- package/dist/session-command-executor.d.ts.map +1 -0
- package/dist/session-command-executor.js +207 -0
- package/dist/session-command-executor.js.map +1 -0
- package/dist/session-git-event-bridge.d.ts +16 -0
- package/dist/session-git-event-bridge.d.ts.map +1 -0
- package/dist/session-git-event-bridge.js +56 -0
- package/dist/session-git-event-bridge.js.map +1 -0
- package/dist/session-lifecycle-policy.d.ts +15 -0
- package/dist/session-lifecycle-policy.d.ts.map +1 -0
- package/dist/session-lifecycle-policy.js +105 -0
- package/dist/session-lifecycle-policy.js.map +1 -0
- package/dist/session-manager.d.ts +11 -42
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +72 -987
- package/dist/session-manager.js.map +1 -1
- package/dist/session-output-coordinator.d.ts +21 -0
- package/dist/session-output-coordinator.d.ts.map +1 -0
- package/dist/session-output-coordinator.js +134 -0
- package/dist/session-output-coordinator.js.map +1 -0
- package/dist/session-output-transport.d.ts +22 -0
- package/dist/session-output-transport.d.ts.map +1 -0
- package/dist/session-output-transport.js +160 -0
- package/dist/session-output-transport.js.map +1 -0
- package/dist/session.d.ts +0 -4
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +11 -258
- package/dist/session.js.map +1 -1
- package/dist/shell-hook-builder.d.ts +16 -0
- package/dist/shell-hook-builder.d.ts.map +1 -0
- package/dist/shell-hook-builder.js +230 -0
- package/dist/shell-hook-builder.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
2
|
+
import { CaffeinateAutomaticDetector } from "./caffeinate-automatic-detector.js";
|
|
3
|
+
import { defaultBatteryProbe } from "./caffeinate-battery.js";
|
|
4
|
+
import { CaffeinateBatteryGuard } from "./caffeinate-battery-guard.js";
|
|
5
|
+
import { defaultSnapshotProcesses } from "./caffeinate-process-match.js";
|
|
6
|
+
import { CAFFEINATE_AUTO_DEFAULT_COMMANDS } from "./constants.js";
|
|
6
7
|
// Decides *when* the daemon's single keep-awake process runs, on top of the
|
|
7
8
|
// dumb CaffeinateController (which only knows start/stop). In "on" it is always
|
|
8
9
|
// active, in "off" never, and in "automatic" it tracks whether any recognized
|
|
@@ -45,57 +46,38 @@ const EMPTY_FOREGROUND_NAMES = new Map();
|
|
|
45
46
|
export class CaffeinateManager extends EventEmitter {
|
|
46
47
|
controller;
|
|
47
48
|
store;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
checkRecentOutput;
|
|
51
|
-
hasPeerClient;
|
|
52
|
-
foregroundNames;
|
|
53
|
-
batteryProbe;
|
|
49
|
+
automaticDetector;
|
|
50
|
+
batteryGuard;
|
|
54
51
|
defaultCommands;
|
|
55
|
-
autoActive = false;
|
|
56
|
-
autoTrigger = null;
|
|
57
|
-
// Whether the most recent poll held caffeinate because a peer was attached
|
|
58
|
-
// (vs. a recognized program). Drives the activity-gate timer arming: a peer
|
|
59
|
-
// holds until it disconnects (an event that pokes its own re-check), so the
|
|
60
|
-
// silence-release timer must not arm while one is present.
|
|
61
|
-
autoPeerActive = false;
|
|
62
|
-
pokeTimer = null;
|
|
63
|
-
activityGateTimer = null;
|
|
64
|
-
// The cached battery-suppression flag: true means the machine is on battery
|
|
65
|
-
// power at or below the configured threshold, so `recompute` suppresses
|
|
66
|
-
// caffeinate regardless of what the mode wants.
|
|
67
|
-
batteryLow = false;
|
|
68
|
-
// The most recent battery read, used to choose the next adaptive delay. Null
|
|
69
|
-
// until the first read completes (and is reset to null after a read failure
|
|
70
|
-
// so computeBatteryDelay's null branch picks MAX — fail-open retries slowly).
|
|
71
|
-
lastBatteryStatus = null;
|
|
72
|
-
// Whether performBatteryCheck has resolved at least once. Drives
|
|
73
|
-
// `needsFirstProbe` in `recompute` independently of lastBatteryStatus: a
|
|
74
|
-
// daemon that boots with the battery already below the floor never briefly
|
|
75
|
-
// spawns the power assertion before the first read suppresses it, while a
|
|
76
|
-
// later failed read (lastBatteryStatus -> null) still fail-opens instead of
|
|
77
|
-
// re-gating caffeinate off forever.
|
|
78
|
-
hasProbedBattery = false;
|
|
79
|
-
batteryTimer = null;
|
|
80
|
-
// Coalesces concurrent battery checks: callers (the timer, setBatteryThreshold,
|
|
81
|
-
// pollBatteryNow) all funnel through runBatteryCheck, which returns the same
|
|
82
|
-
// in-flight promise so they all settle on the same result without piling up
|
|
83
|
-
// battery reads — the promise-tracking analogue of pollAuto's polling flag.
|
|
84
|
-
batteryCheckInFlight = null;
|
|
85
|
-
polling = false;
|
|
86
|
-
pollQueued = false;
|
|
87
52
|
disposed = false;
|
|
88
53
|
constructor(options) {
|
|
89
54
|
super();
|
|
90
55
|
this.controller = options.controller;
|
|
91
56
|
this.store = options.store;
|
|
92
|
-
this.listSessionPids = options.listSessionPids;
|
|
93
|
-
this.snapshotProcesses = options.snapshotProcesses ?? defaultSnapshotProcesses;
|
|
94
57
|
this.defaultCommands = options.defaultCommands ?? CAFFEINATE_AUTO_DEFAULT_COMMANDS;
|
|
95
|
-
this.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
58
|
+
this.automaticDetector = new CaffeinateAutomaticDetector({
|
|
59
|
+
listSessionPids: options.listSessionPids,
|
|
60
|
+
snapshotProcesses: options.snapshotProcesses ?? defaultSnapshotProcesses,
|
|
61
|
+
defaultCommands: this.defaultCommands,
|
|
62
|
+
getCommands: () => this.store.getCommands(),
|
|
63
|
+
getMode: () => this.mode,
|
|
64
|
+
getActivityGate: () => this.activityGate,
|
|
65
|
+
getPeerKeepAwake: () => this.peerKeepAwake,
|
|
66
|
+
isSupported: () => this.supported,
|
|
67
|
+
hasRecentOutput: options.hasRecentOutput,
|
|
68
|
+
hasPeerClient: options.hasPeerClient ?? (() => false),
|
|
69
|
+
foregroundNames: options.foregroundNames,
|
|
70
|
+
emitChange: () => this.emit("change"),
|
|
71
|
+
recompute: () => this.recompute(),
|
|
72
|
+
});
|
|
73
|
+
this.batteryGuard = new CaffeinateBatteryGuard({
|
|
74
|
+
batteryProbe: options.batteryProbe ?? defaultBatteryProbe,
|
|
75
|
+
getBatteryThreshold: () => this.batteryThreshold,
|
|
76
|
+
isSupported: () => this.supported,
|
|
77
|
+
wantsActive: () => this.modeWantsActive(),
|
|
78
|
+
emitChange: () => this.emit("change"),
|
|
79
|
+
recompute: () => this.recompute(),
|
|
80
|
+
});
|
|
99
81
|
// An unexpected death of the caffeinate process flips controller state; pass
|
|
100
82
|
// that through so every tab rebroadcasts the authoritative `active`.
|
|
101
83
|
this.controller.on("change", () => this.emit("change"));
|
|
@@ -103,7 +85,7 @@ export class CaffeinateManager extends EventEmitter {
|
|
|
103
85
|
// One snapshot at startup in case a trigger is already running before any
|
|
104
86
|
// event arrives; from here on detection is purely event-driven.
|
|
105
87
|
if (this.mode === "automatic" && this.supported)
|
|
106
|
-
void this.
|
|
88
|
+
void this.automaticDetector.poll();
|
|
107
89
|
}
|
|
108
90
|
get supported() {
|
|
109
91
|
return this.controller.supported;
|
|
@@ -127,30 +109,19 @@ export class CaffeinateManager extends EventEmitter {
|
|
|
127
109
|
return this.store.getBatteryThreshold();
|
|
128
110
|
}
|
|
129
111
|
get activeTrigger() {
|
|
130
|
-
return this.
|
|
112
|
+
return this.automaticDetector.activeTrigger;
|
|
131
113
|
}
|
|
132
|
-
// Whether automatic mode is currently holding caffeinate because a peer (a
|
|
133
|
-
// second client on a session) is attached — independent of the program
|
|
134
|
-
// trigger, so the UI can highlight the peer setting row even when a program
|
|
135
|
-
// is also active (in which case `activeTrigger` carries the program name).
|
|
136
114
|
get peerActive() {
|
|
137
|
-
return this.
|
|
115
|
+
return this.automaticDetector.peerActive;
|
|
138
116
|
}
|
|
139
117
|
setMode(mode) {
|
|
140
118
|
if (this.disposed)
|
|
141
119
|
return;
|
|
142
120
|
this.store.setMode(mode);
|
|
143
|
-
|
|
144
|
-
// automatic re-derives it from scratch rather than trusting a stale flag.
|
|
145
|
-
if (mode !== "automatic") {
|
|
146
|
-
this.autoActive = false;
|
|
147
|
-
this.autoTrigger = null;
|
|
148
|
-
this.autoPeerActive = false;
|
|
149
|
-
this.clearActivityGateTimer();
|
|
150
|
-
}
|
|
121
|
+
this.automaticDetector.modeChanged(mode);
|
|
151
122
|
this.recompute();
|
|
152
123
|
if (mode === "automatic" && this.supported)
|
|
153
|
-
void this.
|
|
124
|
+
void this.automaticDetector.poll();
|
|
154
125
|
this.emit("change");
|
|
155
126
|
}
|
|
156
127
|
setCommands(commands) {
|
|
@@ -159,25 +130,14 @@ export class CaffeinateManager extends EventEmitter {
|
|
|
159
130
|
this.store.setCommands(commands);
|
|
160
131
|
// The trigger set changed; re-derive automatic detection immediately.
|
|
161
132
|
if (this.mode === "automatic" && this.supported)
|
|
162
|
-
void this.
|
|
133
|
+
void this.automaticDetector.poll();
|
|
163
134
|
this.emit("change");
|
|
164
135
|
}
|
|
165
136
|
setActivityGate(enabled) {
|
|
166
137
|
if (this.disposed)
|
|
167
138
|
return;
|
|
168
139
|
this.store.setActivityGate(enabled);
|
|
169
|
-
|
|
170
|
-
// Gate just turned on — re-check whether caffeinate should still be
|
|
171
|
-
// active given current output activity.
|
|
172
|
-
if (this.mode === "automatic" && this.supported)
|
|
173
|
-
void this.pollAuto();
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
// Gate turned off — no need to re-snapshot; just recompute (which will
|
|
177
|
-
// drop the output check from the condition).
|
|
178
|
-
this.clearActivityGateTimer();
|
|
179
|
-
this.recompute();
|
|
180
|
-
}
|
|
140
|
+
this.automaticDetector.activityGateChanged(enabled);
|
|
181
141
|
this.emit("change");
|
|
182
142
|
}
|
|
183
143
|
setPeerKeepAwake(enabled) {
|
|
@@ -187,131 +147,24 @@ export class CaffeinateManager extends EventEmitter {
|
|
|
187
147
|
// The trigger set changed; re-derive automatic detection immediately so a
|
|
188
148
|
// peer that was already attached engages (or releases) at once.
|
|
189
149
|
if (this.mode === "automatic" && this.supported)
|
|
190
|
-
void this.
|
|
150
|
+
void this.automaticDetector.poll();
|
|
191
151
|
this.emit("change");
|
|
192
152
|
}
|
|
193
|
-
// Cheap, debounced nudge to re-check automatic detection in response to an
|
|
194
|
-
// event (a session's foreground process changing, or a session
|
|
195
|
-
// connecting/disconnecting). The debounce coalesces a burst of simultaneous
|
|
196
|
-
// events into a single `ps` snapshot — it fires once and does not repeat.
|
|
197
153
|
pokeAuto() {
|
|
198
|
-
|
|
199
|
-
return;
|
|
200
|
-
if (this.pokeTimer !== null)
|
|
201
|
-
return;
|
|
202
|
-
this.pokeTimer = setTimeout(() => {
|
|
203
|
-
this.pokeTimer = null;
|
|
204
|
-
void this.pollAuto();
|
|
205
|
-
}, CAFFEINATE_AUTO_POKE_DEBOUNCE_MS);
|
|
206
|
-
this.pokeTimer.unref?.();
|
|
154
|
+
this.automaticDetector.poke();
|
|
207
155
|
}
|
|
208
|
-
// Record that output just arrived from a session. When the activity gate is
|
|
209
|
-
// on, this resets the trailing-edge timer that checks whether caffeinate
|
|
210
|
-
// should stay active. Output arriving while caffeinate is inactive is a
|
|
211
|
-
// no-op (the foreground-change poke already handles the transition).
|
|
212
156
|
noteOutputActivity() {
|
|
213
|
-
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
if (!this.autoActive) {
|
|
217
|
-
// Caffeinate is off but output just arrived — nudge a re-check
|
|
218
|
-
// (the registry already recorded the fresh output timestamp).
|
|
219
|
-
this.pokeAuto();
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
// A peer is holding caffeinate; output is irrelevant to it. The peer
|
|
223
|
-
// releases on disconnect (an event that pokes its own re-check), so the
|
|
224
|
-
// silence timer must not arm while one is present — otherwise the trailing
|
|
225
|
-
// edge would poll on a timer and defeat the event-driven design.
|
|
226
|
-
if (this.autoPeerActive)
|
|
227
|
-
return;
|
|
228
|
-
this.clearActivityGateTimer();
|
|
229
|
-
// Schedule a re-check after the debounce window. If more output arrives
|
|
230
|
-
// before this fires, the timer resets (trailing-edge).
|
|
231
|
-
this.activityGateTimer = setTimeout(() => {
|
|
232
|
-
this.activityGateTimer = null;
|
|
233
|
-
void this.pollAuto();
|
|
234
|
-
}, CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS);
|
|
235
|
-
this.activityGateTimer.unref?.();
|
|
157
|
+
this.automaticDetector.noteOutputActivity();
|
|
236
158
|
}
|
|
237
|
-
// Force an immediate automatic re-check and resolve when it settles. Used by
|
|
238
|
-
// tests; production code re-checks via the event-driven debounced pokeAuto.
|
|
239
159
|
pollNow() {
|
|
240
|
-
return this.
|
|
241
|
-
}
|
|
242
|
-
dispose() {
|
|
243
|
-
this.disposed = true;
|
|
244
|
-
if (this.pokeTimer !== null) {
|
|
245
|
-
clearTimeout(this.pokeTimer);
|
|
246
|
-
this.pokeTimer = null;
|
|
247
|
-
}
|
|
248
|
-
this.clearActivityGateTimer();
|
|
249
|
-
this.clearBatteryTimer();
|
|
250
|
-
this.controller.dispose();
|
|
251
|
-
this.removeAllListeners();
|
|
252
|
-
}
|
|
253
|
-
// The effective keep-awake triggers: fixed defaults plus the user's customs,
|
|
254
|
-
// lowercased for case-insensitive matching.
|
|
255
|
-
triggerSet() {
|
|
256
|
-
const triggers = new Set();
|
|
257
|
-
for (const command of this.defaultCommands)
|
|
258
|
-
triggers.add(command.toLowerCase());
|
|
259
|
-
for (const command of this.store.getCommands())
|
|
260
|
-
triggers.add(command.toLowerCase());
|
|
261
|
-
return triggers;
|
|
262
|
-
}
|
|
263
|
-
// Whether any live session's shell-hook foreground name (OSC 7777 fg;<token>)
|
|
264
|
-
// is itself a keep-awake trigger — the cheap, walk-free path used before
|
|
265
|
-
// falling back to the `ps` process-tree snapshot. Returns the matching
|
|
266
|
-
// trigger (lowercased) or null when no session's name matches.
|
|
267
|
-
hookTriggerFor(pids, triggers) {
|
|
268
|
-
const names = this.foregroundNames?.() ?? EMPTY_FOREGROUND_NAMES;
|
|
269
|
-
for (const pid of pids) {
|
|
270
|
-
const name = names.get(pid);
|
|
271
|
-
if (name) {
|
|
272
|
-
const match = commandMatchesTriggers(name, triggers);
|
|
273
|
-
if (match)
|
|
274
|
-
return match;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
recompute() {
|
|
280
|
-
const wantActive = this.modeWantsActive();
|
|
281
|
-
const guardApplies = this.supported && this.batteryThreshold !== null;
|
|
282
|
-
// While the guard is on but we've never read the battery, hold off engaging
|
|
283
|
-
// until that first read resolves — otherwise a daemon that boots with the
|
|
284
|
-
// battery already below the floor briefly spawns the power assertion before
|
|
285
|
-
// the probe suppresses it. Subsequent arms use the cached flag instead.
|
|
286
|
-
const needsFirstProbe = guardApplies && !this.hasProbedBattery;
|
|
287
|
-
const desired = wantActive && !(guardApplies && (this.batteryLow || needsFirstProbe));
|
|
288
|
-
this.controller.setActive(desired);
|
|
289
|
-
if (wantActive && guardApplies) {
|
|
290
|
-
// Start (or keep) the adaptive battery check armed. The next delay is
|
|
291
|
-
// derived from the last status, or an immediate probe when there's no
|
|
292
|
-
// cached reading yet.
|
|
293
|
-
this.scheduleBatteryCheck(this.lastBatteryStatus);
|
|
294
|
-
}
|
|
295
|
-
else {
|
|
296
|
-
this.clearBatteryTimer();
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
modeWantsActive() {
|
|
300
|
-
const mode = this.mode;
|
|
301
|
-
return mode === "on" || (mode === "automatic" && this.autoActive);
|
|
302
|
-
}
|
|
303
|
-
clearActivityGateTimer() {
|
|
304
|
-
if (this.activityGateTimer !== null) {
|
|
305
|
-
clearTimeout(this.activityGateTimer);
|
|
306
|
-
this.activityGateTimer = null;
|
|
307
|
-
}
|
|
160
|
+
return this.automaticDetector.poll();
|
|
308
161
|
}
|
|
309
162
|
// Force an immediate battery re-check and resolve when it settles. Used by
|
|
310
163
|
// tests; production code re-checks via the adaptive timer. Awaits an already
|
|
311
164
|
// in-flight check (so concurrent test calls see the same resolved state)
|
|
312
165
|
// rather than queueing a second probe.
|
|
313
166
|
pollBatteryNow() {
|
|
314
|
-
return this.
|
|
167
|
+
return this.batteryGuard.pollNow();
|
|
315
168
|
}
|
|
316
169
|
// Set the persisted battery floor. `null` disables the guard. Persists
|
|
317
170
|
// immediately (so every tab stays in lockstep via the broadcast) and re-derives
|
|
@@ -322,220 +175,22 @@ export class CaffeinateManager extends EventEmitter {
|
|
|
322
175
|
return;
|
|
323
176
|
this.store.setBatteryThreshold(percent);
|
|
324
177
|
this.emit("change");
|
|
325
|
-
|
|
326
|
-
// derived from the new threshold (and a fresh status), not the old one.
|
|
327
|
-
this.clearBatteryTimer();
|
|
328
|
-
if (!this.supported || percent === null) {
|
|
329
|
-
// Guard disabled: clear any stale suppression so it can't keep
|
|
330
|
-
// caffeinate off after the user turned the floor off.
|
|
331
|
-
this.batteryLow = false;
|
|
332
|
-
this.recompute();
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
if (this.modeWantsActive()) {
|
|
336
|
-
// Probe immediately so an already-low battery stops caffeinate at once
|
|
337
|
-
// (the adaptive arming would otherwise wait up to MAX_INTERVAL for the
|
|
338
|
-
// first read, since lastBatteryStatus is stale/null until this resolves).
|
|
339
|
-
void this.runBatteryCheck();
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
// Single entry point for every battery probe. Coalesces concurrent callers
|
|
343
|
-
// onto one in-flight promise so the `pmset` call fires at most once per tick
|
|
344
|
-
// even if the timer, setBatteryThreshold, and a manual pollBatteryNow all race.
|
|
345
|
-
runBatteryCheck() {
|
|
346
|
-
if (this.batteryCheckInFlight !== null)
|
|
347
|
-
return this.batteryCheckInFlight;
|
|
348
|
-
const promise = this.performBatteryCheck().finally(() => {
|
|
349
|
-
if (this.batteryCheckInFlight === promise)
|
|
350
|
-
this.batteryCheckInFlight = null;
|
|
351
|
-
});
|
|
352
|
-
this.batteryCheckInFlight = promise;
|
|
353
|
-
return promise;
|
|
178
|
+
this.batteryGuard.thresholdChanged(percent);
|
|
354
179
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
// a mode wants caffeinate active (a probe here would be wasted work and
|
|
362
|
-
// couldn't change `desired`, since `wantActive` already forces it false).
|
|
363
|
-
if (!this.supported || threshold === null || !this.modeWantsActive()) {
|
|
364
|
-
this.clearBatteryTimer();
|
|
365
|
-
return;
|
|
366
|
-
}
|
|
367
|
-
const status = await this.batteryProbe();
|
|
368
|
-
if (this.disposed)
|
|
369
|
-
return;
|
|
370
|
-
this.lastBatteryStatus = status;
|
|
371
|
-
this.hasProbedBattery = true;
|
|
372
|
-
// Fail-open on read failure (null): a missing battery or a transient pmset
|
|
373
|
-
// error cannot take keep-awake away from the user. The scheduler stays
|
|
374
|
-
// armed via the recompute below so a later successful read can re-impose
|
|
375
|
-
// the floor.
|
|
376
|
-
const nextLow = status !== null && status.isOnBattery && status.percent <= threshold;
|
|
377
|
-
if (nextLow !== this.batteryLow) {
|
|
378
|
-
this.batteryLow = nextLow;
|
|
379
|
-
this.emit("change");
|
|
380
|
-
}
|
|
381
|
-
this.recompute();
|
|
382
|
-
}
|
|
383
|
-
scheduleBatteryCheck(status) {
|
|
384
|
-
if (this.disposed)
|
|
385
|
-
return;
|
|
386
|
-
// Coalesce: if a check is already armed, let it run — it reschedules
|
|
387
|
-
// adaptively from a fresh read when it completes, so re-entry here is a no-op.
|
|
388
|
-
if (this.batteryTimer !== null)
|
|
389
|
-
return;
|
|
390
|
-
if (!this.hasProbedBattery) {
|
|
391
|
-
// Never probed: fire immediately (coalesced by runBatteryCheck) so the
|
|
392
|
-
// first arm doesn't wait MAX before applying the floor — a daemon that
|
|
393
|
-
// boots with the battery already below the threshold suppresses at once.
|
|
394
|
-
void this.runBatteryCheck();
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
// A null status here means a prior probe failed or found no battery:
|
|
398
|
-
// computeBatteryDelay maps that to MAX so we retry slowly instead of
|
|
399
|
-
// re-firing immediately and busy-looping on a persistently-failing read.
|
|
400
|
-
const delay = this.computeBatteryDelay(status);
|
|
401
|
-
this.batteryTimer = setTimeout(() => {
|
|
402
|
-
this.batteryTimer = null;
|
|
403
|
-
void this.runBatteryCheck();
|
|
404
|
-
}, delay);
|
|
405
|
-
this.batteryTimer.unref?.();
|
|
406
|
-
}
|
|
407
|
-
computeBatteryDelay(status) {
|
|
408
|
-
const threshold = this.batteryThreshold;
|
|
409
|
-
if (threshold === null)
|
|
410
|
-
return CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS;
|
|
411
|
-
// Already suppressed: poll fast so charging back above the threshold or
|
|
412
|
-
// plugging in resumes promptly. Bounded by how long the machine stays
|
|
413
|
-
// below the floor — which should be short (it's about to lose power).
|
|
414
|
-
if (this.batteryLow)
|
|
415
|
-
return CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS;
|
|
416
|
-
if (status === null || !status.isOnBattery)
|
|
417
|
-
return CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS;
|
|
418
|
-
if (status.minutesToEmpty === null)
|
|
419
|
-
return CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS;
|
|
420
|
-
// Half of the interpolated time-to-threshold: the OS estimate (minutes to
|
|
421
|
-
// 0%) scaled by the charge fraction still above the floor. Halving gives a
|
|
422
|
-
// 2× buffer against the EWMA lagging real discharge (and the active program
|
|
423
|
-
// draining faster than the idle minutes the average was computed over), so
|
|
424
|
-
// a stale-high estimate still catches the crossing in time rather than
|
|
425
|
-
// sleeping past it. Clamped to [MIN, MAX] below.
|
|
426
|
-
const remaining = status.percent - threshold;
|
|
427
|
-
if (remaining <= 0)
|
|
428
|
-
return CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS;
|
|
429
|
-
const fractionAbove = remaining / status.percent;
|
|
430
|
-
const interpolatedMs = status.minutesToEmpty * MS_PER_MINUTE * fractionAbove;
|
|
431
|
-
const scheduledMs = interpolatedMs / CAFFEINATE_BATTERY_POLL_TIME_FRACTION;
|
|
432
|
-
return Math.max(CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS, Math.min(scheduledMs, CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS));
|
|
433
|
-
}
|
|
434
|
-
clearBatteryTimer() {
|
|
435
|
-
if (this.batteryTimer !== null) {
|
|
436
|
-
clearTimeout(this.batteryTimer);
|
|
437
|
-
this.batteryTimer = null;
|
|
438
|
-
}
|
|
180
|
+
dispose() {
|
|
181
|
+
this.disposed = true;
|
|
182
|
+
this.automaticDetector.dispose();
|
|
183
|
+
this.batteryGuard.dispose();
|
|
184
|
+
this.controller.dispose();
|
|
185
|
+
this.removeAllListeners();
|
|
439
186
|
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
// Serialize: if a snapshot is already running, run exactly one more after it
|
|
444
|
-
// so the latest state always wins without piling up `ps` calls.
|
|
445
|
-
if (this.polling) {
|
|
446
|
-
this.pollQueued = true;
|
|
447
|
-
return;
|
|
448
|
-
}
|
|
449
|
-
this.polling = true;
|
|
450
|
-
try {
|
|
451
|
-
const pids = this.listSessionPids();
|
|
452
|
-
let programActive = false;
|
|
453
|
-
let programTrigger = null;
|
|
454
|
-
if (pids.length > 0) {
|
|
455
|
-
const triggers = this.triggerSet();
|
|
456
|
-
// Short-circuit: if any live session's hook-reported foreground name is
|
|
457
|
-
// itself a trigger, engage without a `ps` snapshot (the common case —
|
|
458
|
-
// the user runs vim/ffmpeg/etc. directly). Only fall back to the
|
|
459
|
-
// process-tree walk when no hook name matches, which still catches
|
|
460
|
-
// triggers that are children of the foreground command (make -> ffmpeg)
|
|
461
|
-
// or running in an unhooked shell (sh/dash).
|
|
462
|
-
programTrigger = this.hookTriggerFor(pids, triggers);
|
|
463
|
-
if (programTrigger === null) {
|
|
464
|
-
const snapshot = await this.snapshotProcesses();
|
|
465
|
-
programTrigger = anySessionRunsTrigger(pids, snapshot, triggers);
|
|
466
|
-
}
|
|
467
|
-
if (programTrigger) {
|
|
468
|
-
if (!this.activityGate) {
|
|
469
|
-
programActive = true;
|
|
470
|
-
}
|
|
471
|
-
else if (this.checkRecentOutput) {
|
|
472
|
-
programActive = this.checkRecentOutput(pids, CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
if (this.disposed || this.mode !== "automatic")
|
|
477
|
-
return;
|
|
478
|
-
// A peer (a second client on a session) holds caffeinate independently of
|
|
479
|
-
// the program detection and bypasses the activity gate: an idle-but-
|
|
480
|
-
// attached phone must not release the machine to sleep. The peer's hold is
|
|
481
|
-
// surfaced via `peerActive` (independent of `activeTrigger`, which carries
|
|
482
|
-
// the program name) so the UI can highlight each setting row on its own
|
|
483
|
-
// when both are active.
|
|
484
|
-
const peerActive = this.peerKeepAwake && this.hasPeerClient();
|
|
485
|
-
const next = programActive || peerActive;
|
|
486
|
-
const prevAutoActive = this.autoActive;
|
|
487
|
-
const prevAutoTrigger = this.autoTrigger;
|
|
488
|
-
const prevAutoPeerActive = this.autoPeerActive;
|
|
489
|
-
this.autoActive = next;
|
|
490
|
-
// `autoTrigger` carries only the program trigger (a command name or null);
|
|
491
|
-
// the peer trigger is surfaced separately via `peerActive` so the UI can
|
|
492
|
-
// highlight each setting row independently when both are active.
|
|
493
|
-
this.autoTrigger = next ? programTrigger : null;
|
|
494
|
-
this.autoPeerActive = peerActive;
|
|
495
|
-
// Broadcast on any change to the broadcastable derived state, not just
|
|
496
|
-
// when caffeinate turns on/off: the trigger identity (which program, or
|
|
497
|
-
// whether a peer is holding) can flip while caffeinate stays continuously
|
|
498
|
-
// active (a program starting while a peer is attached, a peer leaving
|
|
499
|
-
// while a program runs). Without these the UI keeps a stale `activeTrigger`
|
|
500
|
-
// / `peerActive` and the wrong row (or none) highlights.
|
|
501
|
-
if (next !== prevAutoActive ||
|
|
502
|
-
this.autoTrigger !== prevAutoTrigger ||
|
|
503
|
-
this.autoPeerActive !== prevAutoPeerActive) {
|
|
504
|
-
this.emit("change");
|
|
505
|
-
}
|
|
506
|
-
this.recompute();
|
|
507
|
-
if (peerActive) {
|
|
508
|
-
// A peer now holds caffeinate; any program-silence timer armed before
|
|
509
|
-
// the peer joined is obsolete (the peer releases on disconnect, not
|
|
510
|
-
// on silence). Clear it so a stale trailing edge can't fire a spurious
|
|
511
|
-
// poll and re-arm into a timer-driven loop.
|
|
512
|
-
this.clearActivityGateTimer();
|
|
513
|
-
}
|
|
514
|
-
// Arm the silence-release timer only when a gated program is the SOLE
|
|
515
|
-
// reason caffeinate is active. A peer holds until it disconnects (which
|
|
516
|
-
// pokes its own re-check via onSessionActivity), so silence must not
|
|
517
|
-
// release while one is present — and a program active alongside a peer is
|
|
518
|
-
// also covered by the peer's hold.
|
|
519
|
-
if (this.activityGate && programActive && !peerActive) {
|
|
520
|
-
this.armActivityGateTimerIfNeeded();
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
finally {
|
|
524
|
-
this.polling = false;
|
|
525
|
-
if (this.pollQueued && !this.disposed) {
|
|
526
|
-
this.pollQueued = false;
|
|
527
|
-
void this.pollAuto();
|
|
528
|
-
}
|
|
529
|
-
}
|
|
187
|
+
recompute() {
|
|
188
|
+
const wantActive = this.modeWantsActive();
|
|
189
|
+
this.controller.setActive(this.batteryGuard.shouldActivate(wantActive));
|
|
530
190
|
}
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
this.activityGateTimer = setTimeout(() => {
|
|
535
|
-
this.activityGateTimer = null;
|
|
536
|
-
void this.pollAuto();
|
|
537
|
-
}, CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS);
|
|
538
|
-
this.activityGateTimer.unref?.();
|
|
191
|
+
modeWantsActive() {
|
|
192
|
+
const mode = this.mode;
|
|
193
|
+
return mode === "on" || (mode === "automatic" && this.automaticDetector.active);
|
|
539
194
|
}
|
|
540
195
|
}
|
|
541
196
|
//# sourceMappingURL=caffeinate-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caffeinate-manager.js","sourceRoot":"","sources":["../src/caffeinate-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"caffeinate-manager.js","sourceRoot":"","sources":["../src/caffeinate-manager.ts"],"names":[],"mappings":"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"}
|