#!/usr/bin/env python3 """ Helper script for AI Self-Improvement Digest. Usage: python3 generate_digest.py --check-posted python3 generate_digest.py --add-posted <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()