@hheei/pi-status 0.2.1 → 0.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.
package/dist/extension.js CHANGED
@@ -10,7 +10,7 @@ export default function piStatusExtension(pi) {
10
10
  const sessionId = extension.sessionManager.getSessionId();
11
11
  resources.add("response-status", () => status.dispose(sessionId));
12
12
  if (extension.mode === "tui") {
13
- extension.ui.setFooter((tui, theme, footerData) => new CompactFooterComponent(extension, tui, theme, footerData));
13
+ extension.ui.setFooter((tui, theme, footerData) => new CompactFooterComponent(extension, tui, theme, footerData, status));
14
14
  resources.add("footer", () => {
15
15
  extension.ui.setFooter(undefined);
16
16
  });
package/dist/footer.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
2
2
  import { type Component } from "@earendil-works/pi-tui";
3
- import { type ThemeLike } from "@hheei/pi-ext-core";
3
+ import { type ResponseStatusFeature, type ThemeLike } from "@hheei/pi-ext-core";
4
4
  type FooterFactory = NonNullable<Parameters<ExtensionContext["ui"]["setFooter"]>[0]>;
5
5
  export type ReadonlyFooterDataProvider = Parameters<FooterFactory>[2];
6
6
  export type FooterTheme = Parameters<FooterFactory>[1];
@@ -55,7 +55,7 @@ export declare class CompactFooterComponent implements Component {
55
55
  #private;
56
56
  constructor(extension: ExtensionContext, tui: {
57
57
  requestRender(): void;
58
- }, theme: FooterTheme, footerData: ReadonlyFooterDataProvider);
58
+ }, theme: FooterTheme, footerData: ReadonlyFooterDataProvider, statusFeature?: ResponseStatusFeature);
59
59
  invalidate(): void;
60
60
  dispose(): void;
61
61
  render(width: number): string[];
package/dist/footer.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { homedir } from "node:os";
2
2
  import { isAbsolute, relative, resolve, sep } from "node:path";
3
3
  import { visibleWidth } from "@earendil-works/pi-tui";
4
- import { fitRow, formatCompactNumber } from "@hheei/pi-ext-core";
4
+ import { fitRow, formatCompactNumber, } from "@hheei/pi-ext-core";
5
5
  /** Pi native status keys owned by other extensions. */
6
6
  const AUTO_TITLE_STATUS_KEY = "auto-title";
7
7
  const AGENT_STATUS_KEY = "pi-subagents";
@@ -142,18 +142,25 @@ export class CompactFooterComponent {
142
142
  #extension;
143
143
  #footerData;
144
144
  #theme;
145
+ #statusFeature;
145
146
  #unsubscribeBranch;
146
- constructor(extension, tui, theme, footerData) {
147
+ #unsubscribeStatus;
148
+ constructor(extension, tui, theme, footerData, statusFeature) {
147
149
  this.#extension = extension;
148
150
  this.#footerData = footerData;
149
151
  this.#theme = theme;
152
+ this.#statusFeature = statusFeature;
150
153
  this.#unsubscribeBranch = footerData.onBranchChange(() => {
151
154
  tui.requestRender();
152
155
  });
156
+ this.#unsubscribeStatus = statusFeature?.onUpdate(() => {
157
+ tui.requestRender();
158
+ });
153
159
  }
154
160
  invalidate() { }
155
161
  dispose() {
156
162
  this.#unsubscribeBranch?.();
163
+ this.#unsubscribeStatus?.();
157
164
  }
158
165
  render(width) {
159
166
  const cwd = this.#extension.sessionManager.getCwd();
@@ -172,7 +179,10 @@ export class CompactFooterComponent {
172
179
  const routed = this.#extension.routedModel;
173
180
  const modelPart = formatFooterModel(this.#extension.model, this.#extension.thinkingLevel, this.#theme, routed);
174
181
  const contextPart = formatFooterContext(this.#extension.getContextUsage(), this.#extension.model?.contextWindow, this.#theme);
175
- const line2Left = `${modelPart} ${this.#theme.fg("dim", "·")} ${contextPart}`;
182
+ const telemetry = this.#statusFeature?.getStatus(this.#theme);
183
+ const line2Left = telemetry
184
+ ? `${modelPart} ${this.#theme.fg("dim", "·")} ${contextPart} ${this.#theme.fg("dim", "·")} ${telemetry}`
185
+ : `${modelPart} ${this.#theme.fg("dim", "·")} ${contextPart}`;
176
186
  // Line 2 right: running child agents then TODO, joined by a dim separator. A missing
177
187
  // segment drops the separator with it. Any other extension status is only a fallback,
178
188
  // so auto-title (line 1) and these two keys never leak in twice.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hheei/pi-status",
3
- "version": "0.2.1",
3
+ "version": "0.4.0",
4
4
  "description": "Response telemetry for Pi sessions.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -35,15 +35,15 @@
35
35
  "access": "public"
36
36
  },
37
37
  "dependencies": {
38
- "@hheei/pi-ext-core": "^0.3.0"
38
+ "@hheei/pi-ext-core": "^0.6.0"
39
39
  },
40
40
  "peerDependencies": {
41
- "@earendil-works/pi-coding-agent": ">=1.2.0",
42
- "@earendil-works/pi-tui": ">=1.2.0"
41
+ "@earendil-works/pi-coding-agent": ">=1.3.0",
42
+ "@earendil-works/pi-tui": ">=1.3.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@earendil-works/pi-coding-agent": "1.2.0",
46
- "@earendil-works/pi-tui": "1.2.0"
45
+ "@earendil-works/pi-coding-agent": "1.3.0",
46
+ "@earendil-works/pi-tui": "1.3.0"
47
47
  },
48
48
  "scripts": {
49
49
  "build": "node -e \"import { rmSync } from 'node:fs'; rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json"