@@ -613,16 +613,32 @@ export interface TaskExecuteContext<S> {
613613 * Context provided to task onIdle handler.
614614 *
615615 * Called when either onEvent or execute completes without scheduling
616- * another execution. Use this to schedule cleanup or maintenance .
616+ * another execution. Use this to update state, schedule cleanup, or terminate .
617617 */
618618export interface TaskIdleContext < S > {
619+ // State access
619620 /** Get current state */
620621 readonly state : Effect . Effect < S | null , never , never > ;
622+
623+ // State mutations
624+ /** Replace the entire state */
625+ readonly setState : ( state : S ) => Effect . Effect < void , never , never > ;
626+ /** Update state via transformation function (no-op if state is null) */
627+ readonly updateState : ( fn : ( current : S ) => S ) => Effect . Effect < void , never , never > ;
628+
629+ // Scheduling
621630 /** Schedule execution (e.g., for delayed cleanup) */
622631 readonly schedule : ( when : Duration . DurationInput | number | Date ) => Effect . Effect < void , never , never > ;
632+ /** Cancel any scheduled execution */
633+ readonly cancelSchedule : ( ) => Effect . Effect < void , never , never > ;
634+ /** Get the currently scheduled execution time (null if none) */
635+ readonly getScheduledTime : ( ) => Effect . Effect < number | null , never , never > ;
636+
637+ // Cleanup
623638 /** Terminate the task immediately - cancel alarms and delete all state */
624639 readonly terminate : ( ) => Effect . Effect < never , never , never > ;
625640
641+ // Metadata
626642 /** The unique instance ID for this task */
627643 readonly instanceId : string ;
628644 /** The name of this job (as registered) */
@@ -635,18 +651,32 @@ export interface TaskIdleContext<S> {
635651 * Context provided to task onError handler.
636652 *
637653 * Called when onEvent or execute throws an error.
638- * Use this to log errors, update state, or schedule retries.
654+ * Use this to log errors, update state, schedule retries, or terminate .
639655 */
640656export interface TaskErrorContext < S > {
657+ // State access
641658 /** Get current state */
642659 readonly state : Effect . Effect < S | null , never , never > ;
660+
661+ // State mutations
662+ /** Replace the entire state */
663+ readonly setState : ( state : S ) => Effect . Effect < void , never , never > ;
643664 /** Update state (e.g., to track error count) */
644665 readonly updateState : ( fn : ( current : S ) => S ) => Effect . Effect < void , never , never > ;
666+
667+ // Scheduling
645668 /** Schedule execution (e.g., for retry) */
646669 readonly schedule : ( when : Duration . DurationInput | number | Date ) => Effect . Effect < void , never , never > ;
670+ /** Cancel any scheduled execution */
671+ readonly cancelSchedule : ( ) => Effect . Effect < void , never , never > ;
672+ /** Get the currently scheduled execution time (null if none) */
673+ readonly getScheduledTime : ( ) => Effect . Effect < number | null , never , never > ;
674+
675+ // Cleanup
647676 /** Terminate the task immediately - cancel alarms and delete all state */
648677 readonly terminate : ( ) => Effect . Effect < never , never , never > ;
649678
679+ // Metadata
650680 /** The unique instance ID for this task */
651681 readonly instanceId : string ;
652682 /** The name of this job (as registered) */
0 commit comments