/** * Durable and model-facing Schedule value types. * @module @deepseek-ai/dsh-schedule */ import type { Branded } from '@deepseek-ai/dsh-brand'; /** Stable reminder identity that is unique and never reused within one session. */ export type ScheduleId = Branded<'ScheduleId'>; /** Durable one-shot reminder created from a positive delay. */ export interface AfterScheduleRecord { /** Session-local stable identity. */ readonly id: ScheduleId; /** Rule discriminator for a delayed one-shot reminder. */ readonly kind: 'after'; /** Trimmed reminder content supplied at creation. */ readonly prompt: string; /** Positive safe-integer delay accepted at creation. */ readonly afterSeconds: number; /** Four-digit-year RFC 3339 UTC target. */ readonly scheduledAt: string; } /** Durable one-shot reminder created from an absolute instant. */ export interface AtScheduleRecord { /** Session-local stable identity. */ readonly id: ScheduleId; /** Rule discriminator for an absolute one-shot reminder. */ readonly kind: 'at'; /** Trimmed reminder content supplied at creation. */ readonly prompt: string; /** Four-digit-year RFC 3339 UTC target. */ readonly scheduledAt: string; } /** Durable fixed-rate reminder whose next target remains creation-anchor-aligned. */ export interface EveryScheduleRecord { /** Session-local stable identity. */ readonly id: ScheduleId; /** Rule discriminator for a fixed-rate recurring reminder. */ readonly kind: 'every'; /** Trimmed reminder content supplied at creation. */ readonly prompt: string; /** Fixed safe-integer interval, never below five minutes. */ readonly everySeconds: number; /** Earliest anchor-aligned occurrence not yet dispatched. */ readonly scheduledAt: string; } /** Structured local-calendar input accepted by `schedule_create`. */ export interface LocalAtInput { /** Four-digit ISO calendar date. */ readonly date: string; /** Local wall-clock time with optional one-to-three digit milliseconds. */ readonly time: string; /** Explicit UTC or IANA Area/Location zone. */ readonly time_zone: string; } /** Absolute selector accepted by `schedule_create`. */ export type AtInput = string | LocalAtInput; /** One-shot record variants that terminate on an id-only dispatch. */ export type OneShotScheduleRecord = AfterScheduleRecord | AtScheduleRecord; /** The v1 durable reminder record union. */ export type ScheduleRecord = OneShotScheduleRecord | EveryScheduleRecord; /** Creates one durable reminder record. */ export interface ScheduleCreateChange { readonly version: 1; readonly operation: 'create'; readonly schedule: ScheduleRecord; } /** Deletes one currently active reminder. */ export interface ScheduleDeleteChange { readonly version: 1; readonly operation: 'delete'; readonly id: ScheduleId; } /** Records that one active one-shot reminder entered the durable dispatch history. */ export interface OneShotScheduleDispatchChange { readonly version: 1; readonly operation: 'dispatch'; readonly id: ScheduleId; } /** Records one fixed-rate decision and advances directly past missed occurrences. */ export interface EveryScheduleDispatchChange { readonly version: 1; readonly operation: 'dispatch'; readonly id: ScheduleId; /** Wall-clock decision time used to select the latest due occurrence. */ readonly acceptedAt: string; } /** Durable dispatch shapes supported by the current rule set. */ export type ScheduleDispatchChange = OneShotScheduleDispatchChange | EveryScheduleDispatchChange; /** Strict version-1 durable Schedule mutation union. */ export type ScheduleChange = ScheduleCreateChange | ScheduleDeleteChange | ScheduleDispatchChange; /** Current delivery timing derived from the durable record and wall clock. */ export type ScheduleState = 'scheduled' | 'overdue'; /** Fixed v1 delivery boundary: the original session must be live. */ export type ScheduleDeliveryMode = 'session-local'; /** Complete model-facing view of one active reminder. */ export type ScheduleView = ScheduleRecord & { /** Whether the target remains in the future. */ readonly state: ScheduleState; /** Reminder delivery never leaves the owning session. */ readonly deliveryMode: ScheduleDeliveryMode; }; /** Management operations whose persistence barrier may be uncertain. */ export type SchedulePersistenceOperation = 'create' | 'list' | 'delete'; /** Stable error returned for an empty reminder prompt. */ export interface InvalidPromptError { readonly code: 'invalid_prompt'; readonly message: string; } /** Stable error returned for a missing, conflicting, or unsupported rule selector. */ export interface InvalidSelectorError { readonly code: 'invalid_selector'; readonly message: string; } /** Stable error returned for an invalid rule or management argument. */ export interface InvalidRuleError { readonly code: 'invalid_rule'; readonly message: string; } /** Stable error returned for an invalid or unsupported IANA time zone. */ export interface InvalidTimeZoneError { readonly code: 'invalid_time_zone'; readonly message: string; } /** Stable error returned when an absolute target is not strictly future. */ export interface NotFutureError { readonly code: 'not_future'; readonly message: string; } /** Stable error returned when the computed instant cannot use a four-digit UTC year. */ export interface TimeOutOfRangeError { readonly code: 'time_out_of_range'; readonly message: string; } /** Stable error returned when a fixed-rate rule runs more often than supported. */ export interface FrequencyTooHighError { readonly code: 'frequency_too_high'; readonly message: string; } /** Stable error returned when the durable Schedule stream is malformed. */ export interface CorruptScheduleLogError { readonly code: 'corrupt_schedule_log'; readonly message: string; } /** Stable error returned when a required persistence checkpoint did not complete. */ export interface PersistenceUncertainError { readonly code: 'persistence_uncertain'; readonly message: string; readonly operation: SchedulePersistenceOperation; readonly id?: ScheduleId; } /** Stable fallback that does not disclose an internal exception. */ export interface InternalScheduleError { readonly code: 'internal_error'; readonly message: string; } /** Closed v1 Schedule management error union. */ export type ScheduleToolError = InvalidPromptError | InvalidSelectorError | InvalidRuleError | InvalidTimeZoneError | NotFutureError | TimeOutOfRangeError | FrequencyTooHighError | CorruptScheduleLogError | PersistenceUncertainError | InternalScheduleError; /** Canonical `schedule_create` value. */ export type ScheduleCreateValue = ScheduleView | ScheduleToolError; /** Canonical `schedule_list` value. */ export type ScheduleListValue = ScheduleView[] | ScheduleToolError; /** Successful `schedule_delete` value, including the non-mutating not-found result. */ export type ScheduleDeleteResult = { readonly id: ScheduleId; readonly deleted: true; } | { readonly id: ScheduleId; readonly deleted: false; readonly code: 'schedule_not_found'; }; /** Canonical `schedule_delete` value. */ export type ScheduleDeleteValue = ScheduleDeleteResult | ScheduleToolError; declare module '@deepseek-ai/dsh-session/types' { interface SessionEventMap { /** * Versioned Schedule mutation. The owning package validates the complete * session-local transition stream before accepting a candidate event. */ 'schedule/change': ScheduleChange; } } //# sourceMappingURL=types.d.ts.map