pi-insomnia 0.1.0 → 0.1.1
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/CHANGELOG.md +2 -0
- package/extensions/index.ts +30 -5
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
package/extensions/index.ts
CHANGED
|
@@ -4,9 +4,34 @@ import { MacSleepInhibitor } from "../src/sleep-inhibitor.js";
|
|
|
4
4
|
|
|
5
5
|
const STATUS_KEY = "pi-insomnia";
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// Braille spinner — same 10-frame cycle used by npm, vite, webpack, etc.
|
|
8
|
+
const SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
9
|
+
const SPINNER_INTERVAL_MS = 80;
|
|
10
|
+
|
|
11
|
+
let spinnerTimer: ReturnType<typeof setInterval> | undefined;
|
|
12
|
+
let spinnerFrame = 0;
|
|
13
|
+
|
|
14
|
+
function setStatus(ctx: ExtensionContext, text: string | undefined): void {
|
|
8
15
|
if (!ctx.hasUI) return;
|
|
9
|
-
ctx.ui.setStatus(STATUS_KEY,
|
|
16
|
+
ctx.ui.setStatus(STATUS_KEY, text);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function startSpinner(ctx: ExtensionContext): void {
|
|
20
|
+
if (!ctx.hasUI || spinnerTimer) return;
|
|
21
|
+
spinnerFrame = 0;
|
|
22
|
+
setStatus(ctx, `${SPINNER_FRAMES[0]} sleep inhibited`);
|
|
23
|
+
spinnerTimer = setInterval(() => {
|
|
24
|
+
spinnerFrame = (spinnerFrame + 1) % SPINNER_FRAMES.length;
|
|
25
|
+
setStatus(ctx, `${SPINNER_FRAMES[spinnerFrame]} sleep inhibited`);
|
|
26
|
+
}, SPINNER_INTERVAL_MS);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function stopSpinner(ctx: ExtensionContext): void {
|
|
30
|
+
if (spinnerTimer) {
|
|
31
|
+
clearInterval(spinnerTimer);
|
|
32
|
+
spinnerTimer = undefined;
|
|
33
|
+
}
|
|
34
|
+
setStatus(ctx, undefined);
|
|
10
35
|
}
|
|
11
36
|
|
|
12
37
|
export default function piInsomnia(pi: ExtensionAPI) {
|
|
@@ -15,16 +40,16 @@ export default function piInsomnia(pi: ExtensionAPI) {
|
|
|
15
40
|
const inhibitor = new MacSleepInhibitor();
|
|
16
41
|
|
|
17
42
|
pi.on("agent_start", async (_event, ctx) => {
|
|
18
|
-
if (inhibitor.acquire())
|
|
43
|
+
if (inhibitor.acquire()) startSpinner(ctx);
|
|
19
44
|
});
|
|
20
45
|
|
|
21
46
|
pi.on("agent_end", async (_event, ctx) => {
|
|
22
47
|
inhibitor.release();
|
|
23
|
-
if (!inhibitor.isInhibiting)
|
|
48
|
+
if (!inhibitor.isInhibiting) stopSpinner(ctx);
|
|
24
49
|
});
|
|
25
50
|
|
|
26
51
|
pi.on("session_shutdown", async (_event, ctx) => {
|
|
27
52
|
inhibitor.forceStop();
|
|
28
|
-
|
|
53
|
+
stopSpinner(ctx);
|
|
29
54
|
});
|
|
30
55
|
}
|