- Move sseAbortController/connectionState from module globals into closure for multi-instance safety - Make start() idempotent by aborting existing connection before creating a new one - Track connectionPromise and await it on stop() for proper cleanup - Guard channel API access lazily to prevent crash when integrations are missing - Add 1MB MAX_SSE_BUFFER_SIZE to prevent unbounded buffer growth - Log malformed JSON parse errors instead of silently ignoring - Replace error: any with proper instanceof Error type narrowing - Remove hardcoded user paths from TESTING.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.5 KiB
OpenClaw Claude-Mem Plugin — Manual E2E Testing Checklist
This document covers end-to-end verification of the OpenClaw claude-mem plugin. It assumes you have a working OpenClaw gateway and a running claude-mem worker.
Prerequisites
- OpenClaw gateway installed and configured
- Claude-Mem worker running on port 37777 (default)
- Plugin built:
cd openclaw && npm run build - Plugin registered in
~/.openclaw/openclaw.json
1. Verify the Claude-Mem Worker
# Health check — should return {"status":"ok"}
curl -s http://localhost:37777/health
# Verify SSE stream is active (will print events for ~3 seconds then exit)
curl -s -N http://localhost:37777/stream --max-time 3 2>/dev/null || true
Expected: Health returns {"status":"ok"}. SSE stream emits at least a connected event.
If the worker is not running:
cd /path/to/claude-mem
npm run build-and-sync
Then re-check health.
2. Verify Plugin Configuration
Check that ~/.openclaw/openclaw.json has the plugin entry:
cat ~/.openclaw/openclaw.json
Expected structure (inside plugins.entries):
{
"claude-mem": {
"enabled": true,
"source": "/path/to/claude-mem/openclaw",
"config": {
"syncMemoryFile": true,
"workerPort": 37777,
"observationFeed": {
"enabled": true,
"channel": "telegram",
"to": "YOUR_CHAT_ID"
}
}
}
}
Key fields:
observationFeed.enabledmust betrueobservationFeed.channelmust match a supported channel:telegram,discord,signal,slack,whatsapp,lineobservationFeed.tomust be the target chat/user/channel ID for the chosen channel
3. Restart the OpenClaw Gateway
After any config change, restart the gateway so it picks up the new plugin config:
openclaw restart
# or, depending on your setup:
openclaw gateway stop && openclaw gateway start
Look for in gateway logs:
[claude-mem] OpenClaw plugin loaded — v1.0.0[claude-mem] Observation feed starting — channel: telegram, target: ...[claude-mem] Connecting to SSE stream at http://localhost:37777/stream[claude-mem] Connected to SSE stream
4. Trigger an Observation
Start a Claude Code session with claude-mem enabled:
claude
Perform any action that generates an observation (e.g., read a file, make a search, write code). The claude-mem worker will emit a new_observation SSE event.
5. Verify Message Delivery
Check the target messaging channel (e.g., Telegram) for a message formatted as:
🧠 Claude-Mem Observation
**Observation Title**
Optional subtitle
Expected: Within a few seconds of the observation being saved, a message appears in the configured channel.
6. Run Automated Tests
cd openclaw
# Full test suite (compiles TypeScript then runs tests)
npm test
# Smoke test (registration check only, requires prior build)
node test-sse-consumer.js
Expected: All 17 tests pass. Smoke test prints PASS: Plugin registers service and command correctly.
Troubleshooting
Worker not running
- Symptom: Gateway logs show
SSE stream error: fetch failed. Reconnecting in 1s - Fix: Start the worker with
cd /path/to/claude-mem && npm run build-and-sync
Port mismatch
- Symptom: SSE connection fails even though worker health check passes
- Fix: Ensure
workerPortin plugin config matches the worker's actual port (default: 37777). Check~/.claude-mem/settings.jsonfor the worker port setting.
Channel not configured
- Symptom: Gateway logs show
[claude-mem] Observation feed misconfigured — channel or target missing - Fix: Add both
channelandtofields toobservationFeedin plugin config. Restart the gateway.
Unknown channel type
- Symptom: Gateway logs show
[claude-mem] Unknown channel type: <name> - Fix: Use one of the supported channels:
telegram,discord,signal,slack,whatsapp,line
Feed disabled
- Symptom: Gateway logs show
[claude-mem] Observation feed disabled - Fix: Set
observationFeed.enabledtotruein plugin config. Restart the gateway.
Messages not arriving
- Symptom: SSE connected, observations flowing, but no messages in chat
- Fix:
- Verify the bot/integration is properly configured in the target channel
- Check the target ID (
to) is correct for the channel type - Look for
[claude-mem] Failed to send to <channel>: ...in gateway logs - Test the channel directly through the OpenClaw gateway's channel testing tools