@@ -19,6 +19,10 @@ const bu = new BrowserUse({
19
19
} ) ;
20
20
21
21
type TaskStatus =
22
+ | {
23
+ status : "starting" ;
24
+ liveUrl : string | null ;
25
+ }
22
26
| {
23
27
status : "running" ;
24
28
@@ -40,73 +44,32 @@ const tools = {
40
44
inputSchema : z . object ( {
41
45
task : z . string ( ) ,
42
46
} ) ,
43
- async * execute ( { task } ) {
47
+ async * execute ( { task } , { abortSignal } ) {
44
48
// Create Task
45
49
const rsp = await bu . tasks . create ( { task : task } ) ;
46
50
47
- poll: do {
48
- // Wait for Task to Finish
49
- const status = ( await bu . tasks . retrieve ( rsp . id , { statusOnly : false } ) ) as BrowserUse . Tasks . TaskView ;
50
-
51
- switch ( status . status ) {
52
- case "started" :
53
- case "paused" :
54
- case "stopped" :
55
- if ( status . steps == null || status . steps . length === 0 ) {
56
- break ;
57
- }
58
-
59
- const lastStep = status . steps [ status . steps . length - 1 ] ;
60
-
61
- yield {
62
- status : "running" ,
63
- lastStep : lastStep ,
64
- liveUrl : status . sessionLiveUrl ? status . sessionLiveUrl : null ,
65
- } satisfies TaskStatus ;
66
-
67
- await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
68
-
69
- break ;
70
-
71
- case "finished" :
72
- if ( status . sessionLiveUrl == null ) {
73
- break ;
74
- }
75
-
76
- yield {
77
- status : "done" ,
78
- output : status . doneOutput ,
79
- liveUrl : status . sessionLiveUrl ,
80
- sessionId : status . sessionId ,
81
- } satisfies TaskStatus ;
82
-
83
- break poll;
84
-
85
- default :
86
- throw new Error ( `Unknown status: ${ status . status } ` ) ;
87
- }
88
- } while ( true ) ;
89
- } ,
90
- } ) ,
91
- continueTask : tool ( {
92
- description : "Continue a task in a web browser." ,
93
- inputSchema : z . object ( {
94
- sessionId : z . string ( ) ,
95
- task : z . string ( ) ,
96
- } ) ,
97
- async * execute ( { sessionId, task } ) {
98
- // Create Task
99
- const rsp = await bu . tasks . create ( { task : task , browserSettings : { sessionId : sessionId } } ) ;
51
+ console . log ( `[agent] Task created: ${ rsp . id } ` ) ;
100
52
101
53
poll: do {
102
54
// Wait for Task to Finish
103
- const status = ( await bu . tasks . retrieve ( rsp . id , { statusOnly : false } ) ) as BrowserUse . Tasks . TaskView ;
55
+ const status = ( await bu . tasks . retrieve (
56
+ rsp . id ,
57
+ { statusOnly : false } ,
58
+ { signal : abortSignal } ,
59
+ ) ) as BrowserUse . Tasks . TaskView ;
60
+
61
+ console . log ( `[agent] task status: ${ status . status } ` ) ;
104
62
105
63
switch ( status . status ) {
106
64
case "started" :
107
65
case "paused" :
108
66
case "stopped" :
109
67
if ( status . steps == null || status . steps . length === 0 ) {
68
+ yield {
69
+ status : "starting" ,
70
+ liveUrl : status . sessionLiveUrl ? status . sessionLiveUrl : null ,
71
+ } satisfies TaskStatus ;
72
+
110
73
break ;
111
74
}
112
75
0 commit comments