import type { CreateMemoryBinding, MemoryBinding, MemoryBindingTarget, MemoryCorrect, MemoryCorrectResult, MemoryListOperationsQuery, MemoryListRecordsQuery, MemoryOperation, MemoryProviderDescriptor, MemoryRecord, MemoryRecordCountResult, MemoryRefreshJobResult, MemoryRetentionSweep, MemoryRetentionSweepResult, MemoryReview, MemoryReviewResult, MemoryRevoke, MemoryRevokeResult, MemoryResolvedBinding, SetAgentMemoryBinding, SetCompanyMemoryBinding, SetProjectMemoryBinding, UpdateMemoryBinding, MemoryRefreshJob, } from "@paperclipai/shared"; import { api } from "./client"; function buildQueryString(filters?: Record) { const params = new URLSearchParams(); for (const [key, value] of Object.entries(filters ?? {})) { if (value === undefined) continue; params.set(key, value instanceof Date ? value.toISOString() : String(value)); } const qs = params.toString(); return qs ? `?${qs}` : ""; } export const memoryApi = { providers: (companyId: string) => api.get(`/companies/${encodeURIComponent(companyId)}/memory/providers`), listBindings: (companyId: string) => api.get(`/companies/${encodeURIComponent(companyId)}/memory/bindings`), listTargets: (companyId: string) => api.get(`/companies/${encodeURIComponent(companyId)}/memory/targets`), createBinding: (companyId: string, data: CreateMemoryBinding) => api.post(`/companies/${encodeURIComponent(companyId)}/memory/bindings`, data), updateBinding: (bindingId: string, data: UpdateMemoryBinding) => api.patch(`/memory/bindings/${encodeURIComponent(bindingId)}`, data), setCompanyDefault: (companyId: string, bindingId: SetCompanyMemoryBinding["bindingId"]) => api.put(`/companies/${encodeURIComponent(companyId)}/memory/default-binding`, { bindingId }), getAgentBinding: (agentId: string) => api.get(`/agents/${encodeURIComponent(agentId)}/memory-binding`), setAgentBinding: (agentId: string, bindingId: SetAgentMemoryBinding["bindingId"]) => api.put(`/agents/${encodeURIComponent(agentId)}/memory-binding`, { bindingId }), getProjectBinding: (projectId: string) => api.get(`/projects/${encodeURIComponent(projectId)}/memory-binding`), setProjectBinding: (projectId: string, bindingId: SetProjectMemoryBinding["bindingId"]) => api.put(`/projects/${encodeURIComponent(projectId)}/memory-binding`, { bindingId }), listRecords: (companyId: string, filters?: Partial) => api.get( `/companies/${encodeURIComponent(companyId)}/memory/records${buildQueryString(filters)}`, ), countRecords: (companyId: string, filters?: Partial) => api.get( `/companies/${encodeURIComponent(companyId)}/memory/records${buildQueryString({ ...filters, count: "only" })}`, ), listOperations: (companyId: string, filters?: MemoryListOperationsQuery) => api.get( `/companies/${encodeURIComponent(companyId)}/memory/operations${buildQueryString(filters)}`, ), revoke: (companyId: string, data: MemoryRevoke) => api.post(`/companies/${encodeURIComponent(companyId)}/memory/revoke`, data), correctRecord: (companyId: string, recordId: string, data: MemoryCorrect) => api.post( `/companies/${encodeURIComponent(companyId)}/memory/records/${encodeURIComponent(recordId)}/correct`, data, ), reviewRecord: (companyId: string, recordId: string, data: MemoryReview) => api.patch( `/companies/${encodeURIComponent(companyId)}/memory/records/${encodeURIComponent(recordId)}/review`, data, ), sweepRetention: (companyId: string, data: Partial = {}) => api.post( `/companies/${encodeURIComponent(companyId)}/memory/retention/sweep`, data, ), startRefreshJob: (companyId: string, data: MemoryRefreshJob) => api.post( `/companies/${encodeURIComponent(companyId)}/memory/refresh-jobs`, data, ), };