



























@@ -24,6 +24,7 @@ import type {
2424CaptureSessionCoverageSummary,
2525CaptureSessionRecord,
2626CaptureSessionSummary,
27+SharedCaptureBlobRecord,
2728} from "./types.js";
28292930// Capture rows and compressed payload BLOBs live in the shared global state DB.
@@ -178,16 +179,13 @@ function sortObservedCounts(counts: Map<string, number>): CaptureObservedDimensi
178179.toSorted((left, right) => right.count - left.count || left.value.localeCompare(right.value));
179180}
180181181-export class DebugProxyCaptureStore {
182+class DebugProxyCaptureStoreImpl {
182183readonly db: DatabaseSync;
183184readonly dbPath: string;
184185readonly blobDir: string;
185186private readonly pathBased?: PathBasedDebugProxyCaptureStore;
186187private closed = false;
187188188-constructor(options?: DebugProxyCaptureStoreOptions);
189-/** @deprecated Use the options overload so capture data lives in shared SQLite state. */
190-constructor(dbPath: string, blobDir: string);
191189constructor(
192190optionsOrDbPath: DebugProxyCaptureStoreOptions | string = {},
193191legacyBlobDir?: string,
@@ -282,7 +280,7 @@ export class DebugProxyCaptureStore {
282280.run(endedAt, sessionId);
283281}
284282285-persistPayload(data: Buffer, contentType?: string): CaptureBlobRecord {
283+persistPayload(data: Buffer, contentType?: string): CaptureBlobRecord | SharedCaptureBlobRecord {
286284const sha256 = createHash("sha256").update(data).digest("hex");
287285const blobId = sha256.slice(0, 24);
288286if (this.pathBased) {
@@ -784,8 +782,33 @@ export class DebugProxyCaptureStore {
784782}
785783}
786784785+export type DebugProxyCaptureStore = Omit<DebugProxyCaptureStoreImpl, "persistPayload"> & {
786+persistPayload(
787+data: Buffer,
788+contentType?: string,
789+): CaptureBlobRecord | SharedCaptureBlobRecord;
790+};
791+792+export type LegacyDebugProxyCaptureStore = Omit<DebugProxyCaptureStoreImpl, "persistPayload"> & {
793+persistPayload(data: Buffer, contentType?: string): CaptureBlobRecord;
794+};
795+796+export type SharedDebugProxyCaptureStore = Omit<DebugProxyCaptureStoreImpl, "persistPayload"> & {
797+persistPayload(data: Buffer, contentType?: string): SharedCaptureBlobRecord;
798+};
799+800+type DebugProxyCaptureStoreConstructor = {
801+new (dbPath: string, blobDir: string): LegacyDebugProxyCaptureStore;
802+new (options?: DebugProxyCaptureStoreOptions): SharedDebugProxyCaptureStore;
803+};
804+805+// The runtime implementation branches on constructor arguments; expose the
806+// corresponding result type so both shipped constructor contracts stay exact.
807+export const DebugProxyCaptureStore =
808+DebugProxyCaptureStoreImpl as unknown as DebugProxyCaptureStoreConstructor;
809+787810type CachedStoreEntry = {
788-store: DebugProxyCaptureStore;
811+store: DebugProxyCaptureStoreImpl;
789812leases: number;
790813};
791814@@ -800,28 +823,34 @@ function resolveDebugProxyCaptureStoreKey(
800823 : `shared:${openOpenClawStateDatabase({ env: optionsOrDbPath.env }).path}`;
801824}
802825803-export function getDebugProxyCaptureStore(
804-options?: DebugProxyCaptureStoreOptions,
805-): DebugProxyCaptureStore;
806-/** @deprecated Use the options overload so capture data lives in shared SQLite state. */
807-export function getDebugProxyCaptureStore(dbPath: string, blobDir: string): DebugProxyCaptureStore;
808-export function getDebugProxyCaptureStore(
826+function getDebugProxyCaptureStoreImpl(
809827optionsOrDbPath: DebugProxyCaptureStoreOptions | string = {},
810828legacyBlobDir?: string,
811-): DebugProxyCaptureStore {
829+): DebugProxyCaptureStoreImpl {
812830const key = resolveDebugProxyCaptureStoreKey(optionsOrDbPath, legacyBlobDir);
813831const cached = cachedStores.get(key);
814832if (cached && !cached.store.isClosed) {
815833return cached.store;
816834}
817-const store =
818-typeof optionsOrDbPath === "string"
819- ? new DebugProxyCaptureStore(optionsOrDbPath, legacyBlobDir!)
820- : new DebugProxyCaptureStore(optionsOrDbPath);
835+const store = new DebugProxyCaptureStoreImpl(optionsOrDbPath, legacyBlobDir);
821836cachedStores.set(key, { store, leases: 0 });
822837return store;
823838}
824839840+export function getDebugProxyCaptureStore(
841+dbPath: string,
842+blobDir: string,
843+): LegacyDebugProxyCaptureStore;
844+export function getDebugProxyCaptureStore(
845+options?: DebugProxyCaptureStoreOptions,
846+): SharedDebugProxyCaptureStore;
847+export function getDebugProxyCaptureStore(
848+optionsOrDbPath: DebugProxyCaptureStoreOptions | string = {},
849+legacyBlobDir?: string,
850+): DebugProxyCaptureStore {
851+return getDebugProxyCaptureStoreImpl(optionsOrDbPath, legacyBlobDir);
852+}
853+825854export function closeDebugProxyCaptureStore(): void {
826855for (const cached of cachedStores.values()) {
827856cached.store.close();
@@ -831,13 +860,12 @@ export function closeDebugProxyCaptureStore(): void {
831860832861// Lease API keeps one cached capture-store wrapper alive across related
833862// operations, then releases it without closing the shared state database.
834-export function acquireDebugProxyCaptureStore(options?: DebugProxyCaptureStoreOptions): {
835-store: DebugProxyCaptureStore;
863+export function acquireDebugProxyCaptureStore(dbPath: string, blobDir: string): {
864+store: LegacyDebugProxyCaptureStore;
836865release: () => void;
837866};
838-/** @deprecated Use the options overload so capture data lives in shared SQLite state. */
839-export function acquireDebugProxyCaptureStore(dbPath: string, blobDir: string): {
840-store: DebugProxyCaptureStore;
867+export function acquireDebugProxyCaptureStore(options?: DebugProxyCaptureStoreOptions): {
868+store: SharedDebugProxyCaptureStore;
841869release: () => void;
842870};
843871export function acquireDebugProxyCaptureStore(
@@ -848,10 +876,7 @@ export function acquireDebugProxyCaptureStore(
848876release: () => void;
849877} {
850878const key = resolveDebugProxyCaptureStoreKey(optionsOrDbPath, legacyBlobDir);
851-const store =
852-typeof optionsOrDbPath === "string"
853- ? getDebugProxyCaptureStore(optionsOrDbPath, legacyBlobDir!)
854- : getDebugProxyCaptureStore(optionsOrDbPath);
879+const store = getDebugProxyCaptureStoreImpl(optionsOrDbPath, legacyBlobDir);
855880const cached = cachedStores.get(key);
856881if (!cached || cached.store !== store) {
857882throw new Error("debug proxy capture store cache changed while acquiring a lease");
@@ -879,7 +904,12 @@ export function acquireDebugProxyCaptureStore(
879904}
880905881906export function persistEventPayload(
882-store: DebugProxyCaptureStore,
907+store: {
908+persistPayload(
909+data: Buffer,
910+contentType?: string,
911+): CaptureBlobRecord | SharedCaptureBlobRecord;
912+},
883913params: { data?: Buffer | string | null; contentType?: string; previewLimit?: number },
884914): { dataText?: string; dataBlobId?: string; dataSha256?: string } {
885915if (params.data == null) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。