import type { SpecStatus, SpecType, SpecScope, SpecTarget, ToolResult } from '../common/index.js';
import type { Actuals } from '../estimation.js';
import type { ProjectKnowledge } from '../project.js';
import type { Spec, ChecklistCategory, SpecDiagram, SpecSplitSuggestion, ReconcileChange } from './core.js';
export interface CreateSpecInput {
    title: string;
    description: string;
    /** SPEC-509: optional — auto-detected from git root when omitted */
    projectPath?: string;
    type?: SpecType;
    scope?: SpecScope;
    target?: SpecTarget;
    tags?: string[];
    feature?: string;
    clarificationSessionId?: string;
    /** SPEC-224: format for acceptance criteria in spec.md */
    acFormat?: 'bdd' | 'checkbox';
    /**
     * SPEC-584: Answers to pending interactiveQuestions from a previous call.
     * Key = question header/key, value = selected option label.
     * Required when the previous response contained interactiveQuestions[].
     */
    clarificationAnswers?: Record<string, string>;
    /** SPEC-612: Explicit out-of-scope items. If omitted, Planu auto-suggests based on the description. */
    outOfScope?: string[];
    /** SPEC-697: Spec ID for agent team findings synthesis path. Required with agentTeamFindings. */
    specId?: string;
    /** SPEC-697: Agent team findings from parallel domain-expert agents. */
    agentTeamFindings?: {
        role: string;
        findings: string;
    }[];
    /** SPEC-722: Session ID of the LLM calling create_spec (used for planner token). */
    sessionId?: string | undefined;
    /** SPEC-722: Model ID of the planner (e.g. "claude-opus-4-5"). */
    modelId?: string | undefined;
    /** SPEC-722: Host/agent platform identifier (e.g. "claude-code"). */
    host?: string | undefined;
}
export interface UpdateStatusInput {
    specId: string;
    projectId?: string;
    projectPath?: string;
    status: SpecStatus;
    /** Session ID of the agent/session performing this lifecycle transition. */
    sessionId?: string;
    /** Concrete model ID used for this lifecycle transition. */
    modelId?: string;
    /**
     * SDD model tier evidence for the current phase.
     * - max: frontier analysis/arbitration tier
     * - implementation: lower/intermediate implementer tier
     * - review: reviewer tier
     */
    modelTierUsed?: 'max' | 'implementation' | 'review';
    /** SHA-256 hash of the persisted context package used for this transition. */
    contextHash?: string;
    /** Path to the persisted handoff artifact generated by package_handoff. */
    handoffPath?: string;
    /** Optional external artifact identifier when handoff is stored outside the filesystem. */
    handoffArtifactId?: string;
    /** Reviewer identity/evidence required before closing a spec. */
    reviewedBy?: string;
    /** Arbiter identity/evidence required before closing a spec. */
    arbitratedBy?: string;
    /** True when implementation drift requires reconcile_spec before done. */
    reconcileRequired?: boolean;
    actuals?: Actuals;
    autoCreateBranch?: boolean;
    reviewNotes?: string;
    force?: boolean;
    forceStatus?: boolean;
    /**
     * SPEC-721: Required when forceStatus=true. Must be ≥100 characters explaining
     * why the validate gate is being bypassed. Stored in the audit-trail.
     */
    forceStatusReason?: string;
    /**
     * SPEC-731: Non-destructive preview mode.
     * When true, all gates are evaluated but NO writes, lock acquisitions, or
     * transition-log appends occur. The response shape is identical to a real call
     * except dryRun: true discriminator is set.
     */
    dry_run?: boolean;
    /**
     * SPEC-733: Required for reverse transitions (done→implementing, discarded→draft).
     * Must be ≥30 characters explaining why the spec is being reopened.
     */
    reason?: string;
    /**
     * SPEC-769: Force-approve a spec that scored below 70 on the readiness gate.
     * When true, the transition proceeds and qualityWarnings[] is written to spec.md frontmatter.
     */
    forceApprove?: boolean;
}
/**
 * SPEC-769: Output from the readiness gate check in update_status(approved).
 */
export interface ReadinessGateOutput {
    /** Non-null when the transition must be blocked. */
    blockResult: ToolResult | null;
    /** Warnings collected when force-approved with score < 70. Empty otherwise. */
    qualityWarnings: string[];
}
/**
 * SPEC-780: Output from the format gate check in update_status(approved).
 * Mirrors ReadinessGateOutput so callers can merge qualityWarnings from both gates.
 */
export interface FormatGateOutput {
    /** Non-null when the transition must be blocked (forceApprove not set, format invalid). */
    blockResult: ToolResult | null;
    /** Serialized format-validator errors collected when force-approved with invalid format. Empty otherwise. */
    qualityWarnings: string[];
}
/**
 * SPEC-731: Result returned when dry_run: true is passed to update_status.
 * Gates are evaluated but nothing is written to disk.
 */
export interface DryRunResult {
    ok: true;
    dryRun: true;
    wouldTransition: boolean;
    gates: {
        dod: 'pass' | 'fail' | 'skip';
        validate: 'pass' | 'fail' | 'skip';
        qa: 'pass' | 'fail' | 'skip';
        security: 'pass' | 'fail' | 'skip';
        lock: 'available' | 'busy';
        compliance: 'pass' | 'fail' | 'skip';
    };
    blockingReasons: string[];
}
export interface SummarizeSpecInput {
    specId: string;
    projectId: string;
    format?: 'executive' | 'technical' | 'oneliner';
    experienceLevel?: 'beginner' | 'expert';
}
export interface GenerateChecklistInput {
    specId: string;
    projectId: string;
    focus?: ChecklistCategory[];
    experienceLevel?: 'beginner' | 'expert';
}
export interface ReconcileSpecInput {
    specId: string;
    projectId: string;
    autoDetect?: boolean;
    livingSpec?: boolean;
    changes?: ReconcileChange[];
}
export interface ClarifyRequirementsInput {
    projectId: string;
    topic: string;
    context?: string;
    maxQuestions?: number;
    answers?: Record<string, string>;
    sessionId?: string;
}
export interface GenerateADRInput {
    specId: string;
    projectId: string;
    decisions?: string[];
}
export interface ChallengeSpecInput {
    specId: string;
    projectId?: string;
    projectPath?: string;
    focus?: ('failures' | 'concurrency' | 'scale' | 'security' | 'data-consistency')[];
}
export interface PostCreationSuggestion {
    tool: string;
    reason: string;
    templateCategory?: string;
}
export interface CreateSpecResult {
    specId: string;
    specPath: string;
    technicalPath: string;
    progressPath?: string;
    executiveReportPath?: string;
    technicalReportPath?: string;
    diagrams: SpecDiagram[];
    splitSuggestion?: SpecSplitSuggestion;
    message: string;
}
export interface SpecMigrationResult {
    migratedCount: number;
    errors: string[];
}
/** Result of SPEC-461 lean format migration. */
export interface LeanMigrationResult {
    migratedCount: number;
    skippedCount: number;
    errors: string[];
}
export interface SpecMigrationDeps {
    listSpecs: (projectId: string) => Promise<Spec[]>;
    updateSpec: (projectId: string, specId: string, updates: Partial<Spec>) => Promise<Spec>;
}
export type ChallengeSpecFocus = 'failures' | 'concurrency' | 'scale' | 'security' | 'data-consistency';
export type { ScopeFilter, ScopeFilterConfig } from './core.js';
export interface SplitAnalysisInput {
    criteriaCount: number;
    moduleCount: number;
    estimatedHours: number;
    description: string;
    type: SpecType;
    scope: SpecScope;
    target: SpecTarget;
}
export interface MermaidGeneratorInput {
    spec: Spec;
    knowledge: ProjectKnowledge | null;
    hasDatabase: boolean;
    hasUi: boolean;
    hasTransitions: boolean;
}
export interface LayerNode {
    id: string;
    label: string;
}
export interface ListSpecsInput {
    projectId?: string;
    projectPath?: string;
    status?: SpecStatus;
    type?: SpecType;
    detail?: 'summary' | 'full';
    /** SPEC-584: Answers to pending interactiveQuestions from the previous call. */
    clarificationAnswers?: Record<string, string>;
}
export interface SpecTemplate {
    id: string;
    name: string;
    description: string;
    type: string;
    sections: string[];
    source: 'built-in' | 'custom';
}
/** Input to analyze_spec_size tool */
export interface AnalyzeSpecSizeInput {
    projectId: string;
    specId: string;
}
/** Input to split_spec tool */
export interface SplitSpecInput {
    projectId: string;
    specId: string;
    /** Override the proposed splits (optional) */
    proposedSplits?: SplitProposal[];
}
/** A proposed sub-spec when splitting a large spec */
export interface SplitProposal {
    /** Suggested title for the new sub-spec */
    title: string;
    /** Description of this sub-spec's scope */
    description: string;
    /** Indices (0-based) of acceptance criteria from the original to include */
    criteriaIndices: number[];
    /** Other split indices this one depends on */
    dependsOn: number[];
}
/** Analysis result from analyze_spec_size */
export interface SpecSizeAnalysis {
    specId: string;
    specTitle: string;
    shouldSplit: boolean;
    reasons: string[];
    suggestedSplits: SplitProposal[];
    criteriaCount: number;
    estimatedHours: number;
    ambiguousCriteria: string[];
}
/** Result of executing split_spec */
export interface SplitResult {
    originalSpecId: string;
    supersededBy: string[];
    childSpecIds: string[];
    childTitles: string[];
    message: string;
}
//# sourceMappingURL=inputs.d.ts.map