Refactor worker commands from npm scripts to claude-mem CLI

- Updated all instances of `npm run worker:restart` to `claude-mem restart` in documentation and code comments for consistency.
- Modified error messages and logging to reflect the new command structure.
- Adjusted worker management commands in various troubleshooting documents.
- Changed the worker status check message to guide users towards the new command.
This commit is contained in:
Alex Newman
2025-12-20 17:16:20 -05:00
parent e27f8e4963
commit 5ce656037e
31 changed files with 130 additions and 156 deletions
+1 -1
View File
@@ -396,7 +396,7 @@ If you're experiencing issues, describe the problem to Claude and the troublesho
**Common Issues:** **Common Issues:**
- Worker not starting → `npm run worker:restart` - Worker not starting → `claude-mem restart`
- No context appearing → `npm run test:context` - No context appearing → `npm run test:context`
- Database issues → `sqlite3 ~/.claude-mem/claude-mem.db "PRAGMA integrity_check;"` - Database issues → `sqlite3 ~/.claude-mem/claude-mem.db "PRAGMA integrity_check;"`
- Search not working → Check FTS5 tables exist - Search not working → Check FTS5 tables exist
@@ -106,7 +106,7 @@ pm2 logs claude-mem-worker # View logs
```bash ```bash
npm run worker:start # Start worker npm run worker:start # Start worker
npm run worker:stop # Stop worker npm run worker:stop # Stop worker
npm run worker:restart # Restart worker claude-mem restart # Restart worker
npm run worker:status # Check status npm run worker:status # Check status
npm run worker:logs # View logs npm run worker:logs # View logs
``` ```
@@ -305,7 +305,7 @@ No migration logic runs on subsequent sessions.
| `pm2 list` | `npm run worker:status` | Shows worker status | | `pm2 list` | `npm run worker:status` | Shows worker status |
| `pm2 start <script>` | `npm run worker:start` | Start worker | | `pm2 start <script>` | `npm run worker:start` | Start worker |
| `pm2 stop claude-mem-worker` | `npm run worker:stop` | Stop worker | | `pm2 stop claude-mem-worker` | `npm run worker:stop` | Stop worker |
| `pm2 restart claude-mem-worker` | `npm run worker:restart` | Restart worker | | `pm2 restart claude-mem-worker` | `claude-mem restart` | Restart worker |
| `pm2 delete claude-mem-worker` | `npm run worker:stop` | Remove worker | | `pm2 delete claude-mem-worker` | `npm run worker:stop` | Remove worker |
| `pm2 logs claude-mem-worker` | `npm run worker:logs` | View logs | | `pm2 logs claude-mem-worker` | `npm run worker:logs` | View logs |
| `pm2 describe claude-mem-worker` | `npm run worker:status` | Detailed status | | `pm2 describe claude-mem-worker` | `npm run worker:status` | Detailed status |
@@ -451,7 +451,7 @@ pm2 save # Persist the deletion
rm ~/.claude-mem/.pm2-migrated rm ~/.claude-mem/.pm2-migrated
# Restart worker # Restart worker
npm run worker:restart claude-mem restart
``` ```
### Scenario 2: Stale PID File (Process Dead) ### Scenario 2: Stale PID File (Process Dead)
@@ -483,7 +483,7 @@ lsof -i :37777
kill -9 <PID> kill -9 <PID>
# Restart worker # Restart worker
npm run worker:restart claude-mem restart
``` ```
### Common Error Messages ### Common Error Messages
@@ -416,7 +416,7 @@ If searches fail, check worker service:
```bash ```bash
npm run worker:status # Check status npm run worker:status # Check status
npm run worker:restart # Restart worker claude-mem restart # Restart worker
npm run worker:logs # View logs npm run worker:logs # View logs
``` ```
+1 -1
View File
@@ -500,7 +500,7 @@ npm run worker:start
npm run worker:stop npm run worker:stop
# Restart worker # Restart worker
npm run worker:restart claude-mem restart
# View logs # View logs
npm run worker:logs npm run worker:logs
+5 -5
View File
@@ -316,7 +316,7 @@ Edit `~/.claude-mem/settings.json`:
Then restart the worker: Then restart the worker:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
### Custom Model ### Custom Model
@@ -331,7 +331,7 @@ Edit `~/.claude-mem/settings.json`:
Then restart the worker: Then restart the worker:
```bash ```bash
export CLAUDE_MEM_MODEL=opus export CLAUDE_MEM_MODEL=opus
npm run worker:restart claude-mem restart
``` ```
### Custom Skip Tools ### Custom Skip Tools
@@ -388,7 +388,7 @@ Enable debug logging:
```bash ```bash
export DEBUG=claude-mem:* export DEBUG=claude-mem:*
npm run worker:restart claude-mem restart
npm run worker:logs npm run worker:logs
``` ```
@@ -406,7 +406,7 @@ npm run worker:logs
1. Restart worker after changes: 1. Restart worker after changes:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
2. Verify environment variables: 2. Verify environment variables:
@@ -440,7 +440,7 @@ If port 37777 is already in use:
2. Restart worker: 2. Restart worker:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
3. Verify new port: 3. Verify new port:
+2 -2
View File
@@ -165,7 +165,7 @@ npm run build
1. Make changes to React components in `src/ui/viewer/` 1. Make changes to React components in `src/ui/viewer/`
2. Build: `npm run build` 2. Build: `npm run build`
3. Sync to installed plugin: `npm run sync-marketplace` 3. Sync to installed plugin: `npm run sync-marketplace`
4. Restart worker: `npm run worker:restart` 4. Restart worker: `claude-mem restart`
5. Refresh browser at http://localhost:37777 5. Refresh browser at http://localhost:37777
**Hot Reload**: Not currently supported. Full rebuild + restart required for changes. **Hot Reload**: Not currently supported. Full rebuild + restart required for changes.
@@ -456,7 +456,7 @@ export async function createObservation(
```bash ```bash
export DEBUG=claude-mem:* export DEBUG=claude-mem:*
npm run worker:restart claude-mem restart
npm run worker:logs npm run worker:logs
``` ```
+2 -2
View File
@@ -94,7 +94,7 @@ git checkout beta/endless-mode
npm install npm install
# Restart the worker # Restart the worker
npm run worker:restart claude-mem restart
``` ```
**To return to stable:** **To return to stable:**
@@ -103,7 +103,7 @@ npm run worker:restart
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
git checkout main git checkout main
npm install npm install
npm run worker:restart claude-mem restart
``` ```
## Summary ## Summary
+1 -1
View File
@@ -534,7 +534,7 @@ npm run worker:status
npm run worker:logs npm run worker:logs
# Restart # Restart
npm run worker:restart claude-mem restart
# Stop # Stop
npm run worker:stop npm run worker:stop
+1 -1
View File
@@ -57,7 +57,7 @@ CLAUDE_MEM_PYTHON_VERSION=3.13 # Python version for chroma-mcp
```bash ```bash
npm run build # Compile TypeScript (hooks + worker) npm run build # Compile TypeScript (hooks + worker)
npm run sync-marketplace # Copy to ~/.claude/plugins npm run sync-marketplace # Copy to ~/.claude/plugins
npm run worker:restart # Restart worker claude-mem restart # Restart worker
npm run worker:logs # View worker logs npm run worker:logs # View worker logs
npm run worker:status # Check worker status npm run worker:status # Check worker status
``` ```
+8 -8
View File
@@ -48,14 +48,14 @@ The skill includes comprehensive diagnostics, automated repair sequences, and de
4. Restart worker service: 4. Restart worker service:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
5. Check for port conflicts: 5. Check for port conflicts:
```bash ```bash
# If port 37777 is in use by another service # If port 37777 is in use by another service
export CLAUDE_MEM_WORKER_PORT=38000 export CLAUDE_MEM_WORKER_PORT=38000
npm run worker:restart claude-mem restart
``` ```
### Theme Toggle Not Persisting ### Theme Toggle Not Persisting
@@ -110,7 +110,7 @@ The skill includes comprehensive diagnostics, automated repair sequences, and de
5. Restart worker and refresh browser: 5. Restart worker and refresh browser:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
### Chroma/Python Dependency Issues (v5.0.0+) ### Chroma/Python Dependency Issues (v5.0.0+)
@@ -225,7 +225,7 @@ The skill includes comprehensive diagnostics, automated repair sequences, and de
3. Or use a different port: 3. Or use a different port:
```bash ```bash
export CLAUDE_MEM_WORKER_PORT=38000 export CLAUDE_MEM_WORKER_PORT=38000
npm run worker:restart claude-mem restart
``` ```
4. Verify new port: 4. Verify new port:
@@ -282,7 +282,7 @@ The skill includes comprehensive diagnostics, automated repair sequences, and de
4. Restart worker: 4. Restart worker:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
## Hook Issues ## Hook Issues
@@ -644,7 +644,7 @@ The skill includes comprehensive diagnostics, automated repair sequences, and de
2. Restart worker: 2. Restart worker:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
3. Clean up old data (see "Database Too Large" above) 3. Clean up old data (see "Database Too Large" above)
@@ -721,7 +721,7 @@ The skill includes comprehensive diagnostics, automated repair sequences, and de
```bash ```bash
export DEBUG=claude-mem:* export DEBUG=claude-mem:*
npm run worker:restart claude-mem restart
npm run worker:logs npm run worker:logs
``` ```
@@ -781,7 +781,7 @@ SELECT created_at, tool_name FROM observations ORDER BY created_at DESC LIMIT 10
**Cause**: Worker not running or port mismatch. **Cause**: Worker not running or port mismatch.
**Solution**: Restart worker with `npm run worker:restart`. **Solution**: Restart worker with `claude-mem restart`.
### "Database is locked" ### "Database is locked"
+1 -1
View File
@@ -86,7 +86,7 @@ npm run worker:start
npm run worker:stop npm run worker:stop
# Restart worker service # Restart worker service
npm run worker:restart claude-mem restart
# View worker logs # View worker logs
npm run worker:logs npm run worker:logs
+1 -1
View File
@@ -176,7 +176,7 @@ This design ensures that private content never reaches the database, search indi
1. Verify correct syntax: `<private>content</private>` 1. Verify correct syntax: `<private>content</private>`
2. Check `~/.claude-mem/silent.log` for errors 2. Check `~/.claude-mem/silent.log` for errors
3. Ensure worker is running: `npm run worker:status` 3. Ensure worker is running: `npm run worker:status`
4. Restart worker: `npm run worker:restart` 4. Restart worker: `claude-mem restart`
### Partial Content Stored ### Partial Content Stored
+1 -1
View File
@@ -364,7 +364,7 @@ If search isn't working, check the worker service:
```bash ```bash
npm run worker:status # Check worker status npm run worker:status # Check worker status
npm run worker:restart # Restart if needed claude-mem restart # Restart if needed
npm run worker:logs # View logs npm run worker:logs # View logs
``` ```
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -8,7 +8,7 @@ ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Obje
Available tools: ${Object.keys(hs).join(", ")}`}],isError:!0};let t=hs[e];return{content:[{type:"text",text:`# ${e} Parameters Available tools: ${Object.keys(hs).join(", ")}`}],isError:!0};let t=hs[e];return{content:[{type:"text",text:`# ${e} Parameters
${JSON.stringify(t,null,2)}`}]}}},{name:"search",description:'Search memory. All parameters optional - call get_schema("search") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.search;return await Rt(e,a)}},{name:"timeline",description:'Timeline context. All parameters optional - call get_schema("timeline") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.timeline;return await Rt(e,a)}},{name:"get_recent_context",description:'Recent context. All parameters optional - call get_schema("get_recent_context") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.get_recent_context;return await Rt(e,a)}},{name:"get_context_timeline",description:"Timeline around observation ID",inputSchema:{type:"object",properties:{anchor:{type:"number",description:'Observation ID (required). Optional params: get_schema("get_context_timeline")'}},required:["anchor"],additionalProperties:!0},handler:async a=>{let e=wt.get_context_timeline;return await Rt(e,a)}},{name:"help",description:'Get detailed docs. All parameters optional - call get_schema("help") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.help;return await Rt(e,a)}},{name:"get_observation",description:"Fetch observation by ID",inputSchema:{type:"object",properties:{id:{type:"number",description:"Observation ID (required)"}},required:["id"]},handler:async a=>await ps("/api/observation",a.id)},{name:"get_observations",description:"Batch fetch observations",inputSchema:{type:"object",properties:{ids:{type:"array",items:{type:"number"},description:'Array of observation IDs (required). Optional params: get_schema("get_observations")'}},required:["ids"],additionalProperties:!0},handler:async a=>await Md("/api/observations/batch",a)},{name:"get_session",description:"Fetch session by ID",inputSchema:{type:"object",properties:{id:{type:"number",description:"Session ID (required)"}},required:["id"]},handler:async a=>await ps("/api/session",a.id)},{name:"get_prompt",description:"Fetch prompt by ID",inputSchema:{type:"object",properties:{id:{type:"number",description:"Prompt ID (required)"}},required:["id"]},handler:async a=>await ps("/api/prompt",a.id)}],ms=new ca({name:"mem-search-server",version:"1.0.0"},{capabilities:{tools:{}}});ms.setRequestHandler(Ca,async()=>({tools:_i.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema}))}));ms.setRequestHandler($a,async a=>{let e=_i.find(t=>t.name===a.params.name);if(!e)throw new Error(`Unknown tool: ${a.params.name}`);try{return await e.handler(a.params.arguments||{})}catch(t){return{content:[{type:"text",text:`Tool execution failed: ${t.message}`}],isError:!0}}});async function Ei(){me.info("SYSTEM","MCP server shutting down"),process.exit(0)}process.on("SIGTERM",Ei);process.on("SIGINT",Ei);async function qd(){let a=new da;await ms.connect(a),me.info("SYSTEM","Claude-mem search server started"),setTimeout(async()=>{await Fd()?me.info("SYSTEM","Worker available",void 0,{workerUrl:ct}):(me.warn("SYSTEM","Worker not available",void 0,{workerUrl:ct}),me.warn("SYSTEM","Tools will fail until Worker is started"),me.warn("SYSTEM","Start Worker with: npm run worker:restart"))},0)}qd().catch(a=>{me.error("SYSTEM","Fatal error",void 0,a),process.exit(1)}); ${JSON.stringify(t,null,2)}`}]}}},{name:"search",description:'Search memory. All parameters optional - call get_schema("search") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.search;return await Rt(e,a)}},{name:"timeline",description:'Timeline context. All parameters optional - call get_schema("timeline") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.timeline;return await Rt(e,a)}},{name:"get_recent_context",description:'Recent context. All parameters optional - call get_schema("get_recent_context") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.get_recent_context;return await Rt(e,a)}},{name:"get_context_timeline",description:"Timeline around observation ID",inputSchema:{type:"object",properties:{anchor:{type:"number",description:'Observation ID (required). Optional params: get_schema("get_context_timeline")'}},required:["anchor"],additionalProperties:!0},handler:async a=>{let e=wt.get_context_timeline;return await Rt(e,a)}},{name:"help",description:'Get detailed docs. All parameters optional - call get_schema("help") for details',inputSchema:{type:"object",properties:{},additionalProperties:!0},handler:async a=>{let e=wt.help;return await Rt(e,a)}},{name:"get_observation",description:"Fetch observation by ID",inputSchema:{type:"object",properties:{id:{type:"number",description:"Observation ID (required)"}},required:["id"]},handler:async a=>await ps("/api/observation",a.id)},{name:"get_observations",description:"Batch fetch observations",inputSchema:{type:"object",properties:{ids:{type:"array",items:{type:"number"},description:'Array of observation IDs (required). Optional params: get_schema("get_observations")'}},required:["ids"],additionalProperties:!0},handler:async a=>await Md("/api/observations/batch",a)},{name:"get_session",description:"Fetch session by ID",inputSchema:{type:"object",properties:{id:{type:"number",description:"Session ID (required)"}},required:["id"]},handler:async a=>await ps("/api/session",a.id)},{name:"get_prompt",description:"Fetch prompt by ID",inputSchema:{type:"object",properties:{id:{type:"number",description:"Prompt ID (required)"}},required:["id"]},handler:async a=>await ps("/api/prompt",a.id)}],ms=new ca({name:"mem-search-server",version:"1.0.0"},{capabilities:{tools:{}}});ms.setRequestHandler(Ca,async()=>({tools:_i.map(a=>({name:a.name,description:a.description,inputSchema:a.inputSchema}))}));ms.setRequestHandler($a,async a=>{let e=_i.find(t=>t.name===a.params.name);if(!e)throw new Error(`Unknown tool: ${a.params.name}`);try{return await e.handler(a.params.arguments||{})}catch(t){return{content:[{type:"text",text:`Tool execution failed: ${t.message}`}],isError:!0}}});async function Ei(){me.info("SYSTEM","MCP server shutting down"),process.exit(0)}process.on("SIGTERM",Ei);process.on("SIGINT",Ei);async function qd(){let a=new da;await ms.connect(a),me.info("SYSTEM","Claude-mem search server started"),setTimeout(async()=>{await Fd()?me.info("SYSTEM","Worker available",void 0,{workerUrl:ct}):(me.warn("SYSTEM","Worker not available",void 0,{workerUrl:ct}),me.warn("SYSTEM","Tools will fail until Worker is started"),me.warn("SYSTEM","Start Worker with: claude-mem restart"))},0)}qd().catch(a=>{me.error("SYSTEM","Fatal error",void 0,a),process.exit(1)});
/*! Bundled license information: /*! Bundled license information:
uri-js/dist/es5/uri.all.js: uri-js/dist/es5/uri.all.js:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -288,7 +288,7 @@ npm run worker:status
If the worker is stopped, restart it: If the worker is stopped, restart it:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
``` ```
@@ -44,7 +44,7 @@ npm run worker:status
```bash ```bash
cd ~/.claude/plugins/marketplaces/thedotmack/ && \ cd ~/.claude/plugins/marketplaces/thedotmack/ && \
npm install && \ npm install && \
npm run worker:restart claude-mem restart
``` ```
## Fix: Stale PID File ## Fix: Stale PID File
@@ -70,7 +70,7 @@ curl -s http://127.0.0.1:37777/health
mkdir -p ~/.claude-mem && \ mkdir -p ~/.claude-mem && \
echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json && \ echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json && \
cd ~/.claude/plugins/marketplaces/thedotmack/ && \ cd ~/.claude/plugins/marketplaces/thedotmack/ && \
npm run worker:restart && \ claude-mem restart && \
sleep 2 && \ sleep 2 && \
curl -s http://127.0.0.1:37778/health curl -s http://127.0.0.1:37778/health
``` ```
@@ -86,7 +86,7 @@ curl -s http://127.0.0.1:37778/health
cp ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.backup && \ cp ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.backup && \
sqlite3 ~/.claude-mem/claude-mem.db "PRAGMA integrity_check;" && \ sqlite3 ~/.claude-mem/claude-mem.db "PRAGMA integrity_check;" && \
cd ~/.claude/plugins/marketplaces/thedotmack/ && \ cd ~/.claude/plugins/marketplaces/thedotmack/ && \
npm run worker:restart claude-mem restart
``` ```
**If integrity check fails, recreate database:** **If integrity check fails, recreate database:**
@@ -94,7 +94,7 @@ npm run worker:restart
# WARNING: This deletes all memory data # WARNING: This deletes all memory data
mv ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.old && \ mv ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.old && \
cd ~/.claude/plugins/marketplaces/thedotmack/ && \ cd ~/.claude/plugins/marketplaces/thedotmack/ && \
npm run worker:restart claude-mem restart
``` ```
## Fix: Clean Reinstall ## Fix: Clean Reinstall
@@ -135,7 +135,7 @@ find ~/.claude-mem/logs/ -name "worker-*.log" -mtime +7 -delete
# Restart worker for fresh log # Restart worker for fresh log
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
``` ```
**Note:** Logs auto-rotate daily, manual cleanup rarely needed. **Note:** Logs auto-rotate daily, manual cleanup rarely needed.
@@ -29,7 +29,7 @@ Quick fixes for frequently encountered claude-mem problems.
3. Restart worker and start new session: 3. Restart worker and start new session:
```bash ```bash
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
``` ```
4. Create a test observation: `/skill version-bump` then cancel 4. Create a test observation: `/skill version-bump` then cancel
@@ -173,7 +173,7 @@ Quick fixes for frequently encountered claude-mem problems.
4. If FTS5 out of sync, restart worker (triggers reindex): 4. If FTS5 out of sync, restart worker (triggers reindex):
```bash ```bash
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
``` ```
## Issue: Port Conflicts ## Issue: Port Conflicts
@@ -194,7 +194,7 @@ Quick fixes for frequently encountered claude-mem problems.
mkdir -p ~/.claude-mem mkdir -p ~/.claude-mem
echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
``` ```
## Issue: Database Corrupted ## Issue: Database Corrupted
@@ -219,7 +219,7 @@ Quick fixes for frequently encountered claude-mem problems.
```bash ```bash
rm ~/.claude-mem/claude-mem.db rm ~/.claude-mem/claude-mem.db
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
# Worker will create new database # Worker will create new database
``` ```
@@ -173,7 +173,7 @@ If FTS5 counts don't match, triggers may have failed. Restart worker to rebuild:
```bash ```bash
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
``` ```
The worker will rebuild FTS5 indexes on startup if they're out of sync. The worker will rebuild FTS5 indexes on startup if they're out of sync.
@@ -263,7 +263,7 @@ sqlite3 ~/.claude-mem/claude-mem.db "SELECT COUNT(*) FROM observations;"
```bash ```bash
mv ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.archive mv ~/.claude-mem/claude-mem.db ~/.claude-mem/claude-mem.db.archive
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
``` ```
## Database Recovery ## Database Recovery
@@ -13,7 +13,7 @@ npm run worker:status
npm run worker:start npm run worker:start
# Restart worker # Restart worker
npm run worker:restart claude-mem restart
# Stop worker # Stop worker
npm run worker:stop npm run worker:stop
@@ -152,7 +152,7 @@ npm run worker:start
```bash ```bash
# Restart worker (stops and starts) # Restart worker (stops and starts)
cd ~/.claude/plugins/marketplaces/thedotmack/ cd ~/.claude/plugins/marketplaces/thedotmack/
npm run worker:restart claude-mem restart
# Or manually stop and start # Or manually stop and start
npm run worker:stop npm run worker:stop
@@ -219,7 +219,7 @@ npm run worker:start
**Port conflict:** **Port conflict:**
```bash ```bash
echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json
npm run worker:restart claude-mem restart
``` ```
**Stale PID file:** **Stale PID file:**
@@ -261,14 +261,14 @@ If fails, backup and recreate database.
**Out of memory:** **Out of memory:**
Check if database is too large or memory leak. Restart: Check if database is too large or memory leak. Restart:
```bash ```bash
npm run worker:restart claude-mem restart
``` ```
**Port conflict race condition:** **Port conflict race condition:**
Another process grabbing port intermittently. Change port: Another process grabbing port intermittently. Change port:
```bash ```bash
echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json echo '{"CLAUDE_MEM_WORKER_PORT":"37778"}' > ~/.claude-mem/settings.json
npm run worker:restart claude-mem restart
``` ```
## Worker Management Commands ## Worker Management Commands
@@ -284,7 +284,7 @@ npm run worker:start
npm run worker:stop npm run worker:stop
# Restart worker # Restart worker
npm run worker:restart claude-mem restart
# View logs # View logs
npm run worker:logs npm run worker:logs
@@ -355,7 +355,7 @@ All should return appropriate responses (HTML for viewer, JSON for APIs).
|---------|---------|----------------| |---------|---------|----------------|
| Check if running | `npm run worker:status` | Shows PID and uptime | | Check if running | `npm run worker:status` | Shows PID and uptime |
| Worker not running | `npm run worker:start` | Worker starts successfully | | Worker not running | `npm run worker:start` | Worker starts successfully |
| Worker crashed | `npm run worker:restart` | Worker restarts | | Worker crashed | `claude-mem restart` | Worker restarts |
| View recent errors | `grep -i error ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log \| tail -20` | Shows recent errors | | View recent errors | `grep -i error ~/.claude-mem/logs/worker-$(date +%Y-%m-%d).log \| tail -20` | Shows recent errors |
| Port in use | `lsof -i :37777` | Shows process using port | | Port in use | `lsof -i :37777` | Shows process using port |
| Stale PID | `rm ~/.claude-mem/worker.pid && npm run worker:start` | Removes stale PID and starts | | Stale PID | `rm ~/.claude-mem/worker.pid && npm run worker:start` | Removes stale PID and starts |
+1 -1
View File
@@ -496,7 +496,7 @@ async function main() {
if (!workerAvailable) { if (!workerAvailable) {
logger.warn('SYSTEM', 'Worker not available', undefined, { workerUrl: WORKER_BASE_URL }); logger.warn('SYSTEM', 'Worker not available', undefined, { workerUrl: WORKER_BASE_URL });
logger.warn('SYSTEM', 'Tools will fail until Worker is started'); logger.warn('SYSTEM', 'Tools will fail until Worker is started');
logger.warn('SYSTEM', 'Start Worker with: npm run worker:restart'); logger.warn('SYSTEM', 'Start Worker with: claude-mem restart');
} else { } else {
logger.info('SYSTEM', 'Worker available', undefined, { workerUrl: WORKER_BASE_URL }); logger.info('SYSTEM', 'Worker available', undefined, { workerUrl: WORKER_BASE_URL });
} }
+2 -16
View File
@@ -24,18 +24,6 @@ export function getWorkerRestartInstructions(
actualError actualError
} = options; } = options;
const isWindows = process.platform === 'win32';
// Platform-specific directory paths
const pluginDir = isWindows
? '%USERPROFILE%\\.claude\\plugins\\marketplaces\\thedotmack'
: '~/.claude/plugins/marketplaces/thedotmack';
// Platform-specific terminal name
const terminal = isWindows
? 'Command Prompt or PowerShell'
: 'Terminal';
// Build error message // Build error message
const prefix = customPrefix || 'Worker service connection failed.'; const prefix = customPrefix || 'Worker service connection failed.';
const portInfo = port ? ` (port ${port})` : ''; const portInfo = port ? ` (port ${port})` : '';
@@ -43,10 +31,8 @@ export function getWorkerRestartInstructions(
let message = `${prefix}${portInfo}\n\n`; let message = `${prefix}${portInfo}\n\n`;
message += `To restart the worker:\n`; message += `To restart the worker:\n`;
message += `1. Exit Claude Code completely\n`; message += `1. Exit Claude Code completely\n`;
message += `2. Open ${terminal}\n`; message += `2. Run: claude-mem restart\n`;
message += `3. Navigate to: ${pluginDir}\n`; message += `3. Restart Claude Code`;
message += `4. Run: npm run worker:restart\n`;
message += `5. Restart Claude Code`;
if (includeSkillFallback) { if (includeSkillFallback) {
message += `\n\nIf that doesn't work, try: /troubleshoot`; message += `\n\nIf that doesn't work, try: /troubleshoot`;
@@ -48,7 +48,7 @@ describe('Hook Error Logging', () => {
handleFetchError(mockResponse, errorText, context); handleFetchError(mockResponse, errorText, context);
} catch (error: any) { } catch (error: any) {
expect(error.message).toContain('Failed Observation storage for Bash'); expect(error.message).toContain('Failed Observation storage for Bash');
expect(error.message).toContain('npm run worker:restart'); expect(error.message).toContain('claude-mem restart');
} }
}); });
@@ -119,7 +119,7 @@ describe('Hook Error Logging', () => {
expect(() => { expect(() => {
handleWorkerError(connError); handleWorkerError(connError);
}).toThrow('npm run worker:restart'); }).toThrow('claude-mem restart');
}); });
it('re-throws non-connection errors unchanged', () => { it('re-throws non-connection errors unchanged', () => {
@@ -130,7 +130,7 @@ describe('Hook Error Logging', () => {
expect.fail('Should have thrown'); expect.fail('Should have thrown');
} catch (error: any) { } catch (error: any) {
expect(error.message).toBe('Something went wrong'); expect(error.message).toBe('Something went wrong');
expect(error.message).not.toContain('npm run worker:restart'); expect(error.message).not.toContain('claude-mem restart');
} }
}); });
@@ -227,7 +227,7 @@ describe('Hook Error Logging', () => {
handleFetchError(mockResponse, 'error', context); handleFetchError(mockResponse, 'error', context);
} catch (error: any) { } catch (error: any) {
// Must include restart command // Must include restart command
expect(error.message).toMatch(/npm run worker:restart/); expect(error.message).toMatch(/claude-mem restart/);
// Must be user-facing (no technical jargon) // Must be user-facing (no technical jargon)
expect(error.message).not.toContain('ECONNREFUSED'); expect(error.message).not.toContain('ECONNREFUSED');