Skip to content

cayu.sessions.InMemorySessionStore

Part of cayu.sessions.base. Read the Python API overview and install the required extra.

from cayu.sessions import InMemorySessionStore

In-process session store for tests, local development, and examples.

Decorators: @model_store_surface('sessions').

Bases: MemoryExternalWaitMixin, MemorySessionExecutionMixin, MemoryCreationFenceMixin, SessionStore.

Defaults below are source expressions; Field(...) includes schema/validation settings and default_factory creates a fresh value. Inherited declarations are included. Constructor behavior follows the model or dataclass shown in the bases/decorators.

Name Type Default
supports_session_execution class attribute False
service_durability RuntimeStoreDurability RuntimeStoreDurability.DEVELOPMENT
async InMemorySessionStore.inspect_session_execution(session_id: str) -> SessionExecutionState

Read observational liveness; custom stores without leases return unknown.

async InMemorySessionStore.list_pending_session_creations(owner, *, cursor=None, limit=32)
async InMemorySessionStore.read_session_creation_decision(target)
async InMemorySessionStore.create_participant_owned_session(creation_request: ParticipantSessionCreationRequest, *, resolved_request: RunRequest, identity: SessionIdentity, binding_factory: Callable[[Session], tuple[ParticipantSessionBinding, ParticipantSessionCreationReceipt]], recipient_provenance: object | None=None, recipient_selection: _ContextViewSelectionReceipt | None=None, creation_target=None, recipient_receipt_validator=None) -> tuple[Session, ParticipantSessionCreationReceipt]
async InMemorySessionStore.load_participant_session_binding(session_id: str) -> ParticipantSessionBinding | None

load_participant_session_creation_receipt (method)

Section titled “load_participant_session_creation_receipt (method)”
async InMemorySessionStore.load_participant_session_creation_receipt(session_id: str) -> ParticipantSessionCreationReceipt | None

lookup_participant_session_creation (method)

Section titled “lookup_participant_session_creation (method)”
async InMemorySessionStore.lookup_participant_session_creation(creation_request: ParticipantSessionCreationRequest) -> tuple[Session, ParticipantSessionCreationReceipt] | None

capture_context_view_publication_source (method)

Section titled “capture_context_view_publication_source (method)”
async InMemorySessionStore.capture_context_view_publication_source(session_id: str) -> ContextViewPublicationSource
async InMemorySessionStore.capture_recipient_continuation(session_id: str) -> RecipientContinuationSelection

Select exact identity without acquiring a writer or execution authority.

Wrappers must independently qualify this coherent native read. Inheriting an implementation is not evidence that wrapper-specific state is covered.

async InMemorySessionStore.publish_context_view(manifest: _ContextViewManifest, *, publication_key: str) -> _ContextViewManifest
async InMemorySessionStore.lookup_context_view_selection(selection_key: str)
async InMemorySessionStore.lookup_context_view_publication(publication_key: str) -> _ContextViewManifest | None
async InMemorySessionStore.select_context_view(request: _ContextViewSelectionRequest) -> _ContextViewSelectionReceipt

read_context_view_selection_decision (method)

Section titled “read_context_view_selection_decision (method)”
async InMemorySessionStore.read_context_view_selection_decision(request)
async InMemorySessionStore.read_context_view(view_id: str, *, source_session_id: str) -> _ContextViewReadback

transition_context_view_ownership (method)

Section titled “transition_context_view_ownership (method)”
async InMemorySessionStore.transition_context_view_ownership(request: _ContextViewOwnershipRequest) -> _ContextViewSelectionReceipt

validate_context_view_source_closure (method)

Section titled “validate_context_view_source_closure (method)”
async InMemorySessionStore.validate_context_view_source_closure(session_id: str) -> None
async InMemorySessionStore.validate_context_view_compaction(session_id: str, expected_transcript_cursor: int) -> None

read_context_view_lifecycle_events (method)

Section titled “read_context_view_lifecycle_events (method)”
async InMemorySessionStore.read_context_view_lifecycle_events(view_id: str, *, limit: int=256, owner_participant: _ParticipantRef | None=None) -> tuple[_ContextViewLifecycleEvent, ...]
InMemorySessionStore.durable_state_paths() -> tuple[Path, ...]

Return local files that own this store’s durable state.

In-memory and remote stores return no paths. Filesystem-confined features must fail closed when the store cannot provide this evidence; custom local stores can opt in by overriding this method.

InMemorySessionStore.public_authority_alias_codec() -> PublicAuthorityAliasCodec
async InMemorySessionStore.register_public_authority_alias(public_alias: str, *, field_name: str, private_value: str, scope_session_id: str | None=None) -> None
async InMemorySessionStore.resolve_public_authority_alias(public_alias: str, *, field_name: str, scope_session_id: str | None=None) -> str | None

public_authority_private_value_exists (method)

Section titled “public_authority_private_value_exists (method)”
async InMemorySessionStore.public_authority_private_value_exists(private_value: str, *, field_name: str, scope_session_id: str | None=None) -> bool
async InMemorySessionStore.issue_targeted_tool_grants(session_id: str, *, expected_run_epoch: int, records: tuple[TargetedToolGrantRecord, ...], events: tuple[Event, ...]) -> TargetedToolGrantIssueResult
async InMemorySessionStore.list_targeted_tool_grants(session_id: str, *, interaction_id: str | None=None, limit: int=TARGETED_TOOL_GRANT_INSPECTION_MAX_RECORDS) -> tuple[TargetedToolGrantRecord, ...]
async InMemorySessionStore.load_targeted_tool_grant_state(session_id: str) -> TargetedToolGrantStateSnapshot
async InMemorySessionStore.bind_targeted_tool_grant_use(request: TargetedToolUseRequest, *, observed_at: datetime) -> TargetedToolUseResult
async InMemorySessionStore.revoke_targeted_tool_grant(tool_ref: str, *, session_id: str, expected_run_epoch: int, reason: str, revoked_at: datetime) -> TargetedToolGrantRecord | None
async InMemorySessionStore.reconstruct_targeted_tool_grants(session_id: str, *, expected_run_epoch: int, interaction_id: str, generation_id: str, agent_name: str, task_id: str | None, environment_name: str | None, principal: str | None, tenant: str | None, catalogue_revision: str, descriptors_by_id: Mapping[str, tuple[str, str, str]], capability_ceiling_names: frozenset[str], observed_at: datetime) -> TargetedToolGrantReconstructionResult
async InMemorySessionStore.create(request: RunRequest, *, identity: SessionIdentity, interaction_started_event: Event | None=None, interaction_source_messages: list[Message] | None=None, checkpoint_transform: CheckpointTransform | None=None, result_checkpoint_transform: CheckpointTransform | None=None, operation_initializer: SessionOperationInitializer | None=None, participant_binding_factory: Callable[[Session], tuple[ParticipantSessionBinding, ParticipantSessionCreationReceipt]] | None=None, participant_request_commitment: str | None=None, participant_provenance: object | None=None, recipient_selection: _ContextViewSelectionReceipt | None=None, creation_target=None, recipient_receipt_validator: Callable[[Session, ParticipantSessionCreationReceipt], object] | None=None) -> Session
async InMemorySessionStore.create_fork(*, source_session_id: str, fork: Session, source_statuses: set[SessionStatus], transcript_cursor: int | None, checkpoint_transform: CheckpointTransform | None, system_prompt_replacement: ForkSystemPromptReplacement | None=None, expected_source_run_epoch: int, operation_initializer: SessionOperationInitializer | None=None) -> Session

create_fork_with_transcript_validation (method)

Section titled “create_fork_with_transcript_validation (method)”
async InMemorySessionStore.create_fork_with_transcript_validation(*, source_session_id: str, fork: Session, source_statuses: set[SessionStatus], transcript_cursor: int | None, checkpoint_transform: CheckpointTransform | None, system_prompt_replacement: ForkSystemPromptReplacement | None=None, expected_source_run_epoch: int, transcript_validator: ForkTranscriptValidator, operation_initializer: SessionOperationInitializer | None=None) -> Session
async InMemorySessionStore.create_profiled_fork(*, source_session_id: str, fork: Session, source_statuses: set[SessionStatus], transcript_cursor: int | None, checkpoint_transform: CheckpointTransform | None, system_prompt_replacement: ForkSystemPromptReplacement | None=None, expected_source_run_epoch: int, relationship: SessionForkProfileRelationship, events: list[Event], transcript_validator: ForkTranscriptValidator | None=None, checkpoint_authority_decoder: ForkCheckpointAuthorityDecoder | None=None, operation_initializer: SessionOperationInitializer | None=None) -> ProfiledSessionForkResult
async InMemorySessionStore.load(session_id: str) -> Session | None
async InMemorySessionStore.load_state(session_id: str) -> SessionStateSnapshot | None
async InMemorySessionStore.load_invocation_snapshot(session_id: str) -> SessionInvocationSnapshot | None
async InMemorySessionStore.inspect_identity(session_id: str) -> SessionInspectionIdentity
async InMemorySessionStore.update_status(session_id: str, status: SessionStatus) -> Session
async InMemorySessionStore.transition_status(session_id: str, *, from_statuses: set[SessionStatus], to_status: SessionStatus) -> Session
async InMemorySessionStore.transition_status_and_checkpoint(session_id: str, *, from_statuses: set[SessionStatus], to_status: SessionStatus, checkpoint_transform: CheckpointTransform | None=None, store_time_checkpoint_transform: StoreTimeCheckpointTransform | None=None, result_checkpoint_transform: CheckpointTransform | None=None, interaction_started_event: Event | None=None, interaction_source_messages: list[Message] | None=None, continued_interaction_id: str | None=None, defer_interaction_source: bool=False, model_transition: SessionModelTransition | None=None, execution_profile: ExecutionProfileIdentity | None=None, execution_profile_decision: ExecutionProfileDecision | None=None, adopted_runtime_identity: SessionRuntimeIdentity | None=None, tool_capability_ceiling: ToolCapabilityCeiling | None=None, expected_latest_interaction_event_id: str | None=None, require_no_active_model_completion_dispatch: bool=False, temporary_service_admission: TemporaryServiceAdmission | None=None) -> Session
async InMemorySessionStore.admit_execution_profile_resume(session_id: str, *, from_statuses: set[SessionStatus], to_status: SessionStatus, checkpoint_transform: CheckpointTransform | None=None, store_time_checkpoint_transform: StoreTimeCheckpointTransform | None=None, result_checkpoint_transform: CheckpointTransform | None=None, execution_profile: ExecutionProfileIdentity, tool_capability_ceiling: ToolCapabilityCeiling | None=None, execution_profile_decision: ExecutionProfileDecision | None=None, adopted_runtime_identity: SessionRuntimeIdentity | None=None, interaction_started_event: Event | None=None, interaction_source_messages: list[Message] | None=None, continued_interaction_id: str | None=None, defer_interaction_source: bool=False, model_transition: SessionModelTransition | None=None, temporary_service_admission: TemporaryServiceAdmission | None=None) -> Session

Atomically compare a profile through the normal resume transition.

async InMemorySessionStore.admit_session_invocation(session_id: str, *, admission: SessionInvocationAdmission) -> Session

Atomically claim one valid profiled invocation and its interaction.

apply_invocation_lifecycle_command (method)

Section titled “apply_invocation_lifecycle_command (method)”
async InMemorySessionStore.apply_invocation_lifecycle_command(command: object) -> object

Apply one command only after authenticating the store protocol.

async InMemorySessionStore.settle_session_invocation(command: Any) -> InteractionTransitionResult
async InMemorySessionStore.release_session_invocation(command: Any) -> Any
async InMemorySessionStore.reject_execution_profile_resume(session_id: str, *, expected_session_instance_id: str | None=None, expected_statuses: set[SessionStatus], expected_run_epoch: int, expected_profile: ExecutionProfileIdentity, candidate_profile: ExecutionProfileIdentity, event: Event, decision: ExecutionProfileDecision | None=None, expected_active_invocation_profile_authority: CheckpointValueAuthority | None=None) -> ExecutionProfileRejectionResult

reject_active_invocation_execution_profile (method)

Section titled “reject_active_invocation_execution_profile (method)”
async InMemorySessionStore.reject_active_invocation_execution_profile(session_id: str, *, expected_session_instance_id: str | None=None, expected_statuses: set[SessionStatus], expected_run_epoch: int, expected_active_invocation_profile: ActiveInvocationExecutionProfile, candidate_profile: ExecutionProfileIdentity, event: Event, decision: ExecutionProfileDecision | None=None) -> ExecutionProfileRejectionResult

Atomically compare checkpoint authority and reject changed continuation.

transition_status_if_no_queued_messages (method)

Section titled “transition_status_if_no_queued_messages (method)”
async InMemorySessionStore.transition_status_if_no_queued_messages(session_id: str, *, from_statuses: set[SessionStatus], to_status: SessionStatus, checkpoint_mutation: dict[str, Any] | None=None) -> Session
async InMemorySessionStore.publish_interaction_transition(session_id: str, *, event: Event, from_statuses: set[SessionStatus], to_status: SessionStatus, only_if_no_queued_messages: bool=False, model_completion_stage_settlement: ModelCompletionStageSettlementRequest | None=None, checkpoint_mutation: dict[str, Any] | None=None, terminal_event: Event | None=None, terminal_decision: InvocationTerminalDecision | None=None, expected_session_instance_id: str | None=None, expected_active_invocation_profile: ActiveInvocationExecutionProfile | None=None, expected_invocation_authority_state: Literal['active', 'released']='active', expected_recovery_claim_id: str | None=None, terminalization_only: bool=False, terminalization_plan_ownership: Any=None) -> InteractionTransitionResult

load_interaction_transition_receipt (method)

Section titled “load_interaction_transition_receipt (method)”
async InMemorySessionStore.load_interaction_transition_receipt(session_id: str, *, transition: InteractionTransitionSpec, expected_recovery_claim_id: str | None=None) -> InteractionTransitionReceiptResult | None

load_historical_interaction_settlement (method)

Section titled “load_historical_interaction_settlement (method)”
async InMemorySessionStore.load_historical_interaction_settlement(session_id: str, *, expected_session_instance_id: str, expected_event: Event, expected_profile: ExecutionProfileIdentity) -> InteractionTransitionReceiptResult

Read exact prior settlement evidence without granting run authority.

Unlike invocation release lookup, this permits a later current epoch. It cannot release a fence or authorize a historical invocation: callers must separately acquire their own execution or mutation authority.

load_invocation_settlement_transition (method)

Section titled “load_invocation_settlement_transition (method)”
async InMemorySessionStore.load_invocation_settlement_transition(session_id: str, *, expected_session_instance_id: str, expected_active_invocation_profile: ActiveInvocationExecutionProfile) -> InteractionTransitionSpec | None

Resolve exact terminal settlement for one active invocation.

Event lookup is bounded and supplies only the receipt identity. The backend authenticates the complete stored receipt and its invocation tuple before returning the transition. Release compares the same receipt again inside its mutation transaction.

async InMemorySessionStore.fence_stalled_run(session_id: str, *, statuses: set[SessionStatus], inactive_for_seconds: int) -> Session | None
async InMemorySessionStore.reserve_stalled_run_recovery(session_id: str, *, statuses: set[SessionStatus], inactive_for_seconds: int | None, checkpoint_transform: StoreTimeCheckpointTransform) -> Session | None

fence_run_and_transform_checkpoint (method)

Section titled “fence_run_and_transform_checkpoint (method)”
async InMemorySessionStore.fence_run_and_transform_checkpoint(session_id: str, *, statuses: set[SessionStatus], checkpoint_transform: CheckpointTransform, result_checkpoint_transform: CheckpointTransform | None=None) -> Session
async InMemorySessionStore.release_run_fence(session_id: str) -> None

claim_budget_reservation_identity (method)

Section titled “claim_budget_reservation_identity (method)”
async InMemorySessionStore.claim_budget_reservation_identity(*, reservation_id: str, publication_session_id: str, publication_id: str) -> None
async InMemorySessionStore.append_event(session_id: str, event: Event) -> None
async InMemorySessionStore.append_events(session_id: str, events: list[Event]) -> None
async InMemorySessionStore.append_workflow_step_started(session_id: str, event: Event, *, workflow_name: str, attempt_id: str) -> bool
async InMemorySessionStore.append_tool_effect_conflict(request: object) -> Event
async InMemorySessionStore.load_mcp_manifest_baselines(history_keys: tuple[str, ...]) -> McpManifestBaselineLoadResult

compare_and_publish_mcp_manifest_checks (method)

Section titled “compare_and_publish_mcp_manifest_checks (method)”
async InMemorySessionStore.compare_and_publish_mcp_manifest_checks(session_id: str, *, expected_generations: dict[str, int | None], baseline_updates: dict[str, McpManifestBaseline], events: list[Event]) -> McpManifestPublicationResult

claim_persisted_event_side_effect (method)

Section titled “claim_persisted_event_side_effect (method)”
async InMemorySessionStore.claim_persisted_event_side_effect(*, session_id: str | None=None, event_id: str | None=None, lease_seconds: float=300.0) -> PersistedEventSideEffectClaim | None

get_persisted_event_side_effect_delivery (method)

Section titled “get_persisted_event_side_effect_delivery (method)”
async InMemorySessionStore.get_persisted_event_side_effect_delivery(*, session_id: str, event_id: str) -> PersistedEventSideEffectDelivery | None

claim_first_persisted_event_side_effect (method)

Section titled “claim_first_persisted_event_side_effect (method)”
async InMemorySessionStore.claim_first_persisted_event_side_effect(expected: PersistedEventSideEffectDelivery) -> PersistedEventSideEffectClaim | None

retire_failed_first_event_delivery (method)

Section titled “retire_failed_first_event_delivery (method)”
async InMemorySessionStore.retire_failed_first_event_delivery(expected: PersistedEventSideEffectDelivery) -> PersistedEventSideEffectDelivery | None

mark_persisted_event_side_effect_delivered (method)

Section titled “mark_persisted_event_side_effect_delivered (method)”
async InMemorySessionStore.mark_persisted_event_side_effect_delivered(claim: PersistedEventSideEffectClaim) -> PersistedEventSideEffectDelivery

mark_persisted_event_side_effect_failed (method)

Section titled “mark_persisted_event_side_effect_failed (method)”
async InMemorySessionStore.mark_persisted_event_side_effect_failed(claim: PersistedEventSideEffectClaim, *, error: str, max_attempts: int, retry_delay_seconds: float) -> PersistedEventSideEffectDelivery

list_persisted_event_side_effect_deliveries (method)

Section titled “list_persisted_event_side_effect_deliveries (method)”
async InMemorySessionStore.list_persisted_event_side_effect_deliveries(*, statuses: set[PersistedEventSideEffectStatus] | None=None, claimable_only: bool=False, after_sequence: int | None=None, limit: int=100) -> list[PersistedEventSideEffectDelivery]

get_persisted_event_side_effect_health (method)

Section titled “get_persisted_event_side_effect_health (method)”
async InMemorySessionStore.get_persisted_event_side_effect_health() -> PersistedEventSideEffectHealth

query_persisted_event_side_effect_deliveries (method)

Section titled “query_persisted_event_side_effect_deliveries (method)”
async InMemorySessionStore.query_persisted_event_side_effect_deliveries(query: PersistedEventSideEffectQuery) -> PersistedEventSideEffectPage

defer_persisted_event_side_effect (method)

Section titled “defer_persisted_event_side_effect (method)”
async InMemorySessionStore.defer_persisted_event_side_effect(claim: PersistedEventSideEffectClaim) -> PersistedEventSideEffectDelivery

renew_persisted_event_side_effect (method)

Section titled “renew_persisted_event_side_effect (method)”
async InMemorySessionStore.renew_persisted_event_side_effect(claim: PersistedEventSideEffectClaim, *, lease_seconds: float=300.0) -> PersistedEventSideEffectDelivery
async InMemorySessionStore.enqueue_session_message(request: EnqueueSessionMessageRequest, *, expected_authorized_target_instance_id: str | None=None) -> EnqueueSessionMessageResult
async InMemorySessionStore.append_peer_content(request: PeerContentAppendRequest, *, qualify_target: Callable[[Session], None] | None=None, pending_transcript_cursor: int | None=None) -> PeerContentReceipt
async InMemorySessionStore.read_peer_content(append_key: PeerAppendKey) -> PeerContentReceipt | None
async InMemorySessionStore.exclude_peer_content(request: PeerContentAppendRequest, *, reason: str) -> PeerContentReceipt
async InMemorySessionStore.read_peer_content_attempt(request: PeerContentAppendRequest) -> PeerContentReceipt | None
async InMemorySessionStore.list_pending_peer_content(*, after_operation_key=None, limit=32)

Trusted receiving-owner discovery, independent of creation settlement.

async InMemorySessionStore.retry_pending_peer_content(session_id: str, *, expected_session_instance_id: str, expected_run_epoch: int, expected_transcript_cursor: int, admit=None) -> tuple[PeerContentReceipt, ...]
async InMemorySessionStore.record_peer_content_exposure(request: PeerContentExposureRequest) -> PeerContentExposureReceipt
async InMemorySessionStore.begin_peer_content_exposure(request: PeerContentExposureRequest) -> PeerContentExposureReceipt
async InMemorySessionStore.read_peer_content_exposure(append_key: PeerAppendKey, exposure_id: str) -> PeerContentExposureReceipt | None
async InMemorySessionStore.inspect_session_messages(query: SessionMessageQuery, *, expected_authorized_session_instance_id: str | None=None) -> SessionMessageInspection
async InMemorySessionStore.apply_session_message_action(request: SessionMessageActionRequest) -> SessionMessageActionResult
async InMemorySessionStore.snapshot_session_message_source(session_id: str, *, include_transcript_digest: bool=False, include_checkpoint_digest: bool=False, expected_authorized_session_instance_id: str | None=None) -> SessionMessageSource
async InMemorySessionStore.deliver_queued_session_messages(session_id: str, *, include_on_idle: bool, delivery_id: str | None=None, eligible_through: int | None=None, limit: int=SESSION_MESSAGE_DELIVERY_BATCH_LIMIT, interaction_id: str | None=None, interaction_started_event: Event | None=None, profile_handoff: QueuedInteractionProfileHandoff | None=None, reject_only: bool=False) -> SessionMessageDeliveryBatch

repair_queued_interaction_profile_handoff (method)

Section titled “repair_queued_interaction_profile_handoff (method)”
async InMemorySessionStore.repair_queued_interaction_profile_handoff(session_id: str, *, interaction_started_event: Event, profile_handoff: QueuedInteractionProfileHandoff) -> ActiveInvocationExecutionProfile
async InMemorySessionStore.publish_checkpoint_and_events(session_id: str, *, checkpoint_transform: CheckpointTransform, events: list[Event], expected_statuses: set[SessionStatus] | None=None, expected_run_epoch: int | None=None, expected_transcript_cursor: int | None=None) -> Session

publish_checkpoint_and_events_with_store_time (method)

Section titled “publish_checkpoint_and_events_with_store_time (method)”
async InMemorySessionStore.publish_checkpoint_and_events_with_store_time(session_id: str, *, idempotency_key: str, checkpoint_transform: StoreTimeCheckpointTransform, commit_time_guard: Callable[[datetime], None], events: list[Event], expected_statuses: set[SessionStatus] | None=None, expected_run_epoch: int | None=None, expected_transcript_cursor: int | None=None) -> Session

Publish checkpoint state using the backend’s transactional clock.

async InMemorySessionStore.load_session_operation(session_id: str, idempotency_key: str, *, checkpoint_root_guard: CheckpointRootFieldGuard | None=None) -> dict[str, Any] | None
async InMemorySessionStore.publish_session_operation(session_id: str, *, idempotency_key: str, operation_transform: SessionOperationTransform, events: list[Event], expected_statuses: set[SessionStatus] | None=None, expected_run_epoch: int | None=None, expected_transcript_cursor: int | None=None) -> Session
InMemorySessionStore.supports_external_waits() -> bool

publish_session_operation_guarded (method)

Section titled “publish_session_operation_guarded (method)”
async InMemorySessionStore.publish_session_operation_guarded(session_id: str, *, idempotency_key: str, operation_transform: SessionOperationTransform, commit_guard: Callable[[], None], events: list[Event], expected_statuses: set[SessionStatus] | None=None, expected_run_epoch: int | None=None, expected_transcript_cursor: int | None=None) -> Session

publish_session_operation_guarded_with_store_time (method)

Section titled “publish_session_operation_guarded_with_store_time (method)”
async InMemorySessionStore.publish_session_operation_guarded_with_store_time(session_id: str, *, idempotency_key: str, operation_transform: StoreTimeSessionOperationTransform, commit_guard: Callable[[], None], commit_time_guard: Callable[[datetime], None], events: list[Event], expected_statuses: set[SessionStatus] | None=None, expected_run_epoch: int | None=None, expected_transcript_cursor: int | None=None, context_view_compaction_cursor: int | None=None) -> Session
async InMemorySessionStore.prepare_continuation_ticket(command: ContinuationPreparation) -> ContinuationRecord

Atomically retain one exact continuation ticket in ARMING state.

async InMemorySessionStore.lookup_continuation_ticket(expected: ContinuationPreparation) -> ExactLookup[ContinuationRecord]

Return exact retained preparation evidence, never infer an outcome.

async InMemorySessionStore.load_continuation_ticket(session_id: str, *, registration_key: str, session_instance_id: str) -> ContinuationRecord | None

Read one continuation aggregate without treating absence as proof.

async InMemorySessionStore.mark_continuation_waiting(ticket: ContinuationTicket) -> ContinuationRecord

Publish the ARMING-to-WAITING transition under the ticket’s CAS.

async InMemorySessionStore.latch_continuation(latch: ContinuationLatch) -> ContinuationRecord

Publish one immutable readiness latch, including an ARMING latch.

async InMemorySessionStore.consume_continuation(consumption: ContinuationConsumption) -> ContinuationRecord

Atomically elect one inline or queued continuation and replay it.

async InMemorySessionStore.retire_continuation(retirement: ContinuationRetirement) -> ContinuationRecord

Atomically retire a ticket, losing only to an already committed consume.

async InMemorySessionStore.load_runtime_publication_receipt(session_id: str, publication_id: str) -> RuntimePublicationReceipt | None

Load and verify one store-owned runtime publication receipt.

async InMemorySessionStore.publish_runtime_publication(session_id: str, *, request: RuntimePublicationRequest, expected_statuses: set[SessionStatus] | None=None, expected_run_epoch: int | None=None, expected_transcript_cursor: int | None=None) -> RuntimePublicationResult

Atomically publish or exactly replay one logical runtime boundary.

async InMemorySessionStore.load_model_completion_stage(session_id: str, stage_id: str) -> ModelCompletionStage | None

Load and verify append-only pre-dispatch and terminal completion evidence.

load_model_completion_stage_settlement (method)

Section titled “load_model_completion_stage_settlement (method)”
async InMemorySessionStore.load_model_completion_stage_settlement(session_id: str, stage_id: str) -> ModelCompletionStageSettlement | None

Load verified terminal non-success evidence for one exact stage.

load_model_completion_stage_abandonment (method)

Section titled “load_model_completion_stage_abandonment (method)”
async InMemorySessionStore.load_model_completion_stage_abandonment(session_id: str, stage_id: str) -> ModelCompletionStageAbandonment | None

Read positive no-dispatch evidence after the preparation was removed.

This is a query, not permission to dispatch. Re-preparation compares the complete expected predecessor and this receipt in its own transaction. The shared operation-record lookup keeps all supported backends under their existing read owner; no second route cache is needed after restart.

load_active_model_completion_stage (method)

Section titled “load_active_model_completion_stage (method)”
async InMemorySessionStore.load_active_model_completion_stage(session_id: str) -> ActiveModelCompletionStage | None

Load a verified snapshot of the dispatch currently eligible to publish.

load_model_completion_stage_dispatch (method)

Section titled “load_model_completion_stage_dispatch (method)”
async InMemorySessionStore.load_model_completion_stage_dispatch(session_id: str, stage_id: str) -> ModelCompletionStageDispatch | None

Load exact evidence that a prepared stage crossed the dispatch fence.

mark_model_completion_stage_dispatched (method)

Section titled “mark_model_completion_stage_dispatched (method)”
async InMemorySessionStore.mark_model_completion_stage_dispatched(session_id: str, *, stage: ModelCompletionStage, consume_child_session_notifications: bool=True) -> ModelCompletionStageDispatch

Durably cross the last local fence before entering provider-controlled code.

async InMemorySessionStore.prepare_model_completion_stage(session_id: str, *, request: ModelCompletionStageRequest, expected_statuses: set[SessionStatus], expected_run_epoch: int, expected_transcript_cursor: int) -> ModelCompletionStageResult

Insert or replay a stage; dispatch only when the result explicitly authorizes it.

complete_recovered_model_completion_stage (method)

Section titled “complete_recovered_model_completion_stage (method)”
async InMemorySessionStore.complete_recovered_model_completion_stage(session_id: str, *, stage_id: str, publication: RuntimePublicationRequest, recovery_fence: ModelCompletionStageRecoveryFence) -> ModelCompletionStageResult

Insert synthetic auxiliary terminal evidence under an atomic recovery fence.

Backends overriding the atomic hook must explicitly attest this protocol. Ordinary provider completion continues through complete_model_completion_stage.

async InMemorySessionStore.complete_model_completion_stage(session_id: str, *, stage_id: str, publication: RuntimePublicationRequest) -> ModelCompletionStageResult

Append or exactly replay immutable terminal provider-attempt material.

For auxiliary inference, terminal material records the explicit attempt outcome and accounting; it does not imply a successful model response.

async InMemorySessionStore.abandon_model_completion_stage(session_id: str, *, stage_id: str, preparation_digest: str, expected_run_epoch: int, stage_source_run_epoch: int | None=None) -> ModelCompletionStageAbandonmentResult

Atomically abandon one exact active stage before provider dispatch.

An exact replay reconstructs the durable abandonment tombstone. A later preparation of the same request receives a new preparation digest, so a delayed retry of an older abandonment can never clear it.

async InMemorySessionStore.promote_model_completion_stage(session_id: str, *, stage_id: str, expected_run_epoch: int) -> RuntimePublicationResult

Atomically verify and publish a terminal stage without a load/publish race.

async InMemorySessionStore.load_session_export_snapshot(session_id: str, *, limits: SessionExportLimits | None=None) -> SessionExportSnapshot | None
async InMemorySessionStore.load_events(session_id: str) -> list[Event]

load_user_input_supersession_events (method)

Section titled “load_user_input_supersession_events (method)”
async InMemorySessionStore.load_user_input_supersession_events(session_id: str, input_id: str) -> list[Event]
async InMemorySessionStore.load_tool_round_lifecycle_events(session_id: str, tool_call_ids: list[str] | tuple[str, ...]) -> list[Event]

load_tool_round_lifecycle_events_for_round (method)

Section titled “load_tool_round_lifecycle_events_for_round (method)”
async InMemorySessionStore.load_tool_round_lifecycle_events_for_round(session_id: str, tool_call_ids: list[str] | tuple[str, ...], *, tool_round_identity: ToolRoundIdentity) -> list[Event]
async InMemorySessionStore.query_events(query: EventQuery | None=None) -> list[EventRecord]
async InMemorySessionStore.read_usage_accounting(query: EventQuery, *, by_session: bool=False, by_identity: bool=False) -> UsageAccountingSnapshot
async InMemorySessionStore.read_cost_accounting(query: EventQuery, pricing: PriceBook, *, currency: str='USD', details: bool=False, by_session: bool=False, additional_events: tuple[Event, ...]=(), max_detail_bytes: int | None=None, previous: CostAccountingSnapshot | None=None) -> CostAccountingSnapshot
async InMemorySessionStore.event_exists(query: EventQuery) -> bool
async InMemorySessionStore.query_events_bounded(query: EventQuery, *, max_bytes: int) -> list[EventRecord]
async InMemorySessionStore.load_bounded(session_id: str, *, max_bytes: int) -> Session | None

Load a full session only after bounding transport bytes in one snapshot.

async InMemorySessionStore.export_terminal_session_evidence(session_id: str, *, spool: EvidenceSpool) -> None

Export a stable terminal snapshot to bounded indexed backing.

Optional capability. Unsupported stores fail before reading payloads; callers must explicitly choose the separate bounded eager fallback.

async InMemorySessionStore.load_terminal_session_evidence(session_id: str, *, limits: TerminalSessionEvidenceLimits | None=None) -> TerminalSessionEvidence

load_runner_owned_interrupted_evidence (method)

Section titled “load_runner_owned_interrupted_evidence (method)”
async InMemorySessionStore.load_runner_owned_interrupted_evidence(session_id: str, *, observed_events: tuple[RunnerObservedEventIdentity, ...] | None=None, expected_parent_session_id: str | None=None, limits: TerminalSessionEvidenceLimits | None=None) -> TerminalSessionEvidence
async InMemorySessionStore.query_latest_interaction_events(session_id: str, *, before_sequence: int | None=None, limit: int=100) -> list[EventRecord]
async InMemorySessionStore.summarize_events(session_id: str) -> EventSummary
async InMemorySessionStore.summarize_outcome(session_id: str) -> SessionOutcome
async InMemorySessionStore.inspect_summary(session_id: str, *, checkpoint_root_guard: CheckpointRootFieldGuard | None=None) -> SessionInspectionSummary

Return one exact, content-free diagnostic summary.

The default implementation deliberately composes the public paginated query contracts so out-of-tree stores gain the same semantics without a backend-specific schema dependency. Implementations may replace it with an equivalent bounded native aggregate.

async InMemorySessionStore.list_sessions(query: SessionQuery | None=None) -> SessionListResult
async InMemorySessionStore.query_session_topology(query: SessionTopologyQuery) -> SessionTopologyStoreResult
async InMemorySessionStore.query_session_lineage(query: SessionLineageQuery) -> SessionLineageResult
async InMemorySessionStore.query_child_session_lifecycle(query: ChildSessionLifecycleQuery) -> ChildSessionLifecyclePage
async InMemorySessionStore.aggregate_operational_snapshot(filters: SessionAggregateFilter | None=None) -> SessionOperationalSnapshot
async InMemorySessionStore.aggregate_usage(query: UsageRollupQuery) -> UsageRollupStoreResult

list_sessions_with_pending_interruption_cascade (method)

Section titled “list_sessions_with_pending_interruption_cascade (method)”
async InMemorySessionStore.list_sessions_with_pending_interruption_cascade(query: SessionQuery | None=None) -> SessionListResult

list_queued_dispatch_terminal_receipts (method)

Section titled “list_queued_dispatch_terminal_receipts (method)”
async InMemorySessionStore.list_queued_dispatch_terminal_receipts(query: QueuedDispatchTerminalReceiptQuery | None=None) -> list[QueuedDispatchTerminalReceipt]
async InMemorySessionStore.query_pending_actions(query: PendingActionQuery | None=None, *, checkpoint_root_guard: CheckpointRootFieldGuard | None=None) -> PendingActionListResult

validate_session_closure_admission (method)

Section titled “validate_session_closure_admission (method)”
async InMemorySessionStore.validate_session_closure_admission(session_id: str) -> None
async InMemorySessionStore.load_session_closure_records(session_id: str, *, max_records: int, max_bytes: int) -> dict[str, Any]
async InMemorySessionStore.delete_session(session_id: str, *, closure_receipt: dict[str, Any] | None=None, _access_bounds: _SessionAccessBounds | None=None) -> None
async InMemorySessionStore.detach_session_children(parent_session_id: str, child_session_ids: tuple[str, ...], *, closure_receipt: dict[str, Any]) -> tuple[dict[str, Any], ...]
async InMemorySessionStore.load_session_closure_tombstones(root_session_id: str, plan_id: str) -> tuple[dict[str, Any], ...]
async InMemorySessionStore.load_session_closure_receipt(session_id: str, plan_id: str) -> dict[str, Any] | None
async InMemorySessionStore.load_session_closure_progress(session_id: str, plan_id: str)
async InMemorySessionStore.save_session_closure_progress(progress: dict[str, Any]) -> None
async InMemorySessionStore.claim_session_closure_progress(progress: dict[str, Any]) -> None
async InMemorySessionStore.update_labels(session_id: str, labels: dict[str, str], *, _access_bounds: _SessionAccessBounds | None=None) -> Session
async InMemorySessionStore.update_metadata(session_id: str, metadata: dict[str, Any], *, _access_bounds: _SessionAccessBounds | None=None) -> Session
async InMemorySessionStore.append_transcript_messages(session_id: str, messages: list[Message], *, interaction_id: InteractionAttribution=INHERIT_INTERACTION) -> None

replace_initial_transcript_messages (method)

Section titled “replace_initial_transcript_messages (method)”
async InMemorySessionStore.replace_initial_transcript_messages(session_id: str, expected_messages: list[Message], replacement_messages: list[Message], *, interaction_id: InteractionAttribution=INHERIT_INTERACTION, checkpoint_transform: CheckpointTransform | None=None, runtime_suffix_count: int=0) -> None
async InMemorySessionStore.load_deferred_interaction_input(session_id: str) -> DeferredInteractionInput | None

materialize_deferred_interaction_input (method)

Section titled “materialize_deferred_interaction_input (method)”
async InMemorySessionStore.materialize_deferred_interaction_input(session_id: str, *, interaction_id: InteractionAttribution=INHERIT_INTERACTION) -> bool

append_transcript_messages_and_transform_checkpoint (method)

Section titled “append_transcript_messages_and_transform_checkpoint (method)”
async InMemorySessionStore.append_transcript_messages_and_transform_checkpoint(session_id: str, messages: list[Message], checkpoint_transform: CheckpointTransform, *, interaction_id: InteractionAttribution=INHERIT_INTERACTION) -> None
async InMemorySessionStore.load_transcript(session_id: str) -> list[Message]
async InMemorySessionStore.load_transcript_snapshot(session_id: str) -> TranscriptSnapshot
async InMemorySessionStore.load_transcript_cursor(session_id: str) -> int
async InMemorySessionStore.load_transcript_window(session_id: str, *, start_index: int, limit: int) -> TranscriptSnapshot

Load a bounded absolute-index window and its permanent append cursor.

start_index is inclusive. If its message was removed, return the first surviving records at or after it; at or beyond the append cursor, return no records. The returned cursor is the full logical extent, not the end of this window. Continue from the last returned index plus one. An empty window does not prove that earlier payloads never existed.

Stores may override this method to avoid loading the complete retained transcript. The default keeps custom stores correct through their atomic load_transcript_snapshot implementation.

async InMemorySessionStore.load_latest_transcript_message(session_id: str, *, role: MessageRole) -> TranscriptRecord | None
async InMemorySessionStore.load_latest_transcript_text(session_id: str, *, role: MessageRole, max_chars: int) -> tuple[str, bool] | None
async InMemorySessionStore.query_transcript(query: TranscriptQuery) -> TranscriptPage
async InMemorySessionStore.search_transcript(query: TranscriptSearchQuery) -> TranscriptSearchResult
async InMemorySessionStore.create_recall_receipt(receipt: RecallReceipt) -> RecallReceipt
async InMemorySessionStore.load_recall_receipt(session_id: str, receipt_id: str) -> RecallReceipt | None
async InMemorySessionStore.list_recall_receipts(query: RecallEvidenceQuery) -> RecallReceiptPage
async InMemorySessionStore.create_context_exposure(exposure: ContextExposure, item_exposures: tuple[RecallItemExposure, ...]=()) -> ContextExposure
async InMemorySessionStore.load_context_exposure(session_id: str, exposure_id: str) -> ContextExposure | None
async InMemorySessionStore.load_recall_item_exposures(session_id: str, exposure_id: str) -> tuple[RecallItemExposure, ...]
async InMemorySessionStore.list_context_exposures(query: RecallEvidenceQuery) -> ContextExposurePage
async InMemorySessionStore.transition_context_exposure(session_id: str, exposure_id: str, request: ContextExposureTransitionRequest) -> ContextExposure
async InMemorySessionStore.checkpoint(session_id: str, state: dict[str, Any]) -> None
async InMemorySessionStore.transform_checkpoint(session_id: str, checkpoint_transform: CheckpointTransform) -> None

transform_checkpoint_with_store_time (method)

Section titled “transform_checkpoint_with_store_time (method)”
async InMemorySessionStore.transform_checkpoint_with_store_time(session_id: str, checkpoint_transform: StoreTimeCheckpointTransform) -> None
async InMemorySessionStore.load_checkpoint(session_id: str) -> dict[str, Any] | None
async InMemorySessionStore.load_interruption_cascade_marker(session_id: str, *, checkpoint_root_guard: CheckpointRootFieldGuard | None=None) -> dict[str, Any] | None
InMemorySessionStore.__init__(*, public_authority_alias_codec: PublicAuthorityAliasCodec | None=None, ownership_clock: Callable[[], datetime] | None=None) -> None

Release source · Runtime guarantees · Capability guides