Files

148 lines
4.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Helper script for AI Self-Improvement Digest.
Usage:
python3 generate_digest.py --check-posted <url>
python3 generate_digest.py --add-posted <url> <title> <topic>
python3 generate_digest.py --add-experiment <date> <from_article> <experiment>
python3 generate_digest.py --list-experiments
"""
import json
import argparse
import sys
from datetime import datetime
from pathlib import Path
def get_tracking_file():
"""Get path to tracking file."""
workspace = Path.home() / ".openclaw" / "workspace"
memory_dir = workspace / "memory"
memory_dir.mkdir(parents=True, exist_ok=True)
return memory_dir / "ai-digest-posted.json"
def load_tracking():
"""Load tracking data from file."""
tracking_file = get_tracking_file()
if tracking_file.exists():
with open(tracking_file, 'r') as f:
return json.load(f)
return {
"posted": [],
"experiments": [],
"skillsEvaluated": [],
"setupChanges": []
}
def save_tracking(data):
"""Save tracking data to file."""
tracking_file = get_tracking_file()
with open(tracking_file, 'w') as f:
json.dump(data, f, indent=2)
def is_posted(url):
"""Check if URL has already been posted."""
data = load_tracking()
for item in data.get("posted", []):
if item.get("url") == url:
return True
return False
def add_posted(url, title, topic):
"""Add a posted item to tracking."""
data = load_tracking()
data["posted"].append({
"date": datetime.now().isoformat(),
"url": url,
"title": title,
"topic": topic
})
save_tracking(data)
print(f"Added: {title}")
def add_experiment(date, from_article, experiment, outcome="", learned=""):
"""Add an experiment to tracking."""
data = load_tracking()
data["experiments"].append({
"date": date,
"fromArticle": from_article,
"experiment": experiment,
"outcome": outcome,
"learned": learned
})
save_tracking(data)
print(f"Added experiment: {experiment}")
def list_experiments():
"""List all experiments."""
data = load_tracking()
experiments = data.get("experiments", [])
if not experiments:
print("No experiments recorded yet.")
return
print(f"\n{'Date':<12} {'From Article':<20} {'Experiment':<40}")
print("-" * 72)
for exp in experiments:
print(f"{exp.get('date', 'N/A'):<12} {exp.get('fromArticle', 'N/A')[:18]:<20} {exp.get('experiment', 'N/A')[:38]:<40}")
def main():
parser = argparse.ArgumentParser(description="AI Self-Improvement Digest Helper")
subparsers = parser.add_subparsers(dest="command", help="Commands")
# Check if URL is posted
check_parser = subparsers.add_parser("check-posted", help="Check if URL has been posted")
check_parser.add_argument("url", help="URL to check")
# Add posted item
add_parser = subparsers.add_parser("add-posted", help="Add a posted item")
add_parser.add_argument("url", help="Article URL")
add_parser.add_argument("title", help="Article title")
add_parser.add_argument("topic", help="Topic/category")
# Add experiment
exp_parser = subparsers.add_parser("add-experiment", help="Add an experiment")
exp_parser.add_argument("date", help="Date (YYYY-MM-DD)")
exp_parser.add_argument("from_article", help="Source article/topic")
exp_parser.add_argument("experiment", help="Description of experiment")
exp_parser.add_argument("--outcome", default="", help="Outcome of experiment")
exp_parser.add_argument("--learned", default="", help="What was learned")
# List experiments
subparsers.add_parser("list-experiments", help="List all experiments")
args = parser.parse_args()
if args.command == "check-posted":
if is_posted(args.url):
print("POSTED")
sys.exit(0)
else:
print("NOT_POSTED")
sys.exit(1)
elif args.command == "add-posted":
add_posted(args.url, args.title, args.topic)
elif args.command == "add-experiment":
add_experiment(args.date, args.from_article, args.experiment, args.outcome, args.learned)
elif args.command == "list-experiments":
list_experiments()
else:
parser.print_help()
if __name__ == "__main__":
main()