feat(sdk): add delete_linked option to MemoryClient.delete (Python + TS) (#5270)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
88934304c6
commit
75a37ec93d
@@ -9,6 +9,7 @@ import {
|
||||
SearchMemoryOptions,
|
||||
GetAllMemoryOptions,
|
||||
DeleteAllMemoryOptions,
|
||||
DeleteMemoryOptions,
|
||||
MemoryUpdateBody,
|
||||
ProjectResponse,
|
||||
PromptUpdatePayload,
|
||||
@@ -377,11 +378,17 @@ export default class MemoryClient {
|
||||
return response;
|
||||
}
|
||||
|
||||
async delete(memoryId: string): Promise<{ message: string }> {
|
||||
async delete(
|
||||
memoryId: string,
|
||||
options: DeleteMemoryOptions = {},
|
||||
): Promise<{ message: string }> {
|
||||
if (this.telemetryId === "") await this.ping();
|
||||
this._captureEvent("delete", []);
|
||||
this._captureEvent("delete", [Object.keys(options || {})]);
|
||||
const snakeOptions = camelToSnakeKeys(this._prepareParams(options));
|
||||
// @ts-ignore
|
||||
const query = new URLSearchParams(snakeOptions).toString();
|
||||
return this._fetchWithErrorHandling(
|
||||
`${this.host}/v1/memories/${memoryId}/`,
|
||||
`${this.host}/v1/memories/${memoryId}/${query ? `?${query}` : ""}`,
|
||||
{
|
||||
method: "DELETE",
|
||||
headers: this.headers,
|
||||
|
||||
@@ -39,6 +39,15 @@ export interface GetAllMemoryOptions {
|
||||
|
||||
export interface DeleteAllMemoryOptions extends EntityOptions {}
|
||||
|
||||
export interface DeleteMemoryOptions {
|
||||
/**
|
||||
* When `true`, also delete the older memories this one superseded (the v3
|
||||
* linked chain), transitively — the delete-side counterpart of `latestOnly`.
|
||||
* Off by default. Serialized as `delete_linked`.
|
||||
*/
|
||||
deleteLinked?: boolean;
|
||||
}
|
||||
|
||||
// ─── Project Options ────────────────────────────────────────
|
||||
export interface ProjectOptions {
|
||||
fields?: string[];
|
||||
|
||||
@@ -200,9 +200,26 @@ describe("MemoryClient - delete()", () => {
|
||||
const client = new MemoryClient({ apiKey: TEST_API_KEY });
|
||||
await client.delete("mem_123");
|
||||
|
||||
expect(
|
||||
findFetchCall(mock, "/v1/memories/mem_123/", "DELETE"),
|
||||
).toBeDefined();
|
||||
const call = findFetchCall(mock, "/v1/memories/mem_123/", "DELETE");
|
||||
expect(call).toBeDefined();
|
||||
// Default: no cascade query param, URL byte-identical to before.
|
||||
expect(call![0]).not.toContain("delete_linked");
|
||||
});
|
||||
|
||||
test("serializes deleteLinked as delete_linked query param", async () => {
|
||||
const extra = new Map<string, { status: number; body: unknown }>();
|
||||
extra.set("/v1/memories/mem_123/", {
|
||||
status: 200,
|
||||
body: { message: "Memory deleted successfully", cascade_count: 1 },
|
||||
});
|
||||
const mock = setupMockFetch(extra);
|
||||
|
||||
const client = new MemoryClient({ apiKey: TEST_API_KEY });
|
||||
await client.delete("mem_123", { deleteLinked: true });
|
||||
|
||||
const call = findFetchCall(mock, "/v1/memories/mem_123/", "DELETE");
|
||||
expect(call).toBeDefined();
|
||||
expect(call![0]).toContain("delete_linked=true");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user