/**
 * Host-side vocabulary of the goal domain: live views, durable change
 * payloads, message attribution, replay folds, and the scoped `goal/changed`
 * event. Kept separate from ./types.ts (the pure client-safe outlet) because
 * these declarations pull dsh-agent, dsh-llm, and cordis into the program —
 * the one-program-per-side layout forbids that on client aggregates.
 * @module @deepseek-ai/dsh-goal
 */
import type { Agent } from '@deepseek-ai/dsh-agent';
import type { GoalId, GoalRef, GoalSnapshot, GoalView } from './types.ts';
/** Goal state-changing verbs recorded in the durable source change. */
export type GoalOperation = 'create' | 'edit' | 'pause' | 'resume' | 'complete' | 'block' | 'clear';
/** Full-snapshot goal mutation committed by a durable `goal/change` event. */
export interface GoalSnapshotChangeMeta {
    readonly kind: 'goal/change';
    readonly version: 1;
    readonly operation: Exclude<GoalOperation, 'clear'>;
    readonly goal: GoalSnapshot;
    readonly roundsStarted: number;
    readonly createdAt: number;
    readonly updatedAt: number;
}
/** Tombstone retained when the current goal is cleared. */
export interface GoalClearChangeMeta {
    readonly kind: 'goal/change';
    readonly version: 1;
    readonly operation: 'clear';
    readonly cleared: GoalRef;
    readonly clearedAt: number;
}
/** Durable change union carried by the goal domain's own session event. */
export type GoalChangeMeta = GoalSnapshotChangeMeta | GoalClearChangeMeta;
/** Message attribution for admitted continuation rounds. */
export interface GoalMessageSource {
    readonly kind: 'goal';
    readonly goalId: GoalId;
    readonly revision: number;
    /** Positive admitted continuation round. */
    readonly round: number;
}
declare module '@deepseek-ai/dsh-llm' {
    interface MessageSourceMap {
        goal: GoalMessageSource;
    }
}
declare module '@deepseek-ai/dsh-session/types' {
    interface SessionEventMap {
        /**
         * Complete post-mutation goal state or clear tombstone.
         */
        'goal/change': GoalChangeMeta;
    }
}
/** Pure replay fold of durable goal facts. */
export interface FoldedGoal {
    /** Current goal, absent after a clear or before the first create. */
    readonly goal?: GoalSnapshot;
    /** Highest admitted round for the current goal. */
    readonly roundsStarted: number;
    /** Current goal creation time, absent without a current goal. */
    readonly createdAt?: number;
    /** Current goal mutation time, absent without a current goal. */
    readonly updatedAt?: number;
    /** Latest mutation ref, including a clear tombstone. */
    readonly lastRef?: GoalRef;
}
/** Live notification after one durable goal mutation commits. */
export interface GoalChanged {
    readonly operation: GoalOperation;
    readonly ref: GoalRef;
    /** Absent for a clear tombstone. */
    readonly goal?: GoalView;
}
/** Stable error codes for rejected goal reads and mutations. */
export type GoalErrorCode = 'GOAL_AGENT_NOT_LIVE' | 'GOAL_NOT_FOUND' | 'GOAL_ALREADY_EXISTS' | 'GOAL_STALE_REVISION' | 'GOAL_INVALID_OBJECTIVE' | 'GOAL_INVALID_MAX_ROUNDS' | 'GOAL_INVALID_BLOCK_REASON' | 'GOAL_INVALID_EDIT' | 'GOAL_INVALID_TRANSITION';
declare module '@deepseek-ai/cordis' {
    interface Events {
        /**
         * Goal mutation accepted by one live agent. The matching `goal/change`
         * session event has already committed. Listener failures are contained.
         * Scope-filtered dispatch (`@deepseek-ai/dsh-scope`): agent-scoped listeners receive only that agent.
         * @param payload.agent - agent whose session owns the goal.
         * @param payload.change - fresh current projection or clear tombstone.
         * @mode emit
         */
        'goal/changed'(this: import('@deepseek-ai/dsh-scope').Scoped<Agent>, payload: {
            agent: Agent;
            change: GoalChanged;
        }): void;
    }
}
//# sourceMappingURL=domain.d.ts.map