@jack-yang/opencode-tps-meter 1.0.1 → 1.0.2

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 (2) hide show
  1. package/package.json +1 -1
  2. package/tui.tsx +9 -18
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@jack-yang/opencode-tps-meter",
4
- "version": "1.0.1",
4
+ "version": "1.0.2",
5
5
  "description": "Live TPS/AVG/TTFT meter plugin for OpenCode TUI with color-coded speed tiers",
6
6
  "type": "module",
7
7
  "exports": {
package/tui.tsx CHANGED
@@ -190,9 +190,7 @@ function MeterDisplay(props: {
190
190
  spinnerCells: () => { glyph: string; color: RGBA }[]
191
191
  subscribe: (listener: Listener) => () => void
192
192
  }) {
193
- const cellCount = props.config.spinner.enabled ? props.config.spinner.cells : 0
194
- const spinRefs: (TextRenderable | undefined)[] = []
195
- let sepRef: TextRenderable | undefined
193
+ let particleRef: TextRenderable | undefined
196
194
  let tpsRef: TextRenderable | undefined
197
195
  let avgRef: TextRenderable | undefined
198
196
  let ttftRef: TextRenderable | undefined
@@ -208,18 +206,14 @@ function MeterDisplay(props: {
208
206
  const avg = stats && stats.totalDurationMs > 0 ? stats.totalOutputTokens / (stats.totalDurationMs / 1000) : undefined
209
207
  const ttft = props.tracker.liveTtftBySession[props.sessionID]
210
208
  const thinkingNow = props.tracker.thinkingBySession[props.sessionID] === true && props.config.spinner.enabled
211
- if (thinkingNow) {
212
- if (sepRef) sepRef.content = " "
213
- const cells = props.spinnerCells()
214
- for (let i = 0; i < spinRefs.length; i++) {
215
- const ref = spinRefs[i]
216
- if (!ref) continue
217
- const cell = cells[i]
218
- if (cell) { ref.content = cell.glyph; ref.fg = cell.color }
209
+ if (particleRef) {
210
+ if (thinkingNow) {
211
+ const cells = props.spinnerCells()
212
+ particleRef.content = " " + cells.map((c) => c.glyph).join("")
213
+ particleRef.fg = cells[0]?.color ?? muted
214
+ } else {
215
+ particleRef.content = ""
219
216
  }
220
- } else {
221
- if (sepRef) sepRef.content = ""
222
- for (const ref of spinRefs) if (ref) ref.content = ""
223
217
  }
224
218
  if (tpsRef) {
225
219
  tpsRef.content = live !== undefined ? formatTps(live) ?? "--" : "--"
@@ -247,10 +241,7 @@ function MeterDisplay(props: {
247
241
  <text ref={(el: TextRenderable) => { avgRef = el; sync() }} fg={muted}>--</text>
248
242
  <text fg={muted}> | TTFT </text>
249
243
  <text ref={(el: TextRenderable) => { ttftRef = el; sync() }} fg={muted}>--</text>
250
- <text ref={(el: TextRenderable) => { sepRef = el; sync() }} fg={muted}></text>
251
- {Array.from({ length: cellCount }).map((_, i) => (
252
- <text ref={(el: TextRenderable) => { spinRefs[i] = el; sync() }} fg={muted}></text>
253
- ))}
244
+ <text ref={(el: TextRenderable) => { particleRef = el; sync() }} fg={muted}></text>
254
245
  </box>
255
246
  )
256
247
  }