mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
/**
|
|
* Ownership of one unpublished Session before registry publication.
|
|
* @module @deepseek-ai/dsh-session/preparation
|
|
*/
|
|
|
|
import type { Session } from './index.ts'
|
|
|
|
/** Options for a preparation whose provider retains unpublished state. */
|
|
export interface SessionPreparationOptions {
|
|
/** Release provider-owned state when the Session was not published. */
|
|
readonly release?: () => void
|
|
}
|
|
|
|
/**
|
|
* One exact unpublished Session and the provider state that keeps it usable.
|
|
* Disposal is synchronous and idempotent. Providers decide whether release
|
|
* returns the Session to a cache or discards it; publication may consume that
|
|
* state before disposal, making the callback a no-op.
|
|
*/
|
|
export class SessionPreparation implements Disposable {
|
|
private released = false
|
|
|
|
/** The exact Session to use for setup and publication. */
|
|
readonly session: Session
|
|
|
|
private constructor(
|
|
session: Session,
|
|
private readonly options: SessionPreparationOptions,
|
|
) {
|
|
this.session = session
|
|
}
|
|
|
|
/**
|
|
* Wrap an unpublished Session in one preparation lifetime.
|
|
* @param session - exact unpublished Session.
|
|
* @param options - optional provider release behavior.
|
|
* @returns a preparation disposed after publication or rollback.
|
|
*/
|
|
static create(session: Session, options?: SessionPreparationOptions): SessionPreparation {
|
|
return new SessionPreparation(session, options ?? {})
|
|
}
|
|
|
|
/** Release provider state once when this preparation leaves its caller. */
|
|
[Symbol.dispose](): void {
|
|
if (this.released) return
|
|
this.released = true
|
|
this.options.release?.()
|
|
}
|
|
}
|