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 }