본문으로 건너뛰기

클래스: InMemoryRunStore

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:338

메모리 내 RunStore입니다. 단일 프로세스에서만 사용할 수 있습니다.

구현

생성자

생성자

new InMemoryRunStore(): InMemoryRunStore;

반환값

InMemoryRunStore

메서드

createOrResume()

createOrResume(input): Promise<RunRecord>;

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:341

실행 레코드를 생성하거나, runId가 이미 있으면 기존 레코드를 변경하지 않고 반환합니다.

불변 조건(멱등성): 기존 레코드는 변경하지 않고 반환하며 전달된 threadId/startedAt/status는 무시합니다. 따라서 실행을 안전하게 재개할 수 있습니다. 처음 생성할 때 status의 기본값은 'running'입니다.

매개변수

input

Pick&lt;RunRecord, "threadId" | "runId" | "startedAt"> & object

반환값

Promise&lt;RunRecord>

구현 대상

RunStore.createOrResume


findActiveRun()

findActiveRun(threadId): Promise<RunRecord | null>;

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:404

threadId에 대한 가장 최근의 'running' 실행을 반환하며, 활성 실행이 없으면 null을 반환합니다.

필수입니다. 이 메서드는 단일 턴에서 여러 개 생성될 수 있는 일시적인 실행 ID와 무관하게, 클라이언트를 재연결할 때(새로 고침하거나 같은 스레드를 다른 기기에서 여는 경우) 영속적인 기반이 되는 안정적인 스레드 ID를 사용해 "이 스레드에 연결할 활성 실행이 있는가?"를 확인합니다. 둘 이상의 실행이 'running'이면 startedAt이 가장 큰 실행이 선택됩니다.

이 메서드가 null을 반환하도록만 구현된 백엔드는 재연결을 조용히 비활성화합니다. 유휴 스레드에 대한 올바른 답도 null이기 때문입니다. 실행 수명 주기가 전혀 없는 백엔드는 대신 전체 runs 스토어를 생략해야 합니다. 기능 수준은 메서드 수준이 아니라 스토어 수준에 속합니다.

매개변수

threadId

string

반환값

Promise&lt;RunRecord | null>

구현

RunStore.findActiveRun


get()

get(runId): Promise<RunRecord | null>;

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:379

현재 레코드를 반환하며, 알 수 없는 경우 null을 반환합니다.

매개변수

runId

string

반환값

Promise&lt;RunRecord | null>

구현 대상

RunStore.get


listByThread()

listByThread(threadId): Promise<RunRecord[]>;

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:383

대화의 모든 실행을 startedAt 오름차순으로 반환합니다. 선택 사항이며, 스레드의 과거 에이전트 활동을 렌더링할 때만 필요합니다. 소비자는 기능 감지를 수행합니다.

매개변수

threadId

string

반환값

Promise&lt;RunRecord[]>

구현 대상

RunStore.listByThread


listReclaimable()

listReclaimable(opts): Promise<RunRecord[]>;

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:390

회수할 수 있는 실행은 status === 'running'이고 detachedSince가 설정되어 있으며 detachedSince <= now - ttlMs인 세 조건을 모두 만족합니다. 기준 시각은 포함됩니다. 정확히 now - ttlMs에 분리된 실행은 회수할 수 있습니다.

선택 사항이며, 리퍼가 사용할 때만 필요합니다. 소비자는 기능 감지를 수행합니다.

detachedSincewithSandbox의 분리 경로에서 설정됩니다(RunRecord.detachedSince 참조). 후보 순회 작업은 @tanstack/ai-sandboxreapDetachedRuns입니다. 이 함수는 완료된 실행을 마무리하고 TTL이 지난 실행을 만료시키며 샌드박스를 회수합니다. 애플리케이션이 이를 호출해야 합니다(cron, 큐, alarm(), waitUntil). 이 메서드를 생략한 백엔드는 리핑할 수 없습니다.

매개변수

opts
now

number

ttlMs

number

반환값

Promise&lt;RunRecord[]>

구현 대상

RunStore.listReclaimable


update()

update(runId, patch): Promise<void>;

정의 위치: packages/ai/src/activities/chat/middleware/run-store.ts:358

레코드의 변경 가능한 필드를 패치합니다.

불변 조건: 알 수 없는 runId를 업데이트하면 아무 작업도 수행하지 않아야 하며, 오류를 발생시키거나 레코드를 생성해서는 안 됩니다.

매개변수

runId

string

patch

Partial&lt;Pick&lt;RunRecord, | "status" | "finishedAt" | "error" | "usage" | "sandboxKey" | "detachedSince" | "cancelRequested" | "driverEpoch">>

반환값

Promise&lt;void>

구현 대상

RunStore.update