@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
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
}
|