Add a syncStatus function to Pi extension to display the current Ponytail mode in the status bar. The indicator updates upon mode changes and hooks into the agent_start and agent_end events to display a visual active/inactive state. This provides the user with clear feedback on the currently active Ponytail intensity level (lite, full, ultra) without running commands.
This commit is contained in:
@@ -56,6 +56,25 @@ export { writeDefaultMode };
|
|||||||
export default function ponytailExtension(pi) {
|
export default function ponytailExtension(pi) {
|
||||||
let currentMode = DEFAULT_MODE;
|
let currentMode = DEFAULT_MODE;
|
||||||
let configuredDefaultMode = getDefaultMode();
|
let configuredDefaultMode = getDefaultMode();
|
||||||
|
let isActive = false;
|
||||||
|
let lastCtx = null;
|
||||||
|
|
||||||
|
// -- Status bar --
|
||||||
|
function syncStatus(ctx) {
|
||||||
|
if (ctx) lastCtx = ctx;
|
||||||
|
const c = ctx || lastCtx;
|
||||||
|
if (!c?.ui?.setStatus) return;
|
||||||
|
const theme = c.ui.theme;
|
||||||
|
if (currentMode === "off") {
|
||||||
|
c.ui.setStatus("ponytail", "");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const levelIcons = { lite: "🌿", full: "⚡", ultra: "🔥" };
|
||||||
|
const icon = levelIcons[currentMode] || "";
|
||||||
|
const label = currentMode.toUpperCase();
|
||||||
|
const indicator = isActive ? theme.fg("accent", "●") : theme.fg("dim", "○");
|
||||||
|
c.ui.setStatus("ponytail", indicator + " 🐴 " + theme.fg("muted", "ponytail: ") + theme.fg("text", icon + " " + label));
|
||||||
|
}
|
||||||
|
|
||||||
const setMode = (mode, ctx) => {
|
const setMode = (mode, ctx) => {
|
||||||
const normalized = normalizePersistedMode(mode);
|
const normalized = normalizePersistedMode(mode);
|
||||||
@@ -63,6 +82,7 @@ export default function ponytailExtension(pi) {
|
|||||||
|
|
||||||
currentMode = normalized;
|
currentMode = normalized;
|
||||||
pi.appendEntry("ponytail-mode", { mode: normalized });
|
pi.appendEntry("ponytail-mode", { mode: normalized });
|
||||||
|
syncStatus(ctx);
|
||||||
ctx?.ui?.notify?.(`Ponytail mode set to ${normalized}.`, "info");
|
ctx?.ui?.notify?.(`Ponytail mode set to ${normalized}.`, "info");
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -148,6 +168,18 @@ export default function ponytailExtension(pi) {
|
|||||||
const entries = ctx?.sessionManager?.getBranch?.() || ctx?.sessionManager?.getEntries?.() || [];
|
const entries = ctx?.sessionManager?.getBranch?.() || ctx?.sessionManager?.getEntries?.() || [];
|
||||||
configuredDefaultMode = getDefaultMode();
|
configuredDefaultMode = getDefaultMode();
|
||||||
currentMode = resolveSessionMode(entries, configuredDefaultMode);
|
currentMode = resolveSessionMode(entries, configuredDefaultMode);
|
||||||
|
syncStatus(ctx);
|
||||||
|
ctx?.ui?.notify?.(`Ponytail loaded: ${currentMode}`, "info");
|
||||||
|
});
|
||||||
|
|
||||||
|
pi.on("agent_start", async (_event, ctx) => {
|
||||||
|
isActive = true;
|
||||||
|
syncStatus(ctx);
|
||||||
|
});
|
||||||
|
|
||||||
|
pi.on("agent_end", async (_event, ctx) => {
|
||||||
|
isActive = false;
|
||||||
|
syncStatus(ctx);
|
||||||
});
|
});
|
||||||
|
|
||||||
pi.on("before_agent_start", async (event) => {
|
pi.on("before_agent_start", async (event) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user