refactor: extract session summary utilities to shared module

This commit is contained in:
weishu
2026-01-05 13:00:48 +08:00
parent f7d161e6cf
commit 21a64dfb49
5 changed files with 68 additions and 82 deletions
+1
View File
@@ -1,3 +1,4 @@
export * from './messages'
export * from './modes'
export * from './sessionSummary'
export type * from './types'
+53
View File
@@ -0,0 +1,53 @@
import type { ModelMode } from './modes'
import type { Session, WorktreeMetadata } from './schemas'
export type SessionSummaryMetadata = {
name?: string
path: string
machineId?: string
summary?: { text: string }
flavor?: string | null
worktree?: WorktreeMetadata
}
export type SessionSummary = {
id: string
active: boolean
thinking: boolean
activeAt: number
updatedAt: number
metadata: SessionSummaryMetadata | null
todoProgress: { completed: number; total: number } | null
pendingRequestsCount: number
modelMode?: ModelMode
}
export function toSessionSummary(session: Session): SessionSummary {
const pendingRequestsCount = session.agentState?.requests ? Object.keys(session.agentState.requests).length : 0
const metadata: SessionSummaryMetadata | null = session.metadata ? {
name: session.metadata.name,
path: session.metadata.path,
machineId: session.metadata.machineId ?? undefined,
summary: session.metadata.summary ? { text: session.metadata.summary.text } : undefined,
flavor: session.metadata.flavor ?? null,
worktree: session.metadata.worktree
} : null
const todoProgress = session.todos?.length ? {
completed: session.todos.filter(t => t.status === 'completed').length,
total: session.todos.length
} : null
return {
id: session.id,
active: session.active,
thinking: session.thinking,
activeAt: session.activeAt,
updatedAt: session.updatedAt,
metadata,
todoProgress,
pendingRequestsCount,
modelMode: session.modelMode
}
}
+2
View File
@@ -10,6 +10,8 @@ export type {
WorktreeMetadata
} from './schemas'
export type { SessionSummary, SessionSummaryMetadata } from './sessionSummary'
export type {
AgentFlavor,
ClaudePermissionMode,