jasper-recall 0.3.4 → 0.3.6

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/SKILL.md CHANGED
@@ -35,6 +35,29 @@ This creates:
35
35
  - Python venv at `~/.openclaw/rag-env`
36
36
  - ChromaDB database at `~/.openclaw/chroma-db`
37
37
  - CLI scripts in `~/.local/bin/`
38
+ - OpenClaw plugin config in `openclaw.json`
39
+
40
+ ### Why Python?
41
+
42
+ The core search and embedding functionality uses Python libraries:
43
+
44
+ - **ChromaDB** — Vector database for semantic search
45
+ - **sentence-transformers** — Local embedding models (no API needed)
46
+
47
+ These are the gold standard for local RAG. There are no good Node.js equivalents that work fully offline.
48
+
49
+ ### Why a Separate Venv?
50
+
51
+ The venv at `~/.openclaw/rag-env` provides:
52
+
53
+ | Benefit | Why It Matters |
54
+ |---------|----------------|
55
+ | **Isolation** | Won't conflict with your other Python projects |
56
+ | **No sudo** | Installs to your home directory, no root needed |
57
+ | **Clean uninstall** | Delete the folder and it's gone |
58
+ | **Reproducibility** | Same versions everywhere |
59
+
60
+ The dependencies are heavy (~200MB total with the embedding model), but this is a one-time download that runs entirely locally.
38
61
 
39
62
  ### Basic Usage
40
63
 
@@ -313,6 +336,14 @@ When `autoRecall: true` in the OpenClaw plugin config, memories are automaticall
313
336
  - Review which collections will be searched
314
337
  - Use `minScore` to filter low-relevance injections
315
338
 
339
+ **What's automatically skipped (no recall triggered):**
340
+ - Heartbeat polls (`HEARTBEAT`, `Read HEARTBEAT.md`, `HEARTBEAT_OK`)
341
+ - Messages containing `NO_REPLY`
342
+ - Messages < 10 characters
343
+ - Agent-to-agent messages (cron jobs, workers, spawned agents)
344
+ - Automated reports (`📋 PR Review`, `🤖 Codex Watch`, `ANNOUNCE_*`)
345
+ - Messages from senders starting with `agent:` or `worker-`
346
+
316
347
  **Safer config for untrusted contexts:**
317
348
  ```json
318
349
  "jasper-recall": {
@@ -81,14 +81,37 @@ export default function register(api: PluginApi) {
81
81
  // ============================================================================
82
82
 
83
83
  if (autoRecall) {
84
- api.on('before_agent_start', async (event: { prompt?: string }) => {
84
+ api.on('before_agent_start', async (event: { prompt?: string; senderId?: string; source?: string }) => {
85
85
  // Skip if no prompt or too short
86
86
  if (!event.prompt || event.prompt.length < 10) {
87
87
  return;
88
88
  }
89
89
 
90
- // Skip system/internal prompts
91
- if (event.prompt.startsWith('HEARTBEAT') || event.prompt.includes('NO_REPLY')) {
90
+ const prompt = event.prompt;
91
+
92
+ // Skip heartbeats and system prompts
93
+ if (prompt.startsWith('HEARTBEAT') ||
94
+ prompt.startsWith('Read HEARTBEAT.md') ||
95
+ prompt.includes('NO_REPLY') ||
96
+ prompt.includes('HEARTBEAT_OK')) {
97
+ return;
98
+ }
99
+
100
+ // Skip agent-to-agent messages (cron jobs, workers, spawned agents)
101
+ if (event.source?.startsWith('cron:') ||
102
+ event.source?.startsWith('agent:') ||
103
+ event.source?.startsWith('spawn:') ||
104
+ event.source === 'sessions_send' ||
105
+ event.senderId?.startsWith('agent:') ||
106
+ event.senderId?.startsWith('worker-')) {
107
+ return;
108
+ }
109
+
110
+ // Skip common automated patterns
111
+ if (prompt.startsWith('Agent-to-agent') ||
112
+ prompt.startsWith('📋 PR Review') ||
113
+ prompt.startsWith('🤖 Codex Watch') ||
114
+ prompt.startsWith('ANNOUNCE_')) {
92
115
  return;
93
116
  }
94
117
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jasper-recall",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Local RAG system for AI agent memory using ChromaDB and sentence-transformers",
5
5
  "main": "src/index.js",
6
6
  "bin": {