chore: initialize recovered claude workspace
This commit is contained in:
55
src/utils/collapseTeammateShutdowns.ts
Normal file
55
src/utils/collapseTeammateShutdowns.ts
Normal file
@@ -0,0 +1,55 @@
|
||||
import type { AttachmentMessage, RenderableMessage } from '../types/message.js'
|
||||
|
||||
function isTeammateShutdownAttachment(
|
||||
msg: RenderableMessage,
|
||||
): msg is AttachmentMessage {
|
||||
return (
|
||||
msg.type === 'attachment' &&
|
||||
msg.attachment.type === 'task_status' &&
|
||||
msg.attachment.taskType === 'in_process_teammate' &&
|
||||
msg.attachment.status === 'completed'
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Collapses consecutive in-process teammate shutdown task_status attachments
|
||||
* into a single `teammate_shutdown_batch` attachment with a count.
|
||||
*/
|
||||
export function collapseTeammateShutdowns(
|
||||
messages: RenderableMessage[],
|
||||
): RenderableMessage[] {
|
||||
const result: RenderableMessage[] = []
|
||||
let i = 0
|
||||
|
||||
while (i < messages.length) {
|
||||
const msg = messages[i]!
|
||||
if (isTeammateShutdownAttachment(msg)) {
|
||||
let count = 0
|
||||
while (
|
||||
i < messages.length &&
|
||||
isTeammateShutdownAttachment(messages[i]!)
|
||||
) {
|
||||
count++
|
||||
i++
|
||||
}
|
||||
if (count === 1) {
|
||||
result.push(msg)
|
||||
} else {
|
||||
result.push({
|
||||
type: 'attachment',
|
||||
uuid: msg.uuid,
|
||||
timestamp: msg.timestamp,
|
||||
attachment: {
|
||||
type: 'teammate_shutdown_batch',
|
||||
count,
|
||||
},
|
||||
})
|
||||
}
|
||||
} else {
|
||||
result.push(msg)
|
||||
i++
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user