87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate cron job configuration for proactive research monitoring.
|
|
|
|
Outputs JSON that the agent can use with OpenClaw's cron tool.
|
|
Does NOT modify crontab directly.
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
|
|
from config import load_config, get_settings
|
|
|
|
SKILL_DIR = Path(__file__).parent.parent
|
|
MONITOR_SCRIPT = SKILL_DIR / "scripts" / "monitor.py"
|
|
DIGEST_SCRIPT = SKILL_DIR / "scripts" / "digest.py"
|
|
|
|
|
|
def generate_cron_config(settings: dict) -> dict:
|
|
"""Generate cron configuration as JSON for the agent."""
|
|
|
|
digest_day = settings.get("digest_day", "sunday")
|
|
digest_time = settings.get("digest_time", "18:00")
|
|
hour, minute = digest_time.split(":")
|
|
|
|
day_map = {
|
|
"sunday": "0", "monday": "1", "tuesday": "2", "wednesday": "3",
|
|
"thursday": "4", "friday": "5", "saturday": "6"
|
|
}
|
|
day_num = day_map.get(digest_day.lower(), "0")
|
|
|
|
return {
|
|
"jobs": [
|
|
{
|
|
"name": "topic-monitor-hourly",
|
|
"description": "Hourly topic check",
|
|
"schedule": "0 * * * *",
|
|
"command": f"cd {SKILL_DIR} && python3 {MONITOR_SCRIPT} --frequency hourly"
|
|
},
|
|
{
|
|
"name": "topic-monitor-daily",
|
|
"description": "Daily topic check (9 AM)",
|
|
"schedule": "0 9 * * *",
|
|
"command": f"cd {SKILL_DIR} && python3 {MONITOR_SCRIPT} --frequency daily"
|
|
},
|
|
{
|
|
"name": "topic-monitor-weekly",
|
|
"description": "Weekly topic check (Sunday 9 AM)",
|
|
"schedule": "0 9 * * 0",
|
|
"command": f"cd {SKILL_DIR} && python3 {MONITOR_SCRIPT} --frequency weekly"
|
|
},
|
|
{
|
|
"name": "topic-monitor-digest",
|
|
"description": f"Weekly digest ({digest_day} {digest_time})",
|
|
"schedule": f"{minute} {hour} * * {day_num}",
|
|
"command": f"cd {SKILL_DIR} && python3 {DIGEST_SCRIPT} --send"
|
|
}
|
|
],
|
|
"note": "Use these with OpenClaw's cron tool. Do NOT run setup_cron.py --auto."
|
|
}
|
|
|
|
|
|
def main():
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description="Generate cron config for topic monitoring")
|
|
parser.add_argument("--json", action="store_true", default=True, help="Output as JSON (default)")
|
|
|
|
parser.parse_args()
|
|
|
|
try:
|
|
config = load_config()
|
|
settings = get_settings()
|
|
except FileNotFoundError as e:
|
|
print(json.dumps({"error": str(e)}))
|
|
sys.exit(1)
|
|
|
|
result = generate_cron_config(settings)
|
|
print(json.dumps(result, indent=2))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|