Full sync - all projects, memory, configs

This commit is contained in:
2026-03-21 20:27:59 -05:00
parent 2447677d4a
commit b33de10902
395 changed files with 1635300 additions and 459211 deletions

View File

@ -0,0 +1,99 @@
#!/usr/bin/env python3
"""
Extract the last N assistant turns from a session JSONL file and format them for auto-memory-hook.py
"""
import json
import sys
import subprocess
from datetime import datetime
def extract_assistant_turns(jsonl_file, limit=10):
"""Extract assistant turns with their preceding user messages"""
turns = []
try:
with open(jsonl_file, 'r') as f:
lines = f.readlines()
messages = []
for line in lines:
try:
data = json.loads(line.strip())
if data.get('type') == 'message' and 'message' in data:
messages.append(data['message'])
except json.JSONDecodeError:
continue
# Find user messages and collect all subsequent assistant responses
last_user_message = None
for msg in messages:
if msg.get('role') == 'user':
last_user_message = msg
elif msg.get('role') == 'assistant' and last_user_message:
# Extract user text
user_text = ""
if last_user_message.get('content'):
for content in last_user_message['content']:
if content.get('type') == 'text':
user_text += content.get('text', '')
# Extract assistant text
assistant_text = ""
if msg.get('content'):
for content in msg['content']:
if content.get('type') == 'text':
assistant_text += content.get('text', '')
if user_text.strip() and assistant_text.strip():
turns.append({
'user': user_text.strip(),
'assistant': assistant_text.strip(),
'agent_id': 'case',
'session': 'main'
})
# Don't reset last_user_message to allow multiple assistant responses
# Return last N turns
return turns[-limit:] if len(turns) > limit else turns
except Exception as e:
print(f"Error processing file: {e}", file=sys.stderr)
return []
def main():
if len(sys.argv) < 2:
print("Usage: python3 extract-assistant-turns.py <session_file.jsonl> [limit]")
sys.exit(1)
jsonl_file = sys.argv[1]
limit = int(sys.argv[2]) if len(sys.argv) > 2 else 10
turns = extract_assistant_turns(jsonl_file, limit)
if not turns:
print(f"No assistant turns found in {jsonl_file}")
sys.exit(1)
print(f"Found {len(turns)} assistant turns, processing through auto-memory-hook.py...")
# Pipe each turn to auto-memory-hook.py
for turn in turns:
try:
result = subprocess.run([
'python3', '/home/wdjones/.openclaw/workspace/tools/auto-memory-hook.py'
], input=json.dumps(turn), text=True, capture_output=True)
if result.returncode != 0:
print(f"Error processing turn: {result.stderr}", file=sys.stderr)
else:
print(f"✓ Processed turn: {turn['user'][:50]}...")
except Exception as e:
print(f"Error running auto-memory-hook.py: {e}", file=sys.stderr)
print(f"Completed processing {len(turns)} turns")
if __name__ == '__main__':
main()