fix(ts-sdk): unwrap v1.1 search response in client, fix TS2339 type errors

search() now unwraps { results: [...] } -> [...] internally (same
pattern getAll() already uses), so callers always get Array<Memory>.

Removes redundant unwrap logic from integration test helpers and
search.test.ts that caused TS2339 'Property results does not exist
on type never' — the false branch of Array.isArray() was unreachable
since search() is typed as returning Array<Memory>.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
chaithanyak42
2026-04-14 01:48:22 +05:30
parent 7f19c499ca
commit e51df348ce
3 changed files with 5 additions and 16 deletions
+2 -1
View File
@@ -298,7 +298,8 @@ export default class MemoryClient {
body: JSON.stringify(payload),
},
);
return response;
// Unwrap v1.1 format: { results: [...] } → [...]
return Array.isArray(response) ? response : (response?.results ?? response);
}
async delete(memoryId: string): Promise<{ message: string }> {
@@ -92,11 +92,7 @@ export async function waitForSearchResults(
maxRetries = 4,
): Promise<Memory[]> {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
const response = await withRetry(() => client.search(query, options));
// v3 returns { results: [...] }, unwrap for backward compat
const results = Array.isArray(response)
? response
: (response?.results ?? []);
const results = await withRetry(() => client.search(query, options));
if (results.length > 0) {
return results;
}
@@ -108,30 +108,22 @@ describeIntegration("MemoryClient Integration — Search & History", () => {
// ─── Edge cases ─────────────────────────────────────────
describe("edge cases", () => {
test("search for non-existent user returns empty results", async () => {
const response = await client.search("anything", {
const results = await client.search("anything", {
filters: { userId: `nonexistent-user-${randomUUID()}` },
});
// v3 returns { results: [...] }
const results = Array.isArray(response)
? response
: (response?.results ?? []);
expect(Array.isArray(results)).toBe(true);
expect(results.length).toBe(0);
});
test("search with top_k param does not throw", async () => {
const response = await client.search(
const results = await client.search(
"Tell me about integration test user",
{
filters: { userId: TEST_USER_ID },
topK: 1,
},
);
// v3 returns { results: [...] }
const results = Array.isArray(response)
? response
: (response?.results ?? []);
expect(Array.isArray(results)).toBe(true);
});