claude-recall 0.20.2 → 0.20.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.
@@ -8,7 +8,7 @@ source: claude-recall
8
8
 
9
9
  # Corrections
10
10
 
11
- Auto-generated from 9 memories. Last updated: 2026-04-02.
11
+ Auto-generated from 10 memories. Last updated: 2026-04-02.
12
12
 
13
13
  ## Rules
14
14
 
@@ -19,6 +19,7 @@ Auto-generated from 9 memories. Last updated: 2026-04-02.
19
19
  - CORRECTION: Memory with complex metadata
20
20
  - CORRECTION: Memory with complex metadata
21
21
  - CORRECTION: Memory with complex metadata
22
+ - CORRECTION: Memory with complex metadata
22
23
  - CORRECTION: License copyright should include user's name instead of 'Claude Recall Contributors'
23
24
  - CORRECTION: License copyright should list your name instead of 'Claude Recall Contributors'
24
25
 
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "topicId": "corrections",
3
- "sourceHash": "bc99031d99dbd5f9baeff51cd1b1d609f0a231dc120f5559a98080419ba54be6",
4
- "memoryCount": 9,
5
- "generatedAt": "2026-04-02T22:34:33.293Z",
3
+ "sourceHash": "07b8f6a7f77482f9cf1dc02ae46a52bf39ce1920188d0142c2391dca2790f7c9",
4
+ "memoryCount": 10,
5
+ "generatedAt": "2026-04-02T22:40:39.113Z",
6
6
  "memoryKeys": [
7
+ "memory_1775169639101_rmxkftqtk",
7
8
  "memory_1775169273281_4fod7ku6f",
8
9
  "memory_1775169256118_y7kc07y6y",
9
10
  "memory_1775169244673_d6d0uc33a",
@@ -8,10 +8,15 @@ source: claude-recall
8
8
 
9
9
  # Preferences
10
10
 
11
- Auto-generated from 39 memories. Last updated: 2026-04-02.
11
+ Auto-generated from 44 memories. Last updated: 2026-04-02.
12
12
 
13
13
  ## Rules
14
14
 
15
+ - Session test preference 1775169639212
16
+ - Test preference 1775169639121-2
17
+ - Test preference 1775169639121-1
18
+ - Test preference 1775169639121-0
19
+ - Test memory content
15
20
  - Session test preference 1775169273366
16
21
  - Test preference 1775169273296-2
17
22
  - Test preference 1775169273296-1
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "topicId": "preferences",
3
- "sourceHash": "d609433b68eba6dbfaea5244e666c564e76ad1be0f75373c555fdd83405390cd",
4
- "memoryCount": 39,
5
- "generatedAt": "2026-04-02T22:34:33.383Z",
3
+ "sourceHash": "635f364634c1a9d7b4f550114bcc69d1b222abef09952268bb356f4499d336e7",
4
+ "memoryCount": 44,
5
+ "generatedAt": "2026-04-02T22:40:39.234Z",
6
6
  "memoryKeys": [
7
+ "memory_1775169639213_w3i85h357",
8
+ "memory_1775169639170_iewh2evi0",
9
+ "memory_1775169639145_x9s0519l7",
10
+ "memory_1775169639123_fa53agp0a",
11
+ "memory_1775169639037_f290kffwd",
7
12
  "memory_1775169273368_c1e5jdl9r",
8
13
  "memory_1775169273337_wozxe12k3",
9
14
  "memory_1775169273319_3o1ww90na",
@@ -19,6 +19,22 @@ const LOAD_RULES_DIRECTIVE = 'Before your FIRST action, briefly state which rule
19
19
  '(applied from memory: <short rule name>)\n' +
20
20
  'Place citations next to the action they influenced — not at the end of unrelated text.\n' +
21
21
  'If a rule conflicts with your plan, follow the rule — it reflects a user decision.';
22
+ function truncateStr(s, max) {
23
+ return s.length <= max ? s : s.substring(0, max - 3) + '...';
24
+ }
25
+ /** Check if tool output indicates a failure (mirrors event-processors logic). */
26
+ function isFailureOutput(toolName, output) {
27
+ if (toolName === 'bash' || toolName === 'Bash') {
28
+ return /Exit code (\d+)/.test(output) && !/Exit code 0/.test(output);
29
+ }
30
+ if (['edit', 'write', 'Edit', 'Write'].includes(toolName)) {
31
+ return /permission denied|EACCES|ENOENT|file not found|old_string.*not found|not unique in the file/i.test(output);
32
+ }
33
+ if (output.length < 500) {
34
+ return /error|failed|exception|timeout/i.test(output);
35
+ }
36
+ return false;
37
+ }
22
38
  /** Format a memory value for display. */
23
39
  function extractVal(value) {
24
40
  if (typeof value === 'string')
@@ -90,12 +106,23 @@ function default_1(pi) {
90
106
  }
91
107
  });
92
108
  // --- Event: capture tool outcomes ---
93
- pi.on('tool_result', (event, _ctx) => {
109
+ pi.on('tool_result', (event, ctx) => {
94
110
  const output = event.content
95
111
  .filter((c) => c.type === 'text')
96
112
  .map(c => c.text)
97
113
  .join('\n');
114
+ // Notify user when a failure is captured
115
+ const wasFailing = event.isError || isFailureOutput(event.toolName, output);
98
116
  (0, event_processors_1.processToolOutcome)(event.toolName, event.input, output, event.isError, sessionId);
117
+ if (wasFailing && ctx.hasUI) {
118
+ const label = event.input?.command
119
+ ? truncateStr(event.input.command, 40)
120
+ : event.toolName;
121
+ try {
122
+ ctx.ui.notify(`Recall: failure stored — ${label}`, 'info');
123
+ }
124
+ catch { /* non-critical */ }
125
+ }
99
126
  });
100
127
  // --- Event: detect corrections from user input ---
101
128
  pi.on('input', (event, _ctx) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-recall",
3
- "version": "0.20.2",
3
+ "version": "0.20.3",
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": {