claude-recall 0.20.3 → 0.20.4

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.
@@ -8,7 +8,7 @@ source: claude-recall
8
8
 
9
9
  # Corrections
10
10
 
11
- Auto-generated from 10 memories. Last updated: 2026-04-02.
11
+ Auto-generated from 11 memories. Last updated: 2026-04-02.
12
12
 
13
13
  ## Rules
14
14
 
@@ -20,6 +20,7 @@ Auto-generated from 10 memories. Last updated: 2026-04-02.
20
20
  - CORRECTION: Memory with complex metadata
21
21
  - CORRECTION: Memory with complex metadata
22
22
  - CORRECTION: Memory with complex metadata
23
+ - CORRECTION: Memory with complex metadata
23
24
  - CORRECTION: License copyright should include user's name instead of 'Claude Recall Contributors'
24
25
  - CORRECTION: License copyright should list your name instead of 'Claude Recall Contributors'
25
26
 
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "topicId": "corrections",
3
- "sourceHash": "07b8f6a7f77482f9cf1dc02ae46a52bf39ce1920188d0142c2391dca2790f7c9",
4
- "memoryCount": 10,
5
- "generatedAt": "2026-04-02T22:40:39.113Z",
3
+ "sourceHash": "5c1daafe3680229de9578ac9662cfe0bf88f182ba021c3c6a3f6bbf5271952af",
4
+ "memoryCount": 11,
5
+ "generatedAt": "2026-04-02T22:41:44.657Z",
6
6
  "memoryKeys": [
7
+ "memory_1775169704632_wzwczltzu",
7
8
  "memory_1775169639101_rmxkftqtk",
8
9
  "memory_1775169273281_4fod7ku6f",
9
10
  "memory_1775169256118_y7kc07y6y",
@@ -8,10 +8,15 @@ source: claude-recall
8
8
 
9
9
  # Preferences
10
10
 
11
- Auto-generated from 44 memories. Last updated: 2026-04-02.
11
+ Auto-generated from 49 memories. Last updated: 2026-04-02.
12
12
 
13
13
  ## Rules
14
14
 
15
+ - Session test preference 1775169704849
16
+ - Test preference 1775169704668-2
17
+ - Test preference 1775169704668-1
18
+ - Test preference 1775169704668-0
19
+ - Test memory content
15
20
  - Session test preference 1775169639212
16
21
  - Test preference 1775169639121-2
17
22
  - Test preference 1775169639121-1
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "topicId": "preferences",
3
- "sourceHash": "635f364634c1a9d7b4f550114bcc69d1b222abef09952268bb356f4499d336e7",
4
- "memoryCount": 44,
5
- "generatedAt": "2026-04-02T22:40:39.234Z",
3
+ "sourceHash": "d1432e49e98d6e35259821bf6ebfbcc069c3a7ff9ec78618c660c979a7337842",
4
+ "memoryCount": 49,
5
+ "generatedAt": "2026-04-02T22:41:44.902Z",
6
6
  "memoryKeys": [
7
+ "memory_1775169704852_ezdebznpz",
8
+ "memory_1775169704771_ak9vkaswc",
9
+ "memory_1775169704739_dg78h7lte",
10
+ "memory_1775169704670_f1yhtrmsz",
11
+ "memory_1775169704515_lby33vw9c",
7
12
  "memory_1775169639213_w3i85h357",
8
13
  "memory_1775169639170_iewh2evi0",
9
14
  "memory_1775169639145_x9s0519l7",
@@ -111,15 +111,18 @@ function default_1(pi) {
111
111
  .filter((c) => c.type === 'text')
112
112
  .map(c => c.text)
113
113
  .join('\n');
114
- // Notify user when a failure is captured
115
- const wasFailing = event.isError || isFailureOutput(event.toolName, output);
116
- (0, event_processors_1.processToolOutcome)(event.toolName, event.input, output, event.isError, sessionId);
117
- if (wasFailing && ctx.hasUI) {
114
+ const result = (0, event_processors_1.processToolOutcome)(event.toolName, event.input, output, event.isError, sessionId);
115
+ if (ctx.hasUI) {
118
116
  const label = event.input?.command
119
117
  ? truncateStr(event.input.command, 40)
120
118
  : event.toolName;
121
119
  try {
122
- ctx.ui.notify(`Recall: failure stored — ${label}`, 'info');
120
+ if (result.captured) {
121
+ ctx.ui.notify(`Recall: failure stored — ${label}`, 'info');
122
+ }
123
+ else if (result.fixPaired) {
124
+ ctx.ui.notify(`Recall: fix paired — ${label} (learned from previous failure)`, 'info');
125
+ }
123
126
  }
124
127
  catch { /* non-critical */ }
125
128
  }
@@ -140,18 +140,20 @@ function firstLine(s) {
140
140
  * Works for any tool type (Bash, Edit, Write, MCP, generic).
141
141
  */
142
142
  function processToolOutcome(toolName, toolInput, toolOutput, isError, sessionId) {
143
+ const result = { captured: false, fixPaired: false };
143
144
  try {
144
145
  // Skip own tools
145
146
  if (toolName.includes('claude-recall') || toolName.includes('claude_recall') ||
146
147
  toolName.startsWith('recall_'))
147
- return;
148
+ return result;
148
149
  const isFail = isError || isToolFailureOutput(toolName, toolOutput);
149
150
  if (isFail) {
150
151
  storeToolFailure(toolName, toolInput, toolOutput, sessionId);
152
+ result.captured = true;
151
153
  }
152
154
  else {
153
155
  // Success — check if this fixes a recent failure
154
- tryPairFix(toolName, toolInput, toolOutput);
156
+ result.fixPaired = tryPairFix(toolName, toolInput, toolOutput);
155
157
  }
156
158
  // Record outcome event for all tools
157
159
  recordOutcomeEvent(toolName, toolInput, toolOutput);
@@ -159,6 +161,7 @@ function processToolOutcome(toolName, toolInput, toolOutput, isError, sessionId)
159
161
  catch (err) {
160
162
  logFn('event-processor', `processToolOutcome error: ${(0, shared_1.safeErrorMessage)(err)}`);
161
163
  }
164
+ return result;
162
165
  }
163
166
  function isToolFailureOutput(toolName, output) {
164
167
  if (toolName === 'Bash' || toolName === 'bash') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-recall",
3
- "version": "0.20.3",
3
+ "version": "0.20.4",
4
4
  "description": "Persistent memory for Claude Code and Pi with native Skills integration, automatic capture, failure learning, and project scoping",
5
5
  "main": "dist/index.js",
6
6
  "bin": {