export type JiraMode = 'live' | 'dry-run'; export type JiraOperationName = 'create' | 'comment' | 'update' | 'transition' | 'link'; export interface JiraOperationsConfig { create?: boolean; update?: boolean; comment?: boolean; transition?: boolean | 'discover'; link?: boolean | 'discover'; } export interface JiraConfig { tracker: 'jira'; mode: JiraMode; baseUrl?: string; /** Backcompat alias used by early scaffold tests. */ siteUrl?: string; email?: string; apiToken?: string; projectKey?: string; defaultIssueType: string; operations: Required; transitions: Record; linkType?: string; labels?: string[]; components?: string[]; priority?: string; source: string[]; } export interface JiraTicketInput { summary: string; description: string; issueType?: string; labels?: string[]; components?: string[]; priority?: string; acceptanceCriteria?: string[]; implementationNotes?: string[]; } export interface JiraRenderedIssue { operation: 'create'; endpoint: string; payload: { fields: Record; }; } export interface JiraFallback { operation: JiraOperationName; reason: string; target: string; payload: unknown; humanAction: string; } export interface JiraApplyOptions { operation: JiraOperationName; target?: string; ticket?: JiraTicketInput; comment?: string; update?: Partial; transitionState?: string; linkTarget?: string; dryRun?: boolean; } export interface JiraResult { ok: boolean; live: boolean; operation: JiraOperationName; response?: unknown; fallback?: JiraFallback; } export declare function loadDotEnv(cwd?: string): Record; export declare function discoverJiraConfig(options?: { cwd?: string; env?: NodeJS.ProcessEnv; overrides?: Partial; configPath?: string; } | string, envArg?: NodeJS.ProcessEnv): JiraConfig; export declare function ticketFromMarkdown(markdown: string, fallbackSummary?: string): JiraTicketInput; export declare function readTicketInput(path: string): JiraTicketInput; export declare function renderCreateIssue(ticket: JiraTicketInput, config?: JiraConfig): JiraRenderedIssue; export declare function renderComment(comment: string): { body: string; }; export declare function renderSafeUpdate(update: Partial, config?: JiraConfig): { fields: Record; }; export declare function fallbackMarkdown(fallback: JiraFallback): string; export declare function makeFallback(operation: JiraOperationName, reason: string, target: string, payload: unknown): JiraFallback; export declare function canRunLive(config: JiraConfig, operation: JiraOperationName): boolean; export declare class JiraRestClient { private readonly config; constructor(config: JiraConfig); createIssue(ticket: JiraTicketInput): Promise; addComment(ticketKey: string, comment: string): Promise; safeUpdate(ticketKey: string, update: Partial): Promise; listTransitions(ticketKey: string): Promise>; transitionIssue(ticketKey: string, transitionId: string): Promise; listIssueLinkTypes(): Promise>; linkIssues(inwardIssue: string, outwardIssue: string, typeName: string): Promise; private request; } export declare function applyJiraOperation(options: JiraApplyOptions, config?: JiraConfig): Promise; export declare function configSummary(config: JiraConfig): Record; export declare function formatJiraDryRun(config?: JiraConfig): string; export declare function inferProjectRoot(fromPath: string): string; /** Backcompat helper for the initial package tests and thin CLI wrappers. */ export declare function isJiraConfigured(config: JiraConfig): boolean; /** Backcompat payload shape: REST method/endpoint/body plus configured flag. */ export declare function createIssuePayload(config: JiraConfig, ticket: JiraTicketInput): { operation: 'create'; configured: boolean; method: 'POST'; endpoint: string; body: JiraRenderedIssue['payload']; }; export declare function commentPayload(config: JiraConfig, ticketKey: string, comment: string): { operation: 'comment'; configured: boolean; method: 'POST'; endpoint: string; body: { body: string; }; }; export declare function safeUpdatePayload(config: JiraConfig, ticketKey: string, update: Partial): { operation: 'update'; configured: boolean; method: 'PUT'; endpoint: string; body: { fields: Record; }; }; export declare function transitionFallbackPayload(config: JiraConfig, ticketKey: string, logicalState: string): { operation: 'transition-fallback'; configured: false; target: string; body: JiraFallback; }; export declare function linkFallbackPayload(config: JiraConfig, inwardIssue: string, outwardIssue: string): { operation: 'link-fallback'; configured: false; target: string; body: JiraFallback; };