@prmichaelsen/remember-mcp 2.7.1 → 2.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/dist/server-factory.js +4 -2
- package/dist/server.js +4 -2
- package/package.json +1 -1
- package/src/tools/confirm.ts +4 -1
- package/src/tools/update-memory.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,54 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.7.3] - 2026-02-17
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **CRITICAL: Fixed `remember_update_memory` "Memory not found" error**
|
|
13
|
+
- Changed `handleUpdateMemory()` to use `fetchMemoryWithAllProperties()` wrapper
|
|
14
|
+
- Previously used direct `collection.query.fetchObjectById()` call without fallback
|
|
15
|
+
- Direct call failed when querying memories with certain property configurations (e.g., `parent_id: ""`)
|
|
16
|
+
- Wrapper provides graceful fallback for schema evolution and property incompatibilities
|
|
17
|
+
- Matches pattern used in other working tools like `handlePublish()`
|
|
18
|
+
|
|
19
|
+
### Root Cause
|
|
20
|
+
|
|
21
|
+
- `handleUpdateMemory()` bypassed the `fetchMemoryWithAllProperties()` abstraction layer
|
|
22
|
+
- Direct `fetchObjectById()` without property specification can fail on edge case property values
|
|
23
|
+
- Error was caught and converted to misleading "Memory not found" message
|
|
24
|
+
- Wrapper's try-catch with fallback handles these cases gracefully
|
|
25
|
+
- This fix ensures consistent behavior across all memory operations
|
|
26
|
+
|
|
27
|
+
### Technical Details
|
|
28
|
+
|
|
29
|
+
- Modified: `src/tools/update-memory.ts` (lines 8, 140)
|
|
30
|
+
- Added import: `fetchMemoryWithAllProperties` from `weaviate/client.js`
|
|
31
|
+
- Replaced: `collection.query.fetchObjectById(id)` → `fetchMemoryWithAllProperties(collection, id)`
|
|
32
|
+
- Verified working in local testing with memories containing `parent_id: ""`
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## [2.7.2] - 2026-02-17
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **CRITICAL: Fixed Insert API Call Format**: Wrap properties in `{properties: ...}` object
|
|
41
|
+
- Changed `publicCollection.data.insert(publishedMemory)` to `publicCollection.data.insert({properties: publishedMemory})`
|
|
42
|
+
- Weaviate insert API expects `{properties: {...}}` format, not properties directly
|
|
43
|
+
- This is why ALL inserts were creating documents with zero properties
|
|
44
|
+
- The properties were being ignored because they weren't in the expected format
|
|
45
|
+
|
|
46
|
+
### Root Cause
|
|
47
|
+
|
|
48
|
+
- Weaviate client `insert()` API signature: `insert({properties: {...}, vectors?: ..., id?: ...})`
|
|
49
|
+
- We were passing properties directly: `insert(properties)`
|
|
50
|
+
- Weaviate accepted the call but ignored the properties (wrong format)
|
|
51
|
+
- Created documents with UUID but zero properties
|
|
52
|
+
- This explains ALL the empty document issues across all schema approaches
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
8
56
|
## [2.7.1] - 2026-02-17
|
|
9
57
|
|
|
10
58
|
### Fixed
|
package/dist/server-factory.js
CHANGED
|
@@ -1948,7 +1948,7 @@ async function handleUpdateMemory(args, userId) {
|
|
|
1948
1948
|
const collection = getMemoryCollection(userId);
|
|
1949
1949
|
let existingMemory;
|
|
1950
1950
|
try {
|
|
1951
|
-
existingMemory = await collection
|
|
1951
|
+
existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
|
|
1952
1952
|
} catch (fetchError) {
|
|
1953
1953
|
const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
1954
1954
|
logger.error("Failed to fetch memory for update:", {
|
|
@@ -4071,7 +4071,9 @@ async function executePublishMemory(request, userId) {
|
|
|
4071
4071
|
contentLength: publishedMemory.content?.length || 0,
|
|
4072
4072
|
titleValue: publishedMemory.title || "NO_TITLE"
|
|
4073
4073
|
});
|
|
4074
|
-
const result = await publicCollection.data.insert(
|
|
4074
|
+
const result = await publicCollection.data.insert({
|
|
4075
|
+
properties: publishedMemory
|
|
4076
|
+
});
|
|
4075
4077
|
logger.info("Memory published successfully", {
|
|
4076
4078
|
function: "executePublishMemory",
|
|
4077
4079
|
spaceMemoryId: result,
|
package/dist/server.js
CHANGED
|
@@ -2016,7 +2016,7 @@ async function handleUpdateMemory(args, userId) {
|
|
|
2016
2016
|
const collection = getMemoryCollection(userId);
|
|
2017
2017
|
let existingMemory;
|
|
2018
2018
|
try {
|
|
2019
|
-
existingMemory = await collection
|
|
2019
|
+
existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
|
|
2020
2020
|
} catch (fetchError) {
|
|
2021
2021
|
const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
2022
2022
|
logger.error("Failed to fetch memory for update:", {
|
|
@@ -4139,7 +4139,9 @@ async function executePublishMemory(request, userId) {
|
|
|
4139
4139
|
contentLength: publishedMemory.content?.length || 0,
|
|
4140
4140
|
titleValue: publishedMemory.title || "NO_TITLE"
|
|
4141
4141
|
});
|
|
4142
|
-
const result = await publicCollection.data.insert(
|
|
4142
|
+
const result = await publicCollection.data.insert({
|
|
4143
|
+
properties: publishedMemory
|
|
4144
|
+
});
|
|
4143
4145
|
logger.info("Memory published successfully", {
|
|
4144
4146
|
function: "executePublishMemory",
|
|
4145
4147
|
spaceMemoryId: result,
|
package/package.json
CHANGED
package/src/tools/confirm.ts
CHANGED
|
@@ -263,7 +263,10 @@ async function executePublishMemory(
|
|
|
263
263
|
});
|
|
264
264
|
|
|
265
265
|
// Insert directly into unified public collection
|
|
266
|
-
|
|
266
|
+
// CRITICAL: Weaviate insert API expects {properties: {...}}, not the properties directly!
|
|
267
|
+
const result = await publicCollection.data.insert({
|
|
268
|
+
properties: publishedMemory,
|
|
269
|
+
});
|
|
267
270
|
|
|
268
271
|
logger.info('Memory published successfully', {
|
|
269
272
|
function: 'executePublishMemory',
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import type { Memory, MemoryUpdate } from '../types/memory.js';
|
|
7
7
|
import { getMemoryCollection } from '../weaviate/schema.js';
|
|
8
|
+
import { fetchMemoryWithAllProperties } from '../weaviate/client.js';
|
|
8
9
|
import { logger } from '../utils/logger.js';
|
|
9
10
|
import { handleToolError, withErrorHandling } from '../utils/error-handler.js';
|
|
10
11
|
import { isValidContentType } from '../constants/content-types.js';
|
|
@@ -133,9 +134,10 @@ export async function handleUpdateMemory(
|
|
|
133
134
|
// Get existing memory - fetch ALL properties for replace operation
|
|
134
135
|
// We need the full object to use replace() instead of update()
|
|
135
136
|
// (Weaviate bug: update() only persists if vectorized fields change)
|
|
137
|
+
// Use fetchMemoryWithAllProperties() to handle schema evolution gracefully
|
|
136
138
|
let existingMemory;
|
|
137
139
|
try {
|
|
138
|
-
existingMemory = await collection
|
|
140
|
+
existingMemory = await fetchMemoryWithAllProperties(collection, args.memory_id);
|
|
139
141
|
} catch (fetchError) {
|
|
140
142
|
const fetchErrorMsg = fetchError instanceof Error ? fetchError.message : String(fetchError);
|
|
141
143
|
logger.error('Failed to fetch memory for update:', {
|