@monotykamary/localterm-server 2.2.3 → 2.4.0

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.
Files changed (39) hide show
  1. package/dist/caffeinate-battery.d.ts +10 -0
  2. package/dist/caffeinate-battery.d.ts.map +1 -0
  3. package/dist/caffeinate-battery.js +47 -0
  4. package/dist/caffeinate-battery.js.map +1 -0
  5. package/dist/caffeinate-manager.d.ts +17 -0
  6. package/dist/caffeinate-manager.d.ts.map +1 -1
  7. package/dist/caffeinate-manager.js +194 -4
  8. package/dist/caffeinate-manager.js.map +1 -1
  9. package/dist/caffeinate-preferences-store.d.ts +2 -0
  10. package/dist/caffeinate-preferences-store.d.ts.map +1 -1
  11. package/dist/caffeinate-preferences-store.js +31 -2
  12. package/dist/caffeinate-preferences-store.js.map +1 -1
  13. package/dist/constants.d.ts +8 -1
  14. package/dist/constants.d.ts.map +1 -1
  15. package/dist/constants.js +29 -1
  16. package/dist/constants.js.map +1 -1
  17. package/dist/git-worktrees.d.ts +9 -2
  18. package/dist/git-worktrees.d.ts.map +1 -1
  19. package/dist/git-worktrees.js +288 -53
  20. package/dist/git-worktrees.js.map +1 -1
  21. package/dist/index.d.ts +7 -0
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +61 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/protocol.d.ts +3 -3
  26. package/dist/protocol.d.ts.map +1 -1
  27. package/dist/protocol.js +2 -2
  28. package/dist/protocol.js.map +1 -1
  29. package/dist/schemas.d.ts +34 -1
  30. package/dist/schemas.d.ts.map +1 -1
  31. package/dist/schemas.js +77 -3
  32. package/dist/schemas.js.map +1 -1
  33. package/dist/types.d.ts +4 -1
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/utils/worktree-names.d.ts +2 -0
  36. package/dist/utils/worktree-names.d.ts.map +1 -0
  37. package/dist/utils/worktree-names.js +155 -0
  38. package/dist/utils/worktree-names.js.map +1 -0
  39. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ export interface BatteryStatus {
2
+ percent: number;
3
+ isOnBattery: boolean;
4
+ minutesToEmpty: number | null;
5
+ }
6
+ export type BatteryProbe = () => Promise<BatteryStatus | null>;
7
+ export declare const parsePmsetBatt: (stdout: string) => BatteryStatus | null;
8
+ export declare const clampBatteryPercent: (percent: number) => number;
9
+ export declare const defaultBatteryProbe: BatteryProbe;
10
+ //# sourceMappingURL=caffeinate-battery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caffeinate-battery.d.ts","sourceRoot":"","sources":["../src/caffeinate-battery.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAE5B,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,EAAE,OAAO,CAAC;IAIrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAMD,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;AAM/D,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,aAAa,GAAG,IAwB/D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,MASrD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,YAc9B,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { execFile } from "node:child_process";
2
+ import { CAFFEINATE_BATTERY_LOW_WATER_MAX_PERCENT, CAFFEINATE_BATTERY_LOW_WATER_MIN_PERCENT, CAFFEINATE_BATTERY_READ_TIMEOUT_MS, } from "./constants.js";
3
+ const PERCENT_RE = /(\d+)%/;
4
+ const TIME_RE = /(\d+):(\d+)\s+remaining/;
5
+ const PRESENT_RE = /present:\s*(true|false)/;
6
+ export const parsePmsetBatt = (stdout) => {
7
+ // `present: false` (e.g. "No Batteries Available" line on a desktop) means
8
+ // there is nothing to gate on. Some desktops print no battery line at all,
9
+ // which also fails the percent match below and resolves to null.
10
+ const presentMatch = PRESENT_RE.exec(stdout);
11
+ if (presentMatch && presentMatch[1] === "false")
12
+ return null;
13
+ const percentMatch = PERCENT_RE.exec(stdout);
14
+ if (!percentMatch)
15
+ return null;
16
+ const percent = Number(percentMatch[1]);
17
+ // "Now drawing from 'Battery Power'" is the only line that means discharging.
18
+ // "AC Power" covers both charging and charged-but-plugged-in; in either case
19
+ // the floor does not apply.
20
+ const isOnBattery = /Battery Power/.test(stdout);
21
+ let minutesToEmpty = null;
22
+ if (isOnBattery) {
23
+ // Only trust the time estimate on battery: the AC "remaining" is time to
24
+ // full charge, not to empty, and would blow up the adaptive scheduler.
25
+ const timeMatch = TIME_RE.exec(stdout);
26
+ if (timeMatch)
27
+ minutesToEmpty = Number(timeMatch[1]) * 60 + Number(timeMatch[2]);
28
+ }
29
+ return { percent, isOnBattery, minutesToEmpty };
30
+ };
31
+ export const clampBatteryPercent = (percent) => {
32
+ if (!Number.isFinite(percent)) {
33
+ return CAFFEINATE_BATTERY_LOW_WATER_MIN_PERCENT;
34
+ }
35
+ const floored = Math.floor(percent);
36
+ return Math.min(CAFFEINATE_BATTERY_LOW_WATER_MAX_PERCENT, Math.max(CAFFEINATE_BATTERY_LOW_WATER_MIN_PERCENT, floored));
37
+ };
38
+ export const defaultBatteryProbe = () => new Promise((resolve) => {
39
+ execFile("pmset", ["-g", "batt"], { timeout: CAFFEINATE_BATTERY_READ_TIMEOUT_MS }, (error, stdout) => {
40
+ if (error) {
41
+ resolve(null);
42
+ return;
43
+ }
44
+ resolve(parsePmsetBatt(stdout));
45
+ });
46
+ });
47
+ //# sourceMappingURL=caffeinate-battery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caffeinate-battery.js","sourceRoot":"","sources":["../src/caffeinate-battery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,wCAAwC,EACxC,wCAAwC,EACxC,kCAAkC,GACnC,MAAM,gBAAgB,CAAC;AAoBxB,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B,MAAM,OAAO,GAAG,yBAAyB,CAAC;AAC1C,MAAM,UAAU,GAAG,yBAAyB,CAAC;AAE7C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAc,EAAwB,EAAE;IACrE,2EAA2E;IAC3E,2EAA2E;IAC3E,iEAAiE;IACjE,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,YAAY,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAE7D,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,8EAA8E;IAC9E,6EAA6E;IAC7E,4BAA4B;IAC5B,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,WAAW,EAAE,CAAC;QAChB,yEAAyE;QACzE,uEAAuE;QACvE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,SAAS;YAAE,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAU,EAAE;IAC7D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,wCAAwC,CAAC;IAClD,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,CACb,wCAAwC,EACxC,IAAI,CAAC,GAAG,CAAC,wCAAwC,EAAE,OAAO,CAAC,CAC5D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAiB,GAAG,EAAE,CACpD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IACtB,QAAQ,CACN,OAAO,EACP,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,EAAE,OAAO,EAAE,kCAAkC,EAAE,EAC/C,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAChB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QACD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from "node:events";
2
2
  import type { CaffeinateController } from "./caffeinate-controller.js";
3
3
  import type { CaffeinatePreferencesStore } from "./caffeinate-preferences-store.js";
4
+ import { type BatteryProbe } from "./caffeinate-battery.js";
4
5
  import { type SnapshotProcesses } from "./caffeinate-process-match.js";
5
6
  import type { CaffeinateMode } from "./types.js";
6
7
  export interface CaffeinateManagerOptions {
@@ -10,6 +11,7 @@ export interface CaffeinateManagerOptions {
10
11
  snapshotProcesses?: SnapshotProcesses;
11
12
  defaultCommands?: readonly string[];
12
13
  hasRecentOutput?: (pids: readonly number[], withinMs: number) => boolean;
14
+ batteryProbe?: BatteryProbe;
13
15
  }
14
16
  interface CaffeinateManagerEvents {
15
17
  change: [];
@@ -20,11 +22,17 @@ export declare class CaffeinateManager extends EventEmitter<CaffeinateManagerEve
20
22
  private readonly listSessionPids;
21
23
  private readonly snapshotProcesses;
22
24
  private readonly checkRecentOutput?;
25
+ private readonly batteryProbe;
23
26
  readonly defaultCommands: readonly string[];
24
27
  private autoActive;
25
28
  private autoTrigger;
26
29
  private pokeTimer;
27
30
  private activityGateTimer;
31
+ private batteryLow;
32
+ private lastBatteryStatus;
33
+ private hasProbedBattery;
34
+ private batteryTimer;
35
+ private batteryCheckInFlight;
28
36
  private polling;
29
37
  private pollQueued;
30
38
  private disposed;
@@ -34,6 +42,7 @@ export declare class CaffeinateManager extends EventEmitter<CaffeinateManagerEve
34
42
  get mode(): CaffeinateMode;
35
43
  get commands(): string[];
36
44
  get activityGate(): boolean;
45
+ get batteryThreshold(): number | null;
37
46
  get activeTrigger(): string | null;
38
47
  setMode(mode: CaffeinateMode): void;
39
48
  setCommands(commands: readonly string[]): void;
@@ -44,7 +53,15 @@ export declare class CaffeinateManager extends EventEmitter<CaffeinateManagerEve
44
53
  dispose(): void;
45
54
  private triggerSet;
46
55
  private recompute;
56
+ private modeWantsActive;
47
57
  private clearActivityGateTimer;
58
+ pollBatteryNow(): Promise<void>;
59
+ setBatteryThreshold(percent: number | null): void;
60
+ private runBatteryCheck;
61
+ private performBatteryCheck;
62
+ private scheduleBatteryCheck;
63
+ private computeBatteryDelay;
64
+ private clearBatteryTimer;
48
65
  private pollAuto;
49
66
  private armActivityGateTimerIfNeeded;
50
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"caffeinate-manager.d.ts","sourceRoot":"","sources":["../src/caffeinate-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,oBAAoB,CAAC;IACjC,KAAK,EAAE,0BAA0B,CAAC;IAGlC,eAAe,EAAE,MAAM,MAAM,EAAE,CAAC;IAEhC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAEtC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAIpC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1E;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,EAAE,CAAC;CACZ;AAqBD,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,uBAAuB,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAyD;IAC5F,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAE5C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,wBAAwB;IAmB7C,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,IAAI,IAAI,IAAI,cAAc,CAEzB;IAED,IAAI,QAAQ,IAAI,MAAM,EAAE,CAEvB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IAED,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAenC,WAAW,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAQ9C,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAoBvC,QAAQ,IAAI,IAAI;IAchB,kBAAkB,IAAI,IAAI;IAsB1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,OAAO,IAAI,IAAI;IAaf,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,sBAAsB;YAOhB,QAAQ;IA+CtB,OAAO,CAAC,4BAA4B;CAQrC"}
1
+ {"version":3,"file":"caffeinate-manager.d.ts","sourceRoot":"","sources":["../src/caffeinate-manager.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { EventEmitter } from "node:events";
2
+ import { defaultBatteryProbe, } from "./caffeinate-battery.js";
2
3
  import { anySessionRunsTrigger, defaultSnapshotProcesses, } from "./caffeinate-process-match.js";
3
- import { CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS, CAFFEINATE_AUTO_DEFAULT_COMMANDS, CAFFEINATE_AUTO_POKE_DEBOUNCE_MS, } from "./constants.js";
4
+ import { CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS, CAFFEINATE_AUTO_DEFAULT_COMMANDS, CAFFEINATE_AUTO_POKE_DEBOUNCE_MS, CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS, CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS, CAFFEINATE_BATTERY_POLL_TIME_FRACTION, MS_PER_MINUTE, } from "./constants.js";
4
5
  // Decides *when* the daemon's single keep-awake process runs, on top of the
5
6
  // dumb CaffeinateController (which only knows start/stop). In "on" it is always
6
7
  // active, in "off" never, and in "automatic" it tracks whether any recognized
@@ -9,7 +10,7 @@ import { CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS, CAFFEINATE_AUTO_DEFAULT_COMMANDS,
9
10
  // (the default), caffeinate further requires that a recognized program is
10
11
  // producing output; after CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS of silence,
11
12
  // caffeinate releases. Emits `change` whenever any broadcastable field
12
- // (mode/active/commands) moves.
13
+ // (mode/active/commands/batteryThreshold) moves.
13
14
  //
14
15
  // Automatic detection is event-driven: it never polls on a timer. A `ps`
15
16
  // snapshot is taken only in response to an event — a session's foreground
@@ -20,17 +21,51 @@ import { CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS, CAFFEINATE_AUTO_DEFAULT_COMMANDS,
20
21
  // The activity gate is driven by a trailing-edge timer: output resets it, and
21
22
  // when it finally fires (no output for the debounce window), it pokes a
22
23
  // re-check.
24
+ //
25
+ // The battery floor is the one piece of polling in this module, and it is
26
+ // adaptive rather than a fixed heartbeat: a `pmset -g batt` read happens only
27
+ // while a mode wants caffeinate active (off/idle `automatic` never reads it),
28
+ // and the delay until the next read is 1/TIME_FRACTION of the interpolated
29
+ // time-to-threshold, so polling tightens as the floor approaches and stays lax
30
+ // far from it (capped at MAX, floored at MIN). macOS pushes no notification at
31
+ // an arbitrary percent, so a bounded polling timer is unavoidable here; the
32
+ // adaptive schedule keeps it as cheap as it can be. While below the floor on
33
+ // battery, the daemon refuses to hold the power assertion (it stops caffeinate
34
+ // without changing the selected mode); plugging in or charging back above the
35
+ // floor resumes normally.
23
36
  export class CaffeinateManager extends EventEmitter {
24
37
  controller;
25
38
  store;
26
39
  listSessionPids;
27
40
  snapshotProcesses;
28
41
  checkRecentOutput;
42
+ batteryProbe;
29
43
  defaultCommands;
30
44
  autoActive = false;
31
45
  autoTrigger = null;
32
46
  pokeTimer = null;
33
47
  activityGateTimer = null;
48
+ // The cached battery-suppression flag: true means the machine is on battery
49
+ // power at or below the configured threshold, so `recompute` suppresses
50
+ // caffeinate regardless of what the mode wants.
51
+ batteryLow = false;
52
+ // The most recent battery read, used to choose the next adaptive delay. Null
53
+ // until the first read completes (and is reset to null after a read failure
54
+ // so computeBatteryDelay's null branch picks MAX — fail-open retries slowly).
55
+ lastBatteryStatus = null;
56
+ // Whether performBatteryCheck has resolved at least once. Drives
57
+ // `needsFirstProbe` in `recompute` independently of lastBatteryStatus: a
58
+ // daemon that boots with the battery already below the floor never briefly
59
+ // spawns the power assertion before the first read suppresses it, while a
60
+ // later failed read (lastBatteryStatus -> null) still fail-opens instead of
61
+ // re-gating caffeinate off forever.
62
+ hasProbedBattery = false;
63
+ batteryTimer = null;
64
+ // Coalesces concurrent battery checks: callers (the timer, setBatteryThreshold,
65
+ // pollBatteryNow) all funnel through runBatteryCheck, which returns the same
66
+ // in-flight promise so they all settle on the same result without piling up
67
+ // `pmset` calls — the promise-tracking analogue of pollAuto's polling flag.
68
+ batteryCheckInFlight = null;
34
69
  polling = false;
35
70
  pollQueued = false;
36
71
  disposed = false;
@@ -42,6 +77,7 @@ export class CaffeinateManager extends EventEmitter {
42
77
  this.snapshotProcesses = options.snapshotProcesses ?? defaultSnapshotProcesses;
43
78
  this.defaultCommands = options.defaultCommands ?? CAFFEINATE_AUTO_DEFAULT_COMMANDS;
44
79
  this.checkRecentOutput = options.hasRecentOutput;
80
+ this.batteryProbe = options.batteryProbe ?? defaultBatteryProbe;
45
81
  // An unexpected death of the caffeinate process flips controller state; pass
46
82
  // that through so every tab rebroadcasts the authoritative `active`.
47
83
  this.controller.on("change", () => this.emit("change"));
@@ -66,6 +102,9 @@ export class CaffeinateManager extends EventEmitter {
66
102
  get activityGate() {
67
103
  return this.store.getActivityGate();
68
104
  }
105
+ get batteryThreshold() {
106
+ return this.store.getBatteryThreshold();
107
+ }
69
108
  get activeTrigger() {
70
109
  return this.autoActive ? this.autoTrigger : null;
71
110
  }
@@ -162,6 +201,7 @@ export class CaffeinateManager extends EventEmitter {
162
201
  this.pokeTimer = null;
163
202
  }
164
203
  this.clearActivityGateTimer();
204
+ this.clearBatteryTimer();
165
205
  this.controller.dispose();
166
206
  this.removeAllListeners();
167
207
  }
@@ -176,9 +216,28 @@ export class CaffeinateManager extends EventEmitter {
176
216
  return triggers;
177
217
  }
178
218
  recompute() {
179
- const mode = this.mode;
180
- const desired = mode === "on" || (mode === "automatic" && this.autoActive);
219
+ const wantActive = this.modeWantsActive();
220
+ const guardApplies = this.supported && this.batteryThreshold !== null;
221
+ // While the guard is on but we've never read the battery, hold off engaging
222
+ // until that first read resolves — otherwise a daemon that boots with the
223
+ // battery already below the floor briefly spawns the power assertion before
224
+ // the probe suppresses it. Subsequent arms use the cached flag instead.
225
+ const needsFirstProbe = guardApplies && !this.hasProbedBattery;
226
+ const desired = wantActive && !(guardApplies && (this.batteryLow || needsFirstProbe));
181
227
  this.controller.setActive(desired);
228
+ if (wantActive && guardApplies) {
229
+ // Start (or keep) the adaptive battery check armed. The next delay is
230
+ // derived from the last status, or an immediate probe when there's no
231
+ // cached reading yet.
232
+ this.scheduleBatteryCheck(this.lastBatteryStatus);
233
+ }
234
+ else {
235
+ this.clearBatteryTimer();
236
+ }
237
+ }
238
+ modeWantsActive() {
239
+ const mode = this.mode;
240
+ return mode === "on" || (mode === "automatic" && this.autoActive);
182
241
  }
183
242
  clearActivityGateTimer() {
184
243
  if (this.activityGateTimer !== null) {
@@ -186,6 +245,137 @@ export class CaffeinateManager extends EventEmitter {
186
245
  this.activityGateTimer = null;
187
246
  }
188
247
  }
248
+ // Force an immediate battery re-check and resolve when it settles. Used by
249
+ // tests; production code re-checks via the adaptive timer. Awaits an already
250
+ // in-flight check (so concurrent test calls see the same resolved state)
251
+ // rather than queueing a second probe.
252
+ pollBatteryNow() {
253
+ return this.runBatteryCheck();
254
+ }
255
+ // Set the persisted battery floor. `null` disables the guard. Persists
256
+ // immediately (so every tab stays in lockstep via the broadcast) and re-derives
257
+ // suppression from a fresh read so the user sees the floor take effect at
258
+ // once rather than after the adaptive timer's first delay.
259
+ setBatteryThreshold(percent) {
260
+ if (this.disposed)
261
+ return;
262
+ this.store.setBatteryThreshold(percent);
263
+ this.emit("change");
264
+ // Clear any pending adaptive check so the next read re-arms with a delay
265
+ // derived from the new threshold (and a fresh status), not the old one.
266
+ this.clearBatteryTimer();
267
+ if (!this.supported || percent === null) {
268
+ // Guard disabled: clear any stale suppression so it can't keep
269
+ // caffeinate off after the user turned the floor off.
270
+ this.batteryLow = false;
271
+ this.recompute();
272
+ return;
273
+ }
274
+ if (this.modeWantsActive()) {
275
+ // Probe immediately so an already-low battery stops caffeinate at once
276
+ // (the adaptive arming would otherwise wait up to MAX_INTERVAL for the
277
+ // first read, since lastBatteryStatus is stale/null until this resolves).
278
+ void this.runBatteryCheck();
279
+ }
280
+ }
281
+ // Single entry point for every battery probe. Coalesces concurrent callers
282
+ // onto one in-flight promise so the `pmset` call fires at most once per tick
283
+ // even if the timer, setBatteryThreshold, and a manual pollBatteryNow all race.
284
+ runBatteryCheck() {
285
+ if (this.batteryCheckInFlight !== null)
286
+ return this.batteryCheckInFlight;
287
+ const promise = this.performBatteryCheck().finally(() => {
288
+ if (this.batteryCheckInFlight === promise)
289
+ this.batteryCheckInFlight = null;
290
+ });
291
+ this.batteryCheckInFlight = promise;
292
+ return promise;
293
+ }
294
+ async performBatteryCheck() {
295
+ if (this.disposed)
296
+ return;
297
+ const threshold = this.batteryThreshold;
298
+ // Nothing to gate on: unsupported, guard disabled, or nothing wanting
299
+ // active. The last case keeps the design claim that reads happen only while
300
+ // a mode wants caffeinate active (a probe here would be wasted work and
301
+ // couldn't change `desired`, since `wantActive` already forces it false).
302
+ if (!this.supported || threshold === null || !this.modeWantsActive()) {
303
+ this.clearBatteryTimer();
304
+ return;
305
+ }
306
+ const status = await this.batteryProbe();
307
+ if (this.disposed)
308
+ return;
309
+ this.lastBatteryStatus = status;
310
+ this.hasProbedBattery = true;
311
+ // Fail-open on read failure (null): a missing battery or a transient pmset
312
+ // error cannot take keep-awake away from the user. The scheduler stays
313
+ // armed via the recompute below so a later successful read can re-impose
314
+ // the floor.
315
+ const nextLow = status !== null && status.isOnBattery && status.percent <= threshold;
316
+ if (nextLow !== this.batteryLow) {
317
+ this.batteryLow = nextLow;
318
+ this.emit("change");
319
+ }
320
+ this.recompute();
321
+ }
322
+ scheduleBatteryCheck(status) {
323
+ if (this.disposed)
324
+ return;
325
+ // Coalesce: if a check is already armed, let it run — it reschedules
326
+ // adaptively from a fresh read when it completes, so re-entry here is a no-op.
327
+ if (this.batteryTimer !== null)
328
+ return;
329
+ if (!this.hasProbedBattery) {
330
+ // Never probed: fire immediately (coalesced by runBatteryCheck) so the
331
+ // first arm doesn't wait MAX before applying the floor — a daemon that
332
+ // boots with the battery already below the threshold suppresses at once.
333
+ void this.runBatteryCheck();
334
+ return;
335
+ }
336
+ // A null status here means a prior probe failed or found no battery:
337
+ // computeBatteryDelay maps that to MAX so we retry slowly instead of
338
+ // re-firing immediately and busy-looping on a persistently-failing read.
339
+ const delay = this.computeBatteryDelay(status);
340
+ this.batteryTimer = setTimeout(() => {
341
+ this.batteryTimer = null;
342
+ void this.runBatteryCheck();
343
+ }, delay);
344
+ this.batteryTimer.unref?.();
345
+ }
346
+ computeBatteryDelay(status) {
347
+ const threshold = this.batteryThreshold;
348
+ if (threshold === null)
349
+ return CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS;
350
+ // Already suppressed: poll fast so charging back above the threshold or
351
+ // plugging in resumes promptly. Bounded by how long the machine stays
352
+ // below the floor — which should be short (it's about to lose power).
353
+ if (this.batteryLow)
354
+ return CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS;
355
+ if (status === null || !status.isOnBattery)
356
+ return CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS;
357
+ if (status.minutesToEmpty === null)
358
+ return CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS;
359
+ // Half of the interpolated time-to-threshold: the OS estimate (minutes to
360
+ // 0%) scaled by the charge fraction still above the floor. Halving gives a
361
+ // 2× buffer against the EWMA lagging real discharge (and the active program
362
+ // draining faster than the idle minutes the average was computed over), so
363
+ // a stale-high estimate still catches the crossing in time rather than
364
+ // sleeping past it. Clamped to [MIN, MAX] below.
365
+ const remaining = status.percent - threshold;
366
+ if (remaining <= 0)
367
+ return CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS;
368
+ const fractionAbove = remaining / status.percent;
369
+ const interpolatedMs = status.minutesToEmpty * MS_PER_MINUTE * fractionAbove;
370
+ const scheduledMs = interpolatedMs / CAFFEINATE_BATTERY_POLL_TIME_FRACTION;
371
+ return Math.max(CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS, Math.min(scheduledMs, CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS));
372
+ }
373
+ clearBatteryTimer() {
374
+ if (this.batteryTimer !== null) {
375
+ clearTimeout(this.batteryTimer);
376
+ this.batteryTimer = null;
377
+ }
378
+ }
189
379
  async pollAuto() {
190
380
  if (this.disposed || this.mode !== "automatic" || !this.supported)
191
381
  return;
@@ -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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"}
@@ -6,7 +6,9 @@ export declare class CaffeinatePreferencesStore {
6
6
  getMode(): CaffeinateMode;
7
7
  getCommands(): string[];
8
8
  getActivityGate(): boolean;
9
+ getBatteryThreshold(): number | null;
9
10
  setActivityGate(enabled: boolean): boolean;
11
+ setBatteryThreshold(percent: number | null): number | null;
10
12
  setMode(mode: CaffeinateMode): CaffeinateMode;
11
13
  setCommands(commands: readonly string[]): string[];
12
14
  private load;
@@ -1 +1 @@
1
- {"version":3,"file":"caffeinate-preferences-store.d.ts","sourceRoot":"","sources":["../src/caffeinate-preferences-store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgCjD,qBAAa,0BAA0B;IAGzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAqD;gBAE3C,QAAQ,EAAE,MAAM;IAI7C,OAAO,IAAI,cAAc;IAIzB,WAAW,IAAI,MAAM,EAAE;IAIvB,eAAe,IAAI,OAAO;IAI1B,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAO1C,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc;IAQ7C,WAAW,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAMlD,OAAO,CAAC,IAAI;IAqCZ,OAAO,CAAC,OAAO;CAYhB"}
1
+ {"version":3,"file":"caffeinate-preferences-store.d.ts","sourceRoot":"","sources":["../src/caffeinate-preferences-store.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqCjD,qBAAa,0BAA0B;IAGzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAqD;gBAE3C,QAAQ,EAAE,MAAM;IAI7C,OAAO,IAAI,cAAc;IAIzB,WAAW,IAAI,MAAM,EAAE;IAIvB,eAAe,IAAI,OAAO;IAI1B,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAIpC,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAO1C,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAc1D,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc;IAQ7C,WAAW,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE;IAMlD,OAAO,CAAC,IAAI;IAoDZ,OAAO,CAAC,OAAO;CAahB"}
@@ -1,16 +1,18 @@
1
1
  import fs from "node:fs";
2
2
  import path from "node:path";
3
- import { CAFFEINATE_PREFERENCES_FILE_VERSION, MAX_CAFFEINATE_COMMAND_LENGTH, MAX_CAFFEINATE_COMMANDS, } from "./constants.js";
3
+ import { CAFFEINATE_BATTERY_LOW_WATER_MAX_PERCENT, CAFFEINATE_BATTERY_LOW_WATER_MIN_PERCENT, CAFFEINATE_BATTERY_LOW_WATER_PERCENT_DEFAULT, CAFFEINATE_PREFERENCES_FILE_VERSION, MAX_CAFFEINATE_COMMAND_LENGTH, MAX_CAFFEINATE_COMMANDS, } from "./constants.js";
4
4
  import { caffeinatePreferencesFileSchema } from "./schemas.js";
5
5
  import { memoBy } from "./utils/memo-by.js";
6
6
  // Default to "automatic": keep-awake follows recognized programs out of the box
7
7
  // (the behavior the user asked to make default), with no custom commands yet.
8
8
  // The activity gate is on by default: caffeinate only stays active while a
9
- // recognized program is producing output.
9
+ // recognized program is producing output. The battery floor is on at 20% by
10
+ // default: on battery power at or below that, the daemon refuses to keep awake.
10
11
  const DEFAULT_PREFERENCES = {
11
12
  mode: "automatic",
12
13
  activityGate: true,
13
14
  commands: [],
15
+ batteryThreshold: CAFFEINATE_BATTERY_LOW_WATER_PERCENT_DEFAULT,
14
16
  };
15
17
  // Trim, drop empties, cap length, memo by lowercased form (keeping the first
16
18
  // spelling), and cap the count. The trigger match itself is case-insensitive,
@@ -40,6 +42,9 @@ export class CaffeinatePreferencesStore {
40
42
  getActivityGate() {
41
43
  return this.preferences.activityGate;
42
44
  }
45
+ getBatteryThreshold() {
46
+ return this.preferences.batteryThreshold;
47
+ }
43
48
  setActivityGate(enabled) {
44
49
  if (enabled === this.preferences.activityGate)
45
50
  return this.preferences.activityGate;
@@ -47,6 +52,16 @@ export class CaffeinatePreferencesStore {
47
52
  this.persist();
48
53
  return this.preferences.activityGate;
49
54
  }
55
+ setBatteryThreshold(percent) {
56
+ const clamped = percent === null
57
+ ? null
58
+ : Math.min(CAFFEINATE_BATTERY_LOW_WATER_MAX_PERCENT, Math.max(CAFFEINATE_BATTERY_LOW_WATER_MIN_PERCENT, Math.floor(percent)));
59
+ if (clamped === this.preferences.batteryThreshold)
60
+ return this.preferences.batteryThreshold;
61
+ this.preferences = { ...this.preferences, batteryThreshold: clamped };
62
+ this.persist();
63
+ return this.preferences.batteryThreshold;
64
+ }
50
65
  setMode(mode) {
51
66
  if (mode !== this.preferences.mode) {
52
67
  this.preferences = { ...this.preferences, mode };
@@ -84,6 +99,18 @@ export class CaffeinatePreferencesStore {
84
99
  json.activityGate = true;
85
100
  json.version = CAFFEINATE_PREFERENCES_FILE_VERSION;
86
101
  }
102
+ // v2 files lack `batteryThreshold`; migrate before validation. Default to
103
+ // the guard-on default rather than null so the floor lights up for existing
104
+ // users on first boot after upgrade.
105
+ if (json &&
106
+ typeof json === "object" &&
107
+ "version" in json &&
108
+ json.version === 2 &&
109
+ !("batteryThreshold" in json)) {
110
+ json.batteryThreshold =
111
+ CAFFEINATE_BATTERY_LOW_WATER_PERCENT_DEFAULT;
112
+ json.version = CAFFEINATE_PREFERENCES_FILE_VERSION;
113
+ }
87
114
  const parsed = caffeinatePreferencesFileSchema.safeParse(json);
88
115
  if (!parsed.success) {
89
116
  console.warn(`caffeinate preferences file invalid; using defaults (${this.filePath})`);
@@ -93,6 +120,7 @@ export class CaffeinatePreferencesStore {
93
120
  mode: parsed.data.mode,
94
121
  activityGate: parsed.data.activityGate,
95
122
  commands: sanitizeCommands(parsed.data.commands),
123
+ batteryThreshold: parsed.data.batteryThreshold,
96
124
  };
97
125
  }
98
126
  persist() {
@@ -101,6 +129,7 @@ export class CaffeinatePreferencesStore {
101
129
  version: CAFFEINATE_PREFERENCES_FILE_VERSION,
102
130
  mode: this.preferences.mode,
103
131
  activityGate: this.preferences.activityGate,
132
+ batteryThreshold: this.preferences.batteryThreshold,
104
133
  commands: this.preferences.commands,
105
134
  };
106
135
  const tmpPath = `${this.filePath}.tmp`;
@@ -1 +1 @@
1
- {"version":3,"file":"caffeinate-preferences-store.js","sourceRoot":"","sources":["../src/caffeinate-preferences-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,mCAAmC,EACnC,6BAA6B,EAC7B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,gFAAgF;AAChF,8EAA8E;AAC9E,2EAA2E;AAC3E,0CAA0C;AAC1C,MAAM,mBAAmB,GAA0B;IACjD,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,6EAA6E;AAC7E,8EAA8E;AAC9E,iDAAiD;AACjD,MAAM,gBAAgB,GAAG,CAAC,QAA2B,EAAY,EAAE;IACjE,MAAM,MAAM,GAAG,QAAQ;SACpB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC;SAChE,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;AAC9F,CAAC,CAAC;AAEF,0EAA0E;AAC1E,+EAA+E;AAC/E,oEAAoE;AACpE,MAAM,OAAO,0BAA0B;IAGR;IAFrB,WAAW,GAA0B,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAExE,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IACvC,CAAC;IAED,eAAe,CAAC,OAAgB;QAC9B,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;QACpF,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAClE,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,IAAoB;QAC1B,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,QAA2B;QACrC,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjF,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEO,IAAI;QACV,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,wDAAwD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QACD,2DAA2D;QAC3D,IACE,IAAI;YACJ,OAAO,IAAI,KAAK,QAAQ;YACxB,SAAS,IAAI,IAAI;YAChB,IAAgC,CAAC,OAAO,KAAK,CAAC;YAC/C,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,EACzB,CAAC;YACA,IAAgC,CAAC,YAAY,GAAG,IAAI,CAAC;YACrD,IAAgC,CAAC,OAAO,GAAG,mCAAmC,CAAC;QAClF,CAAC;QACD,MAAM,MAAM,GAAG,+BAA+B,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,wDAAwD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,GAAG;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;YACtB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY;YACtC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC;SACjD,CAAC;IACJ,CAAC;IAEO,OAAO;QACb,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG;YACd,OAAO,EAAE,mCAAmC;YAC5C,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YAC3B,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY;YAC3C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ;SACpC,CAAC;QACF,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,CAAC;QACvC,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"caffeinate-preferences-store.js","sourceRoot":"","sources":["../src/caffeinate-preferences-store.ts"],"names":[],"mappings":"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"}
@@ -10,11 +10,18 @@ export declare const LOCALTERM_VALUE = "1";
10
10
  export declare const CAFFEINATE_BINARY = "caffeinate";
11
11
  export declare const CAFFEINATE_ARGS: readonly string[];
12
12
  export declare const CAFFEINATE_AUTO_DEFAULT_COMMANDS: readonly string[];
13
- export declare const CAFFEINATE_PREFERENCES_FILE_VERSION = 2;
13
+ export declare const CAFFEINATE_PREFERENCES_FILE_VERSION = 3;
14
14
  export declare const CAFFEINATE_AUTO_POKE_DEBOUNCE_MS = 150;
15
15
  export declare const CAFFEINATE_ACTIVITY_GATE_DEBOUNCE_MS = 5000;
16
16
  export declare const MAX_CAFFEINATE_COMMANDS = 50;
17
17
  export declare const MAX_CAFFEINATE_COMMAND_LENGTH = 128;
18
+ export declare const CAFFEINATE_BATTERY_LOW_WATER_PERCENT_DEFAULT = 20;
19
+ export declare const CAFFEINATE_BATTERY_LOW_WATER_MIN_PERCENT = 5;
20
+ export declare const CAFFEINATE_BATTERY_LOW_WATER_MAX_PERCENT = 50;
21
+ export declare const CAFFEINATE_BATTERY_POLL_MIN_INTERVAL_MS = 5000;
22
+ export declare const CAFFEINATE_BATTERY_POLL_MAX_INTERVAL_MS: number;
23
+ export declare const CAFFEINATE_BATTERY_POLL_TIME_FRACTION = 2;
24
+ export declare const CAFFEINATE_BATTERY_READ_TIMEOUT_MS = 2000;
18
25
  export declare const TITLE_MAX_PATH_SEGMENTS = 1;
19
26
  /**
20
27
  * Strip terminal-emulator identity env vars inherited from the daemon's parent.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AACvD,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,eAAe,MAAM,CAAC;AAInC,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAC9C,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAAc,CAAC;AAK5D,eAAO,MAAM,gCAAgC,EAAE,SAAS,MAAM,EAK7D,CAAC;AACF,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAKrD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAMpD,eAAO,MAAM,oCAAoC,OAAQ,CAAC;AAC1D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,6BAA6B,MAAM,CAAC;AAEjD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,UAgB5B,CAAC;AAEF,eAAO,MAAM,eAAe,QAAY,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAkB,CAAC;AAChD,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,gBAAgB,QAAW,CAAC;AACzC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAO1C,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAClE,eAAO,MAAM,kCAAkC,QAAkB,CAAC;AAClE,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,+BAA+B,QAAmB,CAAC;AAUhE,eAAO,MAAM,wBAAwB,QAAW,CAAC;AAajD,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAOxC,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAC/C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAK/C,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,eAAO,MAAM,cAAc,aAAoE,CAAC;AAEhG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAQ3C,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAK9E,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAG5D,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAI3C,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAC5D,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAOzC,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AAMtC,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAQ1C,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAGtC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAIpC,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,aAAa,QAAS,CAAC;AAEpC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAClD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAO9C,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAG1C,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAGhD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAI7C,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAEpD,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAI/C,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAI3D,eAAO,MAAM,gCAAgC,QAA2B,CAAC;AACzE,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAG/C,eAAO,MAAM,kCAAkC,KAAK,CAAC;AAGrD,eAAO,MAAM,gCAAgC,QAAgB,CAAC;AAK9D,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAOhD,eAAO,MAAM,kCAAkC,OAAQ,CAAC;AAMxD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,eAAO,MAAM,oCAAoC,OAAO,CAAC;AACzD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,yBAAyB,OAAO,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}