@joseairosa/recall 1.2.1 → 1.3.0
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/.claude/settings.local.json +7 -1
- package/CHANGELOG.md +83 -0
- package/README.md +167 -5
- package/WORKSPACE_MODES.md +158 -73
- package/dist/index.js +668 -68
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,13 @@
|
|
|
11
11
|
"Bash(npm whoami:*)",
|
|
12
12
|
"Bash(curl:*)",
|
|
13
13
|
"Bash(npm run build:*)",
|
|
14
|
-
"Bash(npm publish:*)"
|
|
14
|
+
"Bash(npm publish:*)",
|
|
15
|
+
"Bash(gh pr create:*)",
|
|
16
|
+
"Bash(gh repo edit:*)",
|
|
17
|
+
"Bash(cat:*)",
|
|
18
|
+
"Bash(git checkout:*)",
|
|
19
|
+
"Bash(git pull:*)",
|
|
20
|
+
"Bash(node:*)"
|
|
15
21
|
],
|
|
16
22
|
"deny": [],
|
|
17
23
|
"ask": []
|
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [1.3.0] - 2025-10-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **Global Memories** - Cross-workspace memory sharing
|
|
14
|
+
- `is_global` field on memories - Mark memories as accessible across all workspaces
|
|
15
|
+
- `workspace_id` field - Track workspace origin for each memory
|
|
16
|
+
- Three workspace modes via `WORKSPACE_MODE` environment variable:
|
|
17
|
+
- `isolated` (default) - Workspace-only, no cross-workspace access
|
|
18
|
+
- `global` - All memories shared globally, no workspace isolation
|
|
19
|
+
- `hybrid` - Both workspace AND global memories with smart weighting
|
|
20
|
+
- Hybrid search weighting: workspace memories 1.0x, global memories 0.9x (prefer local context)
|
|
21
|
+
- **Global Memory Tools** (2 new tools)
|
|
22
|
+
- `convert_to_global` - Convert workspace-specific memory to global
|
|
23
|
+
- `convert_to_workspace` - Convert global memory to workspace-specific
|
|
24
|
+
- **Global Memory Resources** (5 new resources)
|
|
25
|
+
- `memory://global/recent?limit=50` - Recent global memories
|
|
26
|
+
- `memory://global/by-type/{type}?limit=50` - Global memories by context type
|
|
27
|
+
- `memory://global/by-tag/{tag}?limit=50` - Global memories by tag
|
|
28
|
+
- `memory://global/important?min=8&limit=50` - Important global memories
|
|
29
|
+
- `memory://global/search?q=query&limit=10` - Search global memories
|
|
30
|
+
- All global resources throw helpful errors in `isolated` mode
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
- Enhanced `CreateMemory` schema with optional `is_global` field (defaults to `false`)
|
|
34
|
+
- Updated `MemoryEntry` schema with `is_global` and `workspace_id` fields
|
|
35
|
+
- Updated `searchMemories()` to support three workspace modes with weighted results
|
|
36
|
+
- Enhanced `getMemory()` to check both workspace and global storage
|
|
37
|
+
- All retrieval methods respect workspace mode configuration
|
|
38
|
+
|
|
39
|
+
### Technical
|
|
40
|
+
- Added `WorkspaceMode` enum and `getWorkspaceMode()` helper
|
|
41
|
+
- Added global Redis key helpers: `globalMemory()`, `globalMemories()`, `globalByType()`, etc.
|
|
42
|
+
- Added `ConvertToGlobalSchema` and `ConvertToWorkspaceSchema` validation
|
|
43
|
+
- Updated `MemoryStore` with `convertToGlobal()` and `convertToWorkspace()` methods
|
|
44
|
+
- All global resources validate workspace mode and provide clear error messages
|
|
45
|
+
- Backward compatible: defaults to `isolated` mode, no breaking changes
|
|
46
|
+
|
|
47
|
+
### Use Cases
|
|
48
|
+
- Personal preferences across all projects (coding standards, communication style)
|
|
49
|
+
- Team conventions and organizational knowledge
|
|
50
|
+
- Cross-project patterns and solutions
|
|
51
|
+
- Shared tools and commands
|
|
52
|
+
|
|
53
|
+
**Tools:** 15 total (6 core + 3 smart context + 4 advanced + 2 global)
|
|
54
|
+
**Resources:** 14 total (9 workspace + 5 global)
|
|
55
|
+
**Prompts:** 1 (`workspace_context`)
|
|
56
|
+
|
|
57
|
+
See [WORKSPACE_MODES.md](WORKSPACE_MODES.md) for detailed documentation.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
10
61
|
## [1.2.1] - 2025-10-02
|
|
11
62
|
|
|
12
63
|
### Added
|
|
@@ -141,6 +192,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
141
192
|
|
|
142
193
|
## Migration Guides
|
|
143
194
|
|
|
195
|
+
### Migrating from v1.2.1 to v1.3.0
|
|
196
|
+
|
|
197
|
+
**No breaking changes.** All existing functionality works identically.
|
|
198
|
+
|
|
199
|
+
**Defaults:**
|
|
200
|
+
- Workspace mode: `isolated` (same as v1.2.1)
|
|
201
|
+
- All memories: `is_global: false` (workspace-only)
|
|
202
|
+
- No configuration changes required
|
|
203
|
+
|
|
204
|
+
**New features available:**
|
|
205
|
+
1. **Enable global memories** - Set `WORKSPACE_MODE=hybrid` in config
|
|
206
|
+
2. **Convert existing memories** - Use `convert_to_global` tool
|
|
207
|
+
3. **Browse global memories** - Use `memory://global/*` resources
|
|
208
|
+
|
|
209
|
+
**Configuration example:**
|
|
210
|
+
```json
|
|
211
|
+
{
|
|
212
|
+
"env": {
|
|
213
|
+
"WORKSPACE_MODE": "hybrid", // Enable both workspace + global
|
|
214
|
+
"REDIS_URL": "redis://localhost:6379",
|
|
215
|
+
"ANTHROPIC_API_KEY": "sk-ant-..."
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Use cases:**
|
|
221
|
+
- Keep mode as `isolated` for project-only memories (default behavior)
|
|
222
|
+
- Use `hybrid` for personal preferences + project memories
|
|
223
|
+
- Use `global` for team-wide shared knowledge across all projects
|
|
224
|
+
|
|
225
|
+
See [WORKSPACE_MODES.md](WORKSPACE_MODES.md) for detailed guide.
|
|
226
|
+
|
|
144
227
|
### Migrating from v1.1.0 to v1.2.0
|
|
145
228
|
|
|
146
229
|
**No breaking changes.** All existing functionality works identically.
|
package/README.md
CHANGED
|
@@ -191,6 +191,61 @@ Then in a new conversation:
|
|
|
191
191
|
|
|
192
192
|
---
|
|
193
193
|
|
|
194
|
+
## Upgrading
|
|
195
|
+
|
|
196
|
+
### Automatic Updates (Recommended)
|
|
197
|
+
|
|
198
|
+
If you use **`npx -y @joseairosa/recall`** in your config, you **automatically get the latest version** on every Claude restart. No action needed! 🎉
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"mcpServers": {
|
|
203
|
+
"recall": {
|
|
204
|
+
"command": "npx",
|
|
205
|
+
"args": ["-y", "@joseairosa/recall"] // ← Always fetches latest
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Manual Updates
|
|
212
|
+
|
|
213
|
+
**If using global installation:**
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Update to latest version
|
|
217
|
+
npm update -g @joseairosa/recall
|
|
218
|
+
|
|
219
|
+
# Or install specific version
|
|
220
|
+
npm install -g @joseairosa/recall@1.3.0
|
|
221
|
+
|
|
222
|
+
# Check installed version
|
|
223
|
+
npm list -g @joseairosa/recall
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**If using from source:**
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
cd recall
|
|
230
|
+
git pull origin main
|
|
231
|
+
npm install
|
|
232
|
+
npm run build
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**After updating:**
|
|
236
|
+
1. Restart Claude Code or Claude Desktop
|
|
237
|
+
2. Verify new version: Ask Claude "What Recall version are you using?"
|
|
238
|
+
3. Check CHANGELOG.md for new features and breaking changes
|
|
239
|
+
|
|
240
|
+
### Version-Specific Upgrades
|
|
241
|
+
|
|
242
|
+
**Upgrading to v1.3.0:**
|
|
243
|
+
- No breaking changes, fully backward compatible
|
|
244
|
+
- To use global memories: Add `WORKSPACE_MODE=hybrid` to your config
|
|
245
|
+
- See [Migration Guide](#migrating-from-v121-to-v130) below
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
194
249
|
## How to Use
|
|
195
250
|
|
|
196
251
|
### Store Important Information
|
|
@@ -208,6 +263,17 @@ Claude can automatically extract and store memories, or you can be explicit:
|
|
|
208
263
|
|
|
209
264
|
**What Claude does:** Uses the `store_memory` tool to save this information with appropriate context type and importance.
|
|
210
265
|
|
|
266
|
+
**Store globally (v1.3+):**
|
|
267
|
+
```
|
|
268
|
+
"Remember globally: I prefer TypeScript strict mode for all projects"
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
"Store this as a global preference: Always use ULIDs for database IDs"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**What Claude does:** Uses `store_memory` with `is_global: true` to make it accessible across all workspaces (requires `WORKSPACE_MODE=hybrid` or `global`).
|
|
276
|
+
|
|
211
277
|
### Recall Context
|
|
212
278
|
|
|
213
279
|
Claude automatically retrieves relevant memories, but you can also ask:
|
|
@@ -242,6 +308,22 @@ Group related work:
|
|
|
242
308
|
|
|
243
309
|
**What Claude does:** Uses `summarize_session` to create a session snapshot with all relevant memories.
|
|
244
310
|
|
|
311
|
+
### Convert Memories (v1.3+)
|
|
312
|
+
|
|
313
|
+
**Promote workspace memory to global:**
|
|
314
|
+
```
|
|
315
|
+
"Convert this memory to global: mem_abc123"
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**What Claude does:** Uses `convert_to_global` to move the memory from workspace-specific to globally accessible.
|
|
319
|
+
|
|
320
|
+
**Convert back to workspace:**
|
|
321
|
+
```
|
|
322
|
+
"Convert this global memory to workspace-specific: mem_xyz789"
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**What Claude does:** Uses `convert_to_workspace` to move the memory from global to current workspace.
|
|
326
|
+
|
|
245
327
|
---
|
|
246
328
|
|
|
247
329
|
## Memory Types
|
|
@@ -263,7 +345,7 @@ Memories are categorized for better organization:
|
|
|
263
345
|
|
|
264
346
|
---
|
|
265
347
|
|
|
266
|
-
## Available Tools (
|
|
348
|
+
## Available Tools (15)
|
|
267
349
|
|
|
268
350
|
Claude has access to these memory tools:
|
|
269
351
|
|
|
@@ -286,12 +368,17 @@ Claude has access to these memory tools:
|
|
|
286
368
|
- **`find_duplicates`** - Detect similar memories
|
|
287
369
|
- **`consolidate_memories`** - Merge multiple memories
|
|
288
370
|
|
|
371
|
+
### Global Memories (v1.3+)
|
|
372
|
+
- **`convert_to_global`** - Convert workspace memory to global
|
|
373
|
+
- **`convert_to_workspace`** - Convert global memory to workspace-specific
|
|
374
|
+
|
|
289
375
|
---
|
|
290
376
|
|
|
291
|
-
## Available Resources (
|
|
377
|
+
## Available Resources (14)
|
|
292
378
|
|
|
293
379
|
Browse memories directly using MCP resources:
|
|
294
380
|
|
|
381
|
+
### Workspace Resources
|
|
295
382
|
- **`memory://recent`** - Recent memories (default 50)
|
|
296
383
|
- **`memory://by-type/{type}`** - Filter by context type
|
|
297
384
|
- **`memory://by-tag/{tag}`** - Filter by tag
|
|
@@ -302,6 +389,13 @@ Browse memories directly using MCP resources:
|
|
|
302
389
|
- **`memory://search?q=query`** - Semantic search
|
|
303
390
|
- **`memory://analytics`** - Usage analytics dashboard (v1.2+)
|
|
304
391
|
|
|
392
|
+
### Global Resources (v1.3+)
|
|
393
|
+
- **`memory://global/recent`** - Recent global memories (cross-workspace)
|
|
394
|
+
- **`memory://global/by-type/{type}`** - Global memories by context type
|
|
395
|
+
- **`memory://global/by-tag/{tag}`** - Global memories by tag
|
|
396
|
+
- **`memory://global/important`** - Important global memories
|
|
397
|
+
- **`memory://global/search?q=query`** - Search global memories
|
|
398
|
+
|
|
305
399
|
---
|
|
306
400
|
|
|
307
401
|
## Workspace Isolation
|
|
@@ -383,9 +477,44 @@ Developer B: "What's our API rate limit?"
|
|
|
383
477
|
|
|
384
478
|
See [WORKSPACE_MODES.md](WORKSPACE_MODES.md) for future plans on enhanced organizational memory features.
|
|
385
479
|
|
|
386
|
-
###
|
|
480
|
+
### Global Memories (v1.3+)
|
|
481
|
+
|
|
482
|
+
**Cross-workspace memory sharing** enables memories that work across all workspaces. Perfect for:
|
|
483
|
+
- Personal preferences and coding standards
|
|
484
|
+
- Team conventions and organizational knowledge
|
|
485
|
+
- Shared patterns and solutions
|
|
486
|
+
|
|
487
|
+
**Workspace Modes:**
|
|
488
|
+
- **`isolated`** (default) - Workspace-only memories, no cross-workspace access
|
|
489
|
+
- **`global`** - All memories shared globally, no workspace isolation
|
|
490
|
+
- **`hybrid`** - Both workspace-specific AND global memories (best of both worlds)
|
|
491
|
+
|
|
492
|
+
**Configure workspace mode:**
|
|
493
|
+
```json
|
|
494
|
+
{
|
|
495
|
+
"env": {
|
|
496
|
+
"WORKSPACE_MODE": "hybrid"
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
**Create global memories:**
|
|
502
|
+
```
|
|
503
|
+
"Remember globally: I prefer TypeScript strict mode for all projects"
|
|
504
|
+
```
|
|
505
|
+
Claude stores with `is_global: true`, accessible across all workspaces.
|
|
506
|
+
|
|
507
|
+
**Convert existing memories:**
|
|
508
|
+
```
|
|
509
|
+
"Convert this memory to global: [memory_id]"
|
|
510
|
+
```
|
|
387
511
|
|
|
388
|
-
|
|
512
|
+
**Browse global memories:**
|
|
513
|
+
- Use `memory://global/recent` resource
|
|
514
|
+
- Use `memory://global/search?q=query` for semantic search
|
|
515
|
+
- Global resources only work in `global` or `hybrid` modes
|
|
516
|
+
|
|
517
|
+
See [WORKSPACE_MODES.md](WORKSPACE_MODES.md) for detailed documentation.
|
|
389
518
|
|
|
390
519
|
---
|
|
391
520
|
|
|
@@ -510,6 +639,34 @@ Claude: [Retrieves session memories]
|
|
|
510
639
|
- Updated middleware for new auth flow"
|
|
511
640
|
```
|
|
512
641
|
|
|
642
|
+
### Example 4: Global Memories (v1.3+)
|
|
643
|
+
```
|
|
644
|
+
# In project A (with WORKSPACE_MODE=hybrid)
|
|
645
|
+
You: "Remember globally: I prefer async/await over .then() in all projects"
|
|
646
|
+
|
|
647
|
+
Claude: [Stores with is_global: true]
|
|
648
|
+
✓ Stored globally: async/await preference (importance: 9)
|
|
649
|
+
|
|
650
|
+
# Switch to project B
|
|
651
|
+
You: "What are my coding preferences?"
|
|
652
|
+
|
|
653
|
+
Claude: [Retrieves global memories]
|
|
654
|
+
"Your global coding preferences include:
|
|
655
|
+
- Prefer async/await over .then() in all projects"
|
|
656
|
+
|
|
657
|
+
# Project-specific memory
|
|
658
|
+
You: "Remember for this project only: Use MongoDB with Mongoose"
|
|
659
|
+
|
|
660
|
+
Claude: [Stores with is_global: false]
|
|
661
|
+
✓ Stored: MongoDB with Mongoose (workspace-only, importance: 8)
|
|
662
|
+
|
|
663
|
+
# Back in project A
|
|
664
|
+
You: "What database are we using?"
|
|
665
|
+
|
|
666
|
+
Claude: [Only sees project A memories, not project B's MongoDB]
|
|
667
|
+
"I don't see any database information stored for this workspace."
|
|
668
|
+
```
|
|
669
|
+
|
|
513
670
|
---
|
|
514
671
|
|
|
515
672
|
## Configuration
|
|
@@ -518,6 +675,10 @@ Claude: [Retrieves session memories]
|
|
|
518
675
|
|
|
519
676
|
- **`REDIS_URL`** - Redis connection (default: `redis://localhost:6379`)
|
|
520
677
|
- **`ANTHROPIC_API_KEY`** - Claude API key for analysis and embeddings
|
|
678
|
+
- **`WORKSPACE_MODE`** (v1.3+) - Workspace memory mode (default: `isolated`)
|
|
679
|
+
- `isolated` - Workspace-only memories, no cross-workspace access
|
|
680
|
+
- `global` - All memories shared globally across workspaces
|
|
681
|
+
- `hybrid` - Both workspace-specific AND global memories
|
|
521
682
|
|
|
522
683
|
### Redis Setup Options
|
|
523
684
|
|
|
@@ -801,7 +962,8 @@ Typical performance characteristics:
|
|
|
801
962
|
|
|
802
963
|
## Version History
|
|
803
964
|
|
|
804
|
-
- **v1.
|
|
965
|
+
- **v1.3.0** (Current) - Global memories, cross-workspace sharing, workspace modes
|
|
966
|
+
- **v1.2.0** - TTL support, Export/Import, Consolidation, Analytics
|
|
805
967
|
- **v1.1.0** - Smart context management (recall, analyze, summarize)
|
|
806
968
|
- **v1.0.0** - Initial release with core memory operations
|
|
807
969
|
|
package/WORKSPACE_MODES.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Workspace Modes & Global Memories
|
|
2
2
|
|
|
3
|
-
## Current Behavior (v1.
|
|
3
|
+
## Current Behavior (v1.3.0)
|
|
4
4
|
|
|
5
|
-
**Workspace Isolation:** All memories are automatically isolated by directory.
|
|
5
|
+
**Workspace Isolation (default):** All memories are automatically isolated by directory.
|
|
6
6
|
|
|
7
7
|
```
|
|
8
8
|
/Users/you/project-a/ → Workspace A memories (isolated)
|
|
@@ -11,9 +11,14 @@
|
|
|
11
11
|
|
|
12
12
|
This prevents memory pollution between projects.
|
|
13
13
|
|
|
14
|
+
**Global Memories (v1.3.0):** Cross-workspace memory sharing with three modes:
|
|
15
|
+
- **`isolated`** (default) - Workspace-only, no cross-workspace access
|
|
16
|
+
- **`global`** - All memories shared globally, no workspace isolation
|
|
17
|
+
- **`hybrid`** - Both workspace AND global memories
|
|
18
|
+
|
|
14
19
|
---
|
|
15
20
|
|
|
16
|
-
##
|
|
21
|
+
## Global Memories (v1.3.0)
|
|
17
22
|
|
|
18
23
|
### Use Cases for Global Memories
|
|
19
24
|
|
|
@@ -31,30 +36,36 @@ This prevents memory pollution between projects.
|
|
|
31
36
|
|
|
32
37
|
---
|
|
33
38
|
|
|
34
|
-
##
|
|
39
|
+
## Implementation (v1.3.0)
|
|
35
40
|
|
|
36
|
-
###
|
|
41
|
+
### Schema Changes
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
Added `is_global` field to memory schema:
|
|
39
44
|
|
|
40
45
|
```typescript
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
// New field in MemoryEntry
|
|
47
|
+
is_global: boolean // If true, memory is accessible across all workspaces
|
|
48
|
+
workspace_id: string // Workspace identifier (empty for global memories)
|
|
49
|
+
|
|
50
|
+
// New field in CreateMemory
|
|
51
|
+
is_global?: boolean // Optional, defaults to false
|
|
47
52
|
```
|
|
48
53
|
|
|
49
|
-
|
|
54
|
+
### Storage Architecture
|
|
55
|
+
|
|
56
|
+
**Redis Key Structure:**
|
|
50
57
|
- Global memories: `global:memory:{id}`
|
|
51
58
|
- Workspace memories: `ws:{workspace_id}:memory:{id}`
|
|
52
59
|
|
|
53
|
-
**
|
|
54
|
-
-
|
|
55
|
-
- Global
|
|
60
|
+
**Indexes:**
|
|
61
|
+
- Global timeline: `global:memories:timeline`
|
|
62
|
+
- Global by type: `global:memories:type:{type}`
|
|
63
|
+
- Global by tag: `global:memories:tag:{tag}`
|
|
64
|
+
- Global important: `global:memories:important`
|
|
65
|
+
|
|
66
|
+
### Workspace Modes
|
|
56
67
|
|
|
57
|
-
|
|
68
|
+
Configure via `WORKSPACE_MODE` environment variable:
|
|
58
69
|
|
|
59
70
|
```json
|
|
60
71
|
{
|
|
@@ -69,51 +80,56 @@ Add `is_global` field to memory schema:
|
|
|
69
80
|
}
|
|
70
81
|
```
|
|
71
82
|
|
|
72
|
-
**
|
|
73
|
-
- `isolated` (default): Current behavior
|
|
74
|
-
- `global`: All memories shared across workspaces
|
|
75
|
-
- `hybrid`: Support both global and workspace memories
|
|
83
|
+
**Mode Behaviors:**
|
|
76
84
|
|
|
77
|
-
|
|
85
|
+
| Mode | Workspace Memories | Global Memories | Search Behavior |
|
|
86
|
+
|------|-------------------|-----------------|-----------------|
|
|
87
|
+
| **`isolated`** (default) | ✅ Stored & retrieved | ❌ Not accessible | Workspace only |
|
|
88
|
+
| **`global`** | ❌ All stored as global | ✅ All memories global | Global only |
|
|
89
|
+
| **`hybrid`** | ✅ Stored & retrieved | ✅ Stored & retrieved | Both, weighted |
|
|
78
90
|
|
|
79
|
-
|
|
91
|
+
**Hybrid Mode Search Weighting:**
|
|
92
|
+
- Workspace memories: 1.0x similarity score (preferred)
|
|
93
|
+
- Global memories: 0.9x similarity score (slightly lower priority)
|
|
94
|
+
- This ensures local context is preferred over global knowledge
|
|
80
95
|
|
|
81
|
-
|
|
96
|
+
### New Tools (v1.3.0)
|
|
97
|
+
|
|
98
|
+
**`convert_to_global`** - Convert workspace memory to global:
|
|
99
|
+
```typescript
|
|
82
100
|
{
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"args": ["-y", "@joseairosa/recall"],
|
|
87
|
-
"env": {
|
|
88
|
-
"WORKSPACE_MODE": "isolated"
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
"recall-global": {
|
|
92
|
-
"command": "npx",
|
|
93
|
-
"args": ["-y", "@joseairosa/recall"],
|
|
94
|
-
"env": {
|
|
95
|
-
"WORKSPACE_MODE": "global"
|
|
96
|
-
}
|
|
97
|
-
}
|
|
101
|
+
tool: "convert_to_global",
|
|
102
|
+
arguments: {
|
|
103
|
+
memory_id: "mem_abc123"
|
|
98
104
|
}
|
|
99
105
|
}
|
|
100
106
|
```
|
|
101
107
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
**`convert_to_workspace`** - Convert global memory to workspace:
|
|
109
|
+
```typescript
|
|
110
|
+
{
|
|
111
|
+
tool: "convert_to_workspace",
|
|
112
|
+
arguments: {
|
|
113
|
+
memory_id: "mem_abc123",
|
|
114
|
+
workspace_id: "/Users/you/project-a" // Optional, defaults to current
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
106
118
|
|
|
107
|
-
|
|
119
|
+
### New Resources (v1.3.0)
|
|
108
120
|
|
|
109
|
-
|
|
121
|
+
Global memory resources (only work in `global` or `hybrid` modes):
|
|
122
|
+
- `memory://global/recent?limit=50` - Recent global memories
|
|
123
|
+
- `memory://global/by-type/{type}?limit=50` - Global memories by context type
|
|
124
|
+
- `memory://global/by-tag/{tag}?limit=50` - Global memories by tag
|
|
125
|
+
- `memory://global/important?min=8&limit=50` - Important global memories
|
|
126
|
+
- `memory://global/search?q=query&limit=10` - Search global memories
|
|
110
127
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- `convert_to_workspace` - Demote global memory to workspace
|
|
128
|
+
**Error in isolated mode:**
|
|
129
|
+
```
|
|
130
|
+
McpError: Global memories are not available in isolated mode.
|
|
131
|
+
Set WORKSPACE_MODE=hybrid or global to access global memories.
|
|
132
|
+
```
|
|
117
133
|
|
|
118
134
|
### User Experience
|
|
119
135
|
|
|
@@ -153,49 +169,118 @@ Run two instances:
|
|
|
153
169
|
### Migration Path
|
|
154
170
|
|
|
155
171
|
For existing users (v1.2.0 → v1.3.0):
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
- `is_global` defaults to `false`
|
|
159
|
-
- Users opt-in to global memories
|
|
172
|
+
- ✅ **No breaking changes** - defaults to `isolated` mode
|
|
173
|
+
- ✅ All existing memories remain workspace-isolated
|
|
174
|
+
- ✅ `is_global` defaults to `false` for all new memories
|
|
175
|
+
- ✅ Users opt-in to global memories by setting `WORKSPACE_MODE`
|
|
176
|
+
|
|
177
|
+
**Backward compatibility:**
|
|
178
|
+
```typescript
|
|
179
|
+
// v1.2.0 memories (no is_global field)
|
|
180
|
+
{
|
|
181
|
+
id: "mem_123",
|
|
182
|
+
content: "...",
|
|
183
|
+
// is_global: undefined → treated as false
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// v1.3.0+ automatically adds fields
|
|
187
|
+
{
|
|
188
|
+
id: "mem_123",
|
|
189
|
+
content: "...",
|
|
190
|
+
is_global: false, // Added with default value
|
|
191
|
+
workspace_id: "/Users/you/project-a"
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Implementation Details
|
|
196
|
+
|
|
197
|
+
**CreateMemory behavior by mode:**
|
|
198
|
+
|
|
199
|
+
| Mode | `is_global` param | Storage Location | Indexes |
|
|
200
|
+
|------|------------------|------------------|---------|
|
|
201
|
+
| `isolated` | Ignored | Workspace | Workspace only |
|
|
202
|
+
| `global` | Forced to `true` | Global | Global only |
|
|
203
|
+
| `hybrid` | Respected | Based on flag | Both as appropriate |
|
|
204
|
+
|
|
205
|
+
**Search behavior:**
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
// Isolated mode
|
|
209
|
+
searchMemories("query", 10)
|
|
210
|
+
// → Searches: workspace memories only
|
|
211
|
+
|
|
212
|
+
// Global mode
|
|
213
|
+
searchMemories("query", 10)
|
|
214
|
+
// → Searches: global memories only
|
|
215
|
+
|
|
216
|
+
// Hybrid mode
|
|
217
|
+
searchMemories("query", 10)
|
|
218
|
+
// → Searches: workspace (1.0x) + global (0.9x)
|
|
219
|
+
// → Merges results, sorts by weighted similarity
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Conversion logic:**
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
// Convert to global
|
|
226
|
+
// 1. Fetch memory from workspace
|
|
227
|
+
// 2. Delete from workspace indexes (memory, timeline, by-type, by-tag, important)
|
|
228
|
+
// 3. Store in global indexes with is_global=true
|
|
229
|
+
// 4. Update workspace_id to empty string
|
|
230
|
+
|
|
231
|
+
// Convert to workspace
|
|
232
|
+
// 1. Fetch memory from global
|
|
233
|
+
// 2. Delete from global indexes
|
|
234
|
+
// 3. Store in workspace indexes with is_global=false
|
|
235
|
+
// 4. Update workspace_id to target workspace
|
|
236
|
+
```
|
|
160
237
|
|
|
161
238
|
---
|
|
162
239
|
|
|
163
240
|
## Alternative: Remote Redis with Shared Workspace
|
|
164
241
|
|
|
165
|
-
Instead of global memories, users can:
|
|
242
|
+
Instead of using global memories feature, users can share memories by:
|
|
166
243
|
|
|
167
244
|
1. **Use remote Redis** (Upstash, Redis Cloud)
|
|
168
245
|
2. **Share Redis URL** across team
|
|
169
|
-
3. **Use same workspace path** for
|
|
246
|
+
3. **Use same workspace path** for project memories
|
|
170
247
|
|
|
171
248
|
```json
|
|
172
249
|
{
|
|
173
250
|
"env": {
|
|
174
251
|
"REDIS_URL": "rediss://team-redis.upstash.io:6379",
|
|
175
|
-
"
|
|
252
|
+
"WORKSPACE_MODE": "isolated" // Traditional workspace isolation
|
|
176
253
|
}
|
|
177
254
|
}
|
|
178
255
|
```
|
|
179
256
|
|
|
180
257
|
This enables:
|
|
181
|
-
- Team-shared memories for
|
|
258
|
+
- Team-shared memories for specific projects
|
|
182
259
|
- Consistent memories across machines
|
|
183
|
-
-
|
|
260
|
+
- Automatic backup and sync
|
|
261
|
+
- Simpler than global memories for single-project teams
|
|
184
262
|
|
|
185
263
|
---
|
|
186
264
|
|
|
187
265
|
## Summary
|
|
188
266
|
|
|
189
|
-
**
|
|
190
|
-
|
|
191
|
-
**
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
267
|
+
**v1.3.0 Implementation:** ✅ Complete
|
|
268
|
+
|
|
269
|
+
**Features shipped:**
|
|
270
|
+
- ✅ Global memories with `is_global` flag
|
|
271
|
+
- ✅ Three workspace modes: `isolated`, `global`, `hybrid`
|
|
272
|
+
- ✅ Hybrid search with 0.9x global weighting
|
|
273
|
+
- ✅ Conversion tools (`convert_to_global`, `convert_to_workspace`)
|
|
274
|
+
- ✅ Global resources (`memory://global/*`)
|
|
275
|
+
- ✅ No breaking changes, fully backward compatible
|
|
276
|
+
|
|
277
|
+
**Use Cases:**
|
|
278
|
+
- Personal preferences across all projects → Global memories
|
|
279
|
+
- Team conventions and patterns → Global memories
|
|
280
|
+
- Project-specific architecture → Workspace memories
|
|
281
|
+
- Local debugging notes → Workspace memories
|
|
282
|
+
|
|
283
|
+
**Next Steps (Future Versions):**
|
|
284
|
+
- v1.4.0: Memory relationships (links between memories)
|
|
285
|
+
- v1.5.0: Memory versioning (track changes over time)
|
|
286
|
+
- v1.6.0: Smart suggestions (AI-powered memory recommendations)
|