Forge
csharpdeeb25a2
1namespace CascadeIDE.Features.Agent.Environment;
2
3/// <summary>Coalesce duplicate environment tasks within window (ADR 0148 §8).</summary>
4public sealed class EnvironmentTaskDedup
5{
6 private readonly int _coalesceWindowMs;
7 private readonly object _gate = new();
8 private string? _lastKey;
9 private DateTimeOffset _lastAtUtc;
10
11 public EnvironmentTaskDedup(int coalesceWindowMs) => _coalesceWindowMs = Math.Max(0, coalesceWindowMs);
12
13 public bool ShouldCoalesce(string dedupKey)
14 {
15 if (_coalesceWindowMs <= 0)
16 return false;
17
18 lock (_gate)
19 {
20 var now = DateTimeOffset.UtcNow;
21 if (_lastKey == dedupKey && (now - _lastAtUtc).TotalMilliseconds < _coalesceWindowMs)
22 return true;
23
24 _lastKey = dedupKey;
25 _lastAtUtc = now;
26 return false;
27 }
28 }
29}
30
View only · write via MCP/CIDE