mirror of
https://github.com/luckyyzh/pi-agent-integrated.git
synced 2026-10-03 02:59:35 +00:00
feat: integrate Pi backend and Pi Web
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
/**
|
||||
* Syncs pi theme with macOS system appearance (dark/light mode).
|
||||
*
|
||||
* Usage:
|
||||
* pi -e examples/extensions/mac-system-theme.ts
|
||||
*/
|
||||
|
||||
import { exec } from "node:child_process";
|
||||
import { promisify } from "node:util";
|
||||
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
||||
|
||||
const execAsync = promisify(exec);
|
||||
|
||||
async function isDarkMode(): Promise<boolean> {
|
||||
try {
|
||||
const { stdout } = await execAsync(
|
||||
"osascript -e 'tell application \"System Events\" to tell appearance preferences to return dark mode'",
|
||||
);
|
||||
return stdout.trim() === "true";
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export default function (pi: ExtensionAPI) {
|
||||
let intervalId: ReturnType<typeof setInterval> | null = null;
|
||||
|
||||
pi.on("session_start", async (_event, ctx) => {
|
||||
let currentTheme = (await isDarkMode()) ? "dark" : "light";
|
||||
ctx.ui.setTheme(currentTheme);
|
||||
|
||||
intervalId = setInterval(async () => {
|
||||
const newTheme = (await isDarkMode()) ? "dark" : "light";
|
||||
if (newTheme !== currentTheme) {
|
||||
currentTheme = newTheme;
|
||||
ctx.ui.setTheme(currentTheme);
|
||||
}
|
||||
}, 2000);
|
||||
});
|
||||
|
||||
pi.on("session_shutdown", () => {
|
||||
if (intervalId) {
|
||||
clearInterval(intervalId);
|
||||
intervalId = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user