2121import java .util .concurrent .ThreadPoolExecutor ;
2222import java .util .concurrent .TimeUnit ;
2323import java .util .concurrent .atomic .AtomicInteger ;
24+ import java .util .function .Consumer ;
2425
2526/**
2627 * Facade client for OpenCode: HTTP Server + SSE event stream + local CLI.
@@ -233,6 +234,7 @@ public boolean isCliEnabled() {
233234 // ============================================================
234235
235236 private void copyHttpConfig (OpenCodeHttpClientConfig src ) {
237+ this .config .getHttp ().setMode (src .getMode ());
236238 this .config .getHttp ().setEnabled (src .isEnabled ());
237239 this .config .getHttp ().setStartupCheckEnabled (src .isStartupCheckEnabled ());
238240 this .config .getHttp ().setFailFastOnUnavailable (src .isFailFastOnUnavailable ());
@@ -251,7 +253,7 @@ private void copyHttpConfig(OpenCodeHttpClientConfig src) {
251253 this .config .getHttp ().setStreamMaxPoolSize (src .getStreamMaxPoolSize ());
252254 this .config .getHttp ().setStreamQueueCapacity (src .getStreamQueueCapacity ());
253255 this .config .getHttp ().setStreamKeepAliveMillis (src .getStreamKeepAliveMillis ());
254- this .config .getHttp ().setSseEventQueueCapacity (src .getSseEventQueueCapacity ());
256+ this .config .getHttp ().setStreamEventQueueCapacity (src .getStreamEventQueueCapacity ());
255257 this .config .getHttp ().setRetryOnConnectionFailure (src .isRetryOnConnectionFailure ());
256258 this .config .getHttp ().setVerifySsl (src .isVerifySsl ());
257259 this .config .getHttp ().setDefaultModel (src .getDefaultModel ());
@@ -367,10 +369,19 @@ public ChatStreamingResponse chatCompletionStream(ChatRequest request, String se
367369
368370 public ChatStreamingResponse chatCompletionStream (ChatRequest request , String sessionKey ,
369371 OpenCodeRequestContext context ) {
372+ return chatCompletionStream (request , sessionKey , context , null );
373+ }
374+
375+ /**
376+ * 流式对话,并在订阅启动前绑定增量回调,避免丢失首批分片。
377+ */
378+ public ChatStreamingResponse chatCompletionStream (ChatRequest request , String sessionKey ,
379+ OpenCodeRequestContext context ,
380+ Consumer <String > deltaConsumer ) {
370381 String sessionId = httpClient .ensureSession (sessionKey , context );
371382 PromptRequest promptRequest = ChatMessageMapper .toPromptRequest (request );
372383
373- ChatStreamingResponse stream = new ChatStreamingResponse ();
384+ ChatStreamingResponse stream = new ChatStreamingResponse (). onDelta ( deltaConsumer ) ;
374385
375386 OpenCodeSseClient .QueueSubscription subscription =
376387 sseClient .subscribeQueueSubscription (context );
0 commit comments