diff options
Diffstat (limited to 'src/Agent.Core/Sessions/AgentSession.cs')
| -rw-r--r-- | src/Agent.Core/Sessions/AgentSession.cs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/Agent.Core/Sessions/AgentSession.cs b/src/Agent.Core/Sessions/AgentSession.cs new file mode 100644 index 0000000..d561c8d --- /dev/null +++ b/src/Agent.Core/Sessions/AgentSession.cs @@ -0,0 +1,26 @@ +namespace Agent.Core.Sessions; + +public sealed class AgentSession(Guid sessionId) +{ + private readonly object _sync = new(); + private readonly List<ConversationMessage> _conversation = []; + + public Guid SessionId { get; } = sessionId; + public DateTimeOffset CreatedAt { get; } = DateTimeOffset.UtcNow; + public DateTimeOffset LastAccessAt { get; private set; } = DateTimeOffset.UtcNow; + + public IReadOnlyList<ConversationMessage> Conversation + { + get { lock (_sync) return _conversation.ToArray(); } + } + + public void Append(ConversationMessage message) + { + ArgumentNullException.ThrowIfNull(message); + lock (_sync) + { + _conversation.Add(message); + LastAccessAt = DateTimeOffset.UtcNow; + } + } +} |
