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 +31 -0
- package/extensions/openclaw-plugin/index.ts +26 -3
- package/package.json +1 -1
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
|
-
|
|
91
|
-
|
|
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
|
|