@aemonge-dev/pi-stardeck 0.9.3 → 0.9.4
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/package.json
CHANGED
|
@@ -357,32 +357,22 @@ function activityTile(state: HeaderDeckState, theme: Theme): string {
|
|
|
357
357
|
return label ? color(theme, 'text', label) : color(theme, 'dim', 'awaiting Human');
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
function formatTurnElapsed(ms: number): string {
|
|
361
|
-
// Matches the turn meter's span-idle ceiling: 99m59s999ms → `99:59`.
|
|
362
|
-
const bounded = Math.min(
|
|
363
|
-
(99 * 60 + 59) * 1_000 + 999,
|
|
364
|
-
Math.max(0, Math.floor(Number.isFinite(ms) ? ms : 0)),
|
|
365
|
-
);
|
|
366
|
-
const totalSeconds = Math.floor(bounded / 1_000);
|
|
367
|
-
return `${Math.floor(totalSeconds / 60)}:${String(totalSeconds % 60).padStart(2, '0')}`;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
360
|
function turnCostTile(state: HeaderDeckState, theme: Theme): string {
|
|
371
|
-
// Activity lane right: the turn cluster —
|
|
372
|
-
//
|
|
373
|
-
//
|
|
374
|
-
//
|
|
361
|
+
// Activity lane right: the turn cluster — turn time and tokens in one
|
|
362
|
+
// aligned group (Human amendment 2026-10-23: the deck's only timer;
|
|
363
|
+
// Human amendment 2026-10-24: the liveness icon is gone — the ticking
|
|
364
|
+
// chronometer `mmm:ss'cc` is the liveness). Idle keeps the accepted
|
|
365
|
+
// dim `— · 0 tok`; the quiet-activity-row contract depends on it.
|
|
375
366
|
const turn = state.header?.turn ?? null;
|
|
376
367
|
if (!turn) return '';
|
|
377
368
|
if (turn.tokens <= 0 && turn.elapsedMs <= 0) {
|
|
378
369
|
return color(theme, 'dim', '— · 0 tok');
|
|
379
370
|
}
|
|
380
|
-
return `${color(theme, '
|
|
371
|
+
return `${color(theme, 'warning', formatDeckElapsed(turn.elapsedMs), true)} ${color(
|
|
381
372
|
theme,
|
|
382
|
-
'
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
)} ${color(theme, 'dim', '·')} ${color(theme, 'warning', formatTokens(turn.tokens))}`;
|
|
373
|
+
'dim',
|
|
374
|
+
'·',
|
|
375
|
+
)} ${color(theme, 'warning', formatTokens(turn.tokens))}`;
|
|
386
376
|
}
|
|
387
377
|
|
|
388
378
|
function gitRight(state: HeaderDeckState, theme: Theme): string {
|
|
@@ -24,8 +24,10 @@ export const DECK_TITLE_ACTIVITY_CLASSES = [
|
|
|
24
24
|
|
|
25
25
|
export type DeckTitleActivityClass = (typeof DECK_TITLE_ACTIVITY_CLASSES)[number];
|
|
26
26
|
|
|
27
|
-
/** Short target label bound from the accepted schema
|
|
28
|
-
|
|
27
|
+
/** Short target label bound from the accepted schema (Human amendment
|
|
28
|
+
* 2026-10-24: 48 → 120, mirroring the status producer — the deck's
|
|
29
|
+
* render-time width crop owns the real limit now). */
|
|
30
|
+
export const DECK_TITLE_TARGET_MAX = 120;
|
|
29
31
|
|
|
30
32
|
/** Task/step totals bound from the accepted schema. */
|
|
31
33
|
export const DECK_TITLE_TOTAL_MAX = 999;
|
|
@@ -22,8 +22,11 @@ export const TITLE_ACTIVITY_CLASSES = [
|
|
|
22
22
|
|
|
23
23
|
export type TitleActivityClass = (typeof TITLE_ACTIVITY_CLASSES)[number];
|
|
24
24
|
|
|
25
|
-
/** Short target label bound from the accepted schema
|
|
26
|
-
|
|
25
|
+
/** Short target label bound from the accepted schema (Human amendment
|
|
26
|
+
* 2026-10-24: 48 → 120 — the deck's activity lane now owns the full
|
|
27
|
+
* width beside the turn cluster, so the protocol bound yields to the
|
|
28
|
+
* render-time crop instead of pre-cutting subagent/bash labels). */
|
|
29
|
+
export const TITLE_TARGET_MAX = 120;
|
|
27
30
|
|
|
28
31
|
/** Task/step totals bound from the accepted schema. */
|
|
29
32
|
export const TITLE_TOTAL_MAX = 999;
|
|
@@ -165,7 +168,7 @@ function parseTitleWaiver(value: unknown): TitleWaiverState | null | undefined {
|
|
|
165
168
|
|
|
166
169
|
/**
|
|
167
170
|
* Defensive parser for incoming title-state payloads. Unknown versions,
|
|
168
|
-
* malformed shapes, and out-of-bounds values (target >
|
|
171
|
+
* malformed shapes, and out-of-bounds values (target > 120 characters,
|
|
169
172
|
* totals > 999) reject the whole object with `null`; it never throws.
|
|
170
173
|
*/
|
|
171
174
|
export function parseTitleState(value: unknown): TitleState | null {
|