Initial sandbox buildout - Structure: projects, docs, inbox, archive, templates, scripts, tools - Tools: search.py, inbox-processor.py, daily-digest.py - Shell aliases and bashrc integration - Templates for projects and notes - MEMORY.md, TASKS.md, STRUCTURE.md - tmux config

This commit is contained in:
2026-01-30 23:14:35 -06:00
commit f18a1944d6
19 changed files with 828 additions and 0 deletions

64
tools/inbox-processor.py Executable file
View File

@ -0,0 +1,64 @@
#!/usr/bin/env python3
"""
Inbox processor - shows pending items and helps sort them.
"""
import os
from pathlib import Path
from datetime import datetime
WORKSPACE = Path("/home/wdjones/.openclaw/workspace")
INBOX = WORKSPACE / "inbox"
def list_inbox():
"""List all items in inbox."""
items = []
for fpath in INBOX.iterdir():
if fpath.is_file() and not fpath.name.startswith('.'):
stat = fpath.stat()
items.append({
'name': fpath.name,
'path': fpath,
'size': stat.st_size,
'modified': datetime.fromtimestamp(stat.st_mtime)
})
return sorted(items, key=lambda x: x['modified'], reverse=True)
def show_inbox():
"""Display inbox contents."""
items = list_inbox()
if not items:
print("📭 Inbox is empty")
return
print(f"📬 Inbox ({len(items)} items)\n")
for item in items:
age = datetime.now() - item['modified']
if age.days > 0:
age_str = f"{age.days}d ago"
elif age.seconds > 3600:
age_str = f"{age.seconds // 3600}h ago"
else:
age_str = f"{age.seconds // 60}m ago"
print(f" [{age_str}] {item['name']} ({item['size']} bytes)")
# Show quick-notes if exists
quick_notes = INBOX / "quick-notes.md"
if quick_notes.exists():
print("\n--- Quick Notes ---")
with open(quick_notes) as f:
content = f.read().strip()
if content:
print(content)
else:
print("(empty)")
if __name__ == "__main__":
show_inbox()