/ src / lib / server / runtime / runtime-settings.ts
runtime-settings.ts
 1  import type { LoopMode } from '@/types'
 2  import {
 3    normalizeRuntimeSettingFields,
 4  } from '@/lib/runtime/runtime-loop'
 5  import { loadSettings } from '@/lib/server/settings/settings-repository'
 6  
 7  export interface RuntimeSettings {
 8    loopMode: LoopMode
 9    agentLoopRecursionLimit: number
10    delegationMaxDepth: number
11    ongoingLoopMaxIterations: number
12    ongoingLoopMaxRuntimeMs: number | null
13    shellCommandTimeoutMs: number
14    claudeCodeTimeoutMs: number
15    cliProcessTimeoutMs: number
16    streamIdleStallMs: number
17    requiredToolKickoffMs: number
18  }
19  
20  export function loadRuntimeSettings(): RuntimeSettings {
21    const settings = loadSettings()
22    const normalized = normalizeRuntimeSettingFields(settings)
23  
24    return {
25      loopMode: normalized.loopMode as LoopMode,
26      agentLoopRecursionLimit: normalized.agentLoopRecursionLimit,
27      delegationMaxDepth: normalized.delegationMaxDepth,
28      ongoingLoopMaxIterations: normalized.ongoingLoopMaxIterations,
29      ongoingLoopMaxRuntimeMs: normalized.ongoingLoopMaxRuntimeMinutes > 0 ? normalized.ongoingLoopMaxRuntimeMinutes * 60_000 : null,
30      shellCommandTimeoutMs: normalized.shellCommandTimeoutSec * 1000,
31      claudeCodeTimeoutMs: normalized.claudeCodeTimeoutSec * 1000,
32      cliProcessTimeoutMs: normalized.cliProcessTimeoutSec * 1000,
33      streamIdleStallMs: normalized.streamIdleStallSec * 1000,
34      requiredToolKickoffMs: normalized.requiredToolKickoffSec * 1000,
35    }
36  }
37  
38  export function getAgentLoopRecursionLimit(runtime: RuntimeSettings): number {
39    return runtime.loopMode === 'ongoing' ? runtime.ongoingLoopMaxIterations : runtime.agentLoopRecursionLimit
40  }