import type { QueryClient } from "@tanstack/react-query"; import type { ResourceSuggestion, ResourceSuggestionProposal, SuggestionDecision, SuggestionOperation, SuggestionStatus } from "../../review/suggestions/types.js"; import type { ReviewComment, ReviewCommentKind, ReviewDiscussionState, ReviewThreadPreference, ReviewMention, ReviewResolutionTarget, ReviewStatus, ReviewStatusEntry } from "../../review/types.js"; export interface ListReviewCommentsParams { resourceType: string; resourceId: string; includeResolved?: boolean; includeDeleted?: boolean; targetId?: string | null; newestFirst?: boolean; limit?: number; } export interface ListReviewCommentsResult { comments: ReviewComment[]; discussion: ReviewDiscussionState; reviewStatus: ReviewStatusEntry | null; summary: { openCount: number; agentQueueCount: number; }; } export interface GetReviewFeedbackParams { resourceType: string; resourceId: string; includeHumanTargeted?: boolean; limit?: number; } export interface GetReviewFeedbackResult { comments: ReviewComment[]; } export interface CreateReviewCommentInput { resourceType: string; resourceId: string; targetId?: string | null; kind?: ReviewCommentKind; anchor?: unknown; body: string; authorName?: string | null; resolutionTarget?: ReviewResolutionTarget | null; mentions?: ReviewMention[]; metadata?: Record; clientOperationId?: string; } export interface ReplyReviewCommentInput { resourceType: string; resourceId: string; commentId: string; body: string; authorName?: string | null; resolutionTarget?: ReviewResolutionTarget | null; mentions?: ReviewMention[]; metadata?: Record; clientOperationId?: string; } export interface ReactToReviewCommentInput { resourceType: string; resourceId: string; commentId: string; reaction: string; active: boolean; } export interface SetReviewThreadUnreadInput { resourceType: string; resourceId: string; threadId: string; unread: boolean; } export interface SetReviewThreadsUnreadInput { resourceType: string; resourceId: string; threadIds: string[]; unread: boolean; } export interface SetReviewThreadMutedInput { resourceType: string; resourceId: string; threadId: string; muted: boolean; } export type ReviewThreadStatus = "open" | "resolved"; export declare function useReactToReviewComment(): import("@tanstack/react-query").UseMutationResult<{ commentId: string; actorEmail: string; reaction: string; active: boolean; }, Error, ReactToReviewCommentInput, unknown>; export declare function useSetReviewThreadUnread(): import("@tanstack/react-query").UseMutationResult; export declare function useSetReviewThreadsUnread(): import("@tanstack/react-query").UseMutationResult<(ReviewThreadPreference & { threadId: string; })[], Error, SetReviewThreadsUnreadInput, unknown>; export declare function useSetReviewThreadMuted(): import("@tanstack/react-query").UseMutationResult; export interface ResolveReviewThreadInput { resourceType: string; resourceId: string; threadId?: string; commentId?: string; status?: ReviewThreadStatus; resolutionNote?: string; } export interface ResolveReviewThreadResult { threadId: string; status: ReviewThreadStatus; resolved: boolean; updatedCount: number; resolutionNote: string | null; comment: ReviewComment; } export interface DeleteReviewCommentInput { resourceType: string; resourceId: string; commentId: string; } export interface UpdateReviewCommentInput { resourceType: string; resourceId: string; commentId: string; body?: string; anchor?: unknown; mentions?: ReviewMention[]; } export interface ConsumeReviewFeedbackInput { resourceType: string; resourceId: string; commentIds: string[]; } export interface SendReviewThreadToAgentInput { resourceType: string; resourceId: string; threadId: string; } export interface SetReviewStatusInput { resourceType: string; resourceId: string; status: ReviewStatus; note?: string | null; metadata?: Record; } export interface ListResourceSuggestionsParams { resourceType: string; resourceId: string; statuses?: SuggestionStatus[]; } export interface CreateResourceSuggestionInput { resourceType: string; resourceId: string; adapterKind: string; baseRevision: string; summary: string; idempotencyKey: string; operations: SuggestionOperation[]; metadata?: Record; } export interface DecideResourceSuggestionInput { id: string; decision: SuggestionDecision | "withdrawn"; idempotencyKey: string; observedBase: string; observedRevision?: number; /** Where the resource's editor showed the suggestion; editors set it. */ placement?: unknown; } export interface CreateResourceSuggestionProposalInput { resourceType: string; resourceId: string; adapterKind: string; baseRevision: string; summary: string; proposalId?: string; idempotencyKey: string; suggestions: { summary: string; operations: SuggestionOperation[]; metadata?: Record; }[]; } export interface DecideResourceSuggestionProposalInput { proposalId: string; decision: SuggestionDecision; idempotencyKey: string; members: { id: string; observedRevision: number; observedBase: string; /** Where the resource's editor showed the suggestion; editors set it. */ placement?: unknown; }[]; } export interface ResourceSuggestionProposalResult { proposal: ResourceSuggestionProposal; suggestions: ResourceSuggestion[]; } export interface UpdateResourceSuggestionInput { id: string; observedRevision: number; idempotencyKey: string; operations: SuggestionOperation[]; summary?: string; } type ReviewResource = Pick; type ReviewQueryAction = "list-review-comments" | "list-resource-suggestions"; type OptimisticTransform = (data: unknown, params: unknown) => unknown; export interface ReviewOptimisticMutation { action: ReviewQueryAction; resource: ReviewResource; transform: OptimisticTransform; onSuccess?: (result: unknown) => OptimisticTransform; successReplacesOptimistic?: boolean; } export interface ReviewOptimisticMutationContext { operationId: string; action: ReviewQueryAction; resource: ReviewResource; queryHashes: string[]; } export declare class ReviewOptimisticCache { private readonly queryClient; private readonly queries; private readonly resourceOperations; private readonly activeMutations; private nextOperation; private rendering; constructor(queryClient: QueryClient); begin(mutation: ReviewOptimisticMutation): ReviewOptimisticMutationContext; succeed(context: ReviewOptimisticMutationContext | undefined, result: unknown): void; fail(context: ReviewOptimisticMutationContext | undefined): void; settle(context: ReviewOptimisticMutationContext | undefined): void; private render; private attach; } export declare function insertOptimisticComment(comments: ReviewComment[], comment: ReviewComment, params: unknown): ReviewComment[]; export declare function replaceOptimisticSuggestion(suggestions: ResourceSuggestion[], optimisticId: string, result: ResourceSuggestion): ResourceSuggestion[]; export declare function reconcileSuggestionAmendment(suggestions: ResourceSuggestion[], saved: ResourceSuggestion): ResourceSuggestion[]; export declare function useReviewComments(params: ListReviewCommentsParams, options?: { enabled?: boolean; }): import("@tanstack/react-query").UseQueryResult, Error>; export declare function useReviewFeedback(params: GetReviewFeedbackParams, options?: { enabled?: boolean; }): import("@tanstack/react-query").UseQueryResult, Error>; export declare function useCreateReviewComment(): import("@tanstack/react-query").UseMutationResult; export declare function useReplyReviewComment(): import("@tanstack/react-query").UseMutationResult; export declare function useResolveReviewThread(): import("@tanstack/react-query").UseMutationResult; export declare function useDeleteReviewComment(): import("@tanstack/react-query").UseMutationResult<{ commentId: string; deleted: true; updatedCount: number; }, Error, DeleteReviewCommentInput, unknown>; export declare function useUpdateReviewComment(): import("@tanstack/react-query").UseMutationResult; export declare function useConsumeReviewFeedback(): import("@tanstack/react-query").UseMutationResult<{ consumedCommentIds: string[]; updatedCount: number; }, Error, ConsumeReviewFeedbackInput, unknown>; export declare function useSendReviewThreadToAgent(): import("@tanstack/react-query").UseMutationResult<{ resourceType: string; resourceId: string; threadId: string; resolutionTarget: "agent"; consumedAt: null; updatedCount: number; ownerEmail: string | null; orgId: string | null; visibility: "private" | "org" | "public"; }, Error, SendReviewThreadToAgentInput, unknown>; export declare function useSetReviewStatus(): import("@tanstack/react-query").UseMutationResult; export declare function useResourceSuggestions(params: ListResourceSuggestionsParams, options?: { enabled?: boolean; }): import("@tanstack/react-query").UseQueryResult, Error>; export declare function useCreateResourceSuggestion(): import("@tanstack/react-query").UseMutationResult; export declare function useCreateResourceSuggestionProposal(): import("@tanstack/react-query").UseMutationResult; export declare function useDecideResourceSuggestionProposal(): import("@tanstack/react-query").UseMutationResult; /** Shows every listed proposal member as decided until the server answers. */ export declare function proposalDecisionOverlay(input: DecideResourceSuggestionProposalInput, queryClient: QueryClient): ReviewOptimisticMutation; export declare function useDecideResourceSuggestion(): import("@tanstack/react-query").UseMutationResult<{ suggestion: ResourceSuggestion; decision: unknown; }, Error, DecideResourceSuggestionInput, unknown>; export declare function useUpdateResourceSuggestion(): import("@tanstack/react-query").UseMutationResult; export {};