This commit is contained in:
2026-06-23 05:02:15 +08:00
commit e6f1776d4f
264 changed files with 54215 additions and 0 deletions
@@ -0,0 +1,64 @@
/**
* 项目 Claude 会话管理器的订阅 hook。
*
* - mount 时 postMessage `managed-sessions/get` 拉取一次
* - 监听 `managed-sessions/show` 同步主进程状态(全量列表)
* - `createManagedSession(profilePath, prompt?)` 让主进程开 cc 终端并捕获会话
* - `renameManagedSession(id, name)` / `resumeManagedSession(id)` / `deleteManagedSession(id)`
* 都把动作委托给主进程,列表由后续 `managed-sessions/show` 更新
*/
import type { ManagedSessionsData } from '../types'
import { useCallback, useEffect, useState } from 'react'
import { onMessage, postMessage } from '../lib/vscode'
export interface UseManagedSessionsResult {
managedSessions: ManagedSessionsData
createManagedSession: (profilePath: string, name?: string, prompt?: string) => void
renameManagedSession: (id: string, name: string) => void
resumeManagedSession: (id: string) => void
deleteManagedSession: (id: string) => void
closeManagedSessionTab: (id: string) => void
}
export function useManagedSessions(): UseManagedSessionsResult {
const [managedSessions, setManagedSessions] = useState<ManagedSessionsData>({ sessions: [] })
useEffect(() => {
const cleanup = onMessage((msg) => {
if (msg.type === 'managed-sessions/show')
setManagedSessions(msg.data)
})
postMessage({ type: 'managed-sessions/get' })
return cleanup
}, [])
const createManagedSession = useCallback((profilePath: string, name?: string, prompt?: string): void => {
postMessage({ type: 'managed-sessions/create', profilePath, name, prompt })
}, [])
const renameManagedSession = useCallback((id: string, name: string): void => {
postMessage({ type: 'managed-sessions/rename', sessionId: id, name })
}, [])
const resumeManagedSession = useCallback((id: string): void => {
postMessage({ type: 'managed-sessions/resume', sessionId: id })
}, [])
const deleteManagedSession = useCallback((id: string): void => {
postMessage({ type: 'managed-sessions/delete', sessionId: id })
}, [])
const closeManagedSessionTab = useCallback((id: string): void => {
postMessage({ type: 'managed-sessions/close-tab', sessionId: id })
}, [])
return {
managedSessions,
createManagedSession,
renameManagedSession,
resumeManagedSession,
deleteManagedSession,
closeManagedSessionTab,
}
}