@juanibiapina/pi-powerbar 0.7.1 → 0.8.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,+BAA+B,CAAC;AAoB7F,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAyF9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,+BAA+B,CAAC;AAoB7F,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkF9D"}
@@ -72,12 +72,6 @@ export default function createExtension(pi) {
72
72
  hideFooter(ctx);
73
73
  refresh();
74
74
  });
75
- pi.on("session_switch", async (_event, ctx) => {
76
- settings = loadSettings();
77
- currentCtx = ctx;
78
- hideFooter(ctx);
79
- refresh();
80
- });
81
75
  pi.on("session_shutdown", async (_event, ctx) => {
82
76
  if (ctx.hasUI) {
83
77
  ctx.ui.setWidget("powerbar", undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Powerbar Core Extension\n *\n * Listens for \"powerbar:update\" events from producer extensions,\n * maintains a segment store, and renders a powerline-style widget.\n */\n\nimport type { OrderedListOption } from \"@juanibiapina/pi-extension-settings\";\nimport type { ExtensionAPI, ExtensionUIContext, Theme } from \"@mariozechner/pi-coding-agent\";\nimport type { Component, TUI } from \"@mariozechner/pi-tui\";\nimport { renderBar, type Segment } from \"./render.js\";\nimport { loadSettings, type PowerbarSettings, registerSettings } from \"./settings.js\";\n\ninterface PowerbarUpdatePayload {\n\tid: string;\n\ttext?: string;\n\tsuffix?: string;\n\ticon?: string;\n\tcolor?: string;\n\tbar?: number;\n\tbarSegments?: number;\n}\n\ninterface SegmentRegistration {\n\tid: string;\n\tlabel: string;\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tconst segments: Map<string, Segment> = new Map();\n\tconst segmentCatalog: Map<string, OrderedListOption> = new Map();\n\tlet settings: PowerbarSettings;\n\tlet currentCtx: { ui: { setWidget: (...args: any[]) => void }; hasUI: boolean } | undefined;\n\n\t// Register settings with empty options initially (no segments known yet)\n\tregisterSettings(pi, []);\n\n\t// Listen for segment registrations from producer extensions\n\tpi.events.on(\"powerbar:register-segment\", (data: unknown) => {\n\t\tconst { id, label } = data as SegmentRegistration;\n\t\tsegmentCatalog.set(id, { id, label });\n\t\t// Re-register settings with updated segment options\n\t\tregisterSettings(pi, Array.from(segmentCatalog.values()));\n\t});\n\n\tfunction refresh(): void {\n\t\tif (!currentCtx?.hasUI) return;\n\n\t\tcurrentCtx.ui.setWidget(\n\t\t\t\"powerbar\",\n\t\t\t(_tui: TUI, theme: Theme): Component & { dispose?(): void } => {\n\t\t\t\treturn {\n\t\t\t\t\trender(width: number): string[] {\n\t\t\t\t\t\tconst line = renderBar(segments, settings, theme, width);\n\t\t\t\t\t\treturn [line];\n\t\t\t\t\t},\n\t\t\t\t\tinvalidate(): void {\n\t\t\t\t\t\t// No cached state to clear\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\t{ placement: settings.placement },\n\t\t);\n\t}\n\n\t// Listen for segment updates from any extension\n\tpi.events.on(\"powerbar:update\", (data: unknown) => {\n\t\tconst payload = data as PowerbarUpdatePayload;\n\t\tif (!payload?.id) return;\n\n\t\tif (!payload.text && payload.bar === undefined) {\n\t\t\tsegments.delete(payload.id);\n\t\t} else {\n\t\t\tsegments.set(payload.id, {\n\t\t\t\tid: payload.id,\n\t\t\t\ttext: payload.text ?? \"\",\n\t\t\t\tsuffix: payload.suffix,\n\t\t\t\ticon: payload.icon,\n\t\t\t\tcolor: payload.color,\n\t\t\t\tbar: payload.bar,\n\t\t\t\tbarSegments: payload.barSegments,\n\t\t\t});\n\t\t}\n\n\t\trefresh();\n\t});\n\n\tfunction hideFooter(ctx: { ui: ExtensionUIContext; hasUI: boolean }): void {\n\t\tif (!ctx.hasUI) return;\n\t\tctx.ui.setFooter((_tui, _theme, _footerData) => ({\n\t\t\trender(): string[] {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tinvalidate(): void {},\n\t\t}));\n\t}\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsettings = loadSettings();\n\t\tcurrentCtx = ctx;\n\t\thideFooter(ctx);\n\t\trefresh();\n\t});\n\n\tpi.on(\"session_switch\", async (_event, ctx) => {\n\t\tsettings = loadSettings();\n\t\tcurrentCtx = ctx;\n\t\thideFooter(ctx);\n\t\trefresh();\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setWidget(\"powerbar\", undefined);\n\t\t}\n\t\tcurrentCtx = undefined;\n\t});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Powerbar Core Extension\n *\n * Listens for \"powerbar:update\" events from producer extensions,\n * maintains a segment store, and renders a powerline-style widget.\n */\n\nimport type { OrderedListOption } from \"@juanibiapina/pi-extension-settings\";\nimport type { ExtensionAPI, ExtensionUIContext, Theme } from \"@mariozechner/pi-coding-agent\";\nimport type { Component, TUI } from \"@mariozechner/pi-tui\";\nimport { renderBar, type Segment } from \"./render.js\";\nimport { loadSettings, type PowerbarSettings, registerSettings } from \"./settings.js\";\n\ninterface PowerbarUpdatePayload {\n\tid: string;\n\ttext?: string;\n\tsuffix?: string;\n\ticon?: string;\n\tcolor?: string;\n\tbar?: number;\n\tbarSegments?: number;\n}\n\ninterface SegmentRegistration {\n\tid: string;\n\tlabel: string;\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tconst segments: Map<string, Segment> = new Map();\n\tconst segmentCatalog: Map<string, OrderedListOption> = new Map();\n\tlet settings: PowerbarSettings;\n\tlet currentCtx: { ui: { setWidget: (...args: any[]) => void }; hasUI: boolean } | undefined;\n\n\t// Register settings with empty options initially (no segments known yet)\n\tregisterSettings(pi, []);\n\n\t// Listen for segment registrations from producer extensions\n\tpi.events.on(\"powerbar:register-segment\", (data: unknown) => {\n\t\tconst { id, label } = data as SegmentRegistration;\n\t\tsegmentCatalog.set(id, { id, label });\n\t\t// Re-register settings with updated segment options\n\t\tregisterSettings(pi, Array.from(segmentCatalog.values()));\n\t});\n\n\tfunction refresh(): void {\n\t\tif (!currentCtx?.hasUI) return;\n\n\t\tcurrentCtx.ui.setWidget(\n\t\t\t\"powerbar\",\n\t\t\t(_tui: TUI, theme: Theme): Component & { dispose?(): void } => {\n\t\t\t\treturn {\n\t\t\t\t\trender(width: number): string[] {\n\t\t\t\t\t\tconst line = renderBar(segments, settings, theme, width);\n\t\t\t\t\t\treturn [line];\n\t\t\t\t\t},\n\t\t\t\t\tinvalidate(): void {\n\t\t\t\t\t\t// No cached state to clear\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\t{ placement: settings.placement },\n\t\t);\n\t}\n\n\t// Listen for segment updates from any extension\n\tpi.events.on(\"powerbar:update\", (data: unknown) => {\n\t\tconst payload = data as PowerbarUpdatePayload;\n\t\tif (!payload?.id) return;\n\n\t\tif (!payload.text && payload.bar === undefined) {\n\t\t\tsegments.delete(payload.id);\n\t\t} else {\n\t\t\tsegments.set(payload.id, {\n\t\t\t\tid: payload.id,\n\t\t\t\ttext: payload.text ?? \"\",\n\t\t\t\tsuffix: payload.suffix,\n\t\t\t\ticon: payload.icon,\n\t\t\t\tcolor: payload.color,\n\t\t\t\tbar: payload.bar,\n\t\t\t\tbarSegments: payload.barSegments,\n\t\t\t});\n\t\t}\n\n\t\trefresh();\n\t});\n\n\tfunction hideFooter(ctx: { ui: ExtensionUIContext; hasUI: boolean }): void {\n\t\tif (!ctx.hasUI) return;\n\t\tctx.ui.setFooter((_tui, _theme, _footerData) => ({\n\t\t\trender(): string[] {\n\t\t\t\treturn [];\n\t\t\t},\n\t\t\tinvalidate(): void {},\n\t\t}));\n\t}\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\tsettings = loadSettings();\n\t\tcurrentCtx = ctx;\n\t\thideFooter(ctx);\n\t\trefresh();\n\t});\n\n\tpi.on(\"session_shutdown\", async (_event, ctx) => {\n\t\tif (ctx.hasUI) {\n\t\t\tctx.ui.setWidget(\"powerbar\", undefined);\n\t\t}\n\t\tcurrentCtx = undefined;\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAgCpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAW9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAgCpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAU9D"}
@@ -37,7 +37,6 @@ export default function createExtension(pi) {
37
37
  pi.events.emit("powerbar:register-segment", { id: "context-usage", label: "Context Usage" });
38
38
  // Reset on new/switched session
39
39
  pi.on("session_start", async () => resetContextUsage(pi));
40
- pi.on("session_switch", async () => resetContextUsage(pi));
41
40
  // Update frequently during agent work
42
41
  pi.on("turn_start", async (_event, ctx) => emitContextUsage(pi, ctx));
43
42
  pi.on("tool_result", async (_event, ctx) => emitContextUsage(pi, ctx));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAW;IAC5B,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAgB,EAAE,GAAqB;IAChE,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;IACpC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;QACnE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,GAAG,GAAG,GAAG;YACjB,GAAG,EAAE,GAAG;YACR,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;YACxD,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;SACpB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAgB;IAC1C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACjC,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,SAAS;KACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;IAE7F,gCAAgC;IAChC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1D,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3D,sCAAsC;IACtC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC","sourcesContent":["/**\n * Powerbar Context Producer\n *\n * Shows context window usage as a progress bar with percentage.\n * Color changes based on usage level: accent → warning → error.\n * Segment ID: \"context-usage\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nconst CHUNK_SIZE = 100_000;\n\nfunction getColor(pct: number): string {\n\tif (pct > 80) return \"error\";\n\tif (pct > 60) return \"warning\";\n\treturn \"muted\";\n}\n\nfunction emitContextUsage(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst usage = ctx.getContextUsage();\n\tif (usage && usage.tokens != null) {\n\t\tconst pct = Math.round((usage.tokens / usage.contextWindow) * 100);\n\t\tpi.events.emit(\"powerbar:update\", {\n\t\t\tid: \"context-usage\",\n\t\t\ttext: \"\",\n\t\t\tsuffix: `${pct}%`,\n\t\t\tbar: pct,\n\t\t\tbarSegments: Math.ceil(usage.contextWindow / CHUNK_SIZE),\n\t\t\tcolor: getColor(pct),\n\t\t});\n\t}\n}\n\nfunction resetContextUsage(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"context-usage\",\n\t\ttext: undefined,\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"context-usage\", label: \"Context Usage\" });\n\n\t// Reset on new/switched session\n\tpi.on(\"session_start\", async () => resetContextUsage(pi));\n\tpi.on(\"session_switch\", async () => resetContextUsage(pi));\n\n\t// Update frequently during agent work\n\tpi.on(\"turn_start\", async (_event, ctx) => emitContextUsage(pi, ctx));\n\tpi.on(\"tool_result\", async (_event, ctx) => emitContextUsage(pi, ctx));\n\tpi.on(\"turn_end\", async (_event, ctx) => emitContextUsage(pi, ctx));\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-context/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,SAAS,QAAQ,CAAC,GAAW;IAC5B,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IAC7B,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/B,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAgB,EAAE,GAAqB;IAChE,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;IACpC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;QACnE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,eAAe;YACnB,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,GAAG,GAAG,GAAG;YACjB,GAAG,EAAE,GAAG;YACR,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC;YACxD,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;SACpB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAgB;IAC1C,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACjC,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,SAAS;KACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;IAE7F,gCAAgC;IAChC,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,sCAAsC;IACtC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACtE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;AACrE,CAAC","sourcesContent":["/**\n * Powerbar Context Producer\n *\n * Shows context window usage as a progress bar with percentage.\n * Color changes based on usage level: accent → warning → error.\n * Segment ID: \"context-usage\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nconst CHUNK_SIZE = 100_000;\n\nfunction getColor(pct: number): string {\n\tif (pct > 80) return \"error\";\n\tif (pct > 60) return \"warning\";\n\treturn \"muted\";\n}\n\nfunction emitContextUsage(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst usage = ctx.getContextUsage();\n\tif (usage && usage.tokens != null) {\n\t\tconst pct = Math.round((usage.tokens / usage.contextWindow) * 100);\n\t\tpi.events.emit(\"powerbar:update\", {\n\t\t\tid: \"context-usage\",\n\t\t\ttext: \"\",\n\t\t\tsuffix: `${pct}%`,\n\t\t\tbar: pct,\n\t\t\tbarSegments: Math.ceil(usage.contextWindow / CHUNK_SIZE),\n\t\t\tcolor: getColor(pct),\n\t\t});\n\t}\n}\n\nfunction resetContextUsage(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"context-usage\",\n\t\ttext: undefined,\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"context-usage\", label: \"Context Usage\" });\n\n\t// Reset on new/switched session\n\tpi.on(\"session_start\", async () => resetContextUsage(pi));\n\n\t// Update frequently during agent work\n\tpi.on(\"turn_start\", async (_event, ctx) => emitContextUsage(pi, ctx));\n\tpi.on(\"tool_result\", async (_event, ctx) => emitContextUsage(pi, ctx));\n\tpi.on(\"turn_end\", async (_event, ctx) => emitContextUsage(pi, ctx));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-git/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAkCpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAiB9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-git/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAkCpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAa9D"}
@@ -41,9 +41,6 @@ export default function createExtension(pi) {
41
41
  pi.on("session_start", async (_event, ctx) => {
42
42
  emitBranch(pi, ctx);
43
43
  });
44
- pi.on("session_switch", async (_event, ctx) => {
45
- emitBranch(pi, ctx);
46
- });
47
44
  // Refresh after bash commands (user may have changed branches)
48
45
  pi.on("tool_result", async (event, ctx) => {
49
46
  if (event.toolName === "bash") {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-git/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,SAAS,YAAY,CAAC,GAAW;IAChC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,kCAAkC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,EAAgB,EAAE,GAAqB;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,OAAO;SACd,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACP,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,SAAS;SACf,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAEvF,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC7C,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Powerbar Git Producer\n *\n * Shows the current git branch.\n * Segment ID: \"git-branch\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\nfunction getGitBranch(cwd: string): string | undefined {\n\ttry {\n\t\tconst head = readFileSync(join(cwd, \".git\", \"HEAD\"), \"utf-8\").trim();\n\t\tif (head.startsWith(\"ref: refs/heads/\")) {\n\t\t\treturn head.slice(16);\n\t\t}\n\t\t// Detached HEAD — show short hash\n\t\treturn head.slice(0, 8);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction emitBranch(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst branch = getGitBranch(ctx.cwd);\n\tif (branch) {\n\t\tpi.events.emit(\"powerbar:update\", {\n\t\t\tid: \"git-branch\",\n\t\t\ttext: branch,\n\t\t\ticon: \"⎇\",\n\t\t\tcolor: \"muted\",\n\t\t});\n\t} else {\n\t\tpi.events.emit(\"powerbar:update\", {\n\t\t\tid: \"git-branch\",\n\t\t\ttext: undefined,\n\t\t});\n\t}\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"git-branch\", label: \"Git Branch\" });\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\temitBranch(pi, ctx);\n\t});\n\n\tpi.on(\"session_switch\", async (_event, ctx) => {\n\t\temitBranch(pi, ctx);\n\t});\n\n\t// Refresh after bash commands (user may have changed branches)\n\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\tif (event.toolName === \"bash\") {\n\t\t\temitBranch(pi, ctx);\n\t\t}\n\t});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-git/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,SAAS,YAAY,CAAC,GAAW;IAChC,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,kCAAkC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,EAAgB,EAAE,GAAqB;IAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,MAAM,EAAE,CAAC;QACZ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,OAAO;SACd,CAAC,CAAC;IACJ,CAAC;SAAM,CAAC;QACP,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACjC,EAAE,EAAE,YAAY;YAChB,IAAI,EAAE,SAAS;SACf,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAEvF,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACzC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Powerbar Git Producer\n *\n * Shows the current git branch.\n * Segment ID: \"git-branch\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\nfunction getGitBranch(cwd: string): string | undefined {\n\ttry {\n\t\tconst head = readFileSync(join(cwd, \".git\", \"HEAD\"), \"utf-8\").trim();\n\t\tif (head.startsWith(\"ref: refs/heads/\")) {\n\t\t\treturn head.slice(16);\n\t\t}\n\t\t// Detached HEAD — show short hash\n\t\treturn head.slice(0, 8);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction emitBranch(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst branch = getGitBranch(ctx.cwd);\n\tif (branch) {\n\t\tpi.events.emit(\"powerbar:update\", {\n\t\t\tid: \"git-branch\",\n\t\t\ttext: branch,\n\t\t\ticon: \"⎇\",\n\t\t\tcolor: \"muted\",\n\t\t});\n\t} else {\n\t\tpi.events.emit(\"powerbar:update\", {\n\t\t\tid: \"git-branch\",\n\t\t\ttext: undefined,\n\t\t});\n\t}\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"git-branch\", label: \"Git Branch\" });\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\temitBranch(pi, ctx);\n\t});\n\n\t// Refresh after bash commands (user may have changed branches)\n\tpi.on(\"tool_result\", async (event, ctx) => {\n\t\tif (event.toolName === \"bash\") {\n\t\t\temitBranch(pi, ctx);\n\t\t}\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-model/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAsBpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkB9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-model/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAsBpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAc9D"}
@@ -26,9 +26,6 @@ export default function createExtension(pi) {
26
26
  pi.on("session_start", async (_event, ctx) => {
27
27
  emitModel(pi, ctx);
28
28
  });
29
- pi.on("session_switch", async (_event, ctx) => {
30
- emitModel(pi, ctx);
31
- });
32
29
  pi.on("model_select", async (_event, ctx) => {
33
30
  emitModel(pi, ctx);
34
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-model/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,SAAS,SAAS,CAAC,EAAgB,EAAE,GAAqB;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACzB,IAAI,IAAI,GAAG,OAAO,CAAC;IAEnB,iDAAiD;IACjD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACjC,EAAE,EAAE,OAAO;QACX,IAAI;QACJ,KAAK,EAAE,KAAK;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAE7E,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC7C,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACzC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Powerbar Model Producer\n *\n * Shows the current model name and thinking level.\n * Segment ID: \"model\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nfunction emitModel(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst model = ctx.model;\n\tif (!model) return;\n\n\tconst modelId = model.id;\n\tlet text = modelId;\n\n\t// Add thinking level if model supports reasoning\n\tif (model.reasoning) {\n\t\tconst level = pi.getThinkingLevel();\n\t\ttext = level === \"off\" ? `${modelId} · off` : `${modelId} · ${level}`;\n\t}\n\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"model\",\n\t\ttext,\n\t\tcolor: \"dim\",\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"model\", label: \"Model\" });\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n\n\tpi.on(\"session_switch\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n\n\tpi.on(\"model_select\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n\n\tpi.on(\"turn_start\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-model/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,SAAS,SAAS,CAAC,EAAgB,EAAE,GAAqB;IACzD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;IACzB,IAAI,IAAI,GAAG,OAAO,CAAC;IAEnB,iDAAiD;IACjD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,KAAK,EAAE,CAAC;IACvE,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACjC,EAAE,EAAE,OAAO;QACX,IAAI;QACJ,KAAK,EAAE,KAAK;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAE7E,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACzC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Powerbar Model Producer\n *\n * Shows the current model name and thinking level.\n * Segment ID: \"model\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nfunction emitModel(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst model = ctx.model;\n\tif (!model) return;\n\n\tconst modelId = model.id;\n\tlet text = modelId;\n\n\t// Add thinking level if model supports reasoning\n\tif (model.reasoning) {\n\t\tconst level = pi.getThinkingLevel();\n\t\ttext = level === \"off\" ? `${modelId} · off` : `${modelId} · ${level}`;\n\t}\n\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"model\",\n\t\ttext,\n\t\tcolor: \"dim\",\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"model\", label: \"Model\" });\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n\n\tpi.on(\"model_select\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n\n\tpi.on(\"turn_start\", async (_event, ctx) => {\n\t\temitModel(pi, ctx);\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-provider/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAapF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAkB9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-provider/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAapF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAc9D"}
@@ -19,9 +19,6 @@ export default function createExtension(pi) {
19
19
  pi.on("session_start", async (_event, ctx) => {
20
20
  emitProvider(pi, ctx);
21
21
  });
22
- pi.on("session_switch", async (_event, ctx) => {
23
- emitProvider(pi, ctx);
24
- });
25
22
  pi.on("model_select", async (_event, ctx) => {
26
23
  emitProvider(pi, ctx);
27
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-provider/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,SAAS,YAAY,CAAC,EAAgB,EAAE,GAAqB;IAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACjC,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,KAAK,EAAE,KAAK;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAEnF,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC7C,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACzC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Powerbar Provider Producer\n *\n * Shows the current LLM provider name.\n * Segment ID: \"provider\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nfunction emitProvider(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst model = ctx.model;\n\tif (!model) return;\n\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"provider\",\n\t\ttext: model.provider,\n\t\tcolor: \"dim\",\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"provider\", label: \"Provider\" });\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n\n\tpi.on(\"session_switch\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n\n\tpi.on(\"model_select\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n\n\tpi.on(\"turn_start\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-provider/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,SAAS,YAAY,CAAC,EAAgB,EAAE,GAAqB;IAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO;IAEnB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QACjC,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,KAAK,EAAE,KAAK;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAgB;IACvD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAEnF,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC5C,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QACzC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Powerbar Provider Producer\n *\n * Shows the current LLM provider name.\n * Segment ID: \"provider\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nfunction emitProvider(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst model = ctx.model;\n\tif (!model) return;\n\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"provider\",\n\t\ttext: model.provider,\n\t\tcolor: \"dim\",\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"provider\", label: \"Provider\" });\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n\n\tpi.on(\"model_select\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n\n\tpi.on(\"turn_start\", async (_event, ctx) => {\n\t\temitProvider(pi, ctx);\n\t});\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-tokens/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAgDpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAU9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/powerbar-tokens/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,+BAA+B,CAAC;AAgDpF,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAS9D"}
@@ -51,7 +51,6 @@ export default function createExtension(pi) {
51
51
  pi.events.emit("powerbar:register-segment", { id: "tokens", label: "Tokens" });
52
52
  // Reset on new/switched session
53
53
  pi.on("session_start", async () => resetTokens(pi));
54
- pi.on("session_switch", async () => resetTokens(pi));
55
54
  // Update frequently during agent work
56
55
  pi.on("tool_result", async (_event, ctx) => emitTokens(pi, ctx));
57
56
  pi.on("turn_end", async (_event, ctx) => emitTokens(pi, ctx));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-tokens/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Powerbar Tokens Producer\n *\n * Shows cumulative token stats and session cost.\n * Segment ID: \"tokens\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\tif (count < 10000000) return `${(count / 1000000).toFixed(1)}M`;\n\treturn `${Math.round(count / 1000000)}M`;\n}\n\nfunction emitTokens(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst entries = ctx.sessionManager.getEntries();\n\n\tlet totalInput = 0;\n\tlet totalOutput = 0;\n\tlet totalCost = 0;\n\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\ttotalInput += entry.message.usage.input;\n\t\t\ttotalOutput += entry.message.usage.output;\n\t\t\ttotalCost += entry.message.usage.cost.total;\n\t\t}\n\t}\n\n\tif (totalInput === 0 && totalOutput === 0) return;\n\n\tconst parts: string[] = [];\n\tparts.push(`↑${formatTokens(totalInput)}`);\n\tparts.push(`↓${formatTokens(totalOutput)}`);\n\tif (totalCost > 0) {\n\t\tparts.push(`$${totalCost.toFixed(2)}`);\n\t}\n\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"tokens\",\n\t\ttext: parts.join(\" \"),\n\t\tcolor: \"dim\",\n\t});\n}\n\nfunction resetTokens(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"tokens\",\n\t\ttext: undefined,\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"tokens\", label: \"Tokens\" });\n\n\t// Reset on new/switched session\n\tpi.on(\"session_start\", async () => resetTokens(pi));\n\tpi.on(\"session_switch\", async () => resetTokens(pi));\n\n\t// Update frequently during agent work\n\tpi.on(\"tool_result\", async (_event, ctx) => emitTokens(pi, ctx));\n\tpi.on(\"turn_end\", async (_event, ctx) => emitTokens(pi, ctx));\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/powerbar-tokens/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Powerbar Tokens Producer\n *\n * Shows cumulative token stats and session cost.\n * Segment ID: \"tokens\"\n */\n\nimport type { ExtensionAPI, ExtensionContext } from \"@mariozechner/pi-coding-agent\";\n\nfunction formatTokens(count: number): string {\n\tif (count < 1000) return count.toString();\n\tif (count < 10000) return `${(count / 1000).toFixed(1)}k`;\n\tif (count < 1000000) return `${Math.round(count / 1000)}k`;\n\tif (count < 10000000) return `${(count / 1000000).toFixed(1)}M`;\n\treturn `${Math.round(count / 1000000)}M`;\n}\n\nfunction emitTokens(pi: ExtensionAPI, ctx: ExtensionContext): void {\n\tconst entries = ctx.sessionManager.getEntries();\n\n\tlet totalInput = 0;\n\tlet totalOutput = 0;\n\tlet totalCost = 0;\n\n\tfor (const entry of entries) {\n\t\tif (entry.type === \"message\" && entry.message.role === \"assistant\") {\n\t\t\ttotalInput += entry.message.usage.input;\n\t\t\ttotalOutput += entry.message.usage.output;\n\t\t\ttotalCost += entry.message.usage.cost.total;\n\t\t}\n\t}\n\n\tif (totalInput === 0 && totalOutput === 0) return;\n\n\tconst parts: string[] = [];\n\tparts.push(`↑${formatTokens(totalInput)}`);\n\tparts.push(`↓${formatTokens(totalOutput)}`);\n\tif (totalCost > 0) {\n\t\tparts.push(`$${totalCost.toFixed(2)}`);\n\t}\n\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"tokens\",\n\t\ttext: parts.join(\" \"),\n\t\tcolor: \"dim\",\n\t});\n}\n\nfunction resetTokens(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:update\", {\n\t\tid: \"tokens\",\n\t\ttext: undefined,\n\t});\n}\n\nexport default function createExtension(pi: ExtensionAPI): void {\n\tpi.events.emit(\"powerbar:register-segment\", { id: \"tokens\", label: \"Tokens\" });\n\n\t// Reset on new/switched session\n\tpi.on(\"session_start\", async () => resetTokens(pi));\n\n\t// Update frequently during agent work\n\tpi.on(\"tool_result\", async (_event, ctx) => emitTokens(pi, ctx));\n\tpi.on(\"turn_end\", async (_event, ctx) => emitTokens(pi, ctx));\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juanibiapina/pi-powerbar",
3
- "version": "0.7.1",
3
+ "version": "0.8.0",
4
4
  "description": "Pi extension that renders a persistent powerline status bar with left/right segments updated via events",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -46,11 +46,11 @@
46
46
  "@marckrenn/pi-sub-core": "^1.3.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@biomejs/biome": "2.4.1",
50
- "@juanibiapina/pi-extension-settings": "^0.6.0",
49
+ "@biomejs/biome": "2.4.10",
50
+ "@juanibiapina/pi-extension-settings": "^0.6.1",
51
51
  "@marckrenn/pi-sub-shared": "^1.3.0",
52
- "@mariozechner/pi-coding-agent": "^0.62.0",
52
+ "@mariozechner/pi-coding-agent": "^0.65.2",
53
53
  "@types/node": "^25.2.3",
54
- "typescript": "^5.9.3"
54
+ "typescript": "^6.0.2"
55
55
  }
56
56
  }