@@ -21,6 +21,7 @@ let host = "localhost"
2121let port = 3000
2222let task = "Test task from API client"
2323let showHelp = false
24+ let verbose = false
2425
2526for ( let i = 0 ; i < args . length ; i ++ ) {
2627 const arg = args [ i ]
@@ -31,6 +32,8 @@ for (let i = 0; i < args.length; i++) {
3132 host = args [ ++ i ] || host
3233 } else if ( arg === "--port" ) {
3334 port = parseInt ( args [ ++ i ] ) || port
35+ } else if ( arg === "--verbose" || arg === "-v" ) {
36+ verbose = true
3437 } else if ( arg === "--help" || arg === "-h" ) {
3538 showHelp = true
3639 } else if ( ! arg . startsWith ( "--" ) ) {
@@ -45,14 +48,15 @@ if (showHelp) {
4548Usage: node test-api.js [options] "Your task here"
4649
4750Options:
48- --stream Test SSE streaming endpoint (default: false)
49- --host API host (default: localhost)
50- --port API port (default: 3000)
51- --help Show this help
51+ --stream Test SSE streaming endpoint (default: false)
52+ --verbose Show full JSON payload (default: false)
53+ --host API host (default: localhost)
54+ --port API port (default: 3000)
55+ --help Show this help
5256
5357Examples:
5458 node test-api.js --stream "where does the vscode extension code store it's mode config files?"
55- node test-api.js --stream "list your MCP servers"
59+ node test-api.js --verbose -- stream "list your MCP servers"
5660 node test-api.js --stream "Write a React component"
5761 node test-api.js --host api.example.com --port 8080 "Debug this code"
5862` )
@@ -61,10 +65,13 @@ Examples:
6165
6266const baseUrl = `http://${ host } :${ port } `
6367
64- console . log ( `🚀 Testing Roo Code Agent API at ${ baseUrl } ` )
65- console . log ( `📝 Task: "${ task } "` )
66- console . log ( `🌊 Streaming: ${ useStream ? "enabled" : "disabled" } ` )
67- console . log ( "" )
68+ if ( verbose ) {
69+ console . log ( `🚀 Testing Roo Code Agent API at ${ baseUrl } ` )
70+ console . log ( `📝 Task: "${ task } "` )
71+ console . log ( `🌊 Streaming: ${ useStream ? "enabled" : "disabled" } ` )
72+ console . log ( `📊 Verbose: ${ verbose ? "enabled" : "disabled" } ` )
73+ console . log ( "" )
74+ }
6875
6976/**
7077 * Make HTTP request helper
@@ -103,11 +110,15 @@ function makeRequest(options, data = null) {
103110 * Test basic endpoints
104111 */
105112async function testBasicEndpoints ( ) {
106- console . log ( "🔍 Testing basic endpoints...\n" )
113+ if ( verbose ) {
114+ console . log ( "🔍 Testing basic endpoints...\n" )
115+ }
107116
108117 // Test health endpoint
109118 try {
110- console . log ( "📊 GET /health" )
119+ if ( verbose ) {
120+ console . log ( "📊 GET /health" )
121+ }
111122 const healthResponse = await makeRequest ( {
112123 hostname : host ,
113124 port : port ,
@@ -116,22 +127,34 @@ async function testBasicEndpoints() {
116127 headers : { "Content-Type" : "application/json" } ,
117128 } )
118129
119- console . log ( ` Status: ${ healthResponse . statusCode } ` )
120- if ( healthResponse . statusCode === 200 ) {
121- const health = JSON . parse ( healthResponse . body )
122- console . log ( ` Health: ${ health . status } ` )
123- console . log ( ` Timestamp: ${ health . timestamp } ` )
130+ if ( verbose ) {
131+ console . log ( ` Status: ${ healthResponse . statusCode } ` )
132+ if ( healthResponse . statusCode === 200 ) {
133+ const health = JSON . parse ( healthResponse . body )
134+ console . log ( ` Health: ${ health . status } ` )
135+ console . log ( ` Timestamp: ${ health . timestamp } ` )
136+ } else {
137+ console . log ( ` Error: ${ healthResponse . body } ` )
138+ }
139+ console . log ( "" )
124140 } else {
125- console . log ( ` Error: ${ healthResponse . body } ` )
141+ if ( healthResponse . statusCode !== 200 ) {
142+ console . log ( `❌ Health check failed: ${ healthResponse . body } ` )
143+ }
126144 }
127- console . log ( "" )
128145 } catch ( error ) {
129- console . log ( ` ❌ Failed: ${ error . message } \n` )
146+ if ( verbose ) {
147+ console . log ( ` ❌ Failed: ${ error . message } \n` )
148+ } else {
149+ console . log ( `❌ Health check failed: ${ error . message } ` )
150+ }
130151 }
131152
132153 // Test status endpoint
133154 try {
134- console . log ( "📈 GET /status" )
155+ if ( verbose ) {
156+ console . log ( "📈 GET /status" )
157+ }
135158 const statusResponse = await makeRequest ( {
136159 hostname : host ,
137160 port : port ,
@@ -140,26 +163,38 @@ async function testBasicEndpoints() {
140163 headers : { "Content-Type" : "application/json" } ,
141164 } )
142165
143- console . log ( ` Status: ${ statusResponse . statusCode } ` )
144- if ( statusResponse . statusCode === 200 ) {
145- const status = JSON . parse ( statusResponse . body )
146- console . log ( ` Running: ${ status . running } ` )
147- console . log ( ` Requests: ${ status . stats ?. totalRequests || 0 } ` )
148- console . log ( ` Memory: ${ Math . round ( ( status . stats ?. memoryUsage ?. heapUsed || 0 ) / 1024 / 1024 ) } MB` )
166+ if ( verbose ) {
167+ console . log ( ` Status: ${ statusResponse . statusCode } ` )
168+ if ( statusResponse . statusCode === 200 ) {
169+ const status = JSON . parse ( statusResponse . body )
170+ console . log ( ` Running: ${ status . running } ` )
171+ console . log ( ` Requests: ${ status . stats ?. totalRequests || 0 } ` )
172+ console . log ( ` Memory: ${ Math . round ( ( status . stats ?. memoryUsage ?. heapUsed || 0 ) / 1024 / 1024 ) } MB` )
173+ } else {
174+ console . log ( ` Error: ${ statusResponse . body } ` )
175+ }
176+ console . log ( "" )
149177 } else {
150- console . log ( ` Error: ${ statusResponse . body } ` )
178+ if ( statusResponse . statusCode !== 200 ) {
179+ console . log ( `❌ Status check failed: ${ statusResponse . body } ` )
180+ }
151181 }
152- console . log ( "" )
153182 } catch ( error ) {
154- console . log ( ` ❌ Failed: ${ error . message } \n` )
183+ if ( verbose ) {
184+ console . log ( ` ❌ Failed: ${ error . message } \n` )
185+ } else {
186+ console . log ( `❌ Status check failed: ${ error . message } ` )
187+ }
155188 }
156189}
157190
158191/**
159192 * Test regular execute endpoint
160193 */
161194async function testExecuteEndpoint ( ) {
162- console . log ( "⚡ Testing POST /execute...\n" )
195+ if ( verbose ) {
196+ console . log ( "⚡ Testing POST /execute...\n" )
197+ }
163198
164199 try {
165200 const payload = JSON . stringify ( { task } )
@@ -178,19 +213,32 @@ async function testExecuteEndpoint() {
178213 payload ,
179214 )
180215
181- console . log ( ` Status: ${ response . statusCode } ` )
182- if ( response . statusCode === 200 ) {
183- const result = JSON . parse ( response . body )
184- console . log ( ` Success: ${ result . success } ` )
185- console . log ( ` Message: ${ result . message } ` )
186- console . log ( ` Task: ${ result . task } ` )
187- console . log ( ` Timestamp: ${ result . timestamp } ` )
216+ if ( verbose ) {
217+ console . log ( ` Status: ${ response . statusCode } ` )
218+ if ( response . statusCode === 200 ) {
219+ const result = JSON . parse ( response . body )
220+ console . log ( ` Success: ${ result . success } ` )
221+ console . log ( ` Message: ${ result . message } ` )
222+ console . log ( ` Task: ${ result . task } ` )
223+ console . log ( ` Timestamp: ${ result . timestamp } ` )
224+ } else {
225+ console . log ( ` Error: ${ response . body } ` )
226+ }
227+ console . log ( "" )
188228 } else {
189- console . log ( ` Error: ${ response . body } ` )
229+ if ( response . statusCode === 200 ) {
230+ const result = JSON . parse ( response . body )
231+ console . log ( result . message || result . result || "Task completed successfully" )
232+ } else {
233+ console . log ( `❌ Error: ${ response . body } ` )
234+ }
190235 }
191- console . log ( "" )
192236 } catch ( error ) {
193- console . log ( ` ❌ Failed: ${ error . message } \n` )
237+ if ( verbose ) {
238+ console . log ( ` ❌ Failed: ${ error . message } \n` )
239+ } else {
240+ console . log ( `❌ Failed: ${ error . message } ` )
241+ }
194242 }
195243}
196244
@@ -199,7 +247,9 @@ async function testExecuteEndpoint() {
199247 */
200248function testStreamingEndpoint ( ) {
201249 return new Promise ( ( resolve , reject ) => {
202- console . log ( "🌊 Testing POST /execute/stream (SSE)...\n" )
250+ if ( verbose ) {
251+ console . log ( "🌊 Testing POST /execute/stream (SSE)...\n" )
252+ }
203253
204254 const payload = JSON . stringify ( { task } )
205255
@@ -217,9 +267,11 @@ function testStreamingEndpoint() {
217267 } ,
218268 } ,
219269 ( res ) => {
220- console . log ( ` Status: ${ res . statusCode } ` )
221- console . log ( ` Content-Type: ${ res . headers [ "content-type" ] } ` )
222- console . log ( " Events:" )
270+ if ( verbose ) {
271+ console . log ( ` Status: ${ res . statusCode } ` )
272+ console . log ( ` Content-Type: ${ res . headers [ "content-type" ] } ` )
273+ console . log ( " Events:" )
274+ }
223275
224276 let buffer = ""
225277
@@ -236,50 +288,97 @@ function testStreamingEndpoint() {
236288 const data = JSON . parse ( line . slice ( 6 ) )
237289 const timestamp = new Date ( data . timestamp ) . toLocaleTimeString ( )
238290
239- switch ( data . type ) {
240- case "start" :
241- console . log ( ` 🚀 [${ timestamp } ] ${ data . message } : ${ data . task } ` )
242- break
243- case "progress" :
244- console . log (
245- ` ⏳ [${ timestamp } ] Step ${ data . step } /${ data . total } : ${ data . message } ` ,
246- )
247- break
248- case "complete" :
249- case "completion" :
250- console . log ( ` ✅ [${ timestamp } ] ${ data . message } ` )
251- console . log ( ` 📋 Result: ${ data . result } ` )
252- // Close the connection when task completes
253- console . log ( " 🔚 Task completed, closing connection..." )
254- res . destroy ( )
255- return
256- case "error" :
257- console . log ( ` ❌ [${ timestamp } ] Error: ${ data . error } ` )
258- break
259- default :
260- console . log ( ` 📨 [${ timestamp } ] ${ JSON . stringify ( data ) } ` )
291+ if ( verbose ) {
292+ switch ( data . type ) {
293+ case "start" :
294+ console . log ( ` 🚀 [${ timestamp } ] ${ data . message } : ${ data . task } ` )
295+ break
296+ case "progress" :
297+ console . log (
298+ ` ⏳ [${ timestamp } ] Step ${ data . step } /${ data . total } : ${ data . message } ` ,
299+ )
300+ break
301+ case "complete" :
302+ case "completion" :
303+ console . log ( ` ✅ [${ timestamp } ] ${ data . message } ` )
304+ console . log ( ` 📋 Result: ${ data . result } ` )
305+ // Close the connection when task completes
306+ console . log ( " 🔚 Task completed, closing connection..." )
307+ res . destroy ( )
308+ return
309+ case "error" :
310+ console . log ( ` ❌ [${ timestamp } ] Error: ${ data . error } ` )
311+ break
312+ default :
313+ console . log ( ` 📨 [${ timestamp } ] ${ JSON . stringify ( data ) } ` )
314+ }
315+ } else {
316+ // Simple output mode - stream content as it comes without extra newlines
317+ switch ( data . type ) {
318+ case "start" :
319+ // Don't output anything for start
320+ break
321+ case "progress" :
322+ // Stream progress messages (this is where LLM response content is)
323+ if ( data . message && data . message !== "Processing..." ) {
324+ process . stdout . write ( data . message )
325+ }
326+ break
327+ case "complete" :
328+ case "completion" :
329+ // Show final result
330+ if ( data . result ) {
331+ process . stdout . write ( data . result )
332+ } else if ( data . message ) {
333+ process . stdout . write ( data . message )
334+ }
335+ // Add final newline
336+ process . stdout . write ( "\n" )
337+ res . destroy ( )
338+ return
339+ case "error" :
340+ console . log ( `❌ Error: ${ data . error } ` )
341+ break
342+ default :
343+ // Stream any other message content
344+ if ( data . message ) {
345+ process . stdout . write ( data . message )
346+ }
347+ }
261348 }
262349 } catch ( e ) {
263- console . log ( ` 📄 Raw: ${ line } ` )
350+ if ( verbose ) {
351+ console . log ( ` 📄 Raw: ${ line } ` )
352+ }
264353 }
265354 }
266355 }
267356 } )
268357
269358 res . on ( "end" , ( ) => {
270- console . log ( " 🔚 Stream ended\n" )
359+ if ( verbose ) {
360+ console . log ( " 🔚 Stream ended\n" )
361+ }
271362 resolve ( )
272363 } )
273364
274365 res . on ( "error" , ( error ) => {
275- console . log ( ` ❌ Stream error: ${ error . message } \n` )
366+ if ( verbose ) {
367+ console . log ( ` ❌ Stream error: ${ error . message } \n` )
368+ } else {
369+ console . log ( `❌ Stream error: ${ error . message } ` )
370+ }
276371 reject ( error )
277372 } )
278373 } ,
279374 )
280375
281376 req . on ( "error" , ( error ) => {
282- console . log ( ` ❌ Request failed: ${ error . message } \n` )
377+ if ( verbose ) {
378+ console . log ( ` ❌ Request failed: ${ error . message } \n` )
379+ } else {
380+ console . log ( `❌ Request failed: ${ error . message } ` )
381+ }
283382 reject ( error )
284383 } )
285384
@@ -304,7 +403,9 @@ async function runTests() {
304403 await testExecuteEndpoint ( )
305404 }
306405
307- console . log ( "✅ All tests completed successfully!" )
406+ if ( verbose ) {
407+ console . log ( "✅ All tests completed successfully!" )
408+ }
308409 } catch ( error ) {
309410 console . error ( "❌ Test failed:" , error . message )
310411 process . exit ( 1 )
0 commit comments