@@ -2,6 +2,8 @@ import { Tool } from "./tool"
22import DESCRIPTION from "./task.txt"
33import { z } from "zod"
44import { Session } from "../session"
5+ import { Bus } from "../bus"
6+ import { Message } from "../session/message"
57
68export const TaskTool = Tool . define ( {
79 id : "opencode.task" ,
@@ -17,6 +19,28 @@ export const TaskTool = Tool.define({
1719 const msg = await Session . getMessage ( ctx . sessionID , ctx . messageID )
1820 const metadata = msg . metadata . assistant !
1921
22+ function summary ( input : Message . Info ) {
23+ const result = [ ]
24+
25+ for ( const part of input . parts ) {
26+ if ( part . type === "tool-invocation" ) {
27+ result . push ( {
28+ toolInvocation : part . toolInvocation ,
29+ metadata : input . metadata . tool [ part . toolInvocation . toolCallId ] ,
30+ } )
31+ }
32+ }
33+ return result
34+ }
35+
36+ const unsub = Bus . subscribe ( Message . Event . Updated , async ( evt ) => {
37+ if ( evt . properties . info . metadata . sessionID !== ctx . sessionID ) return
38+ ctx . metadata ( {
39+ title : params . description ,
40+ summary : summary ( evt . properties . info ) ,
41+ } )
42+ } )
43+
2044 const result = await Session . chat ( {
2145 sessionID : session . id ,
2246 modelID : metadata . modelID ,
@@ -28,10 +52,11 @@ export const TaskTool = Tool.define({
2852 } ,
2953 ] ,
3054 } )
31-
55+ unsub ( )
3256 return {
3357 metadata : {
3458 title : params . description ,
59+ summary : summary ( result ) ,
3560 } ,
3661 output : result . parts . findLast ( ( x ) => x . type === "text" ) ! . text ,
3762 }
0 commit comments