/**
 * GitHub → Neotoma issues sync (`syncIssuesFromGitHub`, `syncIssueIfStale`).
 *
 * Pulls GitHub issues and comments into local Neotoma entities:
 *   - issue entity (per GitHub issue)
 *   - conversation entity (one per issue, linked via REFERS_TO)
 *   - conversation_message entities (one per comment, PART_OF conversation);
 *     sender_kind is `user` here (GitHub mirror). MCP/CLI issue tooling uses `agent`.
 *
 * Identity: `issue` via github_number + repo; `conversation` thread via
 * `conversation_id` from {@link githubIssueThreadConversationId}; `conversation_message` via
 * schema `turn_key` (see `github_thread_keys.ts` — not `github_comment_id` alone).
 */
import type { Operations } from "../../core/operations.js";
import type { IssueSyncParams } from "./types.js";
export interface SyncResult {
    issues_synced: number;
    messages_synced: number;
    errors: string[];
}
/**
 * Pull issues from GitHub into local Neotoma entities.
 * Idempotent: uses github_number + repo as identity for issues,
 * and github_comment_id for messages.
 */
export declare function syncIssuesFromGitHub(ops: Operations, params?: IssueSyncParams): Promise<SyncResult>;
/**
 * Check if sync is needed based on staleness threshold.
 */
export declare function isSyncStale(lastSyncedAt: string | null): Promise<boolean>;
/**
 * Sync a single issue by number if it's stale.
 */
export declare function syncIssueIfStale(ops: Operations, issueNumber: number, lastSyncedAt: string | null): Promise<boolean>;
//# sourceMappingURL=syncIssuesFromGitHub.d.ts.map