@heyhuynhgiabuu/pi-pretty 0.6.25 → 0.6.27

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.
Files changed (61) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +47 -17
  3. package/dist/config.d.ts +16 -0
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +30 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/fff.d.ts +16 -1
  8. package/dist/fff.d.ts.map +1 -1
  9. package/dist/fff.js +139 -33
  10. package/dist/fff.js.map +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +192 -43
  13. package/dist/index.js.map +1 -1
  14. package/dist/prompt-editor.d.ts +11 -0
  15. package/dist/prompt-editor.d.ts.map +1 -0
  16. package/dist/prompt-editor.js +78 -0
  17. package/dist/prompt-editor.js.map +1 -0
  18. package/dist/render.d.ts +9 -1
  19. package/dist/render.d.ts.map +1 -1
  20. package/dist/render.js +25 -9
  21. package/dist/render.js.map +1 -1
  22. package/dist/tools/bash.d.ts.map +1 -1
  23. package/dist/tools/bash.js +73 -30
  24. package/dist/tools/bash.js.map +1 -1
  25. package/dist/tools/find.d.ts.map +1 -1
  26. package/dist/tools/find.js +29 -10
  27. package/dist/tools/find.js.map +1 -1
  28. package/dist/tools/grep.d.ts.map +1 -1
  29. package/dist/tools/grep.js +20 -10
  30. package/dist/tools/grep.js.map +1 -1
  31. package/dist/tools/ls.d.ts.map +1 -1
  32. package/dist/tools/ls.js +10 -5
  33. package/dist/tools/ls.js.map +1 -1
  34. package/dist/tools/metrics.d.ts +6 -1
  35. package/dist/tools/metrics.d.ts.map +1 -1
  36. package/dist/tools/metrics.js +21 -8
  37. package/dist/tools/metrics.js.map +1 -1
  38. package/dist/tools/read.d.ts +2 -1
  39. package/dist/tools/read.d.ts.map +1 -1
  40. package/dist/tools/read.js +93 -30
  41. package/dist/tools/read.js.map +1 -1
  42. package/dist/types.d.ts +13 -3
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/working-indicator.d.ts +91 -26
  45. package/dist/working-indicator.d.ts.map +1 -1
  46. package/dist/working-indicator.js +259 -77
  47. package/dist/working-indicator.js.map +1 -1
  48. package/package.json +7 -6
  49. package/src/config.ts +51 -0
  50. package/src/fff.ts +158 -29
  51. package/src/index.ts +207 -47
  52. package/src/prompt-editor.ts +102 -0
  53. package/src/render.ts +30 -11
  54. package/src/tools/bash.ts +94 -32
  55. package/src/tools/find.ts +39 -17
  56. package/src/tools/grep.ts +26 -15
  57. package/src/tools/ls.ts +19 -10
  58. package/src/tools/metrics.ts +28 -8
  59. package/src/tools/read.ts +122 -30
  60. package/src/types.ts +14 -3
  61. package/src/working-indicator.ts +309 -88
@@ -1,19 +1,17 @@
1
1
  /**
2
- * omp-style shimmer working indicator (widget takeover).
2
+ * omp-style shimmer working indicator.
3
3
  *
4
4
  * Ports the shimmer sweep from oh-my-pi's `modes/theme/shimmer.ts`: the sweep
5
5
  * is discretized into one pre-rendered frame per band position, cycled at
6
6
  * 1000/30 ms so the band travels 30 cells/second — omp's exact speed.
7
7
  *
8
- * Why a widget: the host `Loader` extends `Text` with a hardcoded paddingX=1,
9
- * and `setWorkingIndicator({ frames })` cannot change host component layout.
10
- * To render the row flush-left we hide the host loader
11
- * (`setWorkingVisible(false)`) and install our own zero-padding component via
12
- * `setWidget(..., "aboveEditor")`, animating it with a 33ms interval.
8
+ * On hosts that expose Pi's embedded working-status API, frames are delegated
9
+ * to the host so the row is rendered in the editor's top border. Older hosts
10
+ * without that API use the zero-padding widget fallback above the editor.
13
11
  *
14
- * Frame layout: `<dim spinner> <shimmer text> <dim interrupt hint>`, one full
15
- * sweep per phrase — `texts` rotates through phrases chapter by chapter with
16
- * a continuous spinner phase.
12
+ * Frame layout: `<dim spinner> <shimmer text>`, one full sweep per phrase —
13
+ * `texts` rotates through phrases chapter by chapter with a continuous spinner
14
+ * phase. The extension adds no interrupt hint or token-count suffix.
17
15
  */
18
16
  import { type ThinkingIndicatorConfig, type WorkingIndicatorConfig } from "./config.js";
19
17
  /** One cell per frame at 33ms = omp's 30 cells/second band speed. */
@@ -32,6 +30,7 @@ export interface WorkingIndicatorSettings {
32
30
  mode: WorkingIndicatorMode;
33
31
  palette: WorkingIndicatorPalette;
34
32
  bold: boolean;
33
+ /** @deprecated Retained for config compatibility; no interrupt hint is rendered. */
35
34
  hint: boolean;
36
35
  /** Tint mid/high tiers (and dim the spinner) with a per-session accent color. */
37
36
  sessionAccent: boolean;
@@ -70,7 +69,7 @@ export interface WorkingFrameOptions {
70
69
  spinnerColor?: string;
71
70
  /** Wrap every frame in italic (pi's hidden-thinking label is italic). */
72
71
  italic?: boolean;
73
- /** Pre-colored suffix (e.g. the dim interrupt hint) appended to every frame. */
72
+ /** @deprecated Retained for call-site compatibility; suffixes are not rendered. */
74
73
  hint?: string;
75
74
  intervalMs?: number;
76
75
  }
@@ -83,19 +82,27 @@ export declare function buildWorkingFrames(texts: string[], options: WorkingFram
83
82
  frames: string[];
84
83
  intervalMs: number;
85
84
  };
85
+ /** @deprecated The working row no longer displays token stats. */
86
+ export declare function workingTokens(message: unknown): number;
86
87
  /** Slice of the pi-tui TUI instance the widget needs. */
87
88
  export interface WidgetTuiLike {
88
89
  requestRender(): void;
89
90
  }
90
91
  /**
91
92
  * Zero-padding working-row component. The host renders whatever `render()`
92
- * returns with no margins, so the row sits flush-left — the thing the frames
93
- * API could not do.
93
+ * returns with no margins, so the legacy widget row sits flush-left without
94
+ * relying on the host loader's padding.
94
95
  */
95
96
  export declare class WorkingWidget {
96
97
  #private;
97
98
  setFrames(frames: string[], intervalMs: number): void;
98
99
  attach(tui: WidgetTuiLike): void;
100
+ /** Ask the host for a render — lets non-widget consumers (the thinking label
101
+ * ticker) reuse this widget's TUI handle instead of relying on natural
102
+ * streaming renders. */
103
+ requestRender(): void;
104
+ /** @deprecated Token stats are owned by Pi and are no longer rendered here. */
105
+ setStats(_text: string | undefined): void;
99
106
  start(): void;
100
107
  stop(): void;
101
108
  /** Flush-left single line; invisible (no lines) while stopped. */
@@ -116,14 +123,58 @@ export interface ThinkingUiLike {
116
123
  theme?: WorkingThemeLike;
117
124
  setHiddenThinkingLabel(label?: string): void;
118
125
  }
126
+ /** Controller for the host-component label interception. */
127
+ export interface PerRowThinkingLabels {
128
+ /** Mark the message currently streaming a thinking block (its row animates). */
129
+ setActive(timestamp: number): void;
130
+ /** Freeze a message's completed thinking duration in ms (its row shows
131
+ * `Thought for X` derived from this). */
132
+ complete(timestamp: number, durationMs: number): void;
133
+ /** Drop the active mark (run ended); completed rows keep their durations. */
134
+ clearActive(): void;
135
+ /** Restore the original prototype setter. */
136
+ uninstall(): void;
137
+ }
138
+ /**
139
+ * Intercept the host's per-row label fan-out method
140
+ * (`AssistantMessageComponent.prototype.setHiddenThinkingLabel`): each row
141
+ * substitutes the incoming global label with its own — the streaming row
142
+ * animates, completed rows stay frozen at their own `Thought for X`, unknown
143
+ * rows fall back to pi's default. Any per-call failure passes the incoming
144
+ * label through unchanged, so a host internals change degrades to pi-pretty's
145
+ * global-label behavior instead of breaking. Durations live per session.
146
+ */
147
+ export declare function installPerRowThinkingLabels(componentClass: unknown): PerRowThinkingLabels | undefined;
119
148
  export interface ThinkingLabelAnimator {
120
- /** Apply the next shimmer frame to the hidden-thinking label. */
121
- tick(): void;
149
+ /** Apply the next shimmer frame, rebuilding frames when the label changes. */
150
+ tick(label?: string): void;
151
+ /** Apply a non-animated label (the host supplies its normal thinking style). */
152
+ show(label: string): void;
122
153
  /** Restore pi's default static label. */
123
154
  restore(): void;
124
- /** Pre-rendered label frames (exposed for diagnostics). */
155
+ /** Current pre-rendered label frames (exposed for diagnostics). */
125
156
  readonly frames: readonly string[];
126
157
  }
158
+ export interface ThinkingTimer {
159
+ /** Render the active label with the current elapsed duration. */
160
+ tick(): void;
161
+ /** Freeze the elapsed duration; returns the total in milliseconds, or
162
+ * undefined when the timer was already terminal. */
163
+ complete(): number | undefined;
164
+ /** Restore pi's default label and make the timer terminal. */
165
+ restore(): void;
166
+ }
167
+ /** Format sub-second elapsed time as milliseconds, then use compact whole seconds. */
168
+ export declare function formatThinkingDuration(elapsedMs: number): string;
169
+ /**
170
+ * Couple elapsed-time wording to the label animator through an injected clock.
171
+ * The timer starts on the first thinking delta, freezes once, and is terminal
172
+ * after completion or restore. `startElapsedMs` resumes a later run in the
173
+ * same message from its accumulated thinking time (per-message semantics:
174
+ * the host renders one label line per thinking run, all sharing the message
175
+ * label, so a fresh-zero restart would visibly rewind earlier lines).
176
+ */
177
+ export declare function createThinkingTimer(animator: ThinkingLabelAnimator, now?: () => number, startElapsedMs?: number): ThinkingTimer;
127
178
  /**
128
179
  * True while a streaming assistant message is currently emitting a thinking
129
180
  * block (its last content block). Used to gate label ticks to the thinking
@@ -135,27 +186,36 @@ export declare function thinkingBlockActive(message: unknown): boolean;
135
186
  * Animate pi's hidden-thinking label ("Thinking...") with the same shimmer as
136
187
  * the working row. Pi renders the label as static italic `thinkingText` text;
137
188
  * the only extension lever is `setHiddenThinkingLabel(label)`, which rebuilds
138
- * chat children — the streaming component already rebuilds per delta, so the
139
- * animator is driven at a throttled cadence (100ms) from index.ts while the
140
- * agent streams and thinking blocks are hidden.
189
+ * chat children, so index.ts drives it at 30fps only while the streaming
190
+ * message's last block is thinking. The elapsed label is rebuilt when its
191
+ * displayed duration changes; the shimmer frame still advances every tick.
141
192
  *
142
193
  * Tiers: low = theme `thinkingText` (pi's own label look), mid/high = session
143
194
  * accent when enabled; every frame is italic like pi's label; no spinner.
144
195
  */
145
196
  export declare function createThinkingLabelAnimator(ui: ThinkingUiLike, workSettings: WorkingIndicatorSettings, sessionName?: string, thinking?: ThinkingIndicatorSettings): ThinkingLabelAnimator;
146
- /** Structural slice of pi's Theme needed for the hint, palette, and thinking label. */
197
+ /** Structural slice of pi's Theme needed for the palette and thinking label. */
147
198
  export interface WorkingThemeLike {
148
- /** Narrowed to the only color the hint needs; pi's ThemeColor satisfies it. */
199
+ /** Retained for compatibility with older theme adapters. */
149
200
  fg?: (name: "dim", text: string) => string;
150
201
  getFgAnsi?: (name: "dim" | "muted" | "accent" | "thinkingText") => string;
151
202
  }
203
+ export interface WorkingStatusOptionsLike {
204
+ frames?: string[];
205
+ intervalMs?: number;
206
+ }
152
207
  export interface WorkingUiLike {
153
208
  theme?: WorkingThemeLike;
209
+ /** Hosts with Pi's embedded working-status API render this in the editor border. */
210
+ setWorkingIndicator?: (options?: WorkingStatusOptionsLike) => void;
211
+ /** Clear the host message appended after a custom native frame. */
212
+ setWorkingMessage?: (message?: string) => void;
154
213
  setWorkingVisible(visible: boolean): void;
155
214
  setWidget(key: string, factory: ((tui: WidgetTuiLike, theme: unknown) => WorkingWidget) | undefined, options?: {
156
215
  placement?: "aboveEditor" | "belowEditor";
157
216
  }): void;
158
217
  }
218
+ /** @deprecated Retained for compatibility with the former hint-resolution seam. */
159
219
  export interface KeybindingsLike {
160
220
  getKeys(name: string): string[];
161
221
  }
@@ -164,18 +224,23 @@ export interface WorkingIndicatorController {
164
224
  start(): void;
165
225
  /** Streaming ended — hide the row and pause the animation. */
166
226
  stop(): void;
167
- /** Remove the widget and stop the animation. */
227
+ /** Remove the indicator and stop the animation. */
168
228
  dispose(): void;
229
+ /** @deprecated Token stats are owned by Pi and are no longer rendered here. */
230
+ setStats(text: string | undefined): void;
231
+ /** Request a host render for consumers that drive another animated label. */
232
+ requestRender(): void;
169
233
  /** Pre-rendered frames (exposed for diagnostics). */
170
234
  readonly frames: readonly string[];
171
235
  }
172
236
  /**
173
- * Take over pi's working row with our own flush-left shimmer widget.
237
+ * Install the custom working shimmer and return its lifecycle controller.
174
238
  *
175
- * Installs a zero-padding component above the editor and hides the host
176
- * loader; returns a controller the host lifecycle drives (`start` on
177
- * agent_start, `stop` on agent_end). No-op (host defaults untouched) when
178
- * disabled or the phrase list is empty.
239
+ * Current Pi hosts receive the pre-rendered frames through the embedded
240
+ * working-status API, which places them in the editor's top border. Older
241
+ * hosts use a zero-padding widget above the editor. The host lifecycle drives
242
+ * the controller (`start` on agent_start, `stop` on agent_end); disabled or
243
+ * empty phrase settings leave host defaults untouched.
179
244
  */
180
245
  export declare function installWorkingIndicator(ui: WorkingUiLike, settings: WorkingIndicatorSettings, deps?: {
181
246
  getKeybindings?: () => KeybindingsLike | undefined | Promise<KeybindingsLike | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"working-indicator.d.ts","sourceRoot":"","sources":["../src/working-indicator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"working-indicator.d.ts","sourceRoot":"","sources":["../src/working-indicator.ts"],"names":[],"mappings":"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"}