Fresh start - excluded large ROM JSON files
This commit is contained in:
188
skills/memory-worker/SKILL.md
Normal file
188
skills/memory-worker/SKILL.md
Normal file
@@ -0,0 +1,188 @@
|
||||
# Memory Worker Skill
|
||||
|
||||
Version: 2.0 (2026-03-01 Update)
|
||||
|
||||
## Purpose
|
||||
Extract important information from daily notes and store it in structured SQLite database.
|
||||
|
||||
## CRITICAL: Schema Correction (2026.2.26+ Security)
|
||||
|
||||
The generated script MUST have correct SQLite schema. Check for these issues:
|
||||
|
||||
### FIXED Schema for memory_cells
|
||||
**7 columns including updated_at:**
|
||||
```python
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS memory_cells (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
scene TEXT,
|
||||
cell_type TEXT,
|
||||
salience INTEGER,
|
||||
content TEXT,
|
||||
source_file TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
```
|
||||
|
||||
**INSERT must include all 7 columns:**
|
||||
```python
|
||||
cursor.execute('''
|
||||
INSERT INTO memory_cells (scene, cell_type, salience, content, source_file, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (scene, cell_type, salience, content, source_file, timestamp, timestamp))
|
||||
```
|
||||
|
||||
### FIXED Schema for scenes
|
||||
**6 columns including high_salience_count:**
|
||||
```python
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS scenes (
|
||||
scene TEXT PRIMARY KEY,
|
||||
summary TEXT,
|
||||
item_count INTEGER DEFAULT 0,
|
||||
high_salience_count INTEGER DEFAULT 0,
|
||||
created_at TEXT,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
```
|
||||
|
||||
**INSERT/UPDATE must include high_salience_count:**
|
||||
```python
|
||||
cursor.execute('''
|
||||
INSERT OR REPLACE INTO scenes (scene, summary, item_count, high_salience_count, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
''', (scene, summary, count, high_salience, timestamp, timestamp))
|
||||
```
|
||||
|
||||
### FIXED Icon Characters (No Unicode Emoji)
|
||||
Use simple characters, not emojis:
|
||||
- Task: `[x]` not `✅`
|
||||
- Maintenance: `[w]` not `🔧`
|
||||
- Heartbeat: `[h]` not `💓`
|
||||
- Note: `[n]` not `📝`
|
||||
|
||||
## Updated Template
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
import sqlite3
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
# Configuration
|
||||
DB_PATH = os.path.expanduser("~/.openclaw/memory.db")
|
||||
SOURCE_FILE = "YYYY-MM-DD.md"
|
||||
SCENE = "YYYY-MM-DD"
|
||||
|
||||
def init_db():
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# FIXED: Include updated_at column
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS memory_cells (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
scene TEXT,
|
||||
cell_type TEXT,
|
||||
salience INTEGER,
|
||||
content TEXT,
|
||||
source_file TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
|
||||
# FIXED: Include high_salience_count column
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS scenes (
|
||||
scene TEXT PRIMARY KEY,
|
||||
summary TEXT,
|
||||
item_count INTEGER DEFAULT 0,
|
||||
high_salience_count INTEGER DEFAULT 0,
|
||||
created_at TEXT,
|
||||
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
|
||||
conn.commit()
|
||||
return conn
|
||||
|
||||
def insert_cells(conn):
|
||||
cursor = conn.cursor()
|
||||
timestamp = datetime.now().isoformat()
|
||||
|
||||
# Extract cells from daily note
|
||||
cells = [
|
||||
(SCENE, 'task', 5, 'High priority task description...'),
|
||||
(SCENE, 'maintenance', 4, 'Maintenance activity description...'),
|
||||
# ... more cells
|
||||
]
|
||||
|
||||
count = 0
|
||||
for scene, cell_type, salience, content in cells:
|
||||
# FIXED: Include updated_at column
|
||||
cursor.execute('''
|
||||
INSERT INTO memory_cells (scene, cell_type, salience, content, source_file, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
''', (scene, cell_type, salience, content, SOURCE_FILE, timestamp, timestamp))
|
||||
count += 1
|
||||
|
||||
high_salience = sum(1 for _, _, salience, _ in cells if salience >= 4)
|
||||
summary = 'Generated scene summary'
|
||||
|
||||
# FIXED: Include high_salience_count
|
||||
cursor.execute('''
|
||||
INSERT OR REPLACE INTO scenes (scene, summary, item_count, high_salience_count, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
''', (SCENE, summary, count, high_salience, timestamp, timestamp))
|
||||
|
||||
conn.commit()
|
||||
return count
|
||||
|
||||
def generate_report(conn):
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT cell_type, COUNT(*) FROM memory_cells WHERE source_file = ? GROUP BY cell_type', (SOURCE_FILE,))
|
||||
type_counts = cursor.fetchall()
|
||||
|
||||
cursor.execute('SELECT COUNT(*) FROM memory_cells')
|
||||
total = cursor.fetchone()[0]
|
||||
|
||||
cursor.execute('SELECT summary FROM scenes WHERE scene = ?', (SCENE,))
|
||||
summary = cursor.fetchone()
|
||||
|
||||
# FIXED: No Unicode emojis
|
||||
icons = {'task': '[x]', 'maintenance': '[w]', 'heartbeat': '[h]', 'note': '[n]'}
|
||||
|
||||
report = f"""[Memory Worker Daily] - {SCENE}\n\n**Files Processed:** {SOURCE_FILE}\n"""
|
||||
for cell_type, cnt in type_counts:
|
||||
icon = icons.get(cell_type, '[*]')
|
||||
report += f"{icon} {cell_type}: {cnt}\n"
|
||||
|
||||
report += f"\n**Summary:**\n{summary[0] if summary else 'N/A'}\n\n**Total:** {total} cells"
|
||||
return report
|
||||
|
||||
def main():
|
||||
conn = init_db()
|
||||
count = insert_cells(conn)
|
||||
report = generate_report(conn)
|
||||
conn.close()
|
||||
print(report)
|
||||
print(f"Successfully inserted {count} cells")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
## Testing
|
||||
Before generating:
|
||||
1. Verify schema columns match table creation
|
||||
2. Verify INSERT contains all columns
|
||||
3. Verify no Unicode emojis
|
||||
4. Test run locally before committing
|
||||
|
||||
## History
|
||||
- 2026-03-01: Fixed schema mismatch (added updated_at and high_salience_count columns)
|
||||
- 2026-02-20: Initial version
|
||||
Reference in New Issue
Block a user