@cad0p/pi-timestamps 0.1.1 → 0.1.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.
@@ -1,17 +1,12 @@
1
1
  /**
2
2
  * message-timestamps
3
3
  *
4
- * Appends a dim-styled UTC ISO timestamp to every user/assistant message.
4
+ * Appends a dim-styled UTC ISO timestamp to every assistant message.
5
5
  * Uses ANSI dim escape codes for visual parity with thinking blocks.
6
6
  * Strips at `context` so the LLM never sees them.
7
7
  */
8
8
 
9
- import type {
10
- AssistantMessage,
11
- Message as PiAiMessage,
12
- TextContent,
13
- UserMessage,
14
- } from '@earendil-works/pi-ai';
9
+ import type { AssistantMessage, Message as PiAiMessage, TextContent } from '@earendil-works/pi-ai';
15
10
  import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
16
11
 
17
12
  const DIM = '\x1b[2m';
@@ -49,7 +44,7 @@ export function stripTimestamp(content: PiAiMessage['content']): any {
49
44
  return content;
50
45
  }
51
46
 
52
- function getTimestamp(msg: UserMessage | AssistantMessage): number {
47
+ function getTimestamp(msg: AssistantMessage): number {
53
48
  return msg.timestamp ?? Date.now();
54
49
  }
55
50
 
@@ -63,11 +58,12 @@ export default function (pi: ExtensionAPI) {
63
58
  pi.on('message_end' as any, async (event: MessageEndEvent, _ctx: any) => {
64
59
  const msg = event.message;
65
60
 
66
- if (msg.role !== 'user' && msg.role !== 'assistant') {
61
+ // Only add timestamps to assistant messages
62
+ if (msg.role !== 'assistant') {
67
63
  return;
68
64
  }
69
65
 
70
- const ts = getTimestamp(msg as UserMessage | AssistantMessage);
66
+ const ts = getTimestamp(msg as AssistantMessage);
71
67
  const suffix = fmtUtc(ts);
72
68
 
73
69
  return {
@@ -81,11 +77,17 @@ export default function (pi: ExtensionAPI) {
81
77
 
82
78
  // biome-ignore lint/suspicious/noExplicitAny: pi event types are opaque
83
79
  pi.on('context' as any, async (event: { messages: any[] }, _ctx: any) => {
84
- const cleanMessages = event.messages.map((m) => ({
85
- ...m,
86
- // biome-ignore lint/suspicious/noExplicitAny: message content is opaque
87
- content: stripTimestamp((m as any).content),
88
- }));
80
+ const cleanMessages = event.messages.map((m) => {
81
+ // Only strip timestamps from assistant messages that have content
82
+ if (m.role === 'assistant' && m.content != null) {
83
+ return {
84
+ ...m,
85
+ // biome-ignore lint/suspicious/noExplicitAny: message content is opaque
86
+ content: stripTimestamp((m as any).content),
87
+ };
88
+ }
89
+ return m;
90
+ });
89
91
  return { messages: cleanMessages };
90
92
  });
91
93
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cad0p/pi-timestamps",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Inline UTC timestamps for every message in pi coding agent — dim-styled, LLM-safe, zero-config",
5
5
  "publishConfig": {
6
6
  "access": "public",