@joseairosa/recall 1.6.0 → 1.8.2

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.
Files changed (75) hide show
  1. package/.claude/hooks.json +3 -0
  2. package/.claude/hooks.local.json +29 -0
  3. package/.claude/settings.json +20 -0
  4. package/.claude/settings.local.json +48 -6
  5. package/.claude/todo.json +29 -0
  6. package/.env.example +39 -3
  7. package/.github/workflows/ci.yml +36 -0
  8. package/.mcp.json +2 -13
  9. package/CHANGELOG.md +67 -0
  10. package/CLAUDE.md +230 -313
  11. package/Dockerfile +81 -0
  12. package/MEMORY_RELATIONSHIPS.md +1 -1
  13. package/QUICKSTART.md +151 -1
  14. package/README.md +331 -56
  15. package/WORKSPACE_MODES.md +1 -1
  16. package/batch_import.mjs +25 -0
  17. package/claude-plugin/.claude-plugin/plugin.json +8 -0
  18. package/claude-plugin/README.md +265 -0
  19. package/claude-plugin/agents/context-loader.md +69 -0
  20. package/claude-plugin/agents/result-aggregator.md +143 -0
  21. package/claude-plugin/agents/task-decomposer.md +107 -0
  22. package/claude-plugin/commands/decompose.md +114 -0
  23. package/claude-plugin/commands/load-context.md +74 -0
  24. package/claude-plugin/commands/rlm-status.md +140 -0
  25. package/claude-plugin/hooks/hooks.json +80 -0
  26. package/coverage/base.css +224 -0
  27. package/coverage/block-navigation.js +87 -0
  28. package/coverage/coverage-final.json +4 -0
  29. package/coverage/favicon.png +0 -0
  30. package/coverage/index.html +146 -0
  31. package/coverage/prettify.css +1 -0
  32. package/coverage/prettify.js +2 -0
  33. package/coverage/sort-arrow-sprite.png +0 -0
  34. package/coverage/sorter.js +210 -0
  35. package/dist/chunk-NXD57GSG.js +470 -0
  36. package/dist/chunk-NXD57GSG.js.map +1 -0
  37. package/dist/chunk-OZAKGLVT.js +8068 -0
  38. package/dist/chunk-OZAKGLVT.js.map +1 -0
  39. package/dist/chunk-PWIAD2V5.js +34 -0
  40. package/dist/chunk-PWIAD2V5.js.map +1 -0
  41. package/dist/index.js +16 -5519
  42. package/dist/index.js.map +1 -1
  43. package/dist/server-http.d.ts +1 -0
  44. package/dist/server-http.js +4897 -0
  45. package/dist/server-http.js.map +1 -0
  46. package/dist/types-B6WPSLBE.js +7 -0
  47. package/dist/types-B6WPSLBE.js.map +1 -0
  48. package/dist/types-TNRLD2XO.js +107 -0
  49. package/dist/types-TNRLD2XO.js.map +1 -0
  50. package/docker-compose.dev.yml +55 -0
  51. package/docker-compose.yml +48 -0
  52. package/export_memories.mjs +68 -0
  53. package/package.json +20 -4
  54. package/railway.json +14 -0
  55. package/scripts/import-local-to-production.js +103 -0
  56. package/scripts/install-plugin.sh +618 -0
  57. package/scripts/uninstall-plugin.sh +182 -0
  58. package/tests/README.md +61 -33
  59. package/tests/__mocks__/storage-client.mock.ts +279 -0
  60. package/tests/test-relationships-vr.ts +122 -0
  61. package/tests/test-relationships.js +3 -3
  62. package/tests/test-runtime.js +16 -10
  63. package/tests/test-time-window-vr.ts +343 -0
  64. package/tests/test-time-window.js +1 -1
  65. package/tests/test-v1.5.0-simple.sh +17 -31
  66. package/tests/test-v1.5.0.js +6 -6
  67. package/tests/test-vr-v1.7.0.ts +510 -0
  68. package/vitest.config.ts +21 -0
  69. package/web/.eslintrc.json +3 -0
  70. package/web/next-env.d.ts +5 -0
  71. package/web/next.config.ts +11 -0
  72. package/web/package-lock.json +8056 -0
  73. package/web/package.json +39 -0
  74. package/web/postcss.config.mjs +9 -0
  75. package/web/tailwind.config.ts +72 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ "hooks": []
3
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/claude-code-hooks.json",
3
+ "hooks": {
4
+ "PostToolUse": [
5
+ {
6
+ "description": "Format TypeScript files with Prettier after writing",
7
+ "matcher": {
8
+ "tool": "Write",
9
+ "glob": "**/*.ts"
10
+ },
11
+ "command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
12
+ },
13
+ {
14
+ "description": "Format JSON files with Prettier after writing",
15
+ "matcher": {
16
+ "tool": "Write",
17
+ "glob": "**/*.json"
18
+ },
19
+ "command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
20
+ }
21
+ ],
22
+ "PostCommit": [
23
+ {
24
+ "description": "Run build verification after commits",
25
+ "command": "npm run build --silent"
26
+ }
27
+ ]
28
+ }
29
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm run build)",
5
+ "Bash(npm run test)",
6
+ "Bash(npm run dev)",
7
+ "Bash(git status)",
8
+ "Bash(git diff:*)",
9
+ "Bash(git log:*)",
10
+ "Bash(gh pr:*)",
11
+ "Bash(gh issue:*)"
12
+ ],
13
+ "deny": [],
14
+ "additionalDirectories": [
15
+ "/tmp"
16
+ ]
17
+ },
18
+ "enableAllProjectMcpServers": false,
19
+ "enabledMcpjsonServers": []
20
+ }
@@ -1,13 +1,55 @@
1
1
  {
2
2
  "permissions": {
3
3
  "allow": [
4
- "Bash(gh pr merge:*)",
5
- "Bash(npm publish:*)"
4
+ "Bash(gh pr merge *)",
5
+ "Bash(npm publish *)",
6
+ "Bash(gh release create *)",
7
+ "Bash(timeout 5 PORT=3333 REDIS_URL=redis://localhost:6379 npm run start:http:*)",
8
+ "Bash(echo:*)",
9
+ "Bash(REDIS_URL=redis://localhost:6379 OPENAI_API_KEY=test timeout:*)",
10
+ "Bash(REDIS_URL=redis://localhost:6379 OPENAI_API_KEY=test ANTHROPIC_API_KEY=test timeout 5 node dist/server-http.js)",
11
+ "Bash(railway:*)",
12
+ "Bash(RAILWAY_TOKEN=8d0f2331-d3e6-4592-a6d3-3fe713c509a7 railway logs:*)",
13
+ "Bash(RAILWAY_TOKEN=8d0f2331-d3e6-4592-a6d3-3fe713c509a7 railway service:*)",
14
+ "Bash(RAILWAY_TOKEN=8d0f2331-d3e6-4592-a6d3-3fe713c509a7 railway status:*)",
15
+ "Bash(RAILWAY_TOKEN=8d0f2331-d3e6-4592-a6d3-3fe713c509a7 railway redeploy:*)",
16
+ "Bash(RAILWAY_TOKEN=8d0f2331-d3e6-4592-a6d3-3fe713c509a7 railway domain:*)",
17
+ "mcp__memory__export_memories",
18
+ "mcp__memory__search_memories",
19
+ "Read(//private/tmp/**)",
20
+ "Read(//Users/joseairosa/.railway/**)",
21
+ "Read(//Users/joseairosa/Development/**)",
22
+ "Read(//tmp/claude-code/plugins/hookify/hooks/**)",
23
+ "Read(//private/tmp/claude-code/plugins/hookify/hooks/**)",
24
+ "Read(//tmp/claude-code/plugins/plugin-dev/skills/hook-development/**)",
25
+ "Read(//private/tmp/claude-code/plugins/plugin-dev/skills/hook-development/**)",
26
+ "Read(//tmp/claude-code/**)",
27
+ "Read(//private/tmp/claude-code/**)",
28
+ "Bash(chmod:*)",
29
+ "Read(//Users/joseairosa/.claude/**)",
30
+ "Bash(# Check if there''s a skills directory format needed ls ~/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/stripe/skills/ cat ~/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/stripe/commands/account-info.md)",
31
+ "mcp__recall-remote__summarize_session",
32
+ "Bash(while read key)",
33
+ "Bash(do echo \"=== $key ===\")",
34
+ "Bash(done)",
35
+ "Read(//Users/joseairosa/**)",
36
+ "Bash(gh run view:*)",
37
+ "Bash(gh run list:*)",
38
+ "Bash(xargs -I {} git push origin --delete {})",
39
+ "Read(//Users/joseairosa/Development/mcp/mem/**)",
40
+ "Bash(find:*)"
6
41
  ],
7
42
  "deny": [],
8
- "ask": []
43
+ "ask": [],
44
+ "additionalDirectories": [
45
+ "/Users/joseairosa/Development/mcp/mem/web/src/app",
46
+ "/Users/joseairosa/Development/mcp/mem/web/src/app/sign-in",
47
+ "/Users/joseairosa/Development/mcp/mem/web/src/app/sign-up/[[...sign-up]]",
48
+ "/tmp",
49
+ "/Users/joseairosa/Development/mcp/mem",
50
+ "/Users/joseairosa/Development/mcp/recallmcp.com"
51
+ ]
9
52
  },
10
- "enabledMcpjsonServers": [
11
- "memory"
12
- ]
53
+ "enableAllProjectMcpServers": false,
54
+ "enabledMcpjsonServers": []
13
55
  }
@@ -0,0 +1,29 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "lastUpdated": "2026-01-16T00:00:00Z",
4
+ "tasks": [],
5
+ "completed": [
6
+ {
7
+ "task": "Setup Boris-style slash commands",
8
+ "completedAt": "2026-01-16",
9
+ "files": [
10
+ ".claude/commands/init.md",
11
+ ".claude/commands/commit-push-pr.md",
12
+ ".claude/commands/verify-app.md",
13
+ ".claude/commands/code-simplifier.md",
14
+ ".claude/commands/review-pr.md"
15
+ ]
16
+ },
17
+ {
18
+ "task": "Setup PostToolUse hooks for code formatting",
19
+ "completedAt": "2026-01-16",
20
+ "files": [".claude/hooks.json"]
21
+ },
22
+ {
23
+ "task": "Create shareable team settings",
24
+ "completedAt": "2026-01-16",
25
+ "files": [".claude/settings.json"]
26
+ }
27
+ ],
28
+ "notes": "Task tracking for Recall MCP Server development. Keep this updated during work sessions."
29
+ }
package/.env.example CHANGED
@@ -1,5 +1,41 @@
1
- # Redis connection string
1
+ # Redis/Valkey connection string
2
2
  REDIS_URL=redis://localhost:6379
3
3
 
4
- # Anthropic API key for semantic embeddings
5
- ANTHROPIC_API_KEY=sk-ant-your-api-key-here
4
+ # Embedding Provider API Keys (at least one required)
5
+ # Priority: Voyage > Cohere > OpenAI > DeepSeek > Grok > Anthropic
6
+ VOYAGE_API_KEY=
7
+ COHERE_API_KEY=
8
+ OPENAI_API_KEY=
9
+ DEEPSEEK_API_KEY=
10
+ GROK_API_KEY=
11
+ ANTHROPIC_API_KEY=
12
+
13
+ # Admin secret for creating API keys via POST /api/keys
14
+ # Leave empty to allow unauthenticated key creation (not recommended for production)
15
+ ADMIN_SECRET=
16
+
17
+ # Server configuration
18
+ PORT=8080
19
+ NODE_ENV=production
20
+
21
+ # Stripe billing (for SaaS)
22
+ STRIPE_SECRET_KEY=
23
+ STRIPE_WEBHOOK_SECRET=
24
+ STRIPE_PRICE_PRO=
25
+ STRIPE_PRICE_TEAM=
26
+
27
+ # Firebase Admin (for authentication)
28
+ GOOGLE_APPLICATION_CREDENTIALS=
29
+ FIREBASE_PROJECT_ID=
30
+
31
+ # Web app Firebase config (NEXT_PUBLIC_ prefix for client-side)
32
+ NEXT_PUBLIC_FIREBASE_API_KEY=
33
+ NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=
34
+ NEXT_PUBLIC_FIREBASE_PROJECT_ID=
35
+ NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
36
+ NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
37
+ NEXT_PUBLIC_FIREBASE_APP_ID=
38
+ NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=
39
+
40
+ # API URL for web app
41
+ NEXT_PUBLIC_API_URL=http://localhost:8080
@@ -0,0 +1,36 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Checkout
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Setup Node.js
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: '20'
21
+ cache: 'npm'
22
+
23
+ - name: Install dependencies
24
+ run: npm ci --ignore-scripts
25
+
26
+ - name: Type check
27
+ run: npx tsc --noEmit
28
+
29
+ - name: Build
30
+ run: npm run build
31
+
32
+ - name: Verify build output
33
+ run: |
34
+ test -f dist/index.js || (echo "dist/index.js not found" && exit 1)
35
+ test -f dist/server-http.js || (echo "dist/server-http.js not found" && exit 1)
36
+ echo "Build verification passed"
package/.mcp.json CHANGED
@@ -1,14 +1,3 @@
1
1
  {
2
- "mcpServers": {
3
- "memory": {
4
- "command": "node",
5
- "args": [
6
- "/Users/joseairosa/Development/mcp/mem/dist/index.js"
7
- ],
8
- "env": {
9
- "REDIS_URL": "redis://localhost:6379",
10
- "ANTHROPIC_API_KEY": "YOUR_ANTHROPIC_API_KEY_HERE"
11
- }
12
- }
13
- }
14
- }
2
+ "mcpServers": {}
3
+ }
package/CHANGELOG.md CHANGED
@@ -7,6 +7,73 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [1.8.2] - 2026-01-20
11
+
12
+ ### Added
13
+
14
+ - **RLM (Recursive Language Model) Tools** - Process content larger than context windows
15
+ - `create_execution_context` - Store large content for processing
16
+ - `decompose_task` - Break into subtasks (filter/chunk/recursive/aggregate)
17
+ - `inject_context_snippet` - Extract relevant portions
18
+ - `update_subtask_result` - Store results
19
+ - `merge_results` - Combine subtask results
20
+ - `verify_answer` - Cross-check against source
21
+ - `should_use_rlm` - Check if RLM is needed for content size
22
+ - `get_execution_status` - Get chain progress
23
+
24
+ - **Search Output Modes** - Context efficiency (v1.8.1)
25
+ - `output_mode` parameter: `full`, `summary`, `compact`
26
+ - Reduces context usage for large result sets
27
+
28
+ - **Multi-Provider Embedding Support**
29
+ - Voyage AI (recommended for quality)
30
+ - Cohere (multilingual)
31
+ - OpenAI / Deepseek / Grok
32
+ - Anthropic (keyword fallback)
33
+ - Ollama (local inference)
34
+ - Auto-detection based on available API keys
35
+
36
+ - **New Prompts**
37
+ - `session_management` - For long work sessions
38
+ - `rlm_workflow` - Automatic RLM distribution
39
+
40
+ - **MemoryStore Improvements**
41
+ - `clearWorkspace()` - Delete all memories in workspace
42
+
43
+ ### Fixed
44
+
45
+ - StorageClient interface: Added missing `hget` and `hdel` methods
46
+ - TypeScript type errors for CI build
47
+
48
+ ### Tool Count
49
+ - **40+ tools** (was 28 in v1.6.0)
50
+
51
+ ---
52
+
53
+ ## [1.7.0] - 2025-12-03
54
+
55
+ ### Added
56
+
57
+ - **Valkey Support** - Now supports Valkey as an alternative backend to Redis
58
+ - New `BACKEND_TYPE` environment variable to select backend (`redis` or `valkey`)
59
+ - `VALKEY_HOST` and `VALKEY_PORT` configuration options
60
+ - Uses `@valkey/valkey-glide` client for Valkey connections
61
+ - Full feature parity with Redis backend
62
+
63
+ ### Changed
64
+
65
+ - **Architecture Refactor** - Introduced storage abstraction layer
66
+ - New `StorageClient` interface for backend-agnostic storage operations
67
+ - `RedisAdapter` and `ValkeyAdapter` implement the common interface
68
+ - Factory pattern (`createStorageClient`) for backend selection
69
+ - Moved persistence code to `src/persistence/` directory
70
+
71
+ ### Fixed
72
+
73
+ - Ported JavaScript tests to TypeScript for better type safety
74
+
75
+ ---
76
+
10
77
  ## [1.6.0] - 2025-10-04
11
78
 
12
79
  ### Added