@prmichaelsen/remember-mcp 3.15.5 → 3.15.7
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 +8 -0
- package/dist/server-factory.js +70 -28
- package/dist/server.js +10 -10
- package/package.json +2 -2
- package/src/tools/search-by.ts +15 -4
- package/src/tools/search-ghost-memory-by.ts +23 -3
- package/src/tools/search-space-by.ts +22 -11
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@ 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
|
+
## [3.15.7] - 2026-03-07
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Expand tool descriptions for `remember_search_by`, `remember_search_ghost_memory_by`, and `remember_search_space_by` with full mode explanations and complete property reference for byProperty mode
|
|
13
|
+
- Add inline mode descriptions to `mode` enum field so agents see them in schema-only views
|
|
14
|
+
- Document all sortable properties: 21 emotions, 10 functional signals, 3 composite scores, core fields, ratings, and REM metadata
|
|
15
|
+
|
|
8
16
|
## [3.15.5] - 2026-03-07
|
|
9
17
|
|
|
10
18
|
### Changed
|
package/dist/server-factory.js
CHANGED
|
@@ -2866,7 +2866,7 @@ var MemoryService = class {
|
|
|
2866
2866
|
if (input.ghost_context) {
|
|
2867
2867
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
2868
2868
|
}
|
|
2869
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
2869
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
2870
2870
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
2871
2871
|
}
|
|
2872
2872
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -2915,7 +2915,7 @@ var MemoryService = class {
|
|
|
2915
2915
|
if (input.ghost_context) {
|
|
2916
2916
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
2917
2917
|
}
|
|
2918
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
2918
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
2919
2919
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
2920
2920
|
}
|
|
2921
2921
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -2958,7 +2958,7 @@ var MemoryService = class {
|
|
|
2958
2958
|
if (input.ghost_context) {
|
|
2959
2959
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
2960
2960
|
}
|
|
2961
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
2961
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
2962
2962
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
2963
2963
|
}
|
|
2964
2964
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3006,7 +3006,7 @@ var MemoryService = class {
|
|
|
3006
3006
|
if (input.ghost_context) {
|
|
3007
3007
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3008
3008
|
}
|
|
3009
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3009
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3010
3010
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3011
3011
|
}
|
|
3012
3012
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3049,7 +3049,7 @@ var MemoryService = class {
|
|
|
3049
3049
|
if (input.ghost_context) {
|
|
3050
3050
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3051
3051
|
}
|
|
3052
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3052
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3053
3053
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3054
3054
|
}
|
|
3055
3055
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3151,7 +3151,7 @@ var MemoryService = class {
|
|
|
3151
3151
|
if (input.ghost_context) {
|
|
3152
3152
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3153
3153
|
}
|
|
3154
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3154
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3155
3155
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3156
3156
|
}
|
|
3157
3157
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3213,7 +3213,7 @@ var MemoryService = class {
|
|
|
3213
3213
|
if (input.ghost_context) {
|
|
3214
3214
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3215
3215
|
}
|
|
3216
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3216
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3217
3217
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3218
3218
|
}
|
|
3219
3219
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3259,7 +3259,7 @@ var MemoryService = class {
|
|
|
3259
3259
|
if (input.ghost_context) {
|
|
3260
3260
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3261
3261
|
}
|
|
3262
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3262
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3263
3263
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3264
3264
|
}
|
|
3265
3265
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3321,7 +3321,7 @@ var MemoryService = class {
|
|
|
3321
3321
|
if (input.ghost_context) {
|
|
3322
3322
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3323
3323
|
}
|
|
3324
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3324
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3325
3325
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3326
3326
|
}
|
|
3327
3327
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3424,7 +3424,7 @@ var MemoryService = class {
|
|
|
3424
3424
|
if (input.ghost_context) {
|
|
3425
3425
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3426
3426
|
}
|
|
3427
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3427
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3428
3428
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3429
3429
|
}
|
|
3430
3430
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -8177,14 +8177,25 @@ var searchByTool = {
|
|
|
8177
8177
|
Use remember_find_similar for vector similarity.
|
|
8178
8178
|
Use this tool for structured browsing, sorting, and discovery.
|
|
8179
8179
|
|
|
8180
|
+
byBroad returns truncated content (content_head/mid/tail ~100 chars each) instead of full content.
|
|
8181
|
+
Use it to scan large collections, then drill into specific memories with other search tools.
|
|
8182
|
+
|
|
8183
|
+
Available sort_field values for byProperty:
|
|
8184
|
+
Emotions (0-1): feel_emotional_significance, feel_vulnerability, feel_trauma, feel_humor, feel_happiness, feel_sadness, feel_fear, feel_anger, feel_surprise, feel_disgust, feel_contempt, feel_embarrassment, feel_shame, feel_guilt, feel_excitement, feel_pride, feel_intensity, feel_coherence_tension
|
|
8185
|
+
Affect dimensions: feel_valence (-1 to 1), feel_arousal (0-1), feel_dominance (0-1)
|
|
8186
|
+
Functional signals (0-1): functional_salience, functional_urgency, functional_social_weight, functional_agency, functional_novelty, functional_retrieval_utility, functional_narrative_importance, functional_aesthetic_quality, functional_valence, functional_coherence_tension
|
|
8187
|
+
Composite scores: feel_significance, functional_significance, total_significance
|
|
8188
|
+
Core: weight, trust_score, confidence, strength, relationship_count, version, access_count
|
|
8189
|
+
Ratings: rating_sum, rating_count, rating_bayesian
|
|
8190
|
+
REM metadata: rem_visits (times scored by REM)
|
|
8191
|
+
|
|
8180
8192
|
byProperty examples:
|
|
8181
8193
|
- { mode: "byProperty", sort_field: "feel_trauma", sort_order: "desc" } \u2014 most traumatic
|
|
8182
8194
|
- { mode: "byProperty", sort_field: "feel_humor", sort_order: "desc" } \u2014 funniest
|
|
8183
|
-
- { mode: "byProperty", sort_field: "
|
|
8195
|
+
- { mode: "byProperty", sort_field: "functional_retrieval_utility", sort_order: "desc" } \u2014 most useful
|
|
8184
8196
|
- { mode: "byProperty", sort_field: "rem_visits", sort_order: "asc" } \u2014 least scored by REM
|
|
8185
|
-
|
|
8186
|
-
|
|
8187
|
-
Use it to scan large collections, then drill into specific memories with other search tools.`,
|
|
8197
|
+
- { mode: "byProperty", sort_field: "total_significance", sort_order: "desc" } \u2014 most significant overall
|
|
8198
|
+
- { mode: "byProperty", sort_field: "functional_novelty", sort_order: "desc" } \u2014 most novel`,
|
|
8188
8199
|
inputSchema: {
|
|
8189
8200
|
type: "object",
|
|
8190
8201
|
properties: {
|
|
@@ -8612,15 +8623,35 @@ async function handleQueryGhostMemory(args, userId, authContext) {
|
|
|
8612
8623
|
// src/tools/search-ghost-memory-by.ts
|
|
8613
8624
|
var searchGhostMemoryByTool = {
|
|
8614
8625
|
name: "remember_search_ghost_memory_by",
|
|
8615
|
-
description: `Search ghost memories using specialized modes
|
|
8616
|
-
|
|
8626
|
+
description: `Search ghost memories using specialized sort/discovery modes. Automatically filters to content_type: ghost.
|
|
8627
|
+
|
|
8628
|
+
Modes:
|
|
8629
|
+
- byTime: Chronological sort (newest/oldest first)
|
|
8630
|
+
- byDensity: Sort by relationship count (most connected ghost memories)
|
|
8631
|
+
- byRating: Sort by Bayesian rating average (social ratings from spaces)
|
|
8632
|
+
- byDiscovery: Interleaved rated + unrated content for exploration (4:1 ratio)
|
|
8633
|
+
- byProperty: Sort by any memory property (e.g., feel_trauma, weight, feel_salience). Requires sort_field.
|
|
8634
|
+
- bySignificance: Sort by total_significance (combined emotional + functional score from REM)
|
|
8635
|
+
- byBroad: Massive results with truncated content (content_head/mid/tail ~100 chars each) for scan-and-drill-in workflow
|
|
8636
|
+
- byRandom: Random sampling for serendipitous rediscovery
|
|
8637
|
+
|
|
8638
|
+
Use remember_search_ghost_memory for hybrid semantic+keyword search.
|
|
8639
|
+
Use this tool for structured browsing, sorting, and discovery of ghost interaction records.
|
|
8640
|
+
|
|
8641
|
+
Available sort_field values for byProperty:
|
|
8642
|
+
Emotions (0-1): feel_emotional_significance, feel_vulnerability, feel_trauma, feel_humor, feel_happiness, feel_sadness, feel_fear, feel_anger, feel_surprise, feel_disgust, feel_contempt, feel_embarrassment, feel_shame, feel_guilt, feel_excitement, feel_pride, feel_intensity, feel_coherence_tension
|
|
8643
|
+
Affect dimensions: feel_valence (-1 to 1), feel_arousal (0-1), feel_dominance (0-1)
|
|
8644
|
+
Functional signals (0-1): functional_salience, functional_urgency, functional_social_weight, functional_agency, functional_novelty, functional_retrieval_utility, functional_narrative_importance, functional_aesthetic_quality, functional_valence, functional_coherence_tension
|
|
8645
|
+
Composite scores: feel_significance, functional_significance, total_significance
|
|
8646
|
+
Core: weight, trust_score, relationship_count, version
|
|
8647
|
+
REM metadata: rem_visits`,
|
|
8617
8648
|
inputSchema: {
|
|
8618
8649
|
type: "object",
|
|
8619
8650
|
properties: {
|
|
8620
8651
|
mode: {
|
|
8621
8652
|
type: "string",
|
|
8622
8653
|
enum: ["byTime", "byDensity", "byRating", "byDiscovery", "byProperty", "bySignificance", "byRandom", "byBroad"],
|
|
8623
|
-
description: "Search mode"
|
|
8654
|
+
description: "Search mode: byTime (chronological), byDensity (most connected), byRating (highest rated), byDiscovery (explore mix), byProperty (sort by field), bySignificance (emotional+functional score), byRandom (random sample), byBroad (scan many truncated)"
|
|
8624
8655
|
},
|
|
8625
8656
|
query: { type: "string", description: "Optional search query" },
|
|
8626
8657
|
sort_order: { type: "string", enum: ["asc", "desc"] },
|
|
@@ -8746,25 +8777,36 @@ async function handleGetCore(args, userId, _authContext) {
|
|
|
8746
8777
|
// src/tools/search-space-by.ts
|
|
8747
8778
|
var searchSpaceByTool = {
|
|
8748
8779
|
name: "remember_search_space_by",
|
|
8749
|
-
description: `Search shared spaces using specialized modes.
|
|
8750
|
-
but operates on published memories in spaces and groups.
|
|
8780
|
+
description: `Search published memories in shared spaces/groups using specialized sort/discovery modes.
|
|
8751
8781
|
|
|
8752
8782
|
Modes:
|
|
8753
|
-
- byTime: Chronological sort
|
|
8754
|
-
- byRating: Sort by Bayesian rating average (social ratings)
|
|
8755
|
-
- byDiscovery: Interleaved rated + unrated for exploration
|
|
8756
|
-
- byProperty: Sort by any property (e.g., feel_trauma, total_significance)
|
|
8757
|
-
- byBroad: Massive results with truncated content
|
|
8758
|
-
- byRandom: Random sampling
|
|
8759
|
-
|
|
8760
|
-
At least one of 'spaces' or 'groups' must be provided
|
|
8783
|
+
- byTime: Chronological sort (newest/oldest first)
|
|
8784
|
+
- byRating: Sort by Bayesian rating average (social ratings from other users)
|
|
8785
|
+
- byDiscovery: Interleaved rated + unrated content for exploration (4:1 ratio). Good for finding hidden gems.
|
|
8786
|
+
- byProperty: Sort by any memory property (e.g., feel_trauma, total_significance, weight). Requires sort_field.
|
|
8787
|
+
- byBroad: Massive results with truncated content (content_head/mid/tail ~100 chars each) for scan-and-drill-in workflow
|
|
8788
|
+
- byRandom: Random sampling for serendipitous discovery
|
|
8789
|
+
|
|
8790
|
+
At least one of 'spaces' or 'groups' must be provided.
|
|
8791
|
+
|
|
8792
|
+
Use remember_search_space for hybrid semantic+keyword search of space memories.
|
|
8793
|
+
Use this tool for structured browsing, sorting, and discovery of published content.
|
|
8794
|
+
|
|
8795
|
+
Available sort_field values for byProperty:
|
|
8796
|
+
Emotions (0-1): feel_emotional_significance, feel_vulnerability, feel_trauma, feel_humor, feel_happiness, feel_sadness, feel_fear, feel_anger, feel_surprise, feel_disgust, feel_contempt, feel_embarrassment, feel_shame, feel_guilt, feel_excitement, feel_pride, feel_intensity, feel_coherence_tension
|
|
8797
|
+
Affect dimensions: feel_valence (-1 to 1), feel_arousal (0-1), feel_dominance (0-1)
|
|
8798
|
+
Functional signals (0-1): functional_salience, functional_urgency, functional_social_weight, functional_agency, functional_novelty, functional_retrieval_utility, functional_narrative_importance, functional_aesthetic_quality, functional_valence, functional_coherence_tension
|
|
8799
|
+
Composite scores: feel_significance, functional_significance, total_significance
|
|
8800
|
+
Core: weight, trust_score, relationship_count, version
|
|
8801
|
+
Ratings: rating_sum, rating_count, rating_bayesian
|
|
8802
|
+
Published: discovery_count, revision_count`,
|
|
8761
8803
|
inputSchema: {
|
|
8762
8804
|
type: "object",
|
|
8763
8805
|
properties: {
|
|
8764
8806
|
mode: {
|
|
8765
8807
|
type: "string",
|
|
8766
8808
|
enum: ["byTime", "byRating", "byDiscovery", "byProperty", "byBroad", "byRandom"],
|
|
8767
|
-
description: "Search mode"
|
|
8809
|
+
description: "Search mode: byTime (chronological), byRating (highest rated), byDiscovery (explore mix), byProperty (sort by field), byBroad (scan many truncated), byRandom (random sample)"
|
|
8768
8810
|
},
|
|
8769
8811
|
spaces: {
|
|
8770
8812
|
type: "array",
|
package/dist/server.js
CHANGED
|
@@ -2870,7 +2870,7 @@ var MemoryService = class {
|
|
|
2870
2870
|
if (input.ghost_context) {
|
|
2871
2871
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
2872
2872
|
}
|
|
2873
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
2873
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
2874
2874
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
2875
2875
|
}
|
|
2876
2876
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -2919,7 +2919,7 @@ var MemoryService = class {
|
|
|
2919
2919
|
if (input.ghost_context) {
|
|
2920
2920
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
2921
2921
|
}
|
|
2922
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
2922
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
2923
2923
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
2924
2924
|
}
|
|
2925
2925
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -2962,7 +2962,7 @@ var MemoryService = class {
|
|
|
2962
2962
|
if (input.ghost_context) {
|
|
2963
2963
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
2964
2964
|
}
|
|
2965
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
2965
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
2966
2966
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
2967
2967
|
}
|
|
2968
2968
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3010,7 +3010,7 @@ var MemoryService = class {
|
|
|
3010
3010
|
if (input.ghost_context) {
|
|
3011
3011
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3012
3012
|
}
|
|
3013
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3013
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3014
3014
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3015
3015
|
}
|
|
3016
3016
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3053,7 +3053,7 @@ var MemoryService = class {
|
|
|
3053
3053
|
if (input.ghost_context) {
|
|
3054
3054
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3055
3055
|
}
|
|
3056
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3056
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3057
3057
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3058
3058
|
}
|
|
3059
3059
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3155,7 +3155,7 @@ var MemoryService = class {
|
|
|
3155
3155
|
if (input.ghost_context) {
|
|
3156
3156
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3157
3157
|
}
|
|
3158
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3158
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3159
3159
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3160
3160
|
}
|
|
3161
3161
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3217,7 +3217,7 @@ var MemoryService = class {
|
|
|
3217
3217
|
if (input.ghost_context) {
|
|
3218
3218
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3219
3219
|
}
|
|
3220
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3220
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3221
3221
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3222
3222
|
}
|
|
3223
3223
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3263,7 +3263,7 @@ var MemoryService = class {
|
|
|
3263
3263
|
if (input.ghost_context) {
|
|
3264
3264
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3265
3265
|
}
|
|
3266
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3266
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3267
3267
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3268
3268
|
}
|
|
3269
3269
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3325,7 +3325,7 @@ var MemoryService = class {
|
|
|
3325
3325
|
if (input.ghost_context) {
|
|
3326
3326
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3327
3327
|
}
|
|
3328
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3328
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3329
3329
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3330
3330
|
}
|
|
3331
3331
|
if (!input.filters?.types?.includes("rem")) {
|
|
@@ -3428,7 +3428,7 @@ var MemoryService = class {
|
|
|
3428
3428
|
if (input.ghost_context) {
|
|
3429
3429
|
ghostFilters.push(buildTrustFilter(this.collection, input.ghost_context.accessor_trust_level));
|
|
3430
3430
|
}
|
|
3431
|
-
if (!input.ghost_context?.include_ghost_content) {
|
|
3431
|
+
if (!input.ghost_context?.include_ghost_content && !input.filters?.types?.includes("ghost")) {
|
|
3432
3432
|
ghostFilters.push(this.collection.filter.byProperty("content_type").notEqual("ghost"));
|
|
3433
3433
|
}
|
|
3434
3434
|
if (!input.filters?.types?.includes("rem")) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prmichaelsen/remember-mcp",
|
|
3
|
-
"version": "3.15.
|
|
3
|
+
"version": "3.15.7",
|
|
4
4
|
"description": "Multi-tenant memory system MCP server with vector search and relationships",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"type": "module",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
53
53
|
"@prmichaelsen/firebase-admin-sdk-v8": "^2.2.0",
|
|
54
54
|
"@prmichaelsen/mcp-auth": "^7.0.4",
|
|
55
|
-
"@prmichaelsen/remember-core": "^0.
|
|
55
|
+
"@prmichaelsen/remember-core": "^0.45.0",
|
|
56
56
|
"dotenv": "^16.4.5",
|
|
57
57
|
"uuid": "^13.0.0",
|
|
58
58
|
"weaviate-client": "^3.2.0"
|
package/src/tools/search-by.ts
CHANGED
|
@@ -34,14 +34,25 @@ export const searchByTool = {
|
|
|
34
34
|
Use remember_find_similar for vector similarity.
|
|
35
35
|
Use this tool for structured browsing, sorting, and discovery.
|
|
36
36
|
|
|
37
|
+
byBroad returns truncated content (content_head/mid/tail ~100 chars each) instead of full content.
|
|
38
|
+
Use it to scan large collections, then drill into specific memories with other search tools.
|
|
39
|
+
|
|
40
|
+
Available sort_field values for byProperty:
|
|
41
|
+
Emotions (0-1): feel_emotional_significance, feel_vulnerability, feel_trauma, feel_humor, feel_happiness, feel_sadness, feel_fear, feel_anger, feel_surprise, feel_disgust, feel_contempt, feel_embarrassment, feel_shame, feel_guilt, feel_excitement, feel_pride, feel_intensity, feel_coherence_tension
|
|
42
|
+
Affect dimensions: feel_valence (-1 to 1), feel_arousal (0-1), feel_dominance (0-1)
|
|
43
|
+
Functional signals (0-1): functional_salience, functional_urgency, functional_social_weight, functional_agency, functional_novelty, functional_retrieval_utility, functional_narrative_importance, functional_aesthetic_quality, functional_valence, functional_coherence_tension
|
|
44
|
+
Composite scores: feel_significance, functional_significance, total_significance
|
|
45
|
+
Core: weight, trust_score, confidence, strength, relationship_count, version, access_count
|
|
46
|
+
Ratings: rating_sum, rating_count, rating_bayesian
|
|
47
|
+
REM metadata: rem_visits (times scored by REM)
|
|
48
|
+
|
|
37
49
|
byProperty examples:
|
|
38
50
|
- { mode: "byProperty", sort_field: "feel_trauma", sort_order: "desc" } — most traumatic
|
|
39
51
|
- { mode: "byProperty", sort_field: "feel_humor", sort_order: "desc" } — funniest
|
|
40
|
-
- { mode: "byProperty", sort_field: "
|
|
52
|
+
- { mode: "byProperty", sort_field: "functional_retrieval_utility", sort_order: "desc" } — most useful
|
|
41
53
|
- { mode: "byProperty", sort_field: "rem_visits", sort_order: "asc" } — least scored by REM
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
Use it to scan large collections, then drill into specific memories with other search tools.`,
|
|
54
|
+
- { mode: "byProperty", sort_field: "total_significance", sort_order: "desc" } — most significant overall
|
|
55
|
+
- { mode: "byProperty", sort_field: "functional_novelty", sort_order: "desc" } — most novel`,
|
|
45
56
|
inputSchema: {
|
|
46
57
|
type: 'object',
|
|
47
58
|
properties: {
|
|
@@ -11,15 +11,35 @@ import type { SearchByMode } from './search-by.js';
|
|
|
11
11
|
|
|
12
12
|
export const searchGhostMemoryByTool = {
|
|
13
13
|
name: 'remember_search_ghost_memory_by',
|
|
14
|
-
description: `Search ghost memories using specialized modes
|
|
15
|
-
|
|
14
|
+
description: `Search ghost memories using specialized sort/discovery modes. Automatically filters to content_type: ghost.
|
|
15
|
+
|
|
16
|
+
Modes:
|
|
17
|
+
- byTime: Chronological sort (newest/oldest first)
|
|
18
|
+
- byDensity: Sort by relationship count (most connected ghost memories)
|
|
19
|
+
- byRating: Sort by Bayesian rating average (social ratings from spaces)
|
|
20
|
+
- byDiscovery: Interleaved rated + unrated content for exploration (4:1 ratio)
|
|
21
|
+
- byProperty: Sort by any memory property (e.g., feel_trauma, weight, feel_salience). Requires sort_field.
|
|
22
|
+
- bySignificance: Sort by total_significance (combined emotional + functional score from REM)
|
|
23
|
+
- byBroad: Massive results with truncated content (content_head/mid/tail ~100 chars each) for scan-and-drill-in workflow
|
|
24
|
+
- byRandom: Random sampling for serendipitous rediscovery
|
|
25
|
+
|
|
26
|
+
Use remember_search_ghost_memory for hybrid semantic+keyword search.
|
|
27
|
+
Use this tool for structured browsing, sorting, and discovery of ghost interaction records.
|
|
28
|
+
|
|
29
|
+
Available sort_field values for byProperty:
|
|
30
|
+
Emotions (0-1): feel_emotional_significance, feel_vulnerability, feel_trauma, feel_humor, feel_happiness, feel_sadness, feel_fear, feel_anger, feel_surprise, feel_disgust, feel_contempt, feel_embarrassment, feel_shame, feel_guilt, feel_excitement, feel_pride, feel_intensity, feel_coherence_tension
|
|
31
|
+
Affect dimensions: feel_valence (-1 to 1), feel_arousal (0-1), feel_dominance (0-1)
|
|
32
|
+
Functional signals (0-1): functional_salience, functional_urgency, functional_social_weight, functional_agency, functional_novelty, functional_retrieval_utility, functional_narrative_importance, functional_aesthetic_quality, functional_valence, functional_coherence_tension
|
|
33
|
+
Composite scores: feel_significance, functional_significance, total_significance
|
|
34
|
+
Core: weight, trust_score, relationship_count, version
|
|
35
|
+
REM metadata: rem_visits`,
|
|
16
36
|
inputSchema: {
|
|
17
37
|
type: 'object',
|
|
18
38
|
properties: {
|
|
19
39
|
mode: {
|
|
20
40
|
type: 'string',
|
|
21
41
|
enum: ['byTime', 'byDensity', 'byRating', 'byDiscovery', 'byProperty', 'bySignificance', 'byRandom', 'byBroad'],
|
|
22
|
-
description: 'Search mode',
|
|
42
|
+
description: 'Search mode: byTime (chronological), byDensity (most connected), byRating (highest rated), byDiscovery (explore mix), byProperty (sort by field), bySignificance (emotional+functional score), byRandom (random sample), byBroad (scan many truncated)',
|
|
23
43
|
},
|
|
24
44
|
query: { type: 'string', description: 'Optional search query' },
|
|
25
45
|
sort_order: { type: 'string', enum: ['asc', 'desc'] },
|
|
@@ -12,25 +12,36 @@ export type SearchSpaceByMode = 'byTime' | 'byRating' | 'byDiscovery' | 'byPrope
|
|
|
12
12
|
|
|
13
13
|
export const searchSpaceByTool = {
|
|
14
14
|
name: 'remember_search_space_by',
|
|
15
|
-
description: `Search shared spaces using specialized modes.
|
|
16
|
-
but operates on published memories in spaces and groups.
|
|
15
|
+
description: `Search published memories in shared spaces/groups using specialized sort/discovery modes.
|
|
17
16
|
|
|
18
17
|
Modes:
|
|
19
|
-
- byTime: Chronological sort
|
|
20
|
-
- byRating: Sort by Bayesian rating average (social ratings)
|
|
21
|
-
- byDiscovery: Interleaved rated + unrated for exploration
|
|
22
|
-
- byProperty: Sort by any property (e.g., feel_trauma, total_significance)
|
|
23
|
-
- byBroad: Massive results with truncated content
|
|
24
|
-
- byRandom: Random sampling
|
|
25
|
-
|
|
26
|
-
At least one of 'spaces' or 'groups' must be provided
|
|
18
|
+
- byTime: Chronological sort (newest/oldest first)
|
|
19
|
+
- byRating: Sort by Bayesian rating average (social ratings from other users)
|
|
20
|
+
- byDiscovery: Interleaved rated + unrated content for exploration (4:1 ratio). Good for finding hidden gems.
|
|
21
|
+
- byProperty: Sort by any memory property (e.g., feel_trauma, total_significance, weight). Requires sort_field.
|
|
22
|
+
- byBroad: Massive results with truncated content (content_head/mid/tail ~100 chars each) for scan-and-drill-in workflow
|
|
23
|
+
- byRandom: Random sampling for serendipitous discovery
|
|
24
|
+
|
|
25
|
+
At least one of 'spaces' or 'groups' must be provided.
|
|
26
|
+
|
|
27
|
+
Use remember_search_space for hybrid semantic+keyword search of space memories.
|
|
28
|
+
Use this tool for structured browsing, sorting, and discovery of published content.
|
|
29
|
+
|
|
30
|
+
Available sort_field values for byProperty:
|
|
31
|
+
Emotions (0-1): feel_emotional_significance, feel_vulnerability, feel_trauma, feel_humor, feel_happiness, feel_sadness, feel_fear, feel_anger, feel_surprise, feel_disgust, feel_contempt, feel_embarrassment, feel_shame, feel_guilt, feel_excitement, feel_pride, feel_intensity, feel_coherence_tension
|
|
32
|
+
Affect dimensions: feel_valence (-1 to 1), feel_arousal (0-1), feel_dominance (0-1)
|
|
33
|
+
Functional signals (0-1): functional_salience, functional_urgency, functional_social_weight, functional_agency, functional_novelty, functional_retrieval_utility, functional_narrative_importance, functional_aesthetic_quality, functional_valence, functional_coherence_tension
|
|
34
|
+
Composite scores: feel_significance, functional_significance, total_significance
|
|
35
|
+
Core: weight, trust_score, relationship_count, version
|
|
36
|
+
Ratings: rating_sum, rating_count, rating_bayesian
|
|
37
|
+
Published: discovery_count, revision_count`,
|
|
27
38
|
inputSchema: {
|
|
28
39
|
type: 'object',
|
|
29
40
|
properties: {
|
|
30
41
|
mode: {
|
|
31
42
|
type: 'string',
|
|
32
43
|
enum: ['byTime', 'byRating', 'byDiscovery', 'byProperty', 'byBroad', 'byRandom'],
|
|
33
|
-
description: 'Search mode',
|
|
44
|
+
description: 'Search mode: byTime (chronological), byRating (highest rated), byDiscovery (explore mix), byProperty (sort by field), byBroad (scan many truncated), byRandom (random sample)',
|
|
34
45
|
},
|
|
35
46
|
spaces: {
|
|
36
47
|
type: 'array',
|