@@ -28,7 +28,7 @@ import { messageQueue } from "../stream/messageQueue.js";
2828import { constructSystemMessage } from "../systemMessage.js" ;
2929import { telemetryService } from "../telemetry/telemetryService.js" ;
3030import { reportFailureTool } from "../tools/reportFailure.js" ;
31- import { gracefulExit } from "../util/exit.js" ;
31+ import { gracefulExit , updateAgentMetadata } from "../util/exit.js" ;
3232import { formatError } from "../util/formatError.js" ;
3333import { getGitDiffSnapshot } from "../util/git.js" ;
3434import { logger } from "../util/logger.js" ;
@@ -355,9 +355,18 @@ export async function serve(prompt?: string, options: ServeOptions = {}) {
355355 }
356356
357357 // Give a moment for the response to be sent
358- const handleExitResponse = ( ) => {
359- server . close ( ( ) => {
358+ const handleExitResponse = async ( ) => {
359+ server . close ( async ( ) => {
360360 telemetryService . stopActiveTime ( ) ;
361+
362+ // Update metadata one final time before exiting
363+ try {
364+ const history = services . chatHistory ?. getHistory ( ) ;
365+ await updateAgentMetadata ( history ) ;
366+ } catch ( err ) {
367+ logger . debug ( "Failed to update metadata (non-critical)" , err as any ) ;
368+ }
369+
361370 gracefulExit ( 0 ) . catch ( ( err ) => {
362371 logger . error ( `Graceful exit failed: ${ formatError ( err ) } ` ) ;
363372 process . exit ( 1 ) ;
@@ -470,6 +479,18 @@ export async function serve(prompt?: string, options: ServeOptions = {}) {
470479 // No direct persistence here; ChatHistoryService handles persistence when appropriate
471480
472481 state . lastActivity = Date . now ( ) ;
482+
483+ // Update metadata after successful agent turn
484+ try {
485+ const history = services . chatHistory ?. getHistory ( ) ;
486+ await updateAgentMetadata ( history ) ;
487+ } catch ( metadataErr ) {
488+ // Non-critical: log but don't fail the agent execution
489+ logger . debug (
490+ "Failed to update metadata after turn (non-critical)" ,
491+ metadataErr as any ,
492+ ) ;
493+ }
473494 } catch ( e : any ) {
474495 if ( e . name === "AbortError" ) {
475496 logger . debug ( "Response interrupted" ) ;
@@ -526,8 +547,17 @@ export async function serve(prompt?: string, options: ServeOptions = {}) {
526547 ) ;
527548 state . serverRunning = false ;
528549 stopStorageSync ( ) ;
529- server . close ( ( ) => {
550+ server . close ( async ( ) => {
530551 telemetryService . stopActiveTime ( ) ;
552+
553+ // Update metadata one final time before exiting
554+ try {
555+ const history = services . chatHistory ?. getHistory ( ) ;
556+ await updateAgentMetadata ( history ) ;
557+ } catch ( err ) {
558+ logger . debug ( "Failed to update metadata (non-critical)" , err as any ) ;
559+ }
560+
531561 gracefulExit ( 0 ) . catch ( ( err ) => {
532562 logger . error ( `Graceful exit failed: ${ formatError ( err ) } ` ) ;
533563 process . exit ( 1 ) ;
@@ -549,8 +579,17 @@ export async function serve(prompt?: string, options: ServeOptions = {}) {
549579 clearInterval ( inactivityChecker ) ;
550580 inactivityChecker = null ;
551581 }
552- server . close ( ( ) => {
582+ server . close ( async ( ) => {
553583 telemetryService . stopActiveTime ( ) ;
584+
585+ // Update metadata one final time before exiting
586+ try {
587+ const history = services . chatHistory ?. getHistory ( ) ;
588+ await updateAgentMetadata ( history ) ;
589+ } catch ( err ) {
590+ logger . debug ( "Failed to update metadata (non-critical)" , err as any ) ;
591+ }
592+
554593 gracefulExit ( 0 ) . catch ( ( err ) => {
555594 logger . error ( `Graceful exit failed: ${ formatError ( err ) } ` ) ;
556595 process . exit ( 1 ) ;
0 commit comments