Some checks failed
Release Gate / gate (push) Has been cancelled
- ChatWindow.TranscriptRendering partial을 추가해 transcript windowing, 증분 렌더, 스크롤 보존 로직을 메인 ChatWindow.xaml.cs에서 분리 - StreamingToolExecutionCoordinator를 도입해 read-only 도구 prefetch, tool-use 스트리밍 수신, context overflow/transient error 복구를 별도 계층으로 이동 - AgentLoopRuntimeThresholds helper를 추가해 no-tool, plan retry, terminal evidence gate 임계값 계산을 AgentLoopService에서 분리 - AgentLoopTransitions.Execution은 coordinator thin wrapper 중심 구조로 정리해 이후 executor 고도화와 정책 변경이 덜 위험하도록 개선 - README와 docs/DEVELOPMENT.md를 2026-04-09 09:14 (KST) 기준으로 갱신 - 검증: dotnet build src/AxCopilot/AxCopilot.csproj -c Release -v minimal -p:OutputPath=bin\\verify\\ -p:IntermediateOutputPath=obj\\verify\\ (경고 0, 오류 0)
53 lines
1.9 KiB
C#
53 lines
1.9 KiB
C#
namespace AxCopilot.Services.Agent;
|
|
|
|
internal static class AgentLoopRuntimeThresholds
|
|
{
|
|
public static int GetNoToolCallResponseThreshold(int defaultValue)
|
|
=> ResolveThresholdValue(
|
|
Environment.GetEnvironmentVariable("AXCOPILOT_NOTOOL_RESPONSE_THRESHOLD"),
|
|
defaultValue,
|
|
min: 1,
|
|
max: 6);
|
|
|
|
public static int GetNoToolCallRecoveryMaxRetries(int defaultValue)
|
|
=> ResolveThresholdValue(
|
|
Environment.GetEnvironmentVariable("AXCOPILOT_NOTOOL_RECOVERY_MAX_RETRIES"),
|
|
defaultValue,
|
|
min: 0,
|
|
max: 6);
|
|
|
|
public static int GetPlanExecutionRetryMax(int defaultValue)
|
|
=> ResolveThresholdValue(
|
|
Environment.GetEnvironmentVariable("AXCOPILOT_PLAN_EXECUTION_RETRY_MAX"),
|
|
defaultValue,
|
|
min: 0,
|
|
max: 6);
|
|
|
|
public static int GetTerminalEvidenceGateMaxRetries(int defaultValue)
|
|
=> ResolveThresholdValue(
|
|
Environment.GetEnvironmentVariable("AXCOPILOT_TERMINAL_EVIDENCE_GATE_MAX_RETRIES"),
|
|
defaultValue,
|
|
min: 0,
|
|
max: 3);
|
|
|
|
public static int ResolveNoToolCallResponseThreshold(string? envRaw)
|
|
=> ResolveThresholdValue(envRaw, defaultValue: 2, min: 1, max: 6);
|
|
|
|
public static int ResolveNoToolCallRecoveryMaxRetries(string? envRaw)
|
|
=> ResolveThresholdValue(envRaw, defaultValue: 3, min: 0, max: 6);
|
|
|
|
public static int ResolvePlanExecutionRetryMax(string? envRaw)
|
|
=> ResolveThresholdValue(envRaw, defaultValue: 2, min: 0, max: 6);
|
|
|
|
public static int ResolveTerminalEvidenceGateMaxRetries(string? envRaw)
|
|
=> ResolveThresholdValue(envRaw, defaultValue: 1, min: 0, max: 3);
|
|
|
|
private static int ResolveThresholdValue(string? raw, int defaultValue, int min, int max)
|
|
{
|
|
if (!int.TryParse(raw, out var value))
|
|
return defaultValue;
|
|
|
|
return Math.Clamp(value, min, max);
|
|
}
|
|
}
|