using Nexus.Api.Models; namespace Nexus.Api.Services; public interface IAgentProposalService { Task GetCreateOptionsAsync( CancellationToken cancellationToken = default); Task GetAsync( int limit = 50, string? cursor = null, string? status = null, CancellationToken cancellationToken = default); Task GetByIdAsync( Guid id, bool includeFileContent = true, CancellationToken cancellationToken = default); Task CreateAsync( CreateAgentProposalRequest request, string source, OpenClawInvocationMetadata invocation, CancellationToken cancellationToken = default); Task ApproveAsync( Guid id, AgentProposalActionRequest request, OpenClawInvocationMetadata invocation, CancellationToken cancellationToken = default); Task RejectAsync( Guid id, AgentProposalActionRequest request, OpenClawInvocationMetadata invocation, CancellationToken cancellationToken = default); Task RetryAsync( Guid id, AgentProposalActionRequest request, OpenClawInvocationMetadata invocation, CancellationToken cancellationToken = default); /// /// Converts requests left at a dispatch boundary by a prior process into a /// conservative state. It never calls agents.create. /// Task RecoverInterruptedRequestsAsync( CancellationToken cancellationToken = default); /// /// Processes at most one explicitly queued request. Returns false when no /// work was available. /// Task ProcessNextAsync(CancellationToken cancellationToken = default); } public sealed class AgentProposalValidationException( string field, string message) : Exception(message) { public string Field { get; } = field; }