================================================================================ ClaudeTools Recall Endpoint - Manual Deployment Steps ================================================================================ STEP 1: Copy file to RMM server -------------------------------- Run this command in PowerShell: pscp D:\ClaudeTools\api\routers\conversation_contexts.py guru@172.16.3.30:/tmp/conversation_contexts.py Enter password when prompted. Expected output: "conversation_contexts.py | 9 kB | 9.x kB/s | ETA: 00:00:00 | 100%" STEP 2: Connect to RMM server via SSH -------------------------------------- Run: plink guru@172.16.3.30 Enter password when prompted. You should see: guru@gururmm:~$ STEP 3: Move file to production location ----------------------------------------- In the SSH session, run: sudo mv /tmp/conversation_contexts.py /opt/claudetools/api/routers/conversation_contexts.py Enter sudo password when prompted. STEP 4: Fix file ownership --------------------------- In the SSH session, run: sudo chown claudetools:claudetools /opt/claudetools/api/routers/conversation_contexts.py STEP 5: Verify file was updated -------------------------------- In the SSH session, run: grep -c "search_term.*Query" /opt/claudetools/api/routers/conversation_contexts.py Expected output: "1" (or higher) = NEW CODE DEPLOYED If output is "0" = OLD CODE STILL PRESENT (something went wrong) STEP 6: Restart API service ---------------------------- In the SSH session, run: sudo systemctl restart claudetools-api Wait 5 seconds, then check status: sudo systemctl status claudetools-api --no-pager | head -15 Look for "Active: active (running)" with a RECENT timestamp (today's date). STEP 7: Exit SSH ---------------- Type: exit STEP 8: Test the API -------------------- Back in PowerShell, run: python -c "import requests; jwt='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJpbXBvcnQtc2NyaXB0Iiwic2NvcGVzIjpbImFkbWluIiwiaW1wb3J0Il0sImV4cCI6MTc3MTI3NTEyOX0.-DJF50tq0MaNwVQBdO7cGYNuO5pQuXte-tTj5DpHi2U'; r=requests.get('http://172.16.3.30:8001/api/conversation-contexts/recall', headers={'Authorization': f'Bearer {jwt}'}, params={'search_term': 'dataforth', 'limit': 2}); print(f'Status: {r.status_code}'); print(f'Keys: {list(r.json().keys())}'); print('[SUCCESS] NEW CODE!' if 'contexts' in r.json() else '[FAILED] Still old code'); print(f'Found {len(r.json().get(\"contexts\", []))} contexts' if 'contexts' in r.json() else '')" Expected output if successful: Status: 200 Keys: ['total', 'limit', 'search_term', 'project_id', 'tags', 'min_relevance_score', 'contexts'] [SUCCESS] NEW CODE! Found 2 contexts Expected output if failed: Status: 200 Keys: ['context', 'project_id', 'tags', 'limit', 'min_relevance_score'] [FAILED] Still old code ================================================================================ QUICK REFERENCE COMMANDS ================================================================================ Copy file: pscp D:\ClaudeTools\api\routers\conversation_contexts.py guru@172.16.3.30:/tmp/conversation_contexts.py SSH to RMM: plink guru@172.16.3.30 Deploy on RMM (in SSH session): sudo mv /tmp/conversation_contexts.py /opt/claudetools/api/routers/conversation_contexts.py sudo chown claudetools:claudetools /opt/claudetools/api/routers/conversation_contexts.py grep -c "search_term.*Query" /opt/claudetools/api/routers/conversation_contexts.py sudo systemctl restart claudetools-api sudo systemctl status claudetools-api --no-pager | head -15 exit Test (in PowerShell): python -c "import requests; r=requests.get('http://172.16.3.30:8001/api/conversation-contexts/recall', headers={'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJpbXBvcnQtc2NyaXB0Iiwic2NvcGVzIjpbImFkbWluIiwiaW1wb3J0Il0sImV4cCI6MTc3MTI3NTEyOX0.-DJF50tq0MaNwVQBdO7cGYNuO5pQuXte-tTj5DpHi2U'}, params={'search_term': 'dataforth', 'limit': 2}); print('SUCCESS!' if 'contexts' in r.json() else 'FAILED - still old format')" ================================================================================ TROUBLESHOOTING ================================================================================ If test shows "FAILED - still old format": 1. Check if file was actually copied: ls -lh /tmp/conversation_contexts.py 2. Check if file was moved: ls -lh /opt/claudetools/api/routers/conversation_contexts.py 3. Verify new code: grep "search_term" /opt/claudetools/api/routers/conversation_contexts.py 4. Check service restarted: sudo systemctl status claudetools-api 5. Try restarting again: sudo systemctl restart claudetools-api If API returns 401 Unauthorized: - JWT token may have expired, but should be valid until 2026-02-16 If API is unreachable: - Check service status: sudo systemctl status claudetools-api - Check firewall: sudo ufw status - Check API logs: sudo journalctl -u claudetools-api -n 50 ================================================================================ Generated: 2026-01-18 Local File: D:\ClaudeTools\api\routers\conversation_contexts.py Target Server: guru@172.16.3.30 Target Path: /opt/claudetools/api/routers/conversation_contexts.py ================================================================================