@@ -1654,6 +1654,7 @@ const Settings: React.FC<SettingsProps> = ({
16541654 const [ coworkMemoryEnabled , setCoworkMemoryEnabled ] = useState < boolean > ( coworkConfig . memoryEnabled ?? true ) ;
16551655 const [ coworkMemoryLlmJudgeEnabled , setCoworkMemoryLlmJudgeEnabled ] = useState < boolean > ( coworkConfig . memoryLlmJudgeEnabled ?? false ) ;
16561656 const [ skipMissedJobs , setSkipMissedJobs ] = useState < boolean > ( coworkConfig . skipMissedJobs ?? true ) ;
1657+ const [ openClawHeartbeatEnabled , setOpenClawHeartbeatEnabled ] = useState < boolean > ( coworkConfig . openClawHeartbeatEnabled ?? true ) ;
16571658 const [ embeddingEnabled , setEmbeddingEnabled ] = useState < boolean > ( coworkConfig . embeddingEnabled ?? false ) ;
16581659 const [ embeddingProvider , setEmbeddingProvider ] = useState < string > ( coworkConfig . embeddingProvider ?? 'openai' ) ;
16591660 const [ embeddingModel , setEmbeddingModel ] = useState < string > ( coworkConfig . embeddingModel ?? '' ) ;
@@ -1691,6 +1692,7 @@ const Settings: React.FC<SettingsProps> = ({
16911692 setCoworkMemoryEnabled ( coworkConfig . memoryEnabled ?? true ) ;
16921693 setCoworkMemoryLlmJudgeEnabled ( coworkConfig . memoryLlmJudgeEnabled ?? false ) ;
16931694 setSkipMissedJobs ( coworkConfig . skipMissedJobs ?? true ) ;
1695+ setOpenClawHeartbeatEnabled ( coworkConfig . openClawHeartbeatEnabled ?? true ) ;
16941696 setEmbeddingEnabled ( coworkConfig . embeddingEnabled ?? false ) ;
16951697 setEmbeddingProvider ( coworkConfig . embeddingProvider ?? 'openai' ) ;
16961698 setEmbeddingModel ( coworkConfig . embeddingModel ?? '' ) ;
@@ -1709,6 +1711,7 @@ const Settings: React.FC<SettingsProps> = ({
17091711 coworkConfig . memoryLlmJudgeEnabled ,
17101712 coworkConfig . openClawSessionPolicy ?. keepAlive ,
17111713 coworkConfig . skipMissedJobs ,
1714+ coworkConfig . openClawHeartbeatEnabled ,
17121715 coworkConfig . embeddingEnabled ,
17131716 coworkConfig . embeddingProvider ,
17141717 coworkConfig . embeddingModel ,
@@ -2635,6 +2638,7 @@ const Settings: React.FC<SettingsProps> = ({
26352638 || coworkMemoryEnabled !== coworkConfig . memoryEnabled
26362639 || coworkMemoryLlmJudgeEnabled !== coworkConfig . memoryLlmJudgeEnabled
26372640 || skipMissedJobs !== ( coworkConfig . skipMissedJobs ?? true )
2641+ || openClawHeartbeatEnabled !== ( coworkConfig . openClawHeartbeatEnabled ?? true )
26382642 || openClawSessionKeepAlive !== ( coworkConfig . openClawSessionPolicy ?. keepAlive || OpenClawSessionKeepAliveValues . ThirtyDays )
26392643 || embeddingEnabled !== ( coworkConfig . embeddingEnabled ?? false )
26402644 || embeddingProvider !== ( coworkConfig . embeddingProvider ?? 'openai' )
@@ -3154,6 +3158,7 @@ const Settings: React.FC<SettingsProps> = ({
31543158 ? normalizeProvidersForSettingsSave ( previousConfig . providers as ProvidersConfig )
31553159 : normalizedProviders ;
31563160 const previousSkipMissedJobs = coworkConfig . skipMissedJobs ?? true ;
3161+ const previousOpenClawHeartbeatEnabled = coworkConfig . openClawHeartbeatEnabled ?? true ;
31573162 const previousAgentEngine = coworkConfig . agentEngine || 'openclaw' ;
31583163 const previousOpenClawSessionKeepAlive = coworkConfig . openClawSessionPolicy ?. keepAlive
31593164 || OpenClawSessionKeepAliveValues . ThirtyDays ;
@@ -3269,6 +3274,7 @@ const Settings: React.FC<SettingsProps> = ({
32693274 memoryEnabled : coworkMemoryEnabled ,
32703275 memoryLlmJudgeEnabled : coworkMemoryLlmJudgeEnabled ,
32713276 skipMissedJobs,
3277+ openClawHeartbeatEnabled,
32723278 embeddingEnabled,
32733279 embeddingProvider,
32743280 embeddingModel,
@@ -3356,6 +3362,13 @@ const Settings: React.FC<SettingsProps> = ({
33563362 if ( previousAgentEngine !== coworkAgentEngine ) {
33573363 reportAgentEngineSettingChanged ( 'agentEngine' , coworkAgentEngine , previousAgentEngine ) ;
33583364 }
3365+ if ( previousOpenClawHeartbeatEnabled !== openClawHeartbeatEnabled ) {
3366+ reportAgentEngineSettingChanged (
3367+ 'openClawHeartbeatEnabled' ,
3368+ openClawHeartbeatEnabled ,
3369+ previousOpenClawHeartbeatEnabled ,
3370+ ) ;
3371+ }
33593372 if ( previousOpenClawSessionKeepAlive !== openClawSessionKeepAlive ) {
33603373 reportAgentEngineSettingChanged (
33613374 'openClawSessionKeepAlive' ,
@@ -4637,6 +4650,23 @@ const Settings: React.FC<SettingsProps> = ({
46374650 </ div >
46384651 </ section >
46394652
4653+ < section className = "space-y-3" >
4654+ < h4 className = "text-sm font-medium text-foreground" >
4655+ { i18nService . t ( 'openClawBackgroundRuntimeTitle' ) }
4656+ </ h4 >
4657+
4658+ < div className = "rounded-xl border border-border bg-surface p-4" >
4659+ < SettingsToggleRow
4660+ title = { i18nService . t ( 'openClawHeartbeatEnabled' ) }
4661+ description = { i18nService . t ( 'openClawHeartbeatEnabledDescription' ) }
4662+ checked = { openClawHeartbeatEnabled }
4663+ onToggle = { ( ) => {
4664+ setOpenClawHeartbeatEnabled ( ( prev ) => ! prev ) ;
4665+ } }
4666+ />
4667+ </ div >
4668+ </ section >
4669+
46404670 < section className = "space-y-3" >
46414671 < h4 className = "text-sm font-medium text-foreground" >
46424672 { i18nService . t ( 'openClawMaintenanceTitle' ) }
0 commit comments