pi-stereo-view 0.1.5 → 0.1.6
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/CHANGELOG.md +6 -0
- package/README.md +2 -2
- package/package.json +1 -1
- package/src/timestamps.ts +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.6 - 2026-10-24
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Hide clock placeholders and copy buttons for blocks without a known timestamp, including system notices. Their content remains visible without extra control rows.
|
|
8
|
+
|
|
3
9
|
## 0.1.5 - 2026-10-23
|
|
4
10
|
|
|
5
11
|
### Added
|
package/README.md
CHANGED
|
@@ -115,7 +115,7 @@ Press **Escape** or `[×]` to close search and restore your previous scroll posi
|
|
|
115
115
|
|
|
116
116
|
## Copy a block
|
|
117
117
|
|
|
118
|
-
Click the dim `⧉` icon below the right corner of a message, thinking, tool or other history block to copy its text. Copy buttons work in split and zoomed panels, even with timestamps hidden.
|
|
118
|
+
Click the dim `⧉` icon below the right corner of a message, thinking, tool or other history block to copy its text. Blocks without a known time have no copy button. Copy buttons work in split and zoomed panels, even with timestamps hidden.
|
|
119
119
|
|
|
120
120
|
Messages and thinking keep their original text/Markdown, without terminal colours, clocks or copy buttons. Copying a tool includes its name, arguments, saved result and linked late output. A late-output block also has its own button to copy just that block. Collapsed and off-screen text is included.
|
|
121
121
|
|
|
@@ -129,7 +129,7 @@ Use **Show copy buttons** in `≡` or `/stereo-view settings` to hide the icons
|
|
|
129
129
|
|
|
130
130
|
Conversation and Activity can show a dim local `HH:mm:ss` clock above each block on the left, with a small inset. The copy icon sits below the block on the right, so neither control takes width away from the text. New tool calls show their start time.
|
|
131
131
|
|
|
132
|
-
Older tool calls may show `~HH:mm:ss` for an approximate time.
|
|
132
|
+
Older tool calls may show `~HH:mm:ss` for an approximate time. Blocks without a known time show neither a clock nor a copy button; their content stays visible.
|
|
133
133
|
|
|
134
134
|
Use `≡` or `/stereo-view settings` to hide or show clocks. This setting survives restart. Clocks appear in split and zoomed panels, not in combined history. They are display-only and are not added to the conversation sent to the model.
|
|
135
135
|
|
package/package.json
CHANGED
package/src/timestamps.ts
CHANGED
|
@@ -32,7 +32,7 @@ const validTime = (value: unknown): number | undefined => {
|
|
|
32
32
|
/** Format a reliable source in the process's local zone; never substitute now. */
|
|
33
33
|
export function timestampLabel(value: unknown): string {
|
|
34
34
|
const time = validTime(value);
|
|
35
|
-
if (time === undefined) return "
|
|
35
|
+
if (time === undefined) return "";
|
|
36
36
|
const date = new Date(time);
|
|
37
37
|
return [date.getHours(), date.getMinutes(), date.getSeconds()]
|
|
38
38
|
.map(part => String(part).padStart(2, "0")).join(":");
|
|
@@ -176,15 +176,15 @@ export class TranscriptTimestamps {
|
|
|
176
176
|
toolCallId?: string;
|
|
177
177
|
};
|
|
178
178
|
if (name === "UserMessageComponent" || name === "SkillInvocationMessageComponent" || name === "BashExecutionComponent") {
|
|
179
|
-
return this.orderedLabels.get(component) ?? "
|
|
179
|
+
return this.orderedLabels.get(component) ?? "";
|
|
180
180
|
}
|
|
181
181
|
if (name === "ToolExecutionComponent") {
|
|
182
182
|
const id = native.toolCallId!;
|
|
183
183
|
const start = this.starts.get(id);
|
|
184
184
|
if (start !== undefined) return timestampLabel(start);
|
|
185
|
-
if (this.liveCalls.has(id)) return "
|
|
185
|
+
if (this.liveCalls.has(id)) return "";
|
|
186
186
|
const owner = this.owners.get(id);
|
|
187
|
-
return validTime(owner) === undefined ? "
|
|
187
|
+
return validTime(owner) === undefined ? "" : "~" + timestampLabel(owner);
|
|
188
188
|
}
|
|
189
189
|
const message = name === "AssistantMessageComponent" ? native.lastMessage : native.message;
|
|
190
190
|
return timestampLabel(message ? validTime(message.timestamp) ?? this.messageTimes.get(message) : native.entry?.timestamp);
|
|
@@ -245,13 +245,13 @@ export class CompactMessage extends Container {
|
|
|
245
245
|
};
|
|
246
246
|
}
|
|
247
247
|
private renderContent(width: number): string[] {
|
|
248
|
-
const label = this.
|
|
248
|
+
const label = this.label();
|
|
249
249
|
const gutter = this.gutter();
|
|
250
250
|
const theme = this.theme();
|
|
251
251
|
// Only the scrollbar needs a side gutter; controls have their own rows.
|
|
252
252
|
this.contentWidth = Math.max(1, width - gutter);
|
|
253
|
-
const time = label && visibleWidth(label) + 1 <= this.contentWidth ? " " + label : "";
|
|
254
|
-
const copy = this.copy && this.showCopy() && this.contentWidth >= COPY_CONTROL_WIDTH ? COPY_CONTROL : "";
|
|
253
|
+
const time = label && this.show() && visibleWidth(label) + 1 <= this.contentWidth ? " " + label : "";
|
|
254
|
+
const copy = label && this.copy && this.showCopy() && this.contentWidth >= COPY_CONTROL_WIDTH ? COPY_CONTROL : "";
|
|
255
255
|
const content = this.nativeCache.render(this.contentWidth, theme);
|
|
256
256
|
this.contentHeight = content.length;
|
|
257
257
|
const cached = this.formatted;
|