@@ -1960,12 +1960,15 @@ function Task(props: ToolProps<typeof TaskTool>) {
19601960 const { navigate } = useRoute ( )
19611961 const sync = useSync ( )
19621962
1963- onMount ( ( ) => {
1964- if ( props . metadata . sessionId && ! sync . data . message [ props . metadata . sessionId ] ?. length )
1965- void sync . session . sync ( props . metadata . sessionId )
1963+ createEffect ( ( ) => {
1964+ const sessionID = props . metadata . sessionId
1965+ if ( ! sessionID ) return
1966+ if ( sync . data . message [ sessionID ] ?. length ) return
1967+ void sync . session . sync ( sessionID )
19661968 } )
19671969
1968- const messages = createMemo ( ( ) => sync . data . message [ props . metadata . sessionId ?? "" ] ?? [ ] )
1970+ const childSessionID = createMemo ( ( ) => props . metadata . sessionId )
1971+ const messages = createMemo ( ( ) => sync . data . message [ childSessionID ( ) ?? "" ] ?? [ ] )
19691972
19701973 const tools = createMemo ( ( ) => {
19711974 return messages ( ) . flatMap ( ( msg ) =>
@@ -1979,7 +1982,16 @@ function Task(props: ToolProps<typeof TaskTool>) {
19791982 tools ( ) . findLast ( ( x ) => ( x . state . status === "running" || x . state . status === "completed" ) && x . state . title ) ,
19801983 )
19811984
1982- const isRunning = createMemo ( ( ) => props . part . state . status === "running" )
1985+ const isBackground = createMemo ( ( ) => props . metadata . background === true )
1986+ const isBackgroundRunning = createMemo ( ( ) => {
1987+ const sessionID = childSessionID ( )
1988+ if ( ! isBackground ( ) || ! sessionID ) return false
1989+ const status = sync . data . session_status [ sessionID ] ?. type
1990+ if ( status === "busy" || status === "retry" ) return true
1991+ if ( status === "idle" ) return false
1992+ return ! messages ( ) . some ( ( x ) => x . role === "assistant" && x . time . completed )
1993+ } )
1994+ const isRunning = createMemo ( ( ) => props . part . state . status === "running" || isBackgroundRunning ( ) )
19831995
19841996 const duration = createMemo ( ( ) => {
19851997 const first = messages ( ) . find ( ( x ) => x . role === "user" ) ?. time . created
@@ -1990,8 +2002,7 @@ function Task(props: ToolProps<typeof TaskTool>) {
19902002
19912003 const content = createMemo ( ( ) => {
19922004 if ( ! props . input . description ) return ""
1993- const description =
1994- props . metadata . background === true ? `${ props . input . description } (background)` : props . input . description
2005+ const description = isBackground ( ) ? `${ props . input . description } (background)` : props . input . description
19952006 let content = [ `${ Locale . titlecase ( props . input . subagent_type ?? "General" ) } Task — ${ description } ` ]
19962007
19972008 if ( isRunning ( ) && tools ( ) . length > 0 ) {
@@ -2003,7 +2014,7 @@ function Task(props: ToolProps<typeof TaskTool>) {
20032014 } else content . push ( `↳ ${ tools ( ) . length } toolcalls` )
20042015 }
20052016
2006- if ( props . part . state . status === "completed" ) {
2017+ if ( ! isRunning ( ) && props . part . state . status === "completed" ) {
20072018 content . push ( `└ ${ tools ( ) . length } toolcalls · ${ Locale . duration ( duration ( ) ) } ` )
20082019 }
20092020
@@ -2018,8 +2029,9 @@ function Task(props: ToolProps<typeof TaskTool>) {
20182029 pending = "Delegating..."
20192030 part = { props . part }
20202031 onClick = { ( ) => {
2021- if ( props . metadata . sessionId ) {
2022- navigate ( { type : "session" , sessionID : props . metadata . sessionId } )
2032+ const sessionID = childSessionID ( )
2033+ if ( sessionID ) {
2034+ navigate ( { type : "session" , sessionID } )
20232035 }
20242036 } }
20252037 >
0 commit comments