import { AIMessageEntity } from './ai-message-entity.js';
import { CitationIconName, CitationEntity } from './citation-entity.js';
export { CitationAppearance, CitationUsageInfo, Claim } from './citation-entity.js';
import { ClientInfoEntity } from './client-info-entity.js';
import { MentionEntity } from './mention-entity.js';
import { MessageEntity } from './message-entity.js';
import { ProductInfoEntity } from './product-info-entity.js';
import { QuotedReplyEntity } from './quoted-reply-entity.js';
export { QuotedReplyData } from './quoted-reply-entity.js';
import { SensitiveUsageEntity } from './sensitive-usage-entity.js';
export { SensitiveUsage } from './sensitive-usage-entity.js';
import { StreamInfoEntity } from './stream-info-entity.js';
import { TargetedMessageInfoEntity } from './targeted-message-info-entity.js';
export { SensitivityUsageInfo } from './sensitivity-usage-info.js';
import '../account.js';
import '../agentic-identity.js';
import '../conversation-type.js';
import '../membership-source.js';
import '../membership-source-types.js';
import '../membership-types.js';
import '../role.js';

/**
 * Plan lifecycle operation.
 *
 * @experimental This API is in preview and may change in the future.
 * Diagnostic: ExperimentalTeamsPlan
 */
type PlanType = 'start' | 'continue' | 'complete' | 'stop' | 'error';
/**
 * Progress state of a Plan step.
 *
 * @experimental This API is in preview and may change in the future.
 * Diagnostic: ExperimentalTeamsPlan
 */
type StepStatus = 'active' | 'proposed' | 'completed' | 'blocked' | 'error';
/**
 * A source displayed alongside a step.
 *
 * @experimental This API is in preview and may change in the future.
 * Diagnostic: ExperimentalTeamsPlan
 */
type StepSource = {
    /** Display title of the source. */
    title: string;
    /** URL of the source. */
    url: string;
    /** Optional icon from the shared citation icon names. */
    icon?: CitationIconName;
};
/**
 * A versioned progress update; the application owns ordering and execution.
 * Keep the same ID and increment the version whenever any step field changes.
 *
 * @experimental This API is in preview and may change in the future.
 * Diagnostic: ExperimentalTeamsPlan
 */
type Step = {
    /** Stable identifier for this step within the Plan. */
    id: string;
    /** Revision number; increment for every status, title, description, or source change. */
    version: number;
    /** Display title of the step. */
    title: string;
    /** Current progress state. */
    status: StepStatus;
    /** Optional details about the work or current state. */
    description?: string;
    /** Optional reference sources associated with this step. */
    sources?: StepSource[];
};
/**
 * Prompt-bound Plan metadata carried in an activity's entities.
 * Start begins a Plan, continue adds or updates steps, and the remaining operations end it.
 *
 * @experimental This API is in preview and may change in the future.
 * Diagnostic: ExperimentalTeamsPlan
 */
type PlanInfoEntity = {
    /** Wire discriminator for Plan metadata. */
    readonly type: 'planInfo';
    /** Lifecycle operation to send. */
    planType: PlanType;
    /** Optional step updates; increment the version of every changed step. */
    steps?: Step[];
};
/**
 * Read the first Plan entity from an activity, if present.
 *
 * @experimental This API is in preview and may change in the future.
 * Diagnostic: ExperimentalTeamsPlan
 */
declare function getPlanInfo(activity: {
    entities?: readonly Entity[];
}): PlanInfoEntity | undefined;

type Entity = ClientInfoEntity | MentionEntity | MessageEntity | AIMessageEntity | StreamInfoEntity | PlanInfoEntity | CitationEntity | SensitiveUsageEntity | ProductInfoEntity | QuotedReplyEntity | TargetedMessageInfoEntity;

export { AIMessageEntity, CitationEntity, CitationIconName, ClientInfoEntity, type Entity, MentionEntity, MessageEntity, type PlanInfoEntity, type PlanType, ProductInfoEntity, QuotedReplyEntity, SensitiveUsageEntity, type Step, type StepSource, type StepStatus, StreamInfoEntity, TargetedMessageInfoEntity, getPlanInfo };
