Skip to content

Commit 2f2fe4b

Browse files
committed
feat: added timestamp property to context messages
1 parent d7f12a5 commit 2f2fe4b

16 files changed

Lines changed: 57 additions & 10 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- correctly rendering the context around the match line in grep power tool output
66
- deduplicated skills prioritizing extension then project then global skills
77
- added run_prompt tasks tool for running a prompt
8+
- added timestamp property to context messages
89

910
## [0.66.0]
1011

docs-site/docs/features/socketio-events.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ Emitted when an AI response is fully completed.
100100
"color": "optional group color",
101101
"finished": false
102102
}
103-
}
103+
},
104+
"timestamp": 1716123456789
104105
}
105106
```
106107

@@ -243,7 +244,8 @@ Emitted during tool execution.
243244
"color": "optional group color",
244245
"finished": false
245246
}
246-
}
247+
},
248+
"timestamp": 1716123456789
247249
}
248250
```
249251

@@ -256,7 +258,8 @@ Emitted when a command is executed.
256258
"baseDir": "/path/to/project",
257259
"taskId": "task-uuid",
258260
"command": "npm install",
259-
"output": "Installing dependencies...\nDone."
261+
"output": "Installing dependencies...\nDone.",
262+
"timestamp": 1716123456789
260263
}
261264
```
262265

@@ -308,7 +311,8 @@ Emitted for logging information.
308311
"color": "optional group color",
309312
"finished": false
310313
}
311-
}
314+
},
315+
"timestamp": 1716123456789
312316
}
313317
```
314318

@@ -373,7 +377,8 @@ Emitted when a user sends a message.
373377
"color": "optional group color",
374378
"finished": false
375379
}
376-
}
380+
},
381+
"timestamp": 1716123456789
377382
}
378383
```
379384

packages/common/src/extensions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export interface ResponseMessage {
4747
finished: boolean;
4848
usageReport?: UsageReportData;
4949
promptContext?: PromptContext;
50+
timestamp?: number;
5051
}
5152

5253
/**

packages/common/src/types/common.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,15 @@ export interface ResponseCompletedData {
161161
usageReport?: UsageReportData;
162162
sequenceNumber?: number;
163163
promptContext?: PromptContext;
164+
timestamp?: number;
164165
}
165166

166167
export interface CommandOutputData {
167168
baseDir: string;
168169
taskId: string;
169170
command: string;
170171
output: string;
172+
timestamp?: number;
171173
}
172174

173175
export type LogLevel = 'info' | 'warning' | 'error' | 'loading';
@@ -180,6 +182,7 @@ export interface LogData {
180182
finished?: boolean;
181183
promptContext?: PromptContext;
182184
actionIds?: string[];
185+
timestamp?: number;
183186
}
184187

185188
// System log types (for application-wide logging)
@@ -215,6 +218,7 @@ export interface ToolData {
215218
usageReport?: UsageReportData;
216219
promptContext?: PromptContext;
217220
finished?: boolean;
221+
timestamp?: number;
218222
}
219223

220224
export interface ContextFilesUpdatedData {
@@ -739,6 +743,7 @@ export interface UserMessageData {
739743
content: string;
740744
images?: string[];
741745
promptContext?: PromptContext;
746+
timestamp?: number;
742747
}
743748

744749
export interface MessageRemovedData {

packages/common/src/types/context.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export enum MessageRole {
9797
// Base interface for all context messages with usage reporting
9898
interface BaseContextMessage {
9999
id: string;
100+
timestamp?: number;
100101
usageReport?: UsageReportData;
101102
promptContext?: PromptContext;
102103
}

packages/common/src/types/ui-messages.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export interface Message {
66
type: 'user' | 'response' | 'loading' | 'reflected-message' | 'command-output' | 'log' | 'tokens-info' | 'tool' | 'group' | 'task-info' | 'assistant-group';
77
content: string;
88
promptContext?: PromptContext;
9+
timestamp?: number;
910
children?: Message[];
1011
}
1112

src/main/agent/agent.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,7 @@ export class Agent {
783783
]
784784
: prompt,
785785
promptContext,
786+
timestamp: Date.now(),
786787
}
787788
: null;
788789

@@ -2015,13 +2016,15 @@ export class Agent {
20152016
id: currentResponseId,
20162017
usageReport,
20172018
promptContext,
2019+
timestamp: Date.now(),
20182020
});
20192021
} else if (message.role === 'tool') {
20202022
messages.push({
20212023
...message,
20222024
// @ts-expect-error the id is there
20232025
id: message.id || uuidv4(),
20242026
promptContext,
2027+
timestamp: Date.now(),
20252028
});
20262029
}
20272030
});

src/main/events/event-manager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
QuestionAnsweredData,
1212
ResponseChunkData,
1313
ResponseCompletedData,
14+
CommandOutputData,
1415
TerminalData,
1516
TerminalExitData,
1617
ToolData,
@@ -185,11 +186,12 @@ export class EventManager {
185186

186187
// Command events
187188
sendCommandOutput(baseDir: string, taskId: string, command: string, output: string): void {
188-
const data = {
189+
const data: CommandOutputData = {
189190
baseDir,
190191
taskId,
191192
command,
192193
output,
194+
timestamp: Date.now(),
193195
};
194196
this.sendToWindows('command-output', data);
195197
this.broadcastToEventConnectors('command-output', data);

src/main/task/context-manager.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ export class ContextManager {
8787
role: roleOrMessage,
8888
content: content || '',
8989
usageReport,
90+
timestamp: Date.now(),
9091
} as ContextMessage;
9192
} else {
9293
message = roleOrMessage;
@@ -913,6 +914,7 @@ export class ContextManager {
913914
diff: response.diff,
914915
usageReport: response.usageReport,
915916
promptContext: message.promptContext,
917+
timestamp: message.timestamp,
916918
};
917919
messagesData.push(responseCompletedData);
918920
});
@@ -965,6 +967,7 @@ export class ContextManager {
965967
taskId: this.taskId,
966968
usageReport: subMessage.usageReport,
967969
promptContext: subMessage.promptContext,
970+
timestamp: subMessage.timestamp,
968971
};
969972
messagesData.push(responseCompletedData);
970973
}
@@ -983,6 +986,7 @@ export class ContextManager {
983986
args: subPart.input,
984987
usageReport: undefined,
985988
promptContext: subMessage.promptContext,
989+
timestamp: subMessage.timestamp,
986990
};
987991
messagesData.push(toolData);
988992
}
@@ -997,6 +1001,7 @@ export class ContextManager {
9971001
taskId: this.taskId,
9981002
usageReport: subMessage.usageReport,
9991003
promptContext: subMessage.promptContext,
1004+
timestamp: subMessage.timestamp,
10001005
};
10011006
messagesData.push(responseCompletedData);
10021007
}
@@ -1043,6 +1048,7 @@ export class ContextManager {
10431048
diff: message.diff,
10441049
usageReport: message.usageReport,
10451050
promptContext: message.promptContext,
1051+
timestamp: message.timestamp,
10461052
};
10471053
messagesData.push(responseCompletedData);
10481054

@@ -1077,6 +1083,7 @@ export class ContextManager {
10771083
args: toolCall.input,
10781084
usageReport: message.usageReport,
10791085
promptContext: message.promptContext,
1086+
timestamp: message.timestamp,
10801087
};
10811088
messagesData.push(toolData);
10821089
} else if (part.type === 'tool-result') {
@@ -1116,6 +1123,7 @@ export class ContextManager {
11161123
reflectedMessage: message.reflectedMessage,
11171124
usageReport: message.usageReport,
11181125
promptContext: message.promptContext,
1126+
timestamp: message.timestamp,
11191127
};
11201128
messagesData.push(responseCompletedData);
11211129
}
@@ -1138,6 +1146,7 @@ export class ContextManager {
11381146
content: content,
11391147
images: images && images.length > 0 ? images : undefined,
11401148
promptContext: message.promptContext,
1149+
timestamp: message.timestamp,
11411150
};
11421151
messagesData.push(userMessageData);
11431152
} else if (message.role === 'tool' && Array.isArray(message.content)) {

src/main/task/task.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,7 @@ export class Task {
806806
role: MessageRole.User,
807807
content: prompt,
808808
promptContext,
809+
timestamp: Date.now(),
809810
});
810811

811812
// Add user message to context
@@ -851,6 +852,7 @@ export class Task {
851852
role: MessageRole.User,
852853
content: prompt,
853854
promptContext,
855+
timestamp: Date.now(),
854856
});
855857

856858
let messages = this.contextManager.toConnectorMessages();
@@ -1358,6 +1360,7 @@ export class Task {
13581360
usageReport,
13591361
sequenceNumber: message.sequenceNumber,
13601362
promptContext: message.promptContext,
1363+
timestamp: Date.now(),
13611364
};
13621365

13631366
const extensionResult = await this.extensionManager.dispatchEvent('onResponseCompleted', { response: data }, this.project, this);
@@ -2121,6 +2124,7 @@ export class Task {
21212124
finished,
21222125
promptContext,
21232126
actionIds,
2127+
timestamp: Date.now(),
21242128
};
21252129

21262130
this.eventManager.sendLog(data);
@@ -2562,6 +2566,7 @@ export class Task {
25622566
usageReport,
25632567
promptContext,
25642568
finished,
2569+
timestamp: Date.now(),
25652570
};
25662571

25672572
if (response && usageReport && saveToDb) {
@@ -2611,6 +2616,7 @@ export class Task {
26112616
content,
26122617
images,
26132618
promptContext,
2619+
timestamp: Date.now(),
26142620
};
26152621

26162622
this.eventManager.sendUserMessage(data);

0 commit comments

Comments
 (0)