using Nexus.Api.Data; using Nexus.Api.Models; namespace Nexus.Api.Repositories; public interface IOpenClawRunRepository { Task> GetAsync(OpenClawRunQuery query, CancellationToken cancellationToken = default); Task GetByIdAsync(Guid id, bool tracking = false, CancellationToken cancellationToken = default); Task GetByStartIdempotencyKeyAsync(string idempotencyKey, CancellationToken cancellationToken = default); Task GetByOpenClawRunIdAsync(string openClawRunId, CancellationToken cancellationToken = default); Task> GetHistoryAsync(Guid runId, CancellationToken cancellationToken = default); Task GetInvocationAsync( Guid runId, string action, string idempotencyKey, CancellationToken cancellationToken = default); Task HasGatewayEventAsync(string gatewayEventId, CancellationToken cancellationToken = default); Task TaskExistsAsync(Guid taskId, CancellationToken cancellationToken = default); Task ProjectExistsAsync(Guid projectId, CancellationToken cancellationToken = default); Task> GetActiveSubscriptionsAsync( CancellationToken cancellationToken = default); Task AddAsync( OpenClawRun run, OpenClawRunHistory history, CancellationToken cancellationToken = default); Task AddRetryAsync( OpenClawRun source, OpenClawRun retry, OpenClawRunHistory sourceHistory, OpenClawRunHistory retryHistory, CancellationToken cancellationToken = default); Task UpdateAsync( OpenClawRun run, OpenClawRunHistory history, CancellationToken cancellationToken = default); Task UpdateProjectionAsync( OpenClawRun run, OpenClawRunHistory? history = null, CancellationToken cancellationToken = default); } public sealed record OpenClawRunSubscription(string SessionKey, string AgentId);