/** * 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; 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, payload: { agent: Agent; change: GoalChanged; }): void; } } //# sourceMappingURL=domain.d.ts.map