Skip to content

Commit 548ff99

Browse files
kiwinadaniel-lxs
authored andcommitted
Fix disappearing task names in history
- Handle edge case where tasks have no messages at all - Provide fallback names for tasks with empty/blank names - Ensure taskHistory entries are never blank, even after crashes - Add proper error handling for incomplete tasks Fixes cases where task history would show blank entries when: - Task crashes before first message is added - First message is malformed or empty - Task creation fails completely
1 parent 64901c8 commit 548ff99

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

src/core/task-persistence/taskMetadata.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,33 @@ export async function taskMetadata({
2727
workspace,
2828
}: TaskMetadataOptions) {
2929
const taskDir = await getTaskDirectoryPath(globalStoragePath, taskId)
30+
31+
// Handle edge case where there are no messages at all
32+
if (!messages || messages.length === 0) {
33+
const historyItem: HistoryItem = {
34+
id: taskId,
35+
number: taskNumber,
36+
ts: Date.now(),
37+
task: `Task #${taskNumber} (No messages)`,
38+
tokensIn: 0,
39+
tokensOut: 0,
40+
cacheWrites: 0,
41+
cacheReads: 0,
42+
totalCost: 0,
43+
size: 0,
44+
workspace,
45+
}
46+
return {
47+
historyItem,
48+
tokenUsage: { totalTokensIn: 0, totalTokensOut: 0, totalCacheWrites: 0, totalCacheReads: 0, totalCost: 0 },
49+
}
50+
}
51+
3052
const taskMessage = messages[0] // First message is always the task say.
3153

3254
const lastRelevantMessage =
33-
messages[findLastIndex(messages, (m) => !(m.ask === "resume_task" || m.ask === "resume_completed_task"))]
55+
messages[findLastIndex(messages, (m) => !(m.ask === "resume_task" || m.ask === "resume_completed_task"))] ||
56+
messages[0]
3457

3558
let taskDirSize = taskSizeCache.get<number>(taskDir)
3659

@@ -45,11 +68,17 @@ export async function taskMetadata({
4568

4669
const tokenUsage = getApiMetrics(combineApiRequests(combineCommandSequences(messages.slice(1))))
4770

71+
// Ensure task name is never blank - provide fallback names
72+
let taskName = taskMessage.text?.trim() || ""
73+
if (!taskName) {
74+
taskName = `Task #${taskNumber} (Incomplete)`
75+
}
76+
4877
const historyItem: HistoryItem = {
4978
id: taskId,
5079
number: taskNumber,
5180
ts: lastRelevantMessage.ts,
52-
task: taskMessage.text ?? "",
81+
task: taskName,
5382
tokensIn: tokenUsage.totalTokensIn,
5483
tokensOut: tokenUsage.totalTokensOut,
5584
cacheWrites: tokenUsage.totalCacheWrites,

0 commit comments

Comments
 (0)